diff --git a/testing/mochitest/Makefile.in b/testing/mochitest/Makefile.in index 0549e70b89ce..e4eedf120bfa 100644 --- a/testing/mochitest/Makefile.in +++ b/testing/mochitest/Makefile.in @@ -37,8 +37,11 @@ TEST_HARNESS_BINS += \ $(NULL) endif +# The fileid utility depends on mozglue. See bug 1069556. ifeq ($(OS_ARCH),Darwin) -TEST_HARNESS_BINS += fix_macosx_stack.py +TEST_HARNESS_BINS += \ + fix_macosx_stack.py \ + $(DLL_PREFIX)mozglue$(DLL_SUFFIX) endif ifeq ($(OS_ARCH),Linux) diff --git a/testing/tools/fileid/moz.build b/testing/tools/fileid/moz.build index a0a4c7c3fd31..b15641bf5879 100644 --- a/testing/tools/fileid/moz.build +++ b/testing/tools/fileid/moz.build @@ -21,9 +21,8 @@ if CONFIG['OS_ARCH'] == 'Darwin': if CONFIG['OS_ARCH'] == 'Linux' or CONFIG['OS_ARCH'] == 'Darwin': USE_LIBS += [ 'breakpad_common_s', - 'breakpad_logging', ] LOCAL_INCLUDES += [ '/toolkit/crashreporter/google-breakpad/src', ] - Program('fileid') + GeckoProgram('fileid', linkage=None) diff --git a/testing/xpcshell/selftest.py b/testing/xpcshell/selftest.py index e389e4b4713c..055b1d3cf48c 100644 --- a/testing/xpcshell/selftest.py +++ b/testing/xpcshell/selftest.py @@ -449,13 +449,15 @@ tail = """ + "\n".join(testlines)) - def assertTestResult(self, expected, shuffle=False, verbose=False): + def assertTestResult(self, expected, shuffle=False, verbose=False, + symbolsPath=None): """ Assert that self.x.runTests with manifest=self.manifest returns |expected|. """ self.assertEquals(expected, self.x.runTests(xpcshellBin, + symbolsPath=symbolsPath, manifest=self.manifest, mozInfo=mozinfo.info, shuffle=shuffle, @@ -525,6 +527,14 @@ tail = """ When an assertion is hit, we should produce a useful stack. """ + # Passing symbolsPath will cause the stack fixer to use + # fix_stack_using_bpsyms and exercise the fileid utility in + # this test. + symbolsPath = None + candidate_path = os.path.join(build_obj.distdir, 'crashreporter-symbols') + if os.path.isdir(candidate_path): + symbolsPath = candidate_path + self.writeFile("test_assert.js", ''' add_test(function test_asserts_immediately() { Components.classes["@mozilla.org/xpcom/debug;1"] @@ -535,8 +545,7 @@ tail = ''') self.writeManifest(["test_assert.js"]) - - self.assertTestResult(False) + self.assertTestResult(False, symbolsPath=symbolsPath) self.assertInLog("###!!! ASSERTION") log_lines = self.log.getvalue().splitlines() diff --git a/toolkit/crashreporter/Makefile.in b/toolkit/crashreporter/Makefile.in deleted file mode 100644 index e3a7555cec45..000000000000 --- a/toolkit/crashreporter/Makefile.in +++ /dev/null @@ -1,15 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -ifeq ($(OS_TARGET),Android) -# NDK5 workarounds -TARGET_LOCAL_INCLUDES = \ - -I$(topsrcdir)/toolkit/crashreporter/google-breakpad/src/common/android/include/ \ - $(NULL) -endif - -include $(topsrcdir)/config/rules.mk - -check:: - $(PYTHON) $(srcdir)/tools/unit-symbolstore.py diff --git a/toolkit/crashreporter/breakpad-logging/BreakpadLogging.cpp b/toolkit/crashreporter/breakpad-logging/BreakpadLogging.cpp deleted file mode 100644 index 03abdd3e5e6a..000000000000 --- a/toolkit/crashreporter/breakpad-logging/BreakpadLogging.cpp +++ /dev/null @@ -1,16 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "BreakpadLogging.h" - -#include - -namespace mozilla { - -// An output stream that acts like /dev/null and drops all output directed to it -// Passing 0 here causes the ostream to enter an error state, and so it silently -// drops all output directed to it. -std::ostream gNullStream(0); - -} // namespace mozilla diff --git a/toolkit/crashreporter/breakpad-logging/BreakpadLogging.h b/toolkit/crashreporter/breakpad-logging/BreakpadLogging.h deleted file mode 100644 index 7b77eb772f19..000000000000 --- a/toolkit/crashreporter/breakpad-logging/BreakpadLogging.h +++ /dev/null @@ -1,20 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#ifndef BreakpadLogging_h -#define BreakpadLogging_h - -#include - -namespace mozilla { - -// An output stream that acts like /dev/null and drops all output directed to it -extern std::ostream gNullStream; - -} // namespace mozilla - -// Override the breakpad info stream to disable INFO logs -#define BPLOG_INFO_STREAM mozilla::gNullStream - -#endif // BreakpadLogging_h diff --git a/toolkit/crashreporter/breakpad-logging/moz.build b/toolkit/crashreporter/breakpad-logging/moz.build deleted file mode 100644 index 7a791da217db..000000000000 --- a/toolkit/crashreporter/breakpad-logging/moz.build +++ /dev/null @@ -1,16 +0,0 @@ -# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*- -# vim: set filetype=python: -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -UNIFIED_SOURCES += [ - 'BreakpadLogging.cpp', -] - -Library('breakpad_logging') - -FINAL_LIBRARY = 'xul' - -with Files('**'): - BUG_COMPONENT = ('Toolkit', 'Breakpad Integration') diff --git a/toolkit/crashreporter/breakpad-patches/12-bug863475.patch b/toolkit/crashreporter/breakpad-patches/00-arm-exidx-rollup.patch similarity index 71% rename from toolkit/crashreporter/breakpad-patches/12-bug863475.patch rename to toolkit/crashreporter/breakpad-patches/00-arm-exidx-rollup.patch index fb11d0c29709..3ca5815d1db2 100644 --- a/toolkit/crashreporter/breakpad-patches/12-bug863475.patch +++ b/toolkit/crashreporter/breakpad-patches/00-arm-exidx-rollup.patch @@ -1,59 +1,42 @@ -# HG changeset patch -# User Julian Seward -# Date 1371190160 -7200 -# Fri Jun 14 08:09:20 2013 +0200 -# Node ID e74de3db7dd27ffda8f4772f892cfb52c5c35649 -# Parent 4dcd4220c31068e116d88a58e5b396fbb01719dd -Bug 863475 - integrate ARM EXIDX unwind parsing into Breakpad. r=glandium,ted - diff --git a/Makefile.am b/Makefile.am +index 42386be..e8f7402 100644 --- a/Makefile.am +++ b/Makefile.am -@@ -428,16 +428,18 @@ src_tools_linux_dump_syms_dump_syms_SOUR - src/common/dwarf_line_to_module.cc \ - src/common/language.cc \ - src/common/module.cc \ - src/common/stabs_reader.cc \ - src/common/stabs_to_module.cc \ +@@ -524,6 +524,8 @@ src_tools_linux_dump_syms_dump_syms_SOURCES = \ src/common/dwarf/bytereader.cc \ src/common/dwarf/dwarf2diehandler.cc \ src/common/dwarf/dwarf2reader.cc \ -+ src/common/arm_ex_reader.cc \ -+ src/common/arm_ex_to_module.cc \ ++ src/common/arm_ex_reader.cc \ ++ src/common/arm_ex_to_module.cc \ + src/common/linux/crc32.cc \ src/common/linux/dump_symbols.cc \ src/common/linux/elf_symbols_to_module.cc \ - src/common/linux/elfutils.cc \ - src/common/linux/file_id.cc \ - src/common/linux/linux_libc_support.cc \ - src/common/linux/memory_mapped_file.cc \ - src/common/linux/safe_readlink.cc \ - src/tools/linux/dump_syms/dump_syms.cc -@@ -1010,16 +1012,20 @@ EXTRA_DIST = \ - src/client/windows/handler/exception_handler.vcproj \ - src/client/windows/sender/crash_report_sender.cc \ - src/client/windows/sender/crash_report_sender.h \ - src/client/windows/sender/crash_report_sender.vcproj \ - src/common/convert_UTF.c \ - src/common/convert_UTF.h \ +@@ -573,6 +575,8 @@ src_tools_mac_dump_syms_dump_syms_CXXFLAGS= \ + -DHAVE_MACH_O_NLIST_H + + src_common_dumper_unittest_SOURCES = \ ++ src/common/arm_ex_reader.cc \ ++ src/common/arm_ex_to_module.cc \ + src/common/byte_cursor_unittest.cc \ + src/common/dwarf_cfi_to_module.cc \ + src/common/dwarf_cfi_to_module_unittest.cc \ +@@ -1336,6 +1340,10 @@ EXTRA_DIST = \ + src/common/linux/crc32.cc \ src/common/linux/dump_symbols.cc \ src/common/linux/dump_symbols.h \ -+ src/common/arm_ex_reader.cc \ -+ src/common/arm_ex_reader.h \ -+ src/common/arm_ex_to_module.cc \ -+ src/common/arm_ex_to_module.h \ ++ src/common/arm_ex_reader.cc \ ++ src/common/arm_ex_reader.h \ ++ src/common/arm_ex_to_module.cc \ ++ src/common/arm_ex_to_module.h \ src/common/linux/elf_symbols_to_module.cc \ src/common/linux/elf_symbols_to_module.h \ src/common/linux/elfutils.cc \ - src/common/linux/elfutils.h \ - src/common/linux/file_id.cc \ - src/common/linux/file_id.h \ - src/common/linux/guid_creator.cc \ - src/common/linux/guid_creator.h \ diff --git a/src/common/arm_ex_reader.cc b/src/common/arm_ex_reader.cc new file mode 100644 +index 0000000..2d1ed98 --- /dev/null +++ b/src/common/arm_ex_reader.cc -@@ -0,0 +1,502 @@ +@@ -0,0 +1,487 @@ + +/* libunwind - a platform-independent unwind library + Copyright 2011 Linaro Limited @@ -113,9 +96,9 @@ new file mode 100644 + + +#include "common/arm_ex_reader.h" -+#include "common/logging.h" + +#include ++#include + +// This file, in conjunction with arm_ex_to_module.cc, translates +// EXIDX unwind information into the same format that Breakpad uses @@ -172,8 +155,7 @@ new file mode 100644 +using google_breakpad::MemoryRange; + + -+static void* Prel31ToAddr(const void* addr) -+{ ++static void* Prel31ToAddr(const void* addr) { + uint32_t offset32 = *reinterpret_cast(addr); + // sign extend offset32[30:0] to 64 bits -- copy bit 30 to positions + // 63:31 inclusive. @@ -190,11 +172,10 @@ new file mode 100644 +// and return the number of bytes of |buf| written, along with a code +// indicating the outcome. + -+ExceptionTableInfo::ExExtractResult -+ExceptionTableInfo::ExtabEntryExtract(const struct exidx_entry* entry, -+ uint8_t* buf, size_t buf_size, -+ /*OUT*/size_t* buf_used) -+{ ++ExceptionTableInfo::ExExtractResult ExceptionTableInfo::ExtabEntryExtract( ++ const struct exidx_entry* entry, ++ uint8_t* buf, size_t buf_size, ++ size_t* buf_used) { + MemoryRange mr_out(buf, buf_size); + + *buf_used = 0; @@ -314,8 +295,7 @@ new file mode 100644 +// This reads from |buf[0, +data_size)|. It checks for overruns of +// the input buffer and returns a negative value if that happens, or +// for any other failure cases. It returns zero in case of success. -+int ExceptionTableInfo::ExtabEntryDecode(const uint8_t* buf, size_t buf_size) -+{ ++int ExceptionTableInfo::ExtabEntryDecode(const uint8_t* buf, size_t buf_size) { + if (buf == NULL || buf_size == 0) + return -1; + @@ -338,13 +318,11 @@ new file mode 100644 + // vsp = vsp + (xxxxxx << 2) + 4 + edata.cmd = ARM_EXIDX_CMD_ADD_TO_VSP; + edata.data = (((int)op & 0x3f) << 2) + 4; -+ } -+ else if ((op & 0xc0) == 0x40) { ++ } else if ((op & 0xc0) == 0x40) { + // vsp = vsp - (xxxxxx << 2) - 4 + edata.cmd = ARM_EXIDX_CMD_SUB_FROM_VSP; + edata.data = (((int)op & 0x3f) << 2) + 4; -+ } -+ else if ((op & 0xf0) == 0x80) { ++ } else if ((op & 0xf0) == 0x80) { + uint8_t op2; + GET_BUF_U8(op2); + if (op == 0x80 && op2 == 0x00) { @@ -356,8 +334,7 @@ new file mode 100644 + edata.data = ((op & 0xf) << 8) | op2; + edata.data = edata.data << 4; + } -+ } -+ else if ((op & 0xf0) == 0x90) { ++ } else if ((op & 0xf0) == 0x90) { + if (op == 0x9d || op == 0x9f) { + // 9d: Reserved as prefix for ARM register to register moves + // 9f: Reserved as perfix for Intel Wireless MMX reg to reg moves @@ -367,8 +344,7 @@ new file mode 100644 + edata.cmd = ARM_EXIDX_CMD_REG_TO_SP; + edata.data = op & 0x0f; + } -+ } -+ else if ((op & 0xf0) == 0xa0) { ++ } else if ((op & 0xf0) == 0xa0) { + // Pop r4 to r[4+nnn], or + // Pop r4 to r[4+nnn] and r14 or + unsigned end = (op & 0x07); @@ -376,13 +352,11 @@ new file mode 100644 + edata.data = edata.data << 4; + if (op & 0x08) edata.data |= 1 << 14; + edata.cmd = ARM_EXIDX_CMD_REG_POP; -+ } -+ else if (op == ARM_EXTBL_OP_FINISH) { ++ } else if (op == ARM_EXTBL_OP_FINISH) { + // Finish + edata.cmd = ARM_EXIDX_CMD_FINISH; + buf = end; -+ } -+ else if (op == 0xb1) { ++ } else if (op == 0xb1) { + uint8_t op2; + GET_BUF_U8(op2); + if (op2 == 0 || (op2 & 0xf0)) { @@ -393,8 +367,7 @@ new file mode 100644 + edata.cmd = ARM_EXIDX_CMD_REG_POP; + edata.data = op2 & 0x0f; + } -+ } -+ else if (op == 0xb2) { ++ } else if (op == 0xb2) { + // vsp = vsp + 0x204 + (uleb128 << 2) + uint64_t offset = 0; + uint8_t byte, shift = 0; @@ -405,8 +378,7 @@ new file mode 100644 + } while ((byte & 0x80) && buf < end); + edata.data = offset * 4 + 0x204; + edata.cmd = ARM_EXIDX_CMD_ADD_TO_VSP; -+ } -+ else if (op == 0xb3 || op == 0xc8 || op == 0xc9) { ++ } else if (op == 0xb3 || op == 0xc8 || op == 0xc9) { + // b3: Pop VFP regs D[ssss] to D[ssss+cccc], FSTMFDX-ishly + // c8: Pop VFP regs D[16+ssss] to D[16+ssss+cccc], FSTMFDD-ishly + // c9: Pop VFP regs D[ssss] to D[ssss+cccc], FSTMFDD-ishly @@ -414,25 +386,21 @@ new file mode 100644 + GET_BUF_U8(edata.data); + if (op == 0xc8) edata.data |= ARM_EXIDX_VFP_SHIFT_16; + if (op != 0xb3) edata.data |= ARM_EXIDX_VFP_FSTMD; -+ } -+ else if ((op & 0xf8) == 0xb8 || (op & 0xf8) == 0xd0) { ++ } else if ((op & 0xf8) == 0xb8 || (op & 0xf8) == 0xd0) { + // b8: Pop VFP regs D[8] to D[8+nnn], FSTMFDX-ishly + // d0: Pop VFP regs D[8] to D[8+nnn], FSTMFDD-ishly + edata.cmd = ARM_EXIDX_CMD_VFP_POP; + edata.data = 0x80 | (op & 0x07); + if ((op & 0xf8) == 0xd0) edata.data |= ARM_EXIDX_VFP_FSTMD; -+ } -+ else if (op >= 0xc0 && op <= 0xc5) { ++ } else if (op >= 0xc0 && op <= 0xc5) { + // Intel Wireless MMX pop wR[10]-wr[10+nnn], nnn != 6,7 + edata.cmd = ARM_EXIDX_CMD_WREG_POP; + edata.data = 0xa0 | (op & 0x07); -+ } -+ else if (op == 0xc6) { ++ } else if (op == 0xc6) { + // Intel Wireless MMX pop wR[ssss] to wR[ssss+cccc] + edata.cmd = ARM_EXIDX_CMD_WREG_POP; + GET_BUF_U8(edata.data); -+ } -+ else if (op == 0xc7) { ++ } else if (op == 0xc7) { + uint8_t op2; + GET_BUF_U8(op2); + if (op2 == 0 || (op2 & 0xf0)) { @@ -443,22 +411,21 @@ new file mode 100644 + edata.cmd = ARM_EXIDX_CMD_WCGR_POP; + edata.data = op2 & 0x0f; + } -+ } -+ else { ++ } else { + // Spare + edata.cmd = ARM_EXIDX_CMD_RESERVED; + } + + int ret = handler_->ImproveStackFrame(&edata); -+ if (ret < 0) return ret; ++ if (ret < 0) ++ return ret; + } + return 0; + +# undef GET_BUF_U8 +} + -+void ExceptionTableInfo::Start() -+{ ++void ExceptionTableInfo::Start() { + const struct exidx_entry* start + = reinterpret_cast(mr_exidx_.data()); + const struct exidx_entry* end @@ -468,16 +435,15 @@ new file mode 100644 + // Iterate over each of the EXIDX entries (pairs of 32-bit words). + // These occupy the entire .exidx section. + for (const struct exidx_entry* entry = start; entry < end; ++entry) { -+ + // Figure out the code address range that this table entry is + // associated with. + uint32_t addr = (reinterpret_cast(Prel31ToAddr(&entry->addr)) + - mapping_addr_ + loading_addr_) & 0x7fffffff; + uint32_t next_addr; -+ if (entry < end - 1) ++ if (entry < end - 1) { + next_addr = (reinterpret_cast(Prel31ToAddr(&((entry + 1)->addr))) + - mapping_addr_ + loading_addr_) & 0x7fffffff; -+ else { ++ } else { + // This is the last EXIDX entry in the sequence, so we don't + // have an address for the start of the next function, to limit + // this one. Instead use the address of the last byte of the @@ -501,10 +467,10 @@ new file mode 100644 + plausible = true; + } + } -+ if (!plausible) -+ BPLOG(INFO) << "ExceptionTableInfo: implausible EXIDX last entry size " -+ << (int32_t)(text_last_svma_ - addr) -+ << "; using 1 instead."; ++ if (!plausible) { ++ fprintf(stderr, "ExceptionTableInfo: implausible EXIDX last entry size " ++ "%d, using 1 instead.", (int32_t)(text_last_svma_ - addr)); ++ } + } + + // Extract the unwind info into |buf|. This might fail for @@ -518,22 +484,22 @@ new file mode 100644 + // Couldn't extract the unwind info, for some reason. Move on. + switch (res) { + case ExInBufOverflow: -+ BPLOG(INFO) << "ExtabEntryExtract: .exidx/.extab section overrun"; ++ fprintf(stderr, "ExtabEntryExtract: .exidx/.extab section overrun"); + break; + case ExOutBufOverflow: -+ BPLOG(INFO) << "ExtabEntryExtract: bytecode buffer overflow"; ++ fprintf(stderr, "ExtabEntryExtract: bytecode buffer overflow"); + break; + case ExCantUnwind: -+ BPLOG(INFO) << "ExtabEntryExtract: function is marked CANT_UNWIND"; ++ fprintf(stderr, "ExtabEntryExtract: function is marked CANT_UNWIND"); + break; + case ExCantRepresent: -+ BPLOG(INFO) << "ExtabEntryExtract: bytecode can't be represented"; ++ fprintf(stderr, "ExtabEntryExtract: bytecode can't be represented"); + break; + case ExInvalid: -+ BPLOG(INFO) << "ExtabEntryExtract: index table entry is invalid"; ++ fprintf(stderr, "ExtabEntryExtract: index table entry is invalid"); + break; + default: -+ BPLOG(INFO) << "ExtabEntryExtract: unknown error: " << (int)res; ++ fprintf(stderr, "ExtabEntryExtract: unknown error: %d", (int)res); + break; + } + continue; @@ -543,25 +509,27 @@ new file mode 100644 + // create CFI entries that Breakpad can use. This can also fail. + // First, add a new stack frame entry, into which ExtabEntryDecode + // will write the CFI entries. -+ handler_->AddStackFrame(addr, next_addr - addr); -+ int ret = ExtabEntryDecode(buf, buf_used); -+ if (ret < 0) { -+ handler_->DeleteStackFrame(); -+ BPLOG(INFO) << "ExtabEntryDecode: failed with error code: " << ret; -+ continue; ++ if (!handler_->HasStackFrame(addr, next_addr - addr)) { ++ handler_->AddStackFrame(addr, next_addr - addr); ++ int ret = ExtabEntryDecode(buf, buf_used); ++ if (ret < 0) { ++ handler_->DeleteStackFrame(); ++ fprintf(stderr, "ExtabEntryDecode: failed with error code: %d", ret); ++ continue; ++ } ++ handler_->SubmitStackFrame(); + } -+ handler_->SubmitStackFrame(); + + } /* iterating over .exidx */ +} + -+} // arm_ex_reader ++} // namespace arm_ex_reader diff --git a/src/common/arm_ex_reader.h b/src/common/arm_ex_reader.h new file mode 100644 +index 0000000..9b54e8a --- /dev/null +++ b/src/common/arm_ex_reader.h -@@ -0,0 +1,115 @@ -+ +@@ -0,0 +1,114 @@ +/* libunwind - a platform-independent unwind library + Copyright 2011 Linaro Limited + @@ -668,19 +636,20 @@ new file mode 100644 + ExExtractResult + ExtabEntryExtract(const struct arm_ex_to_module::exidx_entry* entry, + uint8_t* buf, size_t buf_size, -+ /*OUT*/size_t* buf_used); ++ size_t* buf_used); + + int ExtabEntryDecode(const uint8_t* buf, size_t buf_size); +}; + -+} // namespace arm_ex_reader ++} // namespace arm_ex_reader + +#endif // COMMON_ARM_EX_READER_H__ diff --git a/src/common/arm_ex_to_module.cc b/src/common/arm_ex_to_module.cc new file mode 100644 +index 0000000..c326744 --- /dev/null +++ b/src/common/arm_ex_to_module.cc -@@ -0,0 +1,206 @@ +@@ -0,0 +1,209 @@ + +/* libunwind - a platform-independent unwind library + Copyright 2011 Linaro Limited @@ -738,28 +707,29 @@ new file mode 100644 + +// Derived from libunwind, with extensive modifications. + -+#include "common/unique_string.h" +#include "common/arm_ex_to_module.h" + +#include +#include + -+// For big-picture comments on how the EXIDX reader works, ++// For big-picture comments on how the EXIDX reader works, +// see arm_ex_reader.cc. + +#define ARM_EXBUF_START(x) (((x) >> 4) & 0x0f) +#define ARM_EXBUF_COUNT(x) ((x) & 0x0f) +#define ARM_EXBUF_END(x) (ARM_EXBUF_START(x) + ARM_EXBUF_COUNT(x)) + -+using google_breakpad::ustr__pc; -+using google_breakpad::ustr__lr; -+using google_breakpad::ustr__sp; +using google_breakpad::Module; -+using google_breakpad::ToUniqueString; -+using google_breakpad::UniqueString; + +namespace arm_ex_to_module { + ++static const char* const regnames[] = { ++ "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", ++ "r8", "r9", "r10", "r11", "r12", "sp", "lr", "pc", ++ "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", ++ "fps", "cpsr" ++}; ++ +// Translate command from extab_data to command for Module. +int ARMExToModule::TranslateCmd(const struct extab_data* edata, + Module::StackFrameEntry* entry, string& vsp) { @@ -767,13 +737,13 @@ new file mode 100644 + switch (edata->cmd) { + case ARM_EXIDX_CMD_FINISH: + /* Copy LR to PC if there isn't currently a rule for PC in force. */ -+ if (entry->initial_rules.find(ustr__pc()) ++ if (entry->initial_rules.find("pc") + == entry->initial_rules.end()) { -+ if (entry->initial_rules.find(ustr__lr()) ++ if (entry->initial_rules.find("lr") + == entry->initial_rules.end()) { -+ entry->initial_rules[ustr__pc()] = Module::Expr("lr"); ++ entry->initial_rules["pc"] = "lr"; + } else { -+ entry->initial_rules[ustr__pc()] = entry->initial_rules[ustr__lr()]; ++ entry->initial_rules["pc"] = entry->initial_rules["lr"]; + } + } + break; @@ -794,38 +764,25 @@ new file mode 100644 + case ARM_EXIDX_CMD_REG_POP: + for (unsigned int i = 0; i < 16; i++) { + if (edata->data & (1 << i)) { -+ entry->initial_rules[ToUniqueString(regnames[i])] -+ = Module::Expr(vsp + " ^"); ++ entry->initial_rules[regnames[i]] ++ = vsp + " ^"; + vsp += " 4 +"; + } + } + /* Set cfa in case the SP got popped. */ + if (edata->data & (1 << 13)) { -+ Module::Expr& vsp_expr = entry->initial_rules[ustr__sp()]; -+ // It must be a postfix expression (we don't generate anything -+ // else here), so return -1 to fail out if it isn't. -+ if (!vsp_expr.isExprPostfix()) { -+ ret = -1; -+ break; -+ }; -+ vsp = vsp_expr.getExprPostfix(); ++ vsp = entry->initial_rules["sp"]; + } + break; + case ARM_EXIDX_CMD_REG_TO_SP: { + assert (edata->data < 16); + const char* const regname = regnames[edata->data]; -+ const UniqueString* regname_us = ToUniqueString(regname); -+ if (entry->initial_rules.find(regname_us) == entry->initial_rules.end()) { -+ entry->initial_rules[ustr__sp()] = Module::Expr(regname); ++ if (entry->initial_rules.find(regname) == entry->initial_rules.end()) { ++ entry->initial_rules["sp"] = regname; + } else { -+ entry->initial_rules[ustr__sp()] = entry->initial_rules[regname_us]; ++ entry->initial_rules["sp"] = entry->initial_rules[regname]; + } -+ Module::Expr& vsp_expr = entry->initial_rules[ustr__sp()]; -+ if (!vsp_expr.isExprPostfix()) { -+ ret = -1; -+ break; -+ }; -+ vsp = vsp_expr.getExprPostfix(); ++ vsp = entry->initial_rules["sp"]; + break; + } + case ARM_EXIDX_CMD_VFP_POP: @@ -861,11 +818,26 @@ new file mode 100644 + return ret; +} + ++bool ARMExToModule::HasStackFrame(uintptr_t addr, size_t size) { ++ // Invariant: the range [addr,covered) is covered by existing stack ++ // frame entries. ++ uintptr_t covered = addr; ++ while (covered < addr + size) { ++ const Module::StackFrameEntry *old_entry = ++ module_->FindStackFrameEntryByAddress(covered); ++ if (!old_entry) { ++ return false; ++ } ++ covered = old_entry->address + old_entry->size; ++ } ++ return true; ++} ++ +void ARMExToModule::AddStackFrame(uintptr_t addr, size_t size) { + stack_frame_entry_ = new Module::StackFrameEntry; + stack_frame_entry_->address = addr; + stack_frame_entry_->size = size; -+ stack_frame_entry_->initial_rules[ToUniqueString(kCFA)] = Module::Expr("sp"); ++ stack_frame_entry_->initial_rules[".cfa"] = "sp"; + vsp_ = "sp"; +} + @@ -879,20 +851,20 @@ new file mode 100644 + +void ARMExToModule::SubmitStackFrame() { + // return address always winds up in pc -+ stack_frame_entry_->initial_rules[ToUniqueString(kRA)] -+ = stack_frame_entry_->initial_rules[ustr__pc()]; ++ stack_frame_entry_->initial_rules[".ra"] ++ = stack_frame_entry_->initial_rules["pc"]; + // the final value of vsp is the new value of sp -+ stack_frame_entry_->initial_rules[ustr__sp()] = vsp_; ++ stack_frame_entry_->initial_rules["sp"] = vsp_; + module_->AddStackFrameEntry(stack_frame_entry_); +} + -+} // namespace arm_ex_to_module ++} // namespace arm_ex_to_module diff --git a/src/common/arm_ex_to_module.h b/src/common/arm_ex_to_module.h new file mode 100644 +index 0000000..f413a16 --- /dev/null +++ b/src/common/arm_ex_to_module.h -@@ -0,0 +1,129 @@ -+ +@@ -0,0 +1,119 @@ +/* libunwind - a platform-independent unwind library + Copyright 2011 Linaro Limited + @@ -988,16 +960,6 @@ new file mode 100644 + ARM_EXIDX_VFP_FSTMD = 1 << 17, // distinguishes FSTMxxD from FSTMxxX +}; + -+const string kRA = ".ra"; -+const string kCFA = ".cfa"; -+ -+static const char* const regnames[] = { -+ "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", -+ "r8", "r9", "r10", "r11", "r12", "sp", "lr", "pc", -+ "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", -+ "fps", "cpsr" -+}; -+ +// Receives information from arm_ex_reader::ExceptionTableInfo +// and adds it to the Module object +class ARMExToModule { @@ -1005,6 +967,7 @@ new file mode 100644 + ARMExToModule(Module* module) + : module_(module) { } + ~ARMExToModule() { } ++ bool HasStackFrame(uintptr_t addr, size_t size); + void AddStackFrame(uintptr_t addr, size_t size); + int ImproveStackFrame(const struct extab_data* edata); + void DeleteStackFrame(); @@ -1022,14 +985,10 @@ new file mode 100644 + +#endif // COMMON_ARM_EX_TO_MODULE__ diff --git a/src/common/linux/dump_symbols.cc b/src/common/linux/dump_symbols.cc +index 1e96ca6..4222ce3 100644 --- a/src/common/linux/dump_symbols.cc +++ b/src/common/linux/dump_symbols.cc -@@ -47,16 +47,17 @@ - #include - - #include - #include - #include +@@ -52,6 +52,7 @@ #include #include @@ -1037,38 +996,19 @@ diff --git a/src/common/linux/dump_symbols.cc b/src/common/linux/dump_symbols.cc #include "common/dwarf/bytereader-inl.h" #include "common/dwarf/dwarf2diehandler.h" #include "common/dwarf_cfi_to_module.h" - #include "common/dwarf_cu_to_module.h" - #include "common/dwarf_line_to_module.h" - #include "common/linux/elfutils.h" - #include "common/linux/elfutils-inl.h" - #include "common/linux/elf_symbols_to_module.h" -@@ -65,16 +66,20 @@ - #include "common/scoped_ptr.h" - #ifndef NO_STABS_SUPPORT - #include "common/stabs_reader.h" - #include "common/stabs_to_module.h" +@@ -71,6 +72,11 @@ #endif #include "common/using_std_string.h" - #include "common/logging.h" -+#if defined(__ANDROID__) && !defined(SHT_ARM_EXIDX) ++#ifndef SHT_ARM_EXIDX ++// bionic and older glibc don't define this +# define SHT_ARM_EXIDX (SHT_LOPROC + 1) +#endif + // This namespace contains helper functions. namespace { - using google_breakpad::DwarfCFIToModule; - using google_breakpad::DwarfCUToModule; - using google_breakpad::DwarfLineToModule; - using google_breakpad::ElfClass; - using google_breakpad::ElfClass32; -@@ -340,16 +345,62 @@ bool LoadDwarfCFI(const string& dwarf_fi - section_name); - dwarf2reader::CallFrameInfo parser(cfi, cfi_size, - &byte_reader, &handler, &dwarf_reporter, - eh_frame); - parser.Start(); +@@ -373,6 +379,52 @@ bool LoadDwarfCFI(const string& dwarf_filename, return true; } @@ -1121,17 +1061,7 @@ diff --git a/src/common/linux/dump_symbols.cc b/src/common/linux/dump_symbols.cc bool LoadELF(const string& obj_file, MmapWrapper* map_wrapper, void** elf_header) { int obj_fd = open(obj_file.c_str(), O_RDONLY); - if (obj_fd < 0) { - fprintf(stderr, "Failed to open ELF file '%s': %s\n", - obj_file.c_str(), strerror(errno)); - return false; - } -@@ -629,16 +680,39 @@ bool LoadSymbols(const string& obj_file, - eh_frame_section, true, - got_section, text_section, big_endian, module); - found_usable_info = found_usable_info || result; - if (result) - BPLOG(INFO) << "LoadSymbols: read CFI from .eh_frame"; +@@ -756,6 +808,29 @@ bool LoadSymbols(const string& obj_file, } } @@ -1144,162 +1074,274 @@ diff --git a/src/common/linux/dump_symbols.cc b/src/common/linux/dump_symbols.cc + FindElfSectionByName(".ARM.extab", SHT_PROGBITS, + sections, names, names_end, + elf_header->e_shnum); -+ // Only load information from this section if there isn't a .debug_info -+ // section. -+ if (!found_debug_info_section -+ && arm_exidx_section && arm_extab_section && symbol_data != NO_CFI) { ++ // Load information from these sections even if there is ++ // .debug_info, because some functions (e.g., hand-written or ++ // script-generated assembly) could have exidx entries but no DWARF. ++ // (For functions with both, the DWARF info that has already been ++ // parsed will take precedence.) ++ if (arm_exidx_section && arm_extab_section && options.symbol_data != NO_CFI) { + info->LoadedSection(".ARM.exidx"); + info->LoadedSection(".ARM.extab"); + bool result = LoadARMexidx(elf_header, + arm_exidx_section, arm_extab_section, + loading_addr, module); + found_usable_info = found_usable_info || result; -+ if (result) -+ BPLOG(INFO) << "LoadSymbols: read EXIDX from .ARM.{exidx,extab}"; + } + - if (!found_debug_info_section && symbol_data != ONLY_CFI) { + if (!found_debug_info_section) { fprintf(stderr, "%s: file contains no debugging information" " (no \".stab\" or \".debug_info\" sections)\n", - obj_file.c_str()); - - // Failed, but maybe there's a .gnu_debuglink section? - if (read_gnu_debug_link) { - const Shdr* gnu_debuglink_section diff --git a/src/common/module.cc b/src/common/module.cc +index fa798f4..ca52f9f 100644 --- a/src/common/module.cc +++ b/src/common/module.cc -@@ -253,17 +253,17 @@ void Module::AssignSourceIds() { - - bool Module::ReportError() { - fprintf(stderr, "error writing symbol file: %s\n", - strerror(errno)); - return false; +@@ -63,7 +63,7 @@ Module::~Module() { + it != functions_.end(); ++it) { + delete *it; + } +- for (vector::iterator it = stack_frame_entries_.begin(); ++ for (StackFrameEntrySet::iterator it = stack_frame_entries_.begin(); + it != stack_frame_entries_.end(); ++it) { + delete *it; + } +@@ -119,8 +119,14 @@ void Module::AddFunctions(vector::iterator begin, + AddFunction(*it); } - std::ostream& operator<<(std::ostream& stream, const Module::Expr& expr) { -- assert(!expr.invalid()); -+ assert(!expr.isExprInvalid()); - switch (expr.how_) { - case Module::kExprSimple: - stream << FromUniqueString(expr.ident_) << " " << expr.offset_ << " +"; - break; - case Module::kExprSimpleMem: - stream << FromUniqueString(expr.ident_) << " " << expr.offset_ << " + ^"; - break; - case Module::kExprPostfix: +-void Module::AddStackFrameEntry(StackFrameEntry *stack_frame_entry) { +- stack_frame_entries_.push_back(stack_frame_entry); ++void Module::AddStackFrameEntry(StackFrameEntry* stack_frame_entry) { ++ std::pair ret = ++ stack_frame_entries_.insert(stack_frame_entry); ++ if (!ret.second) { ++ // Free the duplicate that was not inserted because this Module ++ // now owns it. ++ delete stack_frame_entry; ++ } + } + + void Module::AddExtern(Extern *ext) { +@@ -180,8 +186,25 @@ void Module::GetFiles(vector *vec) { + vec->push_back(it->second); + } + +-void Module::GetStackFrameEntries(vector *vec) const { +- *vec = stack_frame_entries_; ++void Module::GetStackFrameEntries(vector* vec) const { ++ vec->clear(); ++ vec->insert(vec->begin(), stack_frame_entries_.begin(), ++ stack_frame_entries_.end()); ++} ++ ++Module::StackFrameEntry* Module::FindStackFrameEntryByAddress(Address address) { ++ StackFrameEntry search; ++ search.address = address; ++ StackFrameEntrySet::iterator it = stack_frame_entries_.upper_bound(&search); ++ ++ if (it == stack_frame_entries_.begin()) ++ return NULL; ++ ++ it--; ++ if ((*it)->address <= address && address < (*it)->address + (*it)->size) ++ return *it; ++ ++ return NULL; + } + + void Module::AssignSourceIds() { +@@ -286,7 +309,7 @@ bool Module::Write(std::ostream &stream, SymbolData symbol_data) { + + if (symbol_data != NO_CFI) { + // Write out 'STACK CFI INIT' and 'STACK CFI' records. +- vector::const_iterator frame_it; ++ StackFrameEntrySet::const_iterator frame_it; + for (frame_it = stack_frame_entries_.begin(); + frame_it != stack_frame_entries_.end(); ++frame_it) { + StackFrameEntry *entry = *frame_it; diff --git a/src/common/module.h b/src/common/module.h +index 65b5595..299bc38 100644 --- a/src/common/module.h +++ b/src/common/module.h -@@ -160,17 +160,24 @@ class Module { - } - // Construct an invalid expression - Expr() { - postfix_ = ""; - ident_ = NULL; - offset_ = 0; - how_ = kExprInvalid; - } -- bool invalid() const { return how_ == kExprInvalid; } -+ bool isExprInvalid() const { return how_ == kExprInvalid; } -+ bool isExprPostfix() const { return how_ == kExprPostfix; } -+ -+ // Return the postfix expression string. This is only -+ // meaningful on Exprs for which isExprPostfix returns true. -+ // In all other cases it returns an empty string. -+ string getExprPostfix() const { return postfix_; } -+ - bool operator==(const Expr& other) const { - return how_ == other.how_ && - ident_ == other.ident_ && - offset_ == other.offset_ && - postfix_ == other.postfix_; +@@ -176,6 +176,13 @@ class Module { } + }; - // The identifier that gives the starting value for simple expressions. -diff --git a/src/common/unique_string.h b/src/common/unique_string.h ---- a/src/common/unique_string.h -+++ b/src/common/unique_string.h -@@ -230,16 +230,37 @@ inline static const UniqueString* ustr__ ++ struct StackFrameEntryCompare { ++ bool operator() (const StackFrameEntry* lhs, ++ const StackFrameEntry* rhs) const { ++ return lhs->address < rhs->address; ++ } ++ }; ++ + // Create a new module with the given name, operating system, + // architecture, and ID string. + Module(const string &name, const string &os, const string &architecture, +@@ -256,6 +263,10 @@ class Module { + // a more appropriate interface.) + void GetStackFrameEntries(vector *vec) const; - // ".ra" - inline static const UniqueString* ustr__ZDra() { - static const UniqueString* us = NULL; - if (!us) us = ToUniqueString(".ra"); - return us; ++ // If this module has a StackFrameEntry whose address range covers ++ // ADDRESS, return it. Otherwise return NULL. ++ StackFrameEntry* FindStackFrameEntryByAddress(Address address); ++ + // Find those files in this module that are actually referred to by + // functions' line number data, and assign them source id numbers. + // Set the source id numbers for all other files --- unused by the +@@ -316,6 +327,9 @@ class Module { + // A set containing Extern structures, sorted by address. + typedef set ExternSet; + ++ // A set containing StackFrameEntry structures, sorted by address. ++ typedef set StackFrameEntrySet; ++ + // The module owns all the files and functions that have been added + // to it; destroying the module frees the Files and Functions these + // point to. +@@ -324,7 +338,7 @@ class Module { + + // The module owns all the call frame info entries that have been + // added to it. +- vector stack_frame_entries_; ++ StackFrameEntrySet stack_frame_entries_; + + // The module owns all the externs that have been added to it; + // destroying the module frees the Externs these point to. +diff --git a/src/common/module_unittest.cc b/src/common/module_unittest.cc +index 0b64327..bf72736 100644 +--- a/src/common/module_unittest.cc ++++ b/src/common/module_unittest.cc +@@ -326,11 +326,6 @@ TEST(Construct, AddFrames) { + m.Write(s, ALL_SYMBOL_DATA); + string contents = s.str(); + EXPECT_STREQ("MODULE os-name architecture id-string name with spaces\n" +- "STACK CFI INIT ddb5f41285aa7757 1486493370dc5073 \n" +- "STACK CFI INIT 8064f3af5e067e38 de2a5ee55509407" +- " .cfa: I think that I shall never see" +- " cannoli: a tree whose hungry mouth is prest" +- " stromboli: a poem lovely as a tree\n" + "STACK CFI INIT 5e8d0db0a7075c6c 1c7edb12a7aea229" + " .cfa: Whose woods are these\n" + "STACK CFI 36682fad3763ffff" +@@ -338,7 +333,12 @@ TEST(Construct, AddFrames) { + " stromboli: his house is in\n" + "STACK CFI 47ceb0f63c269d7f" + " calzone: the village though" +- " cannoli: he will not see me stopping here\n", ++ " cannoli: he will not see me stopping here\n" ++ "STACK CFI INIT 8064f3af5e067e38 de2a5ee55509407" ++ " .cfa: I think that I shall never see" ++ " cannoli: a tree whose hungry mouth is prest" ++ " stromboli: a poem lovely as a tree\n" ++ "STACK CFI INIT ddb5f41285aa7757 1486493370dc5073 \n", + contents.c_str()); + + // Check that GetStackFrameEntries works. +@@ -346,10 +346,18 @@ TEST(Construct, AddFrames) { + m.GetStackFrameEntries(&entries); + ASSERT_EQ(3U, entries.size()); + // Check first entry. +- EXPECT_EQ(0xddb5f41285aa7757ULL, entries[0]->address); +- EXPECT_EQ(0x1486493370dc5073ULL, entries[0]->size); +- ASSERT_EQ(0U, entries[0]->initial_rules.size()); +- ASSERT_EQ(0U, entries[0]->rule_changes.size()); ++ EXPECT_EQ(0x5e8d0db0a7075c6cULL, entries[0]->address); ++ EXPECT_EQ(0x1c7edb12a7aea229ULL, entries[0]->size); ++ Module::RuleMap entry1_initial; ++ entry1_initial[".cfa"] = "Whose woods are these"; ++ EXPECT_THAT(entries[0]->initial_rules, ContainerEq(entry1_initial)); ++ Module::RuleChangeMap entry1_changes; ++ entry1_changes[0x36682fad3763ffffULL][".cfa"] = "I think I know"; ++ entry1_changes[0x36682fad3763ffffULL]["stromboli"] = "his house is in"; ++ entry1_changes[0x47ceb0f63c269d7fULL]["calzone"] = "the village though"; ++ entry1_changes[0x47ceb0f63c269d7fULL]["cannoli"] = ++ "he will not see me stopping here"; ++ EXPECT_THAT(entries[0]->rule_changes, ContainerEq(entry1_changes)); + // Check second entry. + EXPECT_EQ(0x8064f3af5e067e38ULL, entries[1]->address); + EXPECT_EQ(0x0de2a5ee55509407ULL, entries[1]->size); +@@ -361,18 +369,10 @@ TEST(Construct, AddFrames) { + EXPECT_THAT(entries[1]->initial_rules, ContainerEq(entry2_initial)); + ASSERT_EQ(0U, entries[1]->rule_changes.size()); + // Check third entry. +- EXPECT_EQ(0x5e8d0db0a7075c6cULL, entries[2]->address); +- EXPECT_EQ(0x1c7edb12a7aea229ULL, entries[2]->size); +- Module::RuleMap entry3_initial; +- entry3_initial[".cfa"] = "Whose woods are these"; +- EXPECT_THAT(entries[2]->initial_rules, ContainerEq(entry3_initial)); +- Module::RuleChangeMap entry3_changes; +- entry3_changes[0x36682fad3763ffffULL][".cfa"] = "I think I know"; +- entry3_changes[0x36682fad3763ffffULL]["stromboli"] = "his house is in"; +- entry3_changes[0x47ceb0f63c269d7fULL]["calzone"] = "the village though"; +- entry3_changes[0x47ceb0f63c269d7fULL]["cannoli"] = +- "he will not see me stopping here"; +- EXPECT_THAT(entries[2]->rule_changes, ContainerEq(entry3_changes)); ++ EXPECT_EQ(0xddb5f41285aa7757ULL, entries[2]->address); ++ EXPECT_EQ(0x1486493370dc5073ULL, entries[2]->size); ++ ASSERT_EQ(0U, entries[2]->initial_rules.size()); ++ ASSERT_EQ(0U, entries[2]->rule_changes.size()); } -+// "pc" -+inline static const UniqueString* ustr__pc() { -+ static const UniqueString* us = NULL; -+ if (!us) us = ToUniqueString("pc"); -+ return us; -+} + TEST(Construct, UniqueFiles) { +@@ -544,3 +544,62 @@ TEST(Construct, FunctionsAndThumbExternsWithSameAddress) { + "PUBLIC cc00 0 arm_func\n", + contents.c_str()); + } + -+// "lr" -+inline static const UniqueString* ustr__lr() { -+ static const UniqueString* us = NULL; -+ if (!us) us = ToUniqueString("lr"); -+ return us; -+} ++TEST(Lookup, StackFrameEntries) { ++ Module m(MODULE_NAME, MODULE_OS, MODULE_ARCH, MODULE_ID); + -+// "sp" -+inline static const UniqueString* ustr__sp() { -+ static const UniqueString* us = NULL; -+ if (!us) us = ToUniqueString("sp"); -+ return us; -+} ++ // First STACK CFI entry, with no initial rules or deltas. ++ Module::StackFrameEntry *entry1 = new Module::StackFrameEntry(); ++ entry1->address = 0x2000; ++ entry1->size = 0x900; ++ m.AddStackFrameEntry(entry1); + - template - class UniqueStringMap - { - private: - static const int N_FIXED = 10; - - public: - UniqueStringMap() : n_fixed_(0), n_sets_(0), n_gets_(0), n_clears_(0) {}; -diff --git a/src/processor/cfi_frame_info.cc b/src/processor/cfi_frame_info.cc ---- a/src/processor/cfi_frame_info.cc -+++ b/src/processor/cfi_frame_info.cc -@@ -49,17 +49,17 @@ namespace google_breakpad { - #endif - - template - bool CFIFrameInfo::FindCallerRegs(const RegisterValueMap ®isters, - const MemoryRegion &memory, - RegisterValueMap *caller_registers) const { - // If there are not rules for both .ra and .cfa in effect at this address, - // don't use this CFI data for stack walking. -- if (cfa_rule_.invalid() || ra_rule_.invalid()) -+ if (cfa_rule_.isExprInvalid() || ra_rule_.isExprInvalid()) - return false; - - RegisterValueMap working; - PostfixEvaluator evaluator(&working, &memory); - - caller_registers->clear(); - - // First, compute the CFA. -@@ -100,20 +100,20 @@ template bool CFIFrameInfo::FindCallerRe - template bool CFIFrameInfo::FindCallerRegs( - const RegisterValueMap ®isters, - const MemoryRegion &memory, - RegisterValueMap *caller_registers) const; - - string CFIFrameInfo::Serialize() const { - std::ostringstream stream; - -- if (!cfa_rule_.invalid()) { -+ if (!cfa_rule_.isExprInvalid()) { - stream << ".cfa: " << cfa_rule_; - } -- if (!ra_rule_.invalid()) { -+ if (!ra_rule_.isExprInvalid()) { - if (static_cast(stream.tellp()) != 0) - stream << " "; - stream << ".ra: " << ra_rule_; - } - - // Visit the register rules in alphabetical order. Because - // register_rules_ has the elements in some arbitrary order, - // get the names out into a vector, sort them, and visit in ++ // Second STACK CFI entry, with initial rules but no deltas. ++ Module::StackFrameEntry *entry2 = new Module::StackFrameEntry(); ++ entry2->address = 0x3000; ++ entry2->size = 0x900; ++ entry2->initial_rules[".cfa"] = "I think that I shall never see"; ++ entry2->initial_rules["stromboli"] = "a poem lovely as a tree"; ++ entry2->initial_rules["cannoli"] = "a tree whose hungry mouth is prest"; ++ m.AddStackFrameEntry(entry2); ++ ++ // Third STACK CFI entry, with initial rules and deltas. ++ Module::StackFrameEntry *entry3 = new Module::StackFrameEntry(); ++ entry3->address = 0x1000; ++ entry3->size = 0x900; ++ entry3->initial_rules[".cfa"] = "Whose woods are these"; ++ entry3->rule_changes[0x47ceb0f63c269d7fULL]["calzone"] = ++ "the village though"; ++ entry3->rule_changes[0x47ceb0f63c269d7fULL]["cannoli"] = ++ "he will not see me stopping here"; ++ entry3->rule_changes[0x36682fad3763ffffULL]["stromboli"] = ++ "his house is in"; ++ entry3->rule_changes[0x36682fad3763ffffULL][".cfa"] = ++ "I think I know"; ++ m.AddStackFrameEntry(entry3); ++ ++ Module::StackFrameEntry* s = m.FindStackFrameEntryByAddress(0x1000); ++ EXPECT_EQ(entry3, s); ++ s = m.FindStackFrameEntryByAddress(0x18FF); ++ EXPECT_EQ(entry3, s); ++ ++ s = m.FindStackFrameEntryByAddress(0x1900); ++ EXPECT_EQ((Module::StackFrameEntry*)NULL, s); ++ s = m.FindStackFrameEntryByAddress(0x1A00); ++ EXPECT_EQ((Module::StackFrameEntry*)NULL, s); ++ ++ s = m.FindStackFrameEntryByAddress(0x2000); ++ EXPECT_EQ(entry1, s); ++ s = m.FindStackFrameEntryByAddress(0x28FF); ++ EXPECT_EQ(entry1, s); ++ ++ s = m.FindStackFrameEntryByAddress(0x3000); ++ EXPECT_EQ(entry2, s); ++ s = m.FindStackFrameEntryByAddress(0x38FF); ++ EXPECT_EQ(entry2, s); ++ ++ s = m.FindStackFrameEntryByAddress(0x3900); ++ EXPECT_EQ((Module::StackFrameEntry*)NULL, s); ++ s = m.FindStackFrameEntryByAddress(0x3A00); ++ EXPECT_EQ((Module::StackFrameEntry*)NULL, s); ++} diff --git a/toolkit/crashreporter/breakpad-patches/00-module-api-extras.patch b/toolkit/crashreporter/breakpad-patches/00-module-api-extras.patch deleted file mode 100644 index c1e9aa003c6d..000000000000 --- a/toolkit/crashreporter/breakpad-patches/00-module-api-extras.patch +++ /dev/null @@ -1,526 +0,0 @@ -# HG changeset patch -# User Ted Mielczarek -# Date 1352220493 18000 -# Node ID c3b1109dd392c16a9fe4e85da693010966dbbf0b -# Parent 03db269a2868503cca9e80f62ce676aabbf967fd -Add APIs for querying Module data -R=glandium at https://breakpad.appspot.com/511003/ - -diff --git a/src/common/module.cc b/src/common/module.cc ---- a/src/common/module.cc -+++ b/src/common/module.cc -@@ -58,17 +58,17 @@ - - Module::~Module() { - for (FileByNameMap::iterator it = files_.begin(); it != files_.end(); ++it) - delete it->second; - for (FunctionSet::iterator it = functions_.begin(); - it != functions_.end(); ++it) { - delete *it; - } -- for (vector::iterator it = stack_frame_entries_.begin(); -+ for (StackFrameEntrySet::iterator it = stack_frame_entries_.begin(); - it != stack_frame_entries_.end(); ++it) { - delete *it; - } - for (ExternSet::iterator it = externs_.begin(); it != externs_.end(); ++it) - delete *it; - } - - void Module::SetLoadAddress(Address address) { -@@ -88,39 +88,84 @@ - } - - void Module::AddFunctions(vector::iterator begin, - vector::iterator end) { - for (vector::iterator it = begin; it != end; ++it) - AddFunction(*it); - } - --void Module::AddStackFrameEntry(StackFrameEntry *stack_frame_entry) { -- stack_frame_entries_.push_back(stack_frame_entry); -+void Module::AddStackFrameEntry(StackFrameEntry* stack_frame_entry) { -+ std::pair ret = -+ stack_frame_entries_.insert(stack_frame_entry); -+ if (!ret.second) { -+ // Free the duplicate that was not inserted because this Module -+ // now owns it. -+ delete stack_frame_entry; -+ } - } - - void Module::AddExtern(Extern *ext) { - std::pair ret = externs_.insert(ext); - if (!ret.second) { - // Free the duplicate that was not inserted because this Module - // now owns it. - delete ext; - } - } - - void Module::GetFunctions(vector *vec, - vector::iterator i) { - vec->insert(i, functions_.begin(), functions_.end()); - } - -+template -+bool EntryContainsAddress(T entry, Module::Address address) { -+ return entry->address <= address && address < entry->address + entry->size; -+} -+ -+Module::Function* Module::FindFunctionByAddress(Address address) { -+ Function search; -+ search.address = address; -+ // Ensure that name always sorts higher than the function name, -+ // so that upper_bound always returns the function just after -+ // the function containing this address. -+ search.name = "\xFF"; -+ FunctionSet::iterator it = functions_.upper_bound(&search); -+ if (it == functions_.begin()) -+ return NULL; -+ -+ it--; -+ -+ if (EntryContainsAddress(*it, address)) -+ return *it; -+ -+ return NULL; -+} -+ - void Module::GetExterns(vector *vec, - vector::iterator i) { - vec->insert(i, externs_.begin(), externs_.end()); - } - -+Module::Extern* Module::FindExternByAddress(Address address) { -+ Extern search; -+ search.address = address; -+ ExternSet::iterator it = externs_.upper_bound(&search); -+ -+ if (it == externs_.begin()) -+ return NULL; -+ -+ it--; -+ if ((*it)->address > address) -+ return NULL; -+ -+ return *it; -+} -+ - Module::File *Module::FindFile(const string &name) { - // A tricky bit here. The key of each map entry needs to be a - // pointer to the entry's File's name string. This means that we - // can't do the initial lookup with any operation that would create - // an empty entry for us if the name isn't found (like, say, - // operator[] or insert do), because such a created entry's key will - // be a pointer the string passed as our argument. Since the key of - // a map's value type is const, we can't fix it up once we've -@@ -150,18 +195,35 @@ - } - - void Module::GetFiles(vector *vec) { - vec->clear(); - for (FileByNameMap::iterator it = files_.begin(); it != files_.end(); ++it) - vec->push_back(it->second); - } - --void Module::GetStackFrameEntries(vector *vec) { -- *vec = stack_frame_entries_; -+void Module::GetStackFrameEntries(vector* vec) { -+ vec->clear(); -+ vec->insert(vec->begin(), stack_frame_entries_.begin(), -+ stack_frame_entries_.end()); -+} -+ -+Module::StackFrameEntry* Module::FindStackFrameEntryByAddress(Address address) { -+ StackFrameEntry search; -+ search.address = address; -+ StackFrameEntrySet::iterator it = stack_frame_entries_.upper_bound(&search); -+ -+ if (it == stack_frame_entries_.begin()) -+ return NULL; -+ -+ it--; -+ if (EntryContainsAddress(*it, address)) -+ return *it; -+ -+ return NULL; - } - - void Module::AssignSourceIds() { - // First, give every source file an id of -1. - for (FileByNameMap::iterator file_it = files_.begin(); - file_it != files_.end(); ++file_it) { - file_it->second->source_id = -1; - } -@@ -256,17 +318,17 @@ - stream << "PUBLIC " << hex - << (ext->address - load_address_) << " 0 " - << ext->name << dec << endl; - } - } - - if (symbol_data != NO_CFI) { - // Write out 'STACK CFI INIT' and 'STACK CFI' records. -- vector::const_iterator frame_it; -+ StackFrameEntrySet::const_iterator frame_it; - for (frame_it = stack_frame_entries_.begin(); - frame_it != stack_frame_entries_.end(); ++frame_it) { - StackFrameEntry *entry = *frame_it; - stream << "STACK CFI INIT " << hex - << (entry->address - load_address_) << " " - << entry->size << " " << dec; - if (!stream.good() - || !WriteRuleMap(entry->initial_rules, stream)) -diff --git a/src/common/module.h b/src/common/module.h ---- a/src/common/module.h -+++ b/src/common/module.h -@@ -164,16 +164,23 @@ - - struct ExternCompare { - bool operator() (const Extern *lhs, - const Extern *rhs) const { - return lhs->address < rhs->address; - } - }; - -+ struct StackFrameEntryCompare { -+ bool operator() (const StackFrameEntry* lhs, -+ const StackFrameEntry* rhs) const { -+ return lhs->address < rhs->address; -+ } -+ }; -+ - // Create a new module with the given name, operating system, - // architecture, and ID string. - Module(const string &name, const string &os, const string &architecture, - const string &id); - ~Module(); - - // Set the module's load address to LOAD_ADDRESS; addresses given - // for functions and lines will be written to the Breakpad symbol -@@ -223,37 +230,49 @@ - - // Insert pointers to the functions added to this module at I in - // VEC. The pointed-to Functions are still owned by this module. - // (Since this is effectively a copy of the function list, this is - // mostly useful for testing; other uses should probably get a more - // appropriate interface.) - void GetFunctions(vector *vec, vector::iterator i); - -+ // If this module has a function at ADDRESS, return a pointer to it. -+ // Otherwise, return NULL. -+ Function* FindFunctionByAddress(Address address); -+ - // Insert pointers to the externs added to this module at I in - // VEC. The pointed-to Externs are still owned by this module. - // (Since this is effectively a copy of the extern list, this is - // mostly useful for testing; other uses should probably get a more - // appropriate interface.) - void GetExterns(vector *vec, vector::iterator i); - -+ // If this module has an extern whose base address is less than ADDRESS, -+ // return a pointer to it. Otherwise, return NULL. -+ Extern* FindExternByAddress(Address address); -+ - // Clear VEC and fill it with pointers to the Files added to this - // module, sorted by name. The pointed-to Files are still owned by - // this module. (Since this is effectively a copy of the file list, - // this is mostly useful for testing; other uses should probably get - // a more appropriate interface.) - void GetFiles(vector *vec); - - // Clear VEC and fill it with pointers to the StackFrameEntry - // objects that have been added to this module. (Since this is - // effectively a copy of the stack frame entry list, this is mostly - // useful for testing; other uses should probably get - // a more appropriate interface.) - void GetStackFrameEntries(vector *vec); - -+ // If this module has a StackFrameEntry whose address range covers -+ // ADDRESS, return it. Otherwise return NULL. -+ StackFrameEntry* FindStackFrameEntryByAddress(Address address); -+ - // Find those files in this module that are actually referred to by - // functions' line number data, and assign them source id numbers. - // Set the source id numbers for all other files --- unused by the - // source line data --- to -1. We do this before writing out the - // symbol file, at which point we omit any unused files. - void AssignSourceIds(); - - // Call AssignSourceIds, and write this module to STREAM in the -@@ -299,25 +318,28 @@ - typedef map FileByNameMap; - - // A set containing Function structures, sorted by address. - typedef set FunctionSet; - - // A set containing Extern structures, sorted by address. - typedef set ExternSet; - -+ // A set containing StackFrameEntry structures, sorted by address. -+ typedef set StackFrameEntrySet; -+ - // The module owns all the files and functions that have been added - // to it; destroying the module frees the Files and Functions these - // point to. - FileByNameMap files_; // This module's source files. - FunctionSet functions_; // This module's functions. - - // The module owns all the call frame info entries that have been - // added to it. -- vector stack_frame_entries_; -+ StackFrameEntrySet stack_frame_entries_; - - // The module owns all the externs that have been added to it; - // destroying the module frees the Externs these point to. - ExternSet externs_; - }; - - } // namespace google_breakpad - -diff --git a/src/common/module_unittest.cc b/src/common/module_unittest.cc ---- a/src/common/module_unittest.cc -+++ b/src/common/module_unittest.cc -@@ -329,63 +329,63 @@ - entry3->rule_changes[0x36682fad3763ffffULL][".cfa"] = - "I think I know"; - m.AddStackFrameEntry(entry3); - - // Check that Write writes STACK CFI records properly. - m.Write(s, ALL_SYMBOL_DATA); - string contents = s.str(); - EXPECT_STREQ("MODULE os-name architecture id-string name with spaces\n" -- "STACK CFI INIT ddb5f41285aa7757 1486493370dc5073 \n" -- "STACK CFI INIT 8064f3af5e067e38 de2a5ee55509407" -- " .cfa: I think that I shall never see" -- " cannoli: a tree whose hungry mouth is prest" -- " stromboli: a poem lovely as a tree\n" - "STACK CFI INIT 5e8d0db0a7075c6c 1c7edb12a7aea229" - " .cfa: Whose woods are these\n" - "STACK CFI 36682fad3763ffff" - " .cfa: I think I know" - " stromboli: his house is in\n" - "STACK CFI 47ceb0f63c269d7f" - " calzone: the village though" -- " cannoli: he will not see me stopping here\n", -+ " cannoli: he will not see me stopping here\n" -+ "STACK CFI INIT 8064f3af5e067e38 de2a5ee55509407" -+ " .cfa: I think that I shall never see" -+ " cannoli: a tree whose hungry mouth is prest" -+ " stromboli: a poem lovely as a tree\n" -+ "STACK CFI INIT ddb5f41285aa7757 1486493370dc5073 \n", - contents.c_str()); - - // Check that GetStackFrameEntries works. - vector entries; - m.GetStackFrameEntries(&entries); - ASSERT_EQ(3U, entries.size()); - // Check first entry. -- EXPECT_EQ(0xddb5f41285aa7757ULL, entries[0]->address); -- EXPECT_EQ(0x1486493370dc5073ULL, entries[0]->size); -- ASSERT_EQ(0U, entries[0]->initial_rules.size()); -- ASSERT_EQ(0U, entries[0]->rule_changes.size()); -+ EXPECT_EQ(0x5e8d0db0a7075c6cULL, entries[0]->address); -+ EXPECT_EQ(0x1c7edb12a7aea229ULL, entries[0]->size); -+ Module::RuleMap entry1_initial; -+ entry1_initial[".cfa"] = "Whose woods are these"; -+ EXPECT_THAT(entries[0]->initial_rules, ContainerEq(entry1_initial)); -+ Module::RuleChangeMap entry1_changes; -+ entry1_changes[0x36682fad3763ffffULL][".cfa"] = "I think I know"; -+ entry1_changes[0x36682fad3763ffffULL]["stromboli"] = "his house is in"; -+ entry1_changes[0x47ceb0f63c269d7fULL]["calzone"] = "the village though"; -+ entry1_changes[0x47ceb0f63c269d7fULL]["cannoli"] = -+ "he will not see me stopping here"; -+ EXPECT_THAT(entries[0]->rule_changes, ContainerEq(entry1_changes)); - // Check second entry. - EXPECT_EQ(0x8064f3af5e067e38ULL, entries[1]->address); - EXPECT_EQ(0x0de2a5ee55509407ULL, entries[1]->size); - ASSERT_EQ(3U, entries[1]->initial_rules.size()); - Module::RuleMap entry2_initial; - entry2_initial[".cfa"] = "I think that I shall never see"; - entry2_initial["stromboli"] = "a poem lovely as a tree"; - entry2_initial["cannoli"] = "a tree whose hungry mouth is prest"; - EXPECT_THAT(entries[1]->initial_rules, ContainerEq(entry2_initial)); - ASSERT_EQ(0U, entries[1]->rule_changes.size()); - // Check third entry. -- EXPECT_EQ(0x5e8d0db0a7075c6cULL, entries[2]->address); -- EXPECT_EQ(0x1c7edb12a7aea229ULL, entries[2]->size); -- Module::RuleMap entry3_initial; -- entry3_initial[".cfa"] = "Whose woods are these"; -- EXPECT_THAT(entries[2]->initial_rules, ContainerEq(entry3_initial)); -- Module::RuleChangeMap entry3_changes; -- entry3_changes[0x36682fad3763ffffULL][".cfa"] = "I think I know"; -- entry3_changes[0x36682fad3763ffffULL]["stromboli"] = "his house is in"; -- entry3_changes[0x47ceb0f63c269d7fULL]["calzone"] = "the village though"; -- entry3_changes[0x47ceb0f63c269d7fULL]["cannoli"] = -- "he will not see me stopping here"; -- EXPECT_THAT(entries[2]->rule_changes, ContainerEq(entry3_changes)); -+ EXPECT_EQ(0xddb5f41285aa7757ULL, entries[2]->address); -+ EXPECT_EQ(0x1486493370dc5073ULL, entries[2]->size); -+ ASSERT_EQ(0U, entries[2]->initial_rules.size()); -+ ASSERT_EQ(0U, entries[2]->rule_changes.size()); - } - - TEST(Construct, UniqueFiles) { - Module m(MODULE_NAME, MODULE_OS, MODULE_ARCH, MODULE_ID); - Module::File *file1 = m.FindFile("foo"); - Module::File *file2 = m.FindFile(string("bar")); - Module::File *file3 = m.FindFile(string("foo")); - Module::File *file4 = m.FindFile("bar"); -@@ -483,8 +483,155 @@ - m.Write(s, ALL_SYMBOL_DATA); - string contents = s.str(); - - EXPECT_STREQ("MODULE " MODULE_OS " " MODULE_ARCH " " - MODULE_ID " " MODULE_NAME "\n" - "PUBLIC ffff 0 _xyz\n", - contents.c_str()); - } -+ -+TEST(Lookup, Function) { -+ Module m(MODULE_NAME, MODULE_OS, MODULE_ARCH, MODULE_ID); -+ -+ Module::Function *function1 = new(Module::Function); -+ function1->name = "_abc1"; -+ function1->address = 0x1000; -+ function1->size = 0x900; -+ function1->parameter_size = 0x0; -+ -+ Module::Function *function2 = new(Module::Function); -+ function2->name = "_xyz2"; -+ function2->address = 0x2000; -+ function2->size = 0x900; -+ function2->parameter_size = 0x0; -+ -+ Module::Function *function3 = new(Module::Function); -+ function3->name = "_def3"; -+ function3->address = 0x3000; -+ function3->size = 0x900; -+ function3->parameter_size = 0x0; -+ -+ // Put them in a vector. -+ vector vec; -+ vec.push_back(function1); -+ vec.push_back(function2); -+ vec.push_back(function3); -+ -+ m.AddFunctions(vec.begin(), vec.end()); -+ -+ // Try looking up functions by address. -+ Module::Function* f = m.FindFunctionByAddress(0x1000); -+ EXPECT_EQ(function1, f); -+ f = m.FindFunctionByAddress(0x18FF); -+ EXPECT_EQ(function1, f); -+ -+ f = m.FindFunctionByAddress(0x1900); -+ EXPECT_EQ((Module::Function*)NULL, f); -+ f = m.FindFunctionByAddress(0x1A00); -+ EXPECT_EQ((Module::Function*)NULL, f); -+ -+ f = m.FindFunctionByAddress(0x2000); -+ EXPECT_EQ(function2, f); -+ f = m.FindFunctionByAddress(0x28FF); -+ EXPECT_EQ(function2, f); -+ -+ f = m.FindFunctionByAddress(0x3000); -+ EXPECT_EQ(function3, f); -+ f = m.FindFunctionByAddress(0x38FF); -+ EXPECT_EQ(function3, f); -+ -+ f = m.FindFunctionByAddress(0x3900); -+ EXPECT_EQ((Module::Function*)NULL, f); -+ f = m.FindFunctionByAddress(0x3A00); -+ EXPECT_EQ((Module::Function*)NULL, f); -+} -+ -+TEST(Lookup, Externs) { -+ Module m(MODULE_NAME, MODULE_OS, MODULE_ARCH, MODULE_ID); -+ -+ // Two externs. -+ Module::Extern* extern1 = new(Module::Extern); -+ extern1->address = 0x1000; -+ extern1->name = "_abc"; -+ Module::Extern* extern2 = new(Module::Extern); -+ extern2->address = 0x2000; -+ extern2->name = "_xyz"; -+ -+ m.AddExtern(extern1); -+ m.AddExtern(extern2); -+ -+ Module::Extern* e = m.FindExternByAddress(0xFFF); -+ EXPECT_EQ((Module::Extern*)NULL, e); -+ -+ e = m.FindExternByAddress(0x1000); -+ EXPECT_EQ(extern1, e); -+ e = m.FindExternByAddress(0x1900); -+ EXPECT_EQ(extern1, e); -+ e = m.FindExternByAddress(0x1FFF); -+ EXPECT_EQ(extern1, e); -+ -+ e = m.FindExternByAddress(0x2000); -+ EXPECT_EQ(extern2, e); -+ e = m.FindExternByAddress(0x2900); -+ EXPECT_EQ(extern2, e); -+ e = m.FindExternByAddress(0xFFFFFFFF); -+ EXPECT_EQ(extern2, e); -+} -+ -+TEST(Lookup, StackFrameEntries) { -+ Module m(MODULE_NAME, MODULE_OS, MODULE_ARCH, MODULE_ID); -+ -+ // First STACK CFI entry, with no initial rules or deltas. -+ Module::StackFrameEntry *entry1 = new Module::StackFrameEntry(); -+ entry1->address = 0x2000; -+ entry1->size = 0x900; -+ m.AddStackFrameEntry(entry1); -+ -+ // Second STACK CFI entry, with initial rules but no deltas. -+ Module::StackFrameEntry *entry2 = new Module::StackFrameEntry(); -+ entry2->address = 0x3000; -+ entry2->size = 0x900; -+ entry2->initial_rules[".cfa"] = "I think that I shall never see"; -+ entry2->initial_rules["stromboli"] = "a poem lovely as a tree"; -+ entry2->initial_rules["cannoli"] = "a tree whose hungry mouth is prest"; -+ m.AddStackFrameEntry(entry2); -+ -+ // Third STACK CFI entry, with initial rules and deltas. -+ Module::StackFrameEntry *entry3 = new Module::StackFrameEntry(); -+ entry3->address = 0x1000; -+ entry3->size = 0x900; -+ entry3->initial_rules[".cfa"] = "Whose woods are these"; -+ entry3->rule_changes[0x47ceb0f63c269d7fULL]["calzone"] = -+ "the village though"; -+ entry3->rule_changes[0x47ceb0f63c269d7fULL]["cannoli"] = -+ "he will not see me stopping here"; -+ entry3->rule_changes[0x36682fad3763ffffULL]["stromboli"] = -+ "his house is in"; -+ entry3->rule_changes[0x36682fad3763ffffULL][".cfa"] = -+ "I think I know"; -+ m.AddStackFrameEntry(entry3); -+ -+ Module::StackFrameEntry* s = m.FindStackFrameEntryByAddress(0x1000); -+ EXPECT_EQ(entry3, s); -+ s = m.FindStackFrameEntryByAddress(0x18FF); -+ EXPECT_EQ(entry3, s); -+ -+ s = m.FindStackFrameEntryByAddress(0x1900); -+ EXPECT_EQ((Module::StackFrameEntry*)NULL, s); -+ s = m.FindStackFrameEntryByAddress(0x1A00); -+ EXPECT_EQ((Module::StackFrameEntry*)NULL, s); -+ -+ s = m.FindStackFrameEntryByAddress(0x2000); -+ EXPECT_EQ(entry1, s); -+ s = m.FindStackFrameEntryByAddress(0x28FF); -+ EXPECT_EQ(entry1, s); -+ -+ s = m.FindStackFrameEntryByAddress(0x3000); -+ EXPECT_EQ(entry2, s); -+ s = m.FindStackFrameEntryByAddress(0x38FF); -+ EXPECT_EQ(entry2, s); -+ -+ s = m.FindStackFrameEntryByAddress(0x3900); -+ EXPECT_EQ((Module::StackFrameEntry*)NULL, s); -+ s = m.FindStackFrameEntryByAddress(0x3A00); -+ EXPECT_EQ((Module::StackFrameEntry*)NULL, s); -+} diff --git a/toolkit/crashreporter/breakpad-patches/02-cfi-rule-repr.patch b/toolkit/crashreporter/breakpad-patches/02-cfi-rule-repr.patch deleted file mode 100644 index 43dfaecb762a..000000000000 --- a/toolkit/crashreporter/breakpad-patches/02-cfi-rule-repr.patch +++ /dev/null @@ -1,6058 +0,0 @@ -# HG changeset patch -# User Ted Mielczarek -# Date 1360255133 18000 -# Node ID d23a69a6c34a1f1c21e241f37b388c8689f2386b -# Parent c3b1109dd392c16a9fe4e85da693010966dbbf0b -Change the representation of CFI rules to avoid postfix expressions in most cases -Patch by Julian Seward -R=ted - -diff --git a/Makefile.am b/Makefile.am ---- a/Makefile.am -+++ b/Makefile.am -@@ -133,16 +133,17 @@ - src/google_breakpad/processor/source_line_resolver_base.h \ - src/google_breakpad/processor/source_line_resolver_interface.h \ - src/google_breakpad/processor/stack_frame.h \ - src/google_breakpad/processor/stack_frame_cpu.h \ - src/google_breakpad/processor/stack_frame_symbolizer.h \ - src/google_breakpad/processor/stackwalker.h \ - src/google_breakpad/processor/symbol_supplier.h \ - src/google_breakpad/processor/system_info.h \ -+ src/common/module.cc \ - src/processor/address_map-inl.h \ - src/processor/address_map.h \ - src/processor/basic_code_module.h \ - src/processor/basic_code_modules.cc \ - src/processor/basic_code_modules.h \ - src/processor/basic_source_line_resolver_types.h \ - src/processor/basic_source_line_resolver.cc \ - src/processor/binarystream.h \ -@@ -555,30 +556,32 @@ - src/testing/src/gmock-all.cc - src_processor_basic_source_line_resolver_unittest_CPPFLAGS = \ - -I$(top_srcdir)/src \ - -I$(top_srcdir)/src/testing/include \ - -I$(top_srcdir)/src/testing/gtest/include \ - -I$(top_srcdir)/src/testing/gtest \ - -I$(top_srcdir)/src/testing - src_processor_basic_source_line_resolver_unittest_LDADD = \ -+ src/common/module.o \ - src/processor/basic_source_line_resolver.o \ - src/processor/cfi_frame_info.o \ - src/processor/pathname_stripper.o \ - src/processor/logging.o \ - src/processor/source_line_resolver_base.o \ - src/processor/tokenize.o \ - $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) - - src_processor_cfi_frame_info_unittest_SOURCES = \ - src/processor/cfi_frame_info_unittest.cc \ - src/testing/gtest/src/gtest-all.cc \ - src/testing/gtest/src/gtest_main.cc \ - src/testing/src/gmock-all.cc - src_processor_cfi_frame_info_unittest_LDADD = \ -+ src/common/module.o \ - src/processor/cfi_frame_info.o \ - src/processor/logging.o \ - src/processor/pathname_stripper.o \ - $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) - src_processor_cfi_frame_info_unittest_CPPFLAGS = \ - -I$(top_srcdir)/src \ - -I$(top_srcdir)/src/testing/include \ - -I$(top_srcdir)/src/testing/gtest/include \ -@@ -598,16 +601,17 @@ - src/testing/src/gmock-all.cc - src_processor_exploitability_unittest_CPPFLAGS = \ - -I$(top_srcdir)/src \ - -I$(top_srcdir)/src/testing/include \ - -I$(top_srcdir)/src/testing/gtest/include \ - -I$(top_srcdir)/src/testing/gtest \ - -I$(top_srcdir)/src/testing - src_processor_exploitability_unittest_LDADD = \ -+ src/common/module.o \ - src/processor/minidump_processor.o \ - src/processor/process_state.o \ - src/processor/disassembler_x86.o \ - src/processor/exploitability.o \ - src/processor/exploitability_win.o \ - src/processor/basic_code_modules.o \ - src/processor/basic_source_line_resolver.o \ - src/processor/call_stack.o \ -@@ -649,16 +653,17 @@ - src/testing/src/gmock-all.cc - src_processor_fast_source_line_resolver_unittest_CPPFLAGS = \ - -I$(top_srcdir)/src \ - -I$(top_srcdir)/src/testing/include \ - -I$(top_srcdir)/src/testing/gtest/include \ - -I$(top_srcdir)/src/testing/gtest \ - -I$(top_srcdir)/src/testing - src_processor_fast_source_line_resolver_unittest_LDADD = \ -+ src/common/module.o \ - src/processor/fast_source_line_resolver.o \ - src/processor/basic_source_line_resolver.o \ - src/processor/cfi_frame_info.o \ - src/processor/module_comparer.o \ - src/processor/module_serializer.o \ - src/processor/pathname_stripper.o \ - src/processor/logging.o \ - src/processor/source_line_resolver_base.o \ -@@ -686,16 +691,17 @@ - src/testing/src/gmock-all.cc - src_processor_minidump_processor_unittest_CPPFLAGS = \ - -I$(top_srcdir)/src \ - -I$(top_srcdir)/src/testing/include \ - -I$(top_srcdir)/src/testing/gtest/include \ - -I$(top_srcdir)/src/testing/gtest \ - -I$(top_srcdir)/src/testing - src_processor_minidump_processor_unittest_LDADD = \ -+ src/common/module.o \ - src/processor/basic_code_modules.o \ - src/processor/basic_source_line_resolver.o \ - src/processor/call_stack.o \ - src/processor/cfi_frame_info.o \ - src/processor/disassembler_x86.o \ - src/processor/exploitability.o \ - src/processor/exploitability_win.o \ - src/processor/logging.o \ -@@ -799,16 +805,17 @@ - src/processor/pathname_stripper_unittest.cc - src_processor_pathname_stripper_unittest_LDADD = \ - src/processor/pathname_stripper.o \ - $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) - - src_processor_postfix_evaluator_unittest_SOURCES = \ - src/processor/postfix_evaluator_unittest.cc - src_processor_postfix_evaluator_unittest_LDADD = \ -+ src/common/module.o \ - src/processor/logging.o \ - src/processor/pathname_stripper.o \ - $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) - - src_processor_range_map_unittest_SOURCES = \ - src/processor/range_map_unittest.cc - src_processor_range_map_unittest_LDADD = \ - src/processor/logging.o \ -@@ -928,16 +935,17 @@ - src/processor/basic_code_modules.o \ - src/processor/logging.o \ - src/processor/minidump.o \ - src/processor/pathname_stripper.o - - src_processor_minidump_stackwalk_SOURCES = \ - src/processor/minidump_stackwalk.cc - src_processor_minidump_stackwalk_LDADD = \ -+ src/common/module.o \ - src/processor/basic_code_modules.o \ - src/processor/basic_source_line_resolver.o \ - src/processor/binarystream.o \ - src/processor/call_stack.o \ - src/processor/cfi_frame_info.o \ - src/processor/disassembler_x86.o \ - src/processor/exploitability.o \ - src/processor/exploitability_win.o \ -diff --git a/Makefile.in b/Makefile.in ---- a/Makefile.in -+++ b/Makefile.in -@@ -1,14 +1,14 @@ --# Makefile.in generated by automake 1.11.1 from Makefile.am. -+# Makefile.in generated by automake 1.11.3 from Makefile.am. - # @configure_input@ - - # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, --# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, --# Inc. -+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software -+# Foundation, Inc. - # This Makefile.in is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. - - # This program is distributed in the hope that it will be useful, - # but WITHOUT ANY WARRANTY, to the extent permitted by law; without - # even the implied warranty of MERCHANTABILITY or FITNESS FOR A - # PARTICULAR PURPOSE. -@@ -190,16 +190,22 @@ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' - am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -+am__uninstall_files_from_dir = { \ -+ test -z "$$files" \ -+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ -+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ -+ $(am__cd) "$$dir" && rm -f $$files; }; \ -+ } - am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \ - "$(DESTDIR)$(docdir)" - LIBRARIES = $(lib_LIBRARIES) $(noinst_LIBRARIES) - AR = ar - ARFLAGS = cru - src_client_linux_libbreakpad_client_a_AR = $(AR) $(ARFLAGS) - src_client_linux_libbreakpad_client_a_LIBADD = - am__src_client_linux_libbreakpad_client_a_SOURCES_DIST = \ -@@ -261,18 +267,18 @@ - src/google_breakpad/processor/source_line_resolver_base.h \ - src/google_breakpad/processor/source_line_resolver_interface.h \ - src/google_breakpad/processor/stack_frame.h \ - src/google_breakpad/processor/stack_frame_cpu.h \ - src/google_breakpad/processor/stack_frame_symbolizer.h \ - src/google_breakpad/processor/stackwalker.h \ - src/google_breakpad/processor/symbol_supplier.h \ - src/google_breakpad/processor/system_info.h \ -- src/processor/address_map-inl.h src/processor/address_map.h \ -- src/processor/basic_code_module.h \ -+ src/common/module.cc src/processor/address_map-inl.h \ -+ src/processor/address_map.h src/processor/basic_code_module.h \ - src/processor/basic_code_modules.cc \ - src/processor/basic_code_modules.h \ - src/processor/basic_source_line_resolver_types.h \ - src/processor/basic_source_line_resolver.cc \ - src/processor/binarystream.h src/processor/binarystream.cc \ - src/processor/call_stack.cc src/processor/cfi_frame_info.cc \ - src/processor/cfi_frame_info.h \ - src/processor/contained_range_map-inl.h \ -@@ -322,17 +328,19 @@ - src/processor/static_contained_range_map-inl.h \ - src/processor/static_contained_range_map.h \ - src/processor/static_map_iterator-inl.h \ - src/processor/static_map_iterator.h \ - src/processor/static_map-inl.h src/processor/static_map.h \ - src/processor/static_range_map-inl.h \ - src/processor/static_range_map.h src/processor/tokenize.cc \ - src/processor/tokenize.h --@DISABLE_PROCESSOR_FALSE@am_src_libbreakpad_a_OBJECTS = src/processor/basic_code_modules.$(OBJEXT) \ -+@DISABLE_PROCESSOR_FALSE@am_src_libbreakpad_a_OBJECTS = \ -+@DISABLE_PROCESSOR_FALSE@ src/common/module.$(OBJEXT) \ -+@DISABLE_PROCESSOR_FALSE@ src/processor/basic_code_modules.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/processor/binarystream.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/processor/call_stack.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/processor/disassembler_x86.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/processor/exploitability.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/processor/exploitability_win.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/processor/fast_source_line_resolver.$(OBJEXT) \ -@@ -620,17 +628,19 @@ - am__src_processor_basic_source_line_resolver_unittest_SOURCES_DIST = \ - src/processor/basic_source_line_resolver_unittest.cc \ - src/testing/gtest/src/gtest-all.cc \ - src/testing/src/gmock-all.cc - @DISABLE_PROCESSOR_FALSE@am_src_processor_basic_source_line_resolver_unittest_OBJECTS = src/processor/src_processor_basic_source_line_resolver_unittest-basic_source_line_resolver_unittest.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/testing/gtest/src/src_processor_basic_source_line_resolver_unittest-gtest-all.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/testing/src/src_processor_basic_source_line_resolver_unittest-gmock-all.$(OBJEXT) - src_processor_basic_source_line_resolver_unittest_OBJECTS = $(am_src_processor_basic_source_line_resolver_unittest_OBJECTS) --@DISABLE_PROCESSOR_FALSE@src_processor_basic_source_line_resolver_unittest_DEPENDENCIES = src/processor/basic_source_line_resolver.o \ -+@DISABLE_PROCESSOR_FALSE@src_processor_basic_source_line_resolver_unittest_DEPENDENCIES = \ -+@DISABLE_PROCESSOR_FALSE@ src/common/module.o \ -+@DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/source_line_resolver_base.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/tokenize.o \ - @DISABLE_PROCESSOR_FALSE@ $(am__DEPENDENCIES_1) \ - @DISABLE_PROCESSOR_FALSE@ $(am__DEPENDENCIES_1) - am__src_processor_binarystream_unittest_SOURCES_DIST = \ -@@ -653,16 +663,17 @@ - src/testing/src/gmock-all.cc - @DISABLE_PROCESSOR_FALSE@am_src_processor_cfi_frame_info_unittest_OBJECTS = src/processor/src_processor_cfi_frame_info_unittest-cfi_frame_info_unittest.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/testing/gtest/src/src_processor_cfi_frame_info_unittest-gtest-all.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/testing/gtest/src/src_processor_cfi_frame_info_unittest-gtest_main.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/testing/src/src_processor_cfi_frame_info_unittest-gmock-all.$(OBJEXT) - src_processor_cfi_frame_info_unittest_OBJECTS = \ - $(am_src_processor_cfi_frame_info_unittest_OBJECTS) - @DISABLE_PROCESSOR_FALSE@src_processor_cfi_frame_info_unittest_DEPENDENCIES = \ -+@DISABLE_PROCESSOR_FALSE@ src/common/module.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o \ - @DISABLE_PROCESSOR_FALSE@ $(am__DEPENDENCIES_1) \ - @DISABLE_PROCESSOR_FALSE@ $(am__DEPENDENCIES_1) - am__src_processor_contained_range_map_unittest_SOURCES_DIST = \ - src/processor/contained_range_map_unittest.cc - @DISABLE_PROCESSOR_FALSE@am_src_processor_contained_range_map_unittest_OBJECTS = src/processor/contained_range_map_unittest.$(OBJEXT) -@@ -694,16 +705,17 @@ - src/testing/src/gmock-all.cc - @DISABLE_PROCESSOR_FALSE@am_src_processor_exploitability_unittest_OBJECTS = src/processor/src_processor_exploitability_unittest-exploitability_unittest.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/testing/gtest/src/src_processor_exploitability_unittest-gtest-all.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/testing/gtest/src/src_processor_exploitability_unittest-gtest_main.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/testing/src/src_processor_exploitability_unittest-gmock-all.$(OBJEXT) - src_processor_exploitability_unittest_OBJECTS = \ - $(am_src_processor_exploitability_unittest_OBJECTS) - @DISABLE_PROCESSOR_FALSE@src_processor_exploitability_unittest_DEPENDENCIES = \ -+@DISABLE_PROCESSOR_FALSE@ src/common/module.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/minidump_processor.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/process_state.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/disassembler_x86.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/exploitability.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/exploitability_win.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_code_modules.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/call_stack.o \ -@@ -726,17 +738,19 @@ - am__src_processor_fast_source_line_resolver_unittest_SOURCES_DIST = \ - src/processor/fast_source_line_resolver_unittest.cc \ - src/testing/gtest/src/gtest-all.cc \ - src/testing/src/gmock-all.cc - @DISABLE_PROCESSOR_FALSE@am_src_processor_fast_source_line_resolver_unittest_OBJECTS = src/processor/src_processor_fast_source_line_resolver_unittest-fast_source_line_resolver_unittest.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/testing/gtest/src/src_processor_fast_source_line_resolver_unittest-gtest-all.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/testing/src/src_processor_fast_source_line_resolver_unittest-gmock-all.$(OBJEXT) - src_processor_fast_source_line_resolver_unittest_OBJECTS = $(am_src_processor_fast_source_line_resolver_unittest_OBJECTS) --@DISABLE_PROCESSOR_FALSE@src_processor_fast_source_line_resolver_unittest_DEPENDENCIES = src/processor/fast_source_line_resolver.o \ -+@DISABLE_PROCESSOR_FALSE@src_processor_fast_source_line_resolver_unittest_DEPENDENCIES = \ -+@DISABLE_PROCESSOR_FALSE@ src/common/module.o \ -+@DISABLE_PROCESSOR_FALSE@ src/processor/fast_source_line_resolver.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/module_comparer.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/module_serializer.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/source_line_resolver_base.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/tokenize.o \ -@@ -771,16 +785,17 @@ - src/testing/gtest/src/gtest-all.cc \ - src/testing/src/gmock-all.cc - @DISABLE_PROCESSOR_FALSE@am_src_processor_minidump_processor_unittest_OBJECTS = src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/testing/gtest/src/src_processor_minidump_processor_unittest-gtest-all.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/testing/src/src_processor_minidump_processor_unittest-gmock-all.$(OBJEXT) - src_processor_minidump_processor_unittest_OBJECTS = \ - $(am_src_processor_minidump_processor_unittest_OBJECTS) - @DISABLE_PROCESSOR_FALSE@src_processor_minidump_processor_unittest_DEPENDENCIES = \ -+@DISABLE_PROCESSOR_FALSE@ src/common/module.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_code_modules.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/call_stack.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/disassembler_x86.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/exploitability.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/exploitability_win.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \ -@@ -801,16 +816,17 @@ - @DISABLE_PROCESSOR_FALSE@ $(am__DEPENDENCIES_1) \ - @DISABLE_PROCESSOR_FALSE@ $(am__DEPENDENCIES_1) - am__src_processor_minidump_stackwalk_SOURCES_DIST = \ - src/processor/minidump_stackwalk.cc - @DISABLE_PROCESSOR_FALSE@am_src_processor_minidump_stackwalk_OBJECTS = src/processor/minidump_stackwalk.$(OBJEXT) - src_processor_minidump_stackwalk_OBJECTS = \ - $(am_src_processor_minidump_stackwalk_OBJECTS) - @DISABLE_PROCESSOR_FALSE@src_processor_minidump_stackwalk_DEPENDENCIES = \ -+@DISABLE_PROCESSOR_FALSE@ src/common/module.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_code_modules.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/binarystream.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/call_stack.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/disassembler_x86.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/exploitability.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/exploitability_win.o \ -@@ -862,16 +878,17 @@ - @DISABLE_PROCESSOR_FALSE@ $(am__DEPENDENCIES_1) \ - @DISABLE_PROCESSOR_FALSE@ $(am__DEPENDENCIES_1) - am__src_processor_postfix_evaluator_unittest_SOURCES_DIST = \ - src/processor/postfix_evaluator_unittest.cc - @DISABLE_PROCESSOR_FALSE@am_src_processor_postfix_evaluator_unittest_OBJECTS = src/processor/postfix_evaluator_unittest.$(OBJEXT) - src_processor_postfix_evaluator_unittest_OBJECTS = \ - $(am_src_processor_postfix_evaluator_unittest_OBJECTS) - @DISABLE_PROCESSOR_FALSE@src_processor_postfix_evaluator_unittest_DEPENDENCIES = \ -+@DISABLE_PROCESSOR_FALSE@ src/common/module.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o \ - @DISABLE_PROCESSOR_FALSE@ $(am__DEPENDENCIES_1) \ - @DISABLE_PROCESSOR_FALSE@ $(am__DEPENDENCIES_1) - am__src_processor_range_map_unittest_SOURCES_DIST = \ - src/processor/range_map_unittest.cc - @DISABLE_PROCESSOR_FALSE@am_src_processor_range_map_unittest_OBJECTS = src/processor/range_map_unittest.$(OBJEXT) - src_processor_range_map_unittest_OBJECTS = \ -@@ -1212,22 +1229,26 @@ - ETAGS = etags - CTAGS = ctags - am__tty_colors = \ - red=; grn=; lgn=; blu=; std= - DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) - distdir = $(PACKAGE)-$(VERSION) - top_distdir = $(distdir) - am__remove_distdir = \ -- { test ! -d "$(distdir)" \ -- || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ -- && rm -fr "$(distdir)"; }; } -+ if test -d "$(distdir)"; then \ -+ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ -+ && rm -rf "$(distdir)" \ -+ || { sleep 5 && rm -rf "$(distdir)"; }; \ -+ else :; fi - DIST_ARCHIVES = $(distdir).tar.gz - GZIP_ENV = --best - distuninstallcheck_listfiles = find . -type f -print -+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ -+ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' - distcleancheck_listfiles = find . -type f -print - ACLOCAL = @ACLOCAL@ - AMTAR = @AMTAR@ - AUTOCONF = @AUTOCONF@ - AUTOHEADER = @AUTOHEADER@ - AUTOMAKE = @AUTOMAKE@ - AWK = @AWK@ - CC = @CC@ -@@ -1383,16 +1404,17 @@ - @DISABLE_PROCESSOR_FALSE@ src/google_breakpad/processor/source_line_resolver_base.h \ - @DISABLE_PROCESSOR_FALSE@ src/google_breakpad/processor/source_line_resolver_interface.h \ - @DISABLE_PROCESSOR_FALSE@ src/google_breakpad/processor/stack_frame.h \ - @DISABLE_PROCESSOR_FALSE@ src/google_breakpad/processor/stack_frame_cpu.h \ - @DISABLE_PROCESSOR_FALSE@ src/google_breakpad/processor/stack_frame_symbolizer.h \ - @DISABLE_PROCESSOR_FALSE@ src/google_breakpad/processor/stackwalker.h \ - @DISABLE_PROCESSOR_FALSE@ src/google_breakpad/processor/symbol_supplier.h \ - @DISABLE_PROCESSOR_FALSE@ src/google_breakpad/processor/system_info.h \ -+@DISABLE_PROCESSOR_FALSE@ src/common/module.cc \ - @DISABLE_PROCESSOR_FALSE@ src/processor/address_map-inl.h \ - @DISABLE_PROCESSOR_FALSE@ src/processor/address_map.h \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_code_module.h \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_code_modules.cc \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_code_modules.h \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver_types.h \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.cc \ - @DISABLE_PROCESSOR_FALSE@ src/processor/binarystream.h \ -@@ -1715,31 +1737,33 @@ - @DISABLE_PROCESSOR_FALSE@src_processor_basic_source_line_resolver_unittest_CPPFLAGS = \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/include \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/gtest/include \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/gtest \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing - - @DISABLE_PROCESSOR_FALSE@src_processor_basic_source_line_resolver_unittest_LDADD = \ -+@DISABLE_PROCESSOR_FALSE@ src/common/module.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/source_line_resolver_base.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/tokenize.o \ - @DISABLE_PROCESSOR_FALSE@ $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) - - @DISABLE_PROCESSOR_FALSE@src_processor_cfi_frame_info_unittest_SOURCES = \ - @DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info_unittest.cc \ - @DISABLE_PROCESSOR_FALSE@ src/testing/gtest/src/gtest-all.cc \ - @DISABLE_PROCESSOR_FALSE@ src/testing/gtest/src/gtest_main.cc \ - @DISABLE_PROCESSOR_FALSE@ src/testing/src/gmock-all.cc - - @DISABLE_PROCESSOR_FALSE@src_processor_cfi_frame_info_unittest_LDADD = \ -+@DISABLE_PROCESSOR_FALSE@ src/common/module.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o \ - @DISABLE_PROCESSOR_FALSE@ $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) - - @DISABLE_PROCESSOR_FALSE@src_processor_cfi_frame_info_unittest_CPPFLAGS = \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/include \ -@@ -1763,16 +1787,17 @@ - @DISABLE_PROCESSOR_FALSE@src_processor_exploitability_unittest_CPPFLAGS = \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/include \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/gtest/include \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/gtest \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing - - @DISABLE_PROCESSOR_FALSE@src_processor_exploitability_unittest_LDADD = \ -+@DISABLE_PROCESSOR_FALSE@ src/common/module.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/minidump_processor.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/process_state.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/disassembler_x86.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/exploitability.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/exploitability_win.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_code_modules.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/call_stack.o \ -@@ -1818,16 +1843,17 @@ - @DISABLE_PROCESSOR_FALSE@src_processor_fast_source_line_resolver_unittest_CPPFLAGS = \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/include \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/gtest/include \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/gtest \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing - - @DISABLE_PROCESSOR_FALSE@src_processor_fast_source_line_resolver_unittest_LDADD = \ -+@DISABLE_PROCESSOR_FALSE@ src/common/module.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/fast_source_line_resolver.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/module_comparer.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/module_serializer.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/source_line_resolver_base.o \ -@@ -1859,16 +1885,17 @@ - @DISABLE_PROCESSOR_FALSE@src_processor_minidump_processor_unittest_CPPFLAGS = \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/include \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/gtest/include \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/gtest \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing - - @DISABLE_PROCESSOR_FALSE@src_processor_minidump_processor_unittest_LDADD = \ -+@DISABLE_PROCESSOR_FALSE@ src/common/module.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_code_modules.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/call_stack.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/disassembler_x86.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/exploitability.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/exploitability_win.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \ -@@ -1984,16 +2011,17 @@ - @DISABLE_PROCESSOR_FALSE@src_processor_pathname_stripper_unittest_LDADD = \ - @DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o \ - @DISABLE_PROCESSOR_FALSE@ $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) - - @DISABLE_PROCESSOR_FALSE@src_processor_postfix_evaluator_unittest_SOURCES = \ - @DISABLE_PROCESSOR_FALSE@ src/processor/postfix_evaluator_unittest.cc - - @DISABLE_PROCESSOR_FALSE@src_processor_postfix_evaluator_unittest_LDADD = \ -+@DISABLE_PROCESSOR_FALSE@ src/common/module.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o \ - @DISABLE_PROCESSOR_FALSE@ $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) - - @DISABLE_PROCESSOR_FALSE@src_processor_range_map_unittest_SOURCES = \ - @DISABLE_PROCESSOR_FALSE@ src/processor/range_map_unittest.cc - - @DISABLE_PROCESSOR_FALSE@src_processor_range_map_unittest_LDADD = \ -@@ -2122,16 +2150,17 @@ - @DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/minidump.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o - - @DISABLE_PROCESSOR_FALSE@src_processor_minidump_stackwalk_SOURCES = \ - @DISABLE_PROCESSOR_FALSE@ src/processor/minidump_stackwalk.cc - - @DISABLE_PROCESSOR_FALSE@src_processor_minidump_stackwalk_LDADD = \ -+@DISABLE_PROCESSOR_FALSE@ src/common/module.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_code_modules.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/binarystream.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/call_stack.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/disassembler_x86.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/exploitability.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/exploitability_win.o \ -@@ -2289,17 +2318,17 @@ - src/tools/windows/dump_syms/testdata/dump_syms_regtest.sym \ - src/tools/windows/symupload/symupload.cc \ - src/tools/windows/symupload/symupload.vcproj - - all: all-am - - .SUFFIXES: - .SUFFIXES: .S .c .cc .o .obj --am--refresh: -+am--refresh: Makefile - @: - $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ - $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ - && exit 0; \ -@@ -2325,20 +2354,18 @@ - - $(top_srcdir)/configure: $(am__configure_deps) - $(am__cd) $(srcdir) && $(AUTOCONF) - $(ACLOCAL_M4): $(am__aclocal_m4_deps) - $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) - $(am__aclocal_m4_deps): - - src/config.h: src/stamp-h1 -- @if test ! -f $@; then \ -- rm -f src/stamp-h1; \ -- $(MAKE) $(AM_MAKEFLAGS) src/stamp-h1; \ -- else :; fi -+ @if test ! -f $@; then rm -f src/stamp-h1; else :; fi -+ @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) src/stamp-h1; else :; fi - - src/stamp-h1: $(top_srcdir)/src/config.h.in $(top_builddir)/config.status - @rm -f src/stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status src/config.h - $(top_srcdir)/src/config.h.in: $(am__configure_deps) - ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) - rm -f src/stamp-h1 - touch $@ -@@ -2366,19 +2393,17 @@ - ( cd "$(DESTDIR)$(libdir)" && $(RANLIB) $$f ) || exit $$?; \ - else :; fi; \ - done - - uninstall-libLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ -- test -n "$$files" || exit 0; \ -- echo " ( cd '$(DESTDIR)$(libdir)' && rm -f "$$files" )"; \ -- cd "$(DESTDIR)$(libdir)" && rm -f $$files -+ dir='$(DESTDIR)$(libdir)'; $(am__uninstall_files_from_dir) - - clean-libLIBRARIES: - -test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES) - - clean-noinstLIBRARIES: - -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) - src/client/linux/crash_generation/$(am__dirstamp): - @$(MKDIR_P) src/client/linux/crash_generation -@@ -2477,20 +2502,22 @@ - @$(MKDIR_P) src/common/android/$(DEPDIR) - @: > src/common/android/$(DEPDIR)/$(am__dirstamp) - src/common/android/breakpad_getcontext.$(OBJEXT): \ - src/common/android/$(am__dirstamp) \ - src/common/android/$(DEPDIR)/$(am__dirstamp) - src/client/linux/$(am__dirstamp): - @$(MKDIR_P) src/client/linux - @: > src/client/linux/$(am__dirstamp) --src/client/linux/libbreakpad_client.a: $(src_client_linux_libbreakpad_client_a_OBJECTS) $(src_client_linux_libbreakpad_client_a_DEPENDENCIES) src/client/linux/$(am__dirstamp) -+src/client/linux/libbreakpad_client.a: $(src_client_linux_libbreakpad_client_a_OBJECTS) $(src_client_linux_libbreakpad_client_a_DEPENDENCIES) $(EXTRA_src_client_linux_libbreakpad_client_a_DEPENDENCIES) src/client/linux/$(am__dirstamp) - -rm -f src/client/linux/libbreakpad_client.a - $(src_client_linux_libbreakpad_client_a_AR) src/client/linux/libbreakpad_client.a $(src_client_linux_libbreakpad_client_a_OBJECTS) $(src_client_linux_libbreakpad_client_a_LIBADD) - $(RANLIB) src/client/linux/libbreakpad_client.a -+src/common/module.$(OBJEXT): src/common/$(am__dirstamp) \ -+ src/common/$(DEPDIR)/$(am__dirstamp) - src/processor/$(am__dirstamp): - @$(MKDIR_P) src/processor - @: > src/processor/$(am__dirstamp) - src/processor/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/processor/$(DEPDIR) - @: > src/processor/$(DEPDIR)/$(am__dirstamp) - src/processor/basic_code_modules.$(OBJEXT): \ - src/processor/$(am__dirstamp) \ -@@ -2559,17 +2586,17 @@ - src/processor/stackwalker_x86.$(OBJEXT): \ - src/processor/$(am__dirstamp) \ - src/processor/$(DEPDIR)/$(am__dirstamp) - src/processor/tokenize.$(OBJEXT): src/processor/$(am__dirstamp) \ - src/processor/$(DEPDIR)/$(am__dirstamp) - src/$(am__dirstamp): - @$(MKDIR_P) src - @: > src/$(am__dirstamp) --src/libbreakpad.a: $(src_libbreakpad_a_OBJECTS) $(src_libbreakpad_a_DEPENDENCIES) src/$(am__dirstamp) -+src/libbreakpad.a: $(src_libbreakpad_a_OBJECTS) $(src_libbreakpad_a_DEPENDENCIES) $(EXTRA_src_libbreakpad_a_DEPENDENCIES) src/$(am__dirstamp) - -rm -f src/libbreakpad.a - $(src_libbreakpad_a_AR) src/libbreakpad.a $(src_libbreakpad_a_OBJECTS) $(src_libbreakpad_a_LIBADD) - $(RANLIB) src/libbreakpad.a - src/third_party/libdisasm/$(am__dirstamp): - @$(MKDIR_P) src/third_party/libdisasm - @: > src/third_party/libdisasm/$(am__dirstamp) - src/third_party/libdisasm/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/third_party/libdisasm/$(DEPDIR) -@@ -2611,17 +2638,17 @@ - src/third_party/libdisasm/$(am__dirstamp) \ - src/third_party/libdisasm/$(DEPDIR)/$(am__dirstamp) - src/third_party/libdisasm/x86_misc.$(OBJEXT): \ - src/third_party/libdisasm/$(am__dirstamp) \ - src/third_party/libdisasm/$(DEPDIR)/$(am__dirstamp) - src/third_party/libdisasm/x86_operand_list.$(OBJEXT): \ - src/third_party/libdisasm/$(am__dirstamp) \ - src/third_party/libdisasm/$(DEPDIR)/$(am__dirstamp) --src/third_party/libdisasm/libdisasm.a: $(src_third_party_libdisasm_libdisasm_a_OBJECTS) $(src_third_party_libdisasm_libdisasm_a_DEPENDENCIES) src/third_party/libdisasm/$(am__dirstamp) -+src/third_party/libdisasm/libdisasm.a: $(src_third_party_libdisasm_libdisasm_a_OBJECTS) $(src_third_party_libdisasm_libdisasm_a_DEPENDENCIES) $(EXTRA_src_third_party_libdisasm_libdisasm_a_DEPENDENCIES) src/third_party/libdisasm/$(am__dirstamp) - -rm -f src/third_party/libdisasm/libdisasm.a - $(src_third_party_libdisasm_libdisasm_a_AR) src/third_party/libdisasm/libdisasm.a $(src_third_party_libdisasm_libdisasm_a_OBJECTS) $(src_third_party_libdisasm_libdisasm_a_LIBADD) - $(RANLIB) src/third_party/libdisasm/libdisasm.a - install-binPROGRAMS: $(bin_PROGRAMS) - @$(NORMAL_INSTALL) - test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - for p in $$list; do echo "$$p $$p"; done | \ -@@ -2658,17 +2685,17 @@ - clean-binPROGRAMS: - -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) - - clean-checkPROGRAMS: - -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) - - clean-noinstPROGRAMS: - -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) --src/client/linux/linux_client_unittest$(EXEEXT): $(src_client_linux_linux_client_unittest_OBJECTS) $(src_client_linux_linux_client_unittest_DEPENDENCIES) src/client/linux/$(am__dirstamp) -+src/client/linux/linux_client_unittest$(EXEEXT): $(src_client_linux_linux_client_unittest_OBJECTS) $(src_client_linux_linux_client_unittest_DEPENDENCIES) $(EXTRA_src_client_linux_linux_client_unittest_DEPENDENCIES) src/client/linux/$(am__dirstamp) - @rm -f src/client/linux/linux_client_unittest$(EXEEXT) - $(src_client_linux_linux_client_unittest_LINK) $(src_client_linux_linux_client_unittest_OBJECTS) $(src_client_linux_linux_client_unittest_LDADD) $(LIBS) - src/client/linux/handler/src_client_linux_linux_client_unittest_shlib-exception_handler_unittest.$(OBJEXT): \ - src/client/linux/handler/$(am__dirstamp) \ - src/client/linux/handler/$(DEPDIR)/$(am__dirstamp) - src/client/linux/minidump_writer/src_client_linux_linux_client_unittest_shlib-directory_reader_unittest.$(OBJEXT): \ - src/client/linux/minidump_writer/$(am__dirstamp) \ - src/client/linux/minidump_writer/$(DEPDIR)/$(am__dirstamp) -@@ -2751,23 +2778,23 @@ - src/processor/$(am__dirstamp) \ - src/processor/$(DEPDIR)/$(am__dirstamp) - src/common/android/src_client_linux_linux_client_unittest_shlib-breakpad_getcontext.$(OBJEXT): \ - src/common/android/$(am__dirstamp) \ - src/common/android/$(DEPDIR)/$(am__dirstamp) - src/common/android/src_client_linux_linux_client_unittest_shlib-breakpad_getcontext_unittest.$(OBJEXT): \ - src/common/android/$(am__dirstamp) \ - src/common/android/$(DEPDIR)/$(am__dirstamp) --src/client/linux/linux_client_unittest_shlib$(EXEEXT): $(src_client_linux_linux_client_unittest_shlib_OBJECTS) $(src_client_linux_linux_client_unittest_shlib_DEPENDENCIES) src/client/linux/$(am__dirstamp) -+src/client/linux/linux_client_unittest_shlib$(EXEEXT): $(src_client_linux_linux_client_unittest_shlib_OBJECTS) $(src_client_linux_linux_client_unittest_shlib_DEPENDENCIES) $(EXTRA_src_client_linux_linux_client_unittest_shlib_DEPENDENCIES) src/client/linux/$(am__dirstamp) - @rm -f src/client/linux/linux_client_unittest_shlib$(EXEEXT) - $(src_client_linux_linux_client_unittest_shlib_LINK) $(src_client_linux_linux_client_unittest_shlib_OBJECTS) $(src_client_linux_linux_client_unittest_shlib_LDADD) $(LIBS) - src/client/linux/minidump_writer/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.$(OBJEXT): \ - src/client/linux/minidump_writer/$(am__dirstamp) \ - src/client/linux/minidump_writer/$(DEPDIR)/$(am__dirstamp) --src/client/linux/linux_dumper_unittest_helper$(EXEEXT): $(src_client_linux_linux_dumper_unittest_helper_OBJECTS) $(src_client_linux_linux_dumper_unittest_helper_DEPENDENCIES) src/client/linux/$(am__dirstamp) -+src/client/linux/linux_dumper_unittest_helper$(EXEEXT): $(src_client_linux_linux_dumper_unittest_helper_OBJECTS) $(src_client_linux_linux_dumper_unittest_helper_DEPENDENCIES) $(EXTRA_src_client_linux_linux_dumper_unittest_helper_DEPENDENCIES) src/client/linux/$(am__dirstamp) - @rm -f src/client/linux/linux_dumper_unittest_helper$(EXEEXT) - $(src_client_linux_linux_dumper_unittest_helper_LINK) $(src_client_linux_linux_dumper_unittest_helper_OBJECTS) $(src_client_linux_linux_dumper_unittest_helper_LDADD) $(LIBS) - src/common/src_common_dumper_unittest-byte_cursor_unittest.$(OBJEXT): \ - src/common/$(am__dirstamp) \ - src/common/$(DEPDIR)/$(am__dirstamp) - src/common/src_common_dumper_unittest-dwarf_cfi_to_module.$(OBJEXT): \ - src/common/$(am__dirstamp) \ - src/common/$(DEPDIR)/$(am__dirstamp) -@@ -2901,17 +2928,17 @@ - src/testing/gtest/src/$(am__dirstamp) \ - src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp) - src/testing/gtest/src/src_common_dumper_unittest-gtest_main.$(OBJEXT): \ - src/testing/gtest/src/$(am__dirstamp) \ - src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp) - src/testing/src/src_common_dumper_unittest-gmock-all.$(OBJEXT): \ - src/testing/src/$(am__dirstamp) \ - src/testing/src/$(DEPDIR)/$(am__dirstamp) --src/common/dumper_unittest$(EXEEXT): $(src_common_dumper_unittest_OBJECTS) $(src_common_dumper_unittest_DEPENDENCIES) src/common/$(am__dirstamp) -+src/common/dumper_unittest$(EXEEXT): $(src_common_dumper_unittest_OBJECTS) $(src_common_dumper_unittest_DEPENDENCIES) $(EXTRA_src_common_dumper_unittest_DEPENDENCIES) src/common/$(am__dirstamp) - @rm -f src/common/dumper_unittest$(EXEEXT) - $(CXXLINK) $(src_common_dumper_unittest_OBJECTS) $(src_common_dumper_unittest_LDADD) $(LIBS) - src/common/src_common_test_assembler_unittest-test_assembler.$(OBJEXT): \ - src/common/$(am__dirstamp) \ - src/common/$(DEPDIR)/$(am__dirstamp) - src/common/src_common_test_assembler_unittest-test_assembler_unittest.$(OBJEXT): \ - src/common/$(am__dirstamp) \ - src/common/$(DEPDIR)/$(am__dirstamp) -@@ -2919,145 +2946,145 @@ - src/testing/gtest/src/$(am__dirstamp) \ - src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp) - src/testing/gtest/src/src_common_test_assembler_unittest-gtest_main.$(OBJEXT): \ - src/testing/gtest/src/$(am__dirstamp) \ - src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp) - src/testing/src/src_common_test_assembler_unittest-gmock-all.$(OBJEXT): \ - src/testing/src/$(am__dirstamp) \ - src/testing/src/$(DEPDIR)/$(am__dirstamp) --src/common/test_assembler_unittest$(EXEEXT): $(src_common_test_assembler_unittest_OBJECTS) $(src_common_test_assembler_unittest_DEPENDENCIES) src/common/$(am__dirstamp) -+src/common/test_assembler_unittest$(EXEEXT): $(src_common_test_assembler_unittest_OBJECTS) $(src_common_test_assembler_unittest_DEPENDENCIES) $(EXTRA_src_common_test_assembler_unittest_DEPENDENCIES) src/common/$(am__dirstamp) - @rm -f src/common/test_assembler_unittest$(EXEEXT) - $(CXXLINK) $(src_common_test_assembler_unittest_OBJECTS) $(src_common_test_assembler_unittest_LDADD) $(LIBS) - src/processor/address_map_unittest.$(OBJEXT): \ - src/processor/$(am__dirstamp) \ - src/processor/$(DEPDIR)/$(am__dirstamp) --src/processor/address_map_unittest$(EXEEXT): $(src_processor_address_map_unittest_OBJECTS) $(src_processor_address_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) -+src/processor/address_map_unittest$(EXEEXT): $(src_processor_address_map_unittest_OBJECTS) $(src_processor_address_map_unittest_DEPENDENCIES) $(EXTRA_src_processor_address_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) - @rm -f src/processor/address_map_unittest$(EXEEXT) - $(CXXLINK) $(src_processor_address_map_unittest_OBJECTS) $(src_processor_address_map_unittest_LDADD) $(LIBS) - src/processor/src_processor_basic_source_line_resolver_unittest-basic_source_line_resolver_unittest.$(OBJEXT): \ - src/processor/$(am__dirstamp) \ - src/processor/$(DEPDIR)/$(am__dirstamp) - src/testing/gtest/src/src_processor_basic_source_line_resolver_unittest-gtest-all.$(OBJEXT): \ - src/testing/gtest/src/$(am__dirstamp) \ - src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp) - src/testing/src/src_processor_basic_source_line_resolver_unittest-gmock-all.$(OBJEXT): \ - src/testing/src/$(am__dirstamp) \ - src/testing/src/$(DEPDIR)/$(am__dirstamp) --src/processor/basic_source_line_resolver_unittest$(EXEEXT): $(src_processor_basic_source_line_resolver_unittest_OBJECTS) $(src_processor_basic_source_line_resolver_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) -+src/processor/basic_source_line_resolver_unittest$(EXEEXT): $(src_processor_basic_source_line_resolver_unittest_OBJECTS) $(src_processor_basic_source_line_resolver_unittest_DEPENDENCIES) $(EXTRA_src_processor_basic_source_line_resolver_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) - @rm -f src/processor/basic_source_line_resolver_unittest$(EXEEXT) - $(CXXLINK) $(src_processor_basic_source_line_resolver_unittest_OBJECTS) $(src_processor_basic_source_line_resolver_unittest_LDADD) $(LIBS) - src/processor/src_processor_binarystream_unittest-binarystream_unittest.$(OBJEXT): \ - src/processor/$(am__dirstamp) \ - src/processor/$(DEPDIR)/$(am__dirstamp) - src/testing/gtest/src/src_processor_binarystream_unittest-gtest-all.$(OBJEXT): \ - src/testing/gtest/src/$(am__dirstamp) \ - src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp) - src/testing/src/src_processor_binarystream_unittest-gmock-all.$(OBJEXT): \ - src/testing/src/$(am__dirstamp) \ - src/testing/src/$(DEPDIR)/$(am__dirstamp) --src/processor/binarystream_unittest$(EXEEXT): $(src_processor_binarystream_unittest_OBJECTS) $(src_processor_binarystream_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) -+src/processor/binarystream_unittest$(EXEEXT): $(src_processor_binarystream_unittest_OBJECTS) $(src_processor_binarystream_unittest_DEPENDENCIES) $(EXTRA_src_processor_binarystream_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) - @rm -f src/processor/binarystream_unittest$(EXEEXT) - $(CXXLINK) $(src_processor_binarystream_unittest_OBJECTS) $(src_processor_binarystream_unittest_LDADD) $(LIBS) - src/processor/src_processor_cfi_frame_info_unittest-cfi_frame_info_unittest.$(OBJEXT): \ - src/processor/$(am__dirstamp) \ - src/processor/$(DEPDIR)/$(am__dirstamp) - src/testing/gtest/src/src_processor_cfi_frame_info_unittest-gtest-all.$(OBJEXT): \ - src/testing/gtest/src/$(am__dirstamp) \ - src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp) - src/testing/gtest/src/src_processor_cfi_frame_info_unittest-gtest_main.$(OBJEXT): \ - src/testing/gtest/src/$(am__dirstamp) \ - src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp) - src/testing/src/src_processor_cfi_frame_info_unittest-gmock-all.$(OBJEXT): \ - src/testing/src/$(am__dirstamp) \ - src/testing/src/$(DEPDIR)/$(am__dirstamp) --src/processor/cfi_frame_info_unittest$(EXEEXT): $(src_processor_cfi_frame_info_unittest_OBJECTS) $(src_processor_cfi_frame_info_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) -+src/processor/cfi_frame_info_unittest$(EXEEXT): $(src_processor_cfi_frame_info_unittest_OBJECTS) $(src_processor_cfi_frame_info_unittest_DEPENDENCIES) $(EXTRA_src_processor_cfi_frame_info_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) - @rm -f src/processor/cfi_frame_info_unittest$(EXEEXT) - $(CXXLINK) $(src_processor_cfi_frame_info_unittest_OBJECTS) $(src_processor_cfi_frame_info_unittest_LDADD) $(LIBS) - src/processor/contained_range_map_unittest.$(OBJEXT): \ - src/processor/$(am__dirstamp) \ - src/processor/$(DEPDIR)/$(am__dirstamp) --src/processor/contained_range_map_unittest$(EXEEXT): $(src_processor_contained_range_map_unittest_OBJECTS) $(src_processor_contained_range_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) -+src/processor/contained_range_map_unittest$(EXEEXT): $(src_processor_contained_range_map_unittest_OBJECTS) $(src_processor_contained_range_map_unittest_DEPENDENCIES) $(EXTRA_src_processor_contained_range_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) - @rm -f src/processor/contained_range_map_unittest$(EXEEXT) - $(CXXLINK) $(src_processor_contained_range_map_unittest_OBJECTS) $(src_processor_contained_range_map_unittest_LDADD) $(LIBS) - src/processor/src_processor_disassembler_x86_unittest-disassembler_x86_unittest.$(OBJEXT): \ - src/processor/$(am__dirstamp) \ - src/processor/$(DEPDIR)/$(am__dirstamp) - src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest-all.$(OBJEXT): \ - src/testing/gtest/src/$(am__dirstamp) \ - src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp) - src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest_main.$(OBJEXT): \ - src/testing/gtest/src/$(am__dirstamp) \ - src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp) - src/testing/src/src_processor_disassembler_x86_unittest-gmock-all.$(OBJEXT): \ - src/testing/src/$(am__dirstamp) \ - src/testing/src/$(DEPDIR)/$(am__dirstamp) --src/processor/disassembler_x86_unittest$(EXEEXT): $(src_processor_disassembler_x86_unittest_OBJECTS) $(src_processor_disassembler_x86_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) -+src/processor/disassembler_x86_unittest$(EXEEXT): $(src_processor_disassembler_x86_unittest_OBJECTS) $(src_processor_disassembler_x86_unittest_DEPENDENCIES) $(EXTRA_src_processor_disassembler_x86_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) - @rm -f src/processor/disassembler_x86_unittest$(EXEEXT) - $(CXXLINK) $(src_processor_disassembler_x86_unittest_OBJECTS) $(src_processor_disassembler_x86_unittest_LDADD) $(LIBS) - src/processor/src_processor_exploitability_unittest-exploitability_unittest.$(OBJEXT): \ - src/processor/$(am__dirstamp) \ - src/processor/$(DEPDIR)/$(am__dirstamp) - src/testing/gtest/src/src_processor_exploitability_unittest-gtest-all.$(OBJEXT): \ - src/testing/gtest/src/$(am__dirstamp) \ - src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp) - src/testing/gtest/src/src_processor_exploitability_unittest-gtest_main.$(OBJEXT): \ - src/testing/gtest/src/$(am__dirstamp) \ - src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp) - src/testing/src/src_processor_exploitability_unittest-gmock-all.$(OBJEXT): \ - src/testing/src/$(am__dirstamp) \ - src/testing/src/$(DEPDIR)/$(am__dirstamp) --src/processor/exploitability_unittest$(EXEEXT): $(src_processor_exploitability_unittest_OBJECTS) $(src_processor_exploitability_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) -+src/processor/exploitability_unittest$(EXEEXT): $(src_processor_exploitability_unittest_OBJECTS) $(src_processor_exploitability_unittest_DEPENDENCIES) $(EXTRA_src_processor_exploitability_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) - @rm -f src/processor/exploitability_unittest$(EXEEXT) - $(CXXLINK) $(src_processor_exploitability_unittest_OBJECTS) $(src_processor_exploitability_unittest_LDADD) $(LIBS) - src/processor/src_processor_fast_source_line_resolver_unittest-fast_source_line_resolver_unittest.$(OBJEXT): \ - src/processor/$(am__dirstamp) \ - src/processor/$(DEPDIR)/$(am__dirstamp) - src/testing/gtest/src/src_processor_fast_source_line_resolver_unittest-gtest-all.$(OBJEXT): \ - src/testing/gtest/src/$(am__dirstamp) \ - src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp) - src/testing/src/src_processor_fast_source_line_resolver_unittest-gmock-all.$(OBJEXT): \ - src/testing/src/$(am__dirstamp) \ - src/testing/src/$(DEPDIR)/$(am__dirstamp) --src/processor/fast_source_line_resolver_unittest$(EXEEXT): $(src_processor_fast_source_line_resolver_unittest_OBJECTS) $(src_processor_fast_source_line_resolver_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) -+src/processor/fast_source_line_resolver_unittest$(EXEEXT): $(src_processor_fast_source_line_resolver_unittest_OBJECTS) $(src_processor_fast_source_line_resolver_unittest_DEPENDENCIES) $(EXTRA_src_processor_fast_source_line_resolver_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) - @rm -f src/processor/fast_source_line_resolver_unittest$(EXEEXT) - $(CXXLINK) $(src_processor_fast_source_line_resolver_unittest_OBJECTS) $(src_processor_fast_source_line_resolver_unittest_LDADD) $(LIBS) - src/processor/src_processor_map_serializers_unittest-map_serializers_unittest.$(OBJEXT): \ - src/processor/$(am__dirstamp) \ - src/processor/$(DEPDIR)/$(am__dirstamp) - src/testing/gtest/src/src_processor_map_serializers_unittest-gtest-all.$(OBJEXT): \ - src/testing/gtest/src/$(am__dirstamp) \ - src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp) - src/testing/src/src_processor_map_serializers_unittest-gmock-all.$(OBJEXT): \ - src/testing/src/$(am__dirstamp) \ - src/testing/src/$(DEPDIR)/$(am__dirstamp) --src/processor/map_serializers_unittest$(EXEEXT): $(src_processor_map_serializers_unittest_OBJECTS) $(src_processor_map_serializers_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) -+src/processor/map_serializers_unittest$(EXEEXT): $(src_processor_map_serializers_unittest_OBJECTS) $(src_processor_map_serializers_unittest_DEPENDENCIES) $(EXTRA_src_processor_map_serializers_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) - @rm -f src/processor/map_serializers_unittest$(EXEEXT) - $(CXXLINK) $(src_processor_map_serializers_unittest_OBJECTS) $(src_processor_map_serializers_unittest_LDADD) $(LIBS) - src/processor/minidump_dump.$(OBJEXT): src/processor/$(am__dirstamp) \ - src/processor/$(DEPDIR)/$(am__dirstamp) --src/processor/minidump_dump$(EXEEXT): $(src_processor_minidump_dump_OBJECTS) $(src_processor_minidump_dump_DEPENDENCIES) src/processor/$(am__dirstamp) -+src/processor/minidump_dump$(EXEEXT): $(src_processor_minidump_dump_OBJECTS) $(src_processor_minidump_dump_DEPENDENCIES) $(EXTRA_src_processor_minidump_dump_DEPENDENCIES) src/processor/$(am__dirstamp) - @rm -f src/processor/minidump_dump$(EXEEXT) - $(CXXLINK) $(src_processor_minidump_dump_OBJECTS) $(src_processor_minidump_dump_LDADD) $(LIBS) - src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.$(OBJEXT): \ - src/processor/$(am__dirstamp) \ - src/processor/$(DEPDIR)/$(am__dirstamp) - src/testing/gtest/src/src_processor_minidump_processor_unittest-gtest-all.$(OBJEXT): \ - src/testing/gtest/src/$(am__dirstamp) \ - src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp) - src/testing/src/src_processor_minidump_processor_unittest-gmock-all.$(OBJEXT): \ - src/testing/src/$(am__dirstamp) \ - src/testing/src/$(DEPDIR)/$(am__dirstamp) --src/processor/minidump_processor_unittest$(EXEEXT): $(src_processor_minidump_processor_unittest_OBJECTS) $(src_processor_minidump_processor_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) -+src/processor/minidump_processor_unittest$(EXEEXT): $(src_processor_minidump_processor_unittest_OBJECTS) $(src_processor_minidump_processor_unittest_DEPENDENCIES) $(EXTRA_src_processor_minidump_processor_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) - @rm -f src/processor/minidump_processor_unittest$(EXEEXT) - $(CXXLINK) $(src_processor_minidump_processor_unittest_OBJECTS) $(src_processor_minidump_processor_unittest_LDADD) $(LIBS) - src/processor/minidump_stackwalk.$(OBJEXT): \ - src/processor/$(am__dirstamp) \ - src/processor/$(DEPDIR)/$(am__dirstamp) --src/processor/minidump_stackwalk$(EXEEXT): $(src_processor_minidump_stackwalk_OBJECTS) $(src_processor_minidump_stackwalk_DEPENDENCIES) src/processor/$(am__dirstamp) -+src/processor/minidump_stackwalk$(EXEEXT): $(src_processor_minidump_stackwalk_OBJECTS) $(src_processor_minidump_stackwalk_DEPENDENCIES) $(EXTRA_src_processor_minidump_stackwalk_DEPENDENCIES) src/processor/$(am__dirstamp) - @rm -f src/processor/minidump_stackwalk$(EXEEXT) - $(CXXLINK) $(src_processor_minidump_stackwalk_OBJECTS) $(src_processor_minidump_stackwalk_LDADD) $(LIBS) - src/common/src_processor_minidump_unittest-test_assembler.$(OBJEXT): \ - src/common/$(am__dirstamp) \ - src/common/$(DEPDIR)/$(am__dirstamp) - src/processor/src_processor_minidump_unittest-minidump_unittest.$(OBJEXT): \ - src/processor/$(am__dirstamp) \ - src/processor/$(DEPDIR)/$(am__dirstamp) -@@ -3068,35 +3095,35 @@ - src/testing/gtest/src/$(am__dirstamp) \ - src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp) - src/testing/gtest/src/src_processor_minidump_unittest-gtest_main.$(OBJEXT): \ - src/testing/gtest/src/$(am__dirstamp) \ - src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp) - src/testing/src/src_processor_minidump_unittest-gmock-all.$(OBJEXT): \ - src/testing/src/$(am__dirstamp) \ - src/testing/src/$(DEPDIR)/$(am__dirstamp) --src/processor/minidump_unittest$(EXEEXT): $(src_processor_minidump_unittest_OBJECTS) $(src_processor_minidump_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) -+src/processor/minidump_unittest$(EXEEXT): $(src_processor_minidump_unittest_OBJECTS) $(src_processor_minidump_unittest_DEPENDENCIES) $(EXTRA_src_processor_minidump_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) - @rm -f src/processor/minidump_unittest$(EXEEXT) - $(CXXLINK) $(src_processor_minidump_unittest_OBJECTS) $(src_processor_minidump_unittest_LDADD) $(LIBS) - src/processor/pathname_stripper_unittest.$(OBJEXT): \ - src/processor/$(am__dirstamp) \ - src/processor/$(DEPDIR)/$(am__dirstamp) --src/processor/pathname_stripper_unittest$(EXEEXT): $(src_processor_pathname_stripper_unittest_OBJECTS) $(src_processor_pathname_stripper_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) -+src/processor/pathname_stripper_unittest$(EXEEXT): $(src_processor_pathname_stripper_unittest_OBJECTS) $(src_processor_pathname_stripper_unittest_DEPENDENCIES) $(EXTRA_src_processor_pathname_stripper_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) - @rm -f src/processor/pathname_stripper_unittest$(EXEEXT) - $(CXXLINK) $(src_processor_pathname_stripper_unittest_OBJECTS) $(src_processor_pathname_stripper_unittest_LDADD) $(LIBS) - src/processor/postfix_evaluator_unittest.$(OBJEXT): \ - src/processor/$(am__dirstamp) \ - src/processor/$(DEPDIR)/$(am__dirstamp) --src/processor/postfix_evaluator_unittest$(EXEEXT): $(src_processor_postfix_evaluator_unittest_OBJECTS) $(src_processor_postfix_evaluator_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) -+src/processor/postfix_evaluator_unittest$(EXEEXT): $(src_processor_postfix_evaluator_unittest_OBJECTS) $(src_processor_postfix_evaluator_unittest_DEPENDENCIES) $(EXTRA_src_processor_postfix_evaluator_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) - @rm -f src/processor/postfix_evaluator_unittest$(EXEEXT) - $(CXXLINK) $(src_processor_postfix_evaluator_unittest_OBJECTS) $(src_processor_postfix_evaluator_unittest_LDADD) $(LIBS) - src/processor/range_map_unittest.$(OBJEXT): \ - src/processor/$(am__dirstamp) \ - src/processor/$(DEPDIR)/$(am__dirstamp) --src/processor/range_map_unittest$(EXEEXT): $(src_processor_range_map_unittest_OBJECTS) $(src_processor_range_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) -+src/processor/range_map_unittest$(EXEEXT): $(src_processor_range_map_unittest_OBJECTS) $(src_processor_range_map_unittest_DEPENDENCIES) $(EXTRA_src_processor_range_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) - @rm -f src/processor/range_map_unittest$(EXEEXT) - $(CXXLINK) $(src_processor_range_map_unittest_OBJECTS) $(src_processor_range_map_unittest_LDADD) $(LIBS) - src/common/src_processor_stackwalker_amd64_unittest-test_assembler.$(OBJEXT): \ - src/common/$(am__dirstamp) \ - src/common/$(DEPDIR)/$(am__dirstamp) - src/processor/src_processor_stackwalker_amd64_unittest-stackwalker_amd64_unittest.$(OBJEXT): \ - src/processor/$(am__dirstamp) \ - src/processor/$(DEPDIR)/$(am__dirstamp) -@@ -3104,17 +3131,17 @@ - src/testing/gtest/src/$(am__dirstamp) \ - src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp) - src/testing/gtest/src/src_processor_stackwalker_amd64_unittest-gtest_main.$(OBJEXT): \ - src/testing/gtest/src/$(am__dirstamp) \ - src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp) - src/testing/src/src_processor_stackwalker_amd64_unittest-gmock-all.$(OBJEXT): \ - src/testing/src/$(am__dirstamp) \ - src/testing/src/$(DEPDIR)/$(am__dirstamp) --src/processor/stackwalker_amd64_unittest$(EXEEXT): $(src_processor_stackwalker_amd64_unittest_OBJECTS) $(src_processor_stackwalker_amd64_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) -+src/processor/stackwalker_amd64_unittest$(EXEEXT): $(src_processor_stackwalker_amd64_unittest_OBJECTS) $(src_processor_stackwalker_amd64_unittest_DEPENDENCIES) $(EXTRA_src_processor_stackwalker_amd64_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) - @rm -f src/processor/stackwalker_amd64_unittest$(EXEEXT) - $(CXXLINK) $(src_processor_stackwalker_amd64_unittest_OBJECTS) $(src_processor_stackwalker_amd64_unittest_LDADD) $(LIBS) - src/common/src_processor_stackwalker_arm_unittest-test_assembler.$(OBJEXT): \ - src/common/$(am__dirstamp) \ - src/common/$(DEPDIR)/$(am__dirstamp) - src/processor/src_processor_stackwalker_arm_unittest-stackwalker_arm_unittest.$(OBJEXT): \ - src/processor/$(am__dirstamp) \ - src/processor/$(DEPDIR)/$(am__dirstamp) -@@ -3122,23 +3149,23 @@ - src/testing/gtest/src/$(am__dirstamp) \ - src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp) - src/testing/gtest/src/src_processor_stackwalker_arm_unittest-gtest_main.$(OBJEXT): \ - src/testing/gtest/src/$(am__dirstamp) \ - src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp) - src/testing/src/src_processor_stackwalker_arm_unittest-gmock-all.$(OBJEXT): \ - src/testing/src/$(am__dirstamp) \ - src/testing/src/$(DEPDIR)/$(am__dirstamp) --src/processor/stackwalker_arm_unittest$(EXEEXT): $(src_processor_stackwalker_arm_unittest_OBJECTS) $(src_processor_stackwalker_arm_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) -+src/processor/stackwalker_arm_unittest$(EXEEXT): $(src_processor_stackwalker_arm_unittest_OBJECTS) $(src_processor_stackwalker_arm_unittest_DEPENDENCIES) $(EXTRA_src_processor_stackwalker_arm_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) - @rm -f src/processor/stackwalker_arm_unittest$(EXEEXT) - $(CXXLINK) $(src_processor_stackwalker_arm_unittest_OBJECTS) $(src_processor_stackwalker_arm_unittest_LDADD) $(LIBS) - src/processor/stackwalker_selftest.$(OBJEXT): \ - src/processor/$(am__dirstamp) \ - src/processor/$(DEPDIR)/$(am__dirstamp) --src/processor/stackwalker_selftest$(EXEEXT): $(src_processor_stackwalker_selftest_OBJECTS) $(src_processor_stackwalker_selftest_DEPENDENCIES) src/processor/$(am__dirstamp) -+src/processor/stackwalker_selftest$(EXEEXT): $(src_processor_stackwalker_selftest_OBJECTS) $(src_processor_stackwalker_selftest_DEPENDENCIES) $(EXTRA_src_processor_stackwalker_selftest_DEPENDENCIES) src/processor/$(am__dirstamp) - @rm -f src/processor/stackwalker_selftest$(EXEEXT) - $(CXXLINK) $(src_processor_stackwalker_selftest_OBJECTS) $(src_processor_stackwalker_selftest_LDADD) $(LIBS) - src/common/src_processor_stackwalker_x86_unittest-test_assembler.$(OBJEXT): \ - src/common/$(am__dirstamp) \ - src/common/$(DEPDIR)/$(am__dirstamp) - src/processor/src_processor_stackwalker_x86_unittest-stackwalker_x86_unittest.$(OBJEXT): \ - src/processor/$(am__dirstamp) \ - src/processor/$(DEPDIR)/$(am__dirstamp) -@@ -3146,65 +3173,65 @@ - src/testing/gtest/src/$(am__dirstamp) \ - src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp) - src/testing/gtest/src/src_processor_stackwalker_x86_unittest-gtest_main.$(OBJEXT): \ - src/testing/gtest/src/$(am__dirstamp) \ - src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp) - src/testing/src/src_processor_stackwalker_x86_unittest-gmock-all.$(OBJEXT): \ - src/testing/src/$(am__dirstamp) \ - src/testing/src/$(DEPDIR)/$(am__dirstamp) --src/processor/stackwalker_x86_unittest$(EXEEXT): $(src_processor_stackwalker_x86_unittest_OBJECTS) $(src_processor_stackwalker_x86_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) -+src/processor/stackwalker_x86_unittest$(EXEEXT): $(src_processor_stackwalker_x86_unittest_OBJECTS) $(src_processor_stackwalker_x86_unittest_DEPENDENCIES) $(EXTRA_src_processor_stackwalker_x86_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) - @rm -f src/processor/stackwalker_x86_unittest$(EXEEXT) - $(CXXLINK) $(src_processor_stackwalker_x86_unittest_OBJECTS) $(src_processor_stackwalker_x86_unittest_LDADD) $(LIBS) - src/processor/src_processor_static_address_map_unittest-static_address_map_unittest.$(OBJEXT): \ - src/processor/$(am__dirstamp) \ - src/processor/$(DEPDIR)/$(am__dirstamp) - src/testing/gtest/src/src_processor_static_address_map_unittest-gtest-all.$(OBJEXT): \ - src/testing/gtest/src/$(am__dirstamp) \ - src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp) - src/testing/src/src_processor_static_address_map_unittest-gmock-all.$(OBJEXT): \ - src/testing/src/$(am__dirstamp) \ - src/testing/src/$(DEPDIR)/$(am__dirstamp) --src/processor/static_address_map_unittest$(EXEEXT): $(src_processor_static_address_map_unittest_OBJECTS) $(src_processor_static_address_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) -+src/processor/static_address_map_unittest$(EXEEXT): $(src_processor_static_address_map_unittest_OBJECTS) $(src_processor_static_address_map_unittest_DEPENDENCIES) $(EXTRA_src_processor_static_address_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) - @rm -f src/processor/static_address_map_unittest$(EXEEXT) - $(CXXLINK) $(src_processor_static_address_map_unittest_OBJECTS) $(src_processor_static_address_map_unittest_LDADD) $(LIBS) - src/processor/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.$(OBJEXT): \ - src/processor/$(am__dirstamp) \ - src/processor/$(DEPDIR)/$(am__dirstamp) - src/testing/gtest/src/src_processor_static_contained_range_map_unittest-gtest-all.$(OBJEXT): \ - src/testing/gtest/src/$(am__dirstamp) \ - src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp) - src/testing/src/src_processor_static_contained_range_map_unittest-gmock-all.$(OBJEXT): \ - src/testing/src/$(am__dirstamp) \ - src/testing/src/$(DEPDIR)/$(am__dirstamp) --src/processor/static_contained_range_map_unittest$(EXEEXT): $(src_processor_static_contained_range_map_unittest_OBJECTS) $(src_processor_static_contained_range_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) -+src/processor/static_contained_range_map_unittest$(EXEEXT): $(src_processor_static_contained_range_map_unittest_OBJECTS) $(src_processor_static_contained_range_map_unittest_DEPENDENCIES) $(EXTRA_src_processor_static_contained_range_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) - @rm -f src/processor/static_contained_range_map_unittest$(EXEEXT) - $(CXXLINK) $(src_processor_static_contained_range_map_unittest_OBJECTS) $(src_processor_static_contained_range_map_unittest_LDADD) $(LIBS) - src/processor/src_processor_static_map_unittest-static_map_unittest.$(OBJEXT): \ - src/processor/$(am__dirstamp) \ - src/processor/$(DEPDIR)/$(am__dirstamp) - src/testing/gtest/src/src_processor_static_map_unittest-gtest-all.$(OBJEXT): \ - src/testing/gtest/src/$(am__dirstamp) \ - src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp) - src/testing/src/src_processor_static_map_unittest-gmock-all.$(OBJEXT): \ - src/testing/src/$(am__dirstamp) \ - src/testing/src/$(DEPDIR)/$(am__dirstamp) --src/processor/static_map_unittest$(EXEEXT): $(src_processor_static_map_unittest_OBJECTS) $(src_processor_static_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) -+src/processor/static_map_unittest$(EXEEXT): $(src_processor_static_map_unittest_OBJECTS) $(src_processor_static_map_unittest_DEPENDENCIES) $(EXTRA_src_processor_static_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) - @rm -f src/processor/static_map_unittest$(EXEEXT) - $(CXXLINK) $(src_processor_static_map_unittest_OBJECTS) $(src_processor_static_map_unittest_LDADD) $(LIBS) - src/processor/src_processor_static_range_map_unittest-static_range_map_unittest.$(OBJEXT): \ - src/processor/$(am__dirstamp) \ - src/processor/$(DEPDIR)/$(am__dirstamp) - src/testing/gtest/src/src_processor_static_range_map_unittest-gtest-all.$(OBJEXT): \ - src/testing/gtest/src/$(am__dirstamp) \ - src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp) - src/testing/src/src_processor_static_range_map_unittest-gmock-all.$(OBJEXT): \ - src/testing/src/$(am__dirstamp) \ - src/testing/src/$(DEPDIR)/$(am__dirstamp) --src/processor/static_range_map_unittest$(EXEEXT): $(src_processor_static_range_map_unittest_OBJECTS) $(src_processor_static_range_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) -+src/processor/static_range_map_unittest$(EXEEXT): $(src_processor_static_range_map_unittest_OBJECTS) $(src_processor_static_range_map_unittest_DEPENDENCIES) $(EXTRA_src_processor_static_range_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) - @rm -f src/processor/static_range_map_unittest$(EXEEXT) - $(CXXLINK) $(src_processor_static_range_map_unittest_OBJECTS) $(src_processor_static_range_map_unittest_LDADD) $(LIBS) - src/common/src_processor_synth_minidump_unittest-test_assembler.$(OBJEXT): \ - src/common/$(am__dirstamp) \ - src/common/$(DEPDIR)/$(am__dirstamp) - src/processor/src_processor_synth_minidump_unittest-synth_minidump_unittest.$(OBJEXT): \ - src/processor/$(am__dirstamp) \ - src/processor/$(DEPDIR)/$(am__dirstamp) -@@ -3215,17 +3242,17 @@ - src/testing/gtest/src/$(am__dirstamp) \ - src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp) - src/testing/src/src_processor_synth_minidump_unittest-gmock-all.$(OBJEXT): \ - src/testing/src/$(am__dirstamp) \ - src/testing/src/$(DEPDIR)/$(am__dirstamp) - src/processor/src_processor_synth_minidump_unittest-synth_minidump.$(OBJEXT): \ - src/processor/$(am__dirstamp) \ - src/processor/$(DEPDIR)/$(am__dirstamp) --src/processor/synth_minidump_unittest$(EXEEXT): $(src_processor_synth_minidump_unittest_OBJECTS) $(src_processor_synth_minidump_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) -+src/processor/synth_minidump_unittest$(EXEEXT): $(src_processor_synth_minidump_unittest_OBJECTS) $(src_processor_synth_minidump_unittest_DEPENDENCIES) $(EXTRA_src_processor_synth_minidump_unittest_DEPENDENCIES) src/processor/$(am__dirstamp) - @rm -f src/processor/synth_minidump_unittest$(EXEEXT) - $(CXXLINK) $(src_processor_synth_minidump_unittest_OBJECTS) $(src_processor_synth_minidump_unittest_LDADD) $(LIBS) - src/tools/linux/core2md/$(am__dirstamp): - @$(MKDIR_P) src/tools/linux/core2md - @: > src/tools/linux/core2md/$(am__dirstamp) - src/tools/linux/core2md/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/tools/linux/core2md/$(DEPDIR) - @: > src/tools/linux/core2md/$(DEPDIR)/$(am__dirstamp) -@@ -3233,29 +3260,27 @@ - src/tools/linux/core2md/$(am__dirstamp) \ - src/tools/linux/core2md/$(DEPDIR)/$(am__dirstamp) - src/client/linux/minidump_writer/linux_core_dumper.$(OBJEXT): \ - src/client/linux/minidump_writer/$(am__dirstamp) \ - src/client/linux/minidump_writer/$(DEPDIR)/$(am__dirstamp) - src/common/linux/elf_core_dump.$(OBJEXT): \ - src/common/linux/$(am__dirstamp) \ - src/common/linux/$(DEPDIR)/$(am__dirstamp) --src/tools/linux/core2md/core2md$(EXEEXT): $(src_tools_linux_core2md_core2md_OBJECTS) $(src_tools_linux_core2md_core2md_DEPENDENCIES) src/tools/linux/core2md/$(am__dirstamp) -+src/tools/linux/core2md/core2md$(EXEEXT): $(src_tools_linux_core2md_core2md_OBJECTS) $(src_tools_linux_core2md_core2md_DEPENDENCIES) $(EXTRA_src_tools_linux_core2md_core2md_DEPENDENCIES) src/tools/linux/core2md/$(am__dirstamp) - @rm -f src/tools/linux/core2md/core2md$(EXEEXT) - $(CXXLINK) $(src_tools_linux_core2md_core2md_OBJECTS) $(src_tools_linux_core2md_core2md_LDADD) $(LIBS) - src/common/dwarf_cfi_to_module.$(OBJEXT): src/common/$(am__dirstamp) \ - src/common/$(DEPDIR)/$(am__dirstamp) - src/common/dwarf_cu_to_module.$(OBJEXT): src/common/$(am__dirstamp) \ - src/common/$(DEPDIR)/$(am__dirstamp) - src/common/dwarf_line_to_module.$(OBJEXT): src/common/$(am__dirstamp) \ - src/common/$(DEPDIR)/$(am__dirstamp) - src/common/language.$(OBJEXT): src/common/$(am__dirstamp) \ - src/common/$(DEPDIR)/$(am__dirstamp) --src/common/module.$(OBJEXT): src/common/$(am__dirstamp) \ -- src/common/$(DEPDIR)/$(am__dirstamp) - src/common/stabs_reader.$(OBJEXT): src/common/$(am__dirstamp) \ - src/common/$(DEPDIR)/$(am__dirstamp) - src/common/stabs_to_module.$(OBJEXT): src/common/$(am__dirstamp) \ - src/common/$(DEPDIR)/$(am__dirstamp) - src/common/dwarf/bytereader.$(OBJEXT): \ - src/common/dwarf/$(am__dirstamp) \ - src/common/dwarf/$(DEPDIR)/$(am__dirstamp) - src/common/dwarf/dwarf2diehandler.$(OBJEXT): \ -@@ -3274,65 +3299,65 @@ - @$(MKDIR_P) src/tools/linux/dump_syms - @: > src/tools/linux/dump_syms/$(am__dirstamp) - src/tools/linux/dump_syms/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/tools/linux/dump_syms/$(DEPDIR) - @: > src/tools/linux/dump_syms/$(DEPDIR)/$(am__dirstamp) - src/tools/linux/dump_syms/dump_syms.$(OBJEXT): \ - src/tools/linux/dump_syms/$(am__dirstamp) \ - src/tools/linux/dump_syms/$(DEPDIR)/$(am__dirstamp) --src/tools/linux/dump_syms/dump_syms$(EXEEXT): $(src_tools_linux_dump_syms_dump_syms_OBJECTS) $(src_tools_linux_dump_syms_dump_syms_DEPENDENCIES) src/tools/linux/dump_syms/$(am__dirstamp) -+src/tools/linux/dump_syms/dump_syms$(EXEEXT): $(src_tools_linux_dump_syms_dump_syms_OBJECTS) $(src_tools_linux_dump_syms_dump_syms_DEPENDENCIES) $(EXTRA_src_tools_linux_dump_syms_dump_syms_DEPENDENCIES) src/tools/linux/dump_syms/$(am__dirstamp) - @rm -f src/tools/linux/dump_syms/dump_syms$(EXEEXT) - $(CXXLINK) $(src_tools_linux_dump_syms_dump_syms_OBJECTS) $(src_tools_linux_dump_syms_dump_syms_LDADD) $(LIBS) - src/tools/linux/md2core/$(am__dirstamp): - @$(MKDIR_P) src/tools/linux/md2core - @: > src/tools/linux/md2core/$(am__dirstamp) - src/tools/linux/md2core/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/tools/linux/md2core/$(DEPDIR) - @: > src/tools/linux/md2core/$(DEPDIR)/$(am__dirstamp) - src/tools/linux/md2core/minidump-2-core.$(OBJEXT): \ - src/tools/linux/md2core/$(am__dirstamp) \ - src/tools/linux/md2core/$(DEPDIR)/$(am__dirstamp) --src/tools/linux/md2core/minidump-2-core$(EXEEXT): $(src_tools_linux_md2core_minidump_2_core_OBJECTS) $(src_tools_linux_md2core_minidump_2_core_DEPENDENCIES) src/tools/linux/md2core/$(am__dirstamp) -+src/tools/linux/md2core/minidump-2-core$(EXEEXT): $(src_tools_linux_md2core_minidump_2_core_OBJECTS) $(src_tools_linux_md2core_minidump_2_core_DEPENDENCIES) $(EXTRA_src_tools_linux_md2core_minidump_2_core_DEPENDENCIES) src/tools/linux/md2core/$(am__dirstamp) - @rm -f src/tools/linux/md2core/minidump-2-core$(EXEEXT) - $(CXXLINK) $(src_tools_linux_md2core_minidump_2_core_OBJECTS) $(src_tools_linux_md2core_minidump_2_core_LDADD) $(LIBS) - src/testing/gtest/src/src_tools_linux_md2core_minidump_2_core_unittest-gtest-all.$(OBJEXT): \ - src/testing/gtest/src/$(am__dirstamp) \ - src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp) - src/testing/gtest/src/src_tools_linux_md2core_minidump_2_core_unittest-gtest_main.$(OBJEXT): \ - src/testing/gtest/src/$(am__dirstamp) \ - src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp) - src/testing/src/src_tools_linux_md2core_minidump_2_core_unittest-gmock-all.$(OBJEXT): \ - src/testing/src/$(am__dirstamp) \ - src/testing/src/$(DEPDIR)/$(am__dirstamp) - src/tools/linux/md2core/src_tools_linux_md2core_minidump_2_core_unittest-minidump_memory_range_unittest.$(OBJEXT): \ - src/tools/linux/md2core/$(am__dirstamp) \ - src/tools/linux/md2core/$(DEPDIR)/$(am__dirstamp) --src/tools/linux/md2core/minidump_2_core_unittest$(EXEEXT): $(src_tools_linux_md2core_minidump_2_core_unittest_OBJECTS) $(src_tools_linux_md2core_minidump_2_core_unittest_DEPENDENCIES) src/tools/linux/md2core/$(am__dirstamp) -+src/tools/linux/md2core/minidump_2_core_unittest$(EXEEXT): $(src_tools_linux_md2core_minidump_2_core_unittest_OBJECTS) $(src_tools_linux_md2core_minidump_2_core_unittest_DEPENDENCIES) $(EXTRA_src_tools_linux_md2core_minidump_2_core_unittest_DEPENDENCIES) src/tools/linux/md2core/$(am__dirstamp) - @rm -f src/tools/linux/md2core/minidump_2_core_unittest$(EXEEXT) - $(CXXLINK) $(src_tools_linux_md2core_minidump_2_core_unittest_OBJECTS) $(src_tools_linux_md2core_minidump_2_core_unittest_LDADD) $(LIBS) - src/common/linux/http_upload.$(OBJEXT): \ - src/common/linux/$(am__dirstamp) \ - src/common/linux/$(DEPDIR)/$(am__dirstamp) - src/tools/linux/symupload/$(am__dirstamp): - @$(MKDIR_P) src/tools/linux/symupload - @: > src/tools/linux/symupload/$(am__dirstamp) - src/tools/linux/symupload/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/tools/linux/symupload/$(DEPDIR) - @: > src/tools/linux/symupload/$(DEPDIR)/$(am__dirstamp) - src/tools/linux/symupload/minidump_upload.$(OBJEXT): \ - src/tools/linux/symupload/$(am__dirstamp) \ - src/tools/linux/symupload/$(DEPDIR)/$(am__dirstamp) --src/tools/linux/symupload/minidump_upload$(EXEEXT): $(src_tools_linux_symupload_minidump_upload_OBJECTS) $(src_tools_linux_symupload_minidump_upload_DEPENDENCIES) src/tools/linux/symupload/$(am__dirstamp) -+src/tools/linux/symupload/minidump_upload$(EXEEXT): $(src_tools_linux_symupload_minidump_upload_OBJECTS) $(src_tools_linux_symupload_minidump_upload_DEPENDENCIES) $(EXTRA_src_tools_linux_symupload_minidump_upload_DEPENDENCIES) src/tools/linux/symupload/$(am__dirstamp) - @rm -f src/tools/linux/symupload/minidump_upload$(EXEEXT) - $(CXXLINK) $(src_tools_linux_symupload_minidump_upload_OBJECTS) $(src_tools_linux_symupload_minidump_upload_LDADD) $(LIBS) - src/tools/linux/symupload/sym_upload.$(OBJEXT): \ - src/tools/linux/symupload/$(am__dirstamp) \ - src/tools/linux/symupload/$(DEPDIR)/$(am__dirstamp) --src/tools/linux/symupload/sym_upload$(EXEEXT): $(src_tools_linux_symupload_sym_upload_OBJECTS) $(src_tools_linux_symupload_sym_upload_DEPENDENCIES) src/tools/linux/symupload/$(am__dirstamp) -+src/tools/linux/symupload/sym_upload$(EXEEXT): $(src_tools_linux_symupload_sym_upload_OBJECTS) $(src_tools_linux_symupload_sym_upload_DEPENDENCIES) $(EXTRA_src_tools_linux_symupload_sym_upload_DEPENDENCIES) src/tools/linux/symupload/$(am__dirstamp) - @rm -f src/tools/linux/symupload/sym_upload$(EXEEXT) - $(CXXLINK) $(src_tools_linux_symupload_sym_upload_OBJECTS) $(src_tools_linux_symupload_sym_upload_LDADD) $(LIBS) - - mostlyclean-compile: - -rm -f *.$(OBJEXT) - -rm -f src/client/linux/crash_generation/crash_generation_client.$(OBJEXT) - -rm -f src/client/linux/crash_generation/crash_generation_server.$(OBJEXT) - -rm -f src/client/linux/handler/exception_handler.$(OBJEXT) -@@ -5859,19 +5884,17 @@ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ - done - - uninstall-dist_docDATA: - @$(NORMAL_UNINSTALL) - @list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ -- test -n "$$files" || exit 0; \ -- echo " ( cd '$(DESTDIR)$(docdir)' && rm -f" $$files ")"; \ -- cd "$(DESTDIR)$(docdir)" && rm -f $$files -+ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) - - ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ -@@ -5996,24 +6019,25 @@ - report=""; \ - if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ - report="Please report to $(PACKAGE_BUGREPORT)"; \ - test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ - dashes="$$report"; \ - fi; \ - dashes=`echo "$$dashes" | sed s/./=/g`; \ - if test "$$failed" -eq 0; then \ -- echo "$$grn$$dashes"; \ -+ col="$$grn"; \ - else \ -- echo "$$red$$dashes"; \ -+ col="$$red"; \ - fi; \ -- echo "$$banner"; \ -- test -z "$$skipped" || echo "$$skipped"; \ -- test -z "$$report" || echo "$$report"; \ -- echo "$$dashes$$std"; \ -+ echo "$${col}$$dashes$${std}"; \ -+ echo "$${col}$$banner$${std}"; \ -+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ -+ test -z "$$report" || echo "$${col}$$report$${std}"; \ -+ echo "$${col}$$dashes$${std}"; \ - test "$$failed" -eq 0; \ - else :; fi - - distdir: $(DISTFILES) - $(am__remove_distdir) - test -d "$(distdir)" || mkdir "$(distdir)" - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ -@@ -6051,25 +6075,29 @@ - ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r "$(distdir)" - dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) - - dist-bzip2: distdir -- tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 -+ tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 -+ $(am__remove_distdir) -+ -+dist-lzip: distdir -+ tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz - $(am__remove_distdir) - - dist-lzma: distdir - tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma - $(am__remove_distdir) - - dist-xz: distdir -- tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz -+ tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz - $(am__remove_distdir) - - dist-tarZ: distdir - tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z - $(am__remove_distdir) - - dist-shar: distdir - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz -@@ -6090,16 +6118,18 @@ - distcheck: dist - case '$(DIST_ARCHIVES)' in \ - *.tar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ - *.tar.bz2*) \ - bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ - *.tar.lzma*) \ - lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ -+ *.tar.lz*) \ -+ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ - *.tar.xz*) \ - xz -dc $(distdir).tar.xz | $(am__untar) ;;\ - *.tar.Z*) \ - uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ - *.shar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ - *.zip*) \ - unzip $(distdir).zip ;;\ -@@ -6109,16 +6139,17 @@ - mkdir $(distdir)/_inst - chmod a-w $(distdir) - test -d $(distdir)/_build || exit 0; \ - dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ - && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && am__cwd=`pwd` \ - && $(am__cd) $(distdir)/_build \ - && ../configure --srcdir=.. --prefix="$$dc_install_base" \ -+ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ - $(DISTCHECK_CONFIGURE_FLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) dvi \ - && $(MAKE) $(AM_MAKEFLAGS) check \ - && $(MAKE) $(AM_MAKEFLAGS) install \ - && $(MAKE) $(AM_MAKEFLAGS) installcheck \ - && $(MAKE) $(AM_MAKEFLAGS) uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ -@@ -6137,18 +6168,26 @@ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ - && cd "$$am__cwd" \ - || exit 1 - $(am__remove_distdir) - @(echo "$(distdir) archives ready for distribution: "; \ - list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' - distuninstallcheck: -- @$(am__cd) '$(distuninstallcheck_dir)' \ -- && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ -+ @test -n '$(distuninstallcheck_dir)' || { \ -+ echo 'ERROR: trying to run $@ with an empty' \ -+ '$$(distuninstallcheck_dir)' >&2; \ -+ exit 1; \ -+ }; \ -+ $(am__cd) '$(distuninstallcheck_dir)' || { \ -+ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ -+ exit 1; \ -+ }; \ -+ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left after uninstall:" ; \ - if test -n "$(DESTDIR)"; then \ - echo " (check DESTDIR support)"; \ - fi ; \ - $(distuninstallcheck_listfiles) ; \ - exit 1; } >&2 - distcleancheck: distclean - @if test '$(srcdir)' = . ; then \ -@@ -6173,20 +6212,25 @@ - install-data: install-data-am - uninstall: uninstall-am - - install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - - installcheck: installcheck-am - install-strip: -- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ -- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ -- `test -z '$(STRIP)' || \ -- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -+ if test -z '$(STRIP)'; then \ -+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ -+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ -+ install; \ -+ else \ -+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ -+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ -+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ -+ fi - mostlyclean-generic: - - clean-generic: - - distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -rm -f src/$(am__dirstamp) -@@ -6308,18 +6352,18 @@ - uninstall-am: uninstall-binPROGRAMS uninstall-dist_docDATA \ - uninstall-libLIBRARIES - - .MAKE: check-am install-am install-strip - - .PHONY: CTAGS GTAGS all all-am am--refresh check check-TESTS check-am \ - clean clean-binPROGRAMS clean-checkPROGRAMS clean-generic \ - clean-libLIBRARIES clean-noinstLIBRARIES clean-noinstPROGRAMS \ -- ctags dist dist-all dist-bzip2 dist-gzip dist-lzma dist-shar \ -- dist-tarZ dist-xz dist-zip distcheck distclean \ -+ ctags dist dist-all dist-bzip2 dist-gzip dist-lzip dist-lzma \ -+ dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ - distclean-compile distclean-generic distclean-hdr \ - distclean-tags distcleancheck distdir distuninstallcheck dvi \ - dvi-am html html-am info info-am install install-am \ - install-binPROGRAMS install-data install-data-am \ - install-dist_docDATA install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-libLIBRARIES install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ -diff --git a/aclocal.m4 b/aclocal.m4 ---- a/aclocal.m4 -+++ b/aclocal.m4 -@@ -1,61 +1,65 @@ --# generated automatically by aclocal 1.11.1 -*- Autoconf -*- -+# generated automatically by aclocal 1.11.3 -*- Autoconf -*- - - # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, --# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. -+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, -+# Inc. - # This file is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. - - # This program is distributed in the hope that it will be useful, - # but WITHOUT ANY WARRANTY, to the extent permitted by law; without - # even the implied warranty of MERCHANTABILITY or FITNESS FOR A - # PARTICULAR PURPOSE. - - m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl --m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],, --[m4_warning([this file was generated for autoconf 2.65. -+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, -+[m4_warning([this file was generated for autoconf 2.68. - You have another version of autoconf. It may work, but is not guaranteed to. - If you have problems, you may need to regenerate the build system entirely. - To do so, use the procedure documented by the package, typically `autoreconf'.])]) - --# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software -+# Foundation, Inc. - # - # This file is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. - -+# serial 1 -+ - # AM_AUTOMAKE_VERSION(VERSION) - # ---------------------------- - # Automake X.Y traces this macro to ensure aclocal.m4 has been - # generated from the m4 files accompanying Automake X.Y. - # (This private macro should not be called outside this file.) - AC_DEFUN([AM_AUTOMAKE_VERSION], - [am__api_version='1.11' - dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to - dnl require some minimum version. Point them to the right macro. --m4_if([$1], [1.11.1], [], -+m4_if([$1], [1.11.3], [], - [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl - ]) - - # _AM_AUTOCONF_VERSION(VERSION) - # ----------------------------- - # aclocal traces this macro to find the Autoconf version. - # This is a private macro too. Using m4_define simplifies - # the logic in aclocal, which can simply ignore this definition. - m4_define([_AM_AUTOCONF_VERSION], []) - - # AM_SET_CURRENT_AUTOMAKE_VERSION - # ------------------------------- - # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. - # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. - AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], --[AM_AUTOMAKE_VERSION([1.11.1])dnl -+[AM_AUTOMAKE_VERSION([1.11.3])dnl - m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl - _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) - - # Figure out how to run the assembler. -*- Autoconf -*- - - # Copyright (C) 2001, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. - # -@@ -74,22 +78,24 @@ - test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS - AC_ARG_VAR([CCAS], [assembler compiler command (defaults to CC)]) - AC_ARG_VAR([CCASFLAGS], [assembler compiler flags (defaults to CFLAGS)]) - _AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl - ]) - - # AM_AUX_DIR_EXPAND -*- Autoconf -*- - --# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. -+# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. - # - # This file is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. - -+# serial 1 -+ - # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets - # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to - # `$srcdir', `$srcdir/..', or `$srcdir/../..'. - # - # Of course, Automake must honor this variable whenever it calls a - # tool from the auxiliary directory. The problem is that $srcdir (and - # therefore $ac_aux_dir as well) can be either absolute or relative, - # depending on how configure is run. This is pretty annoying, since -@@ -161,24 +167,24 @@ - $1_FALSE= - fi - AC_CONFIG_COMMANDS_PRE( - [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then - AC_MSG_ERROR([[conditional "$1" was never defined. - Usually this means the macro was only invoked conditionally.]]) - fi])]) - --# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 --# Free Software Foundation, Inc. -+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, -+# 2010, 2011 Free Software Foundation, Inc. - # - # This file is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. - --# serial 10 -+# serial 12 - - # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be - # written in clear, in which case automake, when reading aclocal.m4, - # will think it sees a *use*, and therefore will trigger all it's - # C support machinery. Also note that it means that autoscan, seeing - # CC etc. in the Makefile, will ask for an AC_PROG_CC use... - - -@@ -208,16 +214,17 @@ - AC_CACHE_CHECK([dependency style of $depcc], - [am_cv_$1_dependencies_compiler_type], - [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. -+ rm -rf conftest.dir - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a -@@ -272,17 +279,17 @@ - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; -- msvisualcpp | msvcmsys) -+ msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac -@@ -337,20 +344,23 @@ - # ------------ - AC_DEFUN([AM_DEP_TRACK], - [AC_ARG_ENABLE(dependency-tracking, - [ --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors]) - if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -+ am__nodep='_no' - fi - AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) - AC_SUBST([AMDEPBACKSLASH])dnl - _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl -+AC_SUBST([am__nodep])dnl -+_AM_SUBST_NOTMAKE([am__nodep])dnl - ]) - - # Generate code to set up dependency tracking. -*- Autoconf -*- - - # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 - # Free Software Foundation, Inc. - # - # This file is free software; the Free Software Foundation -@@ -574,22 +584,25 @@ - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac - done - echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) - --# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. -+# Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation, -+# Inc. - # - # This file is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. - -+# serial 1 -+ - # AM_PROG_INSTALL_SH - # ------------------ - # Define $install_sh. - AC_DEFUN([AM_PROG_INSTALL_SH], - [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl - if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) -@@ -746,22 +759,25 @@ - if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " - else - am_missing_run= - AC_MSG_WARN([`missing' script is too old or missing]) - fi - ]) - --# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -+# Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation, -+# Inc. - # - # This file is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. - -+# serial 1 -+ - # AM_PROG_MKDIR_P - # --------------- - # Check for `mkdir -p'. - AC_DEFUN([AM_PROG_MKDIR_P], - [AC_PREREQ([2.60])dnl - AC_REQUIRE([AC_PROG_MKDIR_P])dnl - dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, - dnl while keeping a definition of mkdir_p for backward compatibility. -@@ -774,53 +790,56 @@ - case $mkdir_p in - [[\\/$]]* | ?:[[\\/]]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; - esac - ]) - - # Helper functions for option handling. -*- Autoconf -*- - --# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. -+# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software -+# Foundation, Inc. - # - # This file is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. - --# serial 4 -+# serial 5 - - # _AM_MANGLE_OPTION(NAME) - # ----------------------- - AC_DEFUN([_AM_MANGLE_OPTION], - [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) - - # _AM_SET_OPTION(NAME) --# ------------------------------ -+# -------------------- - # Set option NAME. Presently that only means defining a flag for this option. - AC_DEFUN([_AM_SET_OPTION], - [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) - - # _AM_SET_OPTIONS(OPTIONS) --# ---------------------------------- -+# ------------------------ - # OPTIONS is a space-separated list of Automake options. - AC_DEFUN([_AM_SET_OPTIONS], - [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) - - # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) - # ------------------------------------------- - # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. - AC_DEFUN([_AM_IF_OPTION], - [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) - --# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. -+# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. - # - # This file is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. - -+# serial 1 -+ - # AM_RUN_LOG(COMMAND) - # ------------------- - # Run COMMAND, save the exit status in ac_status, and log it. - # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) - AC_DEFUN([AM_RUN_LOG], - [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD - ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD - ac_status=$? -@@ -887,22 +906,24 @@ - # Ok. - : - else - AC_MSG_ERROR([newly created file is older than distributed files! - Check your system clock]) - fi - AC_MSG_RESULT(yes)]) - --# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. -+# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. - # - # This file is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. - -+# serial 1 -+ - # AM_PROG_INSTALL_STRIP - # --------------------- - # One issue with vendor `install' (even GNU) is that you can't - # specify the program used to strip binaries. This is especially - # annoying in cross-compiling environments, where the build's strip - # is unlikely to handle the host's binaries. - # Fortunately install-sh will honor a STRIPPROG variable, so we - # always use install-sh in `make install-strip', and initialize -@@ -915,38 +936,38 @@ - # will honor the `STRIP' environment variable to overrule this program. - dnl Don't test for $cross_compiling = yes, because it might be `maybe'. - if test "$cross_compiling" != no; then - AC_CHECK_TOOL([STRIP], [strip], :) - fi - INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" - AC_SUBST([INSTALL_STRIP_PROGRAM])]) - --# Copyright (C) 2006, 2008 Free Software Foundation, Inc. -+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc. - # - # This file is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. - --# serial 2 -+# serial 3 - - # _AM_SUBST_NOTMAKE(VARIABLE) - # --------------------------- - # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. - # This macro is traced by Automake. - AC_DEFUN([_AM_SUBST_NOTMAKE]) - - # AM_SUBST_NOTMAKE(VARIABLE) --# --------------------------- -+# -------------------------- - # Public sister of _AM_SUBST_NOTMAKE. - AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) - - # Check how to create a tarball. -*- Autoconf -*- - --# Copyright (C) 2004, 2005 Free Software Foundation, Inc. -+# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc. - # - # This file is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. - - # serial 2 - - # _AM_PROG_TAR(FORMAT) -@@ -958,20 +979,21 @@ - # writing to stdout a FORMAT-tarball containing the directory - # $tardir. - # tardir=directory && $(am__tar) > result.tar - # - # Substitute a variable $(am__untar) that extract such - # a tarball read from stdin. - # $(am__untar) < result.tar - AC_DEFUN([_AM_PROG_TAR], --[# Always define AMTAR for backward compatibility. --AM_MISSING_PROG([AMTAR], [tar]) -+[# Always define AMTAR for backward compatibility. Yes, it's still used -+# in the wild :-( We should find a proper way to deprecate it ... -+AC_SUBST([AMTAR], ['$${TAR-tar}']) - m4_if([$1], [v7], -- [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], -+ [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], - [m4_case([$1], [ustar],, [pax],, - [m4_fatal([Unknown tar format])]) - AC_MSG_CHECKING([how to create a $1 tar archive]) - # Loop over all known methods to create a tar archive until one works. - _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' - _am_tools=${am_cv_prog_tar_$1-$_am_tools} - # Do not fold the above two line into one, because Tru64 sh and - # Solaris sh will not grok spaces in the rhs of `-'. -diff --git a/configure b/configure ---- a/configure -+++ b/configure -@@ -1,18 +1,18 @@ - #! /bin/sh - # Guess values for system-dependent variables and create Makefiles. --# Generated by GNU Autoconf 2.65 for breakpad 0.1. -+# Generated by GNU Autoconf 2.68 for breakpad 0.1. - # - # Report bugs to . - # - # - # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, --# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, --# Inc. -+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software -+# Foundation, Inc. - # - # - # This configure script is free software; the Free Software Foundation - # gives unlimited permission to copy, distribute and modify it. - ## -------------------- ## - ## M4sh Initialization. ## - ## -------------------- ## - -@@ -86,16 +86,17 @@ - # IFS - # We need space, tab and new line, in precisely that order. Quoting is - # there to prevent editors from complaining about space-tab. - # (If _AS_PATH_WALK were called with IFS unset, it would disable word - # splitting by setting IFS to empty value.) - IFS=" "" $as_nl" - - # Find who we are. Look in the path if we contain no directory separator. -+as_myself= - case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH - do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -@@ -211,21 +212,28 @@ - fi; } - IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - # We cannot yet assume a decent shell, so we have to provide a - # neutralization value for shells without unset; and this also - # works around shells that cannot unset nonexistent variables. -+ # Preserve -v and -x to the replacement shell. - BASH_ENV=/dev/null - ENV=/dev/null - (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV - export CONFIG_SHELL -- exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -+ case $- in # (((( -+ *v*x* | *x*v* ) as_opts=-vx ;; -+ *v* ) as_opts=-v ;; -+ *x* ) as_opts=-x ;; -+ * ) as_opts= ;; -+ esac -+ exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} - fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." -@@ -314,17 +322,17 @@ - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" -- } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" -+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - - } # as_fn_mkdir_p - # as_fn_append VAR VALUE - # ---------------------- - # Append the text in VALUE to the end of the definition contained in VAR. Take - # advantage of any shell optimizations that allow amortized linear growth over - # repeated appends, instead of the typical quadratic growth present in naive -@@ -354,29 +362,29 @@ - else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } - fi # as_fn_arith - - --# as_fn_error ERROR [LINENO LOG_FD] --# --------------------------------- -+# as_fn_error STATUS ERROR [LINENO LOG_FD] -+# ---------------------------------------- - # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are - # provided, also output the error to LOG_FD, referencing LINENO. Then exit the --# script with status $?, using 1 if that was 0. -+# script with STATUS, using 1 if that was 0. - as_fn_error () - { -- as_status=$?; test $as_status -eq 0 && as_status=1 -- if test "$3"; then -- as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack -- $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 -+ as_status=$1; test $as_status -eq 0 && as_status=1 -+ if test "$4"; then -+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack -+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi -- $as_echo "$as_me: error: $1" >&2 -+ $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status - } # as_fn_error - - if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr - else - as_expr=false -@@ -528,17 +536,17 @@ - # Sed expression to map a string onto a valid variable name. - as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - - test -n "$DJDIR" || exec 7<&0 &1 - - # Name of the host. --# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, -+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, - # so uname gets run too. - ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - - # - # Initializations. - # - ac_default_prefix=/usr/local - ac_clean_files= -@@ -627,16 +635,17 @@ - am__fastdepCCAS_FALSE - am__fastdepCCAS_TRUE - CCASDEPMODE - CCASFLAGS - CCAS - am__fastdepCC_FALSE - am__fastdepCC_TRUE - CCDEPMODE -+am__nodep - AMDEPBACKSLASH - AMDEP_FALSE - AMDEP_TRUE - am__quote - am__include - DEPDIR - OBJEXT - EXEEXT -@@ -794,18 +803,19 @@ - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in -- *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; -- *) ac_optarg=yes ;; -+ *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; -+ *=) ac_optarg= ;; -+ *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - -@@ -840,17 +850,17 @@ - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && -- as_fn_error "invalid feature name: $ac_useropt" -+ as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" - "enable_$ac_useropt" - "*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; -@@ -866,17 +876,17 @@ - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && -- as_fn_error "invalid feature name: $ac_useropt" -+ as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" - "enable_$ac_useropt" - "*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; -@@ -1070,33 +1080,33 @@ - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && -- as_fn_error "invalid package name: $ac_useropt" -+ as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" - "with_$ac_useropt" - "*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && -- as_fn_error "invalid package name: $ac_useropt" -+ as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" - "with_$ac_useropt" - "*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; -@@ -1116,50 +1126,50 @@ - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - -- -*) as_fn_error "unrecognized option: \`$ac_option' --Try \`$0 --help' for more information." -+ -*) as_fn_error $? "unrecognized option: \`$ac_option' -+Try \`$0 --help' for more information" - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) -- as_fn_error "invalid variable name: \`$ac_envvar'" ;; -+ as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 -- : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} -+ : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" - ;; - - esac - done - - if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` -- as_fn_error "missing argument to $ac_option" -+ as_fn_error $? "missing argument to $ac_option" - fi - - if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; -- fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; -+ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac - fi - - # Check all directory arguments for consistency. - for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ -@@ -1172,49 +1182,49 @@ - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac -- as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" -+ as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" - done - - # There might be people who depend on the old broken behavior: `$host' - # used to hold the argument of --host etc. - # FIXME: To remove some day. - build=$build_alias - host=$host_alias - target=$target_alias - - # FIXME: To remove some day. - if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe -- $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. -- If a cross compiler is detected then cross compile mode will be used." >&2 -+ $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. -+ If a cross compiler is detected then cross compile mode will be used" >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi - fi - - ac_tool_prefix= - test -n "$host_alias" && ac_tool_prefix=$host_alias- - - test "$silent" = yes && exec 6>/dev/null - - - ac_pwd=`pwd` && test -n "$ac_pwd" && - ac_ls_di=`ls -di .` && - ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || -- as_fn_error "working directory cannot be determined" -+ as_fn_error $? "working directory cannot be determined" - test "X$ac_ls_di" = "X$ac_pwd_ls_di" || -- as_fn_error "pwd does not report name of working directory" -+ as_fn_error $? "pwd does not report name of working directory" - - - # Find the source files, if location was not specified. - if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || - $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ -@@ -1243,21 +1253,21 @@ - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi - else - ac_srcdir_defaulted=no - fi - if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." -- as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" -+ as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" - fi - ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" - ac_abs_confdir=`( -- cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" -+ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" - pwd)` - # When building in place, set srcdir=. - if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. - fi - # Remove unnecessary trailing slashes from srcdir. - # Double slashes in file names in object file debugging info - # mess up M-x gdb in Emacs. -@@ -1287,17 +1297,17 @@ - - Defaults for the options are specified in brackets. - - Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit -- -q, --quiet, --silent do not print \`checking...' messages -+ -q, --quiet, --silent do not print \`checking ...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - - Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] -@@ -1440,19 +1450,19 @@ - cd "$ac_pwd" || { ac_status=$?; break; } - done - fi - - test -n "$ac_init_help" && exit $ac_status - if $ac_init_version; then - cat <<\_ACEOF - breakpad configure 0.1 --generated by GNU Autoconf 2.65 -- --Copyright (C) 2009 Free Software Foundation, Inc. -+generated by GNU Autoconf 2.68 -+ -+Copyright (C) 2010 Free Software Foundation, Inc. - This configure script is free software; the Free Software Foundation - gives unlimited permission to copy, distribute and modify it. - _ACEOF - exit - fi - - ## ------------------------ ## - ## Autoconf initialization. ## -@@ -1486,17 +1496,17 @@ - } && test -s conftest.$ac_objext; then : - ac_retval=0 - else - $as_echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 - fi -- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - - } # ac_fn_c_try_compile - - # ac_fn_c_try_cpp LINENO - # ---------------------- - # Try to preprocess conftest.$ac_ext, and return whether this succeeded. - ac_fn_c_try_cpp () -@@ -1512,28 +1522,28 @@ - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -- test $ac_status = 0; } >/dev/null && { -+ test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 - else - $as_echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 - fi -- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - - } # ac_fn_c_try_cpp - - # ac_fn_cxx_try_compile LINENO - # ---------------------------- - # Try to compile conftest.$ac_ext, and return whether this succeeded. - ac_fn_cxx_try_compile () -@@ -1561,17 +1571,17 @@ - } && test -s conftest.$ac_objext; then : - ac_retval=0 - else - $as_echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 - fi -- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - - } # ac_fn_cxx_try_compile - - # ac_fn_c_try_run LINENO - # ---------------------- - # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes - # that executables *can* be run. -@@ -1603,17 +1613,17 @@ - else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status - fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo -- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - - } # ac_fn_c_try_run - - # ac_fn_c_try_link LINENO - # ----------------------- - # Try to link conftest.$ac_ext, and return whether this succeeded. - ac_fn_c_try_link () -@@ -1649,33 +1659,33 @@ - - ac_retval=1 - fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo -- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - - } # ac_fn_c_try_link - - # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES - # ------------------------------------------------------- - # Tests whether HEADER exists, giving a warning if it cannot be compiled using - # the include files in INCLUDES and setting the cache variable VAR - # accordingly. - ac_fn_c_check_header_mongrel () - { - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack -- if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : -+ if eval \${$3+:} false; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 - $as_echo_n "checking for $2... " >&6; } --if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : -+if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 - fi - eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 - $as_echo "$ac_res" >&6; } - else - # Is the header compilable? - { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -@@ -1701,17 +1711,17 @@ - /* end confdefs.h. */ - #include <$2> - _ACEOF - if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes - else - ac_header_preproc=no - fi --rm -f conftest.err conftest.$ac_ext -+rm -f conftest.err conftest.i conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 - $as_echo "$ac_header_preproc" >&6; } - - # So? What about this header? - case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 - $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} -@@ -1724,49 +1734,47 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 - $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 - $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 - $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 - $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} --( cat <<\_ASBOX --## --------------------------------------------------- ## -+( $as_echo "## --------------------------------------------------- ## - ## Report this to google-breakpad-dev@googlegroups.com ## --## --------------------------------------------------- ## --_ASBOX -+## --------------------------------------------------- ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 - $as_echo_n "checking for $2... " >&6; } --if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : -+if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 - else - eval "$3=\$ac_header_compiler" - fi - eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 - $as_echo "$ac_res" >&6; } - fi -- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - - } # ac_fn_c_check_header_mongrel - - # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES - # ------------------------------------------------------- - # Tests whether HEADER exists and can be compiled using the include files in - # INCLUDES, setting the cache variable VAR accordingly. - ac_fn_c_check_header_compile () - { - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 - $as_echo_n "checking for $2... " >&6; } --if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : -+if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext - /* end confdefs.h. */ - $4 - #include <$2> - _ACEOF - if ac_fn_c_try_compile "$LINENO"; then : -@@ -1774,25 +1782,25 @@ - else - eval "$3=no" - fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 - $as_echo "$ac_res" >&6; } -- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - - } # ac_fn_c_check_header_compile - cat >config.log <<_ACEOF - This file contains any messages produced by compilers while - running configure, to aid debugging if configure makes a mistake. - - It was created by breakpad $as_me 0.1, which was --generated by GNU Autoconf 2.65. Invocation command line was -+generated by GNU Autoconf 2.68. Invocation command line was - - $ $0 $@ - - _ACEOF - exec 5>>config.log - { - cat <<_ASUNAME - ## --------- ## -@@ -1892,21 +1900,19 @@ - # would cause problems or look ugly. - # WARNING: Use '\'' to represent an apostrophe within the trap. - # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. - trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - -- cat <<\_ASBOX --## ---------------- ## -+ $as_echo "## ---------------- ## - ## Cache variables. ## --## ---------------- ## --_ASBOX -+## ---------------- ##" - echo - # The following way of writing the cache mishandles newlines in values, - ( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( -@@ -1930,56 +1936,50 @@ - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort - ) - echo - -- cat <<\_ASBOX --## ----------------- ## -+ $as_echo "## ----------------- ## - ## Output variables. ## --## ----------------- ## --_ASBOX -+## ----------------- ##" - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then -- cat <<\_ASBOX --## ------------------- ## -+ $as_echo "## ------------------- ## - ## File substitutions. ## --## ------------------- ## --_ASBOX -+## ------------------- ##" - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then -- cat <<\_ASBOX --## ----------- ## -+ $as_echo "## ----------- ## - ## confdefs.h. ## --## ----------- ## --_ASBOX -+## ----------- ##" - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 -@@ -2024,32 +2024,41 @@ - _ACEOF - - - # Let the site file select an alternate cache file if it wants to. - # Prefer an explicitly selected file to automatically selected ones. - ac_site_file1=NONE - ac_site_file2=NONE - if test -n "$CONFIG_SITE"; then -- ac_site_file1=$CONFIG_SITE -+ # We do not want a PATH search for config.site. -+ case $CONFIG_SITE in #(( -+ -*) ac_site_file1=./$CONFIG_SITE;; -+ */*) ac_site_file1=$CONFIG_SITE;; -+ *) ac_site_file1=./$CONFIG_SITE;; -+ esac - elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site - else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site - fi - for ac_site_file in "$ac_site_file1" "$ac_site_file2" - do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 - $as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 -- . "$ac_site_file" -+ . "$ac_site_file" \ -+ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -+as_fn_error $? "failed to load site script $ac_site_file -+See \`config.log' for more details" "$LINENO" 5; } - fi - done - - if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -@@ -2115,77 +2124,83 @@ - esac - fi - done - if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 - $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} -- as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -+ as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 - fi - ## -------------------- ## - ## Main body of script. ## - ## -------------------- ## - - ac_ext=c - ac_cpp='$CPP $CPPFLAGS' - ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' - ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' - ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - - ac_aux_dir= - for ac_dir in autotools "$srcdir"/autotools; do -- for ac_t in install-sh install.sh shtool; do -- if test -f "$ac_dir/$ac_t"; then -- ac_aux_dir=$ac_dir -- ac_install_sh="$ac_aux_dir/$ac_t -c" -- break 2 -- fi -- done -+ if test -f "$ac_dir/install-sh"; then -+ ac_aux_dir=$ac_dir -+ ac_install_sh="$ac_aux_dir/install-sh -c" -+ break -+ elif test -f "$ac_dir/install.sh"; then -+ ac_aux_dir=$ac_dir -+ ac_install_sh="$ac_aux_dir/install.sh -c" -+ break -+ elif test -f "$ac_dir/shtool"; then -+ ac_aux_dir=$ac_dir -+ ac_install_sh="$ac_aux_dir/shtool install -c" -+ break -+ fi - done - if test -z "$ac_aux_dir"; then -- as_fn_error "cannot find install-sh, install.sh, or shtool in autotools \"$srcdir\"/autotools" "$LINENO" 5 -+ as_fn_error $? "cannot find install-sh, install.sh, or shtool in autotools \"$srcdir\"/autotools" "$LINENO" 5 - fi - - # These three variables are undocumented and unsupported, - # and are intended to be withdrawn in a future Autoconf release. - # They can cause serious problems if a builder's source tree is in a directory - # whose full name contains unusual characters. - ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. - ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. - ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - - - # Make sure we can run config.sub. - $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || -- as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 -+ as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 - $as_echo_n "checking build system type... " >&6; } --if test "${ac_cv_build+set}" = set; then : -+if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 - else - ac_build_alias=$build_alias - test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` - test "x$ac_build_alias" = x && -- as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 -+ as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 - ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || -- as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 -+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 - $as_echo "$ac_cv_build" >&6; } - case $ac_cv_build in - *-*-*) ;; --*) as_fn_error "invalid value of canonical build" "$LINENO" 5;; -+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; - esac - build=$ac_cv_build - ac_save_IFS=$IFS; IFS='-' - set x $ac_cv_build - shift - build_cpu=$1 - build_vendor=$2 - shift; shift -@@ -2193,32 +2208,32 @@ - # except with old shells: - build_os=$* - IFS=$ac_save_IFS - case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 - $as_echo_n "checking host system type... " >&6; } --if test "${ac_cv_host+set}" = set; then : -+if ${ac_cv_host+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build - else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || -- as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 - fi - - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 - $as_echo "$ac_cv_host" >&6; } - case $ac_cv_host in - *-*-*) ;; --*) as_fn_error "invalid value of canonical host" "$LINENO" 5;; -+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; - esac - host=$ac_cv_host - ac_save_IFS=$IFS; IFS='-' - set x $ac_cv_host - shift - host_cpu=$1 - host_vendor=$2 - shift; shift -@@ -2244,17 +2259,17 @@ - # AFS /usr/afsws/bin/install, which mishandles nonexistent args - # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" - # OS/2's system install, which has a completely different semantic - # ./install, which can be erroneously created by make from ./install.sh. - # Reject install programs that cannot install multiple files. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 - $as_echo_n "checking for a BSD-compatible install... " >&6; } - if test -z "$INSTALL"; then --if test "${ac_cv_path_install+set}" = set; then : -+if ${ac_cv_path_install+:} false; then : - $as_echo_n "(cached) " >&6 - else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH - do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -@@ -2331,21 +2346,21 @@ - sleep 1 - echo timestamp > conftest.file - # Reject unsafe characters in $srcdir or the absolute working directory - # name. Accept space and tab only in the latter. - am_lf=' - ' - case `pwd` in - *[\\\"\#\$\&\'\`$am_lf]*) -- as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; -+ as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; - esac - case $srcdir in - *[\\\"\#\$\&\'\`$am_lf\ \ ]*) -- as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; -+ as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; - esac - - # Do `set' in a subshell so we don't clobber the current shell's - # arguments. Must try -L first in case configure is actually a - # symlink; some systems play weird games with the mod time of symlinks - # (eg FreeBSD returns the mod time of the symlink's containing - # directory). - if ( -@@ -2357,27 +2372,27 @@ - rm -f conftest.file - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". -- as_fn_error "ls -t appears to fail. Make sure there is not a broken -+ as_fn_error $? "ls -t appears to fail. Make sure there is not a broken - alias in your environment" "$LINENO" 5 - fi - - test "$2" = conftest.file - ) - then - # Ok. - : - else -- as_fn_error "newly created file is older than distributed files! -+ as_fn_error $? "newly created file is older than distributed files! - Check your system clock" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 - $as_echo "yes" >&6; } - test "$program_prefix" != NONE && - program_transform_name="s&^&$program_prefix&;$program_transform_name" - # Use a double $ so make ignores it. - test "$program_suffix" != NONE && -@@ -2421,17 +2436,17 @@ - # tool to use in cross-compilation environments, therefore Automake - # will honor the `STRIP' environment variable to overrule this program. - if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. - set dummy ${ac_tool_prefix}strip; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_STRIP+set}" = set; then : -+if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. - else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH - do -@@ -2461,17 +2476,17 @@ - - fi - if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. - set dummy strip; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : -+if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. - else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH - do -@@ -2514,17 +2529,17 @@ - fi - - fi - INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 - $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } - if test -z "$MKDIR_P"; then -- if test "${ac_cv_path_mkdir+set}" = set; then : -+ if ${ac_cv_path_mkdir+:} false; then : - $as_echo_n "(cached) " >&6 - else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin - do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in mkdir gmkdir; do -@@ -2565,17 +2580,17 @@ - esac - - for ac_prog in gawk mawk nawk awk - do - # Extract the first word of "$ac_prog", so it can be a program name with args. - set dummy $ac_prog; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_AWK+set}" = set; then : -+if ${ac_cv_prog_AWK+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. - else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH - do -@@ -2605,25 +2620,25 @@ - - test -n "$AWK" && break - done - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 - $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } - set x ${MAKE-make} - ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` --if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : -+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : - $as_echo_n "(cached) " >&6 - else - cat >conftest.make <<\_ACEOF - SHELL = /bin/sh - all: - @echo '@@@%%%=$(MAKE)=@@@%%%' - _ACEOF --# GNU make sometimes prints "make[1]: Entering...", which would confuse us. -+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. - case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; - esac - rm -f conftest.make - fi -@@ -2647,17 +2662,17 @@ - rmdir .tst 2>/dev/null - - if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - am__isrc=' -I$(srcdir)' - # test to see if srcdir already configured - if test -f $srcdir/config.status; then -- as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 -+ as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 - fi - fi - - # test whether we have cygpath - if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else -@@ -2693,19 +2708,19 @@ - - AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} - - - MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} - - # We need awk for the "check" target. The system "awk" is bad on - # some platforms. --# Always define AMTAR for backward compatibility. -- --AMTAR=${AMTAR-"${am_missing_run}tar"} -+# Always define AMTAR for backward compatibility. Yes, it's still used -+# in the wild :-( We should find a proper way to deprecate it ... -+AMTAR='$${TAR-tar}' - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5 - $as_echo_n "checking how to create a ustar tar archive... " >&6; } - # Loop over all known methods to create a tar archive until one works. - _am_tools='gnutar plaintar pax cpio none' - _am_tools=${am_cv_prog_tar_ustar-$_am_tools} - # Do not fold the above two line into one, because Tru64 sh and -@@ -2771,17 +2786,17 @@ - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - grep GrepMe conftest.dir/file >/dev/null 2>&1 && break - fi - done - rm -rf conftest.dir - --if test "${am_cv_prog_tar_ustar+set}" = set; then : -+if ${am_cv_prog_tar_ustar+:} false; then : - $as_echo_n "(cached) " >&6 - else - am_cv_prog_tar_ustar=$_am_tool - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5 - $as_echo "$am_cv_prog_tar_ustar" >&6; } - -@@ -2839,16 +2854,17 @@ - # Check whether --enable-dependency-tracking was given. - if test "${enable_dependency_tracking+set}" = set; then : - enableval=$enable_dependency_tracking; - fi - - if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -+ am__nodep='_no' - fi - if test "x$enable_dependency_tracking" != xno; then - AMDEP_TRUE= - AMDEP_FALSE='#' - else - AMDEP_TRUE='#' - AMDEP_FALSE= - fi -@@ -2859,17 +2875,17 @@ - ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' - ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' - ac_compiler_gnu=$ac_cv_c_compiler_gnu - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. - set dummy ${ac_tool_prefix}gcc; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_CC+set}" = set; then : -+if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. - else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH - do -@@ -2899,17 +2915,17 @@ - - fi - if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. - set dummy gcc; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : -+if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. - else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH - do -@@ -2952,17 +2968,17 @@ - fi - - if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. - set dummy ${ac_tool_prefix}cc; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_CC+set}" = set; then : -+if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. - else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH - do -@@ -2992,17 +3008,17 @@ - - fi - fi - if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. - set dummy cc; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_CC+set}" = set; then : -+if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. - else - ac_prog_rejected=no - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH -@@ -3051,17 +3067,17 @@ - if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. - set dummy $ac_tool_prefix$ac_prog; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_CC+set}" = set; then : -+if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. - else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH - do -@@ -3095,17 +3111,17 @@ - if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe - do - # Extract the first word of "$ac_prog", so it can be a program name with args. - set dummy $ac_prog; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : -+if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. - else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH - do -@@ -3149,18 +3165,18 @@ - fi - fi - - fi - - - test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} --as_fn_error "no acceptable C compiler found in \$PATH --See \`config.log' for more details." "$LINENO" 5; } -+as_fn_error $? "no acceptable C compiler found in \$PATH -+See \`config.log' for more details" "$LINENO" 5; } - - # Provide some information about the compiler. - $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 - set X $ac_compile - ac_compiler=$2 - for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" - case "(($ac_try" in -@@ -3264,19 +3280,18 @@ - if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 - $as_echo "no" >&6; } - $as_echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} --{ as_fn_set_status 77 --as_fn_error "C compiler cannot create executables --See \`config.log' for more details." "$LINENO" 5; }; } -+as_fn_error 77 "C compiler cannot create executables -+See \`config.log' for more details" "$LINENO" 5; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 - $as_echo "yes" >&6; } - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 - $as_echo_n "checking for C compiler default output file name... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 - $as_echo "$ac_file" >&6; } -@@ -3308,18 +3323,18 @@ - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac - done - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} --as_fn_error "cannot compute suffix of executables: cannot compile and link --See \`config.log' for more details." "$LINENO" 5; } -+as_fn_error $? "cannot compute suffix of executables: cannot compile and link -+See \`config.log' for more details" "$LINENO" 5; } - fi - rm -f conftest conftest$ac_cv_exeext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 - $as_echo "$ac_cv_exeext" >&6; } - - rm -f conftest.$ac_ext - EXEEXT=$ac_cv_exeext - ac_exeext=$EXEEXT -@@ -3366,30 +3381,30 @@ - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} --as_fn_error "cannot run C compiled programs. -+as_fn_error $? "cannot run C compiled programs. - If you meant to cross compile, use \`--host'. --See \`config.log' for more details." "$LINENO" 5; } -+See \`config.log' for more details" "$LINENO" 5; } - fi - fi - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 - $as_echo "$cross_compiling" >&6; } - - rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out - ac_clean_files=$ac_clean_files_save - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 - $as_echo_n "checking for suffix of object files... " >&6; } --if test "${ac_cv_objext+set}" = set; then : -+if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext - /* end confdefs.h. */ - - int - main () - { -@@ -3419,28 +3434,28 @@ - esac - done - else - $as_echo "$as_me: failed program was:" >&5 - sed 's/^/| /' conftest.$ac_ext >&5 - - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} --as_fn_error "cannot compute suffix of object files: cannot compile --See \`config.log' for more details." "$LINENO" 5; } -+as_fn_error $? "cannot compute suffix of object files: cannot compile -+See \`config.log' for more details" "$LINENO" 5; } - fi - rm -f conftest.$ac_cv_objext conftest.$ac_ext - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 - $as_echo "$ac_cv_objext" >&6; } - OBJEXT=$ac_cv_objext - ac_objext=$OBJEXT - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 - $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } --if test "${ac_cv_c_compiler_gnu+set}" = set; then : -+if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext - /* end confdefs.h. */ - - int - main () - { -@@ -3467,17 +3482,17 @@ - GCC=yes - else - GCC= - fi - ac_test_CFLAGS=${CFLAGS+set} - ac_save_CFLAGS=$CFLAGS - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 - $as_echo_n "checking whether $CC accepts -g... " >&6; } --if test "${ac_cv_prog_cc_g+set}" = set; then : -+if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 - else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext - /* end confdefs.h. */ -@@ -3545,17 +3560,17 @@ - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 - $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } --if test "${ac_cv_prog_cc_c89+set}" = set; then : -+if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 - else - ac_cv_prog_cc_c89=no - ac_save_CC=$CC - cat confdefs.h - <<_ACEOF >conftest.$ac_ext - /* end confdefs.h. */ - #include - #include -@@ -3644,25 +3659,26 @@ - ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' - ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' - ac_compiler_gnu=$ac_cv_c_compiler_gnu - - depcc="$CC" am_compiler_list= - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 - $as_echo_n "checking dependency style of $depcc... " >&6; } --if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : -+if ${am_cv_CC_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. -+ rm -rf conftest.dir - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a -@@ -3712,17 +3728,17 @@ - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; -- msvisualcpp | msvcmsys) -+ msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac -@@ -3778,25 +3794,26 @@ - test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS - - - - depcc="$CCAS" am_compiler_list= - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 - $as_echo_n "checking dependency style of $depcc... " >&6; } --if test "${am_cv_CCAS_dependencies_compiler_type+set}" = set; then : -+if ${am_cv_CCAS_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. -+ rm -rf conftest.dir - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a -@@ -3844,17 +3861,17 @@ - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; -- msvisualcpp | msvcmsys) -+ msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac -@@ -3909,17 +3926,17 @@ - ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' - ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' - ac_compiler_gnu=$ac_cv_c_compiler_gnu - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. - set dummy ${ac_tool_prefix}gcc; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_CC+set}" = set; then : -+if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. - else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH - do -@@ -3949,17 +3966,17 @@ - - fi - if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. - set dummy gcc; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : -+if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. - else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH - do -@@ -4002,17 +4019,17 @@ - fi - - if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. - set dummy ${ac_tool_prefix}cc; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_CC+set}" = set; then : -+if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. - else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH - do -@@ -4042,17 +4059,17 @@ - - fi - fi - if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. - set dummy cc; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_CC+set}" = set; then : -+if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. - else - ac_prog_rejected=no - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH -@@ -4101,17 +4118,17 @@ - if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. - set dummy $ac_tool_prefix$ac_prog; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_CC+set}" = set; then : -+if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. - else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH - do -@@ -4145,17 +4162,17 @@ - if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe - do - # Extract the first word of "$ac_prog", so it can be a program name with args. - set dummy $ac_prog; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : -+if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. - else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH - do -@@ -4199,18 +4216,18 @@ - fi - fi - - fi - - - test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} --as_fn_error "no acceptable C compiler found in \$PATH --See \`config.log' for more details." "$LINENO" 5; } -+as_fn_error $? "no acceptable C compiler found in \$PATH -+See \`config.log' for more details" "$LINENO" 5; } - - # Provide some information about the compiler. - $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 - set X $ac_compile - ac_compiler=$2 - for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" - case "(($ac_try" in -@@ -4229,17 +4246,17 @@ - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - done - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 - $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } --if test "${ac_cv_c_compiler_gnu+set}" = set; then : -+if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext - /* end confdefs.h. */ - - int - main () - { -@@ -4266,17 +4283,17 @@ - GCC=yes - else - GCC= - fi - ac_test_CFLAGS=${CFLAGS+set} - ac_save_CFLAGS=$CFLAGS - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 - $as_echo_n "checking whether $CC accepts -g... " >&6; } --if test "${ac_cv_prog_cc_g+set}" = set; then : -+if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 - else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext - /* end confdefs.h. */ -@@ -4344,17 +4361,17 @@ - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 - $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } --if test "${ac_cv_prog_cc_c89+set}" = set; then : -+if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 - else - ac_cv_prog_cc_c89=no - ac_save_CC=$CC - cat confdefs.h - <<_ACEOF >conftest.$ac_ext - /* end confdefs.h. */ - #include - #include -@@ -4443,25 +4460,26 @@ - ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' - ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' - ac_compiler_gnu=$ac_cv_c_compiler_gnu - - depcc="$CC" am_compiler_list= - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 - $as_echo_n "checking dependency style of $depcc... " >&6; } --if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : -+if ${am_cv_CC_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. -+ rm -rf conftest.dir - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a -@@ -4511,17 +4529,17 @@ - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; -- msvisualcpp | msvcmsys) -+ msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac -@@ -4575,17 +4593,17 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 - $as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5 - $as_echo_n "checking whether cc understands -c and -o together... " >&6; } - fi - set dummy $CC; ac_cc=`$as_echo "$2" | - sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` --if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; then : -+if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then : - $as_echo_n "(cached) " >&6 - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext - /* end confdefs.h. */ - - int - main () - { -@@ -4704,17 +4722,17 @@ - ac_compiler_gnu=$ac_cv_c_compiler_gnu - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 - $as_echo_n "checking how to run the C preprocessor... " >&6; } - # On Suns, sometimes $CPP names a directory. - if test -n "$CPP" && test -d "$CPP"; then - CPP= - fi - if test -z "$CPP"; then -- if test "${ac_cv_prog_CPP+set}" = set; then : -+ if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 - else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false - for ac_c_preproc_warn_flag in '' yes - do -@@ -4734,37 +4752,37 @@ - Syntax error - _ACEOF - if ac_fn_c_try_cpp "$LINENO"; then : - - else - # Broken: fails on valid input. - continue - fi --rm -f conftest.err conftest.$ac_ext -+rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext - /* end confdefs.h. */ - #include - _ACEOF - if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. - continue - else - # Passes both tests. - ac_preproc_ok=: - break - fi --rm -f conftest.err conftest.$ac_ext -+rm -f conftest.err conftest.i conftest.$ac_ext - - done - # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. --rm -f conftest.err conftest.$ac_ext -+rm -f conftest.i conftest.err conftest.$ac_ext - if $ac_preproc_ok; then : - break - fi - - done - ac_cv_prog_CPP=$CPP - - fi -@@ -4793,44 +4811,44 @@ - Syntax error - _ACEOF - if ac_fn_c_try_cpp "$LINENO"; then : - - else - # Broken: fails on valid input. - continue - fi --rm -f conftest.err conftest.$ac_ext -+rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext - /* end confdefs.h. */ - #include - _ACEOF - if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. - continue - else - # Passes both tests. - ac_preproc_ok=: - break - fi --rm -f conftest.err conftest.$ac_ext -+rm -f conftest.err conftest.i conftest.$ac_ext - - done - # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. --rm -f conftest.err conftest.$ac_ext -+rm -f conftest.i conftest.err conftest.$ac_ext - if $ac_preproc_ok; then : - - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} --as_fn_error "C preprocessor \"$CPP\" fails sanity check --See \`config.log' for more details." "$LINENO" 5; } -+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -+See \`config.log' for more details" "$LINENO" 5; } - fi - - ac_ext=c - ac_cpp='$CPP $CPPFLAGS' - ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' - ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' - ac_compiler_gnu=$ac_cv_c_compiler_gnu - -@@ -4845,17 +4863,17 @@ - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. - set dummy $ac_tool_prefix$ac_prog; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_CXX+set}" = set; then : -+if ${ac_cv_prog_CXX+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. - else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH - do -@@ -4889,17 +4907,17 @@ - if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_prog", so it can be a program name with args. - set dummy $ac_prog; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : -+if ${ac_cv_prog_ac_ct_CXX+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. - else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH - do -@@ -4967,17 +4985,17 @@ - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - done - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 - $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } --if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : -+if ${ac_cv_cxx_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext - /* end confdefs.h. */ - - int - main () - { -@@ -5004,17 +5022,17 @@ - GXX=yes - else - GXX= - fi - ac_test_CXXFLAGS=${CXXFLAGS+set} - ac_save_CXXFLAGS=$CXXFLAGS - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 - $as_echo_n "checking whether $CXX accepts -g... " >&6; } --if test "${ac_cv_prog_cxx_g+set}" = set; then : -+if ${ac_cv_prog_cxx_g+:} false; then : - $as_echo_n "(cached) " >&6 - else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext - /* end confdefs.h. */ -@@ -5090,25 +5108,26 @@ - ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' - ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' - ac_compiler_gnu=$ac_cv_c_compiler_gnu - - depcc="$CXX" am_compiler_list= - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 - $as_echo_n "checking dependency style of $depcc... " >&6; } --if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then : -+if ${am_cv_CXX_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. -+ rm -rf conftest.dir - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a -@@ -5158,17 +5177,17 @@ - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; -- msvisualcpp | msvcmsys) -+ msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac -@@ -5218,17 +5237,17 @@ - fi - - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. - set dummy ${ac_tool_prefix}ranlib; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_RANLIB+set}" = set; then : -+if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. - else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH - do -@@ -5258,17 +5277,17 @@ - - fi - if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. - set dummy ranlib; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : -+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. - else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH - do -@@ -5318,17 +5337,17 @@ - GCC_FALSE= - fi - # let the Makefile know if we're gcc - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 - $as_echo_n "checking for grep that handles long lines and -e... " >&6; } --if test "${ac_cv_path_GREP+set}" = set; then : -+if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin - do -@@ -5367,31 +5386,31 @@ - esac - - $ac_path_GREP_found && break 3 - done - done - done - IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then -- as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 -+ as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi - else - ac_cv_path_GREP=$GREP - fi - - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 - $as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 - $as_echo_n "checking for egrep... " >&6; } --if test "${ac_cv_path_EGREP+set}" = set; then : -+if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 - else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST -@@ -5433,32 +5452,32 @@ - esac - - $ac_path_EGREP_found && break 3 - done - done - done - IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then -- as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 -+ as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi - else - ac_cv_path_EGREP=$EGREP - fi - - fi - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 - $as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 - $as_echo_n "checking for ANSI C header files... " >&6; } --if test "${ac_cv_header_stdc+set}" = set; then : -+if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext - /* end confdefs.h. */ - #include - #include - #include - #include -@@ -5785,17 +5804,17 @@ - PTHREAD_CFLAGS="$flag" - ;; - - pthread-config) - # Extract the first word of "pthread-config", so it can be a program name with args. - set dummy pthread-config; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_ax_pthread_config+set}" = set; then : -+if ${ac_cv_prog_ax_pthread_config+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$ax_pthread_config"; then - ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test. - else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH - do -@@ -5946,17 +5965,17 @@ - # More AIX lossage: must compile with xlc_r or cc_r - if test x"$GCC" != xyes; then - for ac_prog in xlc_r cc_r - do - # Extract the first word of "$ac_prog", so it can be a program name with args. - set dummy $ac_prog; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 - $as_echo_n "checking for $ac_word... " >&6; } --if test "${ac_cv_prog_PTHREAD_CC+set}" = set; then : -+if ${ac_cv_prog_PTHREAD_CC+:} false; then : - $as_echo_n "(cached) " >&6 - else - if test -n "$PTHREAD_CC"; then - ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. - else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH - do -@@ -6018,31 +6037,30 @@ - - # On IRIX 5.3, sys/types and inttypes.h are conflicting. - for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h - do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` - ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default - " --eval as_val=\$$as_ac_Header -- if test "x$as_val" = x""yes; then : -+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF - #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 - _ACEOF - - fi - - done - - - for ac_header in a.out.h - do : - ac_fn_c_check_header_mongrel "$LINENO" "a.out.h" "ac_cv_header_a_out_h" "$ac_includes_default" --if test "x$ac_cv_header_a_out_h" = x""yes; then : -+if test "x$ac_cv_header_a_out_h" = xyes; then : - cat >>confdefs.h <<_ACEOF - #define HAVE_A_OUT_H 1 - _ACEOF - - fi - - done - -@@ -6084,17 +6102,17 @@ - CFLAGS="${CFLAGS} -m32" - CXXFLAGS="${CXXFLAGS} -m32" - usem32=true - ;; - no) - usem32=false - ;; - *) -- as_fn_error "bad value ${enableval} for --enable-m32" "$LINENO" 5 -+ as_fn_error $? "bad value ${enableval} for --enable-m32" "$LINENO" 5 - ;; - esac - else - usem32=false - fi - - - # Check whether --enable-processor was given. -@@ -6102,17 +6120,17 @@ - enableval=$enable_processor; case "${enableval}" in - yes) - disable_processor=false - ;; - no) - disable_processor=true - ;; - *) -- as_fn_error "bad value ${enableval} for --disable-processor" "$LINENO" 5 -+ as_fn_error $? "bad value ${enableval} for --disable-processor" "$LINENO" 5 - ;; - esac - else - disable_processor=false - fi - - if test x$disable_processor = xtrue; then - DISABLE_PROCESSOR_TRUE= -@@ -6128,47 +6146,47 @@ - enableval=$enable_tools; case "${enableval}" in - yes) - disable_tools=false - ;; - no) - disable_tools=true - ;; - *) -- as_fn_error "bad value ${enableval} for --disable-tools" "$LINENO" 5 -+ as_fn_error $? "bad value ${enableval} for --disable-tools" "$LINENO" 5 - ;; - esac - else - disable_tools=false - fi - - if test x$disable_tools = xtrue; then - DISABLE_TOOLS_TRUE= - DISABLE_TOOLS_FALSE='#' - else - DISABLE_TOOLS_TRUE='#' - DISABLE_TOOLS_FALSE= - fi - - - if test x$LINUX_HOST = xfalse -a x$disable_processor = xtrue -a x$disable_tools = xtrue; then -- as_fn_error "--disable-processor and --disable-tools were specified, and not building for Linux. Nothing to build!" "$LINENO" 5 -+ as_fn_error $? "--disable-processor and --disable-tools were specified, and not building for Linux. Nothing to build!" "$LINENO" 5 - fi - - # Check whether --enable-selftest was given. - if test "${enable_selftest+set}" = set; then : - enableval=$enable_selftest; case "${enableval}" in - yes) - selftest=true - ;; - no) - selftest=false - ;; - *) -- as_fn_error "bad value ${enableval} for --enable-selftest" "$LINENO" 5 -+ as_fn_error $? "bad value ${enableval} for --enable-selftest" "$LINENO" 5 - ;; - esac - else - selftest=false - fi - - if test x$selftest = xtrue; then - SELFTEST_TRUE= -@@ -6240,35 +6258,47 @@ - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache - if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then -- test "x$cache_file" != "x/dev/null" && -+ if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 - $as_echo "$as_me: updating cache $cache_file" >&6;} -- cat confcache >$cache_file -+ if test ! -f "$cache_file" || test -h "$cache_file"; then -+ cat confcache >"$cache_file" -+ else -+ case $cache_file in #( -+ */* | ?:*) -+ mv -f confcache "$cache_file"$$ && -+ mv -f "$cache_file"$$ "$cache_file" ;; #( -+ *) -+ mv -f confcache "$cache_file" ;; -+ esac -+ fi -+ fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 - $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi - fi - rm -f confcache - - test "x$prefix" = xNONE && prefix=$ac_default_prefix - # Let make expand exec_prefix. - test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - - DEFS=-DHAVE_CONFIG_H - - ac_libobjs= - ac_ltlibobjs= -+U= - for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -@@ -6282,61 +6312,61 @@ - am__EXEEXT_TRUE= - am__EXEEXT_FALSE='#' - else - am__EXEEXT_TRUE='#' - am__EXEEXT_FALSE= - fi - - if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then -- as_fn_error "conditional \"AMDEP\" was never defined. -+ as_fn_error $? "conditional \"AMDEP\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi - if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then -- as_fn_error "conditional \"am__fastdepCC\" was never defined. -+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi - if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then -- as_fn_error "conditional \"am__fastdepCCAS\" was never defined. -+ as_fn_error $? "conditional \"am__fastdepCCAS\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi - if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then -- as_fn_error "conditional \"am__fastdepCC\" was never defined. -+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi - if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then -- as_fn_error "conditional \"am__fastdepCXX\" was never defined. -+ as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi - if test -z "${GCC_TRUE}" && test -z "${GCC_FALSE}"; then -- as_fn_error "conditional \"GCC\" was never defined. -+ as_fn_error $? "conditional \"GCC\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi - if test -z "${LINUX_HOST_TRUE}" && test -z "${LINUX_HOST_FALSE}"; then -- as_fn_error "conditional \"LINUX_HOST\" was never defined. -+ as_fn_error $? "conditional \"LINUX_HOST\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi - if test -z "${ANDROID_HOST_TRUE}" && test -z "${ANDROID_HOST_FALSE}"; then -- as_fn_error "conditional \"ANDROID_HOST\" was never defined. -+ as_fn_error $? "conditional \"ANDROID_HOST\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi - if test -z "${DISABLE_PROCESSOR_TRUE}" && test -z "${DISABLE_PROCESSOR_FALSE}"; then -- as_fn_error "conditional \"DISABLE_PROCESSOR\" was never defined. -+ as_fn_error $? "conditional \"DISABLE_PROCESSOR\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi - if test -z "${DISABLE_TOOLS_TRUE}" && test -z "${DISABLE_TOOLS_FALSE}"; then -- as_fn_error "conditional \"DISABLE_TOOLS\" was never defined. -+ as_fn_error $? "conditional \"DISABLE_TOOLS\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi - if test -z "${SELFTEST_TRUE}" && test -z "${SELFTEST_FALSE}"; then -- as_fn_error "conditional \"SELFTEST\" was never defined. -+ as_fn_error $? "conditional \"SELFTEST\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi - --: ${CONFIG_STATUS=./config.status} -+: "${CONFIG_STATUS=./config.status}" - ac_write_fail=0 - ac_clean_files_save=$ac_clean_files - ac_clean_files="$ac_clean_files $CONFIG_STATUS" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 - $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} - as_write_fail=0 - cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 - #! $SHELL -@@ -6427,16 +6457,17 @@ - # IFS - # We need space, tab and new line, in precisely that order. Quoting is - # there to prevent editors from complaining about space-tab. - # (If _AS_PATH_WALK were called with IFS unset, it would disable word - # splitting by setting IFS to empty value.) - IFS=" "" $as_nl" - - # Find who we are. Look in the path if we contain no directory separator. -+as_myself= - case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR - for as_dir in $PATH - do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -@@ -6472,29 +6503,29 @@ - export LC_ALL - LANGUAGE=C - export LANGUAGE - - # CDPATH. - (unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - --# as_fn_error ERROR [LINENO LOG_FD] --# --------------------------------- -+# as_fn_error STATUS ERROR [LINENO LOG_FD] -+# ---------------------------------------- - # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are - # provided, also output the error to LOG_FD, referencing LINENO. Then exit the --# script with status $?, using 1 if that was 0. -+# script with STATUS, using 1 if that was 0. - as_fn_error () - { -- as_status=$?; test $as_status -eq 0 && as_status=1 -- if test "$3"; then -- as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack -- $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 -+ as_status=$1; test $as_status -eq 0 && as_status=1 -+ if test "$4"; then -+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack -+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi -- $as_echo "$as_me: error: $1" >&2 -+ $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status - } # as_fn_error - - - # as_fn_set_status STATUS - # ----------------------- - # Set $? to STATUS, without forking. - as_fn_set_status () -@@ -6680,17 +6711,17 @@ - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" -- } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" -+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - - } # as_fn_mkdir_p - if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' - else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -@@ -6734,17 +6765,17 @@ - test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - - cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - # Save the log message, to keep $0 and so on meaningful, and to - # report actual input values of CONFIG_FILES etc. instead of their - # values after options handling. - ac_log=" - This file was extended by breakpad $as_me 0.1, which was --generated by GNU Autoconf 2.65. Invocation command line was -+generated by GNU Autoconf 2.68. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - - on `(hostname || uname -n) 2>/dev/null | sed 1q` -@@ -6800,20 +6831,20 @@ - - Report bugs to ." - - _ACEOF - cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" - ac_cs_version="\\ - breakpad config.status 0.1 --configured by $0, generated by GNU Autoconf 2.65, -+configured by $0, generated by GNU Autoconf 2.68, - with options \\"\$ac_cs_config\\" - --Copyright (C) 2009 Free Software Foundation, Inc. -+Copyright (C) 2010 Free Software Foundation, Inc. - This config.status script is free software; the Free Software Foundation - gives unlimited permission to copy, distribute and modify it." - - ac_pwd='$ac_pwd' - srcdir='$srcdir' - INSTALL='$INSTALL' - MKDIR_P='$MKDIR_P' - AWK='$AWK' -@@ -6821,21 +6852,26 @@ - _ACEOF - - cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - # The default lists apply if the user does not specify any file. - ac_need_defaults=: - while test $# != 0 - do - case $1 in -- --*=*) -+ --*=?*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; -+ --*=) -+ ac_option=`expr "X$1" : 'X\([^=]*\)='` -+ ac_optarg= -+ ac_shift=: -+ ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in -@@ -6847,38 +6883,39 @@ - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; -+ '') as_fn_error $? "missing file argument" ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_HEADERS " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header -- as_fn_error "ambiguous option: \`$1' -+ as_fn_error $? "ambiguous option: \`$1' - Try \`$0 --help' for more information.";; - --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. -- -*) as_fn_error "unrecognized option: \`$1' -+ -*) as_fn_error $? "unrecognized option: \`$1' - Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift - done -@@ -6926,17 +6963,17 @@ - # Handling of arguments. - for ac_config_target in $ac_config_targets - do - case $ac_config_target in - "src/config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;; - "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - -- *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; -+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac - done - - - # If the user did not use the arguments to specify the items to instantiate, - # then the envvar interface is used. Set only those that are not. - # We use the long form for the default assignment because of an extremely - # bizarre bug on SunOS 4.1.3. -@@ -6949,82 +6986,84 @@ - # Have a temporary directory for convenience. Make it in the build tree - # simply because there is no reason against having it here, and in addition, - # creating and moving files from /tmp can sometimes cause problems. - # Hook for its removal unless debugging. - # Note that there is a small window in which the directory will not be cleaned: - # after its creation but before its name has been assigned to `$tmp'. - $debug || - { -- tmp= -+ tmp= ac_tmp= - trap 'exit_status=$? -- { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -+ : "${ac_tmp:=$tmp}" -+ { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status - ' 0 - trap 'as_fn_exit 1' 1 2 13 15 - } - # Create a (secure) tmp directory for tmp files. - - { - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && -- test -n "$tmp" && test -d "$tmp" -+ test -d "$tmp" - } || - { - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") --} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 -+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 -+ac_tmp=$tmp - - # Set up the scripts for CONFIG_FILES section. - # No need to generate them if there are no CONFIG_FILES. - # This happens for instance with `./config.status config.h'. - if test -n "$CONFIG_FILES"; then - - - ac_cr=`echo X | tr X '\015'` - # On cygwin, bash can eat \r inside `` if the user requested igncr. - # But we know of no other shell where ac_cr would be empty at this - # point, so we can use a bashism as a fallback. - if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' - fi - ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` - if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then -- ac_cs_awk_cr='\r' -+ ac_cs_awk_cr='\\r' - else - ac_cs_awk_cr=$ac_cr - fi - --echo 'BEGIN {' >"$tmp/subs1.awk" && -+echo 'BEGIN {' >"$ac_tmp/subs1.awk" && - _ACEOF - - - { - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" - } >conf$$subs.sh || -- as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 --ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` -+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 -+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` - ac_delim='%!_!# ' - for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || -- as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 -+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then -- as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 -+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi - done - rm -f conf$$subs.sh - - cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 --cat >>"\$tmp/subs1.awk" <<\\_ACAWK && -+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && - _ACEOF - sed -n ' - h - s/^/S["/; s/!.*/"]=/ - p - g - s/^[^!]*!// - :repl -@@ -7062,17 +7101,17 @@ - /^[^""]/{ - N - s/\n// - } - ' >>$CONFIG_STATUS || ac_write_fail=1 - rm -f conf$$subs.awk - cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - _ACAWK --cat >>"\$tmp/subs1.awk" <<_ACAWK && -+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - - } - { - line = $ 0 - nfields = split(line, field, "@") - substed = 0 -@@ -7094,59 +7133,67 @@ - - _ACAWK - _ACEOF - cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" - else - cat --fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ -- || as_fn_error "could not setup config files machinery" "$LINENO" 5 -+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ -+ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 - _ACEOF - --# VPATH may cause trouble with some makes, so we remove $(srcdir), --# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -+# VPATH may cause trouble with some makes, so we remove sole $(srcdir), -+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and - # trailing colons and then remove the whole line if VPATH becomes empty - # (actually we leave an empty line to preserve line numbers). - if test "x$srcdir" = x.; then -- ac_vpsub='/^[ ]*VPATH[ ]*=/{ --s/:*\$(srcdir):*/:/ --s/:*\${srcdir}:*/:/ --s/:*@srcdir@:*/:/ --s/^\([^=]*=[ ]*\):*/\1/ -+ ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ -+h -+s/// -+s/^/:/ -+s/[ ]*$/:/ -+s/:\$(srcdir):/:/g -+s/:\${srcdir}:/:/g -+s/:@srcdir@:/:/g -+s/^:*// - s/:*$// -+x -+s/\(=[ ]*\).*/\1/ -+G -+s/\n// - s/^[^=]*=[ ]*$// - }' - fi - - cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - fi # test -n "$CONFIG_FILES" - - # Set up the scripts for CONFIG_HEADERS section. - # No need to generate them if there are no CONFIG_HEADERS. - # This happens for instance with `./config.status Makefile'. - if test -n "$CONFIG_HEADERS"; then --cat >"$tmp/defines.awk" <<\_ACAWK || -+cat >"$ac_tmp/defines.awk" <<\_ACAWK || - BEGIN { - _ACEOF - - # Transform confdefs.h into an awk script `defines.awk', embedded as - # here-document in config.status, that substitutes the proper values into - # config.h.in to produce config.h. - - # Create a delimiter string that does not exist in confdefs.h, to ease - # handling of long lines. - ac_delim='%!_!# ' - for ac_last_try in false false :; do -- ac_t=`sed -n "/$ac_delim/p" confdefs.h` -- if test -z "$ac_t"; then -+ ac_tt=`sed -n "/$ac_delim/p" confdefs.h` -+ if test -z "$ac_tt"; then - break - elif $ac_last_try; then -- as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5 -+ as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi - done - - # For the awk script, D is an array of macro values keyed by name, - # likewise P contains macro parameters if any. Preserve backslash - # newline sequences. -@@ -7221,30 +7268,30 @@ - next - } - } - } - { print } - _ACAWK - _ACEOF - cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -- as_fn_error "could not setup config headers machinery" "$LINENO" 5 -+ as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 - fi # test -n "$CONFIG_HEADERS" - - - eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" - shift - for ac_tag - do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; -- :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; -+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift -@@ -7253,26 +7300,26 @@ - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in -- -) ac_f="$tmp/stdin";; -+ -) ac_f="$ac_tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || -- as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; -+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ -@@ -7288,18 +7335,18 @@ - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in -- *:-:* | *:-) cat >"$tmp/stdin" \ -- || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; -+ *:-:* | *:-) cat >"$ac_tmp/stdin" \ -+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || - $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ -@@ -7425,56 +7472,57 @@ - s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t - s&@builddir@&$ac_builddir&;t t - s&@abs_builddir@&$ac_abs_builddir&;t t - s&@abs_top_builddir@&$ac_abs_top_builddir&;t t - s&@INSTALL@&$ac_INSTALL&;t t - s&@MKDIR_P@&$ac_MKDIR_P&;t t - $ac_datarootdir_hack - " --eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ -- || as_fn_error "could not create $ac_file" "$LINENO" 5 -+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ -+ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - - test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && -- { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && -- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && -+ { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && -+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ -+ "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' --which seems to be undefined. Please make sure it is defined." >&5 -+which seems to be undefined. Please make sure it is defined" >&5 - $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' --which seems to be undefined. Please make sure it is defined." >&2;} -- -- rm -f "$tmp/stdin" -+which seems to be undefined. Please make sure it is defined" >&2;} -+ -+ rm -f "$ac_tmp/stdin" - case $ac_file in -- -) cat "$tmp/out" && rm -f "$tmp/out";; -- *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; -+ -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; -+ *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; - esac \ -- || as_fn_error "could not create $ac_file" "$LINENO" 5 -+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - ;; - :H) - # - # CONFIG_HEADER - # - if test x"$ac_file" != x-; then - { - $as_echo "/* $configure_input */" \ -- && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" -- } >"$tmp/config.h" \ -- || as_fn_error "could not create $ac_file" "$LINENO" 5 -- if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then -+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" -+ } >"$ac_tmp/config.h" \ -+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 -+ if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 - $as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" -- mv "$tmp/config.h" "$ac_file" \ -- || as_fn_error "could not create $ac_file" "$LINENO" 5 -+ mv "$ac_tmp/config.h" "$ac_file" \ -+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - fi - else - $as_echo "/* $configure_input */" \ -- && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ -- || as_fn_error "could not create -" "$LINENO" 5 -+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ -+ || as_fn_error $? "could not create -" "$LINENO" 5 - fi - # Compute "$ac_file"'s index in $config_headers. - _am_arg="$ac_file" - _am_stamp_count=1 - for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; -@@ -7614,17 +7662,17 @@ - done # for ac_tag - - - as_fn_exit 0 - _ACEOF - ac_clean_files=$ac_clean_files_save - - test $ac_write_fail = 0 || -- as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 -+ as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - - # configure is writing to config.log, and then calls config.status. - # config.status does its own redirection, appending to config.log. - # Unfortunately, on DOS this fails, as config.log is still kept open - # by configure, so config.status won't be able to write to it; its - # output is simply discarded. So we exec the FD to /dev/null, - # effectively closing config.log, so it can be properly (re)opened and -@@ -7635,15 +7683,15 @@ - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. -- $ac_cs_success || as_fn_exit $? -+ $ac_cs_success || as_fn_exit 1 - fi - if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 - $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} - fi - -diff --git a/src/common/dwarf_cfi_to_module.cc b/src/common/dwarf_cfi_to_module.cc ---- a/src/common/dwarf_cfi_to_module.cc -+++ b/src/common/dwarf_cfi_to_module.cc -@@ -122,17 +122,18 @@ - return_address_ = return_address; - - // Breakpad STACK CFI records must provide a .ra rule, but DWARF CFI - // may not establish any rule for .ra if the return address column - // is an ordinary register, and that register holds the return - // address on entry to the function. So establish an initial .ra - // rule citing the return address register. - if (return_address_ < register_names_.size()) -- entry_->initial_rules[ra_name_] = register_names_[return_address_]; -+ entry_->initial_rules[ra_name_] -+ = Module::Expr(register_names_[return_address_], 0, false); - - return true; - } - - string DwarfCFIToModule::RegisterName(int i) { - assert(entry_); - if (i < 0) { - assert(i == kCFARegister); -@@ -148,69 +149,65 @@ - - reporter_->UnnamedRegister(entry_offset_, reg); - char buf[30]; - sprintf(buf, "unnamed_register%u", reg); - return buf; - } - - void DwarfCFIToModule::Record(Module::Address address, int reg, -- const string &rule) { -+ const Module::Expr &rule) { - assert(entry_); - -- // Place the name in our global set of strings, and then use the string -- // from the set. Even though the assignment looks like a copy, all the -- // major std::string implementations use reference counting internally, -- // so the effect is to have all our data structures share copies of rules -- // whenever possible. Since register names are drawn from a -- // vector, register names are already shared. -- string shared_rule = *common_strings_.insert(rule).first; -- - // Is this one of this entry's initial rules? - if (address == entry_->address) -- entry_->initial_rules[RegisterName(reg)] = shared_rule; -+ entry_->initial_rules[RegisterName(reg)] = rule; - // File it under the appropriate address. - else -- entry_->rule_changes[address][RegisterName(reg)] = shared_rule; -+ entry_->rule_changes[address][RegisterName(reg)] = rule; - } - - bool DwarfCFIToModule::UndefinedRule(uint64 address, int reg) { - reporter_->UndefinedNotSupported(entry_offset_, RegisterName(reg)); - // Treat this as a non-fatal error. - return true; - } - - bool DwarfCFIToModule::SameValueRule(uint64 address, int reg) { -- ostringstream s; -- s << RegisterName(reg); -- Record(address, reg, s.str()); -+ // reg + 0 -+ Module::Expr rule -+ = Module::Expr(RegisterName(reg), 0, false); -+ Record(address, reg, rule); - return true; - } - - bool DwarfCFIToModule::OffsetRule(uint64 address, int reg, - int base_register, long offset) { -- ostringstream s; -- s << RegisterName(base_register) << " " << offset << " + ^"; -- Record(address, reg, s.str()); -+ // *(base_register + offset) -+ Module::Expr rule -+ = Module::Expr(RegisterName(base_register), offset, true); -+ Record(address, reg, rule); - return true; - } - - bool DwarfCFIToModule::ValOffsetRule(uint64 address, int reg, - int base_register, long offset) { -- ostringstream s; -- s << RegisterName(base_register) << " " << offset << " +"; -- Record(address, reg, s.str()); -+ // base_register + offset -+ Module::Expr rule -+ = Module::Expr(RegisterName(base_register), offset, false); -+ Record(address, reg, rule); - return true; - } - - bool DwarfCFIToModule::RegisterRule(uint64 address, int reg, - int base_register) { -- ostringstream s; -- s << RegisterName(base_register); -- Record(address, reg, s.str()); -+ // base_register + 0 -+ Module::Expr rule -+ = Module::Expr(RegisterName(base_register), 0, false); -+ Record(address, reg, rule); - return true; - } - - bool DwarfCFIToModule::ExpressionRule(uint64 address, int reg, - const string &expression) { - reporter_->ExpressionsNotSupported(entry_offset_, RegisterName(reg)); - // Treat this as a non-fatal error. - return true; -diff --git a/src/common/dwarf_cfi_to_module.h b/src/common/dwarf_cfi_to_module.h ---- a/src/common/dwarf_cfi_to_module.h -+++ b/src/common/dwarf_cfi_to_module.h -@@ -147,17 +147,17 @@ - const string &expression); - virtual bool End(); - - private: - // Return the name to use for register REG. - string RegisterName(int i); - - // Record RULE for register REG at ADDRESS. -- void Record(Module::Address address, int reg, const string &rule); -+ void Record(Module::Address address, int reg, const Module::Expr &rule); - - // The module to which we should add entries. - Module *module_; - - // Map from register numbers to register names. - const vector ®ister_names_; - - // The reporter to use to report problems. -diff --git a/src/common/dwarf_cfi_to_module_unittest.cc b/src/common/dwarf_cfi_to_module_unittest.cc ---- a/src/common/dwarf_cfi_to_module_unittest.cc -+++ b/src/common/dwarf_cfi_to_module_unittest.cc -@@ -153,69 +153,71 @@ - } - - TEST_F(Rule, SameValueRule) { - StartEntry(); - ASSERT_TRUE(handler.SameValueRule(entry_address, 6)); - ASSERT_TRUE(handler.End()); - CheckEntry(); - Module::RuleMap expected_initial; -- expected_initial["reg6"] = "reg6"; -+ expected_initial["reg6"] = Module::Expr("reg6", 0, false); - EXPECT_THAT(entries[0]->initial_rules, ContainerEq(expected_initial)); - EXPECT_EQ(0U, entries[0]->rule_changes.size()); - } - - TEST_F(Rule, OffsetRule) { - StartEntry(); - ASSERT_TRUE(handler.OffsetRule(entry_address + 1, return_reg, - DwarfCFIToModule::kCFARegister, - 16927065)); - ASSERT_TRUE(handler.End()); - CheckEntry(); - EXPECT_EQ(0U, entries[0]->initial_rules.size()); - Module::RuleChangeMap expected_changes; -- expected_changes[entry_address + 1][".ra"] = ".cfa 16927065 + ^"; -+ expected_changes[entry_address + 1][".ra"] = -+ Module::Expr(".cfa", 16927065, true); - EXPECT_THAT(entries[0]->rule_changes, ContainerEq(expected_changes)); - } - - TEST_F(Rule, OffsetRuleNegative) { - StartEntry(); - ASSERT_TRUE(handler.OffsetRule(entry_address + 1, - DwarfCFIToModule::kCFARegister, 4, -34530721)); - ASSERT_TRUE(handler.End()); - CheckEntry(); - EXPECT_EQ(0U, entries[0]->initial_rules.size()); - Module::RuleChangeMap expected_changes; -- expected_changes[entry_address + 1][".cfa"] = "reg4 -34530721 + ^"; -+ expected_changes[entry_address + 1][".cfa"] = -+ Module::Expr("reg4", -34530721, true); - EXPECT_THAT(entries[0]->rule_changes, ContainerEq(expected_changes)); - } - - TEST_F(Rule, ValOffsetRule) { - // Use an unnamed register number, to exercise that branch of RegisterName. - EXPECT_CALL(reporter, UnnamedRegister(_, 11)); - StartEntry(); - ASSERT_TRUE(handler.ValOffsetRule(entry_address + 0x5ab7, - DwarfCFIToModule::kCFARegister, - 11, 61812979)); - ASSERT_TRUE(handler.End()); - CheckEntry(); - EXPECT_EQ(0U, entries[0]->initial_rules.size()); - Module::RuleChangeMap expected_changes; - expected_changes[entry_address + 0x5ab7][".cfa"] = -- "unnamed_register11 61812979 +"; -+ Module::Expr("unnamed_register11", 61812979, false); - EXPECT_THAT(entries[0]->rule_changes, ContainerEq(expected_changes)); - } - - TEST_F(Rule, RegisterRule) { - StartEntry(); - ASSERT_TRUE(handler.RegisterRule(entry_address, return_reg, 3)); - ASSERT_TRUE(handler.End()); - CheckEntry(); - Module::RuleMap expected_initial; -- expected_initial[".ra"] = "reg3"; -+ expected_initial[".ra"] = Module::Expr("reg3", 0, false); - EXPECT_THAT(entries[0]->initial_rules, ContainerEq(expected_initial)); - EXPECT_EQ(0U, entries[0]->rule_changes.size()); - } - - TEST_F(Rule, ExpressionRule) { - EXPECT_CALL(reporter, ExpressionsNotSupported(_, "reg2")); - StartEntry(); - ASSERT_TRUE(handler.ExpressionRule(entry_address + 0xf326, 2, -@@ -239,45 +241,46 @@ - - TEST_F(Rule, DefaultReturnAddressRule) { - return_reg = 2; - StartEntry(); - ASSERT_TRUE(handler.RegisterRule(entry_address, 0, 1)); - ASSERT_TRUE(handler.End()); - CheckEntry(); - Module::RuleMap expected_initial; -- expected_initial[".ra"] = "reg2"; -- expected_initial["reg0"] = "reg1"; -+ expected_initial[".ra"] = Module::Expr("reg2", 0, false); -+ expected_initial["reg0"] = Module::Expr("reg1", 0, false); - EXPECT_THAT(entries[0]->initial_rules, ContainerEq(expected_initial)); - EXPECT_EQ(0U, entries[0]->rule_changes.size()); - } - - TEST_F(Rule, DefaultReturnAddressRuleOverride) { - return_reg = 2; - StartEntry(); - ASSERT_TRUE(handler.RegisterRule(entry_address, return_reg, 1)); - ASSERT_TRUE(handler.End()); - CheckEntry(); - Module::RuleMap expected_initial; -- expected_initial[".ra"] = "reg1"; -+ expected_initial[".ra"] = Module::Expr("reg1", 0, false); - EXPECT_THAT(entries[0]->initial_rules, ContainerEq(expected_initial)); - EXPECT_EQ(0U, entries[0]->rule_changes.size()); - } - - TEST_F(Rule, DefaultReturnAddressRuleLater) { - return_reg = 2; - StartEntry(); - ASSERT_TRUE(handler.RegisterRule(entry_address + 1, return_reg, 1)); - ASSERT_TRUE(handler.End()); - CheckEntry(); - Module::RuleMap expected_initial; -- expected_initial[".ra"] = "reg2"; -+ expected_initial[".ra"] = Module::Expr("reg2", 0, false); - EXPECT_THAT(entries[0]->initial_rules, ContainerEq(expected_initial)); - Module::RuleChangeMap expected_changes; -- expected_changes[entry_address + 1][".ra"] = "reg1"; -+ expected_changes[entry_address + 1][".ra"] = -+ Module::Expr("reg1", 0, false); - EXPECT_THAT(entries[0]->rule_changes, ContainerEq(expected_changes)); - } - - TEST(RegisterNames, I386) { - vector names = DwarfCFIToModule::RegisterNames::I386(); - - EXPECT_EQ("$eax", names[0]); - EXPECT_EQ("$ecx", names[1]); -diff --git a/src/common/module.cc b/src/common/module.cc ---- a/src/common/module.cc -+++ b/src/common/module.cc -@@ -251,16 +251,34 @@ - } - - bool Module::ReportError() { - fprintf(stderr, "error writing symbol file: %s\n", - strerror(errno)); - return false; - } - -+std::ostream& operator<<(std::ostream& stream, const Module::Expr& expr) { -+ assert(!expr.invalid()); -+ switch (expr.how_) { -+ case Module::kExprSimple: -+ stream << expr.ident_ << " " << expr.offset_ << " +"; -+ break; -+ case Module::kExprSimpleMem: -+ stream << expr.ident_ << " " << expr.offset_ << " + ^"; -+ break; -+ case Module::kExprPostfix: -+ stream << expr.postfix_; break; -+ case Module::kExprInvalid: -+ default: -+ break; -+ } -+ return stream; -+} -+ - bool Module::WriteRuleMap(const RuleMap &rule_map, std::ostream &stream) { - for (RuleMap::const_iterator it = rule_map.begin(); - it != rule_map.end(); ++it) { - if (it != rule_map.begin()) - stream << ' '; - stream << it->first << ": " << it->second; - } - return stream.good(); -diff --git a/src/common/module.h b/src/common/module.h ---- a/src/common/module.h -+++ b/src/common/module.h -@@ -119,21 +119,81 @@ - }; - - // An exported symbol. - struct Extern { - Address address; - string name; - }; - -- // A map from register names to postfix expressions that recover -- // their their values. This can represent a complete set of rules to -+ // Representation of an expression. This can either be a postfix -+ // expression, in which case it is stored as a string, or a simple -+ // expression of the form (identifier + imm) or *(identifier + imm). -+ // It can also be invalid (denoting "no value"). -+ enum ExprHow { -+ kExprInvalid = 1, -+ kExprPostfix, -+ kExprSimple, -+ kExprSimpleMem -+ }; -+ struct Expr { -+ // Construct a simple-form expression -+ Expr(string ident, long offset, bool deref) { -+ if (ident.empty()) { -+ Expr(); -+ } else { -+ postfix_ = ""; -+ ident_ = ident; -+ offset_ = offset; -+ how_ = deref ? kExprSimpleMem : kExprSimple; -+ } -+ } -+ // Construct an expression from a postfix string -+ Expr(string postfix) { -+ if (postfix.empty()) { -+ Expr(); -+ } else { -+ postfix_ = postfix; -+ ident_ = ""; -+ offset_ = 0; -+ how_ = kExprPostfix; -+ } -+ } -+ // Construct an invalid expression -+ Expr() { -+ postfix_ = ""; -+ ident_ = ""; -+ offset_ = 0; -+ how_ = kExprInvalid; -+ } -+ bool invalid() const { return how_ == kExprInvalid; } -+ bool operator==(const Expr& other) const { -+ return how_ == other.how_ && -+ ident_ == other.ident_ && -+ offset_ == other.offset_ && -+ postfix_ == other.postfix_; -+ } -+ -+ // The identifier that gives the starting value for simple expressions. -+ string ident_; -+ // The offset to add for simple expressions. -+ long offset_; -+ // The Postfix expression string to evaluate for non-simple expressions. -+ string postfix_; -+ // The operation expressed by this expression. -+ ExprHow how_; -+ -+ friend std::ostream& operator<<(std::ostream& stream, const Expr& expr); -+ }; -+ -+ // A map from register names to expressions that recover -+ // their values. This can represent a complete set of rules to - // follow at some address, or a set of changes to be applied to an - // extant set of rules. -- typedef map RuleMap; -+ typedef map RuleMap; - - // A map from addresses to RuleMaps, representing changes that take - // effect at given addresses. - typedef map RuleChangeMap; - - // A range of 'STACK CFI' stack walking information. An instance of - // this structure corresponds to a 'STACK CFI INIT' record and the - // subsequent 'STACK CFI' records that fall within its range. -diff --git a/src/common/module_unittest.cc b/src/common/module_unittest.cc ---- a/src/common/module_unittest.cc -+++ b/src/common/module_unittest.cc -@@ -125,21 +125,21 @@ - function->lines.push_back(line1); - - m.AddFunction(function); - - // Some stack information. - Module::StackFrameEntry *entry = new Module::StackFrameEntry(); - entry->address = 0x30f9e5c83323973dULL; - entry->size = 0x49fc9ca7c7c13dc2ULL; -- entry->initial_rules[".cfa"] = "he was a handsome man"; -- entry->initial_rules["and"] = "what i want to know is"; -+ entry->initial_rules[".cfa"] = Module::Expr("he was a handsome man"); -+ entry->initial_rules["and"] = Module::Expr("what i want to know is"); - entry->rule_changes[0x30f9e5c83323973eULL]["how"] = -- "do you like your blueeyed boy"; -- entry->rule_changes[0x30f9e5c83323973eULL]["Mister"] = "Death"; -+ Module::Expr("do you like your blueeyed boy"); -+ entry->rule_changes[0x30f9e5c83323973eULL]["Mister"] = Module::Expr("Death"); - m.AddStackFrameEntry(entry); - - // Set the load address. Doing this after adding all the data to - // the module must work fine. - m.SetLoadAddress(0x2ab698b0b6407073LL); - - m.Write(s, ALL_SYMBOL_DATA); - string contents = s.str(); -@@ -229,21 +229,21 @@ - function->lines.push_back(line1); - - m.AddFunction(function); - - // Some stack information. - Module::StackFrameEntry *entry = new Module::StackFrameEntry(); - entry->address = 0x30f9e5c83323973dULL; - entry->size = 0x49fc9ca7c7c13dc2ULL; -- entry->initial_rules[".cfa"] = "he was a handsome man"; -- entry->initial_rules["and"] = "what i want to know is"; -+ entry->initial_rules[".cfa"] = Module::Expr("he was a handsome man"); -+ entry->initial_rules["and"] = Module::Expr("what i want to know is"); - entry->rule_changes[0x30f9e5c83323973eULL]["how"] = -- "do you like your blueeyed boy"; -- entry->rule_changes[0x30f9e5c83323973eULL]["Mister"] = "Death"; -+ Module::Expr("do you like your blueeyed boy"); -+ entry->rule_changes[0x30f9e5c83323973eULL]["Mister"] = Module::Expr("Death"); - m.AddStackFrameEntry(entry); - - // Set the load address. Doing this after adding all the data to - // the module must work fine. - m.SetLoadAddress(0x2ab698b0b6407073LL); - - m.Write(s, NO_CFI); - string contents = s.str(); -@@ -305,34 +305,34 @@ - entry1->address = 0xddb5f41285aa7757ULL; - entry1->size = 0x1486493370dc5073ULL; - m.AddStackFrameEntry(entry1); - - // Second STACK CFI entry, with initial rules but no deltas. - Module::StackFrameEntry *entry2 = new Module::StackFrameEntry(); - entry2->address = 0x8064f3af5e067e38ULL; - entry2->size = 0x0de2a5ee55509407ULL; -- entry2->initial_rules[".cfa"] = "I think that I shall never see"; -- entry2->initial_rules["stromboli"] = "a poem lovely as a tree"; -- entry2->initial_rules["cannoli"] = "a tree whose hungry mouth is prest"; -+ entry2->initial_rules[".cfa"] = Module::Expr("I think that I shall never see"); -+ entry2->initial_rules["stromboli"] = Module::Expr("a poem lovely as a tree"); -+ entry2->initial_rules["cannoli"] = Module::Expr("a tree whose hungry mouth is prest"); - m.AddStackFrameEntry(entry2); - - // Third STACK CFI entry, with initial rules and deltas. - Module::StackFrameEntry *entry3 = new Module::StackFrameEntry(); - entry3->address = 0x5e8d0db0a7075c6cULL; - entry3->size = 0x1c7edb12a7aea229ULL; -- entry3->initial_rules[".cfa"] = "Whose woods are these"; -+ entry3->initial_rules[".cfa"] = Module::Expr("Whose woods are these"); - entry3->rule_changes[0x47ceb0f63c269d7fULL]["calzone"] = -- "the village though"; -+ Module::Expr("the village though"); - entry3->rule_changes[0x47ceb0f63c269d7fULL]["cannoli"] = -- "he will not see me stopping here"; -+ Module::Expr("he will not see me stopping here"); - entry3->rule_changes[0x36682fad3763ffffULL]["stromboli"] = -- "his house is in"; -+ Module::Expr("his house is in"); - entry3->rule_changes[0x36682fad3763ffffULL][".cfa"] = -- "I think I know"; -+ Module::Expr("I think I know"); - m.AddStackFrameEntry(entry3); - - // Check that Write writes STACK CFI records properly. - m.Write(s, ALL_SYMBOL_DATA); - string contents = s.str(); - EXPECT_STREQ("MODULE os-name architecture id-string name with spaces\n" - "STACK CFI INIT 5e8d0db0a7075c6c 1c7edb12a7aea229" - " .cfa: Whose woods are these\n" -@@ -352,33 +352,33 @@ - // Check that GetStackFrameEntries works. - vector entries; - m.GetStackFrameEntries(&entries); - ASSERT_EQ(3U, entries.size()); - // Check first entry. - EXPECT_EQ(0x5e8d0db0a7075c6cULL, entries[0]->address); - EXPECT_EQ(0x1c7edb12a7aea229ULL, entries[0]->size); - Module::RuleMap entry1_initial; -- entry1_initial[".cfa"] = "Whose woods are these"; -+ entry1_initial[".cfa"] = Module::Expr("Whose woods are these"); - EXPECT_THAT(entries[0]->initial_rules, ContainerEq(entry1_initial)); - Module::RuleChangeMap entry1_changes; -- entry1_changes[0x36682fad3763ffffULL][".cfa"] = "I think I know"; -- entry1_changes[0x36682fad3763ffffULL]["stromboli"] = "his house is in"; -- entry1_changes[0x47ceb0f63c269d7fULL]["calzone"] = "the village though"; -+ entry1_changes[0x36682fad3763ffffULL][".cfa"] = Module::Expr("I think I know"); -+ entry1_changes[0x36682fad3763ffffULL]["stromboli"] = Module::Expr("his house is in"); -+ entry1_changes[0x47ceb0f63c269d7fULL]["calzone"] = Module::Expr("the village though"); - entry1_changes[0x47ceb0f63c269d7fULL]["cannoli"] = -- "he will not see me stopping here"; -+ Module::Expr("he will not see me stopping here"); - EXPECT_THAT(entries[0]->rule_changes, ContainerEq(entry1_changes)); - // Check second entry. - EXPECT_EQ(0x8064f3af5e067e38ULL, entries[1]->address); - EXPECT_EQ(0x0de2a5ee55509407ULL, entries[1]->size); - ASSERT_EQ(3U, entries[1]->initial_rules.size()); - Module::RuleMap entry2_initial; -- entry2_initial[".cfa"] = "I think that I shall never see"; -- entry2_initial["stromboli"] = "a poem lovely as a tree"; -- entry2_initial["cannoli"] = "a tree whose hungry mouth is prest"; -+ entry2_initial[".cfa"] = Module::Expr("I think that I shall never see"); -+ entry2_initial["stromboli"] = Module::Expr("a poem lovely as a tree"); -+ entry2_initial["cannoli"] = Module::Expr("a tree whose hungry mouth is prest"); - EXPECT_THAT(entries[1]->initial_rules, ContainerEq(entry2_initial)); - ASSERT_EQ(0U, entries[1]->rule_changes.size()); - // Check third entry. - EXPECT_EQ(0xddb5f41285aa7757ULL, entries[2]->address); - EXPECT_EQ(0x1486493370dc5073ULL, entries[2]->size); - ASSERT_EQ(0U, entries[2]->initial_rules.size()); - ASSERT_EQ(0U, entries[2]->rule_changes.size()); - } -@@ -585,34 +585,34 @@ - entry1->address = 0x2000; - entry1->size = 0x900; - m.AddStackFrameEntry(entry1); - - // Second STACK CFI entry, with initial rules but no deltas. - Module::StackFrameEntry *entry2 = new Module::StackFrameEntry(); - entry2->address = 0x3000; - entry2->size = 0x900; -- entry2->initial_rules[".cfa"] = "I think that I shall never see"; -- entry2->initial_rules["stromboli"] = "a poem lovely as a tree"; -- entry2->initial_rules["cannoli"] = "a tree whose hungry mouth is prest"; -+ entry2->initial_rules[".cfa"] = Module::Expr("I think that I shall never see"); -+ entry2->initial_rules["stromboli"] = Module::Expr("a poem lovely as a tree"); -+ entry2->initial_rules["cannoli"] = Module::Expr("a tree whose hungry mouth is prest"); - m.AddStackFrameEntry(entry2); - - // Third STACK CFI entry, with initial rules and deltas. - Module::StackFrameEntry *entry3 = new Module::StackFrameEntry(); - entry3->address = 0x1000; - entry3->size = 0x900; -- entry3->initial_rules[".cfa"] = "Whose woods are these"; -+ entry3->initial_rules[".cfa"] = Module::Expr("Whose woods are these"); - entry3->rule_changes[0x47ceb0f63c269d7fULL]["calzone"] = -- "the village though"; -+ Module::Expr("the village though"); - entry3->rule_changes[0x47ceb0f63c269d7fULL]["cannoli"] = -- "he will not see me stopping here"; -+ Module::Expr("he will not see me stopping here"); - entry3->rule_changes[0x36682fad3763ffffULL]["stromboli"] = -- "his house is in"; -+ Module::Expr("his house is in"); - entry3->rule_changes[0x36682fad3763ffffULL][".cfa"] = -- "I think I know"; -+ Module::Expr("I think I know"); - m.AddStackFrameEntry(entry3); - - Module::StackFrameEntry* s = m.FindStackFrameEntryByAddress(0x1000); - EXPECT_EQ(entry3, s); - s = m.FindStackFrameEntryByAddress(0x18FF); - EXPECT_EQ(entry3, s); - - s = m.FindStackFrameEntryByAddress(0x1900); -diff --git a/src/processor/cfi_frame_info.cc b/src/processor/cfi_frame_info.cc ---- a/src/processor/cfi_frame_info.cc -+++ b/src/processor/cfi_frame_info.cc -@@ -48,17 +48,17 @@ - #endif - - template - bool CFIFrameInfo::FindCallerRegs(const RegisterValueMap ®isters, - const MemoryRegion &memory, - RegisterValueMap *caller_registers) const { - // If there are not rules for both .ra and .cfa in effect at this address, - // don't use this CFI data for stack walking. -- if (cfa_rule_.empty() || ra_rule_.empty()) -+ if (cfa_rule_.invalid() || ra_rule_.invalid()) - return false; - - RegisterValueMap working; - PostfixEvaluator evaluator(&working, &memory); - - caller_registers->clear(); - - // First, compute the CFA. -@@ -99,20 +99,20 @@ - template bool CFIFrameInfo::FindCallerRegs( - const RegisterValueMap ®isters, - const MemoryRegion &memory, - RegisterValueMap *caller_registers) const; - - string CFIFrameInfo::Serialize() const { - std::ostringstream stream; - -- if (!cfa_rule_.empty()) { -+ if (!cfa_rule_.invalid()) { - stream << ".cfa: " << cfa_rule_; - } -- if (!ra_rule_.empty()) { -+ if (!ra_rule_.invalid()) { - if (static_cast(stream.tellp()) != 0) - stream << " "; - stream << ".ra: " << ra_rule_; - } - for (RuleMap::const_iterator iter = register_rules_.begin(); - iter != register_rules_.end(); - ++iter) { - if (static_cast(stream.tellp()) != 0) -@@ -166,21 +166,22 @@ - if (name_.empty() || expression_.empty()) return false; - if (name_ == ".cfa") handler_->CFARule(expression_); - else if (name_ == ".ra") handler_->RARule(expression_); - else handler_->RegisterRule(name_, expression_); - return true; - } - - void CFIFrameInfoParseHandler::CFARule(const string &expression) { -- frame_info_->SetCFARule(expression); -+ // 'expression' is a postfix expression string. -+ frame_info_->SetCFARule(Module::Expr(expression)); - } - - void CFIFrameInfoParseHandler::RARule(const string &expression) { -- frame_info_->SetRARule(expression); -+ frame_info_->SetRARule(Module::Expr(expression)); - } - - void CFIFrameInfoParseHandler::RegisterRule(const string &name, - const string &expression) { -- frame_info_->SetRegisterRule(name, expression); -+ frame_info_->SetRegisterRule(name, Module::Expr(expression)); - } - - } // namespace google_breakpad -diff --git a/src/processor/cfi_frame_info.h b/src/processor/cfi_frame_info.h ---- a/src/processor/cfi_frame_info.h -+++ b/src/processor/cfi_frame_info.h -@@ -38,16 +38,17 @@ - #ifndef PROCESSOR_CFI_FRAME_INFO_H_ - #define PROCESSOR_CFI_FRAME_INFO_H_ - - #include - #include - - #include "common/using_std_string.h" - #include "google_breakpad/common/breakpad_types.h" -+#include "common/module.h" - - namespace google_breakpad { - - using std::map; - - class MemoryRegion; - - // A set of rules for recovering the calling frame's registers' -@@ -61,26 +62,27 @@ - // INIT' record that covers that instruction, and then apply the - // changes given by the 'STACK CFI' records up to our instruction's - // address. Then, use the FindCallerRegs member function to apply the - // rules to the callee frame's register values, yielding the caller - // frame's register values. - class CFIFrameInfo { - public: - // A map from register names onto values. -- template class RegisterValueMap: -+ template class RegisterValueMap: - public map { }; - - // Set the expression for computing a call frame address, return - // address, or register's value. At least the CFA rule and the RA - // rule must be set before calling FindCallerRegs. -- void SetCFARule(const string &expression) { cfa_rule_ = expression; } -- void SetRARule(const string &expression) { ra_rule_ = expression; } -- void SetRegisterRule(const string ®ister_name, const string &expression) { -- register_rules_[register_name] = expression; -+ void SetCFARule(const Module::Expr& rule) { cfa_rule_ = rule; } -+ void SetRARule(const Module::Expr& rule) { ra_rule_ = rule; } -+ void SetRegisterRule(const string& register_name, -+ const Module::Expr& rule) { -+ register_rules_[register_name] = rule; - } - - // Compute the values of the calling frame's registers, according to - // this rule set. Use ValueType in expression evaluation; this - // should be uint32_t on machines with 32-bit addresses, or - // uint64_t on machines with 64-bit addresses. - // - // Return true on success, false otherwise. -@@ -101,37 +103,33 @@ - RegisterValueMap *caller_registers) const; - - // Serialize the rules in this object into a string in the format - // of STACK CFI records. - string Serialize() const; - - private: - -- // A map from register names onto evaluation rules. -- typedef map RuleMap; -+ // A map from register names onto evaluation rules. -+ typedef map RuleMap; - -- // In this type, a "postfix expression" is an expression of the sort -- // interpreted by google_breakpad::PostfixEvaluator. -- -- // A postfix expression for computing the current frame's CFA (call -+ // An expression for computing the current frame's CFA (call - // frame address). The CFA is a reference address for the frame that - // remains unchanged throughout the frame's lifetime. You should - // evaluate this expression with a dictionary initially populated - // with the values of the current frame's known registers. -- string cfa_rule_; -+ Module::Expr cfa_rule_; - - // The following expressions should be evaluated with a dictionary - // initially populated with the values of the current frame's known - // registers, and with ".cfa" set to the result of evaluating the - // cfa_rule expression, above. - -- // A postfix expression for computing the current frame's return -- // address. -- string ra_rule_; -+ // An expression for computing the current frame's return address. -+ Module::Expr ra_rule_; - - // For a register named REG, rules[REG] is a postfix expression - // which leaves the value of REG in the calling frame on the top of - // the stack. You should evaluate this expression - RuleMap register_rules_; - }; - - // A parser for STACK CFI-style rule sets. -diff --git a/src/processor/cfi_frame_info_unittest.cc b/src/processor/cfi_frame_info_unittest.cc ---- a/src/processor/cfi_frame_info_unittest.cc -+++ b/src/processor/cfi_frame_info_unittest.cc -@@ -30,24 +30,26 @@ - // Original author: Jim Blandy - - // cfi_frame_info_unittest.cc: Unit tests for CFIFrameInfo, - // CFIRuleParser, CFIFrameInfoParseHandler, and SimpleCFIWalker. - - #include - - #include "breakpad_googletest_includes.h" -+#include "common/module.h" - #include "common/using_std_string.h" - #include "processor/cfi_frame_info.h" - #include "google_breakpad/processor/memory_region.h" - - using google_breakpad::CFIFrameInfo; - using google_breakpad::CFIFrameInfoParseHandler; - using google_breakpad::CFIRuleParser; - using google_breakpad::MemoryRegion; -+using google_breakpad::Module; - using google_breakpad::SimpleCFIWalker; - using testing::_; - using testing::A; - using testing::AtMost; - using testing::DoAll; - using testing::Return; - using testing::SetArgumentPointee; - using testing::Test; -@@ -81,56 +83,56 @@ - }; - - class Simple: public CFIFixture, public Test { }; - - // FindCallerRegs should fail if no .cfa rule is provided. - TEST_F(Simple, NoCFA) { - ExpectNoMemoryReferences(); - -- cfi.SetRARule("0"); -+ cfi.SetRARule(Module::Expr("0")); - ASSERT_FALSE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); - ASSERT_EQ(".ra: 0", cfi.Serialize()); - } - - // FindCallerRegs should fail if no .ra rule is provided. - TEST_F(Simple, NoRA) { - ExpectNoMemoryReferences(); - -- cfi.SetCFARule("0"); -+ cfi.SetCFARule(Module::Expr("0")); - ASSERT_FALSE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); - ASSERT_EQ(".cfa: 0", cfi.Serialize()); - } - - TEST_F(Simple, SetCFAAndRARule) { - ExpectNoMemoryReferences(); - -- cfi.SetCFARule("330903416631436410"); -- cfi.SetRARule("5870666104170902211"); -+ cfi.SetCFARule(Module::Expr("330903416631436410")); -+ cfi.SetRARule(Module::Expr("5870666104170902211")); - ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); - ASSERT_EQ(2U, caller_registers.size()); - ASSERT_EQ(330903416631436410ULL, caller_registers[".cfa"]); - ASSERT_EQ(5870666104170902211ULL, caller_registers[".ra"]); - - ASSERT_EQ(".cfa: 330903416631436410 .ra: 5870666104170902211", - cfi.Serialize()); - } - - TEST_F(Simple, SetManyRules) { - ExpectNoMemoryReferences(); - -- cfi.SetCFARule("$temp1 68737028 = $temp2 61072337 = $temp1 $temp2 -"); -- cfi.SetRARule(".cfa 99804755 +"); -- cfi.SetRegisterRule("register1", ".cfa 54370437 *"); -- cfi.SetRegisterRule("vodkathumbscrewingly", "24076308 .cfa +"); -- cfi.SetRegisterRule("pubvexingfjordschmaltzy", ".cfa 29801007 -"); -- cfi.SetRegisterRule("uncopyrightables", "92642917 .cfa /"); -+ cfi.SetCFARule(Module::Expr("$temp1 68737028 = $temp2 61072337 = $temp1 $temp2 -")); -+ cfi.SetRARule(Module::Expr(".cfa 99804755 +")); -+ cfi.SetRegisterRule("register1", Module::Expr(".cfa 54370437 *")); -+ cfi.SetRegisterRule("vodkathumbscrewingly", Module::Expr("24076308 .cfa +")); -+ cfi.SetRegisterRule("pubvexingfjordschmaltzy", Module::Expr(".cfa 29801007 -")); -+ cfi.SetRegisterRule("uncopyrightables", Module::Expr("92642917 .cfa /")); - ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); - ASSERT_EQ(6U, caller_registers.size()); - ASSERT_EQ(7664691U, caller_registers[".cfa"]); - ASSERT_EQ(107469446U, caller_registers[".ra"]); - ASSERT_EQ(416732599139967ULL, caller_registers["register1"]); - ASSERT_EQ(31740999U, caller_registers["vodkathumbscrewingly"]); - ASSERT_EQ(-22136316ULL, caller_registers["pubvexingfjordschmaltzy"]); -@@ -142,154 +144,154 @@ - "uncopyrightables: 92642917 .cfa / " - "vodkathumbscrewingly: 24076308 .cfa +", - cfi.Serialize()); - } - - TEST_F(Simple, RulesOverride) { - ExpectNoMemoryReferences(); - -- cfi.SetCFARule("330903416631436410"); -- cfi.SetRARule("5870666104170902211"); -- cfi.SetCFARule("2828089117179001"); -+ cfi.SetCFARule(Module::Expr("330903416631436410")); -+ cfi.SetRARule(Module::Expr("5870666104170902211")); -+ cfi.SetCFARule(Module::Expr("2828089117179001")); - ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); - ASSERT_EQ(2U, caller_registers.size()); - ASSERT_EQ(2828089117179001ULL, caller_registers[".cfa"]); - ASSERT_EQ(5870666104170902211ULL, caller_registers[".ra"]); - ASSERT_EQ(".cfa: 2828089117179001 .ra: 5870666104170902211", - cfi.Serialize()); - } - - class Scope: public CFIFixture, public Test { }; - - // There should be no value for .cfa in scope when evaluating the CFA rule. - TEST_F(Scope, CFALacksCFA) { - ExpectNoMemoryReferences(); - -- cfi.SetCFARule(".cfa"); -- cfi.SetRARule("0"); -+ cfi.SetCFARule(Module::Expr(".cfa")); -+ cfi.SetRARule(Module::Expr("0")); - ASSERT_FALSE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); - } - - // There should be no value for .ra in scope when evaluating the CFA rule. - TEST_F(Scope, CFALacksRA) { - ExpectNoMemoryReferences(); - -- cfi.SetCFARule(".ra"); -- cfi.SetRARule("0"); -+ cfi.SetCFARule(Module::Expr(".ra")); -+ cfi.SetRARule(Module::Expr("0")); - ASSERT_FALSE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); - } - - // The current frame's registers should be in scope when evaluating - // the CFA rule. - TEST_F(Scope, CFASeesCurrentRegs) { - ExpectNoMemoryReferences(); - - registers[".baraminology"] = 0x06a7bc63e4f13893ULL; - registers[".ornithorhynchus"] = 0x5e0bf850bafce9d2ULL; -- cfi.SetCFARule(".baraminology .ornithorhynchus +"); -- cfi.SetRARule("0"); -+ cfi.SetCFARule(Module::Expr(".baraminology .ornithorhynchus +")); -+ cfi.SetRARule(Module::Expr("0")); - ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); - ASSERT_EQ(2U, caller_registers.size()); - ASSERT_EQ(0x06a7bc63e4f13893ULL + 0x5e0bf850bafce9d2ULL, - caller_registers[".cfa"]); - } - - // .cfa should be in scope in the return address expression. - TEST_F(Scope, RASeesCFA) { - ExpectNoMemoryReferences(); - -- cfi.SetCFARule("48364076"); -- cfi.SetRARule(".cfa"); -+ cfi.SetCFARule(Module::Expr("48364076")); -+ cfi.SetRARule(Module::Expr(".cfa")); - ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); - ASSERT_EQ(2U, caller_registers.size()); - ASSERT_EQ(48364076U, caller_registers[".ra"]); - } - - // There should be no value for .ra in scope when evaluating the CFA rule. - TEST_F(Scope, RALacksRA) { - ExpectNoMemoryReferences(); - -- cfi.SetCFARule("0"); -- cfi.SetRARule(".ra"); -+ cfi.SetCFARule(Module::Expr("0")); -+ cfi.SetRARule(Module::Expr(".ra")); - ASSERT_FALSE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); - } - - // The current frame's registers should be in scope in the return - // address expression. - TEST_F(Scope, RASeesCurrentRegs) { - ExpectNoMemoryReferences(); - - registers["noachian"] = 0x54dc4a5d8e5eb503ULL; -- cfi.SetCFARule("10359370"); -- cfi.SetRARule("noachian"); -+ cfi.SetCFARule(Module::Expr("10359370")); -+ cfi.SetRARule(Module::Expr("noachian")); - ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); - ASSERT_EQ(2U, caller_registers.size()); - ASSERT_EQ(0x54dc4a5d8e5eb503ULL, caller_registers[".ra"]); - } - - // .cfa should be in scope for register rules. - TEST_F(Scope, RegistersSeeCFA) { - ExpectNoMemoryReferences(); - -- cfi.SetCFARule("6515179"); -- cfi.SetRARule(".cfa"); -- cfi.SetRegisterRule("rogerian", ".cfa"); -+ cfi.SetCFARule(Module::Expr("6515179")); -+ cfi.SetRARule(Module::Expr(".cfa")); -+ cfi.SetRegisterRule("rogerian", Module::Expr(".cfa")); - ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); - ASSERT_EQ(3U, caller_registers.size()); - ASSERT_EQ(6515179U, caller_registers["rogerian"]); - } - - // The return address should not be in scope for register rules. - TEST_F(Scope, RegsLackRA) { - ExpectNoMemoryReferences(); - -- cfi.SetCFARule("42740329"); -- cfi.SetRARule("27045204"); -- cfi.SetRegisterRule("$r1", ".ra"); -+ cfi.SetCFARule(Module::Expr("42740329")); -+ cfi.SetRARule(Module::Expr("27045204")); -+ cfi.SetRegisterRule("$r1", Module::Expr(".ra")); - ASSERT_FALSE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); - } - - // Register rules can see the current frame's register values. - TEST_F(Scope, RegsSeeRegs) { - ExpectNoMemoryReferences(); - - registers["$r1"] = 0x6ed3582c4bedb9adULL; - registers["$r2"] = 0xd27d9e742b8df6d0ULL; -- cfi.SetCFARule("88239303"); -- cfi.SetRARule("30503835"); -- cfi.SetRegisterRule("$r1", "$r1 42175211 = $r2"); -- cfi.SetRegisterRule("$r2", "$r2 21357221 = $r1"); -+ cfi.SetCFARule(Module::Expr("88239303")); -+ cfi.SetRARule(Module::Expr("30503835")); -+ cfi.SetRegisterRule("$r1", Module::Expr("$r1 42175211 = $r2")); -+ cfi.SetRegisterRule("$r2", Module::Expr("$r2 21357221 = $r1")); - ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); - ASSERT_EQ(4U, caller_registers.size()); - ASSERT_EQ(0xd27d9e742b8df6d0ULL, caller_registers["$r1"]); - ASSERT_EQ(0x6ed3582c4bedb9adULL, caller_registers["$r2"]); - } - - // Each rule's temporaries are separate. - TEST_F(Scope, SeparateTempsRA) { - ExpectNoMemoryReferences(); - -- cfi.SetCFARule("$temp1 76569129 = $temp1"); -- cfi.SetRARule("0"); -+ cfi.SetCFARule(Module::Expr("$temp1 76569129 = $temp1")); -+ cfi.SetRARule(Module::Expr("0")); - ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); - -- cfi.SetCFARule("$temp1 76569129 = $temp1"); -- cfi.SetRARule("$temp1"); -+ cfi.SetCFARule(Module::Expr("$temp1 76569129 = $temp1")); -+ cfi.SetRARule(Module::Expr("$temp1")); - ASSERT_FALSE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); - } - - class MockCFIRuleParserHandler: public CFIRuleParser::Handler { - public: - MOCK_METHOD1(CFARule, void(const string &)); - MOCK_METHOD1(RARule, void(const string &)); -@@ -512,20 +514,20 @@ - .WillRepeatedly(DoAll(SetArgumentPointee<1>(0xdc1975eba8602302ULL), - Return(true))); - // Saved return address. - EXPECT_CALL(memory, - GetMemoryAtAddress(stack_top + 16, A())) - .WillRepeatedly(DoAll(SetArgumentPointee<1>(0xba5ad6d9acce28deULL), - Return(true))); - -- call_frame_info.SetCFARule("sp 24 +"); -- call_frame_info.SetRARule(".cfa 8 - ^"); -- call_frame_info.SetRegisterRule("r0", ".cfa 24 - ^"); -- call_frame_info.SetRegisterRule("r1", "r2"); -+ call_frame_info.SetCFARule(Module::Expr("sp 24 +")); -+ call_frame_info.SetRARule(Module::Expr(".cfa 8 - ^")); -+ call_frame_info.SetRegisterRule("r0", Module::Expr(".cfa 24 - ^")); -+ call_frame_info.SetRegisterRule("r1", Module::Expr("r2")); - - callee_context.r0 = 0x94e030ca79edd119ULL; - callee_context.r1 = 0x937b4d7e95ce52d9ULL; - callee_context.r2 = 0x5fe0027416b8b62aULL; // caller's r1 - // callee_context.r3 is not valid in callee. - // callee_context.r4 is not valid in callee. - callee_context.sp = stack_top; - callee_context.pc = 0x25b21b224311d280ULL; -diff --git a/src/processor/postfix_evaluator-inl.h b/src/processor/postfix_evaluator-inl.h ---- a/src/processor/postfix_evaluator-inl.h -+++ b/src/processor/postfix_evaluator-inl.h -@@ -226,52 +226,100 @@ - return false; - } - } - - return true; - } - - template --bool PostfixEvaluator::Evaluate(const string &expression, -- DictionaryValidityType *assigned) { -+bool PostfixEvaluator::Evaluate(const Module::Expr& expr, -+ DictionaryValidityType* assigned) { -+ // The expression is being exevaluated only for its side effects. Skip -+ // expressions that denote values only. -+ if (expr.how_ != Module::kExprPostfix) { -+ BPLOG(ERROR) << "Can't evaluate for side-effects: " << expr; -+ return false; -+ } -+ - // Ensure that the stack is cleared before returning. - AutoStackClearer clearer(&stack_); - -- if (!EvaluateInternal(expression, assigned)) -+ if (!EvaluateInternal(expr.postfix_, assigned)) - return false; - - // If there's anything left on the stack, it indicates incomplete execution. - // This is a failure case. If the stack is empty, evalution was complete - // and successful. - if (stack_.empty()) - return true; - -- BPLOG(ERROR) << "Incomplete execution: " << expression; -+ BPLOG(ERROR) << "Incomplete execution: " << expr; - return false; - } - - template --bool PostfixEvaluator::EvaluateForValue(const string &expression, -- ValueType *result) { -- // Ensure that the stack is cleared before returning. -- AutoStackClearer clearer(&stack_); -+bool PostfixEvaluator::EvaluateForValue(const Module::Expr& expr, -+ ValueType* result) { -+ switch (expr.how_) { - -- if (!EvaluateInternal(expression, NULL)) -- return false; -+ // Postfix expression. Give to the evaluator and return the -+ // one-and-only stack element that should be left over. -+ case Module::kExprPostfix: { -+ // Ensure that the stack is cleared before returning. -+ AutoStackClearer clearer(&stack_); - -- // A successful execution should leave exactly one value on the stack. -- if (stack_.size() != 1) { -- BPLOG(ERROR) << "Expression yielded bad number of results: " -- << "'" << expression << "'"; -- return false; -+ if (!EvaluateInternal(expr.postfix_, NULL)) -+ return false; -+ -+ // A successful execution should leave exactly one value on the stack. -+ if (stack_.size() != 1) { -+ BPLOG(ERROR) << "Expression yielded bad number of results: " -+ << "'" << expr << "'"; -+ return false; -+ } -+ -+ return PopValue(result); -+ } -+ -+ // Simple-form expressions -+ case Module::kExprSimple: -+ case Module::kExprSimpleMem: { -+ // Look up the base value -+ typename DictionaryType::const_iterator iterator -+ = dictionary_->find(expr.ident_); -+ if (iterator == dictionary_->end()) { -+ // The identifier wasn't found in the dictionary. Don't imply any -+ // default value, just fail. -+ BPLOG(INFO) << "Identifier " << expr.ident_ -+ << " not in dictionary (kExprSimple{Mem})"; -+ return false; -+ } -+ -+ // Form the sum -+ ValueType sum = iterator->second + (int64_t)expr.offset_; -+ -+ // and dereference if necessary -+ if (expr.how_ == Module::kExprSimpleMem) { -+ ValueType derefd; -+ if (!memory_ || !memory_->GetMemoryAtAddress(sum, &derefd)) { -+ return false; -+ } -+ *result = derefd; -+ } else { -+ *result = sum; -+ } -+ return true; -+ } -+ -+ default: -+ return false; - } -+} - -- return PopValue(result); --} - - template - typename PostfixEvaluator::PopResult - PostfixEvaluator::PopValueOrIdentifier( - ValueType *value, string *identifier) { - // There needs to be at least one element on the stack to pop. - if (!stack_.size()) - return POP_RESULT_FAIL; -diff --git a/src/processor/postfix_evaluator.h b/src/processor/postfix_evaluator.h ---- a/src/processor/postfix_evaluator.h -+++ b/src/processor/postfix_evaluator.h -@@ -70,16 +70,17 @@ - #define PROCESSOR_POSTFIX_EVALUATOR_H__ - - - #include - #include - #include - - #include "common/using_std_string.h" -+#include "common/module.h" - - namespace google_breakpad { - - using std::map; - using std::vector; - - class MemoryRegion; - -@@ -100,23 +101,23 @@ - - // Evaluate the expression, starting with an empty stack. The results of - // execution will be stored in one (or more) variables in the dictionary. - // Returns false if any failures occur during execution, leaving - // variables in the dictionary in an indeterminate state. If assigned is - // non-NULL, any keys set in the dictionary as a result of evaluation - // will also be set to true in assigned, providing a way to determine if - // an expression modifies any of its input variables. -- bool Evaluate(const string &expression, DictionaryValidityType *assigned); -+ bool Evaluate(const Module::Expr &expr, DictionaryValidityType *assigned); - -- // Like Evaluate, but provides the value left on the stack to the -- // caller. If evaluation succeeds and leaves exactly one value on -- // the stack, pop that value, store it in *result, and return true. -- // Otherwise, return false. -- bool EvaluateForValue(const string &expression, ValueType *result); -+ // Like Evaluate, but expects the expression to denote a value. -+ // If evaluation succeeds and (in the case of a postfix expression) -+ // leaves exactly one value on the stack, pop that value, store it in -+ // *result, and return true. Otherwise, return false. -+ bool EvaluateForValue(const Module::Expr& expression, ValueType* result); - - DictionaryType* dictionary() const { return dictionary_; } - - // Reset the dictionary. PostfixEvaluator does not take ownership. - void set_dictionary(DictionaryType *dictionary) {dictionary_ = dictionary; } - - private: - // Return values for PopValueOrIdentifier diff --git a/toolkit/crashreporter/breakpad-patches/03-unique-string.patch b/toolkit/crashreporter/breakpad-patches/03-unique-string.patch deleted file mode 100644 index 12d3fd7ff276..000000000000 --- a/toolkit/crashreporter/breakpad-patches/03-unique-string.patch +++ /dev/null @@ -1,4539 +0,0 @@ -# HG changeset patch -# User Ted Mielczarek -# Date 1360255134 18000 -# Thu Feb 07 11:38:54 2013 -0500 -# Node ID 79cecfef3c2a10d719fe1af9fae2e5257109b028 -# Parent 08f184a7e6d6d15ecc20abd56bc4e36669c0c68a -Rework PostfixEvaluator to use a UniqueString type -Patch by Julian Seward , R=ted - -diff --git a/Makefile.am b/Makefile.am ---- a/Makefile.am -+++ b/Makefile.am -@@ -134,16 +134,17 @@ - src/google_breakpad/processor/source_line_resolver_interface.h \ - src/google_breakpad/processor/stack_frame.h \ - src/google_breakpad/processor/stack_frame_cpu.h \ - src/google_breakpad/processor/stack_frame_symbolizer.h \ - src/google_breakpad/processor/stackwalker.h \ - src/google_breakpad/processor/symbol_supplier.h \ - src/google_breakpad/processor/system_info.h \ - src/common/module.cc \ -+ src/common/unique_string.cc \ - src/processor/address_map-inl.h \ - src/processor/address_map.h \ - src/processor/basic_code_module.h \ - src/processor/basic_code_modules.cc \ - src/processor/basic_code_modules.h \ - src/processor/basic_source_line_resolver_types.h \ - src/processor/basic_source_line_resolver.cc \ - src/processor/binarystream.h \ -@@ -430,16 +431,17 @@ - src_tools_linux_dump_syms_dump_syms_SOURCES = \ - src/common/dwarf_cfi_to_module.cc \ - src/common/dwarf_cu_to_module.cc \ - src/common/dwarf_line_to_module.cc \ - src/common/language.cc \ - src/common/module.cc \ - src/common/stabs_reader.cc \ - src/common/stabs_to_module.cc \ -+ src/common/unique_string.cc \ - src/common/dwarf/bytereader.cc \ - src/common/dwarf/dwarf2diehandler.cc \ - src/common/dwarf/dwarf2reader.cc \ - src/common/linux/dump_symbols.cc \ - src/common/linux/elf_symbols_to_module.cc \ - src/common/linux/elfutils.cc \ - src/common/linux/file_id.cc \ - src/common/linux/linux_libc_support.cc \ -@@ -473,16 +475,17 @@ - src/common/memory_range_unittest.cc \ - src/common/module.cc \ - src/common/module_unittest.cc \ - src/common/stabs_reader.cc \ - src/common/stabs_reader_unittest.cc \ - src/common/stabs_to_module.cc \ - src/common/stabs_to_module_unittest.cc \ - src/common/test_assembler.cc \ -+ src/common/unique_string.cc \ - src/common/dwarf/bytereader.cc \ - src/common/dwarf/bytereader_unittest.cc \ - src/common/dwarf/cfi_assembler.cc \ - src/common/dwarf/dwarf2diehandler.cc \ - src/common/dwarf/dwarf2diehandler_unittest.cc \ - src/common/dwarf/dwarf2reader.cc \ - src/common/dwarf/dwarf2reader_cfi_unittest.cc \ - src/common/dwarf/dwarf2reader_die_unittest.cc \ -@@ -561,31 +564,33 @@ - src_processor_basic_source_line_resolver_unittest_CPPFLAGS = \ - -I$(top_srcdir)/src \ - -I$(top_srcdir)/src/testing/include \ - -I$(top_srcdir)/src/testing/gtest/include \ - -I$(top_srcdir)/src/testing/gtest \ - -I$(top_srcdir)/src/testing - src_processor_basic_source_line_resolver_unittest_LDADD = \ - src/common/module.o \ -+ src/common/unique_string.o \ - src/processor/basic_source_line_resolver.o \ - src/processor/cfi_frame_info.o \ - src/processor/pathname_stripper.o \ - src/processor/logging.o \ - src/processor/source_line_resolver_base.o \ - src/processor/tokenize.o \ - $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) - - src_processor_cfi_frame_info_unittest_SOURCES = \ - src/processor/cfi_frame_info_unittest.cc \ - src/testing/gtest/src/gtest-all.cc \ - src/testing/gtest/src/gtest_main.cc \ - src/testing/src/gmock-all.cc - src_processor_cfi_frame_info_unittest_LDADD = \ - src/common/module.o \ -+ src/common/unique_string.o \ - src/processor/cfi_frame_info.o \ - src/processor/logging.o \ - src/processor/pathname_stripper.o \ - $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) - src_processor_cfi_frame_info_unittest_CPPFLAGS = \ - -I$(top_srcdir)/src \ - -I$(top_srcdir)/src/testing/include \ - -I$(top_srcdir)/src/testing/gtest/include \ -@@ -606,16 +611,17 @@ - src_processor_exploitability_unittest_CPPFLAGS = \ - -I$(top_srcdir)/src \ - -I$(top_srcdir)/src/testing/include \ - -I$(top_srcdir)/src/testing/gtest/include \ - -I$(top_srcdir)/src/testing/gtest \ - -I$(top_srcdir)/src/testing - src_processor_exploitability_unittest_LDADD = \ - src/common/module.o \ -+ src/common/unique_string.o \ - src/processor/minidump_processor.o \ - src/processor/process_state.o \ - src/processor/disassembler_x86.o \ - src/processor/exploitability.o \ - src/processor/exploitability_win.o \ - src/processor/basic_code_modules.o \ - src/processor/basic_source_line_resolver.o \ - src/processor/call_stack.o \ -@@ -659,16 +665,17 @@ - src_processor_fast_source_line_resolver_unittest_CPPFLAGS = \ - -I$(top_srcdir)/src \ - -I$(top_srcdir)/src/testing/include \ - -I$(top_srcdir)/src/testing/gtest/include \ - -I$(top_srcdir)/src/testing/gtest \ - -I$(top_srcdir)/src/testing - src_processor_fast_source_line_resolver_unittest_LDADD = \ - src/common/module.o \ -+ src/common/unique_string.o \ - src/processor/fast_source_line_resolver.o \ - src/processor/basic_source_line_resolver.o \ - src/processor/cfi_frame_info.o \ - src/processor/module_comparer.o \ - src/processor/module_serializer.o \ - src/processor/pathname_stripper.o \ - src/processor/logging.o \ - src/processor/source_line_resolver_base.o \ -@@ -697,16 +704,17 @@ - src_processor_minidump_processor_unittest_CPPFLAGS = \ - -I$(top_srcdir)/src \ - -I$(top_srcdir)/src/testing/include \ - -I$(top_srcdir)/src/testing/gtest/include \ - -I$(top_srcdir)/src/testing/gtest \ - -I$(top_srcdir)/src/testing - src_processor_minidump_processor_unittest_LDADD = \ - src/common/module.o \ -+ src/common/unique_string.o \ - src/processor/basic_code_modules.o \ - src/processor/basic_source_line_resolver.o \ - src/processor/call_stack.o \ - src/processor/cfi_frame_info.o \ - src/processor/disassembler_x86.o \ - src/processor/exploitability.o \ - src/processor/exploitability_win.o \ - src/processor/logging.o \ -@@ -812,16 +820,17 @@ - src_processor_pathname_stripper_unittest_LDADD = \ - src/processor/pathname_stripper.o \ - $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) - - src_processor_postfix_evaluator_unittest_SOURCES = \ - src/processor/postfix_evaluator_unittest.cc - src_processor_postfix_evaluator_unittest_LDADD = \ - src/common/module.o \ -+ src/common/unique_string.o \ - src/processor/logging.o \ - src/processor/pathname_stripper.o \ - $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) - - src_processor_range_map_unittest_SOURCES = \ - src/processor/range_map_unittest.cc - src_processor_range_map_unittest_LDADD = \ - src/processor/logging.o \ -@@ -943,16 +952,17 @@ - src/processor/logging.o \ - src/processor/minidump.o \ - src/processor/pathname_stripper.o - - src_processor_minidump_stackwalk_SOURCES = \ - src/processor/minidump_stackwalk.cc - src_processor_minidump_stackwalk_LDADD = \ - src/common/module.o \ -+ src/common/unique_string.o \ - src/processor/basic_code_modules.o \ - src/processor/basic_source_line_resolver.o \ - src/processor/binarystream.o \ - src/processor/call_stack.o \ - src/processor/cfi_frame_info.o \ - src/processor/disassembler_x86.o \ - src/processor/exploitability.o \ - src/processor/exploitability_win.o \ -diff --git a/Makefile.in b/Makefile.in ---- a/Makefile.in -+++ b/Makefile.in -@@ -267,18 +267,19 @@ - src/google_breakpad/processor/source_line_resolver_base.h \ - src/google_breakpad/processor/source_line_resolver_interface.h \ - src/google_breakpad/processor/stack_frame.h \ - src/google_breakpad/processor/stack_frame_cpu.h \ - src/google_breakpad/processor/stack_frame_symbolizer.h \ - src/google_breakpad/processor/stackwalker.h \ - src/google_breakpad/processor/symbol_supplier.h \ - src/google_breakpad/processor/system_info.h \ -- src/common/module.cc src/processor/address_map-inl.h \ -- src/processor/address_map.h src/processor/basic_code_module.h \ -+ src/common/module.cc src/common/unique_string.cc \ -+ src/processor/address_map-inl.h src/processor/address_map.h \ -+ src/processor/basic_code_module.h \ - src/processor/basic_code_modules.cc \ - src/processor/basic_code_modules.h \ - src/processor/basic_source_line_resolver_types.h \ - src/processor/basic_source_line_resolver.cc \ - src/processor/binarystream.h src/processor/binarystream.cc \ - src/processor/call_stack.cc src/processor/cfi_frame_info.cc \ - src/processor/cfi_frame_info.h \ - src/processor/contained_range_map-inl.h \ -@@ -332,16 +333,17 @@ - src/processor/static_map_iterator-inl.h \ - src/processor/static_map_iterator.h \ - src/processor/static_map-inl.h src/processor/static_map.h \ - src/processor/static_range_map-inl.h \ - src/processor/static_range_map.h src/processor/tokenize.cc \ - src/processor/tokenize.h - @DISABLE_PROCESSOR_FALSE@am_src_libbreakpad_a_OBJECTS = \ - @DISABLE_PROCESSOR_FALSE@ src/common/module.$(OBJEXT) \ -+@DISABLE_PROCESSOR_FALSE@ src/common/unique_string.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_code_modules.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/processor/binarystream.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/processor/call_stack.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/processor/disassembler_x86.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/processor/exploitability.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/processor/exploitability_win.$(OBJEXT) \ -@@ -525,17 +527,18 @@ - src/common/dwarf_cu_to_module_unittest.cc \ - src/common/dwarf_line_to_module.cc \ - src/common/dwarf_line_to_module_unittest.cc \ - src/common/language.cc src/common/memory_range_unittest.cc \ - src/common/module.cc src/common/module_unittest.cc \ - src/common/stabs_reader.cc src/common/stabs_reader_unittest.cc \ - src/common/stabs_to_module.cc \ - src/common/stabs_to_module_unittest.cc \ -- src/common/test_assembler.cc src/common/dwarf/bytereader.cc \ -+ src/common/test_assembler.cc src/common/unique_string.cc \ -+ src/common/dwarf/bytereader.cc \ - src/common/dwarf/bytereader_unittest.cc \ - src/common/dwarf/cfi_assembler.cc \ - src/common/dwarf/dwarf2diehandler.cc \ - src/common/dwarf/dwarf2diehandler_unittest.cc \ - src/common/dwarf/dwarf2reader.cc \ - src/common/dwarf/dwarf2reader_cfi_unittest.cc \ - src/common/dwarf/dwarf2reader_die_unittest.cc \ - src/common/linux/dump_symbols.cc \ -@@ -569,16 +572,17 @@ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/src_common_dumper_unittest-memory_range_unittest.$(OBJEXT) \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/src_common_dumper_unittest-module.$(OBJEXT) \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/src_common_dumper_unittest-module_unittest.$(OBJEXT) \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/src_common_dumper_unittest-stabs_reader.$(OBJEXT) \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/src_common_dumper_unittest-stabs_reader_unittest.$(OBJEXT) \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/src_common_dumper_unittest-stabs_to_module.$(OBJEXT) \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/src_common_dumper_unittest-stabs_to_module_unittest.$(OBJEXT) \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/src_common_dumper_unittest-test_assembler.$(OBJEXT) \ -+@DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/src_common_dumper_unittest-unique_string.$(OBJEXT) \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/dwarf/src_common_dumper_unittest-bytereader.$(OBJEXT) \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/dwarf/src_common_dumper_unittest-bytereader_unittest.$(OBJEXT) \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/dwarf/src_common_dumper_unittest-cfi_assembler.$(OBJEXT) \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/dwarf/src_common_dumper_unittest-dwarf2diehandler.$(OBJEXT) \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/dwarf/src_common_dumper_unittest-dwarf2diehandler_unittest.$(OBJEXT) \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/dwarf/src_common_dumper_unittest-dwarf2reader.$(OBJEXT) \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/dwarf/src_common_dumper_unittest-dwarf2reader_cfi_unittest.$(OBJEXT) \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/dwarf/src_common_dumper_unittest-dwarf2reader_die_unittest.$(OBJEXT) \ -@@ -637,16 +641,17 @@ - src/testing/gtest/src/gtest-all.cc \ - src/testing/src/gmock-all.cc - @DISABLE_PROCESSOR_FALSE@am_src_processor_basic_source_line_resolver_unittest_OBJECTS = src/processor/src_processor_basic_source_line_resolver_unittest-basic_source_line_resolver_unittest.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/testing/gtest/src/src_processor_basic_source_line_resolver_unittest-gtest-all.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/testing/src/src_processor_basic_source_line_resolver_unittest-gmock-all.$(OBJEXT) - src_processor_basic_source_line_resolver_unittest_OBJECTS = $(am_src_processor_basic_source_line_resolver_unittest_OBJECTS) - @DISABLE_PROCESSOR_FALSE@src_processor_basic_source_line_resolver_unittest_DEPENDENCIES = \ - @DISABLE_PROCESSOR_FALSE@ src/common/module.o \ -+@DISABLE_PROCESSOR_FALSE@ src/common/unique_string.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/source_line_resolver_base.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/tokenize.o \ - @DISABLE_PROCESSOR_FALSE@ $(am__DEPENDENCIES_1) \ - @DISABLE_PROCESSOR_FALSE@ $(am__DEPENDENCIES_1) -@@ -671,16 +676,17 @@ - @DISABLE_PROCESSOR_FALSE@am_src_processor_cfi_frame_info_unittest_OBJECTS = src/processor/src_processor_cfi_frame_info_unittest-cfi_frame_info_unittest.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/testing/gtest/src/src_processor_cfi_frame_info_unittest-gtest-all.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/testing/gtest/src/src_processor_cfi_frame_info_unittest-gtest_main.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/testing/src/src_processor_cfi_frame_info_unittest-gmock-all.$(OBJEXT) - src_processor_cfi_frame_info_unittest_OBJECTS = \ - $(am_src_processor_cfi_frame_info_unittest_OBJECTS) - @DISABLE_PROCESSOR_FALSE@src_processor_cfi_frame_info_unittest_DEPENDENCIES = \ - @DISABLE_PROCESSOR_FALSE@ src/common/module.o \ -+@DISABLE_PROCESSOR_FALSE@ src/common/unique_string.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o \ - @DISABLE_PROCESSOR_FALSE@ $(am__DEPENDENCIES_1) \ - @DISABLE_PROCESSOR_FALSE@ $(am__DEPENDENCIES_1) - am__src_processor_contained_range_map_unittest_SOURCES_DIST = \ - src/processor/contained_range_map_unittest.cc - @DISABLE_PROCESSOR_FALSE@am_src_processor_contained_range_map_unittest_OBJECTS = src/processor/contained_range_map_unittest.$(OBJEXT) -@@ -713,16 +719,17 @@ - @DISABLE_PROCESSOR_FALSE@am_src_processor_exploitability_unittest_OBJECTS = src/processor/src_processor_exploitability_unittest-exploitability_unittest.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/testing/gtest/src/src_processor_exploitability_unittest-gtest-all.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/testing/gtest/src/src_processor_exploitability_unittest-gtest_main.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/testing/src/src_processor_exploitability_unittest-gmock-all.$(OBJEXT) - src_processor_exploitability_unittest_OBJECTS = \ - $(am_src_processor_exploitability_unittest_OBJECTS) - @DISABLE_PROCESSOR_FALSE@src_processor_exploitability_unittest_DEPENDENCIES = \ - @DISABLE_PROCESSOR_FALSE@ src/common/module.o \ -+@DISABLE_PROCESSOR_FALSE@ src/common/unique_string.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/minidump_processor.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/process_state.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/disassembler_x86.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/exploitability.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/exploitability_win.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_code_modules.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/call_stack.o \ -@@ -748,16 +755,17 @@ - src/testing/gtest/src/gtest-all.cc \ - src/testing/src/gmock-all.cc - @DISABLE_PROCESSOR_FALSE@am_src_processor_fast_source_line_resolver_unittest_OBJECTS = src/processor/src_processor_fast_source_line_resolver_unittest-fast_source_line_resolver_unittest.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/testing/gtest/src/src_processor_fast_source_line_resolver_unittest-gtest-all.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/testing/src/src_processor_fast_source_line_resolver_unittest-gmock-all.$(OBJEXT) - src_processor_fast_source_line_resolver_unittest_OBJECTS = $(am_src_processor_fast_source_line_resolver_unittest_OBJECTS) - @DISABLE_PROCESSOR_FALSE@src_processor_fast_source_line_resolver_unittest_DEPENDENCIES = \ - @DISABLE_PROCESSOR_FALSE@ src/common/module.o \ -+@DISABLE_PROCESSOR_FALSE@ src/common/unique_string.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/fast_source_line_resolver.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/module_comparer.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/module_serializer.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/source_line_resolver_base.o \ -@@ -794,16 +802,17 @@ - src/testing/src/gmock-all.cc - @DISABLE_PROCESSOR_FALSE@am_src_processor_minidump_processor_unittest_OBJECTS = src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/testing/gtest/src/src_processor_minidump_processor_unittest-gtest-all.$(OBJEXT) \ - @DISABLE_PROCESSOR_FALSE@ src/testing/src/src_processor_minidump_processor_unittest-gmock-all.$(OBJEXT) - src_processor_minidump_processor_unittest_OBJECTS = \ - $(am_src_processor_minidump_processor_unittest_OBJECTS) - @DISABLE_PROCESSOR_FALSE@src_processor_minidump_processor_unittest_DEPENDENCIES = \ - @DISABLE_PROCESSOR_FALSE@ src/common/module.o \ -+@DISABLE_PROCESSOR_FALSE@ src/common/unique_string.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_code_modules.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/call_stack.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/disassembler_x86.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/exploitability.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/exploitability_win.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \ -@@ -826,16 +835,17 @@ - @DISABLE_PROCESSOR_FALSE@ $(am__DEPENDENCIES_1) - am__src_processor_minidump_stackwalk_SOURCES_DIST = \ - src/processor/minidump_stackwalk.cc - @DISABLE_PROCESSOR_FALSE@am_src_processor_minidump_stackwalk_OBJECTS = src/processor/minidump_stackwalk.$(OBJEXT) - src_processor_minidump_stackwalk_OBJECTS = \ - $(am_src_processor_minidump_stackwalk_OBJECTS) - @DISABLE_PROCESSOR_FALSE@src_processor_minidump_stackwalk_DEPENDENCIES = \ - @DISABLE_PROCESSOR_FALSE@ src/common/module.o \ -+@DISABLE_PROCESSOR_FALSE@ src/common/unique_string.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_code_modules.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/binarystream.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/call_stack.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/disassembler_x86.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/exploitability.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/exploitability_win.o \ -@@ -889,16 +899,17 @@ - @DISABLE_PROCESSOR_FALSE@ $(am__DEPENDENCIES_1) - am__src_processor_postfix_evaluator_unittest_SOURCES_DIST = \ - src/processor/postfix_evaluator_unittest.cc - @DISABLE_PROCESSOR_FALSE@am_src_processor_postfix_evaluator_unittest_OBJECTS = src/processor/postfix_evaluator_unittest.$(OBJEXT) - src_processor_postfix_evaluator_unittest_OBJECTS = \ - $(am_src_processor_postfix_evaluator_unittest_OBJECTS) - @DISABLE_PROCESSOR_FALSE@src_processor_postfix_evaluator_unittest_DEPENDENCIES = \ - @DISABLE_PROCESSOR_FALSE@ src/common/module.o \ -+@DISABLE_PROCESSOR_FALSE@ src/common/unique_string.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o \ - @DISABLE_PROCESSOR_FALSE@ $(am__DEPENDENCIES_1) \ - @DISABLE_PROCESSOR_FALSE@ $(am__DEPENDENCIES_1) - am__src_processor_range_map_unittest_SOURCES_DIST = \ - src/processor/range_map_unittest.cc - @DISABLE_PROCESSOR_FALSE@am_src_processor_range_map_unittest_OBJECTS = src/processor/range_map_unittest.$(OBJEXT) - src_processor_range_map_unittest_OBJECTS = \ -@@ -1069,33 +1080,35 @@ - src_tools_linux_core2md_core2md_OBJECTS = \ - $(am_src_tools_linux_core2md_core2md_OBJECTS) - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@src_tools_linux_core2md_core2md_DEPENDENCIES = src/client/linux/libbreakpad_client.a - am__src_tools_linux_dump_syms_dump_syms_SOURCES_DIST = \ - src/common/dwarf_cfi_to_module.cc \ - src/common/dwarf_cu_to_module.cc \ - src/common/dwarf_line_to_module.cc src/common/language.cc \ - src/common/module.cc src/common/stabs_reader.cc \ -- src/common/stabs_to_module.cc src/common/dwarf/bytereader.cc \ -+ src/common/stabs_to_module.cc src/common/unique_string.cc \ -+ src/common/dwarf/bytereader.cc \ - src/common/dwarf/dwarf2diehandler.cc \ - src/common/dwarf/dwarf2reader.cc \ - src/common/linux/dump_symbols.cc \ - src/common/linux/elf_symbols_to_module.cc \ - src/common/linux/elfutils.cc src/common/linux/file_id.cc \ - src/common/linux/linux_libc_support.cc \ - src/common/linux/memory_mapped_file.cc \ - src/common/linux/safe_readlink.cc \ - src/tools/linux/dump_syms/dump_syms.cc - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@am_src_tools_linux_dump_syms_dump_syms_OBJECTS = src/common/dwarf_cfi_to_module.$(OBJEXT) \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/dwarf_cu_to_module.$(OBJEXT) \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/dwarf_line_to_module.$(OBJEXT) \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/language.$(OBJEXT) \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/module.$(OBJEXT) \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/stabs_reader.$(OBJEXT) \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/stabs_to_module.$(OBJEXT) \ -+@DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/unique_string.$(OBJEXT) \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/dwarf/bytereader.$(OBJEXT) \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/dwarf/dwarf2diehandler.$(OBJEXT) \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/dwarf/dwarf2reader.$(OBJEXT) \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/linux/dump_symbols.$(OBJEXT) \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/linux/elf_symbols_to_module.$(OBJEXT) \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/linux/elfutils.$(OBJEXT) \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/linux/file_id.$(OBJEXT) \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/linux/linux_libc_support.$(OBJEXT) \ -@@ -1416,16 +1429,17 @@ - @DISABLE_PROCESSOR_FALSE@ src/google_breakpad/processor/source_line_resolver_interface.h \ - @DISABLE_PROCESSOR_FALSE@ src/google_breakpad/processor/stack_frame.h \ - @DISABLE_PROCESSOR_FALSE@ src/google_breakpad/processor/stack_frame_cpu.h \ - @DISABLE_PROCESSOR_FALSE@ src/google_breakpad/processor/stack_frame_symbolizer.h \ - @DISABLE_PROCESSOR_FALSE@ src/google_breakpad/processor/stackwalker.h \ - @DISABLE_PROCESSOR_FALSE@ src/google_breakpad/processor/symbol_supplier.h \ - @DISABLE_PROCESSOR_FALSE@ src/google_breakpad/processor/system_info.h \ - @DISABLE_PROCESSOR_FALSE@ src/common/module.cc \ -+@DISABLE_PROCESSOR_FALSE@ src/common/unique_string.cc \ - @DISABLE_PROCESSOR_FALSE@ src/processor/address_map-inl.h \ - @DISABLE_PROCESSOR_FALSE@ src/processor/address_map.h \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_code_module.h \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_code_modules.cc \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_code_modules.h \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver_types.h \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.cc \ - @DISABLE_PROCESSOR_FALSE@ src/processor/binarystream.h \ -@@ -1618,16 +1632,17 @@ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@src_tools_linux_dump_syms_dump_syms_SOURCES = \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/dwarf_cfi_to_module.cc \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/dwarf_cu_to_module.cc \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/dwarf_line_to_module.cc \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/language.cc \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/module.cc \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/stabs_reader.cc \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/stabs_to_module.cc \ -+@DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/unique_string.cc \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/dwarf/bytereader.cc \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/dwarf/dwarf2diehandler.cc \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/dwarf/dwarf2reader.cc \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/linux/dump_symbols.cc \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/linux/elf_symbols_to_module.cc \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/linux/elfutils.cc \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/linux/file_id.cc \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/linux/linux_libc_support.cc \ -@@ -1661,16 +1676,17 @@ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/memory_range_unittest.cc \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/module.cc \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/module_unittest.cc \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/stabs_reader.cc \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/stabs_reader_unittest.cc \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/stabs_to_module.cc \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/stabs_to_module_unittest.cc \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/test_assembler.cc \ -+@DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/unique_string.cc \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/dwarf/bytereader.cc \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/dwarf/bytereader_unittest.cc \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/dwarf/cfi_assembler.cc \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/dwarf/dwarf2diehandler.cc \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/dwarf/dwarf2diehandler_unittest.cc \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/dwarf/dwarf2reader.cc \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/dwarf/dwarf2reader_cfi_unittest.cc \ - @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/dwarf/dwarf2reader_die_unittest.cc \ -@@ -1753,32 +1769,34 @@ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/include \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/gtest/include \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/gtest \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing - - @DISABLE_PROCESSOR_FALSE@src_processor_basic_source_line_resolver_unittest_LDADD = \ - @DISABLE_PROCESSOR_FALSE@ src/common/module.o \ -+@DISABLE_PROCESSOR_FALSE@ src/common/unique_string.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/source_line_resolver_base.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/tokenize.o \ - @DISABLE_PROCESSOR_FALSE@ $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) - - @DISABLE_PROCESSOR_FALSE@src_processor_cfi_frame_info_unittest_SOURCES = \ - @DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info_unittest.cc \ - @DISABLE_PROCESSOR_FALSE@ src/testing/gtest/src/gtest-all.cc \ - @DISABLE_PROCESSOR_FALSE@ src/testing/gtest/src/gtest_main.cc \ - @DISABLE_PROCESSOR_FALSE@ src/testing/src/gmock-all.cc - - @DISABLE_PROCESSOR_FALSE@src_processor_cfi_frame_info_unittest_LDADD = \ - @DISABLE_PROCESSOR_FALSE@ src/common/module.o \ -+@DISABLE_PROCESSOR_FALSE@ src/common/unique_string.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o \ - @DISABLE_PROCESSOR_FALSE@ $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) - - @DISABLE_PROCESSOR_FALSE@src_processor_cfi_frame_info_unittest_CPPFLAGS = \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/include \ -@@ -1803,16 +1821,17 @@ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/include \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/gtest/include \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/gtest \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing - - @DISABLE_PROCESSOR_FALSE@src_processor_exploitability_unittest_LDADD = \ - @DISABLE_PROCESSOR_FALSE@ src/common/module.o \ -+@DISABLE_PROCESSOR_FALSE@ src/common/unique_string.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/minidump_processor.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/process_state.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/disassembler_x86.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/exploitability.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/exploitability_win.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_code_modules.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/call_stack.o \ -@@ -1860,16 +1879,17 @@ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/include \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/gtest/include \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/gtest \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing - - @DISABLE_PROCESSOR_FALSE@src_processor_fast_source_line_resolver_unittest_LDADD = \ - @DISABLE_PROCESSOR_FALSE@ src/common/module.o \ -+@DISABLE_PROCESSOR_FALSE@ src/common/unique_string.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/fast_source_line_resolver.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/module_comparer.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/module_serializer.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/source_line_resolver_base.o \ -@@ -1902,16 +1922,17 @@ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/include \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/gtest/include \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing/gtest \ - @DISABLE_PROCESSOR_FALSE@ -I$(top_srcdir)/src/testing - - @DISABLE_PROCESSOR_FALSE@src_processor_minidump_processor_unittest_LDADD = \ - @DISABLE_PROCESSOR_FALSE@ src/common/module.o \ -+@DISABLE_PROCESSOR_FALSE@ src/common/unique_string.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_code_modules.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/call_stack.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/disassembler_x86.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/exploitability.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/exploitability_win.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \ -@@ -2029,16 +2050,17 @@ - @DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o \ - @DISABLE_PROCESSOR_FALSE@ $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) - - @DISABLE_PROCESSOR_FALSE@src_processor_postfix_evaluator_unittest_SOURCES = \ - @DISABLE_PROCESSOR_FALSE@ src/processor/postfix_evaluator_unittest.cc - - @DISABLE_PROCESSOR_FALSE@src_processor_postfix_evaluator_unittest_LDADD = \ - @DISABLE_PROCESSOR_FALSE@ src/common/module.o \ -+@DISABLE_PROCESSOR_FALSE@ src/common/unique_string.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/logging.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o \ - @DISABLE_PROCESSOR_FALSE@ $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) - - @DISABLE_PROCESSOR_FALSE@src_processor_range_map_unittest_SOURCES = \ - @DISABLE_PROCESSOR_FALSE@ src/processor/range_map_unittest.cc - - @DISABLE_PROCESSOR_FALSE@src_processor_range_map_unittest_LDADD = \ -@@ -2169,16 +2191,17 @@ - @DISABLE_PROCESSOR_FALSE@ src/processor/minidump.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o - - @DISABLE_PROCESSOR_FALSE@src_processor_minidump_stackwalk_SOURCES = \ - @DISABLE_PROCESSOR_FALSE@ src/processor/minidump_stackwalk.cc - - @DISABLE_PROCESSOR_FALSE@src_processor_minidump_stackwalk_LDADD = \ - @DISABLE_PROCESSOR_FALSE@ src/common/module.o \ -+@DISABLE_PROCESSOR_FALSE@ src/common/unique_string.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_code_modules.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/basic_source_line_resolver.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/binarystream.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/call_stack.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/cfi_frame_info.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/disassembler_x86.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/exploitability.o \ - @DISABLE_PROCESSOR_FALSE@ src/processor/exploitability_win.o \ -@@ -2527,16 +2550,18 @@ - @$(MKDIR_P) src/client/linux - @: > src/client/linux/$(am__dirstamp) - src/client/linux/libbreakpad_client.a: $(src_client_linux_libbreakpad_client_a_OBJECTS) $(src_client_linux_libbreakpad_client_a_DEPENDENCIES) $(EXTRA_src_client_linux_libbreakpad_client_a_DEPENDENCIES) src/client/linux/$(am__dirstamp) - -rm -f src/client/linux/libbreakpad_client.a - $(src_client_linux_libbreakpad_client_a_AR) src/client/linux/libbreakpad_client.a $(src_client_linux_libbreakpad_client_a_OBJECTS) $(src_client_linux_libbreakpad_client_a_LIBADD) - $(RANLIB) src/client/linux/libbreakpad_client.a - src/common/module.$(OBJEXT): src/common/$(am__dirstamp) \ - src/common/$(DEPDIR)/$(am__dirstamp) -+src/common/unique_string.$(OBJEXT): src/common/$(am__dirstamp) \ -+ src/common/$(DEPDIR)/$(am__dirstamp) - src/processor/$(am__dirstamp): - @$(MKDIR_P) src/processor - @: > src/processor/$(am__dirstamp) - src/processor/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/processor/$(DEPDIR) - @: > src/processor/$(DEPDIR)/$(am__dirstamp) - src/processor/basic_code_modules.$(OBJEXT): \ - src/processor/$(am__dirstamp) \ -@@ -2863,16 +2888,19 @@ - src/common/$(am__dirstamp) \ - src/common/$(DEPDIR)/$(am__dirstamp) - src/common/src_common_dumper_unittest-stabs_to_module_unittest.$(OBJEXT): \ - src/common/$(am__dirstamp) \ - src/common/$(DEPDIR)/$(am__dirstamp) - src/common/src_common_dumper_unittest-test_assembler.$(OBJEXT): \ - src/common/$(am__dirstamp) \ - src/common/$(DEPDIR)/$(am__dirstamp) -+src/common/src_common_dumper_unittest-unique_string.$(OBJEXT): \ -+ src/common/$(am__dirstamp) \ -+ src/common/$(DEPDIR)/$(am__dirstamp) - src/common/dwarf/$(am__dirstamp): - @$(MKDIR_P) src/common/dwarf - @: > src/common/dwarf/$(am__dirstamp) - src/common/dwarf/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) src/common/dwarf/$(DEPDIR) - @: > src/common/dwarf/$(DEPDIR)/$(am__dirstamp) - src/common/dwarf/src_common_dumper_unittest-bytereader.$(OBJEXT): \ - src/common/dwarf/$(am__dirstamp) \ -@@ -3470,28 +3498,30 @@ - -rm -f src/common/src_common_dumper_unittest-memory_range_unittest.$(OBJEXT) - -rm -f src/common/src_common_dumper_unittest-module.$(OBJEXT) - -rm -f src/common/src_common_dumper_unittest-module_unittest.$(OBJEXT) - -rm -f src/common/src_common_dumper_unittest-stabs_reader.$(OBJEXT) - -rm -f src/common/src_common_dumper_unittest-stabs_reader_unittest.$(OBJEXT) - -rm -f src/common/src_common_dumper_unittest-stabs_to_module.$(OBJEXT) - -rm -f src/common/src_common_dumper_unittest-stabs_to_module_unittest.$(OBJEXT) - -rm -f src/common/src_common_dumper_unittest-test_assembler.$(OBJEXT) -+ -rm -f src/common/src_common_dumper_unittest-unique_string.$(OBJEXT) - -rm -f src/common/src_common_test_assembler_unittest-test_assembler.$(OBJEXT) - -rm -f src/common/src_common_test_assembler_unittest-test_assembler_unittest.$(OBJEXT) - -rm -f src/common/src_processor_minidump_unittest-test_assembler.$(OBJEXT) - -rm -f src/common/src_processor_stackwalker_amd64_unittest-test_assembler.$(OBJEXT) - -rm -f src/common/src_processor_stackwalker_arm_unittest-test_assembler.$(OBJEXT) - -rm -f src/common/src_processor_stackwalker_x86_unittest-test_assembler.$(OBJEXT) - -rm -f src/common/src_processor_synth_minidump_unittest-test_assembler.$(OBJEXT) - -rm -f src/common/stabs_reader.$(OBJEXT) - -rm -f src/common/stabs_to_module.$(OBJEXT) - -rm -f src/common/string_conversion.$(OBJEXT) - -rm -f src/common/tests/src_client_linux_linux_client_unittest_shlib-file_utils.$(OBJEXT) - -rm -f src/common/tests/src_common_dumper_unittest-file_utils.$(OBJEXT) -+ -rm -f src/common/unique_string.$(OBJEXT) - -rm -f src/processor/address_map_unittest.$(OBJEXT) - -rm -f src/processor/basic_code_modules.$(OBJEXT) - -rm -f src/processor/basic_source_line_resolver.$(OBJEXT) - -rm -f src/processor/binarystream.$(OBJEXT) - -rm -f src/processor/call_stack.$(OBJEXT) - -rm -f src/processor/cfi_frame_info.$(OBJEXT) - -rm -f src/processor/contained_range_map_unittest.$(OBJEXT) - -rm -f src/processor/disassembler_x86.$(OBJEXT) -@@ -3663,26 +3693,28 @@ - @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_dumper_unittest-memory_range_unittest.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_dumper_unittest-module.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_dumper_unittest-module_unittest.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_dumper_unittest-stabs_reader.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_dumper_unittest-stabs_reader_unittest.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_dumper_unittest-stabs_to_module.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_dumper_unittest-stabs_to_module_unittest.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_dumper_unittest-test_assembler.Po@am__quote@ -+@AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_dumper_unittest-unique_string.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_test_assembler_unittest-test_assembler.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_test_assembler_unittest-test_assembler_unittest.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_processor_minidump_unittest-test_assembler.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_processor_stackwalker_amd64_unittest-test_assembler.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_processor_stackwalker_arm_unittest-test_assembler.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_processor_stackwalker_x86_unittest-test_assembler.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_processor_synth_minidump_unittest-test_assembler.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/stabs_reader.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/stabs_to_module.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/string_conversion.Po@am__quote@ -+@AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/unique_string.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@src/common/android/$(DEPDIR)/breakpad_getcontext.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@src/common/android/$(DEPDIR)/src_client_linux_linux_client_unittest_shlib-breakpad_getcontext.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@src/common/android/$(DEPDIR)/src_client_linux_linux_client_unittest_shlib-breakpad_getcontext_unittest.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@src/common/dwarf/$(DEPDIR)/bytereader.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@src/common/dwarf/$(DEPDIR)/dwarf2diehandler.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@src/common/dwarf/$(DEPDIR)/dwarf2reader.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@src/common/dwarf/$(DEPDIR)/src_common_dumper_unittest-bytereader.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@src/common/dwarf/$(DEPDIR)/src_common_dumper_unittest-bytereader_unittest.Po@am__quote@ -@@ -4474,16 +4506,30 @@ - - src/common/src_common_dumper_unittest-test_assembler.obj: src/common/test_assembler.cc - @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_dumper_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/common/src_common_dumper_unittest-test_assembler.obj -MD -MP -MF src/common/$(DEPDIR)/src_common_dumper_unittest-test_assembler.Tpo -c -o src/common/src_common_dumper_unittest-test_assembler.obj `if test -f 'src/common/test_assembler.cc'; then $(CYGPATH_W) 'src/common/test_assembler.cc'; else $(CYGPATH_W) '$(srcdir)/src/common/test_assembler.cc'; fi` - @am__fastdepCXX_TRUE@ $(am__mv) src/common/$(DEPDIR)/src_common_dumper_unittest-test_assembler.Tpo src/common/$(DEPDIR)/src_common_dumper_unittest-test_assembler.Po - @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/common/test_assembler.cc' object='src/common/src_common_dumper_unittest-test_assembler.obj' libtool=no @AMDEPBACKSLASH@ - @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ - @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_dumper_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/common/src_common_dumper_unittest-test_assembler.obj `if test -f 'src/common/test_assembler.cc'; then $(CYGPATH_W) 'src/common/test_assembler.cc'; else $(CYGPATH_W) '$(srcdir)/src/common/test_assembler.cc'; fi` - -+src/common/src_common_dumper_unittest-unique_string.o: src/common/unique_string.cc -+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_dumper_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/common/src_common_dumper_unittest-unique_string.o -MD -MP -MF src/common/$(DEPDIR)/src_common_dumper_unittest-unique_string.Tpo -c -o src/common/src_common_dumper_unittest-unique_string.o `test -f 'src/common/unique_string.cc' || echo '$(srcdir)/'`src/common/unique_string.cc -+@am__fastdepCXX_TRUE@ $(am__mv) src/common/$(DEPDIR)/src_common_dumper_unittest-unique_string.Tpo src/common/$(DEPDIR)/src_common_dumper_unittest-unique_string.Po -+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/common/unique_string.cc' object='src/common/src_common_dumper_unittest-unique_string.o' libtool=no @AMDEPBACKSLASH@ -+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_dumper_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/common/src_common_dumper_unittest-unique_string.o `test -f 'src/common/unique_string.cc' || echo '$(srcdir)/'`src/common/unique_string.cc -+ -+src/common/src_common_dumper_unittest-unique_string.obj: src/common/unique_string.cc -+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_dumper_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/common/src_common_dumper_unittest-unique_string.obj -MD -MP -MF src/common/$(DEPDIR)/src_common_dumper_unittest-unique_string.Tpo -c -o src/common/src_common_dumper_unittest-unique_string.obj `if test -f 'src/common/unique_string.cc'; then $(CYGPATH_W) 'src/common/unique_string.cc'; else $(CYGPATH_W) '$(srcdir)/src/common/unique_string.cc'; fi` -+@am__fastdepCXX_TRUE@ $(am__mv) src/common/$(DEPDIR)/src_common_dumper_unittest-unique_string.Tpo src/common/$(DEPDIR)/src_common_dumper_unittest-unique_string.Po -+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/common/unique_string.cc' object='src/common/src_common_dumper_unittest-unique_string.obj' libtool=no @AMDEPBACKSLASH@ -+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_dumper_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/common/src_common_dumper_unittest-unique_string.obj `if test -f 'src/common/unique_string.cc'; then $(CYGPATH_W) 'src/common/unique_string.cc'; else $(CYGPATH_W) '$(srcdir)/src/common/unique_string.cc'; fi` -+ - src/common/dwarf/src_common_dumper_unittest-bytereader.o: src/common/dwarf/bytereader.cc - @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_dumper_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/common/dwarf/src_common_dumper_unittest-bytereader.o -MD -MP -MF src/common/dwarf/$(DEPDIR)/src_common_dumper_unittest-bytereader.Tpo -c -o src/common/dwarf/src_common_dumper_unittest-bytereader.o `test -f 'src/common/dwarf/bytereader.cc' || echo '$(srcdir)/'`src/common/dwarf/bytereader.cc - @am__fastdepCXX_TRUE@ $(am__mv) src/common/dwarf/$(DEPDIR)/src_common_dumper_unittest-bytereader.Tpo src/common/dwarf/$(DEPDIR)/src_common_dumper_unittest-bytereader.Po - @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/common/dwarf/bytereader.cc' object='src/common/dwarf/src_common_dumper_unittest-bytereader.o' libtool=no @AMDEPBACKSLASH@ - @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ - @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_dumper_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/common/dwarf/src_common_dumper_unittest-bytereader.o `test -f 'src/common/dwarf/bytereader.cc' || echo '$(srcdir)/'`src/common/dwarf/bytereader.cc - - src/common/dwarf/src_common_dumper_unittest-bytereader.obj: src/common/dwarf/bytereader.cc -diff --git a/src/common/dwarf_cfi_to_module.cc b/src/common/dwarf_cfi_to_module.cc ---- a/src/common/dwarf_cfi_to_module.cc -+++ b/src/common/dwarf_cfi_to_module.cc -@@ -37,40 +37,44 @@ - #include - - #include "common/dwarf_cfi_to_module.h" - - namespace google_breakpad { - - using std::ostringstream; - --vector DwarfCFIToModule::RegisterNames::MakeVector( -- const char * const *strings, -+vector DwarfCFIToModule::RegisterNames::MakeVector( -+ const char* const* strings, - size_t size) { -- vector names(strings, strings + size); -+ vector names(size, NULL); -+ for (size_t i = 0; i < size; ++i) { -+ names[i] = ToUniqueString(strings[i]); -+ } -+ - return names; - } - --vector DwarfCFIToModule::RegisterNames::I386() { -+vector DwarfCFIToModule::RegisterNames::I386() { - static const char *const names[] = { - "$eax", "$ecx", "$edx", "$ebx", "$esp", "$ebp", "$esi", "$edi", - "$eip", "$eflags", "$unused1", - "$st0", "$st1", "$st2", "$st3", "$st4", "$st5", "$st6", "$st7", - "$unused2", "$unused3", - "$xmm0", "$xmm1", "$xmm2", "$xmm3", "$xmm4", "$xmm5", "$xmm6", "$xmm7", - "$mm0", "$mm1", "$mm2", "$mm3", "$mm4", "$mm5", "$mm6", "$mm7", - "$fcw", "$fsw", "$mxcsr", - "$es", "$cs", "$ss", "$ds", "$fs", "$gs", "$unused4", "$unused5", - "$tr", "$ldtr" - }; - - return MakeVector(names, sizeof(names) / sizeof(names[0])); - } - --vector DwarfCFIToModule::RegisterNames::X86_64() { -+vector DwarfCFIToModule::RegisterNames::X86_64() { - static const char *const names[] = { - "$rax", "$rdx", "$rcx", "$rbx", "$rsi", "$rdi", "$rbp", "$rsp", - "$r8", "$r9", "$r10", "$r11", "$r12", "$r13", "$r14", "$r15", - "$rip", - "$xmm0","$xmm1","$xmm2", "$xmm3", "$xmm4", "$xmm5", "$xmm6", "$xmm7", - "$xmm8","$xmm9","$xmm10","$xmm11","$xmm12","$xmm13","$xmm14","$xmm15", - "$st0", "$st1", "$st2", "$st3", "$st4", "$st5", "$st6", "$st7", - "$mm0", "$mm1", "$mm2", "$mm3", "$mm4", "$mm5", "$mm6", "$mm7", -@@ -80,17 +84,17 @@ - "$tr", "$ldtr", - "$mxcsr", "$fcw", "$fsw" - }; - - return MakeVector(names, sizeof(names) / sizeof(names[0])); - } - - // Per ARM IHI 0040A, section 3.1 --vector DwarfCFIToModule::RegisterNames::ARM() { -+vector DwarfCFIToModule::RegisterNames::ARM() { - static const char *const names[] = { - "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", - "r8", "r9", "r10", "r11", "r12", "sp", "lr", "pc", - "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", - "fps", "cpsr", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", -@@ -122,40 +126,40 @@ - return_address_ = return_address; - - // Breakpad STACK CFI records must provide a .ra rule, but DWARF CFI - // may not establish any rule for .ra if the return address column - // is an ordinary register, and that register holds the return - // address on entry to the function. So establish an initial .ra - // rule citing the return address register. - if (return_address_ < register_names_.size()) -- entry_->initial_rules[ra_name_] -+ entry_->initial_rules[ustr__ZDra()] - = Module::Expr(register_names_[return_address_], 0, false); - - return true; - } - --string DwarfCFIToModule::RegisterName(int i) { -+const UniqueString* DwarfCFIToModule::RegisterName(int i) { - assert(entry_); - if (i < 0) { - assert(i == kCFARegister); -- return cfa_name_; -+ return ustr__ZDcfa(); - } - unsigned reg = i; - if (reg == return_address_) -- return ra_name_; -+ return ustr__ZDra(); - - // Ensure that a non-empty name exists for this register value. -- if (reg < register_names_.size() && !register_names_[reg].empty()) -+ if (reg < register_names_.size() && register_names_[reg] != ustr__empty()) - return register_names_[reg]; - - reporter_->UnnamedRegister(entry_offset_, reg); - char buf[30]; - sprintf(buf, "unnamed_register%u", reg); -- return buf; -+ return ToUniqueString(buf); - } - - void DwarfCFIToModule::Record(Module::Address address, int reg, - const Module::Expr &rule) { - assert(entry_); - - // Is this one of this entry's initial rules? - if (address == entry_->address) -@@ -228,28 +232,30 @@ - - void DwarfCFIToModule::Reporter::UnnamedRegister(size_t offset, int reg) { - fprintf(stderr, "%s, section '%s': " - "the call frame entry at offset 0x%zx refers to register %d," - " whose name we don't know\n", - file_.c_str(), section_.c_str(), offset, reg); - } - --void DwarfCFIToModule::Reporter::UndefinedNotSupported(size_t offset, -- const string ®) { -+void DwarfCFIToModule::Reporter::UndefinedNotSupported( -+ size_t offset, -+ const UniqueString* reg) { - fprintf(stderr, "%s, section '%s': " - "the call frame entry at offset 0x%zx sets the rule for " - "register '%s' to 'undefined', but the Breakpad symbol file format" - " cannot express this\n", -- file_.c_str(), section_.c_str(), offset, reg.c_str()); -+ file_.c_str(), section_.c_str(), offset, FromUniqueString(reg)); - } - --void DwarfCFIToModule::Reporter::ExpressionsNotSupported(size_t offset, -- const string ®) { -+void DwarfCFIToModule::Reporter::ExpressionsNotSupported( -+ size_t offset, -+ const UniqueString* reg) { - fprintf(stderr, "%s, section '%s': " - "the call frame entry at offset 0x%zx uses a DWARF expression to" - " describe how to recover register '%s', " - " but this translator cannot yet translate DWARF expressions to" - " Breakpad postfix expressions\n", -- file_.c_str(), section_.c_str(), offset, reg.c_str()); -+ file_.c_str(), section_.c_str(), offset, FromUniqueString(reg)); - } - - } // namespace google_breakpad -diff --git a/src/common/dwarf_cfi_to_module.h b/src/common/dwarf_cfi_to_module.h ---- a/src/common/dwarf_cfi_to_module.h -+++ b/src/common/dwarf_cfi_to_module.h -@@ -44,16 +44,17 @@ - - #include - #include - #include - - #include "common/module.h" - #include "common/dwarf/dwarf2reader.h" - #include "common/using_std_string.h" -+#include "common/unique_string.h" - - namespace google_breakpad { - - using dwarf2reader::CallFrameInfo; - using google_breakpad::Module; - using std::set; - using std::vector; - -@@ -78,61 +79,65 @@ - // The DWARF CFI entry at OFFSET cites register REG, but REG is not - // covered by the vector of register names passed to the - // DwarfCFIToModule constructor, nor does it match the return - // address column number for this entry. - virtual void UnnamedRegister(size_t offset, int reg); - - // The DWARF CFI entry at OFFSET says that REG is undefined, but the - // Breakpad symbol file format cannot express this. -- virtual void UndefinedNotSupported(size_t offset, const string ®); -+ virtual void UndefinedNotSupported(size_t offset, -+ const UniqueString* reg); - - // The DWARF CFI entry at OFFSET says that REG uses a DWARF - // expression to find its value, but DwarfCFIToModule is not - // capable of translating DWARF expressions to Breakpad postfix - // expressions. -- virtual void ExpressionsNotSupported(size_t offset, const string ®); -+ virtual void ExpressionsNotSupported(size_t offset, -+ const UniqueString* reg); - - protected: - string file_, section_; - }; - - // Register name tables. If TABLE is a vector returned by one of these - // functions, then TABLE[R] is the name of the register numbered R in - // DWARF call frame information. - class RegisterNames { - public: - // Intel's "x86" or IA-32. -- static vector I386(); -+ static vector I386(); - - // AMD x86_64, AMD64, Intel EM64T, or Intel 64 -- static vector X86_64(); -+ static vector X86_64(); - - // ARM. -- static vector ARM(); -+ static vector ARM(); - - private: - // Given STRINGS, an array of C strings with SIZE elements, return an - // equivalent vector. -- static vector MakeVector(const char * const *strings, size_t size); -+ static vector MakeVector(const char * const *strings, -+ size_t size); - }; - - // Create a handler for the dwarf2reader::CallFrameInfo parser that - // records the stack unwinding information it receives in MODULE. - // - // Use REGISTER_NAMES[I] as the name of register number I; *this - // keeps a reference to the vector, so the vector should remain - // alive for as long as the DwarfCFIToModule does. - // - // Use REPORTER for reporting problems encountered in the conversion - // process. -- DwarfCFIToModule(Module *module, const vector ®ister_names, -+ DwarfCFIToModule(Module *module, -+ const vector ®ister_names, - Reporter *reporter) - : module_(module), register_names_(register_names), reporter_(reporter), -- entry_(NULL), return_address_(-1), cfa_name_(".cfa"), ra_name_(".ra") { -+ entry_(NULL), return_address_(-1) { - } - virtual ~DwarfCFIToModule() { delete entry_; } - - virtual bool Entry(size_t offset, uint64 address, uint64 length, - uint8 version, const string &augmentation, - unsigned return_address); - virtual bool UndefinedRule(uint64 address, int reg); - virtual bool SameValueRule(uint64 address, int reg); -@@ -144,53 +149,36 @@ - virtual bool ExpressionRule(uint64 address, int reg, - const string &expression); - virtual bool ValExpressionRule(uint64 address, int reg, - const string &expression); - virtual bool End(); - - private: - // Return the name to use for register REG. -- string RegisterName(int i); -+ const UniqueString* RegisterName(int i); - - // Record RULE for register REG at ADDRESS. - void Record(Module::Address address, int reg, const Module::Expr &rule); - - // The module to which we should add entries. - Module *module_; - - // Map from register numbers to register names. -- const vector ®ister_names_; -+ const vector ®ister_names_; - - // The reporter to use to report problems. - Reporter *reporter_; - - // The current entry we're constructing. - Module::StackFrameEntry *entry_; - - // The section offset of the current frame description entry, for - // use in error messages. - size_t entry_offset_; - - // The return address column for that entry. - unsigned return_address_; -- -- // The names of the return address and canonical frame address. Putting -- // these here instead of using string literals allows us to share their -- // texts in reference-counted std::string implementations (all the -- // popular ones). Many, many rules cite these strings. -- string cfa_name_, ra_name_; -- -- // A set of strings used by this CFI. Before storing a string in one of -- // our data structures, insert it into this set, and then use the string -- // from the set. -- // -- // Because std::string uses reference counting internally, simply using -- // strings from this set, even if passed by value, assigned, or held -- // directly in structures and containers (map, for example), -- // causes those strings to share a single instance of each distinct piece -- // of text. -- set common_strings_; - }; - - } // namespace google_breakpad - - #endif // COMMON_LINUX_DWARF_CFI_TO_MODULE_H -diff --git a/src/common/dwarf_cfi_to_module_unittest.cc b/src/common/dwarf_cfi_to_module_unittest.cc ---- a/src/common/dwarf_cfi_to_module_unittest.cc -+++ b/src/common/dwarf_cfi_to_module_unittest.cc -@@ -37,52 +37,59 @@ - #include "breakpad_googletest_includes.h" - #include "common/dwarf_cfi_to_module.h" - #include "common/using_std_string.h" - - using std::vector; - - using google_breakpad::Module; - using google_breakpad::DwarfCFIToModule; -+using google_breakpad::ToUniqueString; -+using google_breakpad::UniqueString; -+using google_breakpad::ustr__ZDcfa; -+using google_breakpad::ustr__ZDra; -+using google_breakpad::ustr__empty; - using testing::ContainerEq; - using testing::Test; - using testing::_; - - struct MockCFIReporter: public DwarfCFIToModule::Reporter { - MockCFIReporter(const string &file, const string §ion) - : Reporter(file, section) { } - MOCK_METHOD2(UnnamedRegister, void(size_t offset, int reg)); -- MOCK_METHOD2(UndefinedNotSupported, void(size_t offset, const string ®)); -- MOCK_METHOD2(ExpressionsNotSupported, void(size_t offset, const string ®)); -+ MOCK_METHOD2(UndefinedNotSupported, void(size_t offset, -+ const UniqueString* reg)); -+ MOCK_METHOD2(ExpressionsNotSupported, void(size_t offset, -+ const UniqueString* reg)); - }; - - struct DwarfCFIToModuleFixture { - DwarfCFIToModuleFixture() - : module("module name", "module os", "module arch", "module id"), - reporter("reporter file", "reporter section"), - handler(&module, register_names, &reporter) { -- register_names.push_back("reg0"); -- register_names.push_back("reg1"); -- register_names.push_back("reg2"); -- register_names.push_back("reg3"); -- register_names.push_back("reg4"); -- register_names.push_back("reg5"); -- register_names.push_back("reg6"); -- register_names.push_back("reg7"); -- register_names.push_back("sp"); -- register_names.push_back("pc"); -- register_names.push_back(""); -+ register_names.push_back(ToUniqueString("reg0")); -+ register_names.push_back(ToUniqueString("reg1")); -+ register_names.push_back(ToUniqueString("reg2")); -+ register_names.push_back(ToUniqueString("reg3")); -+ register_names.push_back(ToUniqueString("reg4")); -+ register_names.push_back(ToUniqueString("reg5")); -+ register_names.push_back(ToUniqueString("reg6")); -+ register_names.push_back(ToUniqueString("reg7")); -+ register_names.push_back(ToUniqueString("sp")); -+ register_names.push_back(ToUniqueString("pc")); -+ register_names.push_back(ustr__empty()); - - EXPECT_CALL(reporter, UnnamedRegister(_, _)).Times(0); - EXPECT_CALL(reporter, UndefinedNotSupported(_, _)).Times(0); - EXPECT_CALL(reporter, ExpressionsNotSupported(_, _)).Times(0); - } - - Module module; -- vector register_names; -+ vector register_names; - MockCFIReporter reporter; - DwarfCFIToModule handler; - vector entries; - }; - - class Entry: public DwarfCFIToModuleFixture, public Test { }; - - TEST_F(Entry, Accept) { -@@ -127,183 +134,190 @@ - } - uint64 entry_address, entry_size; - unsigned return_reg; - }; - - class Rule: public RuleFixture, public Test { }; - - TEST_F(Rule, UndefinedRule) { -- EXPECT_CALL(reporter, UndefinedNotSupported(_, "reg7")); -+ EXPECT_CALL(reporter, UndefinedNotSupported(_, ToUniqueString("reg7"))); - StartEntry(); - ASSERT_TRUE(handler.UndefinedRule(entry_address, 7)); - ASSERT_TRUE(handler.End()); - CheckEntry(); - EXPECT_EQ(0U, entries[0]->initial_rules.size()); - EXPECT_EQ(0U, entries[0]->rule_changes.size()); - } - - TEST_F(Rule, RegisterWithEmptyName) { - EXPECT_CALL(reporter, UnnamedRegister(_, 10)); -- EXPECT_CALL(reporter, UndefinedNotSupported(_, "unnamed_register10")); -+ EXPECT_CALL(reporter, -+ UndefinedNotSupported(_, ToUniqueString("unnamed_register10"))); - StartEntry(); - ASSERT_TRUE(handler.UndefinedRule(entry_address, 10)); - ASSERT_TRUE(handler.End()); - CheckEntry(); - EXPECT_EQ(0U, entries[0]->initial_rules.size()); - EXPECT_EQ(0U, entries[0]->rule_changes.size()); - } - - TEST_F(Rule, SameValueRule) { - StartEntry(); - ASSERT_TRUE(handler.SameValueRule(entry_address, 6)); - ASSERT_TRUE(handler.End()); - CheckEntry(); - Module::RuleMap expected_initial; -- expected_initial["reg6"] = Module::Expr("reg6", 0, false); -+ const UniqueString* reg6 = ToUniqueString("reg6"); -+ expected_initial[reg6] = Module::Expr(reg6, 0, false); - EXPECT_THAT(entries[0]->initial_rules, ContainerEq(expected_initial)); - EXPECT_EQ(0U, entries[0]->rule_changes.size()); - } - - TEST_F(Rule, OffsetRule) { - StartEntry(); - ASSERT_TRUE(handler.OffsetRule(entry_address + 1, return_reg, - DwarfCFIToModule::kCFARegister, - 16927065)); - ASSERT_TRUE(handler.End()); - CheckEntry(); - EXPECT_EQ(0U, entries[0]->initial_rules.size()); - Module::RuleChangeMap expected_changes; -- expected_changes[entry_address + 1][".ra"] = -- Module::Expr(".cfa", 16927065, true); -+ expected_changes[entry_address + 1][ustr__ZDra()] = -+ Module::Expr(ustr__ZDcfa(), 16927065, true); - EXPECT_THAT(entries[0]->rule_changes, ContainerEq(expected_changes)); - } - - TEST_F(Rule, OffsetRuleNegative) { - StartEntry(); - ASSERT_TRUE(handler.OffsetRule(entry_address + 1, - DwarfCFIToModule::kCFARegister, 4, -34530721)); - ASSERT_TRUE(handler.End()); - CheckEntry(); - EXPECT_EQ(0U, entries[0]->initial_rules.size()); - Module::RuleChangeMap expected_changes; -- expected_changes[entry_address + 1][".cfa"] = -- Module::Expr("reg4", -34530721, true); -+ expected_changes[entry_address + 1][ustr__ZDcfa()] = -+ Module::Expr(ToUniqueString("reg4"), -34530721, true); - EXPECT_THAT(entries[0]->rule_changes, ContainerEq(expected_changes)); - } - - TEST_F(Rule, ValOffsetRule) { - // Use an unnamed register number, to exercise that branch of RegisterName. - EXPECT_CALL(reporter, UnnamedRegister(_, 11)); - StartEntry(); - ASSERT_TRUE(handler.ValOffsetRule(entry_address + 0x5ab7, - DwarfCFIToModule::kCFARegister, - 11, 61812979)); - ASSERT_TRUE(handler.End()); - CheckEntry(); - EXPECT_EQ(0U, entries[0]->initial_rules.size()); - Module::RuleChangeMap expected_changes; -- expected_changes[entry_address + 0x5ab7][".cfa"] = -- Module::Expr("unnamed_register11", 61812979, false); -+ expected_changes[entry_address + 0x5ab7][ustr__ZDcfa()] = -+ Module::Expr(ToUniqueString("unnamed_register11"), 61812979, false); - EXPECT_THAT(entries[0]->rule_changes, ContainerEq(expected_changes)); - } - - TEST_F(Rule, RegisterRule) { - StartEntry(); - ASSERT_TRUE(handler.RegisterRule(entry_address, return_reg, 3)); - ASSERT_TRUE(handler.End()); - CheckEntry(); - Module::RuleMap expected_initial; -- expected_initial[".ra"] = Module::Expr("reg3", 0, false); -+ expected_initial[ustr__ZDra()] = -+ Module::Expr(ToUniqueString("reg3"), 0, false); - EXPECT_THAT(entries[0]->initial_rules, ContainerEq(expected_initial)); - EXPECT_EQ(0U, entries[0]->rule_changes.size()); - } - - TEST_F(Rule, ExpressionRule) { -- EXPECT_CALL(reporter, ExpressionsNotSupported(_, "reg2")); -+ EXPECT_CALL(reporter, ExpressionsNotSupported(_, ToUniqueString("reg2"))); - StartEntry(); - ASSERT_TRUE(handler.ExpressionRule(entry_address + 0xf326, 2, - "it takes two to tango")); - ASSERT_TRUE(handler.End()); - CheckEntry(); - EXPECT_EQ(0U, entries[0]->initial_rules.size()); - EXPECT_EQ(0U, entries[0]->rule_changes.size()); - } - - TEST_F(Rule, ValExpressionRule) { -- EXPECT_CALL(reporter, ExpressionsNotSupported(_, "reg0")); -+ EXPECT_CALL(reporter, ExpressionsNotSupported(_, ToUniqueString("reg0"))); - StartEntry(); - ASSERT_TRUE(handler.ValExpressionRule(entry_address + 0x6367, 0, - "bit off more than he could chew")); - ASSERT_TRUE(handler.End()); - CheckEntry(); - EXPECT_EQ(0U, entries[0]->initial_rules.size()); - EXPECT_EQ(0U, entries[0]->rule_changes.size()); - } - - TEST_F(Rule, DefaultReturnAddressRule) { - return_reg = 2; - StartEntry(); - ASSERT_TRUE(handler.RegisterRule(entry_address, 0, 1)); - ASSERT_TRUE(handler.End()); - CheckEntry(); - Module::RuleMap expected_initial; -- expected_initial[".ra"] = Module::Expr("reg2", 0, false); -- expected_initial["reg0"] = Module::Expr("reg1", 0, false); -+ expected_initial[ustr__ZDra()] = -+ Module::Expr(ToUniqueString("reg2"), 0, false); -+ expected_initial[ToUniqueString("reg0")] = -+ Module::Expr(ToUniqueString("reg1"), 0, false); - EXPECT_THAT(entries[0]->initial_rules, ContainerEq(expected_initial)); - EXPECT_EQ(0U, entries[0]->rule_changes.size()); - } - - TEST_F(Rule, DefaultReturnAddressRuleOverride) { - return_reg = 2; - StartEntry(); - ASSERT_TRUE(handler.RegisterRule(entry_address, return_reg, 1)); - ASSERT_TRUE(handler.End()); - CheckEntry(); - Module::RuleMap expected_initial; -- expected_initial[".ra"] = Module::Expr("reg1", 0, false); -+ expected_initial[ustr__ZDra()] = -+ Module::Expr(ToUniqueString("reg1"), 0, false); - EXPECT_THAT(entries[0]->initial_rules, ContainerEq(expected_initial)); - EXPECT_EQ(0U, entries[0]->rule_changes.size()); - } - - TEST_F(Rule, DefaultReturnAddressRuleLater) { - return_reg = 2; - StartEntry(); - ASSERT_TRUE(handler.RegisterRule(entry_address + 1, return_reg, 1)); - ASSERT_TRUE(handler.End()); - CheckEntry(); - Module::RuleMap expected_initial; -- expected_initial[".ra"] = Module::Expr("reg2", 0, false); -+ expected_initial[ustr__ZDra()] = -+ Module::Expr(ToUniqueString("reg2"), 0, false); - EXPECT_THAT(entries[0]->initial_rules, ContainerEq(expected_initial)); - Module::RuleChangeMap expected_changes; -- expected_changes[entry_address + 1][".ra"] = -- Module::Expr("reg1", 0, false); -+ expected_changes[entry_address + 1][ustr__ZDra()] = -+ Module::Expr(ToUniqueString("reg1"), 0, false); - EXPECT_THAT(entries[0]->rule_changes, ContainerEq(expected_changes)); - } - - TEST(RegisterNames, I386) { -- vector names = DwarfCFIToModule::RegisterNames::I386(); -+ vector names = DwarfCFIToModule::RegisterNames::I386(); - -- EXPECT_EQ("$eax", names[0]); -- EXPECT_EQ("$ecx", names[1]); -- EXPECT_EQ("$esp", names[4]); -- EXPECT_EQ("$eip", names[8]); -+ EXPECT_EQ(ToUniqueString("$eax"), names[0]); -+ EXPECT_EQ(ToUniqueString("$ecx"), names[1]); -+ EXPECT_EQ(ToUniqueString("$esp"), names[4]); -+ EXPECT_EQ(ToUniqueString("$eip"), names[8]); - } - - TEST(RegisterNames, ARM) { -- vector names = DwarfCFIToModule::RegisterNames::ARM(); -+ vector names = DwarfCFIToModule::RegisterNames::ARM(); - -- EXPECT_EQ("r0", names[0]); -- EXPECT_EQ("r10", names[10]); -- EXPECT_EQ("sp", names[13]); -- EXPECT_EQ("lr", names[14]); -- EXPECT_EQ("pc", names[15]); -+ EXPECT_EQ(ToUniqueString("r0"), names[0]); -+ EXPECT_EQ(ToUniqueString("r10"), names[10]); -+ EXPECT_EQ(ToUniqueString("sp"), names[13]); -+ EXPECT_EQ(ToUniqueString("lr"), names[14]); -+ EXPECT_EQ(ToUniqueString("pc"), names[15]); - } - - TEST(RegisterNames, X86_64) { -- vector names = DwarfCFIToModule::RegisterNames::X86_64(); -+ vector names = DwarfCFIToModule::RegisterNames::X86_64(); - -- EXPECT_EQ("$rax", names[0]); -- EXPECT_EQ("$rdx", names[1]); -- EXPECT_EQ("$rbp", names[6]); -- EXPECT_EQ("$rsp", names[7]); -- EXPECT_EQ("$rip", names[16]); -+ EXPECT_EQ(ToUniqueString("$rax"), names[0]); -+ EXPECT_EQ(ToUniqueString("$rdx"), names[1]); -+ EXPECT_EQ(ToUniqueString("$rbp"), names[6]); -+ EXPECT_EQ(ToUniqueString("$rsp"), names[7]); -+ EXPECT_EQ(ToUniqueString("$rip"), names[16]); - } -diff --git a/src/common/linux/dump_symbols.cc b/src/common/linux/dump_symbols.cc ---- a/src/common/linux/dump_symbols.cc -+++ b/src/common/linux/dump_symbols.cc -@@ -81,16 +81,17 @@ - using google_breakpad::ElfClass64; - using google_breakpad::FindElfSectionByName; - using google_breakpad::GetOffset; - using google_breakpad::IsValidElf; - using google_breakpad::Module; - #ifndef NO_STABS_SUPPORT - using google_breakpad::StabsToModule; - #endif -+using google_breakpad::UniqueString; - using google_breakpad::scoped_ptr; - - // - // FDWrapper - // - // Wrapper class to make sure opened file is closed. - // - class FDWrapper { -@@ -278,17 +279,17 @@ - - // Fill REGISTER_NAMES with the register names appropriate to the - // machine architecture given in HEADER, indexed by the register - // numbers used in DWARF call frame information. Return true on - // success, or false if HEADER's machine architecture is not - // supported. - template - bool DwarfCFIRegisterNames(const typename ElfClass::Ehdr* elf_header, -- std::vector* register_names) { -+ std::vector* register_names) { - switch (elf_header->e_machine) { - case EM_386: - *register_names = DwarfCFIToModule::RegisterNames::I386(); - return true; - case EM_ARM: - *register_names = DwarfCFIToModule::RegisterNames::ARM(); - return true; - case EM_X86_64: -@@ -306,17 +307,17 @@ - const typename ElfClass::Shdr* section, - const bool eh_frame, - const typename ElfClass::Shdr* got_section, - const typename ElfClass::Shdr* text_section, - const bool big_endian, - Module* module) { - // Find the appropriate set of register names for this file's - // architecture. -- std::vector register_names; -+ std::vector register_names; - if (!DwarfCFIRegisterNames(elf_header, ®ister_names)) { - fprintf(stderr, "%s: unrecognized ELF machine architecture '%d';" - " cannot convert DWARF call frame information\n", - dwarf_filename.c_str(), elf_header->e_machine); - return false; - } - - const dwarf2reader::Endianness endianness = big_endian ? -diff --git a/src/common/mac/dump_syms.mm b/src/common/mac/dump_syms.mm ---- a/src/common/mac/dump_syms.mm -+++ b/src/common/mac/dump_syms.mm -@@ -313,17 +313,17 @@ - } - - bool DumpSymbols::ReadCFI(google_breakpad::Module *module, - const mach_o::Reader &macho_reader, - const mach_o::Section §ion, - bool eh_frame) const { - // Find the appropriate set of register names for this file's - // architecture. -- vector register_names; -+ vector register_names; - switch (macho_reader.cpu_type()) { - case CPU_TYPE_X86: - register_names = DwarfCFIToModule::RegisterNames::I386(); - break; - case CPU_TYPE_X86_64: - register_names = DwarfCFIToModule::RegisterNames::X86_64(); - break; - case CPU_TYPE_ARM: -diff --git a/src/common/module.cc b/src/common/module.cc ---- a/src/common/module.cc -+++ b/src/common/module.cc -@@ -33,16 +33,17 @@ - - #include "common/module.h" - - #include - #include - #include - #include - -+#include - #include - #include - - namespace google_breakpad { - - using std::dec; - using std::endl; - using std::hex; -@@ -255,36 +256,50 @@ - strerror(errno)); - return false; - } - - std::ostream& operator<<(std::ostream& stream, const Module::Expr& expr) { - assert(!expr.invalid()); - switch (expr.how_) { - case Module::kExprSimple: -- stream << expr.ident_ << " " << expr.offset_ << " +"; -+ stream << FromUniqueString(expr.ident_) << " " << expr.offset_ << " +"; - break; - case Module::kExprSimpleMem: -- stream << expr.ident_ << " " << expr.offset_ << " + ^"; -+ stream << FromUniqueString(expr.ident_) << " " << expr.offset_ << " + ^"; - break; - case Module::kExprPostfix: - stream << expr.postfix_; break; - case Module::kExprInvalid: - default: - break; - } - return stream; - } - - bool Module::WriteRuleMap(const RuleMap &rule_map, std::ostream &stream) { -+ // Visit the register rules in alphabetical order. Because -+ // rule_map has the elements in some arbitrary order, -+ // get the names out into a vector, sort them, and visit in -+ // sorted order. -+ std::vector rr_names; - for (RuleMap::const_iterator it = rule_map.begin(); - it != rule_map.end(); ++it) { -- if (it != rule_map.begin()) -- stream << ' '; -- stream << it->first << ": " << it->second; -+ rr_names.push_back(it->first); -+ } -+ -+ std::sort(rr_names.begin(), rr_names.end(), LessThan_UniqueString); -+ -+ // Now visit the register rules in alphabetical order. -+ for (std::vector::const_iterator name = rr_names.begin(); -+ name != rr_names.end(); -+ ++name) { -+ if (name != rr_names.begin()) -+ stream << " "; -+ stream << FromUniqueString(*name) << ": " << rule_map.find(*name)->second; - } - return stream.good(); - } - - bool Module::Write(std::ostream &stream, SymbolData symbol_data) { - stream << "MODULE " << os_ << " " << architecture_ << " " - << id_ << " " << name_ << endl; - if (!stream.good()) -diff --git a/src/common/module.h b/src/common/module.h ---- a/src/common/module.h -+++ b/src/common/module.h -@@ -41,16 +41,17 @@ - #include - #include - #include - #include - #include - - #include "common/symbol_data.h" - #include "common/using_std_string.h" -+#include "common/unique_string.h" - #include "google_breakpad/common/breakpad_types.h" - - namespace google_breakpad { - - using std::set; - using std::vector; - using std::map; - -@@ -131,69 +132,69 @@ - enum ExprHow { - kExprInvalid = 1, - kExprPostfix, - kExprSimple, - kExprSimpleMem - }; - struct Expr { - // Construct a simple-form expression -- Expr(string ident, long offset, bool deref) { -- if (ident.empty()) { -+ Expr(const UniqueString* ident, long offset, bool deref) { -+ if (ident == ustr__empty()) { - Expr(); - } else { - postfix_ = ""; - ident_ = ident; - offset_ = offset; - how_ = deref ? kExprSimpleMem : kExprSimple; - } - } - // Construct an expression from a postfix string - Expr(string postfix) { - if (postfix.empty()) { - Expr(); - } else { - postfix_ = postfix; -- ident_ = ""; -+ ident_ = NULL; - offset_ = 0; - how_ = kExprPostfix; - } - } - // Construct an invalid expression - Expr() { - postfix_ = ""; -- ident_ = ""; -+ ident_ = NULL; - offset_ = 0; - how_ = kExprInvalid; - } - bool invalid() const { return how_ == kExprInvalid; } - bool operator==(const Expr& other) const { - return how_ == other.how_ && - ident_ == other.ident_ && - offset_ == other.offset_ && - postfix_ == other.postfix_; - } - - // The identifier that gives the starting value for simple expressions. -- string ident_; -+ const UniqueString* ident_; - // The offset to add for simple expressions. - long offset_; - // The Postfix expression string to evaluate for non-simple expressions. - string postfix_; - // The operation expressed by this expression. - ExprHow how_; - - friend std::ostream& operator<<(std::ostream& stream, const Expr& expr); - }; - - // A map from register names to expressions that recover - // their values. This can represent a complete set of rules to - // follow at some address, or a set of changes to be applied to an - // extant set of rules. -- typedef map RuleMap; -+ typedef map RuleMap; - - // A map from addresses to RuleMaps, representing changes that take - // effect at given addresses. - typedef map RuleChangeMap; - - // A range of 'STACK CFI' stack walking information. An instance of - // this structure corresponds to a 'STACK CFI INIT' record and the - // subsequent 'STACK CFI' records that fall within its range. -diff --git a/src/common/module_unittest.cc b/src/common/module_unittest.cc ---- a/src/common/module_unittest.cc -+++ b/src/common/module_unittest.cc -@@ -40,16 +40,18 @@ - #include - #include - - #include "breakpad_googletest_includes.h" - #include "common/module.h" - #include "common/using_std_string.h" - - using google_breakpad::Module; -+using google_breakpad::ToUniqueString; -+using google_breakpad::ustr__ZDcfa; - using std::stringstream; - using std::vector; - using testing::ContainerEq; - - static Module::Function *generate_duplicate_function(const string &name) { - const Module::Address DUP_ADDRESS = 0xd35402aac7a7ad5cLL; - const Module::Address DUP_SIZE = 0x200b26e605f99071LL; - const Module::Address DUP_PARAMETER_SIZE = 0xf14ac4fed48c4a99LL; -@@ -125,21 +127,27 @@ - function->lines.push_back(line1); - - m.AddFunction(function); - - // Some stack information. - Module::StackFrameEntry *entry = new Module::StackFrameEntry(); - entry->address = 0x30f9e5c83323973dULL; - entry->size = 0x49fc9ca7c7c13dc2ULL; -- entry->initial_rules[".cfa"] = Module::Expr("he was a handsome man"); -- entry->initial_rules["and"] = Module::Expr("what i want to know is"); -- entry->rule_changes[0x30f9e5c83323973eULL]["how"] = -- Module::Expr("do you like your blueeyed boy"); -- entry->rule_changes[0x30f9e5c83323973eULL]["Mister"] = Module::Expr("Death"); -+ entry->initial_rules[ustr__ZDcfa()] = Module::Expr("he was a handsome man"); -+ entry->initial_rules[ToUniqueString("and")] = -+ Module::Expr("what i want to know is"); -+ entry->initial_rules[ToUniqueString("stallion")] = -+ Module::Expr(ToUniqueString("and break"), 8, false); -+ entry->initial_rules[ToUniqueString("onetwothreefourfive")] = -+ Module::Expr(ToUniqueString("pigeonsjustlikethat"), 42, true); -+ entry->rule_changes[0x30f9e5c83323973eULL][ToUniqueString("how")] = -+ Module::Expr("do you like your blueeyed boy"); -+ entry->rule_changes[0x30f9e5c83323973eULL][ToUniqueString("Mister")] = -+ Module::Expr("Death"); - m.AddStackFrameEntry(entry); - - // Set the load address. Doing this after adding all the data to - // the module must work fine. - m.SetLoadAddress(0x2ab698b0b6407073LL); - - m.Write(s, ALL_SYMBOL_DATA); - string contents = s.str(); -@@ -147,17 +155,19 @@ - "FILE 0 filename-a.cc\n" - "FILE 1 filename-b.cc\n" - "FUNC 9410dc39a798c580 2922088f98d3f6fc e5e9aa008bd5f0d0" - " A_FLIBBERTIJIBBET::a_will_o_the_wisp(a clown)\n" - "b03cc3106d47eb91 cf621b8d324d0eb 67519080 0\n" - "9410dc39a798c580 1c2be6d6c5af2611 41676901 1\n" - "STACK CFI INIT 6434d177ce326ca 49fc9ca7c7c13dc2" - " .cfa: he was a handsome man" -- " and: what i want to know is\n" -+ " and: what i want to know is" -+ " onetwothreefourfive: pigeonsjustlikethat 42 + ^" -+ " stallion: and break 8 +\n" - "STACK CFI 6434d177ce326cb" - " Mister: Death" - " how: do you like your blueeyed boy\n", - contents.c_str()); - } - - TEST(Write, OmitUnusedFiles) { - Module m(MODULE_NAME, MODULE_OS, MODULE_ARCH, MODULE_ID); -@@ -229,21 +239,23 @@ - function->lines.push_back(line1); - - m.AddFunction(function); - - // Some stack information. - Module::StackFrameEntry *entry = new Module::StackFrameEntry(); - entry->address = 0x30f9e5c83323973dULL; - entry->size = 0x49fc9ca7c7c13dc2ULL; -- entry->initial_rules[".cfa"] = Module::Expr("he was a handsome man"); -- entry->initial_rules["and"] = Module::Expr("what i want to know is"); -- entry->rule_changes[0x30f9e5c83323973eULL]["how"] = -- Module::Expr("do you like your blueeyed boy"); -- entry->rule_changes[0x30f9e5c83323973eULL]["Mister"] = Module::Expr("Death"); -+ entry->initial_rules[ustr__ZDcfa()] = Module::Expr("he was a handsome man"); -+ entry->initial_rules[ToUniqueString("and")] = -+ Module::Expr("what i want to know is"); -+ entry->rule_changes[0x30f9e5c83323973eULL][ToUniqueString("how")] = -+ Module::Expr("do you like your blueeyed boy"); -+ entry->rule_changes[0x30f9e5c83323973eULL][ToUniqueString("Mister")] = -+ Module::Expr("Death"); - m.AddStackFrameEntry(entry); - - // Set the load address. Doing this after adding all the data to - // the module must work fine. - m.SetLoadAddress(0x2ab698b0b6407073LL); - - m.Write(s, NO_CFI); - string contents = s.str(); -@@ -305,33 +317,36 @@ - entry1->address = 0xddb5f41285aa7757ULL; - entry1->size = 0x1486493370dc5073ULL; - m.AddStackFrameEntry(entry1); - - // Second STACK CFI entry, with initial rules but no deltas. - Module::StackFrameEntry *entry2 = new Module::StackFrameEntry(); - entry2->address = 0x8064f3af5e067e38ULL; - entry2->size = 0x0de2a5ee55509407ULL; -- entry2->initial_rules[".cfa"] = Module::Expr("I think that I shall never see"); -- entry2->initial_rules["stromboli"] = Module::Expr("a poem lovely as a tree"); -- entry2->initial_rules["cannoli"] = Module::Expr("a tree whose hungry mouth is prest"); -+ entry2->initial_rules[ustr__ZDcfa()] = -+ Module::Expr("I think that I shall never see"); -+ entry2->initial_rules[ToUniqueString("stromboli")] = -+ Module::Expr("a poem lovely as a tree"); -+ entry2->initial_rules[ToUniqueString("cannoli")] = -+ Module::Expr("a tree whose hungry mouth is prest"); - m.AddStackFrameEntry(entry2); - - // Third STACK CFI entry, with initial rules and deltas. - Module::StackFrameEntry *entry3 = new Module::StackFrameEntry(); - entry3->address = 0x5e8d0db0a7075c6cULL; - entry3->size = 0x1c7edb12a7aea229ULL; -- entry3->initial_rules[".cfa"] = Module::Expr("Whose woods are these"); -- entry3->rule_changes[0x47ceb0f63c269d7fULL]["calzone"] = -+ entry3->initial_rules[ustr__ZDcfa()] = Module::Expr("Whose woods are these"); -+ entry3->rule_changes[0x47ceb0f63c269d7fULL][ToUniqueString("calzone")] = - Module::Expr("the village though"); -- entry3->rule_changes[0x47ceb0f63c269d7fULL]["cannoli"] = -+ entry3->rule_changes[0x47ceb0f63c269d7fULL][ToUniqueString("cannoli")] = - Module::Expr("he will not see me stopping here"); -- entry3->rule_changes[0x36682fad3763ffffULL]["stromboli"] = -+ entry3->rule_changes[0x36682fad3763ffffULL][ToUniqueString("stromboli")] = - Module::Expr("his house is in"); -- entry3->rule_changes[0x36682fad3763ffffULL][".cfa"] = -+ entry3->rule_changes[0x36682fad3763ffffULL][ustr__ZDcfa()] = - Module::Expr("I think I know"); - m.AddStackFrameEntry(entry3); - - // Check that Write writes STACK CFI records properly. - m.Write(s, ALL_SYMBOL_DATA); - string contents = s.str(); - EXPECT_STREQ("MODULE os-name architecture id-string name with spaces\n" - "STACK CFI INIT 5e8d0db0a7075c6c 1c7edb12a7aea229" -@@ -352,33 +367,39 @@ - // Check that GetStackFrameEntries works. - vector entries; - m.GetStackFrameEntries(&entries); - ASSERT_EQ(3U, entries.size()); - // Check first entry. - EXPECT_EQ(0x5e8d0db0a7075c6cULL, entries[0]->address); - EXPECT_EQ(0x1c7edb12a7aea229ULL, entries[0]->size); - Module::RuleMap entry1_initial; -- entry1_initial[".cfa"] = Module::Expr("Whose woods are these"); -+ entry1_initial[ustr__ZDcfa()] = Module::Expr("Whose woods are these"); - EXPECT_THAT(entries[0]->initial_rules, ContainerEq(entry1_initial)); - Module::RuleChangeMap entry1_changes; -- entry1_changes[0x36682fad3763ffffULL][".cfa"] = Module::Expr("I think I know"); -- entry1_changes[0x36682fad3763ffffULL]["stromboli"] = Module::Expr("his house is in"); -- entry1_changes[0x47ceb0f63c269d7fULL]["calzone"] = Module::Expr("the village though"); -- entry1_changes[0x47ceb0f63c269d7fULL]["cannoli"] = -- Module::Expr("he will not see me stopping here"); -+ entry1_changes[0x36682fad3763ffffULL][ustr__ZDcfa()] = -+ Module::Expr("I think I know"); -+ entry1_changes[0x36682fad3763ffffULL][ToUniqueString("stromboli")] = -+ Module::Expr("his house is in"); -+ entry1_changes[0x47ceb0f63c269d7fULL][ToUniqueString("calzone")] = -+ Module::Expr("the village though"); -+ entry1_changes[0x47ceb0f63c269d7fULL][ToUniqueString("cannoli")] = -+ Module::Expr("he will not see me stopping here"); - EXPECT_THAT(entries[0]->rule_changes, ContainerEq(entry1_changes)); - // Check second entry. - EXPECT_EQ(0x8064f3af5e067e38ULL, entries[1]->address); - EXPECT_EQ(0x0de2a5ee55509407ULL, entries[1]->size); - ASSERT_EQ(3U, entries[1]->initial_rules.size()); - Module::RuleMap entry2_initial; -- entry2_initial[".cfa"] = Module::Expr("I think that I shall never see"); -- entry2_initial["stromboli"] = Module::Expr("a poem lovely as a tree"); -- entry2_initial["cannoli"] = Module::Expr("a tree whose hungry mouth is prest"); -+ entry2_initial[ustr__ZDcfa()] = -+ Module::Expr("I think that I shall never see"); -+ entry2_initial[ToUniqueString("stromboli")] = -+ Module::Expr("a poem lovely as a tree"); -+ entry2_initial[ToUniqueString("cannoli")] = -+ Module::Expr("a tree whose hungry mouth is prest"); - EXPECT_THAT(entries[1]->initial_rules, ContainerEq(entry2_initial)); - ASSERT_EQ(0U, entries[1]->rule_changes.size()); - // Check third entry. - EXPECT_EQ(0xddb5f41285aa7757ULL, entries[2]->address); - EXPECT_EQ(0x1486493370dc5073ULL, entries[2]->size); - ASSERT_EQ(0U, entries[2]->initial_rules.size()); - ASSERT_EQ(0U, entries[2]->rule_changes.size()); - } -@@ -585,33 +606,36 @@ - entry1->address = 0x2000; - entry1->size = 0x900; - m.AddStackFrameEntry(entry1); - - // Second STACK CFI entry, with initial rules but no deltas. - Module::StackFrameEntry *entry2 = new Module::StackFrameEntry(); - entry2->address = 0x3000; - entry2->size = 0x900; -- entry2->initial_rules[".cfa"] = Module::Expr("I think that I shall never see"); -- entry2->initial_rules["stromboli"] = Module::Expr("a poem lovely as a tree"); -- entry2->initial_rules["cannoli"] = Module::Expr("a tree whose hungry mouth is prest"); -+ entry2->initial_rules[ustr__ZDcfa()] = -+ Module::Expr("I think that I shall never see"); -+ entry2->initial_rules[ToUniqueString("stromboli")] = -+ Module::Expr("a poem lovely as a tree"); -+ entry2->initial_rules[ToUniqueString("cannoli")] = -+ Module::Expr("a tree whose hungry mouth is prest"); - m.AddStackFrameEntry(entry2); - - // Third STACK CFI entry, with initial rules and deltas. - Module::StackFrameEntry *entry3 = new Module::StackFrameEntry(); - entry3->address = 0x1000; - entry3->size = 0x900; -- entry3->initial_rules[".cfa"] = Module::Expr("Whose woods are these"); -- entry3->rule_changes[0x47ceb0f63c269d7fULL]["calzone"] = -+ entry3->initial_rules[ustr__ZDcfa()] = Module::Expr("Whose woods are these"); -+ entry3->rule_changes[0x47ceb0f63c269d7fULL][ToUniqueString("calzone")] = - Module::Expr("the village though"); -- entry3->rule_changes[0x47ceb0f63c269d7fULL]["cannoli"] = -+ entry3->rule_changes[0x47ceb0f63c269d7fULL][ToUniqueString("cannoli")] = - Module::Expr("he will not see me stopping here"); -- entry3->rule_changes[0x36682fad3763ffffULL]["stromboli"] = -+ entry3->rule_changes[0x36682fad3763ffffULL][ToUniqueString("stromboli")] = - Module::Expr("his house is in"); -- entry3->rule_changes[0x36682fad3763ffffULL][".cfa"] = -+ entry3->rule_changes[0x36682fad3763ffffULL][ustr__ZDcfa()] = - Module::Expr("I think I know"); - m.AddStackFrameEntry(entry3); - - Module::StackFrameEntry* s = m.FindStackFrameEntryByAddress(0x1000); - EXPECT_EQ(entry3, s); - s = m.FindStackFrameEntryByAddress(0x18FF); - EXPECT_EQ(entry3, s); - -diff --git a/src/common/unique_string.cc b/src/common/unique_string.cc -new file mode 100644 ---- /dev/null -+++ b/src/common/unique_string.cc -@@ -0,0 +1,110 @@ -+// Copyright (c) 2013 Google Inc. -+// All rights reserved. -+// -+// Redistribution and use in source and binary forms, with or without -+// modification, are permitted provided that the following conditions are -+// met: -+// -+// * Redistributions of source code must retain the above copyright -+// notice, this list of conditions and the following disclaimer. -+// * Redistributions in binary form must reproduce the above -+// copyright notice, this list of conditions and the following disclaimer -+// in the documentation and/or other materials provided with the -+// distribution. -+// * Neither the name of Google Inc. nor the names of its -+// contributors may be used to endorse or promote products derived from -+// this software without specific prior written permission. -+// -+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ -+#include -+#include -+ -+#include -+#include -+ -+#include "common/unique_string.h" -+ -+namespace google_breakpad { -+ -+/////////////////////////////////////////////////////////////////// -+// UniqueString -+// -+class UniqueString { -+ public: -+ UniqueString(string str) { str_ = strdup(str.c_str()); } -+ ~UniqueString() { free(reinterpret_cast(const_cast(str_))); } -+ const char* str_; -+}; -+ -+class UniqueStringUniverse { -+ public: -+ UniqueStringUniverse() {}; -+ const UniqueString* FindOrCopy(string str) { -+ std::map::iterator it = map_.find(str); -+ if (it == map_.end()) { -+ UniqueString* ustr = new UniqueString(str); -+ map_[str] = ustr; -+ return ustr; -+ } else { -+ return it->second; -+ } -+ } -+ private: -+ std::map map_; -+}; -+ -+// -+/////////////////////////////////////////////////////////////////// -+ -+ -+static UniqueStringUniverse* sUSU = NULL; -+ -+ -+// This isn't threadsafe. -+const UniqueString* ToUniqueString(string str) { -+ if (!sUSU) { -+ sUSU = new UniqueStringUniverse(); -+ } -+ return sUSU->FindOrCopy(str); -+} -+ -+// This isn't threadsafe. -+const UniqueString* ToUniqueString_n(const char* str, size_t n) { -+ if (!sUSU) { -+ sUSU = new UniqueStringUniverse(); -+ } -+ string key(str, n); -+ return sUSU->FindOrCopy(key); -+} -+ -+const char Index(const UniqueString* us, int ix) -+{ -+ return us->str_[ix]; -+} -+ -+const char* const FromUniqueString(const UniqueString* ustr) -+{ -+ return ustr->str_; -+} -+ -+int StrcmpUniqueString(const UniqueString* us1, const UniqueString* us2) { -+ return strcmp(us1->str_, us2->str_); -+} -+ -+bool LessThan_UniqueString(const UniqueString* us1, const UniqueString* us2) { -+ int r = StrcmpUniqueString(us1, us2); -+ return r < 0; -+} -+ -+} // namespace google_breakpad -diff --git a/src/common/unique_string.h b/src/common/unique_string.h -new file mode 100644 ---- /dev/null -+++ b/src/common/unique_string.h -@@ -0,0 +1,239 @@ -+// Copyright (c) 2013 Google Inc. -+// All rights reserved. -+// -+// Redistribution and use in source and binary forms, with or without -+// modification, are permitted provided that the following conditions are -+// met: -+// -+// * Redistributions of source code must retain the above copyright -+// notice, this list of conditions and the following disclaimer. -+// * Redistributions in binary form must reproduce the above -+// copyright notice, this list of conditions and the following disclaimer -+// in the documentation and/or other materials provided with the -+// distribution. -+// * Neither the name of Google Inc. nor the names of its -+// contributors may be used to endorse or promote products derived from -+// this software without specific prior written permission. -+// -+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ -+#ifndef COMMON_UNIQUE_STRING_H_ -+#define COMMON_UNIQUE_STRING_H_ -+ -+#include -+#include "common/using_std_string.h" -+ -+namespace google_breakpad { -+ -+// Abstract type -+class UniqueString; -+ -+// Unique-ify a string. |ToUniqueString| can never return NULL. -+const UniqueString* ToUniqueString(string); -+ -+// ditto, starting instead from the first n characters of a C string -+const UniqueString* ToUniqueString_n(const char* str, size_t n); -+ -+// Pull chars out of the string. No range checking. -+const char Index(const UniqueString*, int); -+ -+// Get the contained C string (debugging only) -+const char* const FromUniqueString(const UniqueString*); -+ -+// Do a strcmp-style comparison on the contained C string -+int StrcmpUniqueString(const UniqueString*, const UniqueString*); -+ -+// Less-than comparison of two UniqueStrings, usable for std::sort. -+bool LessThan_UniqueString(const UniqueString*, const UniqueString*); -+ -+// Some handy pre-uniqified strings. Z is an escape character: -+// ZS '$' -+// ZD '.' -+// Zeq '=' -+// Zplus '+' -+// Zstar '*' -+// Zslash '/' -+// Zpercent '%' -+// Zat '@' -+// Zcaret '^' -+ -+// Note that ustr__empty and (UniqueString*)NULL are considered -+// to be different. -+// -+// Unfortunately these have to be written as functions so as to -+// make them safe to use in static initialisers. -+ -+// "" -+inline static const UniqueString* ustr__empty() { -+ static const UniqueString* us = NULL; -+ if (!us) us = ToUniqueString(""); -+ return us; -+} -+ -+// "$eip" -+inline static const UniqueString* ustr__ZSeip() { -+ static const UniqueString* us = NULL; -+ if (!us) us = ToUniqueString("$eip"); -+ return us; -+} -+ -+// "$ebp" -+inline static const UniqueString* ustr__ZSebp() { -+ static const UniqueString* us = NULL; -+ if (!us) us = ToUniqueString("$ebp"); -+ return us; -+} -+ -+// "$esp" -+inline static const UniqueString* ustr__ZSesp() { -+ static const UniqueString* us = NULL; -+ if (!us) us = ToUniqueString("$esp"); -+ return us; -+} -+ -+// "$ebx" -+inline static const UniqueString* ustr__ZSebx() { -+ static const UniqueString* us = NULL; -+ if (!us) us = ToUniqueString("$ebx"); -+ return us; -+} -+ -+// "$esi" -+inline static const UniqueString* ustr__ZSesi() { -+ static const UniqueString* us = NULL; -+ if (!us) us = ToUniqueString("$esi"); -+ return us; -+} -+ -+// "$edi" -+inline static const UniqueString* ustr__ZSedi() { -+ static const UniqueString* us = NULL; -+ if (!us) us = ToUniqueString("$edi"); -+ return us; -+} -+ -+// ".cbCalleeParams" -+inline static const UniqueString* ustr__ZDcbCalleeParams() { -+ static const UniqueString* us = NULL; -+ if (!us) us = ToUniqueString(".cbCalleeParams"); -+ return us; -+} -+ -+// ".cbSavedRegs" -+inline static const UniqueString* ustr__ZDcbSavedRegs() { -+ static const UniqueString* us = NULL; -+ if (!us) us = ToUniqueString(".cbSavedRegs"); -+ return us; -+} -+ -+// ".cbLocals" -+inline static const UniqueString* ustr__ZDcbLocals() { -+ static const UniqueString* us = NULL; -+ if (!us) us = ToUniqueString(".cbLocals"); -+ return us; -+} -+ -+// ".raSearchStart" -+inline static const UniqueString* ustr__ZDraSearchStart() { -+ static const UniqueString* us = NULL; -+ if (!us) us = ToUniqueString(".raSearchStart"); -+ return us; -+} -+ -+// ".raSearch" -+inline static const UniqueString* ustr__ZDraSearch() { -+ static const UniqueString* us = NULL; -+ if (!us) us = ToUniqueString(".raSearch"); -+ return us; -+} -+ -+// ".cbParams" -+inline static const UniqueString* ustr__ZDcbParams() { -+ static const UniqueString* us = NULL; -+ if (!us) us = ToUniqueString(".cbParams"); -+ return us; -+} -+ -+// "+" -+inline static const UniqueString* ustr__Zplus() { -+ static const UniqueString* us = NULL; -+ if (!us) us = ToUniqueString("+"); -+ return us; -+} -+ -+// "-" -+inline static const UniqueString* ustr__Zminus() { -+ static const UniqueString* us = NULL; -+ if (!us) us = ToUniqueString("-"); -+ return us; -+} -+ -+// "*" -+inline static const UniqueString* ustr__Zstar() { -+ static const UniqueString* us = NULL; -+ if (!us) us = ToUniqueString("*"); -+ return us; -+} -+ -+// "/" -+inline static const UniqueString* ustr__Zslash() { -+ static const UniqueString* us = NULL; -+ if (!us) us = ToUniqueString("/"); -+ return us; -+} -+ -+// "%" -+inline static const UniqueString* ustr__Zpercent() { -+ static const UniqueString* us = NULL; -+ if (!us) us = ToUniqueString("%"); -+ return us; -+} -+ -+// "@" -+inline static const UniqueString* ustr__Zat() { -+ static const UniqueString* us = NULL; -+ if (!us) us = ToUniqueString("@"); -+ return us; -+} -+ -+// "^" -+inline static const UniqueString* ustr__Zcaret() { -+ static const UniqueString* us = NULL; -+ if (!us) us = ToUniqueString("^"); -+ return us; -+} -+ -+// "=" -+inline static const UniqueString* ustr__Zeq() { -+ static const UniqueString* us = NULL; -+ if (!us) us = ToUniqueString("="); -+ return us; -+} -+ -+// ".cfa" -+inline static const UniqueString* ustr__ZDcfa() { -+ static const UniqueString* us = NULL; -+ if (!us) us = ToUniqueString(".cfa"); -+ return us; -+} -+ -+// ".ra" -+inline static const UniqueString* ustr__ZDra() { -+ static const UniqueString* us = NULL; -+ if (!us) us = ToUniqueString(".ra"); -+ return us; -+} -+ -+} // namespace google_breakpad -+ -+#endif // COMMON_UNIQUE_STRING_H_ -diff --git a/src/processor/basic_source_line_resolver_unittest.cc b/src/processor/basic_source_line_resolver_unittest.cc ---- a/src/processor/basic_source_line_resolver_unittest.cc -+++ b/src/processor/basic_source_line_resolver_unittest.cc -@@ -43,21 +43,30 @@ - #include "processor/windows_frame_info.h" - #include "processor/cfi_frame_info.h" - - namespace { - - using google_breakpad::BasicSourceLineResolver; - using google_breakpad::CFIFrameInfo; - using google_breakpad::CodeModule; -+using google_breakpad::FromUniqueString; - using google_breakpad::MemoryRegion; - using google_breakpad::StackFrame; -+using google_breakpad::ToUniqueString; - using google_breakpad::WindowsFrameInfo; - using google_breakpad::linked_ptr; - using google_breakpad::scoped_ptr; -+using google_breakpad::ustr__ZDcfa; -+using google_breakpad::ustr__ZDra; -+using google_breakpad::ustr__ZSebx; -+using google_breakpad::ustr__ZSebp; -+using google_breakpad::ustr__ZSedi; -+using google_breakpad::ustr__ZSesi; -+using google_breakpad::ustr__ZSesp; - - class TestCodeModule : public CodeModule { - public: - TestCodeModule(string code_file) : code_file_(code_file) {} - virtual ~TestCodeModule() {} - - virtual uint64_t base_address() const { return 0; } - virtual uint64_t size() const { return 0xb000; } -@@ -107,34 +116,34 @@ - // association. (That is, ACTUAL's associations should be a subset of - // EXPECTED's.) Also verify that ACTUAL has associations for ".ra" and - // ".cfa". - static bool VerifyRegisters( - const char *file, int line, - const CFIFrameInfo::RegisterValueMap &expected, - const CFIFrameInfo::RegisterValueMap &actual) { - CFIFrameInfo::RegisterValueMap::const_iterator a; -- a = actual.find(".cfa"); -+ a = actual.find(ustr__ZDcfa()); - if (a == actual.end()) - return false; -- a = actual.find(".ra"); -+ a = actual.find(ustr__ZDra()); - if (a == actual.end()) - return false; - for (a = actual.begin(); a != actual.end(); a++) { - CFIFrameInfo::RegisterValueMap::const_iterator e = - expected.find(a->first); - if (e == expected.end()) { - fprintf(stderr, "%s:%d: unexpected register '%s' recovered, value 0x%x\n", -- file, line, a->first.c_str(), a->second); -+ file, line, FromUniqueString(a->first), a->second); - return false; - } - if (e->second != a->second) { - fprintf(stderr, - "%s:%d: register '%s' recovered value was 0x%x, expected 0x%x\n", -- file, line, a->first.c_str(), a->second, e->second); -+ file, line, FromUniqueString(a->first), a->second, e->second); - return false; - } - // Don't complain if this doesn't recover all registers. Although - // the DWARF spec says that unmentioned registers are undefined, - // GCC uses omission to mean that they are unchanged. - } - return true; - } -@@ -254,81 +263,81 @@ - - CFIFrameInfo::RegisterValueMap current_registers; - CFIFrameInfo::RegisterValueMap caller_registers; - CFIFrameInfo::RegisterValueMap expected_caller_registers; - MockMemoryRegion memory; - - // Regardless of which instruction evaluation takes place at, it - // should produce the same values for the caller's registers. -- expected_caller_registers[".cfa"] = 0x1001c; -- expected_caller_registers[".ra"] = 0xf6438648; -- expected_caller_registers["$ebp"] = 0x10038; -- expected_caller_registers["$ebx"] = 0x98ecadc3; -- expected_caller_registers["$esi"] = 0x878f7524; -- expected_caller_registers["$edi"] = 0x6312f9a5; -+ expected_caller_registers[ustr__ZDcfa()] = 0x1001c; -+ expected_caller_registers[ustr__ZDra()] = 0xf6438648; -+ expected_caller_registers[ustr__ZSebp()] = 0x10038; -+ expected_caller_registers[ustr__ZSebx()] = 0x98ecadc3; -+ expected_caller_registers[ustr__ZSesi()] = 0x878f7524; -+ expected_caller_registers[ustr__ZSedi()] = 0x6312f9a5; - - frame.instruction = 0x3d40; - frame.module = &module1; - current_registers.clear(); -- current_registers["$esp"] = 0x10018; -- current_registers["$ebp"] = 0x10038; -- current_registers["$ebx"] = 0x98ecadc3; -- current_registers["$esi"] = 0x878f7524; -- current_registers["$edi"] = 0x6312f9a5; -+ current_registers[ustr__ZSesp()] = 0x10018; -+ current_registers[ustr__ZSebp()] = 0x10038; -+ current_registers[ustr__ZSebx()] = 0x98ecadc3; -+ current_registers[ustr__ZSesi()] = 0x878f7524; -+ current_registers[ustr__ZSedi()] = 0x6312f9a5; - cfi_frame_info.reset(resolver.FindCFIFrameInfo(&frame)); - ASSERT_TRUE(cfi_frame_info.get()); - ASSERT_TRUE(cfi_frame_info.get() - ->FindCallerRegs(current_registers, memory, - &caller_registers)); - ASSERT_TRUE(VerifyRegisters(__FILE__, __LINE__, - expected_caller_registers, caller_registers)); - - frame.instruction = 0x3d41; -- current_registers["$esp"] = 0x10014; -+ current_registers[ustr__ZSesp()] = 0x10014; - cfi_frame_info.reset(resolver.FindCFIFrameInfo(&frame)); - ASSERT_TRUE(cfi_frame_info.get()); - ASSERT_TRUE(cfi_frame_info.get() - ->FindCallerRegs(current_registers, memory, - &caller_registers)); - ASSERT_TRUE(VerifyRegisters(__FILE__, __LINE__, - expected_caller_registers, caller_registers)); - - frame.instruction = 0x3d43; -- current_registers["$ebp"] = 0x10014; -+ current_registers[ustr__ZSebp()] = 0x10014; - cfi_frame_info.reset(resolver.FindCFIFrameInfo(&frame)); - ASSERT_TRUE(cfi_frame_info.get()); - ASSERT_TRUE(cfi_frame_info.get() - ->FindCallerRegs(current_registers, memory, - &caller_registers)); - VerifyRegisters(__FILE__, __LINE__, - expected_caller_registers, caller_registers); - - frame.instruction = 0x3d54; -- current_registers["$ebx"] = 0x6864f054U; -+ current_registers[ustr__ZSebx()] = 0x6864f054U; - cfi_frame_info.reset(resolver.FindCFIFrameInfo(&frame)); - ASSERT_TRUE(cfi_frame_info.get()); - ASSERT_TRUE(cfi_frame_info.get() - ->FindCallerRegs(current_registers, memory, - &caller_registers)); - VerifyRegisters(__FILE__, __LINE__, - expected_caller_registers, caller_registers); - - frame.instruction = 0x3d5a; -- current_registers["$esi"] = 0x6285f79aU; -+ current_registers[ustr__ZSesi()] = 0x6285f79aU; - cfi_frame_info.reset(resolver.FindCFIFrameInfo(&frame)); - ASSERT_TRUE(cfi_frame_info.get()); - ASSERT_TRUE(cfi_frame_info.get() - ->FindCallerRegs(current_registers, memory, - &caller_registers)); - VerifyRegisters(__FILE__, __LINE__, - expected_caller_registers, caller_registers); - - frame.instruction = 0x3d84; -- current_registers["$edi"] = 0x64061449U; -+ current_registers[ustr__ZSedi()] = 0x64061449U; - cfi_frame_info.reset(resolver.FindCFIFrameInfo(&frame)); - ASSERT_TRUE(cfi_frame_info.get()); - ASSERT_TRUE(cfi_frame_info.get() - ->FindCallerRegs(current_registers, memory, - &caller_registers)); - VerifyRegisters(__FILE__, __LINE__, - expected_caller_registers, caller_registers); - -diff --git a/src/processor/cfi_frame_info.cc b/src/processor/cfi_frame_info.cc ---- a/src/processor/cfi_frame_info.cc -+++ b/src/processor/cfi_frame_info.cc -@@ -31,16 +31,17 @@ - - // cfi_frame_info.cc: Implementation of CFIFrameInfo class. - // See cfi_frame_info.h for details. - - #include "processor/cfi_frame_info.h" - - #include - -+#include - #include - - #include "common/scoped_ptr.h" - #include "processor/postfix_evaluator-inl.h" - - namespace google_breakpad { - - #ifdef _WIN32 -@@ -65,33 +66,33 @@ - V cfa; - working = registers; - if (!evaluator.EvaluateForValue(cfa_rule_, &cfa)) - return false; - - // Then, compute the return address. - V ra; - working = registers; -- working[".cfa"] = cfa; -+ working[ustr__ZDcfa()] = cfa; - if (!evaluator.EvaluateForValue(ra_rule_, &ra)) - return false; - - // Now, compute values for all the registers register_rules_ mentions. - for (RuleMap::const_iterator it = register_rules_.begin(); - it != register_rules_.end(); it++) { - V value; - working = registers; -- working[".cfa"] = cfa; -+ working[ustr__ZDcfa()] = cfa; - if (!evaluator.EvaluateForValue(it->second, &value)) - return false; - (*caller_registers)[it->first] = value; - } - -- (*caller_registers)[".ra"] = ra; -- (*caller_registers)[".cfa"] = cfa; -+ (*caller_registers)[ustr__ZDra()] = ra; -+ (*caller_registers)[ustr__ZDcfa()] = cfa; - - return true; - } - - // Explicit instantiations for 32-bit and 64-bit architectures. - template bool CFIFrameInfo::FindCallerRegs( - const RegisterValueMap ®isters, - const MemoryRegion &memory, -@@ -107,81 +108,98 @@ - if (!cfa_rule_.invalid()) { - stream << ".cfa: " << cfa_rule_; - } - if (!ra_rule_.invalid()) { - if (static_cast(stream.tellp()) != 0) - stream << " "; - stream << ".ra: " << ra_rule_; - } -+ -+ // Visit the register rules in alphabetical order. Because -+ // register_rules_ has the elements in some arbitrary order, -+ // get the names out into a vector, sort them, and visit in -+ // sorted order. -+ std::vector rr_names; - for (RuleMap::const_iterator iter = register_rules_.begin(); - iter != register_rules_.end(); - ++iter) { -+ rr_names.push_back(iter->first); -+ } -+ -+ std::sort(rr_names.begin(), rr_names.end(), LessThan_UniqueString); -+ -+ // Now visit the register rules in alphabetical order. -+ for (std::vector::const_iterator name = rr_names.begin(); -+ name != rr_names.end(); -+ ++name) { -+ const UniqueString* nm = *name; -+ Module::Expr rule = register_rules_.find(nm)->second; - if (static_cast(stream.tellp()) != 0) - stream << " "; -- stream << iter->first << ": " << iter->second; -+ stream << FromUniqueString(nm) << ": " << rule; - } - - return stream.str(); - } - - bool CFIRuleParser::Parse(const string &rule_set) { - size_t rule_set_len = rule_set.size(); - scoped_array working_copy(new char[rule_set_len + 1]); - memcpy(working_copy.get(), rule_set.data(), rule_set_len); - working_copy[rule_set_len] = '\0'; - -- name_.clear(); -+ name_ = ustr__empty(); - expression_.clear(); - - char *cursor; - static const char token_breaks[] = " \t\r\n"; - char *token = strtok_r(working_copy.get(), token_breaks, &cursor); - - for (;;) { - // End of rule set? - if (!token) return Report(); - - // Register/pseudoregister name? - size_t token_len = strlen(token); - if (token_len >= 1 && token[token_len - 1] == ':') { - // Names can't be empty. - if (token_len < 2) return false; - // If there is any pending content, report it. -- if (!name_.empty() || !expression_.empty()) { -+ if (name_ != ustr__empty() || !expression_.empty()) { - if (!Report()) return false; - } -- name_.assign(token, token_len - 1); -+ name_ = ToUniqueString_n(token, token_len - 1); - expression_.clear(); - } else { - // Another expression component. - assert(token_len > 0); // strtok_r guarantees this, I think. - if (!expression_.empty()) - expression_ += ' '; - expression_ += token; - } - token = strtok_r(NULL, token_breaks, &cursor); - } - } - - bool CFIRuleParser::Report() { -- if (name_.empty() || expression_.empty()) return false; -- if (name_ == ".cfa") handler_->CFARule(expression_); -- else if (name_ == ".ra") handler_->RARule(expression_); -+ if (name_ == ustr__empty() || expression_.empty()) return false; -+ if (name_ == ustr__ZDcfa()) handler_->CFARule(expression_); -+ else if (name_ == ustr__ZDra()) handler_->RARule(expression_); - else handler_->RegisterRule(name_, expression_); - return true; - } - - void CFIFrameInfoParseHandler::CFARule(const string &expression) { - // 'expression' is a postfix expression string. - frame_info_->SetCFARule(Module::Expr(expression)); - } - - void CFIFrameInfoParseHandler::RARule(const string &expression) { - frame_info_->SetRARule(Module::Expr(expression)); - } - --void CFIFrameInfoParseHandler::RegisterRule(const string &name, -+void CFIFrameInfoParseHandler::RegisterRule(const UniqueString* name, - const string &expression) { - frame_info_->SetRegisterRule(name, Module::Expr(expression)); - } - - } // namespace google_breakpad -diff --git a/src/processor/cfi_frame_info.h b/src/processor/cfi_frame_info.h ---- a/src/processor/cfi_frame_info.h -+++ b/src/processor/cfi_frame_info.h -@@ -37,16 +37,17 @@ - - #ifndef PROCESSOR_CFI_FRAME_INFO_H_ - #define PROCESSOR_CFI_FRAME_INFO_H_ - - #include - #include - - #include "common/using_std_string.h" -+#include "common/unique_string.h" - #include "google_breakpad/common/breakpad_types.h" - #include "common/module.h" - - namespace google_breakpad { - - using std::map; - - class MemoryRegion; -@@ -63,24 +64,24 @@ - // changes given by the 'STACK CFI' records up to our instruction's - // address. Then, use the FindCallerRegs member function to apply the - // rules to the callee frame's register values, yielding the caller - // frame's register values. - class CFIFrameInfo { - public: - // A map from register names onto values. - template class RegisterValueMap: -- public map { }; -+ public map { }; - - // Set the expression for computing a call frame address, return - // address, or register's value. At least the CFA rule and the RA - // rule must be set before calling FindCallerRegs. - void SetCFARule(const Module::Expr& rule) { cfa_rule_ = rule; } - void SetRARule(const Module::Expr& rule) { ra_rule_ = rule; } -- void SetRegisterRule(const string& register_name, -+ void SetRegisterRule(const UniqueString* register_name, - const Module::Expr& rule) { - register_rules_[register_name] = rule; - } - - // Compute the values of the calling frame's registers, according to - // this rule set. Use ValueType in expression evaluation; this - // should be uint32_t on machines with 32-bit addresses, or - // uint64_t on machines with 64-bit addresses. -@@ -104,17 +105,17 @@ - - // Serialize the rules in this object into a string in the format - // of STACK CFI records. - string Serialize() const; - - private: - - // A map from register names onto evaluation rules. -- typedef map RuleMap; -+ typedef map RuleMap; - - // An expression for computing the current frame's CFA (call - // frame address). The CFA is a reference address for the frame that - // remains unchanged throughout the frame's lifetime. You should - // evaluate this expression with a dictionary initially populated - // with the values of the current frame's known registers. - Module::Expr cfa_rule_; - -@@ -145,17 +146,18 @@ - Handler() { } - virtual ~Handler() { } - - // The input specifies EXPRESSION as the CFA/RA computation rule. - virtual void CFARule(const string &expression) = 0; - virtual void RARule(const string &expression) = 0; - - // The input specifies EXPRESSION as the recovery rule for register NAME. -- virtual void RegisterRule(const string &name, const string &expression) = 0; -+ virtual void RegisterRule(const UniqueString* name, -+ const string &expression) = 0; - }; - - // Construct a parser which feeds its results to HANDLER. - CFIRuleParser(Handler *handler) : handler_(handler) { } - - // Parse RULE_SET as a set of CFA computation and RA/register - // recovery rules, as appearing in STACK CFI records. Report the - // results of parsing by making the appropriate calls to handler_. -@@ -165,30 +167,31 @@ - private: - // Report any accumulated rule to handler_ - bool Report(); - - // The handler to which the parser reports its findings. - Handler *handler_; - - // Working data. -- string name_, expression_; -+ const UniqueString* name_; -+ string expression_; - }; - - // A handler for rule set parsing that populates a CFIFrameInfo with - // the results. - class CFIFrameInfoParseHandler: public CFIRuleParser::Handler { - public: - // Populate FRAME_INFO with the results of parsing. - CFIFrameInfoParseHandler(CFIFrameInfo *frame_info) - : frame_info_(frame_info) { } - - void CFARule(const string &expression); - void RARule(const string &expression); -- void RegisterRule(const string &name, const string &expression); -+ void RegisterRule(const UniqueString* name, const string &expression); - - private: - CFIFrameInfo *frame_info_; - }; - - // A utility class template for simple 'STACK CFI'-driven stack walkers. - // Given a CFIFrameInfo instance, a table describing the architecture's - // register set, and a context holding the last frame's registers, an -@@ -205,24 +208,24 @@ - // uint32_t or uint64_t. RawContextType should be the raw context - // structure type for this architecture. - template - class SimpleCFIWalker { - public: - // A structure describing one architecture register. - struct RegisterSet { - // The register name, as it appears in STACK CFI rules. -- const char *name; -+ const UniqueString* name; - - // An alternate name that the register's value might be found - // under in a register value dictionary, or NULL. When generating - // names, prefer NAME to this value. It's common to list ".cfa" as - // an alternative name for the stack pointer, and ".ra" as an - // alternative name for the instruction pointer. -- const char *alternate_name; -+ const UniqueString* alternate_name; - - // True if the callee is expected to preserve the value of this - // register. If this flag is true for some register R, and the STACK - // CFI records provide no rule to recover R, then SimpleCFIWalker - // assumes that the callee has not changed R's value, and the caller's - // value for R is that currently in the callee's context. - bool callee_saves; - -diff --git a/src/processor/cfi_frame_info_unittest.cc b/src/processor/cfi_frame_info_unittest.cc ---- a/src/processor/cfi_frame_info_unittest.cc -+++ b/src/processor/cfi_frame_info_unittest.cc -@@ -38,19 +38,24 @@ - #include "common/module.h" - #include "common/using_std_string.h" - #include "processor/cfi_frame_info.h" - #include "google_breakpad/processor/memory_region.h" - - using google_breakpad::CFIFrameInfo; - using google_breakpad::CFIFrameInfoParseHandler; - using google_breakpad::CFIRuleParser; -+using google_breakpad::FromUniqueString; - using google_breakpad::MemoryRegion; - using google_breakpad::Module; - using google_breakpad::SimpleCFIWalker; -+using google_breakpad::ToUniqueString; -+using google_breakpad::UniqueString; -+using google_breakpad::ustr__ZDcfa; -+using google_breakpad::ustr__ZDra; - using testing::_; - using testing::A; - using testing::AtMost; - using testing::DoAll; - using testing::Return; - using testing::SetArgumentPointee; - using testing::Test; - -@@ -107,41 +112,47 @@ - TEST_F(Simple, SetCFAAndRARule) { - ExpectNoMemoryReferences(); - - cfi.SetCFARule(Module::Expr("330903416631436410")); - cfi.SetRARule(Module::Expr("5870666104170902211")); - ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); - ASSERT_EQ(2U, caller_registers.size()); -- ASSERT_EQ(330903416631436410ULL, caller_registers[".cfa"]); -- ASSERT_EQ(5870666104170902211ULL, caller_registers[".ra"]); -+ ASSERT_EQ(330903416631436410ULL, caller_registers[ustr__ZDcfa()]); -+ ASSERT_EQ(5870666104170902211ULL, caller_registers[ustr__ZDra()]); - - ASSERT_EQ(".cfa: 330903416631436410 .ra: 5870666104170902211", - cfi.Serialize()); - } - - TEST_F(Simple, SetManyRules) { - ExpectNoMemoryReferences(); - - cfi.SetCFARule(Module::Expr("$temp1 68737028 = $temp2 61072337 = $temp1 $temp2 -")); - cfi.SetRARule(Module::Expr(".cfa 99804755 +")); -- cfi.SetRegisterRule("register1", Module::Expr(".cfa 54370437 *")); -- cfi.SetRegisterRule("vodkathumbscrewingly", Module::Expr("24076308 .cfa +")); -- cfi.SetRegisterRule("pubvexingfjordschmaltzy", Module::Expr(".cfa 29801007 -")); -- cfi.SetRegisterRule("uncopyrightables", Module::Expr("92642917 .cfa /")); -+ -+ const UniqueString* reg1 = ToUniqueString("register1"); -+ const UniqueString* reg2 = ToUniqueString("vodkathumbscrewingly"); -+ const UniqueString* reg3 = ToUniqueString("pubvexingfjordschmaltzy"); -+ const UniqueString* reg4 = ToUniqueString("uncopyrightables"); -+ -+ cfi.SetRegisterRule(reg1, Module::Expr(".cfa 54370437 *")); -+ cfi.SetRegisterRule(reg2, Module::Expr("24076308 .cfa +")); -+ cfi.SetRegisterRule(reg3, Module::Expr(".cfa 29801007 -")); -+ cfi.SetRegisterRule(reg4, Module::Expr("92642917 .cfa /")); - ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); - ASSERT_EQ(6U, caller_registers.size()); -- ASSERT_EQ(7664691U, caller_registers[".cfa"]); -- ASSERT_EQ(107469446U, caller_registers[".ra"]); -- ASSERT_EQ(416732599139967ULL, caller_registers["register1"]); -- ASSERT_EQ(31740999U, caller_registers["vodkathumbscrewingly"]); -- ASSERT_EQ(-22136316ULL, caller_registers["pubvexingfjordschmaltzy"]); -- ASSERT_EQ(12U, caller_registers["uncopyrightables"]); -+ ASSERT_EQ(7664691U, caller_registers[ustr__ZDcfa()]); -+ ASSERT_EQ(107469446U, caller_registers[ustr__ZDra()]); -+ ASSERT_EQ(416732599139967ULL, caller_registers[reg1]); -+ ASSERT_EQ(31740999U, caller_registers[reg2]); -+ ASSERT_EQ(-22136316ULL, caller_registers[reg3]); -+ ASSERT_EQ(12U, caller_registers[reg4]); - ASSERT_EQ(".cfa: $temp1 68737028 = $temp2 61072337 = $temp1 $temp2 - " - ".ra: .cfa 99804755 + " - "pubvexingfjordschmaltzy: .cfa 29801007 - " - "register1: .cfa 54370437 * " - "uncopyrightables: 92642917 .cfa / " - "vodkathumbscrewingly: 24076308 .cfa +", - cfi.Serialize()); - } -@@ -150,18 +161,18 @@ - ExpectNoMemoryReferences(); - - cfi.SetCFARule(Module::Expr("330903416631436410")); - cfi.SetRARule(Module::Expr("5870666104170902211")); - cfi.SetCFARule(Module::Expr("2828089117179001")); - ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); - ASSERT_EQ(2U, caller_registers.size()); -- ASSERT_EQ(2828089117179001ULL, caller_registers[".cfa"]); -- ASSERT_EQ(5870666104170902211ULL, caller_registers[".ra"]); -+ ASSERT_EQ(2828089117179001ULL, caller_registers[ustr__ZDcfa()]); -+ ASSERT_EQ(5870666104170902211ULL, caller_registers[ustr__ZDra()]); - ASSERT_EQ(".cfa: 2828089117179001 .ra: 5870666104170902211", - cfi.Serialize()); - } - - class Scope: public CFIFixture, public Test { }; - - // There should be no value for .cfa in scope when evaluating the CFA rule. - TEST_F(Scope, CFALacksCFA) { -@@ -183,37 +194,39 @@ - &caller_registers)); - } - - // The current frame's registers should be in scope when evaluating - // the CFA rule. - TEST_F(Scope, CFASeesCurrentRegs) { - ExpectNoMemoryReferences(); - -- registers[".baraminology"] = 0x06a7bc63e4f13893ULL; -- registers[".ornithorhynchus"] = 0x5e0bf850bafce9d2ULL; -+ const UniqueString* reg1 = ToUniqueString(".baraminology"); -+ const UniqueString* reg2 = ToUniqueString(".ornithorhynchus"); -+ registers[reg1] = 0x06a7bc63e4f13893ULL; -+ registers[reg2] = 0x5e0bf850bafce9d2ULL; - cfi.SetCFARule(Module::Expr(".baraminology .ornithorhynchus +")); - cfi.SetRARule(Module::Expr("0")); - ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); - ASSERT_EQ(2U, caller_registers.size()); - ASSERT_EQ(0x06a7bc63e4f13893ULL + 0x5e0bf850bafce9d2ULL, -- caller_registers[".cfa"]); -+ caller_registers[ustr__ZDcfa()]); - } - - // .cfa should be in scope in the return address expression. - TEST_F(Scope, RASeesCFA) { - ExpectNoMemoryReferences(); - - cfi.SetCFARule(Module::Expr("48364076")); - cfi.SetRARule(Module::Expr(".cfa")); - ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); - ASSERT_EQ(2U, caller_registers.size()); -- ASSERT_EQ(48364076U, caller_registers[".ra"]); -+ ASSERT_EQ(48364076U, caller_registers[ustr__ZDra()]); - } - - // There should be no value for .ra in scope when evaluating the CFA rule. - TEST_F(Scope, RALacksRA) { - ExpectNoMemoryReferences(); - - cfi.SetCFARule(Module::Expr("0")); - cfi.SetRARule(Module::Expr(".ra")); -@@ -221,64 +234,69 @@ - &caller_registers)); - } - - // The current frame's registers should be in scope in the return - // address expression. - TEST_F(Scope, RASeesCurrentRegs) { - ExpectNoMemoryReferences(); - -- registers["noachian"] = 0x54dc4a5d8e5eb503ULL; - cfi.SetCFARule(Module::Expr("10359370")); -- cfi.SetRARule(Module::Expr("noachian")); -+ const UniqueString* reg1 = ToUniqueString("noachian"); -+ registers[reg1] = 0x54dc4a5d8e5eb503ULL; -+ cfi.SetRARule(Module::Expr(reg1, 0, false)); - ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); - ASSERT_EQ(2U, caller_registers.size()); -- ASSERT_EQ(0x54dc4a5d8e5eb503ULL, caller_registers[".ra"]); -+ ASSERT_EQ(0x54dc4a5d8e5eb503ULL, caller_registers[ustr__ZDra()]); - } - - // .cfa should be in scope for register rules. - TEST_F(Scope, RegistersSeeCFA) { - ExpectNoMemoryReferences(); - - cfi.SetCFARule(Module::Expr("6515179")); - cfi.SetRARule(Module::Expr(".cfa")); -- cfi.SetRegisterRule("rogerian", Module::Expr(".cfa")); -+ const UniqueString* reg1 = ToUniqueString("rogerian"); -+ cfi.SetRegisterRule(reg1, Module::Expr(".cfa")); - ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); - ASSERT_EQ(3U, caller_registers.size()); -- ASSERT_EQ(6515179U, caller_registers["rogerian"]); -+ ASSERT_EQ(6515179U, caller_registers[reg1]); - } - - // The return address should not be in scope for register rules. - TEST_F(Scope, RegsLackRA) { - ExpectNoMemoryReferences(); - - cfi.SetCFARule(Module::Expr("42740329")); - cfi.SetRARule(Module::Expr("27045204")); -- cfi.SetRegisterRule("$r1", Module::Expr(".ra")); -+ const UniqueString* reg1 = ToUniqueString("$r1"); -+ cfi.SetRegisterRule(reg1, Module::Expr(".ra")); - ASSERT_FALSE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); - } - - // Register rules can see the current frame's register values. - TEST_F(Scope, RegsSeeRegs) { - ExpectNoMemoryReferences(); - -- registers["$r1"] = 0x6ed3582c4bedb9adULL; -- registers["$r2"] = 0xd27d9e742b8df6d0ULL; -+ const UniqueString* reg1 = ToUniqueString("$r1"); -+ const UniqueString* reg2 = ToUniqueString("$r2"); -+ registers[reg1] = 0x6ed3582c4bedb9adULL; -+ registers[reg2] = 0xd27d9e742b8df6d0ULL; - cfi.SetCFARule(Module::Expr("88239303")); - cfi.SetRARule(Module::Expr("30503835")); -- cfi.SetRegisterRule("$r1", Module::Expr("$r1 42175211 = $r2")); -- cfi.SetRegisterRule("$r2", Module::Expr("$r2 21357221 = $r1")); -+ cfi.SetRegisterRule(reg1, Module::Expr("$r1 42175211 = $r2")); -+ cfi.SetRegisterRule(reg2, Module::Expr("$r2 21357221 = $r1")); - ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); - ASSERT_EQ(4U, caller_registers.size()); -- ASSERT_EQ(0xd27d9e742b8df6d0ULL, caller_registers["$r1"]); -- ASSERT_EQ(0x6ed3582c4bedb9adULL, caller_registers["$r2"]); -+ ASSERT_EQ(0xd27d9e742b8df6d0ULL, caller_registers[reg1]); -+ ASSERT_EQ(0x6ed3582c4bedb9adULL, caller_registers[reg2]); - } - - // Each rule's temporaries are separate. - TEST_F(Scope, SeparateTempsRA) { - ExpectNoMemoryReferences(); - - cfi.SetCFARule(Module::Expr("$temp1 76569129 = $temp1")); - cfi.SetRARule(Module::Expr("0")); -@@ -290,17 +308,17 @@ - ASSERT_FALSE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); - } - - class MockCFIRuleParserHandler: public CFIRuleParser::Handler { - public: - MOCK_METHOD1(CFARule, void(const string &)); - MOCK_METHOD1(RARule, void(const string &)); -- MOCK_METHOD2(RegisterRule, void(const string &, const string &)); -+ MOCK_METHOD2(RegisterRule, void(const UniqueString*, const string &)); - }; - - // A fixture class for testing CFIRuleParser. - class CFIParserFixture { - public: - CFIParserFixture() : parser(&mock_handler) { - // Expect no parsing results to be reported to mock_handler. Individual - // tests can override this. -@@ -361,100 +379,100 @@ - } - - TEST_F(Parser, RA) { - EXPECT_CALL(mock_handler, RARule("notoriety")).WillOnce(Return()); - EXPECT_TRUE(parser.Parse(".ra: notoriety")); - } - - TEST_F(Parser, Reg) { -- EXPECT_CALL(mock_handler, RegisterRule("nemo", "mellifluous")) -+ EXPECT_CALL(mock_handler, RegisterRule(ToUniqueString("nemo"), "mellifluous")) - .WillOnce(Return()); - EXPECT_TRUE(parser.Parse("nemo: mellifluous")); - } - - TEST_F(Parser, CFARARegs) { - EXPECT_CALL(mock_handler, CFARule("cfa expression")).WillOnce(Return()); - EXPECT_CALL(mock_handler, RARule("ra expression")).WillOnce(Return()); -- EXPECT_CALL(mock_handler, RegisterRule("galba", "praetorian")) -+ EXPECT_CALL(mock_handler, RegisterRule(ToUniqueString("galba"), "praetorian")) - .WillOnce(Return()); -- EXPECT_CALL(mock_handler, RegisterRule("otho", "vitellius")) -+ EXPECT_CALL(mock_handler, RegisterRule(ToUniqueString("otho"), "vitellius")) - .WillOnce(Return()); - EXPECT_TRUE(parser.Parse(".cfa: cfa expression .ra: ra expression " - "galba: praetorian otho: vitellius")); - } - - TEST_F(Parser, Whitespace) { -- EXPECT_CALL(mock_handler, RegisterRule("r1", "r1 expression")) -+ EXPECT_CALL(mock_handler, RegisterRule(ToUniqueString("r1"), "r1 expression")) - .WillOnce(Return()); -- EXPECT_CALL(mock_handler, RegisterRule("r2", "r2 expression")) -+ EXPECT_CALL(mock_handler, RegisterRule(ToUniqueString("r2"), "r2 expression")) - .WillOnce(Return()); - EXPECT_TRUE(parser.Parse(" r1:\tr1\nexpression \tr2:\t\rr2\r\n " - "expression \n")); - } - - TEST_F(Parser, WhitespaceLoneColon) { - EXPECT_FALSE(parser.Parse(" \n:\t ")); - } - - TEST_F(Parser, EmptyName) { -- EXPECT_CALL(mock_handler, RegisterRule("reg", _)) -+ EXPECT_CALL(mock_handler, RegisterRule(ToUniqueString("reg"), _)) - .Times(AtMost(1)) - .WillRepeatedly(Return()); - EXPECT_FALSE(parser.Parse("reg: expr1 : expr2")); - } - - TEST_F(Parser, RuleLoneColon) { -- EXPECT_CALL(mock_handler, RegisterRule("r1", "expr")) -+ EXPECT_CALL(mock_handler, RegisterRule(ToUniqueString("r1"), "expr")) - .Times(AtMost(1)) - .WillRepeatedly(Return()); - EXPECT_FALSE(parser.Parse(" r1: expr :")); - } - - TEST_F(Parser, RegNoExprRule) { -- EXPECT_CALL(mock_handler, RegisterRule("r1", "expr")) -+ EXPECT_CALL(mock_handler, RegisterRule(ToUniqueString("r1"), "expr")) - .Times(AtMost(1)) - .WillRepeatedly(Return()); - EXPECT_FALSE(parser.Parse("r0: r1: expr")); - } - - class ParseHandlerFixture: public CFIFixture { - public: - ParseHandlerFixture() : CFIFixture(), handler(&cfi) { } - CFIFrameInfoParseHandler handler; - }; - - class ParseHandler: public ParseHandlerFixture, public Test { }; - - TEST_F(ParseHandler, CFARARule) { - handler.CFARule("reg-for-cfa"); - handler.RARule("reg-for-ra"); -- registers["reg-for-cfa"] = 0x268a9a4a3821a797ULL; -- registers["reg-for-ra"] = 0x6301b475b8b91c02ULL; -+ registers[ToUniqueString("reg-for-cfa")] = 0x268a9a4a3821a797ULL; -+ registers[ToUniqueString("reg-for-ra")] = 0x6301b475b8b91c02ULL; - ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); -- ASSERT_EQ(0x268a9a4a3821a797ULL, caller_registers[".cfa"]); -- ASSERT_EQ(0x6301b475b8b91c02ULL, caller_registers[".ra"]); -+ ASSERT_EQ(0x268a9a4a3821a797ULL, caller_registers[ustr__ZDcfa()]); -+ ASSERT_EQ(0x6301b475b8b91c02ULL, caller_registers[ustr__ZDra()]); - } - - TEST_F(ParseHandler, RegisterRules) { - handler.CFARule("reg-for-cfa"); - handler.RARule("reg-for-ra"); -- handler.RegisterRule("reg1", "reg-for-reg1"); -- handler.RegisterRule("reg2", "reg-for-reg2"); -- registers["reg-for-cfa"] = 0x268a9a4a3821a797ULL; -- registers["reg-for-ra"] = 0x6301b475b8b91c02ULL; -- registers["reg-for-reg1"] = 0x06cde8e2ff062481ULL; -- registers["reg-for-reg2"] = 0xff0c4f76403173e2ULL; -+ handler.RegisterRule(ToUniqueString("reg1"), "reg-for-reg1"); -+ handler.RegisterRule(ToUniqueString("reg2"), "reg-for-reg2"); -+ registers[ToUniqueString("reg-for-cfa")] = 0x268a9a4a3821a797ULL; -+ registers[ToUniqueString("reg-for-ra")] = 0x6301b475b8b91c02ULL; -+ registers[ToUniqueString("reg-for-reg1")] = 0x06cde8e2ff062481ULL; -+ registers[ToUniqueString("reg-for-reg2")] = 0xff0c4f76403173e2ULL; - ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); -- ASSERT_EQ(0x268a9a4a3821a797ULL, caller_registers[".cfa"]); -- ASSERT_EQ(0x6301b475b8b91c02ULL, caller_registers[".ra"]); -- ASSERT_EQ(0x06cde8e2ff062481ULL, caller_registers["reg1"]); -- ASSERT_EQ(0xff0c4f76403173e2ULL, caller_registers["reg2"]); -+ ASSERT_EQ(0x268a9a4a3821a797ULL, caller_registers[ustr__ZDcfa()]); -+ ASSERT_EQ(0x6301b475b8b91c02ULL, caller_registers[ustr__ZDra()]); -+ ASSERT_EQ(0x06cde8e2ff062481ULL, caller_registers[ToUniqueString("reg1")]); -+ ASSERT_EQ(0xff0c4f76403173e2ULL, caller_registers[ToUniqueString("reg2")]); - } - - struct SimpleCFIWalkerFixture { - struct RawContext { - uint64_t r0, r1, r2, r3, r4, sp, pc; - }; - enum Validity { - R0_VALID = 0x01, -@@ -475,23 +493,23 @@ - CFIFrameInfo call_frame_info; - CFIWalker walker; - MockMemoryRegion memory; - RawContext callee_context, caller_context; - }; - - SimpleCFIWalkerFixture::CFIWalker::RegisterSet - SimpleCFIWalkerFixture::register_map[7] = { -- { "r0", NULL, true, R0_VALID, &RawContext::r0 }, -- { "r1", NULL, true, R1_VALID, &RawContext::r1 }, -- { "r2", NULL, false, R2_VALID, &RawContext::r2 }, -- { "r3", NULL, false, R3_VALID, &RawContext::r3 }, -- { "r4", NULL, true, R4_VALID, &RawContext::r4 }, -- { "sp", ".cfa", true, SP_VALID, &RawContext::sp }, -- { "pc", ".ra", true, PC_VALID, &RawContext::pc }, -+ { ToUniqueString("r0"), NULL, true, R0_VALID, &RawContext::r0 }, -+ { ToUniqueString("r1"), NULL, true, R1_VALID, &RawContext::r1 }, -+ { ToUniqueString("r2"), NULL, false, R2_VALID, &RawContext::r2 }, -+ { ToUniqueString("r3"), NULL, false, R3_VALID, &RawContext::r3 }, -+ { ToUniqueString("r4"), NULL, true, R4_VALID, &RawContext::r4 }, -+ { ToUniqueString("sp"), ustr__ZDcfa(), true, SP_VALID, &RawContext::sp }, -+ { ToUniqueString("pc"), ustr__ZDra(), true, PC_VALID, &RawContext::pc }, - }; - - class SimpleWalker: public SimpleCFIWalkerFixture, public Test { }; - - TEST_F(SimpleWalker, Walk) { - // Stack_top is the current stack pointer, pointing to the lowest - // address of a frame that looks like this (all 64-bit words): - // -@@ -516,18 +534,20 @@ - // Saved return address. - EXPECT_CALL(memory, - GetMemoryAtAddress(stack_top + 16, A())) - .WillRepeatedly(DoAll(SetArgumentPointee<1>(0xba5ad6d9acce28deULL), - Return(true))); - - call_frame_info.SetCFARule(Module::Expr("sp 24 +")); - call_frame_info.SetRARule(Module::Expr(".cfa 8 - ^")); -- call_frame_info.SetRegisterRule("r0", Module::Expr(".cfa 24 - ^")); -- call_frame_info.SetRegisterRule("r1", Module::Expr("r2")); -+ call_frame_info.SetRegisterRule(ToUniqueString("r0"), -+ Module::Expr(".cfa 24 - ^")); -+ call_frame_info.SetRegisterRule(ToUniqueString("r1"), -+ Module::Expr("r2")); - - callee_context.r0 = 0x94e030ca79edd119ULL; - callee_context.r1 = 0x937b4d7e95ce52d9ULL; - callee_context.r2 = 0x5fe0027416b8b62aULL; // caller's r1 - // callee_context.r3 is not valid in callee. - // callee_context.r4 is not valid in callee. - callee_context.sp = stack_top; - callee_context.pc = 0x25b21b224311d280ULL; -diff --git a/src/processor/fast_source_line_resolver_unittest.cc b/src/processor/fast_source_line_resolver_unittest.cc ---- a/src/processor/fast_source_line_resolver_unittest.cc -+++ b/src/processor/fast_source_line_resolver_unittest.cc -@@ -51,25 +51,34 @@ - #include "processor/module_serializer.h" - #include "processor/module_comparer.h" - - namespace { - - using google_breakpad::SourceLineResolverBase; - using google_breakpad::BasicSourceLineResolver; - using google_breakpad::FastSourceLineResolver; -+using google_breakpad::FromUniqueString; - using google_breakpad::ModuleSerializer; - using google_breakpad::ModuleComparer; - using google_breakpad::CFIFrameInfo; - using google_breakpad::CodeModule; - using google_breakpad::MemoryRegion; - using google_breakpad::StackFrame; -+using google_breakpad::ToUniqueString; - using google_breakpad::WindowsFrameInfo; - using google_breakpad::linked_ptr; - using google_breakpad::scoped_ptr; -+using google_breakpad::ustr__ZDcfa; -+using google_breakpad::ustr__ZDra; -+using google_breakpad::ustr__ZSebx; -+using google_breakpad::ustr__ZSebp; -+using google_breakpad::ustr__ZSedi; -+using google_breakpad::ustr__ZSesi; -+using google_breakpad::ustr__ZSesp; - - class TestCodeModule : public CodeModule { - public: - explicit TestCodeModule(string code_file) : code_file_(code_file) {} - virtual ~TestCodeModule() {} - - virtual uint64_t base_address() const { return 0; } - virtual uint64_t size() const { return 0xb000; } -@@ -119,34 +128,34 @@ - // association. (That is, ACTUAL's associations should be a subset of - // EXPECTED's.) Also verify that ACTUAL has associations for ".ra" and - // ".cfa". - static bool VerifyRegisters( - const char *file, int line, - const CFIFrameInfo::RegisterValueMap &expected, - const CFIFrameInfo::RegisterValueMap &actual) { - CFIFrameInfo::RegisterValueMap::const_iterator a; -- a = actual.find(".cfa"); -+ a = actual.find(ustr__ZDcfa()); - if (a == actual.end()) - return false; -- a = actual.find(".ra"); -+ a = actual.find(ustr__ZDra()); - if (a == actual.end()) - return false; - for (a = actual.begin(); a != actual.end(); a++) { - CFIFrameInfo::RegisterValueMap::const_iterator e = - expected.find(a->first); - if (e == expected.end()) { - fprintf(stderr, "%s:%d: unexpected register '%s' recovered, value 0x%x\n", -- file, line, a->first.c_str(), a->second); -+ file, line, FromUniqueString(a->first), a->second); - return false; - } - if (e->second != a->second) { - fprintf(stderr, - "%s:%d: register '%s' recovered value was 0x%x, expected 0x%x\n", -- file, line, a->first.c_str(), a->second, e->second); -+ file, line, FromUniqueString(a->first), a->second, e->second); - return false; - } - // Don't complain if this doesn't recover all registers. Although - // the DWARF spec says that unmentioned registers are undefined, - // GCC uses omission to mean that they are unchanged. - } - return true; - } -@@ -282,81 +291,81 @@ - - CFIFrameInfo::RegisterValueMap current_registers; - CFIFrameInfo::RegisterValueMap caller_registers; - CFIFrameInfo::RegisterValueMap expected_caller_registers; - MockMemoryRegion memory; - - // Regardless of which instruction evaluation takes place at, it - // should produce the same values for the caller's registers. -- expected_caller_registers[".cfa"] = 0x1001c; -- expected_caller_registers[".ra"] = 0xf6438648; -- expected_caller_registers["$ebp"] = 0x10038; -- expected_caller_registers["$ebx"] = 0x98ecadc3; -- expected_caller_registers["$esi"] = 0x878f7524; -- expected_caller_registers["$edi"] = 0x6312f9a5; -+ expected_caller_registers[ustr__ZDcfa()] = 0x1001c; -+ expected_caller_registers[ustr__ZDra()] = 0xf6438648; -+ expected_caller_registers[ustr__ZSebp()] = 0x10038; -+ expected_caller_registers[ustr__ZSebx()] = 0x98ecadc3; -+ expected_caller_registers[ustr__ZSesi()] = 0x878f7524; -+ expected_caller_registers[ustr__ZSedi()] = 0x6312f9a5; - - frame.instruction = 0x3d40; - frame.module = &module1; - current_registers.clear(); -- current_registers["$esp"] = 0x10018; -- current_registers["$ebp"] = 0x10038; -- current_registers["$ebx"] = 0x98ecadc3; -- current_registers["$esi"] = 0x878f7524; -- current_registers["$edi"] = 0x6312f9a5; -+ current_registers[ustr__ZSesp()] = 0x10018; -+ current_registers[ustr__ZSebp()] = 0x10038; -+ current_registers[ustr__ZSebx()] = 0x98ecadc3; -+ current_registers[ustr__ZSesi()] = 0x878f7524; -+ current_registers[ustr__ZSedi()] = 0x6312f9a5; - cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame)); - ASSERT_TRUE(cfi_frame_info.get()); - ASSERT_TRUE(cfi_frame_info.get() - ->FindCallerRegs(current_registers, memory, - &caller_registers)); - ASSERT_TRUE(VerifyRegisters(__FILE__, __LINE__, - expected_caller_registers, caller_registers)); - - frame.instruction = 0x3d41; -- current_registers["$esp"] = 0x10014; -+ current_registers[ustr__ZSesp()] = 0x10014; - cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame)); - ASSERT_TRUE(cfi_frame_info.get()); - ASSERT_TRUE(cfi_frame_info.get() - ->FindCallerRegs(current_registers, memory, - &caller_registers)); - ASSERT_TRUE(VerifyRegisters(__FILE__, __LINE__, - expected_caller_registers, caller_registers)); - - frame.instruction = 0x3d43; -- current_registers["$ebp"] = 0x10014; -+ current_registers[ustr__ZSebp()] = 0x10014; - cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame)); - ASSERT_TRUE(cfi_frame_info.get()); - ASSERT_TRUE(cfi_frame_info.get() - ->FindCallerRegs(current_registers, memory, - &caller_registers)); - VerifyRegisters(__FILE__, __LINE__, - expected_caller_registers, caller_registers); - - frame.instruction = 0x3d54; -- current_registers["$ebx"] = 0x6864f054U; -+ current_registers[ustr__ZSebx()] = 0x6864f054U; - cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame)); - ASSERT_TRUE(cfi_frame_info.get()); - ASSERT_TRUE(cfi_frame_info.get() - ->FindCallerRegs(current_registers, memory, - &caller_registers)); - VerifyRegisters(__FILE__, __LINE__, - expected_caller_registers, caller_registers); - - frame.instruction = 0x3d5a; -- current_registers["$esi"] = 0x6285f79aU; -+ current_registers[ustr__ZSesi()] = 0x6285f79aU; - cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame)); - ASSERT_TRUE(cfi_frame_info.get()); - ASSERT_TRUE(cfi_frame_info.get() - ->FindCallerRegs(current_registers, memory, - &caller_registers)); - VerifyRegisters(__FILE__, __LINE__, - expected_caller_registers, caller_registers); - - frame.instruction = 0x3d84; -- current_registers["$edi"] = 0x64061449U; -+ current_registers[ustr__ZSedi()] = 0x64061449U; - cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame)); - ASSERT_TRUE(cfi_frame_info.get()); - ASSERT_TRUE(cfi_frame_info.get() - ->FindCallerRegs(current_registers, memory, - &caller_registers)); - VerifyRegisters(__FILE__, __LINE__, - expected_caller_registers, caller_registers); - -diff --git a/src/processor/postfix_evaluator-inl.h b/src/processor/postfix_evaluator-inl.h ---- a/src/processor/postfix_evaluator-inl.h -+++ b/src/processor/postfix_evaluator-inl.h -@@ -51,23 +51,25 @@ - namespace google_breakpad { - - using std::istringstream; - using std::ostringstream; - - - // A small class used in Evaluate to make sure to clean up the stack - // before returning failure. -+template - class AutoStackClearer { - public: -- explicit AutoStackClearer(vector *stack) : stack_(stack) {} -+ explicit AutoStackClearer(vector > *stack) -+ : stack_(stack) {} - ~AutoStackClearer() { stack_->clear(); } - - private: -- vector *stack_; -+ vector > *stack_; - }; - - - template - bool PostfixEvaluator::EvaluateToken( - const string &token, - const string &expression, - DictionaryValidityType *assigned) { -@@ -170,38 +172,57 @@ - BPLOG(INFO) << "Could not PopValue to get value to assign: " << - expression; - return false; - } - - // Assignment is only meaningful when assigning into an identifier. - // The identifier must name a variable, not a constant. Variables - // begin with '$'. -- string identifier; -+ const UniqueString* identifier; - if (PopValueOrIdentifier(NULL, &identifier) != POP_RESULT_IDENTIFIER) { - BPLOG(ERROR) << "PopValueOrIdentifier returned a value, but an " - "identifier is needed to assign " << - HexString(value) << ": " << expression; - return false; - } -- if (identifier.empty() || identifier[0] != '$') { -+ if (identifier == ustr__empty() || Index(identifier,0) != '$') { - BPLOG(ERROR) << "Can't assign " << HexString(value) << " to " << - identifier << ": " << expression; - return false; - } - - (*dictionary_)[identifier] = value; - if (assigned) - (*assigned)[identifier] = true; - } else { -- // The token is not an operator, it's a literal value or an identifier. -- // Push it onto the stack as-is. Use push_back instead of PushValue -- // because PushValue pushes ValueType as a string, but token is already -- // a string. -- stack_.push_back(token); -+ // Push it onto the stack as-is, but first convert it either to a -+ // ValueType (if a literal) or to a UniqueString* (if an identifier). -+ // -+ // First, try to treat the value as a literal. Literals may have leading -+ // '-' sign, and the entire remaining string must be parseable as -+ // ValueType. If this isn't possible, it can't be a literal, so treat it -+ // as an identifier instead. -+ // -+ // 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). Since we require it, we -+ // handle it explicitly here. -+ istringstream token_stream(token); -+ ValueType literal = ValueType(); -+ bool negative = false; -+ if (token_stream.peek() == '-') { -+ negative = true; -+ token_stream.get(); -+ } -+ if (token_stream >> literal && token_stream.peek() == EOF) { -+ PushValue(negative ? (-literal) : literal); -+ } else { -+ PushIdentifier(ToUniqueString(token)); -+ } - } - return true; - } - - template - bool PostfixEvaluator::EvaluateInternal( - const string &expression, - DictionaryValidityType *assigned) { -@@ -236,17 +257,17 @@ - // The expression is being exevaluated only for its side effects. Skip - // expressions that denote values only. - if (expr.how_ != Module::kExprPostfix) { - BPLOG(ERROR) << "Can't evaluate for side-effects: " << expr; - return false; - } - - // Ensure that the stack is cleared before returning. -- AutoStackClearer clearer(&stack_); -+ AutoStackClearer clearer(&stack_); - - if (!EvaluateInternal(expr.postfix_, assigned)) - return false; - - // If there's anything left on the stack, it indicates incomplete execution. - // This is a failure case. If the stack is empty, evalution was complete - // and successful. - if (stack_.empty()) -@@ -260,17 +281,17 @@ - bool PostfixEvaluator::EvaluateForValue(const Module::Expr& expr, - ValueType* result) { - switch (expr.how_) { - - // Postfix expression. Give to the evaluator and return the - // one-and-only stack element that should be left over. - case Module::kExprPostfix: { - // Ensure that the stack is cleared before returning. -- AutoStackClearer clearer(&stack_); -+ AutoStackClearer clearer(&stack_); - - if (!EvaluateInternal(expr.postfix_, NULL)) - return false; - - // A successful execution should leave exactly one value on the stack. - if (stack_.size() != 1) { - BPLOG(ERROR) << "Expression yielded bad number of results: " - << "'" << expr << "'"; -@@ -314,77 +335,56 @@ - return false; - } - } - - - template - typename PostfixEvaluator::PopResult - PostfixEvaluator::PopValueOrIdentifier( -- ValueType *value, string *identifier) { -+ ValueType *value, const UniqueString** identifier) { - // There needs to be at least one element on the stack to pop. - if (!stack_.size()) - return POP_RESULT_FAIL; - -- string token = stack_.back(); -+ StackElem el = stack_.back(); - stack_.pop_back(); - -- // First, try to treat the value as a literal. Literals may have leading -- // '-' sign, and the entire remaining string must be parseable as -- // ValueType. If this isn't possible, it can't be a literal, so treat it -- // as an identifier instead. -- // -- // 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). Since we require it, we -- // handle it explicitly here. -- istringstream token_stream(token); -- ValueType literal = ValueType(); -- bool negative; -- if (token_stream.peek() == '-') { -- negative = true; -- token_stream.get(); -- } else { -- negative = false; -- } -- if (token_stream >> literal && token_stream.peek() == EOF) { -- if (value) { -- *value = literal; -- } -- if (negative) -- *value = -*value; -+ if (el.isValue) { -+ if (value) -+ *value = el.u.val; - return POP_RESULT_VALUE; - } else { -- if (identifier) { -- *identifier = token; -- } -+ if (identifier) -+ *identifier = el.u.ustr; - return POP_RESULT_IDENTIFIER; - } - } - - - template - bool PostfixEvaluator::PopValue(ValueType *value) { - ValueType literal = ValueType(); -- string token; -+ const UniqueString* token; - PopResult result; - if ((result = PopValueOrIdentifier(&literal, &token)) == POP_RESULT_FAIL) { - return false; - } else if (result == POP_RESULT_VALUE) { - // This is the easy case. - *value = literal; - } else { // result == POP_RESULT_IDENTIFIER - // There was an identifier at the top of the stack. Resolve it to a - // value by looking it up in the dictionary. - typename DictionaryType::const_iterator iterator = - dictionary_->find(token); - if (iterator == dictionary_->end()) { - // The identifier wasn't found in the dictionary. Don't imply any - // default value, just fail. -- BPLOG(INFO) << "Identifier " << token << " not in dictionary"; -+ BPLOG(INFO) << "Identifier " << FromUniqueString(token) -+ << " not in dictionary"; - return false; - } - - *value = iterator->second; - } - - return true; - } -@@ -394,18 +394,23 @@ - bool PostfixEvaluator::PopValues(ValueType *value1, - ValueType *value2) { - return PopValue(value2) && PopValue(value1); - } - - - template - void PostfixEvaluator::PushValue(const ValueType &value) { -- ostringstream token_stream; -- token_stream << value; -- stack_.push_back(token_stream.str()); -+ StackElem el(value); -+ stack_.push_back(el); -+} -+ -+template -+void PostfixEvaluator::PushIdentifier(const UniqueString* str) { -+ StackElem el(str); -+ stack_.push_back(el); - } - - - } // namespace google_breakpad - - - #endif // PROCESSOR_POSTFIX_EVALUATOR_INL_H__ -diff --git a/src/processor/postfix_evaluator.h b/src/processor/postfix_evaluator.h ---- a/src/processor/postfix_evaluator.h -+++ b/src/processor/postfix_evaluator.h -@@ -70,30 +70,41 @@ - #define PROCESSOR_POSTFIX_EVALUATOR_H__ - - - #include - #include - #include - - #include "common/using_std_string.h" -+#include "common/unique_string.h" - #include "common/module.h" - - namespace google_breakpad { - - using std::map; - using std::vector; - - class MemoryRegion; - -+// A union type for elements in the postfix evaluator's stack. -+template -+class StackElem { -+ public: -+ StackElem(ValueType val) { isValue = true; u.val = val; } -+ StackElem(const UniqueString* ustr) { isValue = false; u.ustr = ustr; } -+ bool isValue; -+ union { ValueType val; const UniqueString* ustr; } u; -+}; -+ - template - class PostfixEvaluator { - public: -- typedef map DictionaryType; -- typedef map DictionaryValidityType; -+ typedef map DictionaryType; -+ typedef map DictionaryValidityType; - - // Create a PostfixEvaluator object that may be used (with Evaluate) on - // one or more expressions. PostfixEvaluator does not take ownership of - // either argument. |memory| may be NULL, in which case dereferencing - // (^) will not be supported. |dictionary| may be NULL, but evaluation - // will fail in that case unless set_dictionary is used before calling - // Evaluate. - PostfixEvaluator(DictionaryType *dictionary, const MemoryRegion *memory) -@@ -128,24 +139,28 @@ - }; - - // Retrieves the topmost literal value, constant, or variable from the - // stack. Returns POP_RESULT_VALUE if the topmost entry is a literal - // value, and sets |value| accordingly. Returns POP_RESULT_IDENTIFIER - // if the topmost entry is a constant or variable identifier, and sets - // |identifier| accordingly. Returns POP_RESULT_FAIL on failure, such - // as when the stack is empty. -- PopResult PopValueOrIdentifier(ValueType *value, string *identifier); -+ PopResult PopValueOrIdentifier(ValueType *value, -+ const UniqueString** identifier); - - // Retrieves the topmost value on the stack. If the topmost entry is - // an identifier, the dictionary is queried for the identifier's value. - // Returns false on failure, such as when the stack is empty or when - // a nonexistent identifier is named. - bool PopValue(ValueType *value); - -+ // Pushes a UniqueString* on the stack. -+ void PushIdentifier(const UniqueString* ustr); -+ - // Retrieves the top two values on the stack, in the style of PopValue. - // value2 is popped before value1, so that value1 corresponds to the - // entry that was pushed prior to value2. Returns false on failure. - bool PopValues(ValueType *value1, ValueType *value2); - - // Pushes a new value onto the stack. - void PushValue(const ValueType &value); - -@@ -166,15 +181,15 @@ - - // If non-NULL, the MemoryRegion used for dereference (^) operations. - // If NULL, dereferencing is unsupported and will fail. Weak pointer. - const MemoryRegion *memory_; - - // The stack contains state information as execution progresses. Values - // are pushed on to it as the expression string is read and as operations - // yield values; values are popped when used as operands to operators. -- vector stack_; -+ vector > stack_; - }; - - } // namespace google_breakpad - - - #endif // PROCESSOR_POSTFIX_EVALUATOR_H__ -diff --git a/src/processor/postfix_evaluator_unittest.cc b/src/processor/postfix_evaluator_unittest.cc ---- a/src/processor/postfix_evaluator_unittest.cc -+++ b/src/processor/postfix_evaluator_unittest.cc -@@ -43,18 +43,32 @@ - #include "google_breakpad/processor/memory_region.h" - #include "processor/logging.h" - - - namespace { - - - using std::map; -+using google_breakpad::FromUniqueString; - using google_breakpad::MemoryRegion; - using google_breakpad::PostfixEvaluator; -+using google_breakpad::ToUniqueString; -+using google_breakpad::UniqueString; -+using google_breakpad::ustr__ZDcbParams; -+using google_breakpad::ustr__ZDcbSavedRegs; -+using google_breakpad::ustr__ZDcfa; -+using google_breakpad::ustr__ZDra; -+using google_breakpad::ustr__ZDraSearchStart; -+using google_breakpad::ustr__ZSebx; -+using google_breakpad::ustr__ZSebp; -+using google_breakpad::ustr__ZSedi; -+using google_breakpad::ustr__ZSeip; -+using google_breakpad::ustr__ZSesi; -+using google_breakpad::ustr__ZSesp; - - - // FakeMemoryRegion is used to test PostfixEvaluator's dereference (^) - // operator. The result of dereferencing a value is one greater than - // the value. - class FakeMemoryRegion : public MemoryRegion { - public: - virtual uint64_t GetBase() const { return 0; } -@@ -95,17 +109,17 @@ - // The list of tests. - const EvaluateTest *evaluate_tests; - - // The number of tests. - unsigned int evaluate_test_count; - - // Identifiers and their expected values upon completion of the Evaluate - // tests in the set. -- map *validate_data; -+ map *validate_data; - }; - - - struct EvaluateForValueTest { - // Expression passed to PostfixEvaluator::Evaluate. - const string expression; - - // True if the expression is expected to be evaluable, false if evaluation -@@ -147,39 +161,39 @@ - { "$rMul 9 6 * =", true }, // $rMul = 9 * 6 = 54 - { "$rSub 9 6 - =", true }, // $rSub = 9 - 6 = 3 - { "$rDivQ 9 6 / =", true }, // $rDivQ = 9 / 6 = 1 - { "$rDivM 9 6 % =", true }, // $rDivM = 9 % 6 = 3 - { "$rDeref 9 ^ =", true }, // $rDeref = ^9 = 10 (FakeMemoryRegion) - { "$rAlign 36 8 @ =", true }, // $rAlign = 36 @ 8 - { "$rAdd3 2 2 + =$rMul2 9 6 * =", true } // smashed-equals tokenization - }; -- map validate_data_0; -- validate_data_0["$rAdd"] = 8; -- validate_data_0["$rAdd2"] = 4; -- validate_data_0["$rSub"] = 3; -- validate_data_0["$rMul"] = 54; -- validate_data_0["$rDivQ"] = 1; -- validate_data_0["$rDivM"] = 3; -- validate_data_0["$rDeref"] = 10; -- validate_data_0["$rAlign"] = 32; -- validate_data_0["$rAdd3"] = 4; -- validate_data_0["$rMul2"] = 54; -+ map validate_data_0; -+ validate_data_0[ToUniqueString("$rAdd")] = 8; -+ validate_data_0[ToUniqueString("$rAdd2")] = 4; -+ validate_data_0[ToUniqueString("$rSub")] = 3; -+ validate_data_0[ToUniqueString("$rMul")] = 54; -+ validate_data_0[ToUniqueString("$rDivQ")] = 1; -+ validate_data_0[ToUniqueString("$rDivM")] = 3; -+ validate_data_0[ToUniqueString("$rDeref")] = 10; -+ validate_data_0[ToUniqueString("$rAlign")] = 32; -+ validate_data_0[ToUniqueString("$rAdd3")] = 4; -+ validate_data_0[ToUniqueString("$rMul2")] = 54; - - // The second test set simulates a couple of MSVC program strings. - // The data is fudged a little bit because the tests use FakeMemoryRegion - // instead of a real stack snapshot, but the program strings are real and - // the implementation doesn't know or care that the data is not real. - PostfixEvaluator::DictionaryType dictionary_1; -- dictionary_1["$ebp"] = 0xbfff0010; -- dictionary_1["$eip"] = 0x10000000; -- dictionary_1["$esp"] = 0xbfff0000; -- dictionary_1[".cbSavedRegs"] = 4; -- dictionary_1[".cbParams"] = 4; -- dictionary_1[".raSearchStart"] = 0xbfff0020; -+ dictionary_1[ustr__ZSebp()] = 0xbfff0010; -+ dictionary_1[ustr__ZSeip()] = 0x10000000; -+ dictionary_1[ustr__ZSesp()] = 0xbfff0000; -+ dictionary_1[ustr__ZDcbSavedRegs()] = 4; -+ dictionary_1[ustr__ZDcbParams()] = 4; -+ dictionary_1[ustr__ZDraSearchStart()] = 0xbfff0020; - const EvaluateTest evaluate_tests_1[] = { - { "$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = " - "$L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =", true }, - // Intermediate state: $T0 = 0xbfff0010, $eip = 0xbfff0015, - // $ebp = 0xbfff0011, $esp = 0xbfff0018, - // $L = 0xbfff000c, $P = 0xbfff001c - { "$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = " - "$L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ =", -@@ -188,28 +202,28 @@ - // $ebp = 0xbfff0012, $esp = 0xbfff0019, - // $L = 0xbfff000d, $P = 0xbfff001d, - // $ebx = 0xbffefff6 - { "$T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = " - "$esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = " - "$ebx $T0 28 - ^ =", - true } - }; -- map validate_data_1; -- validate_data_1["$T0"] = 0xbfff0012; -- validate_data_1["$T1"] = 0xbfff0020; -- validate_data_1["$T2"] = 0xbfff0019; -- validate_data_1["$eip"] = 0xbfff0021; -- validate_data_1["$ebp"] = 0xbfff0012; -- validate_data_1["$esp"] = 0xbfff0024; -- validate_data_1["$L"] = 0xbfff000e; -- validate_data_1["$P"] = 0xbfff0028; -- validate_data_1["$ebx"] = 0xbffefff7; -- validate_data_1[".cbSavedRegs"] = 4; -- validate_data_1[".cbParams"] = 4; -+ map validate_data_1; -+ validate_data_1[ToUniqueString("$T0")] = 0xbfff0012; -+ validate_data_1[ToUniqueString("$T1")] = 0xbfff0020; -+ validate_data_1[ToUniqueString("$T2")] = 0xbfff0019; -+ validate_data_1[ustr__ZSeip()] = 0xbfff0021; -+ validate_data_1[ustr__ZSebp()] = 0xbfff0012; -+ validate_data_1[ustr__ZSesp()] = 0xbfff0024; -+ validate_data_1[ToUniqueString("$L")] = 0xbfff000e; -+ validate_data_1[ToUniqueString("$P")] = 0xbfff0028; -+ validate_data_1[ustr__ZSebx()] = 0xbffefff7; -+ validate_data_1[ustr__ZDcbSavedRegs()] = 4; -+ validate_data_1[ustr__ZDcbParams()] = 4; - - EvaluateTestSet evaluate_test_sets[] = { - { &dictionary_0, evaluate_tests_0, - sizeof(evaluate_tests_0) / sizeof(EvaluateTest), &validate_data_0 }, - { &dictionary_1, evaluate_tests_1, - sizeof(evaluate_tests_1) / sizeof(EvaluateTest), &validate_data_1 }, - }; - -@@ -251,97 +265,100 @@ - evaluate_test->expression.c_str(), - evaluate_test->evaluable ? "evaluable" : "not evaluable", - result ? "evaluted" : "not evaluated"); - return false; - } - } - - // Validate the results. -- for (map::const_iterator validate_iterator = -+ for (map::const_iterator -+ validate_iterator = - evaluate_test_set->validate_data->begin(); - validate_iterator != evaluate_test_set->validate_data->end(); - ++validate_iterator) { -- const string identifier = validate_iterator->first; -+ const UniqueString* identifier = validate_iterator->first; - unsigned int expected_value = validate_iterator->second; - -- map::const_iterator dictionary_iterator = -+ map::const_iterator -+ dictionary_iterator = - evaluate_test_set->dictionary->find(identifier); - - // The identifier must exist in the dictionary. - if (dictionary_iterator == evaluate_test_set->dictionary->end()) { - fprintf(stderr, "FAIL: evaluate test set %d/%d, " - "validate identifier \"%s\", " - "expected %d, observed not found\n", - evaluate_test_set_index, evaluate_test_set_count, -- identifier.c_str(), expected_value); -+ FromUniqueString(identifier), expected_value); - return false; - } - - // The value in the dictionary must be the same as the expected value. - unsigned int observed_value = dictionary_iterator->second; - if (expected_value != observed_value) { - fprintf(stderr, "FAIL: evaluate test set %d/%d, " - "validate identifier \"%s\", " - "expected %d, observed %d\n", - evaluate_test_set_index, evaluate_test_set_count, -- identifier.c_str(), expected_value, observed_value); -+ FromUniqueString(identifier), expected_value, observed_value); - return false; - } - - // The value must be set in the "assigned" dictionary if it was a - // variable. It must not have been assigned if it was a constant. -- bool expected_assigned = identifier[0] == '$'; -+ bool expected_assigned = FromUniqueString(identifier)[0] == '$'; - bool observed_assigned = false; - PostfixEvaluator::DictionaryValidityType::const_iterator - iterator_assigned = assigned.find(identifier); - if (iterator_assigned != assigned.end()) { - observed_assigned = iterator_assigned->second; - } - if (expected_assigned != observed_assigned) { - fprintf(stderr, "FAIL: evaluate test set %d/%d, " - "validate assignment of \"%s\", " - "expected %d, observed %d\n", - evaluate_test_set_index, evaluate_test_set_count, -- identifier.c_str(), expected_assigned, observed_assigned); -+ FromUniqueString(identifier), expected_assigned, -+ observed_assigned); - return false; - } - } - } - - // EvaluateForValue tests. - PostfixEvaluator::DictionaryType dictionary_2; -- dictionary_2["$ebp"] = 0xbfff0010; -- dictionary_2["$eip"] = 0x10000000; -- dictionary_2["$esp"] = 0xbfff0000; -- dictionary_2[".cbSavedRegs"] = 4; -- dictionary_2[".cbParams"] = 4; -- dictionary_2[".raSearchStart"] = 0xbfff0020; -+ dictionary_2[ustr__ZSebp()] = 0xbfff0010; -+ dictionary_2[ustr__ZSeip()] = 0x10000000; -+ dictionary_2[ustr__ZSesp()] = 0xbfff0000; -+ dictionary_2[ustr__ZDcbSavedRegs()] = 4; -+ dictionary_2[ustr__ZDcbParams()] = 4; -+ dictionary_2[ustr__ZDraSearchStart()] = 0xbfff0020; - const EvaluateForValueTest evaluate_for_value_tests_2[] = { - { "28907223", true, 28907223 }, // simple constant - { "89854293 40010015 +", true, 89854293 + 40010015 }, // arithmetic - { "-870245 8769343 +", true, 7899098 }, // negative constants - { "$ebp $esp - $eip +", true, 0x10000010 }, // variable references - { "18929794 34015074", false, 0 }, // too many values - { "$ebp $ebp 4 - =", false, 0 }, // too few values - { "$new $eip = $new", true, 0x10000000 }, // make new variable - { "$new 4 +", true, 0x10000004 }, // see prior assignments - { ".cfa 42 = 10", false, 0 } // can't set constants - }; - const int evaluate_for_value_tests_2_size - = (sizeof (evaluate_for_value_tests_2) - / sizeof (evaluate_for_value_tests_2[0])); -- map validate_data_2; -- validate_data_2["$eip"] = 0x10000000; -- validate_data_2["$ebp"] = 0xbfff000c; -- validate_data_2["$esp"] = 0xbfff0000; -- validate_data_2["$new"] = 0x10000000; -- validate_data_2[".cbSavedRegs"] = 4; -- validate_data_2[".cbParams"] = 4; -- validate_data_2[".raSearchStart"] = 0xbfff0020; -+ map validate_data_2; -+ validate_data_2[ustr__ZSeip()] = 0x10000000; -+ validate_data_2[ustr__ZSebp()] = 0xbfff000c; -+ validate_data_2[ustr__ZSesp()] = 0xbfff0000; -+ validate_data_2[ToUniqueString("$new")] = 0x10000000; -+ validate_data_2[ustr__ZDcbSavedRegs()] = 4; -+ validate_data_2[ustr__ZDcbParams()] = 4; -+ validate_data_2[ustr__ZDraSearchStart()] = 0xbfff0020; - - postfix_evaluator.set_dictionary(&dictionary_2); - for (int i = 0; i < evaluate_for_value_tests_2_size; i++) { - const EvaluateForValueTest *test = &evaluate_for_value_tests_2[i]; - unsigned int result; - if (postfix_evaluator.EvaluateForValue(test->expression, &result) - != test->evaluable) { - fprintf(stderr, "FAIL: evaluate for value test %d, " -@@ -353,40 +370,43 @@ - if (test->evaluable && result != test->value) { - fprintf(stderr, "FAIL: evaluate for value test %d, " - "expected value to be 0x%x, but it was 0x%x\n", - i, test->value, result); - return false; - } - } - -- for (map::iterator v = validate_data_2.begin(); -+ for (map::iterator v = -+ validate_data_2.begin(); - v != validate_data_2.end(); v++) { -- map::iterator a = dictionary_2.find(v->first); -+ map::iterator a = -+ dictionary_2.find(v->first); - if (a == dictionary_2.end()) { - fprintf(stderr, "FAIL: evaluate for value dictionary check: " - "expected dict[\"%s\"] to be 0x%x, but it was unset\n", -- v->first.c_str(), v->second); -+ FromUniqueString(v->first), v->second); - return false; - } else if (a->second != v->second) { - fprintf(stderr, "FAIL: evaluate for value dictionary check: " - "expected dict[\"%s\"] to be 0x%x, but it was 0x%x\n", -- v->first.c_str(), v->second, a->second); -+ FromUniqueString(v->first), v->second, a->second); - return false; - } - dictionary_2.erase(a); - } - -- map::iterator remaining = dictionary_2.begin(); -+ map::iterator remaining = -+ dictionary_2.begin(); - if (remaining != dictionary_2.end()) { - fprintf(stderr, "FAIL: evaluation of test expressions put unexpected " - "values in dictionary:\n"); - for (; remaining != dictionary_2.end(); remaining++) - fprintf(stderr, " dict[\"%s\"] == 0x%x\n", -- remaining->first.c_str(), remaining->second); -+ FromUniqueString(remaining->first), remaining->second); - return false; - } - - return true; - } - - - } // namespace -diff --git a/src/processor/stackwalker_amd64.cc b/src/processor/stackwalker_amd64.cc ---- a/src/processor/stackwalker_amd64.cc -+++ b/src/processor/stackwalker_amd64.cc -@@ -50,49 +50,49 @@ - - const StackwalkerAMD64::CFIWalker::RegisterSet - StackwalkerAMD64::cfi_register_map_[] = { - // It may seem like $rip and $rsp are callee-saves, because the callee is - // responsible for having them restored upon return. But the callee_saves - // flags here really means that the walker should assume they're - // unchanged if the CFI doesn't mention them --- clearly wrong for $rip - // and $rsp. -- { "$rax", NULL, false, -+ { ToUniqueString("$rax"), NULL, false, - StackFrameAMD64::CONTEXT_VALID_RAX, &MDRawContextAMD64::rax }, -- { "$rdx", NULL, false, -+ { ToUniqueString("$rdx"), NULL, false, - StackFrameAMD64::CONTEXT_VALID_RDX, &MDRawContextAMD64::rdx }, -- { "$rcx", NULL, false, -+ { ToUniqueString("$rcx"), NULL, false, - StackFrameAMD64::CONTEXT_VALID_RCX, &MDRawContextAMD64::rcx }, -- { "$rbx", NULL, true, -+ { ToUniqueString("$rbx"), NULL, true, - StackFrameAMD64::CONTEXT_VALID_RBX, &MDRawContextAMD64::rbx }, -- { "$rsi", NULL, false, -+ { ToUniqueString("$rsi"), NULL, false, - StackFrameAMD64::CONTEXT_VALID_RSI, &MDRawContextAMD64::rsi }, -- { "$rdi", NULL, false, -+ { ToUniqueString("$rdi"), NULL, false, - StackFrameAMD64::CONTEXT_VALID_RDI, &MDRawContextAMD64::rdi }, -- { "$rbp", NULL, true, -+ { ToUniqueString("$rbp"), NULL, true, - StackFrameAMD64::CONTEXT_VALID_RBP, &MDRawContextAMD64::rbp }, -- { "$rsp", ".cfa", false, -+ { ToUniqueString("$rsp"), ToUniqueString(".cfa"), false, - StackFrameAMD64::CONTEXT_VALID_RSP, &MDRawContextAMD64::rsp }, -- { "$r8", NULL, false, -+ { ToUniqueString("$r8"), NULL, false, - StackFrameAMD64::CONTEXT_VALID_R8, &MDRawContextAMD64::r8 }, -- { "$r9", NULL, false, -+ { ToUniqueString("$r9"), NULL, false, - StackFrameAMD64::CONTEXT_VALID_R9, &MDRawContextAMD64::r9 }, -- { "$r10", NULL, false, -+ { ToUniqueString("$r10"), NULL, false, - StackFrameAMD64::CONTEXT_VALID_R10, &MDRawContextAMD64::r10 }, -- { "$r11", NULL, false, -+ { ToUniqueString("$r11"), NULL, false, - StackFrameAMD64::CONTEXT_VALID_R11, &MDRawContextAMD64::r11 }, -- { "$r12", NULL, true, -+ { ToUniqueString("$r12"), NULL, true, - StackFrameAMD64::CONTEXT_VALID_R12, &MDRawContextAMD64::r12 }, -- { "$r13", NULL, true, -+ { ToUniqueString("$r13"), NULL, true, - StackFrameAMD64::CONTEXT_VALID_R13, &MDRawContextAMD64::r13 }, -- { "$r14", NULL, true, -+ { ToUniqueString("$r14"), NULL, true, - StackFrameAMD64::CONTEXT_VALID_R14, &MDRawContextAMD64::r14 }, -- { "$r15", NULL, true, -+ { ToUniqueString("$r15"), NULL, true, - StackFrameAMD64::CONTEXT_VALID_R15, &MDRawContextAMD64::r15 }, -- { "$rip", ".ra", false, -+ { ToUniqueString("$rip"), ToUniqueString(".ra"), false, - StackFrameAMD64::CONTEXT_VALID_RIP, &MDRawContextAMD64::rip }, - }; - - StackwalkerAMD64::StackwalkerAMD64(const SystemInfo* system_info, - const MDRawContextAMD64* context, - MemoryRegion* memory, - const CodeModules* modules, - StackFrameSymbolizer* resolver_helper) -diff --git a/src/processor/stackwalker_arm.cc b/src/processor/stackwalker_arm.cc ---- a/src/processor/stackwalker_arm.cc -+++ b/src/processor/stackwalker_arm.cc -@@ -76,21 +76,30 @@ - return frame; - } - - StackFrameARM* StackwalkerARM::GetCallerByCFIFrameInfo( - const vector &frames, - CFIFrameInfo* cfi_frame_info) { - StackFrameARM* last_frame = static_cast(frames.back()); - -- static const char* register_names[] = { -- "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", -- "r8", "r9", "r10", "r11", "r12", "sp", "lr", "pc", -- "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", -- "fps", "cpsr", -+ static const UniqueString *register_names[] = { -+ ToUniqueString("r0"), ToUniqueString("r1"), -+ ToUniqueString("r2"), ToUniqueString("r3"), -+ ToUniqueString("r4"), ToUniqueString("r5"), -+ ToUniqueString("r6"), ToUniqueString("r7"), -+ ToUniqueString("r8"), ToUniqueString("r9"), -+ ToUniqueString("r10"), ToUniqueString("r11"), -+ ToUniqueString("r12"), ToUniqueString("sp"), -+ ToUniqueString("lr"), ToUniqueString("pc"), -+ ToUniqueString("f0"), ToUniqueString("f1"), -+ ToUniqueString("f2"), ToUniqueString("f3"), -+ ToUniqueString("f4"), ToUniqueString("f5"), -+ ToUniqueString("f6"), ToUniqueString("f7"), -+ ToUniqueString("fps"), ToUniqueString("cpsr"), - NULL - }; - - // Populate a dictionary with the valid register values in last_frame. - CFIFrameInfo::RegisterValueMap callee_registers; - for (int i = 0; register_names[i]; i++) - if (last_frame->context_validity & StackFrameARM::RegisterValidFlag(i)) - callee_registers[register_names[i]] = last_frame->context.iregs[i]; -@@ -119,17 +128,17 @@ - // Call Standard for the ARM Architecture, which the Linux ABI follows. - frame->context_validity |= StackFrameARM::RegisterValidFlag(i); - frame->context.iregs[i] = last_frame->context.iregs[i]; - } - } - // If the CFI doesn't recover the PC explicitly, then use .ra. - if (!(frame->context_validity & StackFrameARM::CONTEXT_VALID_PC)) { - CFIFrameInfo::RegisterValueMap::iterator entry = -- caller_registers.find(".ra"); -+ caller_registers.find(ustr__ZDra()); - if (entry != caller_registers.end()) { - if (fp_register_ == -1) { - frame->context_validity |= StackFrameARM::CONTEXT_VALID_PC; - frame->context.iregs[MD_CONTEXT_ARM_REG_PC] = entry->second; - } else { - // The CFI updated the link register and not the program counter. - // Handle getting the program counter from the link register. - frame->context_validity |= StackFrameARM::CONTEXT_VALID_PC; -@@ -138,17 +147,17 @@ - frame->context.iregs[MD_CONTEXT_ARM_REG_PC] = - last_frame->context.iregs[MD_CONTEXT_ARM_REG_LR]; - } - } - } - // If the CFI doesn't recover the SP explicitly, then use .cfa. - if (!(frame->context_validity & StackFrameARM::CONTEXT_VALID_SP)) { - CFIFrameInfo::RegisterValueMap::iterator entry = -- caller_registers.find(".cfa"); -+ caller_registers.find(ustr__ZDcfa()); - if (entry != caller_registers.end()) { - frame->context_validity |= StackFrameARM::CONTEXT_VALID_SP; - frame->context.iregs[MD_CONTEXT_ARM_REG_SP] = entry->second; - } - } - - // If we didn't recover the PC and the SP, then the frame isn't very useful. - static const int essentials = (StackFrameARM::CONTEXT_VALID_SP -diff --git a/src/processor/stackwalker_x86.cc b/src/processor/stackwalker_x86.cc ---- a/src/processor/stackwalker_x86.cc -+++ b/src/processor/stackwalker_x86.cc -@@ -53,33 +53,33 @@ - - const StackwalkerX86::CFIWalker::RegisterSet - StackwalkerX86::cfi_register_map_[] = { - // It may seem like $eip and $esp are callee-saves, because (with Unix or - // cdecl calling conventions) the callee is responsible for having them - // restored upon return. But the callee_saves flags here really means - // that the walker should assume they're unchanged if the CFI doesn't - // mention them, which is clearly wrong for $eip and $esp. -- { "$eip", ".ra", false, -+ { ToUniqueString("$eip"), ToUniqueString(".ra"), false, - StackFrameX86::CONTEXT_VALID_EIP, &MDRawContextX86::eip }, -- { "$esp", ".cfa", false, -+ { ToUniqueString("$esp"), ToUniqueString(".cfa"), false, - StackFrameX86::CONTEXT_VALID_ESP, &MDRawContextX86::esp }, -- { "$ebp", NULL, true, -+ { ToUniqueString("$ebp"), NULL, true, - StackFrameX86::CONTEXT_VALID_EBP, &MDRawContextX86::ebp }, -- { "$eax", NULL, false, -+ { ToUniqueString("$eax"), NULL, false, - StackFrameX86::CONTEXT_VALID_EAX, &MDRawContextX86::eax }, -- { "$ebx", NULL, true, -+ { ToUniqueString("$ebx"), NULL, true, - StackFrameX86::CONTEXT_VALID_EBX, &MDRawContextX86::ebx }, -- { "$ecx", NULL, false, -+ { ToUniqueString("$ecx"), NULL, false, - StackFrameX86::CONTEXT_VALID_ECX, &MDRawContextX86::ecx }, -- { "$edx", NULL, false, -+ { ToUniqueString("$edx"), NULL, false, - StackFrameX86::CONTEXT_VALID_EDX, &MDRawContextX86::edx }, -- { "$esi", NULL, true, -+ { ToUniqueString("$esi"), NULL, true, - StackFrameX86::CONTEXT_VALID_ESI, &MDRawContextX86::esi }, -- { "$edi", NULL, true, -+ { ToUniqueString("$edi"), NULL, true, - StackFrameX86::CONTEXT_VALID_EDI, &MDRawContextX86::edi }, - }; - - StackwalkerX86::StackwalkerX86(const SystemInfo* system_info, - const MDRawContextX86* context, - MemoryRegion* memory, - const CodeModules* modules, - StackFrameSymbolizer* resolver_helper) -@@ -194,26 +194,26 @@ - } - } - - // Set up the dictionary for the PostfixEvaluator. %ebp and %esp are used - // in each program string, and their previous values are known, so set them - // here. - PostfixEvaluator::DictionaryType dictionary; - // Provide the current register values. -- dictionary["$ebp"] = last_frame->context.ebp; -- dictionary["$esp"] = last_frame->context.esp; -+ dictionary[ustr__ZSebp()] = last_frame->context.ebp; -+ dictionary[ustr__ZSesp()] = last_frame->context.esp; - // Provide constants from the debug info for last_frame and its callee. - // .cbCalleeParams is a Breakpad extension that allows us to use the - // PostfixEvaluator engine when certain types of debugging information - // are present without having to write the constants into the program - // string as literals. -- dictionary[".cbCalleeParams"] = last_frame_callee_parameter_size; -- dictionary[".cbSavedRegs"] = last_frame_info->saved_register_size; -- dictionary[".cbLocals"] = last_frame_info->local_size; -+ dictionary[ustr__ZDcbCalleeParams()] = last_frame_callee_parameter_size; -+ dictionary[ustr__ZDcbSavedRegs()] = last_frame_info->saved_register_size; -+ dictionary[ustr__ZDcbLocals()] = last_frame_info->local_size; - - uint32_t raSearchStart = last_frame->context.esp + - last_frame_callee_parameter_size + - last_frame_info->local_size + - last_frame_info->saved_register_size; - - uint32_t raSearchStartOld = raSearchStart; - uint32_t found = 0; // dummy value -@@ -232,20 +232,20 @@ - // Skip one slot from the stack and do another scan in order to get the - // actual return address. - raSearchStart += 4; - ScanForReturnAddress(raSearchStart, &raSearchStart, &found, 3); - } - - // The difference between raSearch and raSearchStart is unknown, - // but making them the same seems to work well in practice. -- dictionary[".raSearchStart"] = raSearchStart; -- dictionary[".raSearch"] = raSearchStart; -+ dictionary[ustr__ZDraSearchStart()] = raSearchStart; -+ dictionary[ustr__ZDraSearch()] = raSearchStart; - -- dictionary[".cbParams"] = last_frame_info->parameter_size; -+ dictionary[ustr__ZDcbParams()] = last_frame_info->parameter_size; - - // Decide what type of program string to use. The program string is in - // postfix notation and will be passed to PostfixEvaluator::Evaluate. - // Given the dictionary and the program string, it is possible to compute - // the return address and the values of other registers in the calling - // function. Because of bugs described below, the stack may need to be - // scanned for these values. The results of program string evaluation - // will be used to determine whether to scan for better values. -@@ -325,18 +325,18 @@ - } - - // Now crank it out, making sure that the program string set at least the - // two required variables. - PostfixEvaluator evaluator = - PostfixEvaluator(&dictionary, memory_); - PostfixEvaluator::DictionaryValidityType dictionary_validity; - if (!evaluator.Evaluate(program_string, &dictionary_validity) || -- dictionary_validity.find("$eip") == dictionary_validity.end() || -- dictionary_validity.find("$esp") == dictionary_validity.end()) { -+ dictionary_validity.find(ustr__ZSeip()) == dictionary_validity.end() || -+ dictionary_validity.find(ustr__ZSesp()) == dictionary_validity.end()) { - // Program string evaluation failed. It may be that %eip is not somewhere - // with stack frame info, and %ebp is pointing to non-stack memory, so - // our evaluation couldn't succeed. We'll scan the stack for a return - // address. This can happen if the stack is in a module for which - // we don't have symbols, and that module is compiled without a - // frame pointer. - uint32_t location_start = last_frame->context.esp; - uint32_t location, eip; -@@ -344,69 +344,69 @@ - // if we can't find an instruction pointer even with stack scanning, - // give up. - return NULL; - } - - // This seems like a reasonable return address. Since program string - // evaluation failed, use it and set %esp to the location above the - // one where the return address was found. -- dictionary["$eip"] = eip; -- dictionary["$esp"] = location + 4; -+ dictionary[ustr__ZSeip()] = eip; -+ dictionary[ustr__ZSesp()] = location + 4; - trust = StackFrame::FRAME_TRUST_SCAN; - } - - // Since this stack frame did not use %ebp in a traditional way, - // locating the return address isn't entirely deterministic. In that - // case, the stack can be scanned to locate the return address. - // - // However, if program string evaluation resulted in both %eip and - // %ebp values of 0, trust that the end of the stack has been - // reached and don't scan for anything else. -- if (dictionary["$eip"] != 0 || dictionary["$ebp"] != 0) { -+ if (dictionary[ustr__ZSeip()] != 0 || dictionary[ustr__ZSebp()] != 0) { - int offset = 0; - - // This scan can only be done if a CodeModules object is available, to - // check that candidate return addresses are in fact inside a module. - // - // TODO(mmentovai): This ignores dynamically-generated code. One possible - // solution is to check the minidump's memory map to see if the candidate - // %eip value comes from a mapped executable page, although this would - // require dumps that contain MINIDUMP_MEMORY_INFO, which the Breakpad - // client doesn't currently write (it would need to call MiniDumpWriteDump - // with the MiniDumpWithFullMemoryInfo type bit set). Even given this - // ability, older OSes (pre-XP SP2) and CPUs (pre-P4) don't enforce - // an independent execute privilege on memory pages. - -- uint32_t eip = dictionary["$eip"]; -+ uint32_t eip = dictionary[ustr__ZSeip()]; - if (modules_ && !modules_->GetModuleForAddress(eip)) { - // The instruction pointer at .raSearchStart was invalid, so start - // looking one 32-bit word above that location. -- uint32_t location_start = dictionary[".raSearchStart"] + 4; -+ uint32_t location_start = dictionary[ustr__ZDraSearchStart()] + 4; - uint32_t location; - if (ScanForReturnAddress(location_start, &location, &eip)) { - // This is a better return address that what program string - // evaluation found. Use it, and set %esp to the location above the - // one where the return address was found. -- dictionary["$eip"] = eip; -- dictionary["$esp"] = location + 4; -+ dictionary[ustr__ZSeip()] = eip; -+ dictionary[ustr__ZSesp()] = location + 4; - offset = location - location_start; - trust = StackFrame::FRAME_TRUST_CFI_SCAN; - } - } - - if (recover_ebp) { - // When trying to recover the previous value of the frame pointer (%ebp), - // start looking at the lowest possible address in the saved-register - // area, and look at the entire saved register area, increased by the - // size of |offset| to account for additional data that may be on the - // stack. The scan is performed from the highest possible address to - // the lowest, because the expectation is that the function's prolog - // would have saved %ebp early. -- uint32_t ebp = dictionary["$ebp"]; -+ uint32_t ebp = dictionary[ustr__ZSebp()]; - - // When a scan for return address is used, it is possible to skip one or - // more frames (when return address is not in a known module). One - // indication for skipped frames is when the value of %ebp is lower than - // the location of the return address on the stack - bool has_skipped_frames = - (trust != StackFrame::FRAME_TRUST_CFI && ebp <= raSearchStart + offset); - -@@ -420,49 +420,49 @@ - location >= location_end; - location -= 4) { - if (!memory_->GetMemoryAtAddress(location, &ebp)) - break; - - if (memory_->GetMemoryAtAddress(ebp, &value)) { - // The candidate value is a pointer to the same memory region - // (the stack). Prefer it as a recovered %ebp result. -- dictionary["$ebp"] = ebp; -+ dictionary[ustr__ZSebp()] = ebp; - break; - } - } - } - } - } - - // Create a new stack frame (ownership will be transferred to the caller) - // and fill it in. - StackFrameX86* frame = new StackFrameX86(); - - frame->trust = trust; - frame->context = last_frame->context; -- frame->context.eip = dictionary["$eip"]; -- frame->context.esp = dictionary["$esp"]; -- frame->context.ebp = dictionary["$ebp"]; -+ frame->context.eip = dictionary[ustr__ZSeip()]; -+ frame->context.esp = dictionary[ustr__ZSesp()]; -+ frame->context.ebp = dictionary[ustr__ZSebp()]; - frame->context_validity = StackFrameX86::CONTEXT_VALID_EIP | - StackFrameX86::CONTEXT_VALID_ESP | - StackFrameX86::CONTEXT_VALID_EBP; - - // These are nonvolatile (callee-save) registers, and the program string - // may have filled them in. -- if (dictionary_validity.find("$ebx") != dictionary_validity.end()) { -- frame->context.ebx = dictionary["$ebx"]; -+ if (dictionary_validity.find(ustr__ZSebx()) != dictionary_validity.end()) { -+ frame->context.ebx = dictionary[ustr__ZSebx()]; - frame->context_validity |= StackFrameX86::CONTEXT_VALID_EBX; - } -- if (dictionary_validity.find("$esi") != dictionary_validity.end()) { -- frame->context.esi = dictionary["$esi"]; -+ if (dictionary_validity.find(ustr__ZSesi()) != dictionary_validity.end()) { -+ frame->context.esi = dictionary[ustr__ZSesi()]; - frame->context_validity |= StackFrameX86::CONTEXT_VALID_ESI; - } -- if (dictionary_validity.find("$edi") != dictionary_validity.end()) { -- frame->context.edi = dictionary["$edi"]; -+ if (dictionary_validity.find(ustr__ZSedi()) != dictionary_validity.end()) { -+ frame->context.edi = dictionary[ustr__ZSedi()]; - frame->context_validity |= StackFrameX86::CONTEXT_VALID_EDI; - } - - return frame; - } - - StackFrameX86* StackwalkerX86::GetCallerByCFIFrameInfo( - const vector &frames, -diff --git a/src/tools/mac/dump_syms/dump_syms.xcodeproj/project.pbxproj b/src/tools/mac/dump_syms/dump_syms.xcodeproj/project.pbxproj ---- a/src/tools/mac/dump_syms/dump_syms.xcodeproj/project.pbxproj -+++ b/src/tools/mac/dump_syms/dump_syms.xcodeproj/project.pbxproj -@@ -98,16 +98,22 @@ - B8C5B51B1166534700D34F4E /* macho_id.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BE650430B52F6D800611104 /* macho_id.cc */; }; - B8C5B51C1166534700D34F4E /* macho_walker.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BE650450B52F6D800611104 /* macho_walker.cc */; }; - B8C5B51D1166534700D34F4E /* dump_syms.mm in Sources */ = {isa = PBXBuildFile; fileRef = 08FB7796FE84155DC02AAC07 /* dump_syms.mm */; }; - B8C5B51E1166534700D34F4E /* dump_syms_tool.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9BDF186E0B1BB43700F8391B /* dump_syms_tool.mm */; }; - B8C5B523116653BA00D34F4E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08FB779EFE84155DC02AAC07 /* Foundation.framework */; }; - D21F97D711CBA12300239E38 /* test_assembler_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB0D9116CEC0600407530 /* test_assembler_unittest.cc */; }; - D21F97D811CBA13D00239E38 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; }; - D21F97E911CBA1FF00239E38 /* test_assembler.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE0911665B5700407530 /* test_assembler.cc */; }; -+ D24997CC16B6C16800E588C5 /* unique_string.cc in Sources */ = {isa = PBXBuildFile; fileRef = D24997CA16B6C16800E588C5 /* unique_string.cc */; }; -+ D24997CD16B6C16800E588C5 /* unique_string.cc in Sources */ = {isa = PBXBuildFile; fileRef = D24997CA16B6C16800E588C5 /* unique_string.cc */; }; -+ D24997CE16B6C16800E588C5 /* unique_string.cc in Sources */ = {isa = PBXBuildFile; fileRef = D24997CA16B6C16800E588C5 /* unique_string.cc */; }; -+ D2499A0016B9BA6A00E588C5 /* unique_string.cc in Sources */ = {isa = PBXBuildFile; fileRef = D24997CA16B6C16800E588C5 /* unique_string.cc */; }; -+ D2499A0216B9BA9600E588C5 /* unique_string.cc in Sources */ = {isa = PBXBuildFile; fileRef = D24997CA16B6C16800E588C5 /* unique_string.cc */; }; -+ D2499A0316B9BA9D00E588C5 /* unique_string.cc in Sources */ = {isa = PBXBuildFile; fileRef = D24997CA16B6C16800E588C5 /* unique_string.cc */; }; - /* End PBXBuildFile section */ - - /* Begin PBXContainerItemProxy section */ - 8B31051411F100CF00FCF3E4 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D21F97D111CBA0F200239E38; -@@ -338,16 +344,18 @@ - B89E0E741166575200DD08C9 /* macho_dump */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = macho_dump; sourceTree = BUILT_PRODUCTS_DIR; }; - B89E0E9511665A6400DD08C9 /* macho_reader_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = macho_reader_unittest; sourceTree = BUILT_PRODUCTS_DIR; }; - B89E0E9F11665AC300DD08C9 /* gtest_main.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gtest_main.cc; path = ../../../testing/gtest/src/gtest_main.cc; sourceTree = SOURCE_ROOT; }; - B89E0EA011665AC300DD08C9 /* gtest-all.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "gtest-all.cc"; path = "../../../testing/gtest/src/gtest-all.cc"; sourceTree = SOURCE_ROOT; }; - B89E0EA311665AEA00DD08C9 /* gmock-all.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "gmock-all.cc"; path = "../../../testing/src/gmock-all.cc"; sourceTree = SOURCE_ROOT; }; - B8C5B5111166531A00D34F4E /* dump_syms */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dump_syms; sourceTree = BUILT_PRODUCTS_DIR; }; - B8E8CA0C1156C854009E61B2 /* byteswap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = byteswap.h; path = ../../../common/mac/byteswap.h; sourceTree = SOURCE_ROOT; }; - D21F97D211CBA0F200239E38 /* test_assembler_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = test_assembler_unittest; sourceTree = BUILT_PRODUCTS_DIR; }; -+ D24997CA16B6C16800E588C5 /* unique_string.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = unique_string.cc; path = ../../../common/unique_string.cc; sourceTree = ""; }; -+ D24997CB16B6C16800E588C5 /* unique_string.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = unique_string.h; path = ../../../common/unique_string.h; sourceTree = ""; }; - F95B422B0E0E22D100DBDE83 /* bytereader-inl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "bytereader-inl.h"; path = "../../../common/dwarf/bytereader-inl.h"; sourceTree = SOURCE_ROOT; }; - F95B422C0E0E22D100DBDE83 /* bytereader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bytereader.cc; path = ../../../common/dwarf/bytereader.cc; sourceTree = SOURCE_ROOT; }; - F95B422D0E0E22D100DBDE83 /* bytereader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = bytereader.h; path = ../../../common/dwarf/bytereader.h; sourceTree = SOURCE_ROOT; }; - F95B422E0E0E22D100DBDE83 /* dwarf2enums.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf2enums.h; path = ../../../common/dwarf/dwarf2enums.h; sourceTree = SOURCE_ROOT; }; - F95B422F0E0E22D100DBDE83 /* dwarf2reader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf2reader.cc; path = ../../../common/dwarf/dwarf2reader.cc; sourceTree = SOURCE_ROOT; }; - F95B42300E0E22D100DBDE83 /* dwarf2reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dwarf2reader.h; path = ../../../common/dwarf/dwarf2reader.h; sourceTree = SOURCE_ROOT; }; - F95B42310E0E22D100DBDE83 /* line_state_machine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = line_state_machine.h; path = ../../../common/dwarf/line_state_machine.h; sourceTree = SOURCE_ROOT; }; - /* End PBXFileReference section */ -@@ -531,16 +539,18 @@ - D21F97D211CBA0F200239E38 /* test_assembler_unittest */, - ); - name = Products; - sourceTree = ""; - }; - B88FAE1C11665FFD00407530 /* MODULE */ = { - isa = PBXGroup; - children = ( -+ D24997CA16B6C16800E588C5 /* unique_string.cc */, -+ D24997CB16B6C16800E588C5 /* unique_string.h */, - B88FAE1E1166603300407530 /* dwarf_cu_to_module.cc */, - B88FAE1F1166603300407530 /* dwarf_cu_to_module.h */, - B88FB0D6116CEC0600407530 /* dwarf_cu_to_module_unittest.cc */, - B88FAE201166603300407530 /* dwarf_line_to_module.cc */, - B88FAE211166603300407530 /* dwarf_line_to_module.h */, - B88FB0D7116CEC0600407530 /* dwarf_line_to_module_unittest.cc */, - B88FAE221166603300407530 /* language.cc */, - B88FAE231166603300407530 /* language.h */, -@@ -940,16 +950,17 @@ - }; - /* End PBXShellScriptBuildPhase section */ - - /* Begin PBXSourcesBuildPhase section */ - B84A91F1116CF784006C210E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( -+ D2499A0216B9BA9600E588C5 /* unique_string.cc in Sources */, - B84A91FB116CF7AF006C210E /* module.cc in Sources */, - B84A91FC116CF7AF006C210E /* stabs_to_module.cc in Sources */, - B84A91FD116CF7AF006C210E /* stabs_to_module_unittest.cc in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B88FAF2C116A591D00407530 /* Sources */ = { - isa = PBXSourcesBuildPhase; -@@ -983,56 +994,60 @@ - runOnlyForDeploymentPostprocessing = 0; - }; - B88FB0B6116CEABF00407530 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B88FB0BD116CEAE000407530 /* module_unittest.cc in Sources */, - B88FB0C4116CEB4100407530 /* module.cc in Sources */, -+ D24997CE16B6C16800E588C5 /* unique_string.cc in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B88FB0DC116CEEA800407530 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B88FB0E5116CEED300407530 /* dwarf2diehandler.cc in Sources */, - B88FB0E6116CEED300407530 /* dwarf2diehandler_unittest.cc in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B88FB0EF116CEF1900407530 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( -+ D2499A0316B9BA9D00E588C5 /* unique_string.cc in Sources */, - B88FB0FA116CF00E00407530 /* dwarf_line_to_module.cc in Sources */, - B88FB0FE116CF02400407530 /* module.cc in Sources */, - B88FB0FB116CF00E00407530 /* dwarf_line_to_module_unittest.cc in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B88FB107116CF07900407530 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( -+ D2499A0016B9BA6A00E588C5 /* unique_string.cc in Sources */, - B88FB112116CF1F000407530 /* dwarf_cu_to_module.cc in Sources */, - B88FB113116CF1F000407530 /* dwarf_cu_to_module_unittest.cc in Sources */, - B88FB114116CF1F000407530 /* language.cc in Sources */, - B88FB115116CF1F000407530 /* module.cc in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B88FB11C116CF27F00407530 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B88FB129116CF2DD00407530 /* module.cc in Sources */, - B88FB12A116CF2DD00407530 /* dwarf_cfi_to_module.cc in Sources */, - B88FB12B116CF2DD00407530 /* dwarf_cfi_to_module_unittest.cc in Sources */, -+ D24997CD16B6C16800E588C5 /* unique_string.cc in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B88FB132116CF30F00407530 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B88FB13D116CF38300407530 /* cfi_assembler.cc in Sources */, -@@ -1086,16 +1101,17 @@ - B88FAE261166603300407530 /* dwarf_cu_to_module.cc in Sources */, - B88FAE271166603300407530 /* dwarf_line_to_module.cc in Sources */, - B88FAE281166603300407530 /* language.cc in Sources */, - B88FAE291166603300407530 /* module.cc in Sources */, - B88FAE351166673E00407530 /* dwarf_cfi_to_module.cc in Sources */, - B88FAE3B11666C6F00407530 /* stabs_reader.cc in Sources */, - B88FAE3E11666C8900407530 /* stabs_to_module.cc in Sources */, - 4D72CAF513DFBAC2006CABE3 /* md5.cc in Sources */, -+ D24997CC16B6C16800E588C5 /* unique_string.cc in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D21F97CF11CBA0F200239E38 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D21F97E911CBA1FF00239E38 /* test_assembler.cc in Sources */, diff --git a/toolkit/crashreporter/breakpad-patches/04-uniquestringmap.patch b/toolkit/crashreporter/breakpad-patches/04-uniquestringmap.patch deleted file mode 100644 index 5c7c4512b16c..000000000000 --- a/toolkit/crashreporter/breakpad-patches/04-uniquestringmap.patch +++ /dev/null @@ -1,1448 +0,0 @@ -# HG changeset patch -# User Ted Mielczarek -# Date 1360255134 18000 -# Node ID 294ce0d64d35a90be8ea91b719ead8b82aed29f7 -# Parent d7bfb673574a3afe8b4f76f42fb52e2545770dad -Rework PostfixEvaluator to use UniqueStringMap -Patch by Julian Seward , R=ted - -diff --git a/src/common/unique_string.h b/src/common/unique_string.h ---- a/src/common/unique_string.h -+++ b/src/common/unique_string.h -@@ -25,16 +25,17 @@ - // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - #ifndef COMMON_UNIQUE_STRING_H_ - #define COMMON_UNIQUE_STRING_H_ - -+#include - #include - #include "common/using_std_string.h" - - namespace google_breakpad { - - // Abstract type - class UniqueString; - -@@ -229,11 +230,112 @@ - - // ".ra" - inline static const UniqueString* ustr__ZDra() { - static const UniqueString* us = NULL; - if (!us) us = ToUniqueString(".ra"); - return us; - } - -+template -+class UniqueStringMap -+{ -+ private: -+ static const int N_FIXED = 10; -+ -+ public: -+ UniqueStringMap() : n_fixed_(0), n_sets_(0), n_gets_(0), n_clears_(0) {}; -+ ~UniqueStringMap() {}; -+ -+ // Empty out the map. -+ void clear() { -+ ++n_clears_; -+ map_.clear(); -+ n_fixed_ = 0; -+ } -+ -+ // Do "map[ix] = v". -+ void set(const UniqueString* ix, ValueType v) { -+ ++n_sets_; -+ int i; -+ for (i = 0; i < n_fixed_; ++i) { -+ if (fixed_keys_[i] == ix) { -+ fixed_vals_[i] = v; -+ return; -+ } -+ } -+ if (n_fixed_ < N_FIXED) { -+ i = n_fixed_; -+ fixed_keys_[i] = ix; -+ fixed_vals_[i] = v; -+ ++n_fixed_; -+ } else { -+ map_[ix] = v; -+ } -+ } -+ -+ // Lookup 'ix' in the map, and also return a success/fail boolean. -+ ValueType get(/*OUT*/bool* have, const UniqueString* ix) const { -+ ++n_gets_; -+ int i; -+ for (i = 0; i < n_fixed_; ++i) { -+ if (fixed_keys_[i] == ix) { -+ *have = true; -+ return fixed_vals_[i]; -+ } -+ } -+ typename std::map::const_iterator it -+ = map_.find(ix); -+ if (it == map_.end()) { -+ *have = false; -+ return ValueType(); -+ } else { -+ *have = true; -+ return it->second; -+ } -+ }; -+ -+ // Lookup 'ix' in the map, and return zero if it is not present. -+ ValueType get(const UniqueString* ix) const { -+ ++n_gets_; -+ bool found; -+ ValueType v = get(&found, ix); -+ return found ? v : ValueType(); -+ } -+ -+ // Find out whether 'ix' is in the map. -+ bool have(const UniqueString* ix) const { -+ ++n_gets_; -+ bool found; -+ (void)get(&found, ix); -+ return found; -+ } -+ -+ // Copy the contents to a std::map, generally for testing. -+ void copy_to_map(std::map* m) const { -+ m->clear(); -+ int i; -+ for (i = 0; i < n_fixed_; ++i) { -+ (*m)[fixed_keys_[i]] = fixed_vals_[i]; -+ } -+ m->insert(map_.begin(), map_.end()); -+ } -+ -+ // Note that users of this class rely on having also a sane -+ // assignment operator. The default one is OK, though. -+ // AFAICT there are no uses of the copy constructor, but if -+ // there were, the default one would also suffice. -+ -+ private: -+ // Quick (hopefully) cache -+ const UniqueString* fixed_keys_[N_FIXED]; -+ ValueType fixed_vals_[N_FIXED]; -+ int n_fixed_; // 0 .. N_FIXED inclusive -+ // Fallback storage when the cache is filled -+ std::map map_; -+ -+ // For tracking usage stats. -+ mutable int n_sets_, n_gets_, n_clears_; -+}; -+ - } // namespace google_breakpad - - #endif // COMMON_UNIQUE_STRING_H_ -diff --git a/src/processor/basic_source_line_resolver_unittest.cc b/src/processor/basic_source_line_resolver_unittest.cc ---- a/src/processor/basic_source_line_resolver_unittest.cc -+++ b/src/processor/basic_source_line_resolver_unittest.cc -@@ -24,16 +24,17 @@ - // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - #include - -+#include - #include - - #include "breakpad_googletest_includes.h" - #include "common/scoped_ptr.h" - #include "common/using_std_string.h" - #include "google_breakpad/processor/basic_source_line_resolver.h" - #include "google_breakpad/processor/code_module.h" - #include "google_breakpad/processor/stack_frame.h" -@@ -47,16 +48,17 @@ - - using google_breakpad::BasicSourceLineResolver; - using google_breakpad::CFIFrameInfo; - using google_breakpad::CodeModule; - using google_breakpad::FromUniqueString; - using google_breakpad::MemoryRegion; - using google_breakpad::StackFrame; - using google_breakpad::ToUniqueString; -+using google_breakpad::UniqueString; - using google_breakpad::WindowsFrameInfo; - using google_breakpad::linked_ptr; - using google_breakpad::scoped_ptr; - using google_breakpad::ustr__ZDcfa; - using google_breakpad::ustr__ZDra; - using google_breakpad::ustr__ZSebx; - using google_breakpad::ustr__ZSebp; - using google_breakpad::ustr__ZSedi; -@@ -113,27 +115,30 @@ - }; - - // Verify that, for every association in ACTUAL, EXPECTED has the same - // association. (That is, ACTUAL's associations should be a subset of - // EXPECTED's.) Also verify that ACTUAL has associations for ".ra" and - // ".cfa". - static bool VerifyRegisters( - const char *file, int line, -- const CFIFrameInfo::RegisterValueMap &expected, -- const CFIFrameInfo::RegisterValueMap &actual) { -- CFIFrameInfo::RegisterValueMap::const_iterator a; -+ const std::map &expected, -+ const CFIFrameInfo::RegisterValueMap &actual_regmap) { -+ std::map actual; -+ actual_regmap.copy_to_map(&actual); -+ -+ std::map::const_iterator a; - a = actual.find(ustr__ZDcfa()); - if (a == actual.end()) - return false; - a = actual.find(ustr__ZDra()); - if (a == actual.end()) - return false; - for (a = actual.begin(); a != actual.end(); a++) { -- CFIFrameInfo::RegisterValueMap::const_iterator e = -+ std::map::const_iterator e = - expected.find(a->first); - if (e == expected.end()) { - fprintf(stderr, "%s:%d: unexpected register '%s' recovered, value 0x%x\n", - file, line, FromUniqueString(a->first), a->second); - return false; - } - if (e->second != a->second) { - fprintf(stderr, -@@ -258,86 +263,86 @@ - - frame.instruction = 0x3e9f; - frame.module = &module1; - cfi_frame_info.reset(resolver.FindCFIFrameInfo(&frame)); - ASSERT_FALSE(cfi_frame_info.get()); - - CFIFrameInfo::RegisterValueMap current_registers; - CFIFrameInfo::RegisterValueMap caller_registers; -- CFIFrameInfo::RegisterValueMap expected_caller_registers; -+ std::map expected_caller_registers; - MockMemoryRegion memory; - - // Regardless of which instruction evaluation takes place at, it - // should produce the same values for the caller's registers. - expected_caller_registers[ustr__ZDcfa()] = 0x1001c; - expected_caller_registers[ustr__ZDra()] = 0xf6438648; - expected_caller_registers[ustr__ZSebp()] = 0x10038; - expected_caller_registers[ustr__ZSebx()] = 0x98ecadc3; - expected_caller_registers[ustr__ZSesi()] = 0x878f7524; - expected_caller_registers[ustr__ZSedi()] = 0x6312f9a5; - - frame.instruction = 0x3d40; - frame.module = &module1; - current_registers.clear(); -- current_registers[ustr__ZSesp()] = 0x10018; -- current_registers[ustr__ZSebp()] = 0x10038; -- current_registers[ustr__ZSebx()] = 0x98ecadc3; -- current_registers[ustr__ZSesi()] = 0x878f7524; -- current_registers[ustr__ZSedi()] = 0x6312f9a5; -+ current_registers.set(ustr__ZSesp(), 0x10018); -+ current_registers.set(ustr__ZSebp(), 0x10038); -+ current_registers.set(ustr__ZSebx(), 0x98ecadc3); -+ current_registers.set(ustr__ZSesi(), 0x878f7524); -+ current_registers.set(ustr__ZSedi(), 0x6312f9a5); - cfi_frame_info.reset(resolver.FindCFIFrameInfo(&frame)); - ASSERT_TRUE(cfi_frame_info.get()); - ASSERT_TRUE(cfi_frame_info.get() - ->FindCallerRegs(current_registers, memory, - &caller_registers)); - ASSERT_TRUE(VerifyRegisters(__FILE__, __LINE__, - expected_caller_registers, caller_registers)); - - frame.instruction = 0x3d41; -- current_registers[ustr__ZSesp()] = 0x10014; -+ current_registers.set(ustr__ZSesp(), 0x10014); - cfi_frame_info.reset(resolver.FindCFIFrameInfo(&frame)); - ASSERT_TRUE(cfi_frame_info.get()); - ASSERT_TRUE(cfi_frame_info.get() - ->FindCallerRegs(current_registers, memory, - &caller_registers)); - ASSERT_TRUE(VerifyRegisters(__FILE__, __LINE__, - expected_caller_registers, caller_registers)); - - frame.instruction = 0x3d43; -- current_registers[ustr__ZSebp()] = 0x10014; -+ current_registers.set(ustr__ZSebp(), 0x10014); - cfi_frame_info.reset(resolver.FindCFIFrameInfo(&frame)); - ASSERT_TRUE(cfi_frame_info.get()); - ASSERT_TRUE(cfi_frame_info.get() - ->FindCallerRegs(current_registers, memory, - &caller_registers)); - VerifyRegisters(__FILE__, __LINE__, - expected_caller_registers, caller_registers); - - frame.instruction = 0x3d54; -- current_registers[ustr__ZSebx()] = 0x6864f054U; -+ current_registers.set(ustr__ZSebx(), 0x6864f054U); - cfi_frame_info.reset(resolver.FindCFIFrameInfo(&frame)); - ASSERT_TRUE(cfi_frame_info.get()); - ASSERT_TRUE(cfi_frame_info.get() - ->FindCallerRegs(current_registers, memory, - &caller_registers)); - VerifyRegisters(__FILE__, __LINE__, - expected_caller_registers, caller_registers); - - frame.instruction = 0x3d5a; -- current_registers[ustr__ZSesi()] = 0x6285f79aU; -+ current_registers.set(ustr__ZSesi(), 0x6285f79aU); - cfi_frame_info.reset(resolver.FindCFIFrameInfo(&frame)); - ASSERT_TRUE(cfi_frame_info.get()); - ASSERT_TRUE(cfi_frame_info.get() - ->FindCallerRegs(current_registers, memory, - &caller_registers)); - VerifyRegisters(__FILE__, __LINE__, - expected_caller_registers, caller_registers); - - frame.instruction = 0x3d84; -- current_registers[ustr__ZSedi()] = 0x64061449U; -+ current_registers.set(ustr__ZSedi(), 0x64061449U); - cfi_frame_info.reset(resolver.FindCFIFrameInfo(&frame)); - ASSERT_TRUE(cfi_frame_info.get()); - ASSERT_TRUE(cfi_frame_info.get() - ->FindCallerRegs(current_registers, memory, - &caller_registers)); - VerifyRegisters(__FILE__, __LINE__, - expected_caller_registers, caller_registers); - -diff --git a/src/processor/cfi_frame_info-inl.h b/src/processor/cfi_frame_info-inl.h ---- a/src/processor/cfi_frame_info-inl.h -+++ b/src/processor/cfi_frame_info-inl.h -@@ -35,64 +35,64 @@ - - #ifndef PROCESSOR_CFI_FRAME_INFO_INL_H_ - #define PROCESSOR_CFI_FRAME_INFO_INL_H_ - - #include - - namespace google_breakpad { - --template --bool SimpleCFIWalker::FindCallerRegisters( -+template -+bool SimpleCFIWalker::FindCallerRegisters( - const MemoryRegion &memory, - const CFIFrameInfo &cfi_frame_info, - const RawContextType &callee_context, - int callee_validity, - RawContextType *caller_context, - int *caller_validity) const { -- typedef CFIFrameInfo::RegisterValueMap ValueMap; -+ typedef CFIFrameInfo::RegisterValueMap ValueMap; - ValueMap callee_registers; - ValueMap caller_registers; -- // Just for brevity. -- typename ValueMap::const_iterator caller_none = caller_registers.end(); - - // Populate callee_registers with register values from callee_context. - for (size_t i = 0; i < map_size_; i++) { - const RegisterSet &r = register_map_[i]; - if (callee_validity & r.validity_flag) -- callee_registers[r.name] = callee_context.*r.context_member; -+ callee_registers.set(r.name, callee_context.*r.context_member); - } - - // Apply the rules, and see what register values they yield. -- if (!cfi_frame_info.FindCallerRegs(callee_registers, memory, -- &caller_registers)) -+ if (!cfi_frame_info -+ .FindCallerRegs(callee_registers, memory, -+ &caller_registers)) - return false; - - // Populate *caller_context with the values the rules placed in - // caller_registers. - memset(caller_context, 0xda, sizeof(*caller_context)); - *caller_validity = 0; - for (size_t i = 0; i < map_size_; i++) { - const RegisterSet &r = register_map_[i]; -- typename ValueMap::const_iterator caller_entry; - - // Did the rules provide a value for this register by its name? -- caller_entry = caller_registers.find(r.name); -- if (caller_entry != caller_none) { -- caller_context->*r.context_member = caller_entry->second; -+ bool found = false; -+ RegisterValueType v = caller_registers.get(&found, r.name); -+ if (found) { -+ caller_context->*r.context_member = v; - *caller_validity |= r.validity_flag; - continue; - } - - // Did the rules provide a value for this register under its - // alternate name? - if (r.alternate_name) { -- caller_entry = caller_registers.find(r.alternate_name); -- if (caller_entry != caller_none) { -- caller_context->*r.context_member = caller_entry->second; -+ found = false; -+ v = caller_registers.get(&found, r.alternate_name); -+ if (found) { -+ caller_context->*r.context_member = v; - *caller_validity |= r.validity_flag; - continue; - } - } - - // Is this a callee-saves register? The walker assumes that these - // still hold the caller's value if the CFI doesn't mention them. - // -diff --git a/src/processor/cfi_frame_info.cc b/src/processor/cfi_frame_info.cc ---- a/src/processor/cfi_frame_info.cc -+++ b/src/processor/cfi_frame_info.cc -@@ -66,33 +66,33 @@ - V cfa; - working = registers; - if (!evaluator.EvaluateForValue(cfa_rule_, &cfa)) - return false; - - // Then, compute the return address. - V ra; - working = registers; -- working[ustr__ZDcfa()] = cfa; -+ working.set(ustr__ZDcfa(), cfa); - if (!evaluator.EvaluateForValue(ra_rule_, &ra)) - return false; - - // Now, compute values for all the registers register_rules_ mentions. - for (RuleMap::const_iterator it = register_rules_.begin(); - it != register_rules_.end(); it++) { - V value; - working = registers; -- working[ustr__ZDcfa()] = cfa; -+ working.set(ustr__ZDcfa(), cfa); - if (!evaluator.EvaluateForValue(it->second, &value)) - return false; -- (*caller_registers)[it->first] = value; -+ caller_registers->set(it->first, value); - } - -- (*caller_registers)[ustr__ZDra()] = ra; -- (*caller_registers)[ustr__ZDcfa()] = cfa; -+ caller_registers->set(ustr__ZDra(), ra); -+ caller_registers->set(ustr__ZDcfa(), cfa); - - return true; - } - - // Explicit instantiations for 32-bit and 64-bit architectures. - template bool CFIFrameInfo::FindCallerRegs( - const RegisterValueMap ®isters, - const MemoryRegion &memory, -diff --git a/src/processor/cfi_frame_info.h b/src/processor/cfi_frame_info.h ---- a/src/processor/cfi_frame_info.h -+++ b/src/processor/cfi_frame_info.h -@@ -64,17 +64,17 @@ - // changes given by the 'STACK CFI' records up to our instruction's - // address. Then, use the FindCallerRegs member function to apply the - // rules to the callee frame's register values, yielding the caller - // frame's register values. - class CFIFrameInfo { - public: - // A map from register names onto values. - template class RegisterValueMap: -- public map { }; -+ public UniqueStringMap { }; - - // Set the expression for computing a call frame address, return - // address, or register's value. At least the CFA rule and the RA - // rule must be set before calling FindCallerRegs. - void SetCFARule(const Module::Expr& rule) { cfa_rule_ = rule; } - void SetRARule(const Module::Expr& rule) { ra_rule_ = rule; } - void SetRegisterRule(const UniqueString* register_name, - const Module::Expr& rule) { -diff --git a/src/processor/cfi_frame_info_unittest.cc b/src/processor/cfi_frame_info_unittest.cc ---- a/src/processor/cfi_frame_info_unittest.cc -+++ b/src/processor/cfi_frame_info_unittest.cc -@@ -111,19 +111,18 @@ - - TEST_F(Simple, SetCFAAndRARule) { - ExpectNoMemoryReferences(); - - cfi.SetCFARule(Module::Expr("330903416631436410")); - cfi.SetRARule(Module::Expr("5870666104170902211")); - ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); -- ASSERT_EQ(2U, caller_registers.size()); -- ASSERT_EQ(330903416631436410ULL, caller_registers[ustr__ZDcfa()]); -- ASSERT_EQ(5870666104170902211ULL, caller_registers[ustr__ZDra()]); -+ ASSERT_EQ(330903416631436410ULL, caller_registers.get(ustr__ZDcfa())); -+ ASSERT_EQ(5870666104170902211ULL, caller_registers.get(ustr__ZDra())); - - ASSERT_EQ(".cfa: 330903416631436410 .ra: 5870666104170902211", - cfi.Serialize()); - } - - TEST_F(Simple, SetManyRules) { - ExpectNoMemoryReferences(); - -@@ -136,23 +135,22 @@ - const UniqueString* reg4 = ToUniqueString("uncopyrightables"); - - cfi.SetRegisterRule(reg1, Module::Expr(".cfa 54370437 *")); - cfi.SetRegisterRule(reg2, Module::Expr("24076308 .cfa +")); - cfi.SetRegisterRule(reg3, Module::Expr(".cfa 29801007 -")); - cfi.SetRegisterRule(reg4, Module::Expr("92642917 .cfa /")); - ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); -- ASSERT_EQ(6U, caller_registers.size()); -- ASSERT_EQ(7664691U, caller_registers[ustr__ZDcfa()]); -- ASSERT_EQ(107469446U, caller_registers[ustr__ZDra()]); -- ASSERT_EQ(416732599139967ULL, caller_registers[reg1]); -- ASSERT_EQ(31740999U, caller_registers[reg2]); -- ASSERT_EQ(-22136316ULL, caller_registers[reg3]); -- ASSERT_EQ(12U, caller_registers[reg4]); -+ ASSERT_EQ(7664691U, caller_registers.get(ustr__ZDcfa())); -+ ASSERT_EQ(107469446U, caller_registers.get(ustr__ZDra())); -+ ASSERT_EQ(416732599139967ULL, caller_registers.get(reg1)); -+ ASSERT_EQ(31740999U, caller_registers.get(reg2)); -+ ASSERT_EQ(-22136316ULL, caller_registers.get(reg3)); -+ ASSERT_EQ(12U, caller_registers.get(reg4)); - ASSERT_EQ(".cfa: $temp1 68737028 = $temp2 61072337 = $temp1 $temp2 - " - ".ra: .cfa 99804755 + " - "pubvexingfjordschmaltzy: .cfa 29801007 - " - "register1: .cfa 54370437 * " - "uncopyrightables: 92642917 .cfa / " - "vodkathumbscrewingly: 24076308 .cfa +", - cfi.Serialize()); - } -@@ -160,19 +158,18 @@ - TEST_F(Simple, RulesOverride) { - ExpectNoMemoryReferences(); - - cfi.SetCFARule(Module::Expr("330903416631436410")); - cfi.SetRARule(Module::Expr("5870666104170902211")); - cfi.SetCFARule(Module::Expr("2828089117179001")); - ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); -- ASSERT_EQ(2U, caller_registers.size()); -- ASSERT_EQ(2828089117179001ULL, caller_registers[ustr__ZDcfa()]); -- ASSERT_EQ(5870666104170902211ULL, caller_registers[ustr__ZDra()]); -+ ASSERT_EQ(2828089117179001ULL, caller_registers.get(ustr__ZDcfa())); -+ ASSERT_EQ(5870666104170902211ULL, caller_registers.get(ustr__ZDra())); - ASSERT_EQ(".cfa: 2828089117179001 .ra: 5870666104170902211", - cfi.Serialize()); - } - - class Scope: public CFIFixture, public Test { }; - - // There should be no value for .cfa in scope when evaluating the CFA rule. - TEST_F(Scope, CFALacksCFA) { -@@ -196,37 +193,35 @@ - - // The current frame's registers should be in scope when evaluating - // the CFA rule. - TEST_F(Scope, CFASeesCurrentRegs) { - ExpectNoMemoryReferences(); - - const UniqueString* reg1 = ToUniqueString(".baraminology"); - const UniqueString* reg2 = ToUniqueString(".ornithorhynchus"); -- registers[reg1] = 0x06a7bc63e4f13893ULL; -- registers[reg2] = 0x5e0bf850bafce9d2ULL; -+ registers.set(reg1, 0x06a7bc63e4f13893ULL); -+ registers.set(reg2, 0x5e0bf850bafce9d2ULL); - cfi.SetCFARule(Module::Expr(".baraminology .ornithorhynchus +")); - cfi.SetRARule(Module::Expr("0")); - ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); -- ASSERT_EQ(2U, caller_registers.size()); - ASSERT_EQ(0x06a7bc63e4f13893ULL + 0x5e0bf850bafce9d2ULL, -- caller_registers[ustr__ZDcfa()]); -+ caller_registers.get(ustr__ZDcfa())); - } - - // .cfa should be in scope in the return address expression. - TEST_F(Scope, RASeesCFA) { - ExpectNoMemoryReferences(); - - cfi.SetCFARule(Module::Expr("48364076")); - cfi.SetRARule(Module::Expr(".cfa")); - ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); -- ASSERT_EQ(2U, caller_registers.size()); -- ASSERT_EQ(48364076U, caller_registers[ustr__ZDra()]); -+ ASSERT_EQ(48364076U, caller_registers.get(ustr__ZDra())); - } - - // There should be no value for .ra in scope when evaluating the CFA rule. - TEST_F(Scope, RALacksRA) { - ExpectNoMemoryReferences(); - - cfi.SetCFARule(Module::Expr("0")); - cfi.SetRARule(Module::Expr(".ra")); -@@ -236,36 +231,34 @@ - - // The current frame's registers should be in scope in the return - // address expression. - TEST_F(Scope, RASeesCurrentRegs) { - ExpectNoMemoryReferences(); - - cfi.SetCFARule(Module::Expr("10359370")); - const UniqueString* reg1 = ToUniqueString("noachian"); -- registers[reg1] = 0x54dc4a5d8e5eb503ULL; -+ registers.set(reg1, 0x54dc4a5d8e5eb503ULL); - cfi.SetRARule(Module::Expr(reg1, 0, false)); - ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); -- ASSERT_EQ(2U, caller_registers.size()); -- ASSERT_EQ(0x54dc4a5d8e5eb503ULL, caller_registers[ustr__ZDra()]); -+ ASSERT_EQ(0x54dc4a5d8e5eb503ULL, caller_registers.get(ustr__ZDra())); - } - - // .cfa should be in scope for register rules. - TEST_F(Scope, RegistersSeeCFA) { - ExpectNoMemoryReferences(); - - cfi.SetCFARule(Module::Expr("6515179")); - cfi.SetRARule(Module::Expr(".cfa")); - const UniqueString* reg1 = ToUniqueString("rogerian"); - cfi.SetRegisterRule(reg1, Module::Expr(".cfa")); - ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); -- ASSERT_EQ(3U, caller_registers.size()); -- ASSERT_EQ(6515179U, caller_registers[reg1]); -+ ASSERT_EQ(6515179U, caller_registers.get(reg1)); - } - - // The return address should not be in scope for register rules. - TEST_F(Scope, RegsLackRA) { - ExpectNoMemoryReferences(); - - cfi.SetCFARule(Module::Expr("42740329")); - cfi.SetRARule(Module::Expr("27045204")); -@@ -276,27 +269,26 @@ - } - - // Register rules can see the current frame's register values. - TEST_F(Scope, RegsSeeRegs) { - ExpectNoMemoryReferences(); - - const UniqueString* reg1 = ToUniqueString("$r1"); - const UniqueString* reg2 = ToUniqueString("$r2"); -- registers[reg1] = 0x6ed3582c4bedb9adULL; -- registers[reg2] = 0xd27d9e742b8df6d0ULL; -+ registers.set(reg1, 0x6ed3582c4bedb9adULL); -+ registers.set(reg2, 0xd27d9e742b8df6d0ULL); - cfi.SetCFARule(Module::Expr("88239303")); - cfi.SetRARule(Module::Expr("30503835")); - cfi.SetRegisterRule(reg1, Module::Expr("$r1 42175211 = $r2")); - cfi.SetRegisterRule(reg2, Module::Expr("$r2 21357221 = $r1")); - ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); -- ASSERT_EQ(4U, caller_registers.size()); -- ASSERT_EQ(0xd27d9e742b8df6d0ULL, caller_registers[reg1]); -- ASSERT_EQ(0x6ed3582c4bedb9adULL, caller_registers[reg2]); -+ ASSERT_EQ(0xd27d9e742b8df6d0ULL, caller_registers.get(reg1)); -+ ASSERT_EQ(0x6ed3582c4bedb9adULL, caller_registers.get(reg2)); - } - - // Each rule's temporaries are separate. - TEST_F(Scope, SeparateTempsRA) { - ExpectNoMemoryReferences(); - - cfi.SetCFARule(Module::Expr("$temp1 76569129 = $temp1")); - cfi.SetRARule(Module::Expr("0")); -@@ -440,39 +432,39 @@ - CFIFrameInfoParseHandler handler; - }; - - class ParseHandler: public ParseHandlerFixture, public Test { }; - - TEST_F(ParseHandler, CFARARule) { - handler.CFARule("reg-for-cfa"); - handler.RARule("reg-for-ra"); -- registers[ToUniqueString("reg-for-cfa")] = 0x268a9a4a3821a797ULL; -- registers[ToUniqueString("reg-for-ra")] = 0x6301b475b8b91c02ULL; -+ registers.set(ToUniqueString("reg-for-cfa"), 0x268a9a4a3821a797ULL); -+ registers.set(ToUniqueString("reg-for-ra"), 0x6301b475b8b91c02ULL); - ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); -- ASSERT_EQ(0x268a9a4a3821a797ULL, caller_registers[ustr__ZDcfa()]); -- ASSERT_EQ(0x6301b475b8b91c02ULL, caller_registers[ustr__ZDra()]); -+ ASSERT_EQ(0x268a9a4a3821a797ULL, caller_registers.get(ustr__ZDcfa())); -+ ASSERT_EQ(0x6301b475b8b91c02ULL, caller_registers.get(ustr__ZDra())); - } - - TEST_F(ParseHandler, RegisterRules) { - handler.CFARule("reg-for-cfa"); - handler.RARule("reg-for-ra"); - handler.RegisterRule(ToUniqueString("reg1"), "reg-for-reg1"); - handler.RegisterRule(ToUniqueString("reg2"), "reg-for-reg2"); -- registers[ToUniqueString("reg-for-cfa")] = 0x268a9a4a3821a797ULL; -- registers[ToUniqueString("reg-for-ra")] = 0x6301b475b8b91c02ULL; -- registers[ToUniqueString("reg-for-reg1")] = 0x06cde8e2ff062481ULL; -- registers[ToUniqueString("reg-for-reg2")] = 0xff0c4f76403173e2ULL; -+ registers.set(ToUniqueString("reg-for-cfa"), 0x268a9a4a3821a797ULL); -+ registers.set(ToUniqueString("reg-for-ra"), 0x6301b475b8b91c02ULL); -+ registers.set(ToUniqueString("reg-for-reg1"), 0x06cde8e2ff062481ULL); -+ registers.set(ToUniqueString("reg-for-reg2"), 0xff0c4f76403173e2ULL); - ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, - &caller_registers)); -- ASSERT_EQ(0x268a9a4a3821a797ULL, caller_registers[ustr__ZDcfa()]); -- ASSERT_EQ(0x6301b475b8b91c02ULL, caller_registers[ustr__ZDra()]); -- ASSERT_EQ(0x06cde8e2ff062481ULL, caller_registers[ToUniqueString("reg1")]); -- ASSERT_EQ(0xff0c4f76403173e2ULL, caller_registers[ToUniqueString("reg2")]); -+ ASSERT_EQ(0x268a9a4a3821a797ULL, caller_registers.get(ustr__ZDcfa())); -+ ASSERT_EQ(0x6301b475b8b91c02ULL, caller_registers.get(ustr__ZDra())); -+ ASSERT_EQ(0x06cde8e2ff062481ULL, caller_registers.get(ToUniqueString("reg1"))); -+ ASSERT_EQ(0xff0c4f76403173e2ULL, caller_registers.get(ToUniqueString("reg2"))); - } - - struct SimpleCFIWalkerFixture { - struct RawContext { - uint64_t r0, r1, r2, r3, r4, sp, pc; - }; - enum Validity { - R0_VALID = 0x01, -diff --git a/src/processor/fast_source_line_resolver_unittest.cc b/src/processor/fast_source_line_resolver_unittest.cc ---- a/src/processor/fast_source_line_resolver_unittest.cc -+++ b/src/processor/fast_source_line_resolver_unittest.cc -@@ -59,16 +59,17 @@ - using google_breakpad::FromUniqueString; - using google_breakpad::ModuleSerializer; - using google_breakpad::ModuleComparer; - using google_breakpad::CFIFrameInfo; - using google_breakpad::CodeModule; - using google_breakpad::MemoryRegion; - using google_breakpad::StackFrame; - using google_breakpad::ToUniqueString; -+using google_breakpad::UniqueString; - using google_breakpad::WindowsFrameInfo; - using google_breakpad::linked_ptr; - using google_breakpad::scoped_ptr; - using google_breakpad::ustr__ZDcfa; - using google_breakpad::ustr__ZDra; - using google_breakpad::ustr__ZSebx; - using google_breakpad::ustr__ZSebp; - using google_breakpad::ustr__ZSedi; -@@ -125,27 +126,30 @@ - }; - - // Verify that, for every association in ACTUAL, EXPECTED has the same - // association. (That is, ACTUAL's associations should be a subset of - // EXPECTED's.) Also verify that ACTUAL has associations for ".ra" and - // ".cfa". - static bool VerifyRegisters( - const char *file, int line, -- const CFIFrameInfo::RegisterValueMap &expected, -- const CFIFrameInfo::RegisterValueMap &actual) { -- CFIFrameInfo::RegisterValueMap::const_iterator a; -+ const std::map &expected, -+ const CFIFrameInfo::RegisterValueMap &actual_regmap) { -+ std::map actual; -+ actual_regmap.copy_to_map(&actual); -+ -+ std::map::const_iterator a; - a = actual.find(ustr__ZDcfa()); - if (a == actual.end()) - return false; - a = actual.find(ustr__ZDra()); - if (a == actual.end()) - return false; - for (a = actual.begin(); a != actual.end(); a++) { -- CFIFrameInfo::RegisterValueMap::const_iterator e = -+ std::map::const_iterator e = - expected.find(a->first); - if (e == expected.end()) { - fprintf(stderr, "%s:%d: unexpected register '%s' recovered, value 0x%x\n", - file, line, FromUniqueString(a->first), a->second); - return false; - } - if (e->second != a->second) { - fprintf(stderr, -@@ -286,86 +290,87 @@ - - frame.instruction = 0x3e9f; - frame.module = &module1; - cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame)); - ASSERT_FALSE(cfi_frame_info.get()); - - CFIFrameInfo::RegisterValueMap current_registers; - CFIFrameInfo::RegisterValueMap caller_registers; -- CFIFrameInfo::RegisterValueMap expected_caller_registers; -+ std::map expected_caller_registers; - MockMemoryRegion memory; - - // Regardless of which instruction evaluation takes place at, it - // should produce the same values for the caller's registers. -+ // should produce the same values for the caller's registers. - expected_caller_registers[ustr__ZDcfa()] = 0x1001c; -- expected_caller_registers[ustr__ZDra()] = 0xf6438648; -+ expected_caller_registers[ustr__ZDra()] = 0xf6438648; - expected_caller_registers[ustr__ZSebp()] = 0x10038; - expected_caller_registers[ustr__ZSebx()] = 0x98ecadc3; - expected_caller_registers[ustr__ZSesi()] = 0x878f7524; - expected_caller_registers[ustr__ZSedi()] = 0x6312f9a5; - - frame.instruction = 0x3d40; - frame.module = &module1; - current_registers.clear(); -- current_registers[ustr__ZSesp()] = 0x10018; -- current_registers[ustr__ZSebp()] = 0x10038; -- current_registers[ustr__ZSebx()] = 0x98ecadc3; -- current_registers[ustr__ZSesi()] = 0x878f7524; -- current_registers[ustr__ZSedi()] = 0x6312f9a5; -+ current_registers.set(ustr__ZSesp(), 0x10018); -+ current_registers.set(ustr__ZSebp(), 0x10038); -+ current_registers.set(ustr__ZSebx(), 0x98ecadc3); -+ current_registers.set(ustr__ZSesi(), 0x878f7524); -+ current_registers.set(ustr__ZSedi(), 0x6312f9a5); - cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame)); - ASSERT_TRUE(cfi_frame_info.get()); - ASSERT_TRUE(cfi_frame_info.get() - ->FindCallerRegs(current_registers, memory, - &caller_registers)); - ASSERT_TRUE(VerifyRegisters(__FILE__, __LINE__, - expected_caller_registers, caller_registers)); - - frame.instruction = 0x3d41; -- current_registers[ustr__ZSesp()] = 0x10014; -+ current_registers.set(ustr__ZSesp(), 0x10014); - cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame)); - ASSERT_TRUE(cfi_frame_info.get()); - ASSERT_TRUE(cfi_frame_info.get() - ->FindCallerRegs(current_registers, memory, - &caller_registers)); - ASSERT_TRUE(VerifyRegisters(__FILE__, __LINE__, - expected_caller_registers, caller_registers)); - - frame.instruction = 0x3d43; -- current_registers[ustr__ZSebp()] = 0x10014; -+ current_registers.set(ustr__ZSebp(), 0x10014); - cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame)); - ASSERT_TRUE(cfi_frame_info.get()); - ASSERT_TRUE(cfi_frame_info.get() - ->FindCallerRegs(current_registers, memory, - &caller_registers)); - VerifyRegisters(__FILE__, __LINE__, - expected_caller_registers, caller_registers); - - frame.instruction = 0x3d54; -- current_registers[ustr__ZSebx()] = 0x6864f054U; -+ current_registers.set(ustr__ZSebx(), 0x6864f054U); - cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame)); - ASSERT_TRUE(cfi_frame_info.get()); - ASSERT_TRUE(cfi_frame_info.get() - ->FindCallerRegs(current_registers, memory, - &caller_registers)); - VerifyRegisters(__FILE__, __LINE__, - expected_caller_registers, caller_registers); - - frame.instruction = 0x3d5a; -- current_registers[ustr__ZSesi()] = 0x6285f79aU; -+ current_registers.set(ustr__ZSesi(), 0x6285f79aU); - cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame)); - ASSERT_TRUE(cfi_frame_info.get()); - ASSERT_TRUE(cfi_frame_info.get() - ->FindCallerRegs(current_registers, memory, - &caller_registers)); - VerifyRegisters(__FILE__, __LINE__, - expected_caller_registers, caller_registers); - - frame.instruction = 0x3d84; -- current_registers[ustr__ZSedi()] = 0x64061449U; -+ current_registers.set(ustr__ZSedi(), 0x64061449U); - cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame)); - ASSERT_TRUE(cfi_frame_info.get()); - ASSERT_TRUE(cfi_frame_info.get() - ->FindCallerRegs(current_registers, memory, - &caller_registers)); - VerifyRegisters(__FILE__, __LINE__, - expected_caller_registers, caller_registers); - -diff --git a/src/processor/postfix_evaluator-inl.h b/src/processor/postfix_evaluator-inl.h ---- a/src/processor/postfix_evaluator-inl.h -+++ b/src/processor/postfix_evaluator-inl.h -@@ -185,19 +185,19 @@ - return false; - } - if (identifier == ustr__empty() || Index(identifier,0) != '$') { - BPLOG(ERROR) << "Can't assign " << HexString(value) << " to " << - identifier << ": " << expression; - return false; - } - -- (*dictionary_)[identifier] = value; -+ dictionary_->set(identifier, value); - if (assigned) -- (*assigned)[identifier] = true; -+ assigned->set(identifier, true); - } else { - // Push it onto the stack as-is, but first convert it either to a - // ValueType (if a literal) or to a UniqueString* (if an identifier). - // - // First, try to treat the value as a literal. Literals may have leading - // '-' sign, and the entire remaining string must be parseable as - // ValueType. If this isn't possible, it can't be a literal, so treat it - // as an identifier instead. -@@ -300,28 +300,28 @@ - - return PopValue(result); - } - - // Simple-form expressions - case Module::kExprSimple: - case Module::kExprSimpleMem: { - // Look up the base value -- typename DictionaryType::const_iterator iterator -- = dictionary_->find(expr.ident_); -- if (iterator == dictionary_->end()) { -+ bool found = false; -+ ValueType v = dictionary_->get(&found, expr.ident_); -+ if (!found) { - // The identifier wasn't found in the dictionary. Don't imply any - // default value, just fail. -- BPLOG(INFO) << "Identifier " << expr.ident_ -+ BPLOG(INFO) << "Identifier " << FromUniqueString(expr.ident_) - << " not in dictionary (kExprSimple{Mem})"; - return false; - } - - // Form the sum -- ValueType sum = iterator->second + (int64_t)expr.offset_; -+ ValueType sum = v + (int64_t)expr.offset_; - - // and dereference if necessary - if (expr.how_ == Module::kExprSimpleMem) { - ValueType derefd; - if (!memory_ || !memory_->GetMemoryAtAddress(sum, &derefd)) { - return false; - } - *result = derefd; -@@ -368,27 +368,27 @@ - if ((result = PopValueOrIdentifier(&literal, &token)) == POP_RESULT_FAIL) { - return false; - } else if (result == POP_RESULT_VALUE) { - // This is the easy case. - *value = literal; - } else { // result == POP_RESULT_IDENTIFIER - // There was an identifier at the top of the stack. Resolve it to a - // value by looking it up in the dictionary. -- typename DictionaryType::const_iterator iterator = -- dictionary_->find(token); -- if (iterator == dictionary_->end()) { -+ bool found = false; -+ ValueType v = dictionary_->get(&found, token); -+ if (!found) { - // The identifier wasn't found in the dictionary. Don't imply any - // default value, just fail. - BPLOG(INFO) << "Identifier " << FromUniqueString(token) - << " not in dictionary"; - return false; - } - -- *value = iterator->second; -+ *value = v; - } - - return true; - } - - - template - bool PostfixEvaluator::PopValues(ValueType *value1, -diff --git a/src/processor/postfix_evaluator.h b/src/processor/postfix_evaluator.h ---- a/src/processor/postfix_evaluator.h -+++ b/src/processor/postfix_evaluator.h -@@ -93,18 +93,18 @@ - StackElem(const UniqueString* ustr) { isValue = false; u.ustr = ustr; } - bool isValue; - union { ValueType val; const UniqueString* ustr; } u; - }; - - template - class PostfixEvaluator { - public: -- typedef map DictionaryType; -- typedef map DictionaryValidityType; -+ typedef UniqueStringMap DictionaryType; -+ typedef UniqueStringMap DictionaryValidityType; - - // Create a PostfixEvaluator object that may be used (with Evaluate) on - // one or more expressions. PostfixEvaluator does not take ownership of - // either argument. |memory| may be NULL, in which case dereferencing - // (^) will not be supported. |dictionary| may be NULL, but evaluation - // will fail in that case unless set_dictionary is used before calling - // Evaluate. - PostfixEvaluator(DictionaryType *dictionary, const MemoryRegion *memory) -diff --git a/src/processor/postfix_evaluator_unittest.cc b/src/processor/postfix_evaluator_unittest.cc ---- a/src/processor/postfix_evaluator_unittest.cc -+++ b/src/processor/postfix_evaluator_unittest.cc -@@ -178,22 +178,22 @@ - validate_data_0[ToUniqueString("$rAdd3")] = 4; - validate_data_0[ToUniqueString("$rMul2")] = 54; - - // The second test set simulates a couple of MSVC program strings. - // The data is fudged a little bit because the tests use FakeMemoryRegion - // instead of a real stack snapshot, but the program strings are real and - // the implementation doesn't know or care that the data is not real. - PostfixEvaluator::DictionaryType dictionary_1; -- dictionary_1[ustr__ZSebp()] = 0xbfff0010; -- dictionary_1[ustr__ZSeip()] = 0x10000000; -- dictionary_1[ustr__ZSesp()] = 0xbfff0000; -- dictionary_1[ustr__ZDcbSavedRegs()] = 4; -- dictionary_1[ustr__ZDcbParams()] = 4; -- dictionary_1[ustr__ZDraSearchStart()] = 0xbfff0020; -+ dictionary_1.set(ustr__ZSebp(), 0xbfff0010); -+ dictionary_1.set(ustr__ZSeip(), 0x10000000); -+ dictionary_1.set(ustr__ZSesp(), 0xbfff0000); -+ dictionary_1.set(ustr__ZDcbSavedRegs(), 4); -+ dictionary_1.set(ustr__ZDcbParams(), 4); -+ dictionary_1.set(ustr__ZDraSearchStart(), 0xbfff0020); - const EvaluateTest evaluate_tests_1[] = { - { "$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = " - "$L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =", true }, - // Intermediate state: $T0 = 0xbfff0010, $eip = 0xbfff0015, - // $ebp = 0xbfff0011, $esp = 0xbfff0018, - // $L = 0xbfff000c, $P = 0xbfff001c - { "$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = " - "$L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ =", -@@ -273,70 +273,65 @@ - for (map::const_iterator - validate_iterator = - evaluate_test_set->validate_data->begin(); - validate_iterator != evaluate_test_set->validate_data->end(); - ++validate_iterator) { - const UniqueString* identifier = validate_iterator->first; - unsigned int expected_value = validate_iterator->second; - -- map::const_iterator -- dictionary_iterator = -- evaluate_test_set->dictionary->find(identifier); -- - // The identifier must exist in the dictionary. -- if (dictionary_iterator == evaluate_test_set->dictionary->end()) { -+ if (!evaluate_test_set->dictionary->have(identifier)) { - fprintf(stderr, "FAIL: evaluate test set %d/%d, " - "validate identifier \"%s\", " - "expected %d, observed not found\n", - evaluate_test_set_index, evaluate_test_set_count, - FromUniqueString(identifier), expected_value); - return false; - } - - // The value in the dictionary must be the same as the expected value. -- unsigned int observed_value = dictionary_iterator->second; -+ unsigned int observed_value = -+ evaluate_test_set->dictionary->get(identifier); - if (expected_value != observed_value) { - fprintf(stderr, "FAIL: evaluate test set %d/%d, " - "validate identifier \"%s\", " - "expected %d, observed %d\n", - evaluate_test_set_index, evaluate_test_set_count, - FromUniqueString(identifier), expected_value, observed_value); - return false; - } - - // The value must be set in the "assigned" dictionary if it was a - // variable. It must not have been assigned if it was a constant. - bool expected_assigned = FromUniqueString(identifier)[0] == '$'; - bool observed_assigned = false; -- PostfixEvaluator::DictionaryValidityType::const_iterator -- iterator_assigned = assigned.find(identifier); -- if (iterator_assigned != assigned.end()) { -- observed_assigned = iterator_assigned->second; -+ if (assigned.have(identifier)) { -+ observed_assigned = assigned.get(identifier); - } - if (expected_assigned != observed_assigned) { - fprintf(stderr, "FAIL: evaluate test set %d/%d, " - "validate assignment of \"%s\", " - "expected %d, observed %d\n", - evaluate_test_set_index, evaluate_test_set_count, - FromUniqueString(identifier), expected_assigned, - observed_assigned); - return false; - } - } - } - - // EvaluateForValue tests. - PostfixEvaluator::DictionaryType dictionary_2; -- dictionary_2[ustr__ZSebp()] = 0xbfff0010; -- dictionary_2[ustr__ZSeip()] = 0x10000000; -- dictionary_2[ustr__ZSesp()] = 0xbfff0000; -- dictionary_2[ustr__ZDcbSavedRegs()] = 4; -- dictionary_2[ustr__ZDcbParams()] = 4; -- dictionary_2[ustr__ZDraSearchStart()] = 0xbfff0020; -+ dictionary_2.set(ustr__ZSebp(), 0xbfff0010); -+ dictionary_2.set(ustr__ZSeip(), 0x10000000); -+ dictionary_2.set(ustr__ZSesp(), 0xbfff0000); -+ dictionary_2.set(ustr__ZDcbSavedRegs(), 4); -+ dictionary_2.set(ustr__ZDcbParams(), 4); -+ dictionary_2.set(ustr__ZDraSearchStart(), 0xbfff0020); - const EvaluateForValueTest evaluate_for_value_tests_2[] = { - { "28907223", true, 28907223 }, // simple constant - { "89854293 40010015 +", true, 89854293 + 40010015 }, // arithmetic - { "-870245 8769343 +", true, 7899098 }, // negative constants - { "$ebp $esp - $eip +", true, 0x10000010 }, // variable references - { "18929794 34015074", false, 0 }, // too many values - { "$ebp $ebp 4 - =", false, 0 }, // too few values - { "$new $eip = $new", true, 0x10000000 }, // make new variable -@@ -370,41 +365,43 @@ - if (test->evaluable && result != test->value) { - fprintf(stderr, "FAIL: evaluate for value test %d, " - "expected value to be 0x%x, but it was 0x%x\n", - i, test->value, result); - return false; - } - } - -+ map dictionary_2_map; -+ dictionary_2.copy_to_map(&dictionary_2_map); - for (map::iterator v = - validate_data_2.begin(); - v != validate_data_2.end(); v++) { - map::iterator a = -- dictionary_2.find(v->first); -- if (a == dictionary_2.end()) { -+ dictionary_2_map.find(v->first); -+ if (a == dictionary_2_map.end()) { - fprintf(stderr, "FAIL: evaluate for value dictionary check: " - "expected dict[\"%s\"] to be 0x%x, but it was unset\n", - FromUniqueString(v->first), v->second); - return false; - } else if (a->second != v->second) { - fprintf(stderr, "FAIL: evaluate for value dictionary check: " - "expected dict[\"%s\"] to be 0x%x, but it was 0x%x\n", - FromUniqueString(v->first), v->second, a->second); - return false; -- } -- dictionary_2.erase(a); -+ } -+ dictionary_2_map.erase(a); - } -- -+ - map::iterator remaining = -- dictionary_2.begin(); -- if (remaining != dictionary_2.end()) { -+ dictionary_2_map.begin(); -+ if (remaining != dictionary_2_map.end()) { - fprintf(stderr, "FAIL: evaluation of test expressions put unexpected " - "values in dictionary:\n"); -- for (; remaining != dictionary_2.end(); remaining++) -+ for (; remaining != dictionary_2_map.end(); remaining++) - fprintf(stderr, " dict[\"%s\"] == 0x%x\n", - FromUniqueString(remaining->first), remaining->second); - return false; - } - - return true; - } - -diff --git a/src/processor/stackwalker_arm.cc b/src/processor/stackwalker_arm.cc ---- a/src/processor/stackwalker_arm.cc -+++ b/src/processor/stackwalker_arm.cc -@@ -97,70 +97,70 @@ - ToUniqueString("fps"), ToUniqueString("cpsr"), - NULL - }; - - // Populate a dictionary with the valid register values in last_frame. - CFIFrameInfo::RegisterValueMap callee_registers; - for (int i = 0; register_names[i]; i++) - if (last_frame->context_validity & StackFrameARM::RegisterValidFlag(i)) -- callee_registers[register_names[i]] = last_frame->context.iregs[i]; -+ callee_registers.set(register_names[i], last_frame->context.iregs[i]); - - // Use the STACK CFI data to recover the caller's register values. - CFIFrameInfo::RegisterValueMap caller_registers; - if (!cfi_frame_info->FindCallerRegs(callee_registers, *memory_, - &caller_registers)) - return NULL; - - // Construct a new stack frame given the values the CFI recovered. - scoped_ptr frame(new StackFrameARM()); - for (int i = 0; register_names[i]; i++) { -- CFIFrameInfo::RegisterValueMap::iterator entry = -- caller_registers.find(register_names[i]); -- if (entry != caller_registers.end()) { -+ bool found = false; -+ uint32_t v = caller_registers.get(&found, register_names[i]); -+ if (found) { - // We recovered the value of this register; fill the context with the - // value from caller_registers. - frame->context_validity |= StackFrameARM::RegisterValidFlag(i); -- frame->context.iregs[i] = entry->second; -+ frame->context.iregs[i] = v; - } else if (4 <= i && i <= 11 && (last_frame->context_validity & - StackFrameARM::RegisterValidFlag(i))) { - // If the STACK CFI data doesn't mention some callee-saves register, and - // it is valid in the callee, assume the callee has not yet changed it. - // Registers r4 through r11 are callee-saves, according to the Procedure - // Call Standard for the ARM Architecture, which the Linux ABI follows. - frame->context_validity |= StackFrameARM::RegisterValidFlag(i); - frame->context.iregs[i] = last_frame->context.iregs[i]; - } - } - // If the CFI doesn't recover the PC explicitly, then use .ra. - if (!(frame->context_validity & StackFrameARM::CONTEXT_VALID_PC)) { -- CFIFrameInfo::RegisterValueMap::iterator entry = -- caller_registers.find(ustr__ZDra()); -- if (entry != caller_registers.end()) { -+ bool found = false; -+ uint32_t v = caller_registers.get(&found, ustr__ZDra()); -+ if (found) { - if (fp_register_ == -1) { - frame->context_validity |= StackFrameARM::CONTEXT_VALID_PC; -- frame->context.iregs[MD_CONTEXT_ARM_REG_PC] = entry->second; -+ frame->context.iregs[MD_CONTEXT_ARM_REG_PC] = v; - } else { - // The CFI updated the link register and not the program counter. - // Handle getting the program counter from the link register. - frame->context_validity |= StackFrameARM::CONTEXT_VALID_PC; - frame->context_validity |= StackFrameARM::CONTEXT_VALID_LR; -- frame->context.iregs[MD_CONTEXT_ARM_REG_LR] = entry->second; -+ frame->context.iregs[MD_CONTEXT_ARM_REG_LR] = v; - frame->context.iregs[MD_CONTEXT_ARM_REG_PC] = - last_frame->context.iregs[MD_CONTEXT_ARM_REG_LR]; - } - } - } - // If the CFI doesn't recover the SP explicitly, then use .cfa. - if (!(frame->context_validity & StackFrameARM::CONTEXT_VALID_SP)) { -- CFIFrameInfo::RegisterValueMap::iterator entry = -- caller_registers.find(ustr__ZDcfa()); -- if (entry != caller_registers.end()) { -+ bool found = false; -+ uint32_t v = caller_registers.get(&found, ustr__ZDcfa()); -+ if (found) { - frame->context_validity |= StackFrameARM::CONTEXT_VALID_SP; -- frame->context.iregs[MD_CONTEXT_ARM_REG_SP] = entry->second; -+ frame->context.iregs[MD_CONTEXT_ARM_REG_SP] = v; - } - } - - // If we didn't recover the PC and the SP, then the frame isn't very useful. - static const int essentials = (StackFrameARM::CONTEXT_VALID_SP - | StackFrameARM::CONTEXT_VALID_PC); - if ((frame->context_validity & essentials) != essentials) - return NULL; -diff --git a/src/processor/stackwalker_x86.cc b/src/processor/stackwalker_x86.cc ---- a/src/processor/stackwalker_x86.cc -+++ b/src/processor/stackwalker_x86.cc -@@ -194,26 +194,26 @@ - } - } - - // Set up the dictionary for the PostfixEvaluator. %ebp and %esp are used - // in each program string, and their previous values are known, so set them - // here. - PostfixEvaluator::DictionaryType dictionary; - // Provide the current register values. -- dictionary[ustr__ZSebp()] = last_frame->context.ebp; -- dictionary[ustr__ZSesp()] = last_frame->context.esp; -+ dictionary.set(ustr__ZSebp(), last_frame->context.ebp); -+ dictionary.set(ustr__ZSesp(), last_frame->context.esp); - // Provide constants from the debug info for last_frame and its callee. - // .cbCalleeParams is a Breakpad extension that allows us to use the - // PostfixEvaluator engine when certain types of debugging information - // are present without having to write the constants into the program - // string as literals. -- dictionary[ustr__ZDcbCalleeParams()] = last_frame_callee_parameter_size; -- dictionary[ustr__ZDcbSavedRegs()] = last_frame_info->saved_register_size; -- dictionary[ustr__ZDcbLocals()] = last_frame_info->local_size; -+ dictionary.set(ustr__ZDcbCalleeParams(), last_frame_callee_parameter_size); -+ dictionary.set(ustr__ZDcbSavedRegs(), last_frame_info->saved_register_size); -+ dictionary.set(ustr__ZDcbLocals(), last_frame_info->local_size); - - uint32_t raSearchStart = last_frame->context.esp + - last_frame_callee_parameter_size + - last_frame_info->local_size + - last_frame_info->saved_register_size; - - uint32_t raSearchStartOld = raSearchStart; - uint32_t found = 0; // dummy value -@@ -232,20 +232,20 @@ - // Skip one slot from the stack and do another scan in order to get the - // actual return address. - raSearchStart += 4; - ScanForReturnAddress(raSearchStart, &raSearchStart, &found, 3); - } - - // The difference between raSearch and raSearchStart is unknown, - // but making them the same seems to work well in practice. -- dictionary[ustr__ZDraSearchStart()] = raSearchStart; -- dictionary[ustr__ZDraSearch()] = raSearchStart; -+ dictionary.set(ustr__ZDraSearchStart(), raSearchStart); -+ dictionary.set(ustr__ZDraSearch(), raSearchStart); - -- dictionary[ustr__ZDcbParams()] = last_frame_info->parameter_size; -+ dictionary.set(ustr__ZDcbParams(), last_frame_info->parameter_size); - - // Decide what type of program string to use. The program string is in - // postfix notation and will be passed to PostfixEvaluator::Evaluate. - // Given the dictionary and the program string, it is possible to compute - // the return address and the values of other registers in the calling - // function. Because of bugs described below, the stack may need to be - // scanned for these values. The results of program string evaluation - // will be used to determine whether to scan for better values. -@@ -325,18 +325,18 @@ - } - - // Now crank it out, making sure that the program string set at least the - // two required variables. - PostfixEvaluator evaluator = - PostfixEvaluator(&dictionary, memory_); - PostfixEvaluator::DictionaryValidityType dictionary_validity; - if (!evaluator.Evaluate(program_string, &dictionary_validity) || -- dictionary_validity.find(ustr__ZSeip()) == dictionary_validity.end() || -- dictionary_validity.find(ustr__ZSesp()) == dictionary_validity.end()) { -+ !dictionary_validity.have(ustr__ZSeip()) || -+ !dictionary_validity.have(ustr__ZSesp())) { - // Program string evaluation failed. It may be that %eip is not somewhere - // with stack frame info, and %ebp is pointing to non-stack memory, so - // our evaluation couldn't succeed. We'll scan the stack for a return - // address. This can happen if the stack is in a module for which - // we don't have symbols, and that module is compiled without a - // frame pointer. - uint32_t location_start = last_frame->context.esp; - uint32_t location, eip; -@@ -344,69 +344,70 @@ - // if we can't find an instruction pointer even with stack scanning, - // give up. - return NULL; - } - - // This seems like a reasonable return address. Since program string - // evaluation failed, use it and set %esp to the location above the - // one where the return address was found. -- dictionary[ustr__ZSeip()] = eip; -- dictionary[ustr__ZSesp()] = location + 4; -+ dictionary.set(ustr__ZSeip(), eip); -+ dictionary.set(ustr__ZSesp(), location + 4); - trust = StackFrame::FRAME_TRUST_SCAN; - } - - // Since this stack frame did not use %ebp in a traditional way, - // locating the return address isn't entirely deterministic. In that - // case, the stack can be scanned to locate the return address. - // - // However, if program string evaluation resulted in both %eip and - // %ebp values of 0, trust that the end of the stack has been - // reached and don't scan for anything else. -- if (dictionary[ustr__ZSeip()] != 0 || dictionary[ustr__ZSebp()] != 0) { -+ if (dictionary.get(ustr__ZSeip()) != 0 || -+ dictionary.get(ustr__ZSebp()) != 0) { - int offset = 0; - - // This scan can only be done if a CodeModules object is available, to - // check that candidate return addresses are in fact inside a module. - // - // TODO(mmentovai): This ignores dynamically-generated code. One possible - // solution is to check the minidump's memory map to see if the candidate - // %eip value comes from a mapped executable page, although this would - // require dumps that contain MINIDUMP_MEMORY_INFO, which the Breakpad - // client doesn't currently write (it would need to call MiniDumpWriteDump - // with the MiniDumpWithFullMemoryInfo type bit set). Even given this - // ability, older OSes (pre-XP SP2) and CPUs (pre-P4) don't enforce - // an independent execute privilege on memory pages. - -- uint32_t eip = dictionary[ustr__ZSeip()]; -+ uint32_t eip = dictionary.get(ustr__ZSeip()); - if (modules_ && !modules_->GetModuleForAddress(eip)) { - // The instruction pointer at .raSearchStart was invalid, so start - // looking one 32-bit word above that location. -- uint32_t location_start = dictionary[ustr__ZDraSearchStart()] + 4; -+ uint32_t location_start = dictionary.get(ustr__ZDraSearchStart()) + 4; - uint32_t location; - if (ScanForReturnAddress(location_start, &location, &eip)) { - // This is a better return address that what program string - // evaluation found. Use it, and set %esp to the location above the - // one where the return address was found. -- dictionary[ustr__ZSeip()] = eip; -- dictionary[ustr__ZSesp()] = location + 4; -+ dictionary.set(ustr__ZSeip(), eip); -+ dictionary.set(ustr__ZSesp(), location + 4); - offset = location - location_start; - trust = StackFrame::FRAME_TRUST_CFI_SCAN; - } - } - - if (recover_ebp) { - // When trying to recover the previous value of the frame pointer (%ebp), - // start looking at the lowest possible address in the saved-register - // area, and look at the entire saved register area, increased by the - // size of |offset| to account for additional data that may be on the - // stack. The scan is performed from the highest possible address to - // the lowest, because the expectation is that the function's prolog - // would have saved %ebp early. -- uint32_t ebp = dictionary[ustr__ZSebp()]; -+ uint32_t ebp = dictionary.get(ustr__ZSebp()); - - // When a scan for return address is used, it is possible to skip one or - // more frames (when return address is not in a known module). One - // indication for skipped frames is when the value of %ebp is lower than - // the location of the return address on the stack - bool has_skipped_frames = - (trust != StackFrame::FRAME_TRUST_CFI && ebp <= raSearchStart + offset); - -@@ -420,49 +421,49 @@ - location >= location_end; - location -= 4) { - if (!memory_->GetMemoryAtAddress(location, &ebp)) - break; - - if (memory_->GetMemoryAtAddress(ebp, &value)) { - // The candidate value is a pointer to the same memory region - // (the stack). Prefer it as a recovered %ebp result. -- dictionary[ustr__ZSebp()] = ebp; -+ dictionary.set(ustr__ZSebp(), ebp); - break; - } - } - } - } - } - - // Create a new stack frame (ownership will be transferred to the caller) - // and fill it in. - StackFrameX86* frame = new StackFrameX86(); - - frame->trust = trust; - frame->context = last_frame->context; -- frame->context.eip = dictionary[ustr__ZSeip()]; -- frame->context.esp = dictionary[ustr__ZSesp()]; -- frame->context.ebp = dictionary[ustr__ZSebp()]; -+ frame->context.eip = dictionary.get(ustr__ZSeip()); -+ frame->context.esp = dictionary.get(ustr__ZSesp()); -+ frame->context.ebp = dictionary.get(ustr__ZSebp()); - frame->context_validity = StackFrameX86::CONTEXT_VALID_EIP | - StackFrameX86::CONTEXT_VALID_ESP | - StackFrameX86::CONTEXT_VALID_EBP; - - // These are nonvolatile (callee-save) registers, and the program string - // may have filled them in. -- if (dictionary_validity.find(ustr__ZSebx()) != dictionary_validity.end()) { -- frame->context.ebx = dictionary[ustr__ZSebx()]; -+ if (dictionary_validity.have(ustr__ZSebx())) { -+ frame->context.ebx = dictionary.get(ustr__ZSebx()); - frame->context_validity |= StackFrameX86::CONTEXT_VALID_EBX; - } -- if (dictionary_validity.find(ustr__ZSesi()) != dictionary_validity.end()) { -- frame->context.esi = dictionary[ustr__ZSesi()]; -+ if (dictionary_validity.have(ustr__ZSesi())) { -+ frame->context.esi = dictionary.get(ustr__ZSesi()); - frame->context_validity |= StackFrameX86::CONTEXT_VALID_ESI; - } -- if (dictionary_validity.find(ustr__ZSedi()) != dictionary_validity.end()) { -- frame->context.edi = dictionary[ustr__ZSedi()]; -+ if (dictionary_validity.have(ustr__ZSedi())) { -+ frame->context.edi = dictionary.get(ustr__ZSedi()); - frame->context_validity |= StackFrameX86::CONTEXT_VALID_EDI; - } - - return frame; - } - - StackFrameX86* StackwalkerX86::GetCallerByCFIFrameInfo( - const vector &frames, diff --git a/toolkit/crashreporter/breakpad-patches/08-dwarf2reader-dynamic-cast.patch b/toolkit/crashreporter/breakpad-patches/08-dwarf2reader-dynamic-cast.patch deleted file mode 100644 index 01354ace5fda..000000000000 --- a/toolkit/crashreporter/breakpad-patches/08-dwarf2reader-dynamic-cast.patch +++ /dev/null @@ -1,212 +0,0 @@ -# HG changeset patch -# User Ted Mielczarek -# Date 1362600444 18000 -# Node ID 0eb3c7ba8a38a269ab975eff3f95a1a5d5d937b9 -# Parent 6b68e82037b8322fb392cea369d517aeeaaee9d3 -Stop using dynamic_cast in dwarf2reader -Patch by Julian Seward , R=ted - -diff --git a/src/common/dwarf/dwarf2reader.cc b/src/common/dwarf/dwarf2reader.cc ---- a/src/common/dwarf/dwarf2reader.cc -+++ b/src/common/dwarf/dwarf2reader.cc -@@ -887,68 +887,80 @@ - - // If this is a base+offset rule, change its base register to REG. - // Otherwise, do nothing. (Ugly, but required for DW_CFA_def_cfa_register.) - virtual void SetBaseRegister(unsigned reg) { } - - // If this is a base+offset rule, change its offset to OFFSET. Otherwise, - // do nothing. (Ugly, but required for DW_CFA_def_cfa_offset.) - virtual void SetOffset(long long offset) { } -+ -+ // A RTTI workaround, to make it possible to implement equality -+ // comparisons on classes derived from this one. -+ enum CFIRTag { -+ CFIR_UNDEFINED_RULE, -+ CFIR_SAME_VALUE_RULE, -+ CFIR_OFFSET_RULE, -+ CFIR_VAL_OFFSET_RULE, -+ CFIR_REGISTER_RULE, -+ CFIR_EXPRESSION_RULE, -+ CFIR_VAL_EXPRESSION_RULE -+ }; -+ -+ // Produce the tag that identifies the child class of this object. -+ virtual CFIRTag getTag() const = 0; - }; - - // Rule: the value the register had in the caller cannot be recovered. - class CallFrameInfo::UndefinedRule: public CallFrameInfo::Rule { - public: - UndefinedRule() { } - ~UndefinedRule() { } -+ CFIRTag getTag() const { return CFIR_UNDEFINED_RULE; } - bool Handle(Handler *handler, uint64 address, int reg) const { - return handler->UndefinedRule(address, reg); - } - bool operator==(const Rule &rhs) const { -- // dynamic_cast is allowed by the Google C++ Style Guide, if the use has -- // been carefully considered; cheap RTTI-like workarounds are forbidden. -- const UndefinedRule *our_rhs = dynamic_cast(&rhs); -- return (our_rhs != NULL); -+ if (rhs.getTag() != CFIR_UNDEFINED_RULE) return false; -+ return true; - } - Rule *Copy() const { return new UndefinedRule(*this); } - }; - - // Rule: the register's value is the same as that it had in the caller. - class CallFrameInfo::SameValueRule: public CallFrameInfo::Rule { - public: - SameValueRule() { } - ~SameValueRule() { } -+ CFIRTag getTag() const { return CFIR_SAME_VALUE_RULE; } - bool Handle(Handler *handler, uint64 address, int reg) const { - return handler->SameValueRule(address, reg); - } - bool operator==(const Rule &rhs) const { -- // dynamic_cast is allowed by the Google C++ Style Guide, if the use has -- // been carefully considered; cheap RTTI-like workarounds are forbidden. -- const SameValueRule *our_rhs = dynamic_cast(&rhs); -- return (our_rhs != NULL); -+ if (rhs.getTag() != CFIR_SAME_VALUE_RULE) return false; -+ return true; - } - Rule *Copy() const { return new SameValueRule(*this); } - }; - - // Rule: the register is saved at OFFSET from BASE_REGISTER. BASE_REGISTER - // may be CallFrameInfo::Handler::kCFARegister. - class CallFrameInfo::OffsetRule: public CallFrameInfo::Rule { - public: - OffsetRule(int base_register, long offset) - : base_register_(base_register), offset_(offset) { } - ~OffsetRule() { } -+ CFIRTag getTag() const { return CFIR_OFFSET_RULE; } - bool Handle(Handler *handler, uint64 address, int reg) const { - return handler->OffsetRule(address, reg, base_register_, offset_); - } - bool operator==(const Rule &rhs) const { -- // dynamic_cast is allowed by the Google C++ Style Guide, if the use has -- // been carefully considered; cheap RTTI-like workarounds are forbidden. -- const OffsetRule *our_rhs = dynamic_cast(&rhs); -- return (our_rhs && -- base_register_ == our_rhs->base_register_ && -+ if (rhs.getTag() != CFIR_OFFSET_RULE) return false; -+ const OffsetRule *our_rhs = static_cast(&rhs); -+ return (base_register_ == our_rhs->base_register_ && - offset_ == our_rhs->offset_); - } - Rule *Copy() const { return new OffsetRule(*this); } - // We don't actually need SetBaseRegister or SetOffset here, since they - // are only ever applied to CFA rules, for DW_CFA_def_cfa_offset, and it - // doesn't make sense to use OffsetRule for computing the CFA: it - // computes the address at which a register is saved, not a value. - private: -@@ -959,90 +971,89 @@ - // Rule: the value the register had in the caller is the value of - // BASE_REGISTER plus offset. BASE_REGISTER may be - // CallFrameInfo::Handler::kCFARegister. - class CallFrameInfo::ValOffsetRule: public CallFrameInfo::Rule { - public: - ValOffsetRule(int base_register, long offset) - : base_register_(base_register), offset_(offset) { } - ~ValOffsetRule() { } -+ CFIRTag getTag() const { return CFIR_VAL_OFFSET_RULE; } - bool Handle(Handler *handler, uint64 address, int reg) const { - return handler->ValOffsetRule(address, reg, base_register_, offset_); - } - bool operator==(const Rule &rhs) const { -- // dynamic_cast is allowed by the Google C++ Style Guide, if the use has -- // been carefully considered; cheap RTTI-like workarounds are forbidden. -- const ValOffsetRule *our_rhs = dynamic_cast(&rhs); -- return (our_rhs && -- base_register_ == our_rhs->base_register_ && -+ if (rhs.getTag() != CFIR_VAL_OFFSET_RULE) return false; -+ const ValOffsetRule *our_rhs = static_cast(&rhs); -+ return (base_register_ == our_rhs->base_register_ && - offset_ == our_rhs->offset_); - } - Rule *Copy() const { return new ValOffsetRule(*this); } - void SetBaseRegister(unsigned reg) { base_register_ = reg; } - void SetOffset(long long offset) { offset_ = offset; } - private: - int base_register_; - long offset_; - }; - - // Rule: the register has been saved in another register REGISTER_NUMBER_. - class CallFrameInfo::RegisterRule: public CallFrameInfo::Rule { - public: - explicit RegisterRule(int register_number) - : register_number_(register_number) { } - ~RegisterRule() { } -+ CFIRTag getTag() const { return CFIR_REGISTER_RULE; } - bool Handle(Handler *handler, uint64 address, int reg) const { - return handler->RegisterRule(address, reg, register_number_); - } - bool operator==(const Rule &rhs) const { -- // dynamic_cast is allowed by the Google C++ Style Guide, if the use has -- // been carefully considered; cheap RTTI-like workarounds are forbidden. -- const RegisterRule *our_rhs = dynamic_cast(&rhs); -- return (our_rhs && register_number_ == our_rhs->register_number_); -+ if (rhs.getTag() != CFIR_REGISTER_RULE) return false; -+ const RegisterRule *our_rhs = static_cast(&rhs); -+ return (register_number_ == our_rhs->register_number_); - } - Rule *Copy() const { return new RegisterRule(*this); } - private: - int register_number_; - }; - - // Rule: EXPRESSION evaluates to the address at which the register is saved. - class CallFrameInfo::ExpressionRule: public CallFrameInfo::Rule { - public: - explicit ExpressionRule(const string &expression) - : expression_(expression) { } - ~ExpressionRule() { } -+ CFIRTag getTag() const { return CFIR_EXPRESSION_RULE; } - bool Handle(Handler *handler, uint64 address, int reg) const { - return handler->ExpressionRule(address, reg, expression_); - } - bool operator==(const Rule &rhs) const { -- // dynamic_cast is allowed by the Google C++ Style Guide, if the use has -- // been carefully considered; cheap RTTI-like workarounds are forbidden. -- const ExpressionRule *our_rhs = dynamic_cast(&rhs); -- return (our_rhs && expression_ == our_rhs->expression_); -+ if (rhs.getTag() != CFIR_EXPRESSION_RULE) return false; -+ const ExpressionRule *our_rhs = static_cast(&rhs); -+ return (expression_ == our_rhs->expression_); - } - Rule *Copy() const { return new ExpressionRule(*this); } - private: - string expression_; - }; - - // Rule: EXPRESSION evaluates to the address at which the register is saved. - class CallFrameInfo::ValExpressionRule: public CallFrameInfo::Rule { - public: - explicit ValExpressionRule(const string &expression) - : expression_(expression) { } - ~ValExpressionRule() { } -+ CFIRTag getTag() const { return CFIR_VAL_EXPRESSION_RULE; } - bool Handle(Handler *handler, uint64 address, int reg) const { - return handler->ValExpressionRule(address, reg, expression_); - } - bool operator==(const Rule &rhs) const { -- // dynamic_cast is allowed by the Google C++ Style Guide, if the use has -- // been carefully considered; cheap RTTI-like workarounds are forbidden. -+ if (rhs.getTag() != CFIR_VAL_EXPRESSION_RULE) return false; - const ValExpressionRule *our_rhs = -- dynamic_cast(&rhs); -- return (our_rhs && expression_ == our_rhs->expression_); -+ static_cast(&rhs); -+ return (expression_ == our_rhs->expression_); - } - Rule *Copy() const { return new ValExpressionRule(*this); } - private: - string expression_; - }; - - // A map from register numbers to rules. - class CallFrameInfo::RuleMap { diff --git a/toolkit/crashreporter/breakpad-patches/09-bug779291.patch b/toolkit/crashreporter/breakpad-patches/09-bug779291.patch deleted file mode 100644 index 86a075620c96..000000000000 --- a/toolkit/crashreporter/breakpad-patches/09-bug779291.patch +++ /dev/null @@ -1,27 +0,0 @@ -changeset: 124512:8b366545161d -user: Julian Seward -date: Sun Mar 10 23:00:23 2013 +0100 -summary: Bug 779291: Implement SPS stackwalk using the breakpad unwinder. r=bgirard,glandium - -diff --git a/src/common/linux/dump_symbols.cc b/src/common/linux/dump_symbols.cc ---- a/src/common/linux/dump_symbols.cc -+++ b/src/common/linux/dump_symbols.cc -@@ -621,17 +621,17 @@ bool LoadSymbols(const string& obj_file, - bool result = - LoadDwarfCFI(obj_file, elf_header, ".eh_frame", - eh_frame_section, true, - got_section, text_section, big_endian, module); - found_usable_info = found_usable_info || result; - } - } - -- if (!found_debug_info_section) { -+ if (!found_debug_info_section && symbol_data != ONLY_CFI) { - fprintf(stderr, "%s: file contains no debugging information" - " (no \".stab\" or \".debug_info\" sections)\n", - obj_file.c_str()); - - // Failed, but maybe there's a .gnu_debuglink section? - if (read_gnu_debug_link) { - const Shdr* gnu_debuglink_section - = FindElfSectionByName(".gnu_debuglink", SHT_PROGBITS, diff --git a/toolkit/crashreporter/breakpad-patches/10-logging.patch b/toolkit/crashreporter/breakpad-patches/10-logging.patch deleted file mode 100644 index 226a30269f2d..000000000000 --- a/toolkit/crashreporter/breakpad-patches/10-logging.patch +++ /dev/null @@ -1,1963 +0,0 @@ -changeset: 126589:636cfcab9682 -user: Julian Seward -date: Thu Mar 28 18:06:39 2013 +0100 -summary: Bug 853851 - Transition some breakpad logging to BPLOG. r=ted - -diff --git -r 85dd7094b78d -r 636cfcab9682 src/common/dwarf_cfi_to_module.cc ---- a/src/common/dwarf_cfi_to_module.cc Thu Mar 28 18:38:05 2013 +0100 -+++ b/src/common/dwarf_cfi_to_module.cc Thu Mar 28 18:06:39 2013 +0100 -@@ -30,18 +30,20 @@ - // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - // Original author: Jim Blandy - - // Implementation of google_breakpad::DwarfCFIToModule. - // See dwarf_cfi_to_module.h for details. - - #include -+#include - - #include "common/dwarf_cfi_to_module.h" -+#include "common/logging.h" - - namespace google_breakpad { - - using std::ostringstream; - - vector DwarfCFIToModule::RegisterNames::MakeVector( - const char* const* strings, - size_t size) { -@@ -226,36 +228,42 @@ bool DwarfCFIToModule::ValExpressionRule - - bool DwarfCFIToModule::End() { - module_->AddStackFrameEntry(entry_); - entry_ = NULL; - return true; - } - - void DwarfCFIToModule::Reporter::UnnamedRegister(size_t offset, int reg) { -- fprintf(stderr, "%s, section '%s': " -- "the call frame entry at offset 0x%zx refers to register %d," -- " whose name we don't know\n", -- file_.c_str(), section_.c_str(), offset, reg); -+ BPLOG(INFO) << file_ << ", section '" << section_ -+ << "': the call frame entry at offset 0x" -+ << std::setbase(16) << offset << std::setbase(10) -+ << " refers to register " << reg << ", whose name we don't know"; - } - - void DwarfCFIToModule::Reporter::UndefinedNotSupported( - size_t offset, - const UniqueString* reg) { -- fprintf(stderr, "%s, section '%s': " -- "the call frame entry at offset 0x%zx sets the rule for " -- "register '%s' to 'undefined', but the Breakpad symbol file format" -- " cannot express this\n", -- file_.c_str(), section_.c_str(), offset, FromUniqueString(reg)); -+ BPLOG(INFO) << file_ << ", section '" << section_ -+ << "': the call frame entry at offset 0x" -+ << std::setbase(16) << offset << std::setbase(10) -+ << " sets the rule for register '" << FromUniqueString(reg) -+ << "' to 'undefined', but the Breakpad symbol file format cannot " -+ << " express this"; - } - - void DwarfCFIToModule::Reporter::ExpressionsNotSupported( - size_t offset, - const UniqueString* reg) { -- fprintf(stderr, "%s, section '%s': " -- "the call frame entry at offset 0x%zx uses a DWARF expression to" -- " describe how to recover register '%s', " -- " but this translator cannot yet translate DWARF expressions to" -- " Breakpad postfix expressions\n", -- file_.c_str(), section_.c_str(), offset, FromUniqueString(reg)); -+ static uint64_t n_complaints = 0; // This isn't threadsafe -+ n_complaints++; -+ if (!is_power_of_2(n_complaints)) -+ return; -+ BPLOG(INFO) << file_ << ", section '" << section_ -+ << "': the call frame entry at offset 0x" -+ << std::setbase(16) << offset << std::setbase(10) -+ << " uses a DWARF expression to describe how to recover register '" -+ << FromUniqueString(reg) << "', but this translator cannot yet " -+ << "translate DWARF expressions to Breakpad postfix expressions (shown " -+ << n_complaints << " times)"; - } - - } // namespace google_breakpad -diff --git -r 85dd7094b78d -r 636cfcab9682 src/common/dwarf_cu_to_module.cc ---- a/src/common/dwarf_cu_to_module.cc Thu Mar 28 18:38:05 2013 +0100 -+++ b/src/common/dwarf_cu_to_module.cc Thu Mar 28 18:06:39 2013 +0100 -@@ -38,23 +38,24 @@ - - #include "common/dwarf_cu_to_module.h" - - #include - #if !defined(__ANDROID__) - #include - #endif - #include --#include - - #include - #include - #include -+#include - - #include "common/dwarf_line_to_module.h" -+#include "common/logging.h" - - namespace google_breakpad { - - using std::map; - using std::pair; - using std::set; - using std::sort; - using std::vector; -@@ -553,84 +554,89 @@ dwarf2reader::DIEHandler *DwarfCUToModul - default: - return NULL; - } - } - - void DwarfCUToModule::WarningReporter::CUHeading() { - if (printed_cu_header_) - return; -- fprintf(stderr, "%s: in compilation unit '%s' (offset 0x%llx):\n", -- filename_.c_str(), cu_name_.c_str(), cu_offset_); -+ BPLOG(INFO) -+ << filename_ << ": in compilation unit '" << cu_name_ -+ << "' (offset 0x" << std::setbase(16) << cu_offset_ << std::setbase(10) -+ << "):"; - printed_cu_header_ = true; - } - - void DwarfCUToModule::WarningReporter::UnknownSpecification(uint64 offset, - uint64 target) { - CUHeading(); -- fprintf(stderr, "%s: the DIE at offset 0x%llx has a DW_AT_specification" -- " attribute referring to the die at offset 0x%llx, which either" -- " was not marked as a declaration, or comes later in the file\n", -- filename_.c_str(), offset, target); -+ BPLOG(INFO) -+ << filename_ << ": the DIE at offset 0x" -+ << std::setbase(16) << offset << std::setbase(10) -+ << " has a DW_AT_specification attribute referring to the die at offset 0x" -+ << std::setbase(16) << target << std::setbase(10) -+ << ", which either was not marked as a declaration, or comes " -+ << "later in the file"; - } - - void DwarfCUToModule::WarningReporter::UnknownAbstractOrigin(uint64 offset, - uint64 target) { - CUHeading(); -- fprintf(stderr, "%s: the DIE at offset 0x%llx has a DW_AT_abstract_origin" -- " attribute referring to the die at offset 0x%llx, which either" -- " was not marked as an inline, or comes later in the file\n", -- filename_.c_str(), offset, target); -+ BPLOG(INFO) -+ << filename_ << ": the DIE at offset 0x" -+ << std::setbase(16) << offset << std::setbase(10) -+ << " has a DW_AT_abstract_origin attribute referring to the die at" -+ << " offset 0x" << std::setbase(16) << target << std::setbase(10) -+ << ", which either was not marked as an inline, or comes " -+ << "later in the file"; - } - - void DwarfCUToModule::WarningReporter::MissingSection(const string &name) { - CUHeading(); -- fprintf(stderr, "%s: warning: couldn't find DWARF '%s' section\n", -- filename_.c_str(), name.c_str()); -+ BPLOG(INFO) << filename_ << ": warning: couldn't find DWARF '" -+ << name << "' section"; - } - - void DwarfCUToModule::WarningReporter::BadLineInfoOffset(uint64 offset) { - CUHeading(); -- fprintf(stderr, "%s: warning: line number data offset beyond end" -- " of '.debug_line' section\n", -- filename_.c_str()); -+ BPLOG(INFO) << filename_ << ": warning: line number data offset beyond " -+ << "end of '.debug_line' section"; - } - - void DwarfCUToModule::WarningReporter::UncoveredHeading() { - if (printed_unpaired_header_) - return; - CUHeading(); -- fprintf(stderr, "%s: warning: skipping unpaired lines/functions:\n", -- filename_.c_str()); -+ BPLOG(INFO) << filename_ << ": warning: skipping unpaired lines/functions:"; - printed_unpaired_header_ = true; - } - - void DwarfCUToModule::WarningReporter::UncoveredFunction( - const Module::Function &function) { - if (!uncovered_warnings_enabled_) - return; - UncoveredHeading(); -- fprintf(stderr, " function%s: %s\n", -- function.size == 0 ? " (zero-length)" : "", -- function.name.c_str()); -+ BPLOG(INFO) << " function" << (function.size == 0 ? " (zero-length)" : "") -+ << ": " << function.name; - } - - void DwarfCUToModule::WarningReporter::UncoveredLine(const Module::Line &line) { - if (!uncovered_warnings_enabled_) - return; - UncoveredHeading(); -- fprintf(stderr, " line%s: %s:%d at 0x%" PRIx64 "\n", -- (line.size == 0 ? " (zero-length)" : ""), -- line.file->name.c_str(), line.number, line.address); -+ BPLOG(INFO) << " line" << (line.size == 0 ? " (zero-length)" : "") -+ << ": " << line.file->name << ":" << line.number -+ << " at 0x" << std::setbase(16) << line.address << std::setbase(10); - } - - void DwarfCUToModule::WarningReporter::UnnamedFunction(uint64 offset) { - CUHeading(); -- fprintf(stderr, "%s: warning: function at offset 0x%llx has no name\n", -- filename_.c_str(), offset); -+ BPLOG(INFO) << filename_ << ": warning: function at offset 0x" -+ << std::setbase(16) << offset << std::setbase(10) << " has no name"; - } - - DwarfCUToModule::DwarfCUToModule(FileContext *file_context, - LineToModuleHandler *line_reader, - WarningReporter *reporter) - : line_reader_(line_reader), has_source_line_info_(false) { - cu_context_ = new CUContext(file_context, reporter); - child_context_ = new DIEContext(); -diff --git -r 85dd7094b78d -r 636cfcab9682 src/common/dwarf_line_to_module.cc ---- a/src/common/dwarf_line_to_module.cc Thu Mar 28 18:38:05 2013 +0100 -+++ b/src/common/dwarf_line_to_module.cc Thu Mar 28 18:06:39 2013 +0100 -@@ -27,22 +27,21 @@ - // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - // Original author: Jim Blandy - - // dwarf_line_to_module.cc: Implementation of DwarfLineToModule class. - // See dwarf_line_to_module.h for details. - --#include -- - #include - - #include "common/dwarf_line_to_module.h" - #include "common/using_std_string.h" -+#include "common/logging.h" - - // Trying to support Windows paths in a reasonable way adds a lot of - // variations to test; it would be better to just put off dealing with - // it until we actually have to deal with DWARF on Windows. - - // Return true if PATH is an absolute path, false if it is relative. - static bool PathIsAbsolute(const string &path) { - return (path.size() >= 1 && path[0] == '/'); -@@ -84,18 +83,18 @@ void DwarfLineToModule::DefineFile(const - // an attribute on the compilation unit, rather than in the program table. - dir_name = compilation_dir_; - } else { - DirectoryTable::const_iterator directory_it = directories_.find(dir_num); - if (directory_it != directories_.end()) { - dir_name = directory_it->second; - } else { - if (!warned_bad_directory_number_) { -- fprintf(stderr, "warning: DWARF line number data refers to undefined" -- " directory numbers\n"); -+ BPLOG(INFO) << "warning: DWARF line number data refers to undefined" -+ << " directory numbers"; - warned_bad_directory_number_ = true; - } - } - } - - string full_name = ExpandPath(name, dir_name); - - // Find a Module::File object of the given name, and add it to the -@@ -120,18 +119,18 @@ void DwarfLineToModule::AddLine(uint64 a - } else { - omitted_line_end_ = 0; - } - - // Find the source file being referred to. - Module::File *file = files_[file_num]; - if (!file) { - if (!warned_bad_file_number_) { -- fprintf(stderr, "warning: DWARF line number data refers to " -- "undefined file numbers\n"); -+ BPLOG(INFO) << "warning: DWARF line number data refers to " -+ << "undefined file numbers"; - warned_bad_file_number_ = true; - } - return; - } - Module::Line line; - line.address = address; - // We set the size when we get the next line or the EndSequence call. - line.size = length; -diff --git -r 85dd7094b78d -r 636cfcab9682 src/common/linux/dump_symbols.cc ---- a/src/common/linux/dump_symbols.cc Thu Mar 28 18:38:05 2013 +0100 -+++ b/src/common/linux/dump_symbols.cc Thu Mar 28 18:06:39 2013 +0100 -@@ -63,16 +63,17 @@ - #include "common/linux/file_id.h" - #include "common/module.h" - #include "common/scoped_ptr.h" - #ifndef NO_STABS_SUPPORT - #include "common/stabs_reader.h" - #include "common/stabs_to_module.h" - #endif - #include "common/using_std_string.h" -+#include "common/logging.h" - - // This namespace contains helper functions. - namespace { - - using google_breakpad::DwarfCFIToModule; - using google_breakpad::DwarfCUToModule; - using google_breakpad::DwarfLineToModule; - using google_breakpad::ElfClass; -@@ -523,16 +524,19 @@ bool LoadSymbols(const string& obj_file, - const bool read_gnu_debug_link, - LoadSymbolsInfo* info, - SymbolData symbol_data, - Module* module) { - typedef typename ElfClass::Addr Addr; - typedef typename ElfClass::Phdr Phdr; - typedef typename ElfClass::Shdr Shdr; - -+ BPLOG(INFO) << ""; -+ BPLOG(INFO) << "LoadSymbols: BEGIN " << obj_file; -+ - Addr loading_addr = GetLoadingAddress( - GetOffset(elf_header, elf_header->e_phoff), - elf_header->e_phnum); - module->SetLoadAddress(loading_addr); - info->set_loading_addr(loading_addr, obj_file); - - const Shdr* sections = - GetOffset(elf_header, elf_header->e_shoff); -@@ -592,16 +596,18 @@ bool LoadSymbols(const string& obj_file, - // information, the other debugging information could be perfectly - // useful. - info->LoadedSection(".debug_frame"); - bool result = - LoadDwarfCFI(obj_file, elf_header, ".debug_frame", - dwarf_cfi_section, false, 0, 0, big_endian, - module); - found_usable_info = found_usable_info || result; -+ if (result) -+ BPLOG(INFO) << "LoadSymbols: read CFI from .debug_frame"; - } - - // Linux C++ exception handling information can also provide - // unwinding data. - const Shdr* eh_frame_section = - FindElfSectionByName(".eh_frame", SHT_PROGBITS, - sections, names, names_end, - elf_header->e_shnum); -@@ -618,16 +624,18 @@ bool LoadSymbols(const string& obj_file, - elf_header->e_shnum); - info->LoadedSection(".eh_frame"); - // As above, ignore the return value of this function. - bool result = - LoadDwarfCFI(obj_file, elf_header, ".eh_frame", - eh_frame_section, true, - got_section, text_section, big_endian, module); - found_usable_info = found_usable_info || result; -+ if (result) -+ BPLOG(INFO) << "LoadSymbols: read CFI from .eh_frame"; - } - } - - if (!found_debug_info_section && symbol_data != ONLY_CFI) { - fprintf(stderr, "%s: file contains no debugging information" - " (no \".stab\" or \".debug_info\" sections)\n", - obj_file.c_str()); - -@@ -685,24 +693,29 @@ bool LoadSymbols(const string& obj_file, - ElfClass::kAddrSize, - module); - found_usable_info = found_usable_info || result; - } - } - - // Return true if some usable information was found, since - // the caller doesn't want to use .gnu_debuglink. -+ BPLOG(INFO) << "LoadSymbols: " -+ << (found_usable_info ? "SUCCESS " : "FAILURE ") -+ << obj_file; - return found_usable_info; - } - - // No debug info was found, let the user try again with .gnu_debuglink - // if present. -+ BPLOG(INFO) << "LoadSymbols: FAILURE " << obj_file; - return false; - } - -+ BPLOG(INFO) << "LoadSymbols: SUCCESS " << obj_file; - return true; - } - - // Return the breakpad symbol file identifier for the architecture of - // ELF_HEADER. - template - const char* ElfArchitecture(const typename ElfClass::Ehdr* elf_header) { - typedef typename ElfClass::Half Half; -diff --git -r 85dd7094b78d -r 636cfcab9682 src/common/logging.cc ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/src/common/logging.cc Thu Mar 28 18:06:39 2013 +0100 -@@ -0,0 +1,139 @@ -+// Copyright (c) 2007, Google Inc. -+// All rights reserved. -+// -+// Redistribution and use in source and binary forms, with or without -+// modification, are permitted provided that the following conditions are -+// met: -+// -+// * Redistributions of source code must retain the above copyright -+// notice, this list of conditions and the following disclaimer. -+// * Redistributions in binary form must reproduce the above -+// copyright notice, this list of conditions and the following disclaimer -+// in the documentation and/or other materials provided with the -+// distribution. -+// * Neither the name of Google Inc. nor the names of its -+// contributors may be used to endorse or promote products derived from -+// this software without specific prior written permission. -+// -+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ -+// logging.cc: Breakpad logging -+// -+// See logging.h for documentation. -+// -+// Author: Mark Mentovai -+ -+#include -+#include -+#include -+#include -+#include -+ -+#include -+ -+#include "common/using_std_string.h" -+#include "common/logging.h" -+#include "common/pathname_stripper.h" -+ -+#ifdef _WIN32 -+#define snprintf _snprintf -+#endif -+ -+#ifdef __ANDROID__ -+# include -+#endif -+ -+namespace google_breakpad { -+ -+LogStream::LogStream(std::ostream &stream, Severity severity, -+ const char *file, int line) -+ : stream_(stream) { -+ time_t clock; -+ time(&clock); -+ struct tm tm_struct; -+#ifdef _WIN32 -+ localtime_s(&tm_struct, &clock); -+#else -+ localtime_r(&clock, &tm_struct); -+#endif -+ char time_string[20]; -+ strftime(time_string, sizeof(time_string), "%Y-%m-%d %H:%M:%S", &tm_struct); -+ -+ const char *severity_string = "UNKNOWN_SEVERITY"; -+ switch (severity) { -+ case SEVERITY_INFO: -+ severity_string = "INFO"; -+ break; -+ case SEVERITY_ERROR: -+ severity_string = "ERROR"; -+ break; -+ } -+ -+ str_ << time_string << ": " << PathnameStripper::File(file) << ":" << -+ line << ": " << severity_string << ": "; -+} -+ -+LogStream::~LogStream() { -+#ifdef __ANDROID__ -+ __android_log_print(ANDROID_LOG_ERROR, -+ "Profiler", "%s", str_.str().c_str()); -+#else -+ stream_ << str_.str(); -+ stream_ << std::endl; -+#endif -+} -+ -+string HexString(uint32_t number) { -+ char buffer[11]; -+ snprintf(buffer, sizeof(buffer), "0x%x", number); -+ return string(buffer); -+} -+ -+string HexString(uint64_t number) { -+ char buffer[19]; -+ snprintf(buffer, sizeof(buffer), "0x%" PRIx64, number); -+ return string(buffer); -+} -+ -+string HexString(int number) { -+ char buffer[19]; -+ snprintf(buffer, sizeof(buffer), "0x%x", number); -+ return string(buffer); -+} -+ -+int ErrnoString(string *error_string) { -+ assert(error_string); -+ -+ // strerror isn't necessarily thread-safe. strerror_r would be preferrable, -+ // but GNU libc uses a nonstandard strerror_r by default, which returns a -+ // char* (rather than an int success indicator) and doesn't necessarily -+ // use the supplied buffer. -+ error_string->assign(strerror(errno)); -+ return errno; -+} -+ -+} // namespace google_breakpad -+ -+bool is_power_of_2(uint64_t x_in) -+{ -+ uint64_t x = x_in; -+ x = x | (x >> 1); -+ x = x | (x >> 2); -+ x = x | (x >> 4); -+ x = x | (x >> 8); -+ x = x | (x >> 16); -+ x = x | (x >> 32); -+ x = x - (x >> 1); -+ // x has now been rounded down to the nearest power of 2 <= x_in. -+ return x == x_in; -+} -diff --git -r 85dd7094b78d -r 636cfcab9682 src/common/logging.h ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/src/common/logging.h Thu Apr 04 21:02:11 2013 +0200 -@@ -0,0 +1,182 @@ -+// Copyright (c) 2007, Google Inc. -+// All rights reserved. -+// -+// Redistribution and use in source and binary forms, with or without -+// modification, are permitted provided that the following conditions are -+// met: -+// -+// * Redistributions of source code must retain the above copyright -+// notice, this list of conditions and the following disclaimer. -+// * Redistributions in binary form must reproduce the above -+// copyright notice, this list of conditions and the following disclaimer -+// in the documentation and/or other materials provided with the -+// distribution. -+// * Neither the name of Google Inc. nor the names of its -+// contributors may be used to endorse or promote products derived from -+// this software without specific prior written permission. -+// -+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ -+// logging.h: Breakpad logging -+// -+// Breakpad itself uses Breakpad logging with statements of the form: -+// BPLOG(severity) << "message"; -+// severity may be INFO, ERROR, or other values defined in this file. -+// -+// BPLOG is an overridable macro so that users can customize Breakpad's -+// logging. Left at the default, logging messages are sent to stderr along -+// with a timestamp and the source code location that produced a message. -+// The streams may be changed by redefining BPLOG_*_STREAM, the logging -+// behavior may be changed by redefining BPLOG_*, and the entire logging -+// system may be overridden by redefining BPLOG(severity). These -+// redefinitions may be passed to the preprocessor as a command-line flag -+// (-D). -+// -+// If an additional header is required to override Breakpad logging, it can -+// be specified by the BP_LOGGING_INCLUDE macro. If defined, this header -+// will #include the header specified by that macro. -+// -+// If any initialization is needed before logging, it can be performed by -+// a function called through the BPLOG_INIT macro. Each main function of -+// an executable program in the Breakpad processor library calls -+// BPLOG_INIT(&argc, &argv); before any logging can be performed; define -+// BPLOG_INIT appropriately if initialization is required. -+// -+// Author: Mark Mentovai -+ -+#ifndef PROCESSOR_LOGGING_H__ -+#define PROCESSOR_LOGGING_H__ -+ -+#include -+#include -+#include -+ -+#include "common/using_std_string.h" -+#include "google_breakpad/common/breakpad_types.h" -+ -+#ifdef BP_LOGGING_INCLUDE -+#include BP_LOGGING_INCLUDE -+#endif // BP_LOGGING_INCLUDE -+ -+#ifndef THIRD_PARTY_BREAKPAD_GOOGLE_GLUE_LOGGING_H_ -+namespace base_logging { -+ -+// The open-source copy of logging.h has diverged from Google's internal copy -+// (temporarily, at least). To support the transition to structured logging -+// a definition for base_logging::LogMessage is needed, which is a ostream- -+// like object for streaming arguments to construct a log message. -+typedef std::ostream LogMessage; -+ -+} // namespace base_logging -+#endif // THIRD_PARTY_BREAKPAD_GOOGLE_GLUE_LOGGING_H_ -+ -+namespace google_breakpad { -+ -+// These are defined in Microsoft headers. -+#ifdef SEVERITY_ERROR -+#undef SEVERITY_ERROR -+#endif -+ -+#ifdef ERROR -+#undef ERROR -+#endif -+ -+class LogStream { -+ public: -+ enum Severity { -+ SEVERITY_INFO, -+ SEVERITY_ERROR -+ }; -+ -+ // Begin logging a message to the stream identified by |stream|, at the -+ // indicated severity. The file and line parameters should be set so as to -+ // identify the line of source code that is producing a message. -+ LogStream(std::ostream &stream, Severity severity, -+ const char *file, int line); -+ -+ // Finish logging by printing a newline and flushing the output stream. -+ ~LogStream(); -+ -+ // Accumulate text in the str_. It will be emitted to stream_ when -+ // the object is destructed. -+ template std::ostream& operator<<(const T &t) { -+ return str_ << t; -+ } -+ -+ private: -+ std::ostream &stream_; -+ std::ostringstream str_; -+ -+ // Disallow copy constructor and assignment operator -+ explicit LogStream(const LogStream &that); -+ void operator=(const LogStream &that); -+}; -+ -+// This class is used to explicitly ignore values in the conditional logging -+// macros. This avoids compiler warnings like "value computed is not used" -+// and "statement has no effect". -+class LogMessageVoidify { -+ public: -+ LogMessageVoidify() {} -+ -+ // This has to be an operator with a precedence lower than << but higher -+ // than ?: -+ void operator&(base_logging::LogMessage &) {} -+}; -+ -+// Returns number formatted as a hexadecimal string, such as "0x7b". -+string HexString(uint32_t number); -+string HexString(uint64_t number); -+string HexString(int number); -+ -+// Returns the error code as set in the global errno variable, and sets -+// error_string, a required argument, to a string describing that error -+// code. -+int ErrnoString(string *error_string); -+ -+} // namespace google_breakpad -+ -+// Useful for doing exponential backoff of error reporting -+bool is_power_of_2(uint64_t); -+ -+#ifndef BPLOG_INIT -+#define BPLOG_INIT(pargc, pargv) -+#endif // BPLOG_INIT -+ -+#ifndef BPLOG -+#define BPLOG(severity) BPLOG_ ## severity -+#endif // BPLOG -+ -+#ifndef BPLOG_INFO -+#ifndef BPLOG_INFO_STREAM -+#define BPLOG_INFO_STREAM std::clog -+#endif // BPLOG_INFO_STREAM -+#define BPLOG_INFO google_breakpad::LogStream(BPLOG_INFO_STREAM, \ -+ google_breakpad::LogStream::SEVERITY_INFO, \ -+ __FILE__, __LINE__) -+#endif // BPLOG_INFO -+ -+#ifndef BPLOG_ERROR -+#ifndef BPLOG_ERROR_STREAM -+#define BPLOG_ERROR_STREAM std::cerr -+#endif // BPLOG_ERROR_STREAM -+#define BPLOG_ERROR google_breakpad::LogStream(BPLOG_ERROR_STREAM, \ -+ google_breakpad::LogStream::SEVERITY_ERROR, \ -+ __FILE__, __LINE__) -+#endif // BPLOG_ERROR -+ -+#define BPLOG_IF(severity, condition) \ -+ !(condition) ? (void) 0 : \ -+ google_breakpad::LogMessageVoidify() & BPLOG(severity) -+ -+#endif // PROCESSOR_LOGGING_H__ -diff --git -r 85dd7094b78d -r 636cfcab9682 src/common/pathname_stripper.cc ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/src/common/pathname_stripper.cc Thu Mar 28 18:06:39 2013 +0100 -@@ -0,0 +1,56 @@ -+// Copyright (c) 2006, Google Inc. -+// All rights reserved. -+// -+// Redistribution and use in source and binary forms, with or without -+// modification, are permitted provided that the following conditions are -+// met: -+// -+// * Redistributions of source code must retain the above copyright -+// notice, this list of conditions and the following disclaimer. -+// * Redistributions in binary form must reproduce the above -+// copyright notice, this list of conditions and the following disclaimer -+// in the documentation and/or other materials provided with the -+// distribution. -+// * Neither the name of Google Inc. nor the names of its -+// contributors may be used to endorse or promote products derived from -+// this software without specific prior written permission. -+// -+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ -+// pathname_stripper.cc: Manipulates pathnames into their component parts. -+// -+// See pathname_stripper.h for documentation. -+// -+// Author: Mark Mentovai -+ -+#include "common/pathname_stripper.h" -+ -+namespace google_breakpad { -+ -+// static -+string PathnameStripper::File(const string &path) { -+ string::size_type slash = path.rfind('/'); -+ string::size_type backslash = path.rfind('\\'); -+ -+ string::size_type file_start = 0; -+ if (slash != string::npos && -+ (backslash == string::npos || slash > backslash)) { -+ file_start = slash + 1; -+ } else if (backslash != string::npos) { -+ file_start = backslash + 1; -+ } -+ -+ return path.substr(file_start); -+} -+ -+} // namespace google_breakpad -diff --git -r 85dd7094b78d -r 636cfcab9682 src/common/pathname_stripper.h ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/src/common/pathname_stripper.h Thu Mar 28 18:06:39 2013 +0100 -@@ -0,0 +1,53 @@ -+// Copyright (c) 2006, Google Inc. -+// All rights reserved. -+// -+// Redistribution and use in source and binary forms, with or without -+// modification, are permitted provided that the following conditions are -+// met: -+// -+// * Redistributions of source code must retain the above copyright -+// notice, this list of conditions and the following disclaimer. -+// * Redistributions in binary form must reproduce the above -+// copyright notice, this list of conditions and the following disclaimer -+// in the documentation and/or other materials provided with the -+// distribution. -+// * Neither the name of Google Inc. nor the names of its -+// contributors may be used to endorse or promote products derived from -+// this software without specific prior written permission. -+// -+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ -+// pathname_stripper.h: Manipulates pathnames into their component parts. -+// -+// Author: Mark Mentovai -+ -+#ifndef PROCESSOR_PATHNAME_STRIPPER_H__ -+#define PROCESSOR_PATHNAME_STRIPPER_H__ -+ -+#include -+ -+#include "common/using_std_string.h" -+ -+namespace google_breakpad { -+ -+class PathnameStripper { -+ public: -+ // Given path, a pathname with components separated by slashes (/) or -+ // backslashes (\), returns the trailing component, without any separator. -+ // If path ends in a separator character, returns an empty string. -+ static string File(const string &path); -+}; -+ -+} // namespace google_breakpad -+ -+#endif // PROCESSOR_PATHNAME_STRIPPER_H__ -diff --git -r 85dd7094b78d -r 636cfcab9682 src/common/pathname_stripper_unittest.cc ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/src/common/pathname_stripper_unittest.cc Thu Mar 28 18:06:39 2013 +0100 -@@ -0,0 +1,87 @@ -+// Copyright (c) 2006, Google Inc. -+// All rights reserved. -+// -+// Redistribution and use in source and binary forms, with or without -+// modification, are permitted provided that the following conditions are -+// met: -+// -+// * Redistributions of source code must retain the above copyright -+// notice, this list of conditions and the following disclaimer. -+// * Redistributions in binary form must reproduce the above -+// copyright notice, this list of conditions and the following disclaimer -+// in the documentation and/or other materials provided with the -+// distribution. -+// * Neither the name of Google Inc. nor the names of its -+// contributors may be used to endorse or promote products derived from -+// this software without specific prior written permission. -+// -+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ -+#include -+ -+#include "processor/pathname_stripper.h" -+#include "processor/logging.h" -+ -+#define ASSERT_TRUE(condition) \ -+ if (!(condition)) { \ -+ fprintf(stderr, "FAIL: %s @ %s:%d\n", #condition, __FILE__, __LINE__); \ -+ return false; \ -+ } -+ -+#define ASSERT_EQ(e1, e2) ASSERT_TRUE((e1) == (e2)) -+ -+namespace { -+ -+using google_breakpad::PathnameStripper; -+ -+static bool RunTests() { -+ ASSERT_EQ(PathnameStripper::File("/dir/file"), "file"); -+ ASSERT_EQ(PathnameStripper::File("\\dir\\file"), "file"); -+ ASSERT_EQ(PathnameStripper::File("/dir\\file"), "file"); -+ ASSERT_EQ(PathnameStripper::File("\\dir/file"), "file"); -+ ASSERT_EQ(PathnameStripper::File("dir/file"), "file"); -+ ASSERT_EQ(PathnameStripper::File("dir\\file"), "file"); -+ ASSERT_EQ(PathnameStripper::File("dir/\\file"), "file"); -+ ASSERT_EQ(PathnameStripper::File("dir\\/file"), "file"); -+ ASSERT_EQ(PathnameStripper::File("file"), "file"); -+ ASSERT_EQ(PathnameStripper::File("dir/"), ""); -+ ASSERT_EQ(PathnameStripper::File("dir\\"), ""); -+ ASSERT_EQ(PathnameStripper::File("dir/dir/"), ""); -+ ASSERT_EQ(PathnameStripper::File("dir\\dir\\"), ""); -+ ASSERT_EQ(PathnameStripper::File("dir1/dir2/file"), "file"); -+ ASSERT_EQ(PathnameStripper::File("dir1\\dir2\\file"), "file"); -+ ASSERT_EQ(PathnameStripper::File("dir1/dir2\\file"), "file"); -+ ASSERT_EQ(PathnameStripper::File("dir1\\dir2/file"), "file"); -+ ASSERT_EQ(PathnameStripper::File(""), ""); -+ ASSERT_EQ(PathnameStripper::File("1"), "1"); -+ ASSERT_EQ(PathnameStripper::File("1/2"), "2"); -+ ASSERT_EQ(PathnameStripper::File("1\\2"), "2"); -+ ASSERT_EQ(PathnameStripper::File("/1/2"), "2"); -+ ASSERT_EQ(PathnameStripper::File("\\1\\2"), "2"); -+ ASSERT_EQ(PathnameStripper::File("dir//file"), "file"); -+ ASSERT_EQ(PathnameStripper::File("dir\\\\file"), "file"); -+ ASSERT_EQ(PathnameStripper::File("/dir//file"), "file"); -+ ASSERT_EQ(PathnameStripper::File("\\dir\\\\file"), "file"); -+ ASSERT_EQ(PathnameStripper::File("c:\\dir\\file"), "file"); -+ ASSERT_EQ(PathnameStripper::File("c:\\dir\\file.ext"), "file.ext"); -+ -+ return true; -+} -+ -+} // namespace -+ -+int main(int argc, char **argv) { -+ BPLOG_INIT(&argc, &argv); -+ -+ return RunTests() ? 0 : 1; -+} -diff --git -r 85dd7094b78d -r 636cfcab9682 src/processor/Makefile.in ---- a/src/processor/Makefile.in Thu Mar 28 18:38:05 2013 +0100 -+++ b/src/processor/Makefile.in Thu Mar 28 18:06:39 2013 +0100 -@@ -5,44 +5,32 @@ - DEPTH = @DEPTH@ - topsrcdir = @top_srcdir@ - srcdir = @srcdir@ - VPATH = @srcdir@ - - include $(DEPTH)/config/autoconf.mk - - LIBRARY_NAME = breakpad_sps_common_s --ifdef MOZ_CRASHREPORTER --HOST_LIBRARY_NAME = host_breakpad_sps_common_s --endif - - LOCAL_INCLUDES = -I$(srcdir)/../.. -I$(srcdir)/.. - - CPPSRCS = \ - stackwalker.cc \ - stackwalker_amd64.cc \ - stackwalker_arm.cc \ - stackwalker_ppc.cc \ - stackwalker_x86.cc \ - stackwalker_sparc.cc \ - minidump.cc \ - basic_source_line_resolver.cc \ - basic_code_modules.cc \ - cfi_frame_info.cc \ - call_stack.cc \ -- logging.cc \ -- pathname_stripper.cc \ - tokenize.cc \ - source_line_resolver_base.cc \ - stack_frame_symbolizer.cc \ - $(NULL) - --ifdef MOZ_CRASHREPORTER --HOST_CPPSRCS = \ -- logging.cc \ -- pathname_stripper.cc \ -- $(NULL) --endif -- - # need static lib - FORCE_STATIC_LIB = 1 - - include $(topsrcdir)/config/rules.mk -diff --git -r 85dd7094b78d -r 636cfcab9682 src/processor/address_map-inl.h ---- a/src/processor/address_map-inl.h Thu Mar 28 18:38:05 2013 +0100 -+++ b/src/processor/address_map-inl.h Thu Mar 28 18:06:39 2013 +0100 -@@ -35,17 +35,17 @@ - - #ifndef PROCESSOR_ADDRESS_MAP_INL_H__ - #define PROCESSOR_ADDRESS_MAP_INL_H__ - - #include "processor/address_map.h" - - #include - --#include "processor/logging.h" -+#include "common/logging.h" - - namespace google_breakpad { - - template - bool AddressMap::Store(const AddressType &address, - const EntryType &entry) { - // Ensure that the specified address doesn't conflict with something already - // in the map. -diff --git -r 85dd7094b78d -r 636cfcab9682 src/processor/basic_code_modules.cc ---- a/src/processor/basic_code_modules.cc Thu Mar 28 18:38:05 2013 +0100 -+++ b/src/processor/basic_code_modules.cc Thu Mar 28 18:06:39 2013 +0100 -@@ -35,17 +35,17 @@ - // Author: Mark Mentovai - - #include "processor/basic_code_modules.h" - - #include - - #include "google_breakpad/processor/code_module.h" - #include "processor/linked_ptr.h" --#include "processor/logging.h" -+#include "common/logging.h" - #include "processor/range_map-inl.h" - - namespace google_breakpad { - - BasicCodeModules::BasicCodeModules(const CodeModules *that) - : main_address_(0), - map_(new RangeMap >()) { - BPLOG_IF(ERROR, !that) << "BasicCodeModules::BasicCodeModules requires " -diff --git -r 85dd7094b78d -r 636cfcab9682 src/processor/contained_range_map-inl.h ---- a/src/processor/contained_range_map-inl.h Thu Mar 28 18:38:05 2013 +0100 -+++ b/src/processor/contained_range_map-inl.h Thu Mar 28 18:06:39 2013 +0100 -@@ -35,17 +35,17 @@ - - #ifndef PROCESSOR_CONTAINED_RANGE_MAP_INL_H__ - #define PROCESSOR_CONTAINED_RANGE_MAP_INL_H__ - - #include "processor/contained_range_map.h" - - #include - --#include "processor/logging.h" -+#include "common/logging.h" - - - namespace google_breakpad { - - - template - ContainedRangeMap::~ContainedRangeMap() { - // Clear frees the children pointed to by the map, and frees the map itself. -diff --git -r 85dd7094b78d -r 636cfcab9682 src/processor/logging.cc ---- a/src/processor/logging.cc Thu Mar 28 18:38:05 2013 +0100 -+++ /dev/null Thu Jan 01 00:00:00 1970 +0000 -@@ -1,115 +0,0 @@ --// Copyright (c) 2007, Google Inc. --// All rights reserved. --// --// Redistribution and use in source and binary forms, with or without --// modification, are permitted provided that the following conditions are --// met: --// --// * Redistributions of source code must retain the above copyright --// notice, this list of conditions and the following disclaimer. --// * Redistributions in binary form must reproduce the above --// copyright notice, this list of conditions and the following disclaimer --// in the documentation and/or other materials provided with the --// distribution. --// * Neither the name of Google Inc. nor the names of its --// contributors may be used to endorse or promote products derived from --// this software without specific prior written permission. --// --// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS --// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT --// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR --// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT --// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, --// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT --// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, --// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY --// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT --// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE --// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- --// logging.cc: Breakpad logging --// --// See logging.h for documentation. --// --// Author: Mark Mentovai -- --#include --#include --#include --#include --#include -- --#include -- --#include "common/using_std_string.h" --#include "processor/logging.h" --#include "processor/pathname_stripper.h" -- --#ifdef _WIN32 --#define snprintf _snprintf --#endif -- --namespace google_breakpad { -- --LogStream::LogStream(std::ostream &stream, Severity severity, -- const char *file, int line) -- : stream_(stream) { -- time_t clock; -- time(&clock); -- struct tm tm_struct; --#ifdef _WIN32 -- localtime_s(&tm_struct, &clock); --#else -- localtime_r(&clock, &tm_struct); --#endif -- char time_string[20]; -- strftime(time_string, sizeof(time_string), "%Y-%m-%d %H:%M:%S", &tm_struct); -- -- const char *severity_string = "UNKNOWN_SEVERITY"; -- switch (severity) { -- case SEVERITY_INFO: -- severity_string = "INFO"; -- break; -- case SEVERITY_ERROR: -- severity_string = "ERROR"; -- break; -- } -- -- stream_ << time_string << ": " << PathnameStripper::File(file) << ":" << -- line << ": " << severity_string << ": "; --} -- --LogStream::~LogStream() { -- stream_ << std::endl; --} -- --string HexString(uint32_t number) { -- char buffer[11]; -- snprintf(buffer, sizeof(buffer), "0x%x", number); -- return string(buffer); --} -- --string HexString(uint64_t number) { -- char buffer[19]; -- snprintf(buffer, sizeof(buffer), "0x%" PRIx64, number); -- return string(buffer); --} -- --string HexString(int number) { -- char buffer[19]; -- snprintf(buffer, sizeof(buffer), "0x%x", number); -- return string(buffer); --} -- --int ErrnoString(string *error_string) { -- assert(error_string); -- -- // strerror isn't necessarily thread-safe. strerror_r would be preferrable, -- // but GNU libc uses a nonstandard strerror_r by default, which returns a -- // char* (rather than an int success indicator) and doesn't necessarily -- // use the supplied buffer. -- error_string->assign(strerror(errno)); -- return errno; --} -- --} // namespace google_breakpad -diff --git -r 85dd7094b78d -r 636cfcab9682 src/processor/logging.h ---- a/src/processor/logging.h Thu Apr 04 21:00:31 2013 +0200 -+++ /dev/null Thu Jan 01 00:00:00 1970 +0000 -@@ -1,175 +0,0 @@ --// Copyright (c) 2007, Google Inc. --// All rights reserved. --// --// Redistribution and use in source and binary forms, with or without --// modification, are permitted provided that the following conditions are --// met: --// --// * Redistributions of source code must retain the above copyright --// notice, this list of conditions and the following disclaimer. --// * Redistributions in binary form must reproduce the above --// copyright notice, this list of conditions and the following disclaimer --// in the documentation and/or other materials provided with the --// distribution. --// * Neither the name of Google Inc. nor the names of its --// contributors may be used to endorse or promote products derived from --// this software without specific prior written permission. --// --// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS --// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT --// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR --// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT --// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, --// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT --// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, --// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY --// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT --// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE --// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- --// logging.h: Breakpad logging --// --// Breakpad itself uses Breakpad logging with statements of the form: --// BPLOG(severity) << "message"; --// severity may be INFO, ERROR, or other values defined in this file. --// --// BPLOG is an overridable macro so that users can customize Breakpad's --// logging. Left at the default, logging messages are sent to stderr along --// with a timestamp and the source code location that produced a message. --// The streams may be changed by redefining BPLOG_*_STREAM, the logging --// behavior may be changed by redefining BPLOG_*, and the entire logging --// system may be overridden by redefining BPLOG(severity). These --// redefinitions may be passed to the preprocessor as a command-line flag --// (-D). --// --// If an additional header is required to override Breakpad logging, it can --// be specified by the BP_LOGGING_INCLUDE macro. If defined, this header --// will #include the header specified by that macro. --// --// If any initialization is needed before logging, it can be performed by --// a function called through the BPLOG_INIT macro. Each main function of --// an executable program in the Breakpad processor library calls --// BPLOG_INIT(&argc, &argv); before any logging can be performed; define --// BPLOG_INIT appropriately if initialization is required. --// --// Author: Mark Mentovai -- --#ifndef PROCESSOR_LOGGING_H__ --#define PROCESSOR_LOGGING_H__ -- --#include --#include -- --#include "common/using_std_string.h" --#include "google_breakpad/common/breakpad_types.h" -- --#ifdef BP_LOGGING_INCLUDE --#include BP_LOGGING_INCLUDE --#endif // BP_LOGGING_INCLUDE -- --#ifndef THIRD_PARTY_BREAKPAD_GOOGLE_GLUE_LOGGING_H_ --namespace base_logging { -- --// The open-source copy of logging.h has diverged from Google's internal copy --// (temporarily, at least). To support the transition to structured logging --// a definition for base_logging::LogMessage is needed, which is a ostream- --// like object for streaming arguments to construct a log message. --typedef std::ostream LogMessage; -- --} // namespace base_logging --#endif // THIRD_PARTY_BREAKPAD_GOOGLE_GLUE_LOGGING_H_ -- --namespace google_breakpad { -- --// These are defined in Microsoft headers. --#ifdef SEVERITY_ERROR --#undef SEVERITY_ERROR --#endif -- --#ifdef ERROR --#undef ERROR --#endif -- --class LogStream { -- public: -- enum Severity { -- SEVERITY_INFO, -- SEVERITY_ERROR -- }; -- -- // Begin logging a message to the stream identified by |stream|, at the -- // indicated severity. The file and line parameters should be set so as to -- // identify the line of source code that is producing a message. -- LogStream(std::ostream &stream, Severity severity, -- const char *file, int line); -- -- // Finish logging by printing a newline and flushing the output stream. -- ~LogStream(); -- -- template std::ostream& operator<<(const T &t) { -- return stream_ << t; -- } -- -- private: -- std::ostream &stream_; -- -- // Disallow copy constructor and assignment operator -- explicit LogStream(const LogStream &that); -- void operator=(const LogStream &that); --}; -- --// This class is used to explicitly ignore values in the conditional logging --// macros. This avoids compiler warnings like "value computed is not used" --// and "statement has no effect". --class LogMessageVoidify { -- public: -- LogMessageVoidify() {} -- -- // This has to be an operator with a precedence lower than << but higher -- // than ?: -- void operator&(base_logging::LogMessage &) {} --}; -- --// Returns number formatted as a hexadecimal string, such as "0x7b". --string HexString(uint32_t number); --string HexString(uint64_t number); --string HexString(int number); -- --// Returns the error code as set in the global errno variable, and sets --// error_string, a required argument, to a string describing that error --// code. --int ErrnoString(string *error_string); -- --} // namespace google_breakpad -- --#ifndef BPLOG_INIT --#define BPLOG_INIT(pargc, pargv) --#endif // BPLOG_INIT -- --#ifndef BPLOG --#define BPLOG(severity) BPLOG_ ## severity --#endif // BPLOG -- --#ifndef BPLOG_INFO --#ifndef BPLOG_INFO_STREAM --#define BPLOG_INFO_STREAM std::clog --#endif // BPLOG_INFO_STREAM --#define BPLOG_INFO google_breakpad::LogStream(BPLOG_INFO_STREAM, \ -- google_breakpad::LogStream::SEVERITY_INFO, \ -- __FILE__, __LINE__) --#endif // BPLOG_INFO -- --#ifndef BPLOG_ERROR --#ifndef BPLOG_ERROR_STREAM --#define BPLOG_ERROR_STREAM std::cerr --#endif // BPLOG_ERROR_STREAM --#define BPLOG_ERROR google_breakpad::LogStream(BPLOG_ERROR_STREAM, \ -- google_breakpad::LogStream::SEVERITY_ERROR, \ -- __FILE__, __LINE__) --#endif // BPLOG_ERROR -- --#define BPLOG_IF(severity, condition) \ -- !(condition) ? (void) 0 : \ -- google_breakpad::LogMessageVoidify() & BPLOG(severity) -- --#endif // PROCESSOR_LOGGING_H__ -diff --git -r 85dd7094b78d -r 636cfcab9682 src/processor/minidump.cc ---- a/src/processor/minidump.cc Thu Mar 28 18:38:05 2013 +0100 -+++ b/src/processor/minidump.cc Thu Mar 28 18:06:39 2013 +0100 -@@ -58,17 +58,17 @@ - #include - #include - - #include "processor/range_map-inl.h" - - #include "common/scoped_ptr.h" - #include "processor/basic_code_module.h" - #include "processor/basic_code_modules.h" --#include "processor/logging.h" -+#include "common/logging.h" - - - - namespace google_breakpad { - - - using std::istream; - using std::ifstream; -diff --git -r 85dd7094b78d -r 636cfcab9682 src/processor/pathname_stripper.cc ---- a/src/processor/pathname_stripper.cc Thu Mar 28 18:38:05 2013 +0100 -+++ /dev/null Thu Jan 01 00:00:00 1970 +0000 -@@ -1,56 +0,0 @@ --// Copyright (c) 2006, Google Inc. --// All rights reserved. --// --// Redistribution and use in source and binary forms, with or without --// modification, are permitted provided that the following conditions are --// met: --// --// * Redistributions of source code must retain the above copyright --// notice, this list of conditions and the following disclaimer. --// * Redistributions in binary form must reproduce the above --// copyright notice, this list of conditions and the following disclaimer --// in the documentation and/or other materials provided with the --// distribution. --// * Neither the name of Google Inc. nor the names of its --// contributors may be used to endorse or promote products derived from --// this software without specific prior written permission. --// --// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS --// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT --// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR --// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT --// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, --// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT --// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, --// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY --// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT --// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE --// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- --// pathname_stripper.cc: Manipulates pathnames into their component parts. --// --// See pathname_stripper.h for documentation. --// --// Author: Mark Mentovai -- --#include "processor/pathname_stripper.h" -- --namespace google_breakpad { -- --// static --string PathnameStripper::File(const string &path) { -- string::size_type slash = path.rfind('/'); -- string::size_type backslash = path.rfind('\\'); -- -- string::size_type file_start = 0; -- if (slash != string::npos && -- (backslash == string::npos || slash > backslash)) { -- file_start = slash + 1; -- } else if (backslash != string::npos) { -- file_start = backslash + 1; -- } -- -- return path.substr(file_start); --} -- --} // namespace google_breakpad -diff --git -r 85dd7094b78d -r 636cfcab9682 src/processor/pathname_stripper.h ---- a/src/processor/pathname_stripper.h Thu Mar 28 18:38:05 2013 +0100 -+++ /dev/null Thu Jan 01 00:00:00 1970 +0000 -@@ -1,53 +0,0 @@ --// Copyright (c) 2006, Google Inc. --// All rights reserved. --// --// Redistribution and use in source and binary forms, with or without --// modification, are permitted provided that the following conditions are --// met: --// --// * Redistributions of source code must retain the above copyright --// notice, this list of conditions and the following disclaimer. --// * Redistributions in binary form must reproduce the above --// copyright notice, this list of conditions and the following disclaimer --// in the documentation and/or other materials provided with the --// distribution. --// * Neither the name of Google Inc. nor the names of its --// contributors may be used to endorse or promote products derived from --// this software without specific prior written permission. --// --// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS --// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT --// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR --// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT --// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, --// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT --// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, --// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY --// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT --// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE --// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- --// pathname_stripper.h: Manipulates pathnames into their component parts. --// --// Author: Mark Mentovai -- --#ifndef PROCESSOR_PATHNAME_STRIPPER_H__ --#define PROCESSOR_PATHNAME_STRIPPER_H__ -- --#include -- --#include "common/using_std_string.h" -- --namespace google_breakpad { -- --class PathnameStripper { -- public: -- // Given path, a pathname with components separated by slashes (/) or -- // backslashes (\), returns the trailing component, without any separator. -- // If path ends in a separator character, returns an empty string. -- static string File(const string &path); --}; -- --} // namespace google_breakpad -- --#endif // PROCESSOR_PATHNAME_STRIPPER_H__ -diff --git -r 85dd7094b78d -r 636cfcab9682 src/processor/pathname_stripper_unittest.cc ---- a/src/processor/pathname_stripper_unittest.cc Thu Mar 28 18:38:05 2013 +0100 -+++ /dev/null Thu Jan 01 00:00:00 1970 +0000 -@@ -1,87 +0,0 @@ --// Copyright (c) 2006, Google Inc. --// All rights reserved. --// --// Redistribution and use in source and binary forms, with or without --// modification, are permitted provided that the following conditions are --// met: --// --// * Redistributions of source code must retain the above copyright --// notice, this list of conditions and the following disclaimer. --// * Redistributions in binary form must reproduce the above --// copyright notice, this list of conditions and the following disclaimer --// in the documentation and/or other materials provided with the --// distribution. --// * Neither the name of Google Inc. nor the names of its --// contributors may be used to endorse or promote products derived from --// this software without specific prior written permission. --// --// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS --// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT --// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR --// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT --// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, --// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT --// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, --// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY --// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT --// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE --// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- --#include -- --#include "processor/pathname_stripper.h" --#include "processor/logging.h" -- --#define ASSERT_TRUE(condition) \ -- if (!(condition)) { \ -- fprintf(stderr, "FAIL: %s @ %s:%d\n", #condition, __FILE__, __LINE__); \ -- return false; \ -- } -- --#define ASSERT_EQ(e1, e2) ASSERT_TRUE((e1) == (e2)) -- --namespace { -- --using google_breakpad::PathnameStripper; -- --static bool RunTests() { -- ASSERT_EQ(PathnameStripper::File("/dir/file"), "file"); -- ASSERT_EQ(PathnameStripper::File("\\dir\\file"), "file"); -- ASSERT_EQ(PathnameStripper::File("/dir\\file"), "file"); -- ASSERT_EQ(PathnameStripper::File("\\dir/file"), "file"); -- ASSERT_EQ(PathnameStripper::File("dir/file"), "file"); -- ASSERT_EQ(PathnameStripper::File("dir\\file"), "file"); -- ASSERT_EQ(PathnameStripper::File("dir/\\file"), "file"); -- ASSERT_EQ(PathnameStripper::File("dir\\/file"), "file"); -- ASSERT_EQ(PathnameStripper::File("file"), "file"); -- ASSERT_EQ(PathnameStripper::File("dir/"), ""); -- ASSERT_EQ(PathnameStripper::File("dir\\"), ""); -- ASSERT_EQ(PathnameStripper::File("dir/dir/"), ""); -- ASSERT_EQ(PathnameStripper::File("dir\\dir\\"), ""); -- ASSERT_EQ(PathnameStripper::File("dir1/dir2/file"), "file"); -- ASSERT_EQ(PathnameStripper::File("dir1\\dir2\\file"), "file"); -- ASSERT_EQ(PathnameStripper::File("dir1/dir2\\file"), "file"); -- ASSERT_EQ(PathnameStripper::File("dir1\\dir2/file"), "file"); -- ASSERT_EQ(PathnameStripper::File(""), ""); -- ASSERT_EQ(PathnameStripper::File("1"), "1"); -- ASSERT_EQ(PathnameStripper::File("1/2"), "2"); -- ASSERT_EQ(PathnameStripper::File("1\\2"), "2"); -- ASSERT_EQ(PathnameStripper::File("/1/2"), "2"); -- ASSERT_EQ(PathnameStripper::File("\\1\\2"), "2"); -- ASSERT_EQ(PathnameStripper::File("dir//file"), "file"); -- ASSERT_EQ(PathnameStripper::File("dir\\\\file"), "file"); -- ASSERT_EQ(PathnameStripper::File("/dir//file"), "file"); -- ASSERT_EQ(PathnameStripper::File("\\dir\\\\file"), "file"); -- ASSERT_EQ(PathnameStripper::File("c:\\dir\\file"), "file"); -- ASSERT_EQ(PathnameStripper::File("c:\\dir\\file.ext"), "file.ext"); -- -- return true; --} -- --} // namespace -- --int main(int argc, char **argv) { -- BPLOG_INIT(&argc, &argv); -- -- return RunTests() ? 0 : 1; --} -diff --git -r 85dd7094b78d -r 636cfcab9682 src/processor/postfix_evaluator-inl.h ---- a/src/processor/postfix_evaluator-inl.h Thu Mar 28 18:38:05 2013 +0100 -+++ b/src/processor/postfix_evaluator-inl.h Thu Mar 28 18:06:39 2013 +0100 -@@ -41,17 +41,17 @@ - - #include "processor/postfix_evaluator.h" - - #include - - #include - - #include "google_breakpad/processor/memory_region.h" --#include "processor/logging.h" -+#include "common/logging.h" - - namespace google_breakpad { - - using std::istringstream; - using std::ostringstream; - - - // A small class used in Evaluate to make sure to clean up the stack -@@ -147,17 +147,17 @@ bool PostfixEvaluator::Evalua - if (!memory_) { - BPLOG(ERROR) << "Attempt to dereference without memory: " << - expression; - return false; - } - - ValueType address; - if (!PopValue(&address)) { -- BPLOG(ERROR) << "Could not PopValue to get value to derefence: " << -+ BPLOG(ERROR) << "Could not PopValue to get value to dereference: " << - expression; - return false; - } - - ValueType value; - if (!memory_->GetMemoryAtAddress(address, &value)) { - BPLOG(ERROR) << "Could not dereference memory at address " << - HexString(address) << ": " << expression; -@@ -305,18 +305,23 @@ bool PostfixEvaluator::Evalua - case Module::kExprSimple: - case Module::kExprSimpleMem: { - // Look up the base value - bool found = false; - ValueType v = dictionary_->get(&found, expr.ident_); - if (!found) { - // The identifier wasn't found in the dictionary. Don't imply any - // default value, just fail. -- BPLOG(INFO) << "Identifier " << FromUniqueString(expr.ident_) -- << " not in dictionary (kExprSimple{Mem})"; -+ static uint64_t n_complaints = 0; // This isn't threadsafe. -+ n_complaints++; -+ if (is_power_of_2(n_complaints)) { -+ BPLOG(INFO) << "Identifier " << FromUniqueString(expr.ident_) -+ << " not in dictionary (kExprSimple{Mem})" -+ << " (shown " << n_complaints << " times)"; -+ } - return false; - } - - // Form the sum - ValueType sum = v + (int64_t)expr.offset_; - - // and dereference if necessary - if (expr.how_ == Module::kExprSimpleMem) { -diff --git -r 85dd7094b78d -r 636cfcab9682 src/processor/range_map-inl.h ---- a/src/processor/range_map-inl.h Thu Mar 28 18:38:05 2013 +0100 -+++ b/src/processor/range_map-inl.h Thu Mar 28 18:06:39 2013 +0100 -@@ -35,17 +35,17 @@ - - #ifndef PROCESSOR_RANGE_MAP_INL_H__ - #define PROCESSOR_RANGE_MAP_INL_H__ - - - #include - - #include "processor/range_map.h" --#include "processor/logging.h" -+#include "common/logging.h" - - - namespace google_breakpad { - - - template - bool RangeMap::StoreRange(const AddressType &base, - const AddressType &size, -diff --git -r 85dd7094b78d -r 636cfcab9682 src/processor/stack_frame_symbolizer.cc ---- a/src/processor/stack_frame_symbolizer.cc Thu Mar 28 18:38:05 2013 +0100 -+++ b/src/processor/stack_frame_symbolizer.cc Thu Mar 28 18:06:39 2013 +0100 -@@ -39,17 +39,17 @@ - #include "common/scoped_ptr.h" - #include "google_breakpad/processor/code_module.h" - #include "google_breakpad/processor/code_modules.h" - #include "google_breakpad/processor/source_line_resolver_interface.h" - #include "google_breakpad/processor/stack_frame.h" - #include "google_breakpad/processor/symbol_supplier.h" - #include "google_breakpad/processor/system_info.h" - #include "processor/linked_ptr.h" --#include "processor/logging.h" -+#include "common/logging.h" - - namespace google_breakpad { - - StackFrameSymbolizer::StackFrameSymbolizer( - SymbolSupplier* supplier, - SourceLineResolverInterface* resolver) : supplier_(supplier), - resolver_(resolver) { } - -diff --git -r 85dd7094b78d -r 636cfcab9682 src/processor/stackwalker.cc ---- a/src/processor/stackwalker.cc Thu Mar 28 18:38:05 2013 +0100 -+++ b/src/processor/stackwalker.cc Thu Mar 28 18:06:39 2013 +0100 -@@ -41,17 +41,17 @@ - #include "google_breakpad/processor/call_stack.h" - #include "google_breakpad/processor/code_module.h" - #include "google_breakpad/processor/code_modules.h" - #include "google_breakpad/processor/minidump.h" - #include "google_breakpad/processor/stack_frame.h" - #include "google_breakpad/processor/stack_frame_symbolizer.h" - #include "google_breakpad/processor/system_info.h" - #include "processor/linked_ptr.h" --#include "processor/logging.h" -+#include "common/logging.h" - #include "processor/stackwalker_ppc.h" - #include "processor/stackwalker_sparc.h" - #include "processor/stackwalker_x86.h" - #include "processor/stackwalker_amd64.h" - #include "processor/stackwalker_arm.h" - - namespace google_breakpad { - -diff --git -r 85dd7094b78d -r 636cfcab9682 src/processor/stackwalker_amd64.cc ---- a/src/processor/stackwalker_amd64.cc Thu Mar 28 18:38:05 2013 +0100 -+++ b/src/processor/stackwalker_amd64.cc Thu Mar 28 18:06:39 2013 +0100 -@@ -36,17 +36,17 @@ - #include - - #include "common/scoped_ptr.h" - #include "google_breakpad/processor/call_stack.h" - #include "google_breakpad/processor/memory_region.h" - #include "google_breakpad/processor/source_line_resolver_interface.h" - #include "google_breakpad/processor/stack_frame_cpu.h" - #include "processor/cfi_frame_info.h" --#include "processor/logging.h" -+#include "common/logging.h" - #include "processor/stackwalker_amd64.h" - - namespace google_breakpad { - - - const StackwalkerAMD64::CFIWalker::RegisterSet - StackwalkerAMD64::cfi_register_map_[] = { - // It may seem like $rip and $rsp are callee-saves, because the callee is -diff --git -r 85dd7094b78d -r 636cfcab9682 src/processor/stackwalker_arm.cc ---- a/src/processor/stackwalker_arm.cc Thu Mar 28 18:38:05 2013 +0100 -+++ b/src/processor/stackwalker_arm.cc Thu Mar 28 18:06:39 2013 +0100 -@@ -36,17 +36,17 @@ - #include - - #include "common/scoped_ptr.h" - #include "google_breakpad/processor/call_stack.h" - #include "google_breakpad/processor/memory_region.h" - #include "google_breakpad/processor/source_line_resolver_interface.h" - #include "google_breakpad/processor/stack_frame_cpu.h" - #include "processor/cfi_frame_info.h" --#include "processor/logging.h" -+#include "common/logging.h" - #include "processor/stackwalker_arm.h" - - namespace google_breakpad { - - - StackwalkerARM::StackwalkerARM(const SystemInfo* system_info, - const MDRawContextARM* context, - int fp_register, -diff --git -r 85dd7094b78d -r 636cfcab9682 src/processor/stackwalker_ppc.cc ---- a/src/processor/stackwalker_ppc.cc Thu Mar 28 18:38:05 2013 +0100 -+++ b/src/processor/stackwalker_ppc.cc Thu Mar 28 18:06:39 2013 +0100 -@@ -33,17 +33,17 @@ - // - // Author: Mark Mentovai - - - #include "processor/stackwalker_ppc.h" - #include "google_breakpad/processor/call_stack.h" - #include "google_breakpad/processor/memory_region.h" - #include "google_breakpad/processor/stack_frame_cpu.h" --#include "processor/logging.h" -+#include "common/logging.h" - - namespace google_breakpad { - - - StackwalkerPPC::StackwalkerPPC(const SystemInfo* system_info, - const MDRawContextPPC* context, - MemoryRegion* memory, - const CodeModules* modules, -diff --git -r 85dd7094b78d -r 636cfcab9682 src/processor/stackwalker_sparc.cc ---- a/src/processor/stackwalker_sparc.cc Thu Mar 28 18:38:05 2013 +0100 -+++ b/src/processor/stackwalker_sparc.cc Thu Mar 28 18:06:39 2013 +0100 -@@ -32,17 +32,17 @@ - // See stackwalker_sparc.h for documentation. - // - // Author: Michael Shang - - - #include "google_breakpad/processor/call_stack.h" - #include "google_breakpad/processor/memory_region.h" - #include "google_breakpad/processor/stack_frame_cpu.h" --#include "processor/logging.h" -+#include "common/logging.h" - #include "processor/stackwalker_sparc.h" - - namespace google_breakpad { - - - StackwalkerSPARC::StackwalkerSPARC(const SystemInfo* system_info, - const MDRawContextSPARC* context, - MemoryRegion* memory, -diff --git -r 85dd7094b78d -r 636cfcab9682 src/processor/stackwalker_x86.cc ---- a/src/processor/stackwalker_x86.cc Thu Mar 28 18:38:05 2013 +0100 -+++ b/src/processor/stackwalker_x86.cc Thu Mar 28 18:06:39 2013 +0100 -@@ -37,17 +37,17 @@ - #include - - #include "common/scoped_ptr.h" - #include "google_breakpad/processor/call_stack.h" - #include "google_breakpad/processor/code_modules.h" - #include "google_breakpad/processor/memory_region.h" - #include "google_breakpad/processor/source_line_resolver_interface.h" - #include "google_breakpad/processor/stack_frame_cpu.h" --#include "processor/logging.h" -+#include "common/logging.h" - #include "processor/postfix_evaluator-inl.h" - #include "processor/stackwalker_x86.h" - #include "processor/windows_frame_info.h" - #include "processor/cfi_frame_info.h" - - namespace google_breakpad { - - -diff --git -r 85dd7094b78d -r 636cfcab9682 src/processor/static_address_map-inl.h ---- a/src/processor/static_address_map-inl.h Thu Mar 28 18:38:05 2013 +0100 -+++ b/src/processor/static_address_map-inl.h Thu Mar 28 18:06:39 2013 +0100 -@@ -33,17 +33,17 @@ - // - // Author: Siyang Xie (lambxsy@google.com) - - #ifndef PROCESSOR_STATIC_ADDRESS_MAP_INL_H__ - #define PROCESSOR_STATIC_ADDRESS_MAP_INL_H__ - - #include "processor/static_address_map.h" - --#include "processor/logging.h" -+#include "common/logging.h" - - namespace google_breakpad { - - template - bool StaticAddressMap::Retrieve( - const AddressType &address, - const EntryType *&entry, AddressType *entry_address) const { - -diff --git -r 85dd7094b78d -r 636cfcab9682 src/processor/static_contained_range_map-inl.h ---- a/src/processor/static_contained_range_map-inl.h Thu Mar 28 18:38:05 2013 +0100 -+++ b/src/processor/static_contained_range_map-inl.h Thu Mar 28 18:06:39 2013 +0100 -@@ -33,17 +33,17 @@ - // See static_contained_range_map.h for documentation. - // - // Author: Siyang Xie (lambxsy@google.com) - - #ifndef PROCESSOR_STATIC_CONTAINED_RANGE_MAP_INL_H__ - #define PROCESSOR_STATIC_CONTAINED_RANGE_MAP_INL_H__ - - #include "processor/static_contained_range_map.h" --#include "processor/logging.h" -+#include "common/logging.h" - - namespace google_breakpad { - - template - StaticContainedRangeMap::StaticContainedRangeMap( - const char *base) - : base_(*(reinterpret_cast(base))), - entry_size_(*(reinterpret_cast(base + sizeof(base_)))), -diff --git -r 85dd7094b78d -r 636cfcab9682 src/processor/static_map-inl.h ---- a/src/processor/static_map-inl.h Thu Mar 28 18:38:05 2013 +0100 -+++ b/src/processor/static_map-inl.h Thu Mar 28 18:06:39 2013 +0100 -@@ -33,17 +33,17 @@ - // Author: Siyang Xie (lambxsy@google.com) - - - #ifndef PROCESSOR_STATIC_MAP_INL_H__ - #define PROCESSOR_STATIC_MAP_INL_H__ - - #include "processor/static_map.h" - #include "processor/static_map_iterator-inl.h" --#include "processor/logging.h" -+#include "common/logging.h" - - namespace google_breakpad { - - template - StaticMap::StaticMap(const char* raw_data) - : raw_data_(raw_data), - compare_() { - // First 4 Bytes store the number of nodes. -diff --git -r 85dd7094b78d -r 636cfcab9682 src/processor/static_map_iterator-inl.h ---- a/src/processor/static_map_iterator-inl.h Thu Mar 28 18:38:05 2013 +0100 -+++ b/src/processor/static_map_iterator-inl.h Thu Mar 28 18:06:39 2013 +0100 -@@ -32,17 +32,17 @@ - // - // Author: Siyang Xie (lambxsy@google.com) - - #ifndef PROCESSOR_STATIC_MAP_ITERATOR_INL_H__ - #define PROCESSOR_STATIC_MAP_ITERATOR_INL_H__ - - #include "processor/static_map_iterator.h" - --#include "processor/logging.h" -+#include "common/logging.h" - - namespace google_breakpad { - - template - StaticMapIterator::StaticMapIterator(const char* base, - const int &index): - index_(index), base_(base) { - // See static_map.h for documentation on -diff --git -r 85dd7094b78d -r 636cfcab9682 src/processor/static_range_map-inl.h ---- a/src/processor/static_range_map-inl.h Thu Mar 28 18:38:05 2013 +0100 -+++ b/src/processor/static_range_map-inl.h Thu Mar 28 18:06:39 2013 +0100 -@@ -32,17 +32,17 @@ - // See static_range_map.h for documentation. - // - // Author: Siyang Xie (lambxsy@google.com) - - #ifndef PROCESSOR_STATIC_RANGE_MAP_INL_H__ - #define PROCESSOR_STATIC_RANGE_MAP_INL_H__ - - #include "processor/static_range_map.h" --#include "processor/logging.h" -+#include "common/logging.h" - - namespace google_breakpad { - - template - bool StaticRangeMap::RetrieveRange( - const AddressType &address, const EntryType *&entry, - AddressType *entry_base, AddressType *entry_size) const { - MapConstIterator iterator = map_.lower_bound(address); -diff --git -r 85dd7094b78d -r 636cfcab9682 src/processor/windows_frame_info.h ---- a/src/processor/windows_frame_info.h Thu Mar 28 18:38:05 2013 +0100 -+++ b/src/processor/windows_frame_info.h Thu Mar 28 18:06:39 2013 +0100 -@@ -41,17 +41,17 @@ - #include - #include - - #include - #include - - #include "common/using_std_string.h" - #include "google_breakpad/common/breakpad_types.h" --#include "processor/logging.h" -+#include "common/logging.h" - #include "processor/tokenize.h" - - namespace google_breakpad { - - #ifdef _WIN32 - #define strtoull _strtoui64 - #endif - diff --git a/toolkit/crashreporter/breakpad-patches/11-readsymboldatainternal-proto.patch b/toolkit/crashreporter/breakpad-patches/11-readsymboldatainternal-proto.patch deleted file mode 100644 index c597ec9bfc1c..000000000000 --- a/toolkit/crashreporter/breakpad-patches/11-readsymboldatainternal-proto.patch +++ /dev/null @@ -1,50 +0,0 @@ -# HG changeset patch -# User Julian Seward -# Date 1365953823 -7200 -# Node ID 21d2964d1337c0fce7375025610298a818ddbd0f -# Parent ef802a6418f25841880359e6dab3e8240bfd0821 -Bug 861141 - Connect Breakpad on Android to faulty.lib's mmap interface. r=ted. -Adds a prototype for ReadSymbolDataInternal so it can be called from -outside breakpad. - -diff --git src/common/linux/dump_symbols.h ---- a/src/common/linux/dump_symbols.h -+++ b/src/common/linux/dump_symbols.h -@@ -36,16 +36,17 @@ - #define COMMON_LINUX_DUMP_SYMBOLS_H__ - - #include - #include - #include - - #include "common/symbol_data.h" - #include "common/using_std_string.h" -+#include "google_breakpad/common/breakpad_types.h" - - namespace google_breakpad { - - class Module; - - // Find all the debugging information in OBJ_FILE, an ELF executable - // or shared library, and write it to SYM_STREAM in the Breakpad symbol - // file format. -@@ -60,11 +61,19 @@ bool WriteSymbolFile(const string &obj_f - // As above, but simply return the debugging information in MODULE - // instead of writing it to a stream. The caller owns the resulting - // Module object and must delete it when finished. - bool ReadSymbolData(const string& obj_file, - const std::vector& debug_dirs, - SymbolData symbol_data, - Module** module); - -+// Same as ReadSymbolData, except don't try to open the file; instead -+// just use the in-memory data (mapped image of it) located at OBJ_FILE. -+bool ReadSymbolDataInternal(const uint8_t* obj_file, -+ const string& obj_filename, -+ const std::vector& debug_dirs, -+ SymbolData symbol_data, -+ Module** module); -+ - } // namespace google_breakpad - - #endif // COMMON_LINUX_DUMP_SYMBOLS_H__ diff --git a/toolkit/crashreporter/breakpad-patches/13-bug836829.patch b/toolkit/crashreporter/breakpad-patches/13-bug836829.patch deleted file mode 100644 index a339b0294a2a..000000000000 --- a/toolkit/crashreporter/breakpad-patches/13-bug836829.patch +++ /dev/null @@ -1,38 +0,0 @@ -# HG changeset patch -# User Georg Fritzsche -# Date 1366630152 -7200 -# Mon Apr 22 13:29:12 2013 +0200 -# Node ID 11f7a9321b7d5d85eddc2db16e58e6870a7c4e06 -# Parent e74de3db7dd27ffda8f4772f892cfb52c5c35649 -Bug 836829 - Fix missing result check in Mac exception handler. r=ted - -diff --git a/src/client/mac/handler/exception_handler.cc b/src/client/mac/handler/exception_handler.cc ---- a/src/client/mac/handler/exception_handler.cc -+++ b/src/client/mac/handler/exception_handler.cc -@@ -276,19 +276,23 @@ bool ExceptionHandler::WriteMinidump(boo - - use_minidump_write_mutex_ = true; - last_minidump_write_result_ = false; - - // Lock the mutex. Since we just created it, this will return immediately. - if (pthread_mutex_lock(&minidump_write_mutex_) == 0) { - // Send an empty message to the handle port so that a minidump will - // be written -- SendMessageToHandlerThread(write_exception_stream ? -- kWriteDumpWithExceptionMessage : -- kWriteDumpMessage); -+ bool result = SendMessageToHandlerThread(write_exception_stream ? -+ kWriteDumpWithExceptionMessage : -+ kWriteDumpMessage); -+ if (!result) { -+ pthread_mutex_unlock(&minidump_write_mutex_); -+ return false; -+ } - - // Wait for the minidump writer to complete its writing. It will unlock - // the mutex when completed - pthread_mutex_lock(&minidump_write_mutex_); - } - - use_minidump_write_mutex_ = false; - UpdateNextID(); diff --git a/toolkit/crashreporter/breakpad-patches/14-bug883126.patch b/toolkit/crashreporter/breakpad-patches/14-bug883126.patch deleted file mode 100644 index 844b0f55e483..000000000000 --- a/toolkit/crashreporter/breakpad-patches/14-bug883126.patch +++ /dev/null @@ -1,346 +0,0 @@ -# HG changeset patch -# User Julian Seward -# Date 1372168568 -7200 -# Tue Jun 25 15:56:08 2013 +0200 -# Node ID 6d06a09b3f5624dd833bd6f905bfd88e3fdec00a -# Parent 11f7a9321b7d5d85eddc2db16e58e6870a7c4e06 -Bug 883126 - Improve performance of EXIDX unwinding in Breakpad. r=ted - -diff --git a/src/common/arm_ex_to_module.cc b/src/common/arm_ex_to_module.cc ---- a/src/common/arm_ex_to_module.cc -+++ b/src/common/arm_ex_to_module.cc -@@ -66,141 +66,126 @@ WITH THE SOFTWARE OR THE USE OR OTHER DE - - #define ARM_EXBUF_START(x) (((x) >> 4) & 0x0f) - #define ARM_EXBUF_COUNT(x) ((x) & 0x0f) - #define ARM_EXBUF_END(x) (ARM_EXBUF_START(x) + ARM_EXBUF_COUNT(x)) - - using google_breakpad::ustr__pc; - using google_breakpad::ustr__lr; - using google_breakpad::ustr__sp; -+using google_breakpad::ustr__ZDra; -+using google_breakpad::ustr__ZDcfa; - using google_breakpad::Module; - using google_breakpad::ToUniqueString; - using google_breakpad::UniqueString; - - namespace arm_ex_to_module { - - // Translate command from extab_data to command for Module. - int ARMExToModule::TranslateCmd(const struct extab_data* edata, -- Module::StackFrameEntry* entry, string& vsp) { -+ Module::StackFrameEntry* entry, -+ Module::Expr& vsp) { - int ret = 0; - switch (edata->cmd) { - case ARM_EXIDX_CMD_FINISH: - /* Copy LR to PC if there isn't currently a rule for PC in force. */ - if (entry->initial_rules.find(ustr__pc()) - == entry->initial_rules.end()) { - if (entry->initial_rules.find(ustr__lr()) - == entry->initial_rules.end()) { -- entry->initial_rules[ustr__pc()] = Module::Expr("lr"); -+ entry->initial_rules[ustr__pc()] = Module::Expr(ustr__lr(), -+ 0, false); // "lr" - } else { - entry->initial_rules[ustr__pc()] = entry->initial_rules[ustr__lr()]; - } - } - break; - case ARM_EXIDX_CMD_SUB_FROM_VSP: -- { -- char c[16]; -- sprintf(c, " %d -", edata->data); -- vsp += c; -- } -+ vsp = vsp.add_delta(- static_cast(edata->data)); - break; - case ARM_EXIDX_CMD_ADD_TO_VSP: -- { -- char c[16]; -- sprintf(c, " %d +", edata->data); -- vsp += c; -- } -+ vsp = vsp.add_delta(static_cast(edata->data)); - break; - case ARM_EXIDX_CMD_REG_POP: - for (unsigned int i = 0; i < 16; i++) { - if (edata->data & (1 << i)) { -- entry->initial_rules[ToUniqueString(regnames[i])] -- = Module::Expr(vsp + " ^"); -- vsp += " 4 +"; -+ entry->initial_rules[ToUniqueString(regnames[i])] = vsp.deref(); -+ vsp = vsp.add_delta(4); - } - } - /* Set cfa in case the SP got popped. */ - if (edata->data & (1 << 13)) { -- Module::Expr& vsp_expr = entry->initial_rules[ustr__sp()]; -- // It must be a postfix expression (we don't generate anything -- // else here), so return -1 to fail out if it isn't. -- if (!vsp_expr.isExprPostfix()) { -- ret = -1; -- break; -- }; -- vsp = vsp_expr.getExprPostfix(); -+ vsp = entry->initial_rules[ustr__sp()]; - } - break; - case ARM_EXIDX_CMD_REG_TO_SP: { - assert (edata->data < 16); - const char* const regname = regnames[edata->data]; - const UniqueString* regname_us = ToUniqueString(regname); - if (entry->initial_rules.find(regname_us) == entry->initial_rules.end()) { -- entry->initial_rules[ustr__sp()] = Module::Expr(regname); -+ entry->initial_rules[ustr__sp()] = Module::Expr(regname_us, -+ 0, false); // "regname" - } else { - entry->initial_rules[ustr__sp()] = entry->initial_rules[regname_us]; - } -- Module::Expr& vsp_expr = entry->initial_rules[ustr__sp()]; -- if (!vsp_expr.isExprPostfix()) { -- ret = -1; -- break; -- }; -- vsp = vsp_expr.getExprPostfix(); -+ vsp = entry->initial_rules[ustr__sp()]; - break; - } - case ARM_EXIDX_CMD_VFP_POP: - /* Don't recover VFP registers, but be sure to adjust the stack - pointer. */ - for (unsigned int i = ARM_EXBUF_START(edata->data); - i <= ARM_EXBUF_END(edata->data); i++) { -- vsp += " 8 +"; -+ vsp = vsp.add_delta(8); - } - if (!(edata->data & ARM_EXIDX_VFP_FSTMD)) { -- vsp += " 4 +"; -+ vsp = vsp.add_delta(4); - } - break; - case ARM_EXIDX_CMD_WREG_POP: - for (unsigned int i = ARM_EXBUF_START(edata->data); - i <= ARM_EXBUF_END(edata->data); i++) { -- vsp += " 8 +"; -+ vsp = vsp.add_delta(8); - } - break; - case ARM_EXIDX_CMD_WCGR_POP: - // Pop wCGR registers under mask {wCGR3,2,1,0}, hence "i < 4" - for (unsigned int i = 0; i < 4; i++) { - if (edata->data & (1 << i)) { -- vsp += " 4 +"; -+ vsp = vsp.add_delta(4); - } - } - break; - case ARM_EXIDX_CMD_REFUSED: - case ARM_EXIDX_CMD_RESERVED: - ret = -1; - break; - } - return ret; - } - - void ARMExToModule::AddStackFrame(uintptr_t addr, size_t size) { - stack_frame_entry_ = new Module::StackFrameEntry; - stack_frame_entry_->address = addr; - stack_frame_entry_->size = size; -- stack_frame_entry_->initial_rules[ToUniqueString(kCFA)] = Module::Expr("sp"); -- vsp_ = "sp"; -+ Module::Expr sp_expr = Module::Expr(ustr__sp(), 0, false); // "sp" -+ stack_frame_entry_->initial_rules[ustr__ZDcfa()] = sp_expr; // ".cfa" -+ vsp_ = sp_expr; - } - - int ARMExToModule::ImproveStackFrame(const struct extab_data* edata) { - return TranslateCmd(edata, stack_frame_entry_, vsp_) ; - } - - void ARMExToModule::DeleteStackFrame() { - delete stack_frame_entry_; - } - - void ARMExToModule::SubmitStackFrame() { - // return address always winds up in pc -- stack_frame_entry_->initial_rules[ToUniqueString(kRA)] -+ stack_frame_entry_->initial_rules[ustr__ZDra()] // ".ra" - = stack_frame_entry_->initial_rules[ustr__pc()]; - // the final value of vsp is the new value of sp - stack_frame_entry_->initial_rules[ustr__sp()] = vsp_; - module_->AddStackFrameEntry(stack_frame_entry_); - } - - } // namespace arm_ex_to_module -diff --git a/src/common/arm_ex_to_module.h b/src/common/arm_ex_to_module.h ---- a/src/common/arm_ex_to_module.h -+++ b/src/common/arm_ex_to_module.h -@@ -89,19 +89,16 @@ struct extab_data { - uint32_t data; - }; - - enum extab_cmd_flags { - ARM_EXIDX_VFP_SHIFT_16 = 1 << 16, - ARM_EXIDX_VFP_FSTMD = 1 << 17, // distinguishes FSTMxxD from FSTMxxX - }; - --const string kRA = ".ra"; --const string kCFA = ".cfa"; -- - static const char* const regnames[] = { - "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", - "r8", "r9", "r10", "r11", "r12", "sp", "lr", "pc", - "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", - "fps", "cpsr" - }; - - // Receives information from arm_ex_reader::ExceptionTableInfo -@@ -113,17 +110,17 @@ class ARMExToModule { - ~ARMExToModule() { } - void AddStackFrame(uintptr_t addr, size_t size); - int ImproveStackFrame(const struct extab_data* edata); - void DeleteStackFrame(); - void SubmitStackFrame(); - private: - Module* module_; - Module::StackFrameEntry* stack_frame_entry_; -- string vsp_; -+ Module::Expr vsp_; - int TranslateCmd(const struct extab_data* edata, - Module::StackFrameEntry* entry, -- string& vsp); -+ Module::Expr& vsp); - }; - - } // namespace arm_ex_to_module - - #endif // COMMON_ARM_EX_TO_MODULE__ -diff --git a/src/common/module.h b/src/common/module.h ---- a/src/common/module.h -+++ b/src/common/module.h -@@ -39,16 +39,20 @@ - #define COMMON_LINUX_MODULE_H__ - - #include - #include - #include - #include - #include - -+#include -+#include -+#include -+ - #include "common/symbol_data.h" - #include "common/using_std_string.h" - #include "common/unique_string.h" - #include "google_breakpad/common/breakpad_types.h" - - namespace google_breakpad { - - using std::set; -@@ -161,30 +165,98 @@ class Module { - // Construct an invalid expression - Expr() { - postfix_ = ""; - ident_ = NULL; - offset_ = 0; - how_ = kExprInvalid; - } - bool isExprInvalid() const { return how_ == kExprInvalid; } -- bool isExprPostfix() const { return how_ == kExprPostfix; } - -- // Return the postfix expression string. This is only -- // meaningful on Exprs for which isExprPostfix returns true. -- // In all other cases it returns an empty string. -- string getExprPostfix() const { return postfix_; } -+ // Return the postfix expression string, either directly, -+ // if this is a postfix expression, or by synthesising it -+ // for a simple expression. -+ string getExprPostfix() const { -+ switch (how_) { -+ case kExprPostfix: -+ return postfix_; -+ case kExprSimple: -+ case kExprSimpleMem: { -+ char buf[40]; -+ sprintf(buf, " %ld %c%s", labs(offset_), offset_ < 0 ? '-' : '+', -+ how_ == kExprSimple ? "" : " ^"); -+ return string(FromUniqueString(ident_)) + string(buf); -+ } -+ case kExprInvalid: -+ default: -+ assert(0 && "getExprPostfix: invalid Module::Expr type"); -+ return "Expr::genExprPostfix: kExprInvalid"; -+ } -+ } - - bool operator==(const Expr& other) const { - return how_ == other.how_ && - ident_ == other.ident_ && - offset_ == other.offset_ && - postfix_ == other.postfix_; - } - -+ // Returns an Expr which evaluates to |this| + |delta| -+ Expr add_delta(long delta) { -+ if (delta == 0) { -+ return *this; -+ } -+ // If it's a simple form expression of the form "identifier + offset", -+ // simply add |delta| on to |offset|. In the other two possible -+ // cases: -+ // *(identifier + offset) -+ // completely arbitrary postfix expression string -+ // the only option is to "downgrade" it to a postfix expression and add -+ // "+/- delta" at the end of the string, since the result can't be -+ // represented in the simple form. -+ switch (how_) { -+ case kExprSimpleMem: -+ case kExprPostfix: { -+ char buf[40]; -+ sprintf(buf, " %ld %c", labs(delta), delta < 0 ? '-' : '+'); -+ return Expr(getExprPostfix() + string(buf)); -+ } -+ case kExprSimple: -+ return Expr(ident_, offset_ + delta, false); -+ case kExprInvalid: -+ default: -+ assert(0 && "add_delta: invalid Module::Expr type"); -+ // Invalid inputs produce an invalid result -+ return Expr(); -+ } -+ } -+ -+ // Returns an Expr which evaluates to *|this| -+ Expr deref() { -+ // In the simplest case, a kExprSimple can be changed into a -+ // kExprSimpleMem. In all other cases it has to be dumped as a -+ // postfix string, and " ^" added at the end. -+ switch (how_) { -+ case kExprSimple: { -+ Expr t = *this; -+ t.how_ = kExprSimpleMem; -+ return t; -+ } -+ case kExprSimpleMem: -+ case kExprPostfix: { -+ return Expr(getExprPostfix() + " ^"); -+ } -+ case kExprInvalid: -+ default: -+ assert(0 && "deref: invalid Module::Expr type"); -+ // Invalid inputs produce an invalid result -+ return Expr(); -+ } -+ } -+ - // The identifier that gives the starting value for simple expressions. - const UniqueString* ident_; - // The offset to add for simple expressions. - long offset_; - // The Postfix expression string to evaluate for non-simple expressions. - string postfix_; - // The operation expressed by this expression. - ExprHow how_; diff --git a/toolkit/crashreporter/breakpad-patches/15-bug859745.patch b/toolkit/crashreporter/breakpad-patches/15-bug859745.patch deleted file mode 100644 index 0d1806f80ea2..000000000000 --- a/toolkit/crashreporter/breakpad-patches/15-bug859745.patch +++ /dev/null @@ -1,96 +0,0 @@ -# HG changeset patch -# User Julian Seward -# Date 1366643454 -7200 -# Mon Apr 22 17:10:54 2013 +0200 -# Node ID 3e64f12d9dab619c90bee02ed071bcda0100844e -# Parent 6d06a09b3f5624dd833bd6f905bfd88e3fdec00a -Bug 859745 - Install sane unwinding limit for SPS/breakpad. r=ted - -diff --git a/src/google_breakpad/processor/stackwalker.h b/src/google_breakpad/processor/stackwalker.h ---- a/src/google_breakpad/processor/stackwalker.h -+++ b/src/google_breakpad/processor/stackwalker.h -@@ -83,17 +83,20 @@ class Stackwalker { - // argument. If no suitable concrete subclass exists, returns NULL. - static Stackwalker* StackwalkerForCPU( - const SystemInfo* system_info, - MinidumpContext* context, - MemoryRegion* memory, - const CodeModules* modules, - StackFrameSymbolizer* resolver_helper); - -- static void set_max_frames(uint32_t max_frames) { max_frames_ = max_frames; } -+ static void set_max_frames(uint32_t max_frames) { -+ max_frames_ = max_frames; -+ max_frames_set_ = true; -+ } - static uint32_t max_frames() { return max_frames_; } - - protected: - // system_info identifies the operating system, NULL or empty if unknown. - // memory identifies a MemoryRegion that provides the stack memory - // for the stack to walk. modules, if non-NULL, is a CodeModules - // object that is used to look up which code module each stack frame is - // associated with. frame_symbolizer is a StackFrameSymbolizer object that -@@ -191,14 +194,19 @@ class Stackwalker { - // the end of the stack has been reached). GetCallerFrame allocates a new - // StackFrame (or StackFrame subclass), ownership of which is taken by - // the caller. - virtual StackFrame* GetCallerFrame(const CallStack* stack) = 0; - - // The maximum number of frames Stackwalker will walk through. - // This defaults to 1024 to prevent infinite loops. - static uint32_t max_frames_; -+ -+ // Keep track of whether max_frames_ has been set by the user, since -+ // it affects whether or not an error message is printed in the case -+ // where an unwind got stopped by the limit. -+ static bool max_frames_set_; - }; - - } // namespace google_breakpad - - - #endif // GOOGLE_BREAKPAD_PROCESSOR_STACKWALKER_H__ -diff --git a/src/processor/stackwalker.cc b/src/processor/stackwalker.cc ---- a/src/processor/stackwalker.cc -+++ b/src/processor/stackwalker.cc -@@ -52,16 +52,17 @@ - #include "processor/stackwalker_x86.h" - #include "processor/stackwalker_amd64.h" - #include "processor/stackwalker_arm.h" - - namespace google_breakpad { - - const int Stackwalker::kRASearchWords = 30; - uint32_t Stackwalker::max_frames_ = 1024; -+bool Stackwalker::max_frames_set_ = false; - - Stackwalker::Stackwalker(const SystemInfo* system_info, - MemoryRegion* memory, - const CodeModules* modules, - StackFrameSymbolizer* frame_symbolizer) - : system_info_(system_info), - memory_(memory), - modules_(modules), -@@ -120,17 +121,20 @@ bool Stackwalker::Walk(CallStack* stack, - modules_without_symbols->push_back(frame->module); - } - } - - // Add the frame to the call stack. Relinquish the ownership claim - // over the frame, because the stack now owns it. - stack->frames_.push_back(frame.release()); - if (stack->frames_.size() > max_frames_) { -- BPLOG(ERROR) << "The stack is over " << max_frames_ << " frames."; -+ // Only emit an error message in the case where the limit that we -+ // reached is the default limit, not set by the user. -+ if (!max_frames_set_) -+ BPLOG(ERROR) << "The stack is over " << max_frames_ << " frames."; - break; - } - - // Get the next frame and take ownership. - frame.reset(GetCallerFrame(stack)); - } - - return true; diff --git a/toolkit/crashreporter/breakpad-patches/16-sht-arm-exidx-define.patch b/toolkit/crashreporter/breakpad-patches/16-sht-arm-exidx-define.patch deleted file mode 100644 index 5771c8cc1729..000000000000 --- a/toolkit/crashreporter/breakpad-patches/16-sht-arm-exidx-define.patch +++ /dev/null @@ -1,21 +0,0 @@ -# HG changeset patch -# User Justin Wood -# Date 1372046309 14400 -# Node ID d6fc88d46b67cd522998ab6a9320b00b6091d5ce -# Parent aef71cf41cecf4c3d7bef313bff502c98d5883ce -Bug 886209 - SHT_ARM_EXIDX not defined on older glibc versions. r=glandium -(fixes SeaMonkey building on CentOS5.x) - -diff --git src/common/linux/dump_symbols.cc ---- a/src/common/linux/dump_symbols.cc -+++ b/src/common/linux/dump_symbols.cc -@@ -71,7 +71,8 @@ - #include "common/using_std_string.h" - #include "common/logging.h" - --#if defined(__ANDROID__) && !defined(SHT_ARM_EXIDX) -+#ifndef SHT_ARM_EXIDX -+// bionic and older glibc don't define it - # define SHT_ARM_EXIDX (SHT_LOPROC + 1) - #endif - diff --git a/toolkit/crashreporter/breakpad-patches/17-bug942407-usersig.patch b/toolkit/crashreporter/breakpad-patches/17-bug942407-usersig.patch deleted file mode 100644 index 24dc08c0a89e..000000000000 --- a/toolkit/crashreporter/breakpad-patches/17-bug942407-usersig.patch +++ /dev/null @@ -1,38 +0,0 @@ -# HG changeset patch -# User Jed Davis - -Bug 942407: Fix breakpad signal handler's test for signal origin. r=ted - - -diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/handler/exception_handler.cc b/toolkit/crashreporter/google-breakpad/src/client/linux/handler/exception_handler.cc -index 55834e0..df958fb 100644 ---- a/toolkit/crashreporter/google-breakpad/src/client/linux/handler/exception_handler.cc -+++ b/toolkit/crashreporter/google-breakpad/src/client/linux/handler/exception_handler.cc -@@ -334,20 +334,20 @@ void ExceptionHandler::SignalHandler(int sig, siginfo_t* info, void* uc) { - if (handled) { - signal(sig, SIG_DFL); - } else { - RestoreHandlersLocked(); - } - - pthread_mutex_unlock(&handler_stack_mutex_); - -- if (info->si_pid) { -- // This signal was triggered by somebody sending us the signal with kill(). -- // In order to retrigger it, we have to queue a new signal by calling -- // kill() ourselves. -+ if (info->si_code <= 0) { -+ // This signal was sent by another process. (Positive values of -+ // si_code are reserved for kernel-originated signals.) In order -+ // to retrigger it, we have to queue a new signal. - if (tgkill(getpid(), syscall(__NR_gettid), sig) < 0) { - // If we failed to kill ourselves (e.g. because a sandbox disallows us - // to do so), we instead resort to terminating our process. This will - // result in an incorrect exit code. - _exit(1); - } - } else { - // This was a synchronous signal triggered by a hard fault (e.g. SIGSEGV). --- -1.8.4.rc3 - diff --git a/toolkit/crashreporter/breakpad-patches/18-bug945498-expose-handle-signal.patch b/toolkit/crashreporter/breakpad-patches/18-bug945498-expose-handle-signal.patch deleted file mode 100644 index 7291e0d0813a..000000000000 --- a/toolkit/crashreporter/breakpad-patches/18-bug945498-expose-handle-signal.patch +++ /dev/null @@ -1,28 +0,0 @@ -commit 443e11243cf3c88087b70602822d9e228f60d40a -Author: Jed Davis -Date: Wed Jan 29 12:06:33 2014 -0800 - - Bug 945498: Use breakpad to report seccomp violations as crashes. - -diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/handler/exception_handler.h b/toolkit/crashreporter/google-breakpad/src/client/linux/handler/exception_handler.h -index 7155419..c0039bc 100644 ---- a/toolkit/crashreporter/google-breakpad/src/client/linux/handler/exception_handler.h -+++ b/toolkit/crashreporter/google-breakpad/src/client/linux/handler/exception_handler.h -@@ -219,6 +219,9 @@ class ExceptionHandler { - - // Force signal handling for the specified signal. - bool SimulateSignalDelivery(int sig); -+ -+ // Report a crash signal from an SA_SIGINFO signal handler. -+ bool HandleSignal(int sig, siginfo_t* info, void* uc); - private: - // Save the old signal handlers and install new ones. - static bool InstallHandlersLocked(); -@@ -231,7 +234,6 @@ class ExceptionHandler { - void WaitForContinueSignal(); - - static void SignalHandler(int sig, siginfo_t* info, void* uc); -- bool HandleSignal(int sig, siginfo_t* info, void* uc); - static int ThreadEntry(void* arg); - bool DoDump(pid_t crashing_process, const void* context, - size_t context_size); diff --git a/toolkit/crashreporter/breakpad-patches/19-bug942290-breakpad-exidx-merge.patch b/toolkit/crashreporter/breakpad-patches/19-bug942290-breakpad-exidx-merge.patch deleted file mode 100644 index 12285769e408..000000000000 --- a/toolkit/crashreporter/breakpad-patches/19-bug942290-breakpad-exidx-merge.patch +++ /dev/null @@ -1,93 +0,0 @@ -commit 8885dea3716170ec7f3b213421c330f31cd5ac4b -Author: Jed Davis -Date: Mon May 19 15:41:28 2014 -0700 - - Bug 942290: Merge ARM exidx info with DWARF if both are present. - -diff --git a/toolkit/crashreporter/google-breakpad/src/common/arm_ex_reader.cc b/toolkit/crashreporter/google-breakpad/src/common/arm_ex_reader.cc -index 5d87ab4..97f99e4 100644 ---- a/toolkit/crashreporter/google-breakpad/src/common/arm_ex_reader.cc -+++ b/toolkit/crashreporter/google-breakpad/src/common/arm_ex_reader.cc -@@ -487,14 +487,16 @@ void ExceptionTableInfo::Start() - // create CFI entries that Breakpad can use. This can also fail. - // First, add a new stack frame entry, into which ExtabEntryDecode - // will write the CFI entries. -- handler_->AddStackFrame(addr, next_addr - addr); -- int ret = ExtabEntryDecode(buf, buf_used); -- if (ret < 0) { -- handler_->DeleteStackFrame(); -- BPLOG(INFO) << "ExtabEntryDecode: failed with error code: " << ret; -- continue; -+ if (!handler_->HasStackFrame(addr, next_addr - addr)) { -+ handler_->AddStackFrame(addr, next_addr - addr); -+ int ret = ExtabEntryDecode(buf, buf_used); -+ if (ret < 0) { -+ handler_->DeleteStackFrame(); -+ BPLOG(INFO) << "ExtabEntryDecode: failed with error code: " << ret; -+ continue; -+ } -+ handler_->SubmitStackFrame(); - } -- handler_->SubmitStackFrame(); - - } /* iterating over .exidx */ - } -diff --git a/toolkit/crashreporter/google-breakpad/src/common/arm_ex_to_module.cc b/toolkit/crashreporter/google-breakpad/src/common/arm_ex_to_module.cc -index f8535b7..b5e3b06 100644 ---- a/toolkit/crashreporter/google-breakpad/src/common/arm_ex_to_module.cc -+++ b/toolkit/crashreporter/google-breakpad/src/common/arm_ex_to_module.cc -@@ -162,6 +162,21 @@ int ARMExToModule::TranslateCmd(const struct extab_data* edata, - return ret; - } - -+bool ARMExToModule::HasStackFrame(uintptr_t addr, size_t size) { -+ // Invariant: the range [addr,covered) is covered by existing stack -+ // frame entries. -+ uintptr_t covered = addr; -+ while (covered < addr + size) { -+ const Module::StackFrameEntry *old_entry = -+ module_->FindStackFrameEntryByAddress(covered); -+ if (!old_entry) { -+ return false; -+ } -+ covered = old_entry->address + old_entry->size; -+ } -+ return true; -+} -+ - void ARMExToModule::AddStackFrame(uintptr_t addr, size_t size) { - stack_frame_entry_ = new Module::StackFrameEntry; - stack_frame_entry_->address = addr; -diff --git a/toolkit/crashreporter/google-breakpad/src/common/arm_ex_to_module.h b/toolkit/crashreporter/google-breakpad/src/common/arm_ex_to_module.h -index 73c936c..9d6a879 100644 ---- a/toolkit/crashreporter/google-breakpad/src/common/arm_ex_to_module.h -+++ b/toolkit/crashreporter/google-breakpad/src/common/arm_ex_to_module.h -@@ -108,6 +108,7 @@ class ARMExToModule { - ARMExToModule(Module* module) - : module_(module) { } - ~ARMExToModule() { } -+ bool HasStackFrame(uintptr_t addr, size_t size); - void AddStackFrame(uintptr_t addr, size_t size); - int ImproveStackFrame(const struct extab_data* edata); - void DeleteStackFrame(); -diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/dump_symbols.cc b/toolkit/crashreporter/google-breakpad/src/common/linux/dump_symbols.cc -index d59832c..9a54bab 100644 ---- a/toolkit/crashreporter/google-breakpad/src/common/linux/dump_symbols.cc -+++ b/toolkit/crashreporter/google-breakpad/src/common/linux/dump_symbols.cc -@@ -695,10 +695,12 @@ bool LoadSymbols(const string& obj_file, - FindElfSectionByName(".ARM.extab", SHT_PROGBITS, - sections, names, names_end, - elf_header->e_shnum); -- // Only load information from this section if there isn't a .debug_info -- // section. -- if (!found_debug_info_section -- && arm_exidx_section && arm_extab_section && symbol_data != NO_CFI) { -+ // Load information from these sections even if there is -+ // .debug_info, because some functions (e.g., hand-written or -+ // script-generated assembly) could have exidx entries but no DWARF. -+ // (For functions with both, the DWARF info that has already been -+ // parsed will take precedence.) -+ if (arm_exidx_section && arm_extab_section && symbol_data != NO_CFI) { - info->LoadedSection(".ARM.exidx"); - info->LoadedSection(".ARM.extab"); - bool result = LoadARMexidx(elf_header, diff --git a/toolkit/crashreporter/breakpad-patches/20-bug1068410-no-procfs-search.patch b/toolkit/crashreporter/breakpad-patches/20-bug1068410-no-procfs-search.patch deleted file mode 100644 index 91a82e106117..000000000000 --- a/toolkit/crashreporter/breakpad-patches/20-bug1068410-no-procfs-search.patch +++ /dev/null @@ -1,151 +0,0 @@ -commit 467c77076b232246970551cfba645d235381f588 -Author: Jed Davis -Date: Wed Sep 17 11:34:38 2014 -0700 - - Bug 1068410 - Remove procfs-searching workaround for credential-passing bug. - -diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/crash_generation_server.cc b/toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/crash_generation_server.cc -index f1e16b1..420e4b2 100644 ---- a/toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/crash_generation_server.cc -+++ b/toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/crash_generation_server.cc -@@ -51,116 +51,6 @@ - - static const char kCommandQuit = 'x'; - --static bool --GetInodeForFileDescriptor(ino_t* inode_out, int fd) --{ -- assert(inode_out); -- -- struct stat buf; -- if (fstat(fd, &buf) < 0) -- return false; -- -- if (!S_ISSOCK(buf.st_mode)) -- return false; -- -- *inode_out = buf.st_ino; -- return true; --} -- --// expected prefix of the target of the /proc/self/fd/%d link for a socket --static const char kSocketLinkPrefix[] = "socket:["; -- --// Parse a symlink in /proc/pid/fd/$x and return the inode number of the --// socket. --// inode_out: (output) set to the inode number on success --// path: e.g. /proc/1234/fd/5 (must be a UNIX domain socket descriptor) --static bool --GetInodeForProcPath(ino_t* inode_out, const char* path) --{ -- assert(inode_out); -- assert(path); -- -- char buf[PATH_MAX]; -- if (!google_breakpad::SafeReadLink(path, buf)) { -- return false; -- } -- -- if (0 != memcmp(kSocketLinkPrefix, buf, sizeof(kSocketLinkPrefix) - 1)) { -- return false; -- } -- -- char* endptr; -- const uint64_t inode_ul = -- strtoull(buf + sizeof(kSocketLinkPrefix) - 1, &endptr, 10); -- if (*endptr != ']') -- return false; -- -- if (inode_ul == ULLONG_MAX) { -- return false; -- } -- -- *inode_out = inode_ul; -- return true; --} -- --static bool --FindProcessHoldingSocket(pid_t* pid_out, ino_t socket_inode) --{ -- assert(pid_out); -- bool already_found = false; -- -- DIR* proc = opendir("/proc"); -- if (!proc) { -- return false; -- } -- -- std::vector pids; -- -- struct dirent* dent; -- while ((dent = readdir(proc))) { -- char* endptr; -- const unsigned long int pid_ul = strtoul(dent->d_name, &endptr, 10); -- if (pid_ul == ULONG_MAX || '\0' != *endptr) -- continue; -- pids.push_back(pid_ul); -- } -- closedir(proc); -- -- for (std::vector::const_iterator -- i = pids.begin(); i != pids.end(); ++i) { -- const pid_t current_pid = *i; -- char buf[PATH_MAX]; -- snprintf(buf, sizeof(buf), "/proc/%d/fd", current_pid); -- DIR* fd = opendir(buf); -- if (!fd) -- continue; -- -- while ((dent = readdir(fd))) { -- if (snprintf(buf, sizeof(buf), "/proc/%d/fd/%s", current_pid, -- dent->d_name) >= static_cast(sizeof(buf))) { -- continue; -- } -- -- ino_t fd_inode; -- if (GetInodeForProcPath(&fd_inode, buf) -- && fd_inode == socket_inode) { -- if (already_found) { -- closedir(fd); -- return false; -- } -- -- already_found = true; -- *pid_out = current_pid; -- break; -- } -- } -- -- closedir(fd); -- } -- -- return already_found; --} -- - namespace google_breakpad { - - CrashGenerationServer::CrashGenerationServer( -@@ -367,23 +257,6 @@ CrashGenerationServer::ClientEvent(short revents) - return true; - } - -- // Kernel bug workaround (broken in 2.6.30 at least): -- // The kernel doesn't translate PIDs in SCM_CREDENTIALS across PID -- // namespaces. Thus |crashing_pid| might be garbage from our point of view. -- // In the future we can remove this workaround, but we have to wait a couple -- // of years to be sure that it's worked its way out into the world. -- -- ino_t inode_number; -- if (!GetInodeForFileDescriptor(&inode_number, signal_fd)) { -- HANDLE_EINTR(close(signal_fd)); -- return true; -- } -- -- if (!FindProcessHoldingSocket(&crashing_pid, inode_number - 1)) { -- HANDLE_EINTR(close(signal_fd)); -- return true; -- } -- - string minidump_filename; - if (!MakeMinidumpFilename(minidump_filename)) - return true; diff --git a/toolkit/crashreporter/breakpad-patches/21-bug1068410-crash-server-pipe.patch b/toolkit/crashreporter/breakpad-patches/21-bug1068410-crash-server-pipe.patch deleted file mode 100644 index 5e8f0d058ec8..000000000000 --- a/toolkit/crashreporter/breakpad-patches/21-bug1068410-crash-server-pipe.patch +++ /dev/null @@ -1,40 +0,0 @@ -commit 634161872e2dcddcea95784651a985e8ebe3e937 -Author: Jed Davis -Date: Wed Sep 17 11:35:34 2014 -0700 - - Bug 1068410 - Convert remote crash dump to use pipe instead of socketpair in the child. - -diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/crash_generation_client.cc b/toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/crash_generation_client.cc -index 6ede779..df069e4 100644 ---- a/toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/crash_generation_client.cc -+++ b/toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/crash_generation_client.cc -@@ -45,7 +45,8 @@ bool - CrashGenerationClient::RequestDump(const void* blob, size_t blob_size) - { - int fds[2]; -- sys_socketpair(AF_UNIX, SOCK_STREAM, 0, fds); -+ if (sys_pipe(fds) != 0) -+ return false; - static const unsigned kControlMsgSize = CMSG_SPACE(sizeof(int)); - - struct kernel_msghdr msg; -diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/crash_generation_server.cc b/toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/crash_generation_server.cc -index 420e4b2..721078c 100644 ---- a/toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/crash_generation_server.cc -+++ b/toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/crash_generation_server.cc -@@ -275,14 +275,7 @@ CrashGenerationServer::ClientEvent(short revents) - } - - // Send the done signal to the process: it can exit now. -- memset(&msg, 0, sizeof(msg)); -- struct iovec done_iov; -- done_iov.iov_base = const_cast("\x42"); -- done_iov.iov_len = 1; -- msg.msg_iov = &done_iov; -- msg.msg_iovlen = 1; -- -- HANDLE_EINTR(sendmsg(signal_fd, &msg, MSG_DONTWAIT | MSG_NOSIGNAL)); -+ // (Closing this will make the child's sys_read unblock and return 0.) - HANDLE_EINTR(close(signal_fd)); - - return true; diff --git a/toolkit/crashreporter/client/moz.build b/toolkit/crashreporter/client/moz.build index d067c1da58cf..8d8e96e4399d 100644 --- a/toolkit/crashreporter/client/moz.build +++ b/toolkit/crashreporter/client/moz.build @@ -11,10 +11,6 @@ if CONFIG['OS_TARGET'] != 'Android': 'crashreporter.cpp', ] -LOCAL_INCLUDES += [ - '../google-breakpad/src', -] - if CONFIG['OS_ARCH'] == 'WINNT': UNIFIED_SOURCES += [ 'crashreporter_win.cpp', @@ -42,7 +38,6 @@ elif CONFIG['OS_ARCH'] == 'Darwin': OS_LIBS += ['-framework Cocoa'] USE_LIBS += [ 'breakpad_common_s', - 'breakpad_logging', 'breakpad_mac_common_s', ] elif CONFIG['OS_ARCH'] == 'SunOS': diff --git a/toolkit/crashreporter/crashreporter.mozbuild b/toolkit/crashreporter/crashreporter.mozbuild index 387cf8146534..5643df808a57 100644 --- a/toolkit/crashreporter/crashreporter.mozbuild +++ b/toolkit/crashreporter/crashreporter.mozbuild @@ -4,6 +4,10 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. +LOCAL_INCLUDES += [ + '/toolkit/crashreporter/google-breakpad/src', +] + # Suppress warnings in third-party code. if CONFIG['_MSC_VER']: CXXFLAGS += [ @@ -15,3 +19,8 @@ elif CONFIG['GNU_CXX']: ] if CONFIG['CLANG_CXX']: CXXFLAGS += ['-Wno-implicit-fallthrough'] + +if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk': + DEFINES['ELFSIZE'] = 32 + +DEFINES['NO_STABS_SUPPORT'] = True diff --git a/toolkit/crashreporter/gonk-include/elf.h b/toolkit/crashreporter/gonk-include/elf.h new file mode 100644 index 000000000000..debe30be67af --- /dev/null +++ b/toolkit/crashreporter/gonk-include/elf.h @@ -0,0 +1,159 @@ +// Copyright (c) 2012, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifndef GOOGLE_BREAKPAD_COMMON_ANDROID_INCLUDE_ELF_H +#define GOOGLE_BREAKPAD_COMMON_ANDROID_INCLUDE_ELF_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +// The Android provides BSD-based definitions for the ElfXX_Nhdr +// types +// always source-compatible with the GLibc/kernel ones. To overcome this +// issue without modifying a lot of code in Breakpad, use an ugly macro +// renaming trick with #include_next + +// Avoid conflict with BSD-based definition of ElfXX_Nhdr. +// Unfortunately, their field member names do not use a 'n_' prefix. +#define Elf32_Nhdr __bsd_Elf32_Nhdr +#define Elf64_Nhdr __bsd_Elf64_Nhdr + +// In case they are defined by the NDK version +#define Elf32_auxv_t __bionic_Elf32_auxv_t +#define Elf64_auxv_t __bionic_Elf64_auxv_t + +#define Elf32_Dyn __bionic_Elf32_Dyn +#define Elf64_Dyn __bionic_Elf64_Dyn + +#include_next + +#undef Elf32_Nhdr +#undef Elf64_Nhdr + +typedef struct { + Elf32_Word n_namesz; + Elf32_Word n_descsz; + Elf32_Word n_type; +} Elf32_Nhdr; + +typedef struct { + Elf64_Word n_namesz; + Elf64_Word n_descsz; + Elf64_Word n_type; +} Elf64_Nhdr; + +#undef Elf32_auxv_t +#undef Elf64_auxv_t + +typedef struct { + uint32_t a_type; + union { + uint32_t a_val; + } a_un; +} Elf32_auxv_t; + +typedef struct { + uint64_t a_type; + union { + uint64_t a_val; + } a_un; +} Elf64_auxv_t; + +#undef Elf32_Dyn +#undef Elf64_Dyn + +typedef struct { + Elf32_Sword d_tag; + union { + Elf32_Word d_val; + Elf32_Addr d_ptr; + } d_un; +} Elf32_Dyn; + +typedef struct { + Elf64_Sxword d_tag; + union { + Elf64_Xword d_val; + Elf64_Addr d_ptr; + } d_un; +} Elf64_Dyn; + + +// __WORDSIZE is GLibc-specific and used by Google Breakpad on Linux. +// All Android platforms are 32-bit for now. +#ifndef __WORDSIZE +#define __WORDSIZE 32 +#endif + +// The Android headers don't always define this constant. +#ifndef EM_X86_64 +#define EM_X86_64 62 +#endif + +#ifndef EM_PPC64 +#define EM_PPC64 21 +#endif + +#ifndef EM_S390 +#define EM_S390 22 +#endif + +#if !defined(AT_SYSINFO_EHDR) +#define AT_SYSINFO_EHDR 33 +#endif + +#if !defined(NT_PRSTATUS) +#define NT_PRSTATUS 1 +#endif + +#if !defined(NT_PRPSINFO) +#define NT_PRPSINFO 3 +#endif + +#if !defined(NT_AUXV) +#define NT_AUXV 6 +#endif + +#if !defined(NT_PRXFPREG) +#define NT_PRXFPREG 0x46e62b7f +#endif + +#if !defined(NT_FPREGSET) +#define NT_FPREGSET 2 +#endif + +#ifdef __cplusplus +} // extern "C" +#endif // __cplusplus + +#endif // GOOGLE_BREAKPAD_COMMON_ANDROID_INCLUDE_ELF_H diff --git a/toolkit/crashreporter/gonk-include/link.h b/toolkit/crashreporter/gonk-include/link.h new file mode 100644 index 000000000000..6f3c182805eb --- /dev/null +++ b/toolkit/crashreporter/gonk-include/link.h @@ -0,0 +1,67 @@ +// Copyright (c) 2012, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifndef GOOGLE_BREAKPAD_ANDROID_INCLUDE_LINK_H +#define GOOGLE_BREAKPAD_ANDROID_INCLUDE_LINK_H + +/* Android doesn't provide . Provide custom version here */ +#include + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +#define ElfW(type) _ElfW (Elf, ELFSIZE, type) +#define _ElfW(e,w,t) _ElfW_1 (e, w, _##t) +#define _ElfW_1(e,w,t) e##w##t + +struct r_debug { + int r_version; + struct link_map* r_map; + ElfW(Addr) r_brk; + enum { + RT_CONSISTENT, + RT_ADD, + RT_DELETE } r_state; + ElfW(Addr) r_ldbase; +}; + +struct link_map { + ElfW(Addr) l_addr; + char* l_name; + ElfW(Dyn)* l_ld; + struct link_map* l_next; + struct link_map* l_prev; +}; + +#ifdef __cplusplus +} // extern "C" +#endif // __cplusplus + +#endif /* GOOGLE_BREAKPAD_ANDROID_INCLUDE_LINK_H */ diff --git a/toolkit/crashreporter/gonk-include/stab.h b/toolkit/crashreporter/gonk-include/stab.h new file mode 100644 index 000000000000..cd92902151a0 --- /dev/null +++ b/toolkit/crashreporter/gonk-include/stab.h @@ -0,0 +1,100 @@ +// Copyright (c) 2012, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifndef GOOGLE_BREAKPAD_COMMON_ANDROID_INCLUDE_STAB_H +#define GOOGLE_BREAKPAD_COMMON_ANDROID_INCLUDE_STAB_H + +#include + +#ifdef __BIONIC_HAVE_STAB_H +#include +#else + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +#define _STAB_CODE_LIST \ + _STAB_CODE_DEF(UNDF,0x00) \ + _STAB_CODE_DEF(GSYM,0x20) \ + _STAB_CODE_DEF(FNAME,0x22) \ + _STAB_CODE_DEF(FUN,0x24) \ + _STAB_CODE_DEF(STSYM,0x26) \ + _STAB_CODE_DEF(LCSYM,0x28) \ + _STAB_CODE_DEF(MAIN,0x2a) \ + _STAB_CODE_DEF(PC,0x30) \ + _STAB_CODE_DEF(NSYMS,0x32) \ + _STAB_CODE_DEF(NOMAP,0x34) \ + _STAB_CODE_DEF(OBJ,0x38) \ + _STAB_CODE_DEF(OPT,0x3c) \ + _STAB_CODE_DEF(RSYM,0x40) \ + _STAB_CODE_DEF(M2C,0x42) \ + _STAB_CODE_DEF(SLINE,0x44) \ + _STAB_CODE_DEF(DSLINE,0x46) \ + _STAB_CODE_DEF(BSLINE,0x48) \ + _STAB_CODE_DEF(BROWS,0x48) \ + _STAB_CODE_DEF(DEFD,0x4a) \ + _STAB_CODE_DEF(EHDECL,0x50) \ + _STAB_CODE_DEF(MOD2,0x50) \ + _STAB_CODE_DEF(CATCH,0x54) \ + _STAB_CODE_DEF(SSYM,0x60) \ + _STAB_CODE_DEF(SO,0x64) \ + _STAB_CODE_DEF(LSYM,0x80) \ + _STAB_CODE_DEF(BINCL,0x82) \ + _STAB_CODE_DEF(SOL,0x84) \ + _STAB_CODE_DEF(PSYM,0xa0) \ + _STAB_CODE_DEF(EINCL,0xa2) \ + _STAB_CODE_DEF(ENTRY,0xa4) \ + _STAB_CODE_DEF(LBRAC,0xc0) \ + _STAB_CODE_DEF(EXCL,0xc2) \ + _STAB_CODE_DEF(SCOPE,0xc4) \ + _STAB_CODE_DEF(RBRAC,0xe0) \ + _STAB_CODE_DEF(BCOMM,0xe2) \ + _STAB_CODE_DEF(ECOMM,0xe4) \ + _STAB_CODE_DEF(ECOML,0xe8) \ + _STAB_CODE_DEF(NBTEXT,0xf0) \ + _STAB_CODE_DEF(NBDATA,0xf2) \ + _STAB_CODE_DEF(NBBSS,0xf4) \ + _STAB_CODE_DEF(NBSTS,0xf6) \ + _STAB_CODE_DEF(NBLCS,0xf8) \ + _STAB_CODE_DEF(LENG,0xfe) + +enum __stab_debug_code { +#define _STAB_CODE_DEF(x,y) N_##x = y, +_STAB_CODE_LIST +#undef _STAB_CODE_DEF +}; + +#ifdef __cplusplus +} // extern "C" +#endif // __cplusplus + +#endif // __BIONIC_HAVE_STAB_H + +#endif // GOOGLE_BREAKPAD_COMMON_ANDROID_INCLUDE_STAB_H diff --git a/toolkit/crashreporter/gonk-include/sys/procfs.h b/toolkit/crashreporter/gonk-include/sys/procfs.h new file mode 100644 index 000000000000..9cfdd01c7e2b --- /dev/null +++ b/toolkit/crashreporter/gonk-include/sys/procfs.h @@ -0,0 +1,113 @@ +// Copyright (c) 2012, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifndef GOOGLE_BREAKPAD_COMMON_ANDROID_SYS_PROCFS_H +#define GOOGLE_BREAKPAD_COMMON_ANDROID_SYS_PROCFS_H + +#ifdef __BIONIC_HAVE_SYS_PROCFS_H + +#include_next + +#else + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +#ifdef __x86_64__ +typedef unsigned long long elf_greg_t; +#else +typedef unsigned long elf_greg_t; +#endif + +#ifdef __arm__ +#define ELF_NGREG (sizeof(struct user_regs) / sizeof(elf_greg_t)) +#else +#define ELF_NGREG (sizeof(struct user_regs_struct) / sizeof(elf_greg_t)) +#endif + +typedef elf_greg_t elf_gregset_t[ELF_NGREG]; + +struct elf_siginfo { + int si_signo; + int si_code; + int si_errno; +}; + +struct elf_prstatus { + struct elf_siginfo pr_info; + short pr_cursig; + unsigned long pr_sigpend; + unsigned long pr_sighold; + pid_t pr_pid; + pid_t pr_ppid; + pid_t pr_pgrp; + pid_t pd_sid; + struct timeval pr_utime; + struct timeval pr_stime; + struct timeval pr_cutime; + struct timeval pr_cstime; + elf_gregset_t pr_reg; + int pr_fpvalid; +}; + +#define ELF_PRARGSZ 80 + +struct elf_prpsinfo { + char pr_state; + char pr_sname; + char pr_zomb; + char pr_nice; + unsigned long pr_flags; +#ifdef __x86_64__ + unsigned int pr_uid; + unsigned int pr_gid; +#else + unsigned short pr_uid; + unsigned short pr_gid; +#endif + int pr_pid; + int pr_ppid; + int pr_pgrp; + int pr_sid; + char pr_fname[16]; + char pr_psargs[ELF_PRARGSZ]; +}; + +#ifdef __cplusplus +} // extern "C" +#endif // __cplusplus + +#endif // __BIONIC_HAVE_SYS_PROCFS_H + +#endif // GOOGLE_BREAKPAD_COMMON_ANDROID_SYS_PROCFS_H diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/logging_striptest10.cc b/toolkit/crashreporter/gonk-include/sys/signal.h similarity index 86% rename from toolkit/crashreporter/google-breakpad/src/third_party/glog/src/logging_striptest10.cc rename to toolkit/crashreporter/gonk-include/sys/signal.h index f6e1078f39a2..20c81e93796e 100644 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/logging_striptest10.cc +++ b/toolkit/crashreporter/gonk-include/sys/signal.h @@ -1,4 +1,4 @@ -// Copyright (c) 2007, Google Inc. +// Copyright (c) 2012, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -26,10 +26,10 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: Sergey Ioffe -#define GOOGLE_STRIP_LOG 10 +#ifndef GOOGLE_BREAKPAD_COMMON_ANDROID_INCLUDE_SYS_SIGNAL_H +#define GOOGLE_BREAKPAD_COMMON_ANDROID_INCLUDE_SYS_SIGNAL_H -// Include the actual test. -#include "logging_striptest_main.cc" +#include + +#endif // GOOGLE_BREAKPAD_COMMON_ANDROID_INCLUDE_SYS_SIGNAL_H diff --git a/toolkit/crashreporter/google-breakpad/src/common/android/include/sys/stat.h b/toolkit/crashreporter/gonk-include/sys/stat.h similarity index 100% rename from toolkit/crashreporter/google-breakpad/src/common/android/include/sys/stat.h rename to toolkit/crashreporter/gonk-include/sys/stat.h diff --git a/toolkit/crashreporter/google-breakpad/src/common/android/include/sys/ucontext.h b/toolkit/crashreporter/gonk-include/sys/ucontext.h similarity index 100% rename from toolkit/crashreporter/google-breakpad/src/common/android/include/sys/ucontext.h rename to toolkit/crashreporter/gonk-include/sys/ucontext.h diff --git a/toolkit/crashreporter/gonk-include/sys/user.h b/toolkit/crashreporter/gonk-include/sys/user.h new file mode 100644 index 000000000000..d13e5f6eb473 --- /dev/null +++ b/toolkit/crashreporter/gonk-include/sys/user.h @@ -0,0 +1,134 @@ +// Copyright (c) 2012, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifndef GOOGLE_BREAKPAD_COMMON_ANDROID_INCLUDE_SYS_USER_H +#define GOOGLE_BREAKPAD_COMMON_ANDROID_INCLUDE_SYS_USER_H + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +// These types are used with ptrace(), more specifically with +// PTRACE_GETREGS, PTRACE_GETFPREGS and PTRACE_GETVFPREGS respectively. +// +// They are also defined, sometimes with different names, in +// + +#if defined(__arm__) + +#define _ARM_USER_H 1 // Prevent conflicts + +// Note: on ARM, GLibc uses user_regs instead of user_regs_struct. +struct user_regs { + // Note: Entries 0-15 match r0..r15 + // Entry 16 is used to store the CPSR register. + // Entry 17 is used to store the "orig_r0" value. + unsigned long int uregs[18]; +}; + +// Same here: user_fpregs instead of user_fpregs_struct. +struct user_fpregs { + struct fp_reg { + unsigned int sign1:1; + unsigned int unused:15; + unsigned int sign2:1; + unsigned int exponent:14; + unsigned int j:1; + unsigned int mantissa1:31; + unsigned int mantissa0:32; + } fpregs[8]; + unsigned int fpsr:32; + unsigned int fpcr:32; + unsigned char ftype[8]; + unsigned int init_flag; +}; + +// GLibc doesn't define this one in though. +struct user_vfpregs { + unsigned long long fpregs[32]; + unsigned long fpscr; +}; + +#elif defined(__i386__) + +#define _I386_USER_H 1 // Prevent conflicts + +// GLibc-compatible definitions +struct user_regs_struct { + long ebx, ecx, edx, esi, edi, ebp, eax; + long xds, xes, xfs, xgs, orig_eax; + long eip, xcs, eflags, esp, xss; +}; + +struct user_fpregs_struct { + long cwd, swd, twd, fip, fcs, foo, fos; + long st_space[20]; +}; + +struct user_fpxregs_struct { + unsigned short cwd, swd, twd, fop; + long fip, fcs, foo, fos, mxcsr, reserved; + long st_space[32]; + long xmm_space[32]; + long padding[56]; +}; + +struct user { + struct user_regs_struct regs; + int u_fpvalid; + struct user_fpregs_struct i387; + unsigned long u_tsize; + unsigned long u_dsize; + unsigned long u_ssize; + unsigned long start_code; + unsigned long start_stack; + long signal; + int reserved; + struct user_regs_struct* u_ar0; + struct user_fpregs_struct* u_fpstate; + unsigned long magic; + char u_comm [32]; + int u_debugreg [8]; +}; + + +#elif defined(__mips__) + +// TODO: Provide some useful definitions here, once the rest of Breakpad +// requires them. + +#else +# error "Unsupported Android CPU ABI" +#endif + +#ifdef __cplusplus +} // extern "C" +#endif // __cplusplus + +#endif // GOOGLE_BREAKPAD_COMMON_ANDROID_INCLUDE_SYS_USER_H diff --git a/toolkit/crashreporter/gonk-include/ucontext.h b/toolkit/crashreporter/gonk-include/ucontext.h new file mode 100644 index 000000000000..cbaba6527bbd --- /dev/null +++ b/toolkit/crashreporter/gonk-include/ucontext.h @@ -0,0 +1,55 @@ +// Copyright (c) 2012, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifndef GOOGLE_BREAKPAD_COMMON_ANDROID_INCLUDE_UCONTEXT_H +#define GOOGLE_BREAKPAD_COMMON_ANDROID_INCLUDE_UCONTEXT_H + +#include +#include + +#ifdef __BIONIC_HAVE_UCONTEXT_H +# include_next +#else +# include +#endif // __BIONIC_UCONTEXT_H + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +// Provided by src/android/common/breakpad_getcontext.S +int breakpad_getcontext(ucontext_t* ucp); + +#define getcontext(x) breakpad_getcontext(x) + +#ifdef __cplusplus +} // extern "C" +#endif // __cplusplus + +#endif // GOOGLE_BREAKPAD_COMMON_ANDROID_INCLUDE_UCONTEXT_H diff --git a/toolkit/crashreporter/google-breakpad/.gitignore b/toolkit/crashreporter/google-breakpad/.gitignore new file mode 100644 index 000000000000..eaac5da89f15 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/.gitignore @@ -0,0 +1,81 @@ +# Copyright 2014 Google Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# Ignore other VCSs. +.svn/ + +# Ignore common compiled artifacts. +*~ +*.o +lib*.a +/breakpad.pc +/breakpad-client.pc +/src/client/linux/linux_client_unittest_shlib +/src/client/linux/linux_dumper_unittest_helper +/src/processor/microdump_stackwalk +/src/processor/minidump_dump +/src/processor/minidump_stackwalk +/src/tools/linux/core2md/core2md +/src/tools/linux/dump_syms/dump_syms +/src/tools/linux/md2core/minidump-2-core +/src/tools/linux/symupload/minidump_upload +/src/tools/linux/symupload/sym_upload + +# Ignore autotools generated artifacts. +.deps +.dirstamp +autom4te.cache/ +/config.cache +config.h +/config.log +/config.status +/Makefile +stamp-h1 + +# Ignore GYP generated Visual Studio artifacts. +*.filters +*.sdf +*.sln +*.suo +*.vcproj +*.vcxproj + +# Ignore GYP generated Makefiles +src/Makefile +*.Makefile +*.target.mk + +# Ignore compiled Python files. +*.pyc + +# Ignore directories gclient syncs. +src/testing +src/third_party/glog +src/third_party/lss +src/third_party/protobuf +src/tools/gyp diff --git a/toolkit/crashreporter/google-breakpad/DEPS b/toolkit/crashreporter/google-breakpad/DEPS index 33f7b659467f..1bc31a8a528f 100644 --- a/toolkit/crashreporter/google-breakpad/DEPS +++ b/toolkit/crashreporter/google-breakpad/DEPS @@ -1,5 +1,4 @@ -# Copyright (c) 2010, Google Inc. -# All rights reserved. +# Copyright 2010 Google Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are @@ -27,18 +26,42 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# We only use this file to ease the steps of generating projects after -# syncing, if we use gclient. All dependencies are svn:externals instead. -# If you're not using gclient, you need to run the gyp python script to -# generate the projects. -# This can be done by the following command (assuming current directory): -# src\tools\gyp\gyp.bat src\client\windows\breakpad_client.gyp +# This is used to mimic the svn:externals mechanism for gclient (both Git and +# SVN) based checkouts of Breakpad. As such, its use is entirely optional. If +# using a manually managed SVN checkout as opposed to a gclient managed checkout +# you can still use the hooks mechanism for generating project files by calling +# 'gclient runhooks' rather than 'gclient sync'. + +deps = { + # Logging code. + "src/src/third_party/glog": + "http://google-glog.googlecode.com/svn/trunk@97", + + # Testing libraries and utilities. + "src/src/testing": "http://googlemock.googlecode.com/svn/trunk@408", + "src/src/testing/gtest": "http://googletest.googlecode.com/svn/trunk@615", + + # Protobuf. + "src/src/third_party/protobuf/protobuf": + "http://protobuf.googlecode.com/svn/trunk@407", + + # GYP project generator. + "src/src/tools/gyp": "http://gyp.googlecode.com/svn/trunk@1886", + + # Linux syscall support. + "src/src/third_party/lss": + "https://chromium.googlesource.com/linux-syscall-support/" + + "@9292030109847793f7a6689adac1ddafb412fe14" +} + hooks = [ { - # A change to a .gyp, .gypi, or to GYP itself should run the generator. + # TODO(chrisha): Fix the GYP files so that they work without + # --no-circular-check. "pattern": ".", "action": ["python", - "src/src/tools/gyp/gyp", + "src/src/tools/gyp/gyp_main.py", + "--no-circular-check", "src/src/client/windows/breakpad_client.gyp"], }, ] diff --git a/toolkit/crashreporter/google-breakpad/GIT-INFO b/toolkit/crashreporter/google-breakpad/GIT-INFO new file mode 100644 index 000000000000..1b8f92b42f29 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/GIT-INFO @@ -0,0 +1 @@ +c53ed143108948eb7e2d7ee77dc8c0d92050ce7c diff --git a/toolkit/crashreporter/google-breakpad/INSTALL b/toolkit/crashreporter/google-breakpad/INSTALL index 5458714e1e2c..007e9396d0a2 100644 --- a/toolkit/crashreporter/google-breakpad/INSTALL +++ b/toolkit/crashreporter/google-breakpad/INSTALL @@ -1,19 +1,25 @@ Installation Instructions ************************* -Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, -2006 Free Software Foundation, Inc. +Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation, +Inc. -This file is free documentation; the Free Software Foundation gives -unlimited permission to copy, distribute and modify it. + Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. This file is offered as-is, +without warranty of any kind. Basic Installation ================== -Briefly, the shell commands `./configure; make; make install' should + Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for -instructions specific to this package. +instructions specific to this package. Some packages provide this +`INSTALL' file but do not implement all of the features documented +below. The lack of an optional feature in a given package is not +necessarily a bug. More recommendations for GNU packages can be found +in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses @@ -42,7 +48,7 @@ may remove or edit it. you want to change it or regenerate `configure' using a newer version of `autoconf'. -The simplest way to compile this package is: + The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. @@ -53,12 +59,22 @@ The simplest way to compile this package is: 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with - the package. + the package, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and - documentation. + documentation. When installing into a prefix owned by root, it is + recommended that the package be configured and built as a regular + user, and only the `make install' phase executed with root + privileges. - 5. You can remove the program binaries and object files from the + 5. Optionally, type `make installcheck' to repeat any self-tests, but + this time using the binaries in their final installed location. + This target does not install anything. Running this target as a + regular user, particularly if the prior `make install' required + root privileges, verifies that the installation completed + correctly. + + 6. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is @@ -67,12 +83,22 @@ The simplest way to compile this package is: all sorts of other programs in order to regenerate files that came with the distribution. + 7. Often, you can also type `make uninstall' to remove the installed + files again. In practice, not all packages have tested that + uninstallation works correctly, even though it is required by the + GNU Coding Standards. + + 8. Some packages, particularly those that use Automake, provide `make + distcheck', which can by used by developers to test that all other + targets like `make install' and `make uninstall' work correctly. + This target is generally not run by end users. + Compilers and Options ===================== -Some systems require unusual options for compilation or linking that the -`configure' script does not know about. Run `./configure --help' for -details on some of the pertinent environment variables. + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here @@ -85,25 +111,41 @@ is an example: Compiling For Multiple Architectures ==================================== -You can compile the package for more than one kind of computer at the + You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. +source code in the directory that `configure' is in and in `..'. This +is known as a "VPATH" build. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. + On MacOS X 10.5 and later systems, you can create libraries and +executables that work on multiple system types--known as "fat" or +"universal" binaries--by specifying multiple `-arch' options to the +compiler but only a single `-arch' option to the preprocessor. Like +this: + + ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CPP="gcc -E" CXXCPP="g++ -E" + + This is not guaranteed to produce working output in all cases, you +may have to build one architecture at a time and combine the results +using the `lipo' tool if you have problems. + Installation Names ================== -By default, `make install' installs the package's commands under + By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving -`configure' the option `--prefix=PREFIX'. +`configure' the option `--prefix=PREFIX', where PREFIX must be an +absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you @@ -114,16 +156,47 @@ Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories -you can set and what kinds of files go in them. +you can set and what kinds of files go in them. In general, the +default for these options is expressed in terms of `${prefix}', so that +specifying just `--prefix' will affect all of the other directory +specifications that were not explicitly provided. + + The most portable way to affect installation locations is to pass the +correct locations to `configure'; however, many packages provide one or +both of the following shortcuts of passing variable assignments to the +`make install' command line to change installation locations without +having to reconfigure or recompile. + + The first method involves providing an override variable for each +affected directory. For example, `make install +prefix=/alternate/directory' will choose an alternate location for all +directory configuration variables that were expressed in terms of +`${prefix}'. Any directories that were specified during `configure', +but not in terms of `${prefix}', must each be overridden at install +time for the entire installation to be relocated. The approach of +makefile variable overrides for each directory variable is required by +the GNU Coding Standards, and ideally causes no recompilation. +However, some platforms have known limitations with the semantics of +shared libraries that end up requiring recompilation when using this +method, particularly noticeable in packages that use GNU Libtool. + + The second method involves providing the `DESTDIR' variable. For +example, `make install DESTDIR=/alternate/directory' will prepend +`/alternate/directory' before all installation names. The approach of +`DESTDIR' overrides is not required by the GNU Coding Standards, and +does not work on platforms that have drive letters. On the other hand, +it does better at avoiding recompilation issues, and works well even +when some directory options were not specified in terms of `${prefix}' +at `configure' time. + +Optional Features +================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. -Optional Features -================= - -Some packages pay attention to `--enable-FEATURE' options to + Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The @@ -135,14 +208,58 @@ find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. + Some packages offer the ability to configure how verbose the +execution of `make' will be. For these packages, running `./configure +--enable-silent-rules' sets the default to minimal output, which can be +overridden with `make V=1'; while running `./configure +--disable-silent-rules' sets the default to verbose, which can be +overridden with `make V=0'. + +Particular systems +================== + + On HP-UX, the default C compiler is not ANSI C compatible. If GNU +CC is not installed, it is recommended to use the following options in +order to use an ANSI C compiler: + + ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" + +and if that doesn't work, install pre-built binaries of GCC for HP-UX. + + HP-UX `make' updates targets which have the same time stamps as +their prerequisites, which makes it generally unusable when shipped +generated files such as `configure' are involved. Use GNU `make' +instead. + + On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot +parse its `' header file. The option `-nodtk' can be used as +a workaround. If GNU CC is not installed, it is therefore recommended +to try + + ./configure CC="cc" + +and if that doesn't work, try + + ./configure CC="cc -nodtk" + + On Solaris, don't put `/usr/ucb' early in your `PATH'. This +directory contains several dysfunctional programs; working variants of +these programs are available in `/usr/bin'. So, if you need `/usr/ucb' +in your `PATH', put it _after_ `/usr/bin'. + + On Haiku, software installed for all users goes in `/boot/common', +not `/usr/local'. It is recommended to use the following options: + + ./configure --prefix=/boot/common + Specifying the System Type ========================== -There may be some features `configure' cannot figure out automatically, -but needs to determine by the type of machine the package will run on. -Usually, assuming the package is built to be run on the _same_ -architectures, `configure' can figure that out, but if it prints a -message saying it cannot guess the machine type, give it the + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: @@ -150,7 +267,8 @@ type, such as `sun4', or a canonical name which has the form: where SYSTEM can have one of these forms: - OS KERNEL-OS + OS + KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't @@ -168,9 +286,9 @@ eventually be run) with `--host=TYPE'. Sharing Defaults ================ -If you want to set default values for `configure' scripts to share, you -can create a site shell script called `config.site' that gives default -values for variables like `CC', `cache_file', and `prefix'. + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. @@ -179,7 +297,7 @@ A warning: not all `configure' scripts look for a site script. Defining Variables ================== -Variables not defined in a site shell script can be set in the + Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set @@ -191,18 +309,27 @@ causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to -an Autoconf bug. Until the bug is fixed you can use this workaround: +an Autoconf limitation. Until the limitation is lifted, you can use +this workaround: - CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash + CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== -`configure' recognizes the following options to control how it operates. + `configure' recognizes the following options to control how it +operates. `--help' `-h' - Print a summary of the options to `configure', and exit. + Print a summary of all of the options to `configure', and exit. + +`--help=short' +`--help=recursive' + Print a summary of the options unique to this package's + `configure', and exit. The `short' variant lists options used + only in the top level, while the `recursive' variant lists options + also present in any nested packages. `--version' `-V' @@ -229,6 +356,15 @@ an Autoconf bug. Until the bug is fixed you can use this workaround: Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. +`--prefix=DIR' + Use DIR as the installation prefix. *note Installation Names:: + for more details, including other options available for fine-tuning + the installation locations. + +`--no-create' +`-n' + Run the configure checks, but stop before creating any output + files. + `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. - diff --git a/toolkit/crashreporter/google-breakpad/COPYING b/toolkit/crashreporter/google-breakpad/LICENSE similarity index 63% rename from toolkit/crashreporter/google-breakpad/COPYING rename to toolkit/crashreporter/google-breakpad/LICENSE index d15b0c24134d..95207bdf6f94 100644 --- a/toolkit/crashreporter/google-breakpad/COPYING +++ b/toolkit/crashreporter/google-breakpad/LICENSE @@ -26,3 +26,25 @@ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------------------------------------------------------------- + +Copyright 2001-2004 Unicode, Inc. + +Disclaimer + +This source code is provided as is by Unicode, Inc. No claims are +made as to fitness for any particular purpose. No warranties of any +kind are expressed or implied. The recipient agrees to determine +applicability of information provided. If this file has been +purchased on magnetic or optical media from Unicode, Inc., the +sole remedy for any claim will be exchange of defective media +within 90 days of receipt. + +Limitations on Rights to Redistribute This Code + +Unicode, Inc. hereby grants the right to freely use the information +supplied in this file in the creation of products supporting the +Unicode Standard, and to make copies of this file in any form +for internal or external distribution as long as this notice +remains attached. diff --git a/toolkit/crashreporter/google-breakpad/Makefile.am b/toolkit/crashreporter/google-breakpad/Makefile.am index 8649816f79cd..42386bee6739 100644 --- a/toolkit/crashreporter/google-breakpad/Makefile.am +++ b/toolkit/crashreporter/google-breakpad/Makefile.am @@ -64,17 +64,50 @@ endif # Specify include paths for ac macros ACLOCAL_AMFLAGS = -I m4 +# License file is called LICENSE not COPYING +AUTOMAKE_OPTIONS = foreign + ## Documentation docdir = $(prefix)/share/doc/$(PACKAGE)-$(VERSION) dist_doc_DATA = \ AUTHORS \ - COPYING \ ChangeLog \ INSTALL \ + LICENSE \ NEWS \ - README + README.md +## Headers +if LINUX_HOST +includeclhdir = $(includedir)/$(PACKAGE)/client/linux/handler +includeclh_HEADERS = $(top_srcdir)/src/client/linux/handler/*.h + +includeclmdir = $(includedir)/$(PACKAGE)/client/linux/minidump_writer +includeclm_HEADERS = $(top_srcdir)/src/client/linux/minidump_writer/*.h + +includeclcdir = $(includedir)/$(PACKAGE)/client/linux/crash_generation +includeclc_HEADERS = $(top_srcdir)/src/client/linux/crash_generation/*.h + +includelssdir = $(includedir)/$(PACKAGE)/third_party/lss +includelss_HEADERS = $(top_srcdir)/src/third_party/lss/*.h + +includecldir = $(includedir)/$(PACKAGE)/common/linux +includecl_HEADERS = $(top_srcdir)/src/common/linux/*.h +endif + +includegbcdir = $(includedir)/$(PACKAGE)/google_breakpad/common +includegbc_HEADERS = $(top_srcdir)/src/google_breakpad/common/*.h + +includecdir = $(includedir)/$(PACKAGE)/common +includec_HEADERS = $(top_srcdir)/src/common/*.h + +includepdir = $(includedir)/$(PACKAGE)/processor +includep_HEADERS = $(top_srcdir)/src/processor/*.h + +## pkgconfig files +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = ## Libraries noinst_LIBRARIES = @@ -84,18 +117,23 @@ check_PROGRAMS = if !DISABLE_PROCESSOR lib_LIBRARIES += src/libbreakpad.a +pkgconfig_DATA += breakpad.pc noinst_LIBRARIES += src/third_party/libdisasm/libdisasm.a endif if LINUX_HOST lib_LIBRARIES += src/client/linux/libbreakpad_client.a +pkgconfig_DATA += breakpad-client.pc src_client_linux_libbreakpad_client_a_SOURCES = \ src/client/linux/crash_generation/crash_generation_client.cc \ src/client/linux/crash_generation/crash_generation_server.cc \ + src/client/linux/dump_writer_common/thread_info.cc \ + src/client/linux/dump_writer_common/ucontext_reader.cc \ src/client/linux/handler/exception_handler.cc \ src/client/linux/handler/minidump_descriptor.cc \ src/client/linux/log/log.cc \ + src/client/linux/microdump_writer/microdump_writer.cc \ src/client/linux/minidump_writer/linux_dumper.cc \ src/client/linux/minidump_writer/linux_ptrace_dumper.cc \ src/client/linux/minidump_writer/minidump_writer.cc \ @@ -124,12 +162,18 @@ src_libbreakpad_a_SOURCES = \ src/google_breakpad/processor/call_stack.h \ src/google_breakpad/processor/code_module.h \ src/google_breakpad/processor/code_modules.h \ + src/google_breakpad/processor/dump_context.h \ + src/google_breakpad/processor/dump_object.h \ src/google_breakpad/processor/exploitability.h \ src/google_breakpad/processor/fast_source_line_resolver.h \ src/google_breakpad/processor/memory_region.h \ + src/google_breakpad/processor/microdump.h \ + src/google_breakpad/processor/microdump_processor.h \ src/google_breakpad/processor/minidump.h \ src/google_breakpad/processor/minidump_processor.h \ + src/google_breakpad/processor/process_result.h \ src/google_breakpad/processor/process_state.h \ + src/google_breakpad/processor/proc_maps_linux.h \ src/google_breakpad/processor/source_line_resolver_base.h \ src/google_breakpad/processor/source_line_resolver_interface.h \ src/google_breakpad/processor/stack_frame.h \ @@ -145,8 +189,6 @@ src_libbreakpad_a_SOURCES = \ src/processor/basic_code_modules.h \ src/processor/basic_source_line_resolver_types.h \ src/processor/basic_source_line_resolver.cc \ - src/processor/binarystream.h \ - src/processor/binarystream.cc \ src/processor/call_stack.cc \ src/processor/cfi_frame_info.cc \ src/processor/cfi_frame_info.h \ @@ -154,7 +196,11 @@ src_libbreakpad_a_SOURCES = \ src/processor/contained_range_map.h \ src/processor/disassembler_x86.h \ src/processor/disassembler_x86.cc \ + src/processor/dump_context.cc \ + src/processor/dump_object.cc \ src/processor/exploitability.cc \ + src/processor/exploitability_linux.h \ + src/processor/exploitability_linux.cc \ src/processor/exploitability_win.h \ src/processor/exploitability_win.cc \ src/processor/fast_source_line_resolver_types.h \ @@ -164,6 +210,8 @@ src_libbreakpad_a_SOURCES = \ src/processor/logging.cc \ src/processor/map_serializers-inl.h \ src/processor/map_serializers.h \ + src/processor/microdump.cc \ + src/processor/microdump_processor.cc \ src/processor/minidump.cc \ src/processor/minidump_processor.cc \ src/processor/module_comparer.cc \ @@ -176,6 +224,7 @@ src_libbreakpad_a_SOURCES = \ src/processor/postfix_evaluator-inl.h \ src/processor/postfix_evaluator.h \ src/processor/process_state.cc \ + src/processor/proc_maps_linux.cc \ src/processor/range_map-inl.h \ src/processor/range_map.h \ src/processor/simple_serializer-inl.h \ @@ -185,14 +234,23 @@ src_libbreakpad_a_SOURCES = \ src/processor/windows_frame_info.h \ src/processor/source_line_resolver_base_types.h \ src/processor/source_line_resolver_base.cc \ + src/processor/stack_frame_cpu.cc \ src/processor/stack_frame_symbolizer.cc \ src/processor/stackwalker.cc \ src/processor/stackwalker_amd64.cc \ src/processor/stackwalker_amd64.h \ src/processor/stackwalker_arm.cc \ src/processor/stackwalker_arm.h \ + src/processor/stackwalker_arm64.cc \ + src/processor/stackwalker_arm64.h \ + src/processor/stackwalker_address_list.cc \ + src/processor/stackwalker_address_list.h \ + src/processor/stackwalker_mips.cc \ + src/processor/stackwalker_mips.h \ src/processor/stackwalker_ppc.cc \ src/processor/stackwalker_ppc.h \ + src/processor/stackwalker_ppc64.cc \ + src/processor/stackwalker_ppc64.h \ src/processor/stackwalker_sparc.cc \ src/processor/stackwalker_sparc.h \ src/processor/stackwalker_x86.cc \ @@ -207,6 +265,8 @@ src_libbreakpad_a_SOURCES = \ src/processor/static_map.h \ src/processor/static_range_map-inl.h \ src/processor/static_range_map.h \ + src/processor/symbolic_constants_win.cc \ + src/processor/symbolic_constants_win.h \ src/processor/tokenize.cc \ src/processor/tokenize.h @@ -242,6 +302,7 @@ src_third_party_libdisasm_libdisasm_a_SOURCES = \ ## Programs bin_PROGRAMS += \ + src/processor/microdump_stackwalk \ src/processor/minidump_dump \ src/processor/minidump_stackwalk endif !DISABLE_PROCESSOR @@ -256,7 +317,8 @@ bin_PROGRAMS += \ src/tools/linux/dump_syms/dump_syms \ src/tools/linux/md2core/minidump-2-core \ src/tools/linux/symupload/minidump_upload \ - src/tools/linux/symupload/sym_upload + src/tools/linux/symupload/sym_upload \ + src/tools/mac/dump_syms/dump_syms endif endif LINUX_HOST @@ -266,7 +328,6 @@ if !DISABLE_PROCESSOR check_PROGRAMS += \ src/common/test_assembler_unittest \ src/processor/address_map_unittest \ - src/processor/binarystream_unittest \ src/processor/basic_source_line_resolver_unittest \ src/processor/cfi_frame_info_unittest \ src/processor/contained_range_map_unittest \ @@ -274,6 +335,7 @@ check_PROGRAMS += \ src/processor/exploitability_unittest \ src/processor/fast_source_line_resolver_unittest \ src/processor/map_serializers_unittest \ + src/processor/microdump_processor_unittest \ src/processor/minidump_processor_unittest \ src/processor/minidump_unittest \ src/processor/static_address_map_unittest \ @@ -282,9 +344,13 @@ check_PROGRAMS += \ src/processor/static_range_map_unittest \ src/processor/pathname_stripper_unittest \ src/processor/postfix_evaluator_unittest \ + src/processor/proc_maps_linux_unittest \ src/processor/range_map_unittest \ src/processor/stackwalker_amd64_unittest \ src/processor/stackwalker_arm_unittest \ + src/processor/stackwalker_arm64_unittest \ + src/processor/stackwalker_address_list_unittest \ + src/processor/stackwalker_mips_unittest \ src/processor/stackwalker_x86_unittest \ src/processor/synth_minidump_unittest endif @@ -299,6 +365,7 @@ check_PROGRAMS += \ if !DISABLE_TOOLS check_PROGRAMS += \ src/common/dumper_unittest \ + src/common/mac/macho_reader_unittest \ src/tools/linux/md2core/minidump_2_core_unittest endif endif LINUX_HOST @@ -312,6 +379,8 @@ endif !DISABLE_PROCESSOR if !DISABLE_PROCESSOR check_SCRIPTS = \ + src/processor/microdump_stackwalk_test \ + src/processor/microdump_stackwalk_machine_readable_test \ src/processor/minidump_dump_test \ src/processor/minidump_stackwalk_test \ src/processor/minidump_stackwalk_machine_readable_test @@ -320,28 +389,40 @@ endif TESTS = $(check_PROGRAMS) $(check_SCRIPTS) if ANDROID_HOST -# Wrapper script to run unit test programs on a connected Android device. -TESTS_ENVIRONMENT = $(top_srcdir)/android/test-shell.sh +# Since Autotools 1.2, tests are run through a special "test driver" script. +# Unfortunately, it's not possible anymore to specify an alternative shell to +# run them on connected devices, so use a slightly modified version of the +# driver for Android. +LOG_DRIVER = $(top_srcdir)/android/test-driver else -TESTS_ENVIRONMENT = +# The default Autotools test driver script. +LOG_DRIVER = $(top_srcdir)/autotools/test-driver endif if LINUX_HOST src_client_linux_linux_dumper_unittest_helper_SOURCES = \ src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc -src_client_linux_linux_dumper_unittest_helper_CXXFLAGS=$(PTHREAD_CFLAGS) src_client_linux_linux_dumper_unittest_helper_LDFLAGS=$(PTHREAD_CFLAGS) src_client_linux_linux_dumper_unittest_helper_CC=$(PTHREAD_CC) +if ANDROID_HOST +# On Android PTHREAD_CFLAGS is empty, and adding src/common/android/include +# to the include path is necessary to build this program. +src_client_linux_linux_dumper_unittest_helper_CXXFLAGS=$(AM_CXXFLAGS) +else +src_client_linux_linux_dumper_unittest_helper_CXXFLAGS=$(PTHREAD_CFLAGS) +endif src_client_linux_linux_client_unittest_shlib_SOURCES = \ src/client/linux/handler/exception_handler_unittest.cc \ src/client/linux/minidump_writer/directory_reader_unittest.cc \ + src/client/linux/minidump_writer/cpu_set_unittest.cc \ src/client/linux/minidump_writer/line_reader_unittest.cc \ src/client/linux/minidump_writer/linux_core_dumper.cc \ src/client/linux/minidump_writer/linux_core_dumper_unittest.cc \ src/client/linux/minidump_writer/linux_ptrace_dumper_unittest.cc \ src/client/linux/minidump_writer/minidump_writer_unittest.cc \ src/client/linux/minidump_writer/minidump_writer_unittest_utils.cc \ + src/client/linux/minidump_writer/proc_cpuinfo_reader_unittest.cc \ src/common/linux/elf_core_dump.cc \ src/common/linux/linux_libc_support_unittest.cc \ src/common/linux/tests/crash_generator.cc \ @@ -351,13 +432,20 @@ src_client_linux_linux_client_unittest_shlib_SOURCES = \ src/testing/gtest/src/gtest_main.cc \ src/testing/src/gmock-all.cc \ src/processor/basic_code_modules.cc \ + src/processor/dump_context.cc \ + src/processor/dump_object.cc \ src/processor/logging.cc \ src/processor/minidump.cc \ - src/processor/pathname_stripper.cc + src/processor/pathname_stripper.cc \ + src/processor/proc_maps_linux.cc if ANDROID_HOST src_client_linux_linux_client_unittest_shlib_SOURCES += \ src/common/android/breakpad_getcontext.S endif +if LINUX_HOST +src_client_linux_linux_client_unittest_shlib_SOURCES += \ + src/client/linux/microdump_writer/microdump_writer_unittest.cc +endif src_client_linux_linux_client_unittest_shlib_CPPFLAGS = \ -I$(top_srcdir)/src \ @@ -369,10 +457,13 @@ src_client_linux_linux_client_unittest_shlib_LDFLAGS = \ -shared \ -Wl,-h,linux_client_unittest_shlib src_client_linux_linux_client_unittest_shlib_LDADD = \ + src/client/linux/crash_generation/crash_generation_client.o \ + src/client/linux/dump_writer_common/thread_info.o \ + src/client/linux/dump_writer_common/ucontext_reader.o \ src/client/linux/handler/exception_handler.o \ src/client/linux/handler/minidump_descriptor.o \ src/client/linux/log/log.o \ - src/client/linux/crash_generation/crash_generation_client.o \ + src/client/linux/microdump_writer/microdump_writer.o \ src/client/linux/minidump_writer/linux_dumper.o \ src/client/linux/minidump_writer/linux_ptrace_dumper.o \ src/client/linux/minidump_writer/minidump_writer.o \ @@ -433,6 +524,7 @@ src_tools_linux_dump_syms_dump_syms_SOURCES = \ src/common/dwarf/bytereader.cc \ src/common/dwarf/dwarf2diehandler.cc \ src/common/dwarf/dwarf2reader.cc \ + src/common/linux/crc32.cc \ src/common/linux/dump_symbols.cc \ src/common/linux/elf_symbols_to_module.cc \ src/common/linux/elfutils.cc \ @@ -456,6 +548,30 @@ src_tools_linux_symupload_sym_upload_SOURCES = \ src/tools/linux/symupload/sym_upload.cc src_tools_linux_symupload_sym_upload_LDADD = -ldl +src_tools_mac_dump_syms_dump_syms_SOURCES = \ + src/common/dwarf_cfi_to_module.cc \ + src/common/dwarf_cu_to_module.cc \ + src/common/dwarf_line_to_module.cc \ + src/common/language.cc \ + src/common/md5.cc \ + src/common/module.cc \ + src/common/stabs_reader.cc \ + src/common/stabs_to_module.cc \ + src/common/dwarf/bytereader.cc \ + src/common/dwarf/dwarf2diehandler.cc \ + src/common/dwarf/dwarf2reader.cc \ + src/common/mac/arch_utilities.cc \ + src/common/mac/dump_syms.cc \ + src/common/mac/file_id.cc \ + src/common/mac/macho_id.cc \ + src/common/mac/macho_reader.cc \ + src/common/mac/macho_utilities.cc \ + src/common/mac/macho_walker.cc \ + src/tools/mac/dump_syms/dump_syms_tool.cc +src_tools_mac_dump_syms_dump_syms_CXXFLAGS= \ + -I$(top_srcdir)/src/third_party/mac_headers \ + -DHAVE_MACH_O_NLIST_H + src_common_dumper_unittest_SOURCES = \ src/common/byte_cursor_unittest.cc \ src/common/dwarf_cfi_to_module.cc \ @@ -481,6 +597,7 @@ src_common_dumper_unittest_SOURCES = \ src/common/dwarf/dwarf2reader.cc \ src/common/dwarf/dwarf2reader_cfi_unittest.cc \ src/common/dwarf/dwarf2reader_die_unittest.cc \ + src/common/linux/crc32.cc \ src/common/linux/dump_symbols.cc \ src/common/linux/dump_symbols_unittest.cc \ src/common/linux/elf_core_dump.cc \ @@ -510,6 +627,42 @@ src_common_dumper_unittest_CPPFLAGS = \ -I$(top_srcdir)/src/testing \ $(PTHREAD_CFLAGS) src_common_dumper_unittest_LDADD = $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) + +src_common_mac_macho_reader_unittest_SOURCES = \ + src/common/dwarf_cfi_to_module.cc \ + src/common/dwarf_cu_to_module.cc \ + src/common/dwarf_line_to_module.cc \ + src/common/language.cc \ + src/common/md5.cc \ + src/common/module.cc \ + src/common/stabs_reader.cc \ + src/common/stabs_to_module.cc \ + src/common/test_assembler.cc \ + src/common/dwarf/bytereader.cc \ + src/common/dwarf/cfi_assembler.cc \ + src/common/dwarf/dwarf2diehandler.cc \ + src/common/dwarf/dwarf2reader.cc \ + src/common/mac/arch_utilities.cc \ + src/common/mac/file_id.cc \ + src/common/mac/macho_id.cc \ + src/common/mac/macho_reader.cc \ + src/common/mac/macho_reader_unittest.cc \ + src/common/mac/macho_utilities.cc \ + src/common/mac/macho_walker.cc \ + src/common/tests/file_utils.cc \ + src/testing/gtest/src/gtest-all.cc \ + src/testing/gtest/src/gtest_main.cc \ + src/testing/src/gmock-all.cc +src_common_mac_macho_reader_unittest_CPPFLAGS = \ + -I$(top_srcdir)/src \ + -I$(top_srcdir)/src/testing/include \ + -I$(top_srcdir)/src/testing/gtest/include \ + -I$(top_srcdir)/src/testing/gtest \ + -I$(top_srcdir)/src/testing \ + -I$(top_srcdir)/src/third_party/mac_headers \ + -DHAVE_MACH_O_NLIST_H \ + $(PTHREAD_CFLAGS) +src_common_mac_macho_reader_unittest_LDADD = $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) endif src_tools_linux_md2core_minidump_2_core_unittest_SOURCES = \ @@ -535,20 +688,6 @@ src_processor_address_map_unittest_LDADD = \ src/processor/logging.o \ src/processor/pathname_stripper.o -src_processor_binarystream_unittest_SOURCES = \ - src/processor/binarystream_unittest.cc \ - src/testing/gtest/src/gtest-all.cc \ - src/testing/src/gmock-all.cc -src_processor_binarystream_unittest_CPPFLAGS = \ - -I$(top_srcdir)/src \ - -I$(top_srcdir)/src/testing/include \ - -I$(top_srcdir)/src/testing/gtest/include \ - -I$(top_srcdir)/src/testing/gtest \ - -I$(top_srcdir)/src/testing -src_processor_binarystream_unittest_LDADD = \ - src/processor/binarystream.o \ - $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) - src_processor_basic_source_line_resolver_unittest_SOURCES = \ src/processor/basic_source_line_resolver_unittest.cc \ src/testing/gtest/src/gtest-all.cc \ @@ -607,22 +746,33 @@ src_processor_exploitability_unittest_LDADD = \ src/processor/process_state.o \ src/processor/disassembler_x86.o \ src/processor/exploitability.o \ + src/processor/exploitability_linux.o \ src/processor/exploitability_win.o \ src/processor/basic_code_modules.o \ src/processor/basic_source_line_resolver.o \ src/processor/call_stack.o \ src/processor/cfi_frame_info.o \ + src/processor/dump_context.o \ + src/processor/dump_object.o \ src/processor/logging.o \ src/processor/minidump.o \ src/processor/pathname_stripper.o \ + src/processor/proc_maps_linux.o \ + src/processor/simple_symbol_supplier.o \ src/processor/source_line_resolver_base.o \ + src/processor/stack_frame_cpu.o \ src/processor/stack_frame_symbolizer.o \ src/processor/stackwalker.o \ + src/processor/stackwalker_address_list.o \ src/processor/stackwalker_amd64.o \ src/processor/stackwalker_arm.o \ + src/processor/stackwalker_arm64.o \ + src/processor/stackwalker_mips.o \ src/processor/stackwalker_ppc.o \ + src/processor/stackwalker_ppc64.o \ src/processor/stackwalker_sparc.o \ src/processor/stackwalker_x86.o \ + src/processor/symbolic_constants_win.o \ src/processor/tokenize.o \ src/third_party/libdisasm/libdisasm.a \ $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) @@ -680,6 +830,44 @@ src_processor_map_serializers_unittest_LDADD = \ src/processor/pathname_stripper.o \ $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) +src_processor_microdump_processor_unittest_SOURCES = \ + src/processor/microdump_processor_unittest.cc \ + src/testing/gtest/src/gtest-all.cc \ + src/testing/src/gmock-all.cc +src_processor_microdump_processor_unittest_CPPFLAGS = \ + -I$(top_srcdir)/src \ + -I$(top_srcdir)/src/testing/include \ + -I$(top_srcdir)/src/testing/gtest/include \ + -I$(top_srcdir)/src/testing/gtest \ + -I$(top_srcdir)/src/testing +src_processor_microdump_processor_unittest_LDADD = \ + src/processor/basic_code_modules.o \ + src/processor/basic_source_line_resolver.o \ + src/processor/call_stack.o \ + src/processor/cfi_frame_info.o \ + src/processor/dump_context.o \ + src/processor/dump_object.o \ + src/processor/logging.o \ + src/processor/microdump.o \ + src/processor/microdump_processor.o \ + src/processor/pathname_stripper.o \ + src/processor/process_state.o \ + src/processor/simple_symbol_supplier.o \ + src/processor/source_line_resolver_base.o \ + src/processor/stack_frame_symbolizer.o \ + src/processor/stackwalker.o \ + src/processor/stackwalker_address_list.o \ + src/processor/stackwalker_amd64.o \ + src/processor/stackwalker_arm.o \ + src/processor/stackwalker_arm64.o \ + src/processor/stackwalker_mips.o \ + src/processor/stackwalker_ppc.o \ + src/processor/stackwalker_ppc64.o \ + src/processor/stackwalker_sparc.o \ + src/processor/stackwalker_x86.o \ + src/processor/tokenize.o \ + $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) + src_processor_minidump_processor_unittest_SOURCES = \ src/processor/minidump_processor_unittest.cc \ src/testing/gtest/src/gtest-all.cc \ @@ -696,21 +884,31 @@ src_processor_minidump_processor_unittest_LDADD = \ src/processor/call_stack.o \ src/processor/cfi_frame_info.o \ src/processor/disassembler_x86.o \ + src/processor/dump_context.o \ + src/processor/dump_object.o \ src/processor/exploitability.o \ + src/processor/exploitability_linux.o \ src/processor/exploitability_win.o \ src/processor/logging.o \ src/processor/minidump_processor.o \ src/processor/minidump.o \ src/processor/pathname_stripper.o \ src/processor/process_state.o \ + src/processor/proc_maps_linux.o \ src/processor/source_line_resolver_base.o \ + src/processor/stack_frame_cpu.o \ src/processor/stack_frame_symbolizer.o \ src/processor/stackwalker.o \ + src/processor/stackwalker_address_list.o \ src/processor/stackwalker_amd64.o \ src/processor/stackwalker_arm.o \ + src/processor/stackwalker_arm64.o \ + src/processor/stackwalker_mips.o \ src/processor/stackwalker_ppc.o \ + src/processor/stackwalker_ppc64.o \ src/processor/stackwalker_sparc.o \ src/processor/stackwalker_x86.o \ + src/processor/symbolic_constants_win.o \ src/processor/tokenize.o \ src/third_party/libdisasm/libdisasm.a \ $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) @@ -730,9 +928,30 @@ src_processor_minidump_unittest_CPPFLAGS = \ -I$(top_srcdir)/src/testing src_processor_minidump_unittest_LDADD = \ src/processor/basic_code_modules.o \ + src/processor/dump_context.o \ + src/processor/dump_object.o \ src/processor/logging.o \ src/processor/minidump.o \ src/processor/pathname_stripper.o \ + src/processor/proc_maps_linux.o \ + $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) + +src_processor_proc_maps_linux_unittest_SOURCES = \ + src/processor/proc_maps_linux.cc \ + src/processor/proc_maps_linux_unittest.cc \ + src/testing/gtest/src/gtest-all.cc \ + src/testing/gtest/src/gtest_main.cc \ + src/testing/src/gmock-all.cc +src_processor_proc_maps_linux_unittest_CPPFLAGS = \ + -I$(top_srcdir)/src \ + -I$(top_srcdir)/src/testing/include \ + -I$(top_srcdir)/src/testing/gtest/include \ + -I$(top_srcdir)/src/testing/gtest \ + -I$(top_srcdir)/src/testing +src_processor_proc_maps_linux_unittest_LDADD = \ + src/processor/logging.o \ + src/processor/pathname_stripper.o \ + src/third_party/libdisasm/libdisasm.a \ $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) src_processor_static_address_map_unittest_SOURCES = \ @@ -823,16 +1042,23 @@ src_processor_stackwalker_selftest_LDADD = \ src/processor/call_stack.o \ src/processor/disassembler_x86.o \ src/processor/exploitability.o \ + src/processor/exploitability_linux.o \ src/processor/exploitability_win.o \ src/processor/logging.o \ src/processor/minidump.o \ src/processor/pathname_stripper.o \ + src/processor/proc_maps_linux.o \ src/processor/source_line_resolver_base.o \ + src/processor/stack_frame_cpu.o \ src/processor/stack_frame_symbolizer.o \ src/processor/stackwalker.o \ + src/processor/stackwalker_address_list.o \ src/processor/stackwalker_amd64.o \ src/processor/stackwalker_arm.o \ + src/processor/stackwalker_arm64.o \ + src/processor/stackwalker_mips.o \ src/processor/stackwalker_ppc.o \ + src/processor/stackwalker_ppc64.o \ src/processor/stackwalker_sparc.o \ src/processor/stackwalker_x86.o \ src/processor/tokenize.o \ @@ -870,6 +1096,54 @@ src_processor_stackwalker_arm_unittest_CPPFLAGS = \ -I$(top_srcdir)/src/testing/gtest \ -I$(top_srcdir)/src/testing +src_processor_stackwalker_arm64_unittest_SOURCES = \ + src/common/test_assembler.cc \ + src/processor/stackwalker_arm64_unittest.cc \ + src/testing/gtest/src/gtest-all.cc \ + src/testing/gtest/src/gtest_main.cc \ + src/testing/src/gmock-all.cc +src_processor_stackwalker_arm64_unittest_LDADD = \ + src/libbreakpad.a \ + $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) +src_processor_stackwalker_arm64_unittest_CPPFLAGS = \ + -I$(top_srcdir)/src \ + -I$(top_srcdir)/src/testing/include \ + -I$(top_srcdir)/src/testing/gtest/include \ + -I$(top_srcdir)/src/testing/gtest \ + -I$(top_srcdir)/src/testing + +src_processor_stackwalker_address_list_unittest_SOURCES = \ + src/common/test_assembler.cc \ + src/processor/stackwalker_address_list_unittest.cc \ + src/testing/gtest/src/gtest-all.cc \ + src/testing/gtest/src/gtest_main.cc \ + src/testing/src/gmock-all.cc +src_processor_stackwalker_address_list_unittest_LDADD = \ + src/libbreakpad.a \ + $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) +src_processor_stackwalker_address_list_unittest_CPPFLAGS = \ + -I$(top_srcdir)/src \ + -I$(top_srcdir)/src/testing/include \ + -I$(top_srcdir)/src/testing/gtest/include \ + -I$(top_srcdir)/src/testing/gtest \ + -I$(top_srcdir)/src/testing + +src_processor_stackwalker_mips_unittest_SOURCES = \ + src/common/test_assembler.cc \ + src/processor/stackwalker_mips_unittest.cc \ + src/testing/gtest/src/gtest-all.cc \ + src/testing/gtest/src/gtest_main.cc \ + src/testing/src/gmock-all.cc +src_processor_stackwalker_mips_unittest_LDADD = \ + src/libbreakpad.a \ + $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) +src_processor_stackwalker_mips_unittest_CPPFLAGS = \ + -I$(top_srcdir)/src \ + -I$(top_srcdir)/src/testing/include \ + -I$(top_srcdir)/src/testing/gtest/include \ + -I$(top_srcdir)/src/testing/gtest \ + -I$(top_srcdir)/src/testing + src_processor_stackwalker_x86_unittest_SOURCES = \ src/common/test_assembler.cc \ src/processor/stackwalker_x86_unittest.cc \ @@ -926,35 +1200,81 @@ src_processor_minidump_dump_SOURCES = \ src/processor/minidump_dump.cc src_processor_minidump_dump_LDADD = \ src/processor/basic_code_modules.o \ + src/processor/dump_context.o \ + src/processor/dump_object.o \ src/processor/logging.o \ src/processor/minidump.o \ - src/processor/pathname_stripper.o + src/processor/pathname_stripper.o \ + src/processor/proc_maps_linux.o + +src_processor_microdump_stackwalk_SOURCES = \ + src/processor/microdump_stackwalk.cc +src_processor_microdump_stackwalk_LDADD = \ + src/processor/basic_code_modules.o \ + src/processor/basic_source_line_resolver.o \ + src/processor/call_stack.o \ + src/processor/cfi_frame_info.o \ + src/processor/disassembler_x86.o \ + src/processor/dump_context.o \ + src/processor/dump_object.o \ + src/processor/logging.o \ + src/processor/microdump.o \ + src/processor/microdump_processor.o \ + src/processor/pathname_stripper.o \ + src/processor/process_state.o \ + src/processor/simple_symbol_supplier.o \ + src/processor/source_line_resolver_base.o \ + src/processor/stack_frame_cpu.o \ + src/processor/stack_frame_symbolizer.o \ + src/processor/stackwalk_common.o \ + src/processor/stackwalker.o \ + src/processor/stackwalker_address_list.o \ + src/processor/stackwalker_amd64.o \ + src/processor/stackwalker_arm.o \ + src/processor/stackwalker_arm64.o \ + src/processor/stackwalker_mips.o \ + src/processor/stackwalker_ppc.o \ + src/processor/stackwalker_ppc64.o \ + src/processor/stackwalker_sparc.o \ + src/processor/stackwalker_x86.o \ + src/processor/tokenize.o \ + src/third_party/libdisasm/libdisasm.a src_processor_minidump_stackwalk_SOURCES = \ src/processor/minidump_stackwalk.cc src_processor_minidump_stackwalk_LDADD = \ src/processor/basic_code_modules.o \ src/processor/basic_source_line_resolver.o \ - src/processor/binarystream.o \ src/processor/call_stack.o \ src/processor/cfi_frame_info.o \ src/processor/disassembler_x86.o \ + src/processor/dump_context.o \ + src/processor/dump_object.o \ src/processor/exploitability.o \ + src/processor/exploitability_linux.o \ src/processor/exploitability_win.o \ src/processor/logging.o \ src/processor/minidump.o \ src/processor/minidump_processor.o \ src/processor/pathname_stripper.o \ src/processor/process_state.o \ + src/processor/proc_maps_linux.o \ src/processor/simple_symbol_supplier.o \ src/processor/source_line_resolver_base.o \ + src/processor/stack_frame_cpu.o \ src/processor/stack_frame_symbolizer.o \ + src/processor/stackwalk_common.o \ src/processor/stackwalker.o \ + src/processor/stackwalker_address_list.o \ src/processor/stackwalker_amd64.o \ src/processor/stackwalker_arm.o \ + src/processor/stackwalker_arm64.o \ + src/processor/stackwalker_mips.o \ src/processor/stackwalker_ppc.o \ + src/processor/stackwalker_ppc64.o \ src/processor/stackwalker_sparc.o \ src/processor/stackwalker_x86.o \ + src/processor/symbolic_constants_win.o \ src/processor/tokenize.o \ src/third_party/libdisasm/libdisasm.a @@ -1013,6 +1333,7 @@ EXTRA_DIST = \ src/client/windows/sender/crash_report_sender.vcproj \ src/common/convert_UTF.c \ src/common/convert_UTF.h \ + src/common/linux/crc32.cc \ src/common/linux/dump_symbols.cc \ src/common/linux/dump_symbols.h \ src/common/linux/elf_symbols_to_module.cc \ @@ -1028,7 +1349,7 @@ EXTRA_DIST = \ src/common/mac/HTTPMultipartUpload.h \ src/common/mac/HTTPMultipartUpload.m \ src/common/mac/dump_syms.h \ - src/common/mac/dump_syms.mm \ + src/common/mac/dump_syms.cc \ src/common/mac/file_id.cc \ src/common/mac/file_id.h \ src/common/mac/macho_id.cc \ @@ -1080,7 +1401,7 @@ EXTRA_DIST = \ src/tools/mac/crash_report/on_demand_symbol_supplier.h \ src/tools/mac/crash_report/on_demand_symbol_supplier.mm \ src/tools/mac/dump_syms/dump_syms.xcodeproj/project.pbxproj \ - src/tools/mac/dump_syms/dump_syms_tool.m \ + src/tools/mac/dump_syms/dump_syms_tool.cc \ src/tools/mac/symupload/minidump_upload.m \ src/tools/mac/symupload/symupload.m \ src/tools/mac/symupload/symupload.xcodeproj/project.pbxproj \ diff --git a/toolkit/crashreporter/google-breakpad/README b/toolkit/crashreporter/google-breakpad/README deleted file mode 100644 index 3bccd4be8d8c..000000000000 --- a/toolkit/crashreporter/google-breakpad/README +++ /dev/null @@ -1,43 +0,0 @@ -Breakpad is a set of client and server components which implement a -crash-reporting system. - - ------ -Getting started in 32-bit mode (from trunk) -Configure: CXXFLAGS=-m32 CFLAGS=-m32 CPPFLAGS=-m32 ./configure - Build: make - Test: make check - Install: make install - -If you need to reconfigure your build be sure to run "make distclean" first. - - ------ -To request change review: -0. Get access to a read-write copy of source. - Owners at http://code.google.com/p/google-breakpad/ are able to grant - this access. - -1. Check out a read-write copy of source using instructions at - http://code.google.com/p/google-breakpad/source/checkout - -2. Make changes. Build and test your changes. - For core code like processor use methods above. - For linux/mac/windows, there are test targets in each project file. - -3. Download http://codereview.appspot.com/static/upload.py - -4. Run upload.py from the 'src' directory: - upload.py --server=breakpad.appspot.com - - You will be prompted for credential and a description. - -5. At http://breakpad.appspot.com you'll find your issue listed; click on it, - and select Publish+Mail, and enter in the code reviewer and CC - google-breakpad-dev@googlegroups.com - -6. When applying code review feedback, specify the '-i' option when running - upload.py again and pass the issue number so it updates the existing issue, - rather than creating a new one. - Be sure to rerun upload.py from the same directory as you did for previous - uploads to allow for proper diff calculations. diff --git a/toolkit/crashreporter/google-breakpad/README.ANDROID b/toolkit/crashreporter/google-breakpad/README.ANDROID index 5814db45ea18..f7eacdde23b6 100644 --- a/toolkit/crashreporter/google-breakpad/README.ANDROID +++ b/toolkit/crashreporter/google-breakpad/README.ANDROID @@ -5,8 +5,8 @@ This document explains how to use the Google Breakpad client library on Android, and later generate valid stack traces from the minidumps it generates. -This release supports ARM and x86 based Android systems. MIPS is not -currently supported by Breakpad. +This release supports ARM, x86 and MIPS based Android systems. +This release requires NDK release r10c or higher. I. Building the client library: =============================== @@ -37,8 +37,8 @@ NOTE: The client library requires a C++ STL implementation, It has been tested succesfully with both STLport and GNU libstdc++ -II.1. Building with a standalone Android toolchain: ---------------------------------------------------- +I.2. Building with a standalone Android toolchain: +-------------------------------------------------- All you need to do is configure your build with the right 'host' value, and disable the processor and tools, as in: diff --git a/toolkit/crashreporter/google-breakpad/README.md b/toolkit/crashreporter/google-breakpad/README.md new file mode 100644 index 000000000000..bfb9f1420aca --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/README.md @@ -0,0 +1,47 @@ +# Breakpad + +Breakpad is a set of client and server components which implement a +crash-reporting system. + +## Getting started in 32-bit mode (from trunk) + +```sh +# Configure +CXXFLAGS=-m32 CFLAGS=-m32 CPPFLAGS=-m32 ./configure +# Build +make +# Test +make check +# Install +make install +``` + +If you need to reconfigure your build be sure to run `make distclean` first. + +## To request change review: + +1. Get a copy of depot_tools repo. + http://dev.chromium.org/developers/how-tos/install-depot-tools + +2. Create a new directory for checking out the source code. + mkdir breakpad && cd breakpad + +3. Run the `fetch` tool from depot_tools to download all the source repos. + `fetch breakpad` + +4. Make changes. Build and test your changes. + For core code like processor use methods above. + For linux/mac/windows, there are test targets in each project file. + +5. Commit your changes to your local repo and upload them to the server. + http://dev.chromium.org/developers/contributing-code + e.g. `git commit ... && git cl upload ...` + You will be prompted for credential and a description. + +6. At https://codereview.chromium.org/ you'll find your issue listed; click on + it, and select Publish+Mail, and enter in the code reviewer and CC + google-breakpad-dev@googlegroups.com + +## Documentation + +Visit https://chromium.googlesource.com/breakpad/breakpad/+/master/docs/ diff --git a/toolkit/crashreporter/google-breakpad/SVN-INFO b/toolkit/crashreporter/google-breakpad/SVN-INFO deleted file mode 100644 index 0593a2d18639..000000000000 --- a/toolkit/crashreporter/google-breakpad/SVN-INFO +++ /dev/null @@ -1,12 +0,0 @@ -Path: /tmp/google-breakpad-read-only -Working Copy Root Path: /tmp/google-breakpad-read-only -URL: http://google-breakpad.googlecode.com/svn/trunk -Repository Root: http://google-breakpad.googlecode.com/svn -Repository UUID: 4c0a9323-5329-0410-9bdc-e9ce6186880e -Revision: 1143 -Node Kind: directory -Schedule: normal -Last Changed Author: ted.mielczarek@gmail.com -Last Changed Rev: 1143 -Last Changed Date: 2013-04-04 18:24:52 +0200 (Thu, 04 Apr 2013) - diff --git a/toolkit/crashreporter/google-breakpad/aclocal.m4 b/toolkit/crashreporter/google-breakpad/aclocal.m4 index 34d07a8add88..e657517b01ac 100644 --- a/toolkit/crashreporter/google-breakpad/aclocal.m4 +++ b/toolkit/crashreporter/google-breakpad/aclocal.m4 @@ -1,8 +1,7 @@ -# generated automatically by aclocal 1.11.3 -*- Autoconf -*- +# generated automatically by aclocal 1.15 -*- Autoconf -*- + +# Copyright (C) 1996-2014 Free Software Foundation, Inc. -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, -# Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -12,33 +11,31 @@ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, -[m4_warning([this file was generated for autoconf 2.68. +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, +[m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. -To do so, use the procedure documented by the package, typically `autoreconf'.])]) +To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software -# Foundation, Inc. +# Copyright (C) 2002-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 1 - # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.11' +[am__api_version='1.15' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.11.3], [], +m4_if([$1], [1.15], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -54,21 +51,19 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.11.3])dnl +[AM_AUTOMAKE_VERSION([1.15])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # Figure out how to run the assembler. -*- Autoconf -*- -# Copyright (C) 2001, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 5 - # AM_PROG_AS # ---------- AC_DEFUN([AM_PROG_AS], @@ -83,17 +78,15 @@ _AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 1 - # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets -# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to -# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to +# '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and @@ -112,7 +105,7 @@ _AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually -# harmless because $srcdir is `.', but things will broke when you +# harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, @@ -130,30 +123,26 @@ _AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], -[dnl Rely on autoconf to set up CDPATH properly. -AC_PREREQ([2.50])dnl -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` +[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 -# Free Software Foundation, Inc. +# Copyright (C) 1997-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 9 - # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], -[AC_PREREQ(2.52)dnl - ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +[AC_PREREQ([2.52])dnl + m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl @@ -172,16 +161,14 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, -# 2010, 2011 Free Software Foundation, Inc. +# Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 12 -# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing @@ -191,7 +178,7 @@ fi])]) # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. -# NAME is "CC", "CXX", "GCJ", or "OBJC". +# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was @@ -204,12 +191,13 @@ AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl -ifelse([$1], CC, [depcc="$CC" am_compiler_list=], - [$1], CXX, [depcc="$CXX" am_compiler_list=], - [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], - [$1], UPC, [depcc="$UPC" am_compiler_list=], - [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], - [depcc="$$1" am_compiler_list=]) +m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], + [$1], [CXX], [depcc="$CXX" am_compiler_list=], + [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], + [$1], [UPC], [depcc="$UPC" am_compiler_list=], + [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], @@ -217,8 +205,8 @@ AC_CACHE_CHECK([dependency style of $depcc], # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're @@ -258,16 +246,16 @@ AC_CACHE_CHECK([dependency style of $depcc], : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - # We check with `-c' and `-o' for the sake of the "dashmstdout" + # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in @@ -276,8 +264,8 @@ AC_CACHE_CHECK([dependency style of $depcc], test "$am__universal" = false || continue ;; nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else @@ -285,7 +273,7 @@ AC_CACHE_CHECK([dependency style of $depcc], fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has + # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} @@ -333,7 +321,7 @@ AM_CONDITIONAL([am__fastdep$1], [ # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. -# This macro is AC_REQUIREd in _AM_DEPENDENCIES +# This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl @@ -343,9 +331,13 @@ AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], -[AC_ARG_ENABLE(dependency-tracking, -[ --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors]) +[AC_ARG_ENABLE([dependency-tracking], [dnl +AS_HELP_STRING( + [--enable-dependency-tracking], + [do not reject slow dependency extractors]) +AS_HELP_STRING( + [--disable-dependency-tracking], + [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' @@ -360,20 +352,18 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. +# Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -#serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ - # Autoconf 2.62 quotes --file arguments for eval, but not when files + # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in @@ -386,7 +376,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but + # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. @@ -398,21 +388,19 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], continue fi # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. + # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue + test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` @@ -430,7 +418,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each `.P' file that we will +# is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], @@ -438,32 +426,23 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 8 - -# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. -AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) - # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. +# Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 16 - # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. +dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. +m4_define([AC_PROG_CC], +m4_defn([AC_PROG_CC]) +[_AM_PROG_CC_C_O +]) + # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- @@ -476,7 +455,7 @@ AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.62])dnl +[AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl @@ -505,33 +484,42 @@ AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], -[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl +[AC_DIAGNOSE([obsolete], + [$0: two- and three-arguments forms are deprecated.]) +m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. -m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, +m4_if( + m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), + [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, -[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) - AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl +[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) + AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl -AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) -AM_MISSING_PROG(AUTOCONF, autoconf) -AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) -AM_MISSING_PROG(AUTOHEADER, autoheader) -AM_MISSING_PROG(MAKEINFO, makeinfo) +AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +AM_MISSING_PROG([AUTOCONF], [autoconf]) +AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +AM_MISSING_PROG([AUTOHEADER], [autoheader]) +AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl -AC_REQUIRE([AM_PROG_MKDIR_P])dnl -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +AC_SUBST([mkdir_p], ['$(MKDIR_P)']) +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl @@ -540,34 +528,82 @@ _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES(CC)], - [define([AC_PROG_CC], - defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl + [_AM_DEPENDENCIES([CC])], + [m4_define([AC_PROG_CC], + m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES(CXX)], - [define([AC_PROG_CXX], - defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl + [_AM_DEPENDENCIES([CXX])], + [m4_define([AC_PROG_CXX], + m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], - [_AM_DEPENDENCIES(OBJC)], - [define([AC_PROG_OBJC], - defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl + [_AM_DEPENDENCIES([OBJC])], + [m4_define([AC_PROG_OBJC], + m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], + [_AM_DEPENDENCIES([OBJCXX])], + [m4_define([AC_PROG_OBJCXX], + m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) -_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl -dnl The `parallel-tests' driver may need to know about EXEEXT, so add the -dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro -dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_REQUIRE([AM_SILENT_RULES])dnl +dnl The testsuite driver may need to know about EXEEXT, so add the +dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This +dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) + fi +fi +dnl The trailing newline in this macro's definition is deliberate, for +dnl backward compatibility and to allow trailing 'dnl'-style comments +dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) -dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) - # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. @@ -589,21 +625,18 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation, -# Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 1 - # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -if test x"${install_sh}" != xset; then +if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; @@ -611,16 +644,14 @@ if test x"${install_sh}" != xset; then install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi -AC_SUBST(install_sh)]) +AC_SUBST([install_sh])]) -# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2003-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 2 - # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], @@ -634,15 +665,49 @@ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) -# Check to see how 'make' treats includes. -*- Autoconf -*- +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering -# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. +# Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 4 +# AM_MAINTAINER_MODE([DEFAULT-MODE]) +# ---------------------------------- +# Control maintainer-specific portions of Makefiles. +# Default is to disable them, unless 'enable' is passed literally. +# For symmetry, 'disable' may be passed as well. Anyway, the user +# can override the default with the --enable/--disable switch. +AC_DEFUN([AM_MAINTAINER_MODE], +[m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], + [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], + am_maintainer_other[ make rules and dependencies not useful + (and sometimes confusing) to the casual installer])], + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST([MAINT])dnl +] +) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- @@ -661,7 +726,7 @@ am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. +# Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include @@ -686,52 +751,14 @@ AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) -# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 6 - -# AM_PROG_CC_C_O -# -------------- -# Like AC_PROG_CC_C_O, but changed for automake. -AC_DEFUN([AM_PROG_CC_C_O], -[AC_REQUIRE([AC_PROG_CC_C_O])dnl -AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([compile])dnl -# FIXME: we rely on the cache variable name because -# there is no other way. -set dummy $CC -am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` -eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o -if test "$am_t" != yes; then - # Losing compiler, so override with the script. - # FIXME: It is wrong to rewrite CC. - # But if we don't then we get into trouble of one sort or another. - # A longer-term fix would be to have automake use am__CC in this case, - # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" - CC="$am_aux_dir/compile $CC" -fi -dnl Make sure AC_PROG_CC is never called again, or it will override our -dnl setting of CC. -m4_define([AC_PROG_CC], - [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])]) -]) - # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. +# Copyright (C) 1997-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 6 - # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], @@ -739,11 +766,10 @@ AC_DEFUN([AM_MISSING_PROG], $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) - # AM_MISSING_HAS_RUN # ------------------ -# Define MISSING if not defined so far and test if it supports --run. -# If it does, set am_missing_run to use it, otherwise, to nothing. +# Define MISSING if not defined so far and test if it is modern enough. +# If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl @@ -756,54 +782,51 @@ if test x"${MISSING+set}" != xset; then esac fi # Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " else am_missing_run= - AC_MSG_WARN([`missing' script is too old or missing]) + AC_MSG_WARN(['missing' script is too old or missing]) fi ]) -# Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation, -# Inc. +# -*- Autoconf -*- +# Obsolete and "removed" macros, that must however still report explicit +# error messages when used, to smooth transition. +# +# Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 1 +AC_DEFUN([AM_CONFIG_HEADER], +[AC_DIAGNOSE([obsolete], +['$0': this macro is obsolete. +You should use the 'AC][_CONFIG_HEADERS' macro instead.])dnl +AC_CONFIG_HEADERS($@)]) -# AM_PROG_MKDIR_P -# --------------- -# Check for `mkdir -p'. -AC_DEFUN([AM_PROG_MKDIR_P], -[AC_PREREQ([2.60])dnl -AC_REQUIRE([AC_PROG_MKDIR_P])dnl -dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, -dnl while keeping a definition of mkdir_p for backward compatibility. -dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. -dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of -dnl Makefile.ins that do not define MKDIR_P, so we do our own -dnl adjustment using top_builddir (which is defined more often than -dnl MKDIR_P). -AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl -case $mkdir_p in - [[\\/$]]* | ?:[[\\/]]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; -esac -]) +AC_DEFUN([AM_PROG_CC_STDC], +[AC_PROG_CC +am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc +AC_DIAGNOSE([obsolete], +['$0': this macro is obsolete. +You should simply use the 'AC][_PROG_CC' macro instead. +Also, your code should no longer depend upon 'am_cv_prog_cc_stdc', +but upon 'ac_cv_prog_cc_stdc'.])]) + +AC_DEFUN([AM_C_PROTOTYPES], + [AC_FATAL([automatic de-ANSI-fication support has been removed])]) +AU_DEFUN([fp_C_PROTOTYPES], [AM_C_PROTOTYPES]) # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software -# Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 5 - # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], @@ -813,7 +836,7 @@ AC_DEFUN([_AM_MANGLE_OPTION], # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], -[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) +[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ @@ -827,13 +850,58 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. +# Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 1 +# _AM_PROG_CC_C_O +# --------------- +# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC +# to automatically call this. +AC_DEFUN([_AM_PROG_CC_C_O], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +AC_LANG_PUSH([C])dnl +AC_CACHE_CHECK( + [whether $CC understands -c and -o together], + [am_cv_prog_cc_c_o], + [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i]) +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +AC_LANG_POP([C])]) + +# For backward compatibility. +AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- @@ -848,22 +916,16 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 -# Free Software Foundation, Inc. +# Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 5 - # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) -# Just in case -sleep 1 -echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' @@ -874,32 +936,40 @@ case `pwd` in esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) - AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; + AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac -# Do `set' in a subshell so we don't clobber the current shell's +# Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$[*]" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$[*]" != "X $srcdir/configure conftest.file" \ - && test "$[*]" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken -alias in your environment]) - fi + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken + alias in your environment]) + fi + if test "$[2]" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done test "$[2]" = conftest.file ) then @@ -909,46 +979,118 @@ else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi -AC_MSG_RESULT(yes)]) +AC_MSG_RESULT([yes]) +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi +AC_CONFIG_COMMANDS_PRE( + [AC_MSG_CHECKING([that generated files are newer than configure]) + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + AC_MSG_RESULT([done])]) +rm -f conftest.file +]) -# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. +# Copyright (C) 2009-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 1 +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# ("yes" being less verbose, "no" or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], [dnl +AS_HELP_STRING( + [--enable-silent-rules], + [less verbose build output (undo: "make V=1")]) +AS_HELP_STRING( + [--disable-silent-rules], + [verbose build output (undo: "make V=0")])dnl +]) +case $enable_silent_rules in @%:@ ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +dnl +dnl A few 'make' implementations (e.g., NonStop OS and NextStep) +dnl do not support nested variable expansions. +dnl See automake bug#9928 and bug#10237. +am_make=${MAKE-make} +AC_CACHE_CHECK([whether $am_make supports nested variables], + [am_cv_make_support_nested_variables], + [if AS_ECHO([['TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi]) +if test $am_cv_make_support_nested_variables = yes; then + dnl Using '$V' instead of '$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AC_SUBST([AM_V])dnl +AM_SUBST_NOTMAKE([AM_V])dnl +AC_SUBST([AM_DEFAULT_V])dnl +AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- -# One issue with vendor `install' (even GNU) is that you can't +# One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we -# always use install-sh in `make install-strip', and initialize +# always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +# will honor the 'STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc. +# Copyright (C) 2006-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 - # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. @@ -962,18 +1104,16 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc. +# Copyright (C) 2004-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 2 - # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. -# FORMAT should be one of `v7', `ustar', or `pax'. +# FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory @@ -983,76 +1123,114 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar +# AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) -m4_if([$1], [v7], - [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], - [m4_case([$1], [ustar],, [pax],, - [m4_fatal([Unknown tar format])]) -AC_MSG_CHECKING([how to create a $1 tar archive]) -# Loop over all known methods to create a tar archive until one works. + +# We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' -_am_tools=${am_cv_prog_tar_$1-$_am_tools} -# Do not fold the above two line into one, because Tru64 sh and -# Solaris sh will not grok spaces in the rhs of `-'. -for _am_tool in $_am_tools -do - case $_am_tool in - gnutar) - for _am_tar in tar gnutar gtar; - do - AM_RUN_LOG([$_am_tar --version]) && break - done - am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' - am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' - am__untar="$_am_tar -xf -" - ;; - plaintar) - # Must skip GNU tar: if it does not support --format= it doesn't create - # ustar tarball either. - (tar --version) >/dev/null 2>&1 && continue - am__tar='tar chf - "$$tardir"' - am__tar_='tar chf - "$tardir"' - am__untar='tar xf -' - ;; - pax) - am__tar='pax -L -x $1 -w "$$tardir"' - am__tar_='pax -L -x $1 -w "$tardir"' - am__untar='pax -r' - ;; - cpio) - am__tar='find "$$tardir" -print | cpio -o -H $1 -L' - am__tar_='find "$tardir" -print | cpio -o -H $1 -L' - am__untar='cpio -i -H $1 -d' - ;; - none) - am__tar=false - am__tar_=false - am__untar=false - ;; - esac - # If the value was cached, stop now. We just wanted to have am__tar - # and am__untar set. - test -n "${am_cv_prog_tar_$1}" && break +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], - # tar/untar a dummy directory, and stop if the command works + [m4_case([$1], + [ustar], + [# The POSIX 1988 'ustar' format is defined with fixed-size fields. + # There is notably a 21 bits limit for the UID and the GID. In fact, + # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 + # and bug#13588). + am_max_uid=2097151 # 2^21 - 1 + am_max_gid=$am_max_uid + # The $UID and $GID variables are not portable, so we need to resort + # to the POSIX-mandated id(1) utility. Errors in the 'id' calls + # below are definitely unexpected, so allow the users to see them + # (that is, avoid stderr redirection). + am_uid=`id -u || echo unknown` + am_gid=`id -g || echo unknown` + AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) + if test $am_uid -le $am_max_uid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi + AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) + if test $am_gid -le $am_max_gid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi], + + [pax], + [], + + [m4_fatal([Unknown tar format])]) + + AC_MSG_CHECKING([how to create a $1 tar archive]) + + # Go ahead even if we have the value already cached. We do so because we + # need to set the values for the 'am__tar' and 'am__untar' variables. + _am_tools=${am_cv_prog_tar_$1-$_am_tools} + + for _am_tool in $_am_tools; do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works. + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi + done rm -rf conftest.dir - mkdir conftest.dir - echo GrepMe > conftest.dir/file - AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) - rm -rf conftest.dir - if test -s conftest.tar; then - AM_RUN_LOG([$am__untar /dev/null 2>&1 && break - fi -done -rm -rf conftest.dir -AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) -AC_MSG_RESULT([$am_cv_prog_tar_$1])]) + AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) + AC_MSG_RESULT([$am_cv_prog_tar_$1])]) + AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR diff --git a/toolkit/crashreporter/google-breakpad/android/google_breakpad/Android.mk b/toolkit/crashreporter/google-breakpad/android/google_breakpad/Android.mk index 7bd440039161..52fa5e4bea14 100644 --- a/toolkit/crashreporter/google-breakpad/android/google_breakpad/Android.mk +++ b/toolkit/crashreporter/google-breakpad/android/google_breakpad/Android.mk @@ -45,11 +45,6 @@ # to select one in your Application.mk # -# Sanity check. We can only build for ARM for now. -ifneq (,$(filter-out armeabi armeabi-v7a x86,$(TARGET_ARCH_ABI))) -$(error Sorry, Google Breakpad only works on Android ARM and x86 for now!) -endif - # The top Google Breakpad directory. # We assume this Android.mk to be under 'android/google_breakpad' @@ -85,7 +80,8 @@ LOCAL_SRC_FILES := \ src/client/minidump_file_writer.cc \ src/common/android/breakpad_getcontext.S \ src/common/convert_UTF.c \ - src/common/md5.cc src/common/string_conversion.cc \ + src/common/md5.cc \ + src/common/string_conversion.cc \ src/common/linux/elfutils.cc \ src/common/linux/file_id.cc \ src/common/linux/guid_creator.cc \ diff --git a/toolkit/crashreporter/google-breakpad/android/run-checks.sh b/toolkit/crashreporter/google-breakpad/android/run-checks.sh index 400f75613ecc..51d2d50231f3 100755 --- a/toolkit/crashreporter/google-breakpad/android/run-checks.sh +++ b/toolkit/crashreporter/google-breakpad/android/run-checks.sh @@ -326,6 +326,9 @@ case $ARCH in x86) GNU_CONFIG=i686-linux-android ;; + mips) + GNU_CONFIG=mipsel-linux-android + ;; *) GNU_CONFIG="$ARCH-linux-android" ;; diff --git a/toolkit/crashreporter/google-breakpad/android/sample_app/jni/Application.mk b/toolkit/crashreporter/google-breakpad/android/sample_app/jni/Application.mk index 50dcd0d53884..366ce29f78bf 100644 --- a/toolkit/crashreporter/google-breakpad/android/sample_app/jni/Application.mk +++ b/toolkit/crashreporter/google-breakpad/android/sample_app/jni/Application.mk @@ -28,4 +28,4 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. APP_STL := stlport_static -APP_ABI := armeabi armeabi-v7a +APP_ABI := all diff --git a/toolkit/crashreporter/google-breakpad/android/test-driver b/toolkit/crashreporter/google-breakpad/android/test-driver new file mode 100755 index 000000000000..eaaac6b295f2 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/android/test-driver @@ -0,0 +1,131 @@ +#! /bin/sh +# test-driver - basic testsuite driver script. + +# Slightly modified for Android, see ANDROID comment below. + +scriptversion=2012-06-27.10; # UTC + +# Copyright (C) 2011-2013 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +# Make unconditional expansion of undefined variables an error. This +# helps a lot in preventing typo-related bugs. +set -u + +usage_error () +{ + echo "$0: $*" >&2 + print_usage >&2 + exit 2 +} + +print_usage () +{ + cat < $log_file 2>&1 +progdir=$(dirname "$0") +"$progdir/test-shell.sh" "$@" > $log_file 2>&1 +estatus=$? +if test $enable_hard_errors = no && test $estatus -eq 99; then + estatus=1 +fi + +case $estatus:$expect_failure in + 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; + 0:*) col=$grn res=PASS recheck=no gcopy=no;; + 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; + 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; + *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; + *:*) col=$red res=FAIL recheck=yes gcopy=yes;; +esac + +# Report outcome to console. +echo "${col}${res}${std}: $test_name" + +# Register the test result, and other relevant metadata. +echo ":test-result: $res" > $trs_file +echo ":global-test-result: $res" >> $trs_file +echo ":recheck: $recheck" >> $trs_file +echo ":copy-in-global-log: $gcopy" >> $trs_file + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/toolkit/crashreporter/google-breakpad/android/test-shell.sh b/toolkit/crashreporter/google-breakpad/android/test-shell.sh index 526e926aebd2..3677d8755a76 100755 --- a/toolkit/crashreporter/google-breakpad/android/test-shell.sh +++ b/toolkit/crashreporter/google-breakpad/android/test-shell.sh @@ -52,8 +52,9 @@ if [ ! -f "$TEST_PROGRAM" ]; then fi # Create test directory on the device -TEST_DIR=/data/local/tmp/test-google-breakpad -adb_shell mkdir "$TEST_DIR" || panic "Can't create test directory on device" +TEST_DIR=/data/local/tmp/test-google-breakpad-$$ +adb_shell mkdir "$TEST_DIR" || + panic "Can't create test directory on device: $TEST_DIR" # Ensure that it is always removed when the script exits. clean_test_dir () { diff --git a/toolkit/crashreporter/google-breakpad/autotools/compile b/toolkit/crashreporter/google-breakpad/autotools/compile index 862a14e8c81c..531136b068ef 100755 --- a/toolkit/crashreporter/google-breakpad/autotools/compile +++ b/toolkit/crashreporter/google-breakpad/autotools/compile @@ -1,10 +1,9 @@ #! /bin/sh # Wrapper for compilers which do not understand '-c -o'. -scriptversion=2012-03-05.13; # UTC +scriptversion=2012-10-14.11; # UTC -# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009, 2010, 2012 Free -# Software Foundation, Inc. +# Copyright (C) 1999-2013 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify @@ -113,6 +112,11 @@ func_cl_dashl () lib=$dir/$lib.lib break fi + if test -f "$dir/lib$lib.a"; then + found=yes + lib=$dir/lib$lib.a + break + fi done IFS=$save_IFS diff --git a/toolkit/crashreporter/google-breakpad/autotools/config.guess b/toolkit/crashreporter/google-breakpad/autotools/config.guess index aa04f04bda96..f7eb141e75a9 100755 --- a/toolkit/crashreporter/google-breakpad/autotools/config.guess +++ b/toolkit/crashreporter/google-breakpad/autotools/config.guess @@ -1,14 +1,12 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -# 2011, 2012 Free Software Foundation, Inc. +# Copyright 1992-2015 Free Software Foundation, Inc. -timestamp='2012-06-17' +timestamp='2015-03-04' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or +# the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but @@ -22,19 +20,17 @@ timestamp='2012-06-17' # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Originally written by Per Bothner. Please send patches (context -# diff format) to and include a ChangeLog -# entry. +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). # -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. +# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD +# +# Please send patches to . + me=`echo "$0" | sed -e 's,.*/,,'` @@ -54,9 +50,7 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 -Free Software Foundation, Inc. +Copyright 1992-2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -138,6 +132,27 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown +case "${UNAME_SYSTEM}" in +Linux|GNU|GNU/*) + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + LIBC=gnu + + eval $set_cc_for_build + cat <<-EOF > $dummy.c + #include + #if defined(__UCLIBC__) + LIBC=uclibc + #elif defined(__dietlibc__) + LIBC=dietlibc + #else + LIBC=gnu + #endif + EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` + ;; +esac + # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in @@ -153,20 +168,27 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ + /sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || \ + echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; + earmv*) + arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` + endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` + machine=${arch}${endian}-unknown + ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) + arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ @@ -182,6 +204,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in os=netbsd ;; esac + # Determine ABI tags. + case "${UNAME_MACHINE_ARCH}" in + earm*) + expr='s/^earmv[0-9]/-eabi/;s/eb$//' + abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` + ;; + esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need @@ -198,7 +227,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" + echo "${machine}-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` @@ -306,7 +335,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; - arm:riscos:*:*|arm:RISCOS:*:*) + arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) @@ -564,8 +593,9 @@ EOF else IBM_ARCH=powerpc fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` + if [ -x /usr/bin/lslpp ] ; then + IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi @@ -805,10 +835,13 @@ EOF i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; + *:MINGW64*:*) + echo ${UNAME_MACHINE}-pc-mingw64 + exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; - i*:MSYS*:*) + *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) @@ -856,21 +889,21 @@ EOF exit ;; *:GNU:*:*) # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in @@ -883,59 +916,57 @@ EOF EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + if test "$?" = 0 ; then LIBC="gnulibc1" ; fi + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arc:Linux:*:* | arceb:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then - echo ${UNAME_MACHINE}-unknown-linux-gnueabi + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else - echo ${UNAME_MACHINE}-unknown-linux-gnueabihf + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-gnu + echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-gnu + echo ${UNAME_MACHINE}-axis-linux-${LIBC} + exit ;; + e2k:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; frv:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) - LIBC=gnu - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build @@ -954,54 +985,63 @@ EOF #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; - or32:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + openrisc*:Linux:*:*) + echo or1k-unknown-linux-${LIBC} + exit ;; + or32:Linux:*:* | or1k*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) - echo sparc-unknown-linux-gnu + echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu + echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; + PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; + PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; + *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu + echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu + echo powerpc-unknown-linux-${LIBC} + exit ;; + ppc64le:Linux:*:*) + echo powerpc64le-unknown-linux-${LIBC} + exit ;; + ppcle:Linux:*:*) + echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux + echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-gnu + echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. @@ -1205,6 +1245,9 @@ EOF BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; @@ -1231,19 +1274,31 @@ EOF exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - case $UNAME_PROCESSOR in - i386) - eval $set_cc_for_build - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - UNAME_PROCESSOR="x86_64" - fi - fi ;; - unknown) UNAME_PROCESSOR=powerpc ;; - esac + eval $set_cc_for_build + if test "$UNAME_PROCESSOR" = unknown ; then + UNAME_PROCESSOR=powerpc + fi + if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + fi + elif test "$UNAME_PROCESSOR" = i386 ; then + # Avoid executing cc on OS X 10.9, as it ships with a stub + # that puts up a graphical alert prompting to install + # developer tools. Any system running Mac OS X 10.7 or + # later (Darwin 11 and later) is required to have a 64-bit + # processor. This is not true of the ARM version of Darwin + # that Apple uses in portable devices. + UNAME_PROCESSOR=x86_64 + fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) @@ -1334,157 +1389,6 @@ EOF exit ;; esac -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - cat >&2 <. @@ -26,11 +20,12 @@ timestamp='2012-06-17' # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). -# Please send patches to . Submit a context -# diff and a properly formatted GNU ChangeLog entry. +# Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. @@ -73,9 +68,7 @@ Report bugs and patches to ." version="\ GNU config.sub ($timestamp) -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 -Free Software Foundation, Inc. +Copyright 1992-2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -123,8 +116,8 @@ esac maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ - linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | \ + linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os @@ -156,7 +149,7 @@ case $os in -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray | -microblaze) + -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; @@ -259,21 +252,24 @@ case $basic_machine in | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ - | be32 | be64 \ + | arc | arceb \ + | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ + | avr | avr32 \ + | be32 | be64 \ | bfin \ - | c4x | clipper \ + | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ - | epiphany \ - | fido | fr30 | frv \ + | e2k | epiphany \ + | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ + | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | mcore | mep | metag \ + | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ @@ -287,23 +283,26 @@ case $basic_machine in | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ - | nios | nios2 \ + | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ - | open8 \ - | or32 \ + | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ + | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ @@ -314,6 +313,7 @@ case $basic_machine in | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | visium \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) @@ -328,7 +328,10 @@ case $basic_machine in c6x) basic_machine=tic6x-unknown ;; - m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) + leon|leon[3-9]) + basic_machine=sparc-$basic_machine + ;; + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; @@ -370,26 +373,28 @@ case $basic_machine in | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ - | clipper-* | craynv-* | cydra-* \ + | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ + | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ + | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ @@ -403,18 +408,22 @@ case $basic_machine in | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ - | nios-* | nios2-* \ + | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ + | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ @@ -432,6 +441,7 @@ case $basic_machine in | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ + | visium-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ @@ -508,6 +518,9 @@ case $basic_machine in basic_machine=i386-pc os=-aros ;; + asmjs) + basic_machine=asmjs-unknown + ;; aux) basic_machine=m68k-apple os=-aux @@ -769,6 +782,9 @@ case $basic_machine in basic_machine=m68k-isi os=-sysv ;; + leon-*|leon[3-9]-*) + basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` + ;; m68knommu) basic_machine=m68k-unknown os=-linux @@ -788,11 +804,15 @@ case $basic_machine in basic_machine=ns32k-utek os=-sysv ;; - microblaze) + microblaze*) basic_machine=microblaze-xilinx ;; + mingw64) + basic_machine=x86_64-pc + os=-mingw64 + ;; mingw32) - basic_machine=i386-pc + basic_machine=i686-pc os=-mingw32 ;; mingw32ce) @@ -820,6 +840,10 @@ case $basic_machine in basic_machine=powerpc-unknown os=-morphos ;; + moxiebox) + basic_machine=moxie-unknown + os=-moxiebox + ;; msdos) basic_machine=i386-pc os=-msdos @@ -828,7 +852,7 @@ case $basic_machine in basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) - basic_machine=i386-pc + basic_machine=i686-pc os=-msys ;; mvs) @@ -1019,7 +1043,11 @@ case $basic_machine in basic_machine=i586-unknown os=-pw32 ;; - rdos) + rdos | rdos64) + basic_machine=x86_64-pc + os=-rdos + ;; + rdos32) basic_machine=i386-pc os=-rdos ;; @@ -1346,9 +1374,9 @@ case $os in -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ - | -sym* | -kopensolaris* \ + | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* \ + | -aos* | -aros* | -cloudabi* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ @@ -1359,16 +1387,16 @@ case $os in | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -linux-android* \ - | -linux-newlib* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ + | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-musl* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) @@ -1492,9 +1520,6 @@ case $os in -aros*) os=-aros ;; - -kaos*) - os=-kaos - ;; -zvmoe) os=-zvmoe ;; @@ -1543,6 +1568,9 @@ case $basic_machine in c4x-* | tic4x-*) os=-coff ;; + c8051-*) + os=-elf + ;; hexagon-*) os=-elf ;; diff --git a/toolkit/crashreporter/google-breakpad/autotools/depcomp b/toolkit/crashreporter/google-breakpad/autotools/depcomp index ca5ea4e1ef9c..4ebd5b3a2f2d 100755 --- a/toolkit/crashreporter/google-breakpad/autotools/depcomp +++ b/toolkit/crashreporter/google-breakpad/autotools/depcomp @@ -1,10 +1,9 @@ #! /bin/sh # depcomp - compile a program generating dependencies as side-effects -scriptversion=2006-10-15.18 +scriptversion=2013-05-30.07; # UTC -# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software -# Foundation, Inc. +# Copyright (C) 1999-2013 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -17,9 +16,7 @@ scriptversion=2006-10-15.18 # GNU General Public License for more details. # You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301, USA. +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -30,9 +27,9 @@ scriptversion=2006-10-15.18 case $1 in '') - echo "$0: No command. Try \`$0 --help' for more information." 1>&2 - exit 1; - ;; + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] @@ -42,11 +39,11 @@ as side-effects. Environment variables: depmode Dependency tracking mode. - source Source file read by `PROGRAMS ARGS'. - object Object file output by `PROGRAMS ARGS'. + source Source file read by 'PROGRAMS ARGS'. + object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. - tmpdepfile Temporary file to use when outputing dependencies. + tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . @@ -59,6 +56,66 @@ EOF ;; esac +# Get the directory component of the given path, and save it in the +# global variables '$dir'. Note that this directory component will +# be either empty or ending with a '/' character. This is deliberate. +set_dir_from () +{ + case $1 in + */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; + *) dir=;; + esac +} + +# Get the suffix-stripped basename of the given path, and save it the +# global variable '$base'. +set_base_from () +{ + base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` +} + +# If no dependency file was actually created by the compiler invocation, +# we still have to create a dummy depfile, to avoid errors with the +# Makefile "include basename.Plo" scheme. +make_dummy_depfile () +{ + echo "#dummy" > "$depfile" +} + +# Factor out some common post-processing of the generated depfile. +# Requires the auxiliary global variable '$tmpdepfile' to be set. +aix_post_process_depfile () +{ + # If the compiler actually managed to produce a dependency file, + # post-process it. + if test -f "$tmpdepfile"; then + # Each line is of the form 'foo.o: dependency.h'. + # Do two passes, one to just change these to + # $object: dependency.h + # and one to simply output + # dependency.h: + # which is needed to avoid the deleted-header problem. + { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" + sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" + } > "$depfile" + rm -f "$tmpdepfile" + else + make_dummy_depfile + fi +} + +# A tabulation character. +tab=' ' +# A newline character. +nl=' +' +# Character ranges might be problematic outside the C locale. +# These definitions help. +upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ +lower=abcdefghijklmnopqrstuvwxyz +digits=0123456789 +alpha=${upper}${lower} + if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 @@ -71,6 +128,9 @@ tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" +# Avoid interferences from the environment. +gccflag= dashmflag= + # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case @@ -82,9 +142,32 @@ if test "$depmode" = hp; then fi if test "$depmode" = dashXmstdout; then - # This is just like dashmstdout with a different argument. - dashmflag=-xM - depmode=dashmstdout + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvisualcpp +fi + +if test "$depmode" = msvc7msys; then + # This is just like msvc7 but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvc7 +fi + +if test "$depmode" = xlc; then + # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. + gccflag=-qmakedep=gcc,-MF + depmode=gcc fi case "$depmode" in @@ -107,8 +190,7 @@ gcc3) done "$@" stat=$? - if test $stat -eq 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi @@ -116,13 +198,17 @@ gcc3) ;; gcc) +## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. +## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. +## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like -## -MM, not -M (despite what the docs say). +## -MM, not -M (despite what the docs say). Also, it might not be +## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then @@ -130,31 +216,31 @@ gcc) fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? - if test $stat -eq 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" - alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz -## The second -e expression handles DOS-style file names with drive letters. + # The second -e expression handles DOS-style file names with drive + # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" -## This next piece of magic avoids the `deleted header file' problem. +## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. - tr ' ' ' -' < "$tmpdepfile" | -## Some versions of gcc put a space before the `:'. On the theory +## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as -## well. +## well. hp depmode also adds that space, but also prefixes the VPATH +## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; @@ -172,8 +258,7 @@ sgi) "$@" -MDupdate "$tmpdepfile" fi stat=$? - if test $stat -eq 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi @@ -181,99 +266,156 @@ sgi) if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" - # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; - # the IRIX cc adds comments like `#:fec' to the end of the + # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ - tr ' -' ' ' >> $depfile - echo >> $depfile - + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ + | tr "$nl" ' ' >> "$depfile" + echo >> "$depfile" # The second pass generates a dummy entry for each header file. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ - >> $depfile + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" + make_dummy_depfile fi rm -f "$tmpdepfile" ;; +xlc) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the - # current directory. Also, the AIX compiler puts `$object:' at the + # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. - stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` - tmpdepfile="$stripped.u" + set_dir_from "$object" + set_base_from "$object" if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u "$@" -M fi stat=$? - - if test -f "$tmpdepfile"; then : - else - stripped=`echo "$stripped" | sed 's,^.*/,,'` - tmpdepfile="$stripped.u" - fi - - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi - if test -f "$tmpdepfile"; then - outname="$stripped.o" - # Each line is of the form `foo.o: dependent.h'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" - sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" - else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + aix_post_process_depfile + ;; + +tcc) + # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 + # FIXME: That version still under development at the moment of writing. + # Make that this statement remains true also for stable, released + # versions. + # It will wrap lines (doesn't matter whether long or short) with a + # trailing '\', as in: + # + # foo.o : \ + # foo.c \ + # foo.h \ + # + # It will put a trailing '\' even on the last line, and will use leading + # spaces rather than leading tabs (at least since its commit 0394caf7 + # "Emit spaces for -MD"). + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat fi + rm -f "$depfile" + # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. + # We have to change lines of the first kind to '$object: \'. + sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" + # And for each line of the second kind, we have to emit a 'dep.h:' + # dummy dependency, to avoid the deleted-header problem. + sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; -icc) - # Intel's C compiler understands `-MD -MF file'. However on - # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c - # ICC 7.0 will fill foo.d with something like - # foo.o: sub/foo.c - # foo.o: sub/foo.h - # which is wrong. We want: - # sub/foo.o: sub/foo.c - # sub/foo.o: sub/foo.h - # sub/foo.c: - # sub/foo.h: - # ICC 7.1 will output +## The order of this option in the case statement is important, since the +## shell code in configure will try each of these formats in the order +## listed in this file. A plain '-MD' option would be understood by many +## compilers, so we must ensure this comes after the gcc and icc options. +pgcc) + # Portland's C compiler understands '-MD'. + # Will always output deps to 'file.d' where file is the root name of the + # source file under compilation, even if file resides in a subdirectory. + # The object file name does not affect the name of the '.d' file. + # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h - # and will wrap long lines using \ : + # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... + set_dir_from "$object" + # Use the source, not the object, to determine the base name, since + # that's sadly what pgcc will do too. + set_base_from "$source" + tmpdepfile=$base.d - "$@" -MD -MF "$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else + # For projects that build the same source file twice into different object + # files, the pgcc approach of using the *source* file root name can cause + # problems in parallel builds. Use a locking strategy to avoid stomping on + # the same $tmpdepfile. + lockdir=$base.d-lock + trap " + echo '$0: caught signal, cleaning up...' >&2 + rmdir '$lockdir' + exit 1 + " 1 2 13 15 + numtries=100 + i=$numtries + while test $i -gt 0; do + # mkdir is a portable test-and-set. + if mkdir "$lockdir" 2>/dev/null; then + # This process acquired the lock. + "$@" -MD + stat=$? + # Release the lock. + rmdir "$lockdir" + break + else + # If the lock is being held by a different process, wait + # until the winning process is done or we timeout. + while test -d "$lockdir" && test $i -gt 0; do + sleep 1 + i=`expr $i - 1` + done + fi + i=`expr $i - 1` + done + trap - 1 2 13 15 + if test $i -le 0; then + echo "$0: failed to acquire lock after $numtries attempts" >&2 + echo "$0: check lockdir '$lockdir'" >&2 + exit 1 + fi + + if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi @@ -285,8 +427,8 @@ icc) sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. - sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | - sed -e 's/$/ :/' >> "$depfile" + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ + | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; @@ -297,9 +439,8 @@ hp2) # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + set_dir_from "$object" + set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d @@ -310,8 +451,7 @@ hp2) "$@" +Maked fi stat=$? - if test $stat -eq 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi @@ -321,72 +461,107 @@ hp2) test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" - # Add `dependent.h:' lines. - sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" + sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" + # Add 'dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" else - echo "#dummy" > "$depfile" + make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) - # The Tru64 compiler uses -MD to generate dependencies as a side - # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. - # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put - # dependencies in `foo.d' instead, so we check for that too. - # Subdirectories are respected. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in 'foo.d' instead, so we check for that too. + # Subdirectories are respected. + set_dir_from "$object" + set_base_from "$object" - if test "$libtool" = yes; then - # With Tru64 cc, shared objects can also be used to make a - # static library. This mechanism is used in libtool 1.4 series to - # handle both shared and static libraries in a single compilation. - # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. - # - # With libtool 1.5 this exception was removed, and libtool now - # generates 2 separate objects for the 2 libraries. These two - # compilations output dependencies in $dir.libs/$base.o.d and - # in $dir$base.o.d. We have to check for both files, because - # one of the two compilations can be disabled. We should prefer - # $dir$base.o.d over $dir.libs/$base.o.d because the latter is - # automatically cleaned when .libs/ is deleted, while ignoring - # the former would cause a distcleancheck panic. - tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 - tmpdepfile2=$dir$base.o.d # libtool 1.5 - tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 - tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 - "$@" -Wc,-MD - else - tmpdepfile1=$dir$base.o.d - tmpdepfile2=$dir$base.d - tmpdepfile3=$dir$base.d - tmpdepfile4=$dir$base.d - "$@" -MD - fi + if test "$libtool" = yes; then + # Libtool generates 2 separate objects for the 2 libraries. These + # two compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir$base.o.d # libtool 1.5 + tmpdepfile2=$dir.libs/$base.o.d # Likewise. + tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + "$@" -MD + fi - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" - exit $stat - fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" - # That's a tab and a space in the []. - sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" - else - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + # Same post-processing that is required for AIX mode. + aix_post_process_depfile + ;; + +msvc7) + if test "$libtool" = yes; then + showIncludes=-Wc,-showIncludes + else + showIncludes=-showIncludes + fi + "$@" $showIncludes > "$tmpdepfile" + stat=$? + grep -v '^Note: including file: ' "$tmpdepfile" + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The first sed program below extracts the file names and escapes + # backslashes for cygpath. The second sed program outputs the file + # name when reading, but also accumulates all include files in the + # hold buffer in order to output them again at the end. This only + # works with sed implementations that can handle large buffers. + sed < "$tmpdepfile" -n ' +/^Note: including file: *\(.*\)/ { + s//\1/ + s/\\/\\\\/g + p +}' | $cygpath_u | sort -u | sed -n ' +s/ /\\ /g +s/\(.*\)/'"$tab"'\1 \\/p +s/.\(.*\) \\/\1:/ +H +$ { + s/.*/'"$tab"'/ + G + p +}' >> "$depfile" + echo >> "$depfile" # make sure the fragment doesn't end with a backslash + rm -f "$tmpdepfile" + ;; + +msvc7msys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; #nosideeffect) # This comment above is used by automake to tell side-effect @@ -399,13 +574,13 @@ dashmstdout) # Remove the call to Libtool. if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do + while test "X$1" != 'X--mode=compile'; do shift done shift fi - # Remove `-o $object'. + # Remove '-o $object'. IFS=" " for arg do @@ -425,18 +600,18 @@ dashmstdout) done test -z "$dashmflag" && dashmflag=-M - # Require at least two characters before searching for `:' + # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: - # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | - sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" - tr ' ' ' -' < "$tmpdepfile" | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + # Some versions of the HPUX 10.20 sed can't process this sed invocation + # correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; @@ -450,41 +625,51 @@ makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do + while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift - cleared=no - for arg in "$@"; do + cleared=no eat=no + for arg + do case $cleared in no) set ""; shift cleared=yes ;; esac + if test $eat = yes; then + eat=no + continue + fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done - obj_suffix="`echo $object | sed 's/^.*\././'`" + obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - sed '1,2d' "$tmpdepfile" | tr ' ' ' -' | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + # makedepend may prepend the VPATH from the source file name to the object. + # No need to regex-escape $object, excess matching of '.' is harmless. + sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process the last invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed '1,2d' "$tmpdepfile" \ + | tr ' ' "$nl" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; @@ -495,13 +680,13 @@ cpp) # Remove the call to Libtool. if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do + while test "X$1" != 'X--mode=compile'; do shift done shift fi - # Remove `-o $object'. + # Remove '-o $object'. IFS=" " for arg do @@ -520,10 +705,10 @@ cpp) esac done - "$@" -E | - sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ - -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | - sed '$ s: \\$::' > "$tmpdepfile" + "$@" -E \ + | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" @@ -533,35 +718,56 @@ cpp) msvisualcpp) # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout, regardless of -o, - # because we must use -o when running libtool. + # always write the preprocessed file to stdout. "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + IFS=" " for arg do case "$arg" in + -o) + shift + ;; + $object) + shift + ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") - set fnord "$@" - shift - shift - ;; + set fnord "$@" + shift + shift + ;; *) - set fnord "$@" "$arg" - shift - shift - ;; + set fnord "$@" "$arg" + shift + shift + ;; esac done - "$@" -E | - sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" - . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" - echo " " >> "$depfile" - . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" + echo "$tab" >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + none) exec "$@" ;; @@ -580,5 +786,6 @@ exit 0 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" # End: diff --git a/toolkit/crashreporter/google-breakpad/autotools/install-sh b/toolkit/crashreporter/google-breakpad/autotools/install-sh index 4fbbae7b7ff9..377bb8687ffe 100755 --- a/toolkit/crashreporter/google-breakpad/autotools/install-sh +++ b/toolkit/crashreporter/google-breakpad/autotools/install-sh @@ -1,7 +1,7 @@ #!/bin/sh # install - install a program, script, or datafile -scriptversion=2006-10-14.15 +scriptversion=2011-11-20.07; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the @@ -35,7 +35,7 @@ scriptversion=2006-10-14.15 # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent -# `make' implicit rules from creating a file called install from it +# 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written @@ -48,7 +48,7 @@ IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. -doit="${DOITPROG-}" +doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else @@ -58,34 +58,49 @@ fi # Put in absolute file names if you don't have them in your path; # or use environment vars. -mvprog="${MVPROG-mv}" -cpprog="${CPPROG-cp}" -chmodprog="${CHMODPROG-chmod}" -chownprog="${CHOWNPROG-chown}" -chgrpprog="${CHGRPPROG-chgrp}" -stripprog="${STRIPPROG-strip}" -rmprog="${RMPROG-rm}" -mkdirprog="${MKDIRPROG-mkdir}" +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' -posix_glob= posix_mkdir= # Desired mode of installed file. mode=0755 +chgrpcmd= chmodcmd=$chmodprog chowncmd= -chgrpcmd= -stripcmd= +mvcmd=$mvprog rmcmd="$rmprog -f" -mvcmd="$mvprog" +stripcmd= + src= dst= dir_arg= -dstarg= +dst_arg= + +copy_on_change=false no_target_directory= -usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... @@ -95,65 +110,59 @@ In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --c (ignored) --d create directories instead of installing files. --g GROUP $chgrpprog installed files to GROUP. --m MODE $chmodprog installed files to MODE. --o USER $chownprog installed files to USER. --s $stripprog installed files. --t DIRECTORY install into DIRECTORY. --T report an error if DSTFILE is a directory. ---help display this help and exit. ---version display version info and exit. + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. Environment variables override the default commands: - CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG " while test $# -ne 0; do case $1 in - -c) shift - continue;; + -c) ;; - -d) dir_arg=true - shift - continue;; + -C) copy_on_change=true;; + + -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" - shift - shift - continue;; + shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 - shift - shift case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac - continue;; + shift;; -o) chowncmd="$chownprog $2" - shift - shift - continue;; + shift;; - -s) stripcmd=$stripprog - shift - continue;; + -s) stripcmd=$stripprog;; - -t) dstarg=$2 - shift - shift - continue;; + -t) dst_arg=$2 + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; - -T) no_target_directory=true - shift - continue;; + -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; @@ -165,21 +174,26 @@ while test $# -ne 0; do *) break;; esac + shift done -if test $# -ne 0 && test -z "$dir_arg$dstarg"; then +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do - if test -n "$dstarg"; then + if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. - set fnord "$@" "$dstarg" + set fnord "$@" "$dst_arg" shift # fnord fi shift # arg - dstarg=$arg + dst_arg=$arg + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac done fi @@ -188,13 +202,17 @@ if test $# -eq 0; then echo "$0: no input file specified." >&2 exit 1 fi - # It's OK to call `install-sh -d' without argument. + # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then - trap '(exit $?); exit' 1 2 13 15 + do_exit='(exit $ret); exit $ret' + trap "ret=129; $do_exit" 1 + trap "ret=130; $do_exit" 2 + trap "ret=141; $do_exit" 13 + trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. @@ -222,9 +240,9 @@ fi for src do - # Protect names starting with `-'. + # Protect names problematic for 'test' and other utilities. case $src in - -*) src=./$src ;; + -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then @@ -242,22 +260,17 @@ do exit 1 fi - if test -z "$dstarg"; then + if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi - - dst=$dstarg - # Protect names starting with `-'. - case $dst in - -*) dst=./$dst ;; - esac + dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then - echo "$0: $dstarg: Is a directory" >&2 + echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst @@ -341,7 +354,7 @@ do if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writeable bit of parent directory when it shouldn't. + # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in @@ -378,33 +391,26 @@ do # directory the slow way, step by step, checking for races as we go. case $dstdir in - /*) prefix=/ ;; - -*) prefix=./ ;; - *) prefix= ;; + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; esac - case $posix_glob in - '') - if (set -f) 2>/dev/null; then - posix_glob=true - else - posix_glob=false - fi ;; - esac + eval "$initialize_posix_glob" oIFS=$IFS IFS=/ - $posix_glob && set -f + $posix_glob set -f set fnord $dstdir shift - $posix_glob && set +f + $posix_glob set +f IFS=$oIFS prefixes= for d do - test -z "$d" && continue + test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then @@ -459,41 +465,54 @@ do # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # - { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ - && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ - && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ - && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && - # Now rename the file to the real destination. - { $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null \ - || { - # The rename failed, perhaps because mv can't rename something else - # to itself, or perhaps because mv is so ancient that it does not - # support -f. + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - if test -f "$dst"; then - $doit $rmcmd -f "$dst" 2>/dev/null \ - || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null \ - && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }; }\ - || { - echo "$0: cannot unlink or rename $dst" >&2 - (exit 1); exit 1 - } - else - : - fi - } && + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dst" - } - } || exit 1 + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 trap '' 0 fi @@ -503,5 +522,6 @@ done # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" # End: diff --git a/toolkit/crashreporter/google-breakpad/autotools/missing b/toolkit/crashreporter/google-breakpad/autotools/missing index 1c8ff7049d8f..db98974ff5d5 100755 --- a/toolkit/crashreporter/google-breakpad/autotools/missing +++ b/toolkit/crashreporter/google-breakpad/autotools/missing @@ -1,11 +1,10 @@ #! /bin/sh -# Common stub for a few missing GNU programs while installing. +# Common wrapper for a few potentially missing GNU programs. -scriptversion=2006-05-10.23 +scriptversion=2013-10-28.13; # UTC -# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006 -# Free Software Foundation, Inc. -# Originally by Fran,cois Pinard , 1996. +# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -18,9 +17,7 @@ scriptversion=2006-05-10.23 # GNU General Public License for more details. # You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301, USA. +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -28,66 +25,40 @@ scriptversion=2006-05-10.23 # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then - echo 1>&2 "Try \`$0 --help' for more information" + echo 1>&2 "Try '$0 --help' for more information" exit 1 fi -run=: -sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' -sed_minuso='s/.* -o \([^ ]*\).*/\1/p' - -# In the cases where this matters, `missing' is being run in the -# srcdir already. -if test -f configure.ac; then - configure_ac=configure.ac -else - configure_ac=configure.in -fi - -msg="missing on your system" - case $1 in ---run) - # Try to run requested program, and just exit if it succeeds. - run= - shift - "$@" && exit 0 - # Exit code 63 means version mismatch. This often happens - # when the user try to use an ancient version of a tool on - # a file that requires a minimum version. In this case we - # we should proceed has if the program had been absent, or - # if --run hadn't been passed. - if test $? = 63; then - run=: - msg="probably too old" - fi - ;; + + --is-lightweight) + # Used by our autoconf macros to check whether the available missing + # script is modern enough. + exit 0 + ;; + + --run) + # Back-compat with the calling convention used by older automake. + shift + ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... -Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an -error status if there is no known handling for PROGRAM. +Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due +to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit - --run try to run the given command, and emulate it if it fails Supported PROGRAM values: - aclocal touch file \`aclocal.m4' - autoconf touch file \`configure' - autoheader touch file \`config.h.in' - autom4te touch the output file, or create a stub one - automake touch all \`Makefile.in' files - bison create \`y.tab.[ch]', if possible, from existing .[ch] - flex create \`lex.yy.c', if possible, from existing .c - help2man touch the output file - lex create \`lex.yy.c', if possible, from existing .c - makeinfo touch the output file - tar try tar, gnutar, gtar, then tar without non-portable flags - yacc create \`y.tab.[ch]', if possible, from existing .[ch] + aclocal autoconf autoheader autom4te automake makeinfo + bison yacc flex lex help2man + +Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and +'g' are ignored when checking the name. Send bug reports to ." exit $? @@ -99,269 +70,146 @@ Send bug reports to ." ;; -*) - echo 1>&2 "$0: Unknown \`$1' option" - echo 1>&2 "Try \`$0 --help' for more information" + echo 1>&2 "$0: unknown '$1' option" + echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac -# Now exit if we have it, but it failed. Also exit now if we -# don't have it and --version was passed (most likely to detect -# the program). -case $1 in - lex|yacc) - # Not GNU programs, they don't have --version. +# Run the given program, remember its exit status. +"$@"; st=$? + +# If it succeeded, we are done. +test $st -eq 0 && exit 0 + +# Also exit now if we it failed (or wasn't found), and '--version' was +# passed; such an option is passed most likely to detect whether the +# program is present and works. +case $2 in --version|--help) exit $st;; esac + +# Exit code 63 means version mismatch. This often happens when the user +# tries to use an ancient version of a tool on a file that requires a +# minimum version. +if test $st -eq 63; then + msg="probably too old" +elif test $st -eq 127; then + # Program was missing. + msg="missing on your system" +else + # Program was found and executed, but failed. Give up. + exit $st +fi + +perl_URL=http://www.perl.org/ +flex_URL=http://flex.sourceforge.net/ +gnu_software_URL=http://www.gnu.org/software + +program_details () +{ + case $1 in + aclocal|automake) + echo "The '$1' program is part of the GNU Automake package:" + echo "<$gnu_software_URL/automake>" + echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/autoconf>" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + autoconf|autom4te|autoheader) + echo "The '$1' program is part of the GNU Autoconf package:" + echo "<$gnu_software_URL/autoconf/>" + echo "It also requires GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + esac +} + +give_advice () +{ + # Normalize program name to check for. + normalized_program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + + printf '%s\n' "'$1' is $msg." + + configure_deps="'configure.ac' or m4 files included by 'configure.ac'" + case $normalized_program in + autoconf*) + echo "You should only need it if you modified 'configure.ac'," + echo "or m4 files included by it." + program_details 'autoconf' + ;; + autoheader*) + echo "You should only need it if you modified 'acconfig.h' or" + echo "$configure_deps." + program_details 'autoheader' + ;; + automake*) + echo "You should only need it if you modified 'Makefile.am' or" + echo "$configure_deps." + program_details 'automake' + ;; + aclocal*) + echo "You should only need it if you modified 'acinclude.m4' or" + echo "$configure_deps." + program_details 'aclocal' + ;; + autom4te*) + echo "You might have modified some maintainer files that require" + echo "the 'autom4te' program to be rebuilt." + program_details 'autom4te' + ;; + bison*|yacc*) + echo "You should only need it if you modified a '.y' file." + echo "You may want to install the GNU Bison package:" + echo "<$gnu_software_URL/bison/>" + ;; + lex*|flex*) + echo "You should only need it if you modified a '.l' file." + echo "You may want to install the Fast Lexical Analyzer package:" + echo "<$flex_URL>" + ;; + help2man*) + echo "You should only need it if you modified a dependency" \ + "of a man page." + echo "You may want to install the GNU Help2man package:" + echo "<$gnu_software_URL/help2man/>" ;; + makeinfo*) + echo "You should only need it if you modified a '.texi' file, or" + echo "any other file indirectly affecting the aspect of the manual." + echo "You might want to install the Texinfo package:" + echo "<$gnu_software_URL/texinfo/>" + echo "The spurious makeinfo call might also be the consequence of" + echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" + echo "want to install GNU make:" + echo "<$gnu_software_URL/make/>" + ;; + *) + echo "You might have modified some files without having the proper" + echo "tools for further handling them. Check the 'README' file, it" + echo "often tells you about the needed prerequisites for installing" + echo "this package. You may also peek at any GNU archive site, in" + echo "case some other package contains this missing '$1' program." + ;; + esac +} - tar) - if test -n "$run"; then - echo 1>&2 "ERROR: \`tar' requires --run" - exit 1 - elif test "x$2" = "x--version" || test "x$2" = "x--help"; then - exit 1 - fi - ;; +give_advice "$1" | sed -e '1s/^/WARNING: /' \ + -e '2,$s/^/ /' >&2 - *) - if test -z "$run" && ($1 --version) > /dev/null 2>&1; then - # We have it, but it failed. - exit 1 - elif test "x$2" = "x--version" || test "x$2" = "x--help"; then - # Could not run --version or --help. This is probably someone - # running `$TOOL --version' or `$TOOL --help' to check whether - # $TOOL exists and not knowing $TOOL uses missing. - exit 1 - fi - ;; -esac - -# If it does not exist, or fails to run (possibly an outdated version), -# try to emulate it. -case $1 in - aclocal*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`acinclude.m4' or \`${configure_ac}'. You might want - to install the \`Automake' and \`Perl' packages. Grab them from - any GNU archive site." - touch aclocal.m4 - ;; - - autoconf) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`${configure_ac}'. You might want to install the - \`Autoconf' and \`GNU m4' packages. Grab them from any GNU - archive site." - touch configure - ;; - - autoheader) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`acconfig.h' or \`${configure_ac}'. You might want - to install the \`Autoconf' and \`GNU m4' packages. Grab them - from any GNU archive site." - files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` - test -z "$files" && files="config.h" - touch_files= - for f in $files; do - case $f in - *:*) touch_files="$touch_files "`echo "$f" | - sed -e 's/^[^:]*://' -e 's/:.*//'`;; - *) touch_files="$touch_files $f.in";; - esac - done - touch $touch_files - ;; - - automake*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. - You might want to install the \`Automake' and \`Perl' packages. - Grab them from any GNU archive site." - find . -type f -name Makefile.am -print | - sed 's/\.am$/.in/' | - while read f; do touch "$f"; done - ;; - - autom4te) - echo 1>&2 "\ -WARNING: \`$1' is needed, but is $msg. - You might have modified some files without having the - proper tools for further handling them. - You can get \`$1' as part of \`Autoconf' from any GNU - archive site." - - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -f "$file"; then - touch $file - else - test -z "$file" || exec >$file - echo "#! /bin/sh" - echo "# Created by GNU Automake missing as a replacement of" - echo "# $ $@" - echo "exit 0" - chmod +x $file - exit 1 - fi - ;; - - bison|yacc) - echo 1>&2 "\ -WARNING: \`$1' $msg. You should only need it if - you modified a \`.y' file. You may need the \`Bison' package - in order for those modifications to take effect. You can get - \`Bison' from any GNU archive site." - rm -f y.tab.c y.tab.h - if test $# -ne 1; then - eval LASTARG="\${$#}" - case $LASTARG in - *.y) - SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" y.tab.c - fi - SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" y.tab.h - fi - ;; - esac - fi - if test ! -f y.tab.h; then - echo >y.tab.h - fi - if test ! -f y.tab.c; then - echo 'main() { return 0; }' >y.tab.c - fi - ;; - - lex|flex) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a \`.l' file. You may need the \`Flex' package - in order for those modifications to take effect. You can get - \`Flex' from any GNU archive site." - rm -f lex.yy.c - if test $# -ne 1; then - eval LASTARG="\${$#}" - case $LASTARG in - *.l) - SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" lex.yy.c - fi - ;; - esac - fi - if test ! -f lex.yy.c; then - echo 'main() { return 0; }' >lex.yy.c - fi - ;; - - help2man) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a dependency of a manual page. You may need the - \`Help2man' package in order for those modifications to take - effect. You can get \`Help2man' from any GNU archive site." - - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -f "$file"; then - touch $file - else - test -z "$file" || exec >$file - echo ".ab help2man is required to generate this page" - exit 1 - fi - ;; - - makeinfo) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a \`.texi' or \`.texinfo' file, or any other file - indirectly affecting the aspect of the manual. The spurious - call might also be the consequence of using a buggy \`make' (AIX, - DU, IRIX). You might want to install the \`Texinfo' package or - the \`GNU make' package. Grab either from any GNU archive site." - # The file to touch is that specified with -o ... - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -z "$file"; then - # ... or it is the one specified with @setfilename ... - infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` - file=`sed -n ' - /^@setfilename/{ - s/.* \([^ ]*\) *$/\1/ - p - q - }' $infile` - # ... or it is derived from the source name (dir/f.texi becomes f.info) - test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info - fi - # If the file does not exist, the user really needs makeinfo; - # let's fail without touching anything. - test -f $file || exit 1 - touch $file - ;; - - tar) - shift - - # We have already tried tar in the generic part. - # Look for gnutar/gtar before invocation to avoid ugly error - # messages. - if (gnutar --version > /dev/null 2>&1); then - gnutar "$@" && exit 0 - fi - if (gtar --version > /dev/null 2>&1); then - gtar "$@" && exit 0 - fi - firstarg="$1" - if shift; then - case $firstarg in - *o*) - firstarg=`echo "$firstarg" | sed s/o//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - case $firstarg in - *h*) - firstarg=`echo "$firstarg" | sed s/h//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - fi - - echo 1>&2 "\ -WARNING: I can't seem to be able to run \`tar' with the given arguments. - You may want to install GNU tar or Free paxutils, or check the - command line arguments." - exit 1 - ;; - - *) - echo 1>&2 "\ -WARNING: \`$1' is needed, and is $msg. - You might have modified some files without having the - proper tools for further handling them. Check the \`README' file, - it often tells you about the needed prerequisites for installing - this package. You may also peek at any GNU archive site, in case - some other package would contain this missing \`$1' program." - exit 1 - ;; -esac - -exit 0 +# Propagate the correct exit status (expected to be 127 for a program +# not found, 63 for a program that failed due to version mismatch). +exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" # End: diff --git a/toolkit/crashreporter/google-breakpad/autotools/test-driver b/toolkit/crashreporter/google-breakpad/autotools/test-driver new file mode 100755 index 000000000000..d30605660a06 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/autotools/test-driver @@ -0,0 +1,139 @@ +#! /bin/sh +# test-driver - basic testsuite driver script. + +scriptversion=2013-07-13.22; # UTC + +# Copyright (C) 2011-2013 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +# Make unconditional expansion of undefined variables an error. This +# helps a lot in preventing typo-related bugs. +set -u + +usage_error () +{ + echo "$0: $*" >&2 + print_usage >&2 + exit 2 +} + +print_usage () +{ + cat <$log_file 2>&1 +estatus=$? +if test $enable_hard_errors = no && test $estatus -eq 99; then + estatus=1 +fi + +case $estatus:$expect_failure in + 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; + 0:*) col=$grn res=PASS recheck=no gcopy=no;; + 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; + 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; + *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; + *:*) col=$red res=FAIL recheck=yes gcopy=yes;; +esac + +# Report outcome to console. +echo "${col}${res}${std}: $test_name" + +# Register the test result, and other relevant metadata. +echo ":test-result: $res" > $trs_file +echo ":global-test-result: $res" >> $trs_file +echo ":recheck: $recheck" >> $trs_file +echo ":copy-in-global-log: $gcopy" >> $trs_file + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/toolkit/crashreporter/google-breakpad/breakpad-client.pc.in b/toolkit/crashreporter/google-breakpad/breakpad-client.pc.in new file mode 100644 index 000000000000..fcd2fa27e72c --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/breakpad-client.pc.in @@ -0,0 +1,10 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@/@PACKAGE_NAME@ + +Name: google-breakpad-client +Description: An open-source multi-platform crash reporting system +Version: @PACKAGE_VERSION@ +Libs: -L${libdir} -lbreakpad_client @PTHREAD_LIBS@ +Cflags: -I${includedir} @PTHREAD_CFLAGS@ diff --git a/toolkit/crashreporter/google-breakpad/breakpad.pc.in b/toolkit/crashreporter/google-breakpad/breakpad.pc.in new file mode 100644 index 000000000000..9aec9f8cb436 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/breakpad.pc.in @@ -0,0 +1,10 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@/@PACKAGE_NAME@ + +Name: google-breakpad +Description: An open-source multi-platform crash reporting system +Version: @PACKAGE_VERSION@ +Libs: -L${libdir} -lbreakpad @PTHREAD_LIBS@ +Cflags: -I${includedir} @PTHREAD_CFLAGS@ diff --git a/toolkit/crashreporter/google-breakpad/codereview.settings b/toolkit/crashreporter/google-breakpad/codereview.settings index 022e7a333974..2228d565a75e 100644 --- a/toolkit/crashreporter/google-breakpad/codereview.settings +++ b/toolkit/crashreporter/google-breakpad/codereview.settings @@ -1,5 +1,5 @@ # This file is used by gcl to get repository specific information. -CODE_REVIEW_SERVER: breakpad.appspot.com +CODE_REVIEW_SERVER: codereview.chromium.org CC_LIST: google-breakpad-dev@googlegroups.com TRY_ON_UPLOAD: False -VIEW_VC: http://code.google.com/p/google-breakpad/source/detail?r= +VIEW_VC: https://chromium.googlesource.com/breakpad/breakpad/+/ diff --git a/toolkit/crashreporter/google-breakpad/configure b/toolkit/crashreporter/google-breakpad/configure index 050260ad9ed4..2bf5fe0a0d42 100755 --- a/toolkit/crashreporter/google-breakpad/configure +++ b/toolkit/crashreporter/google-breakpad/configure @@ -1,13 +1,11 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.68 for breakpad 0.1. +# Generated by GNU Autoconf 2.69 for breakpad 0.1. # # Report bugs to . # # -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software -# Foundation, Inc. +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation @@ -136,6 +134,31 @@ export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh @@ -169,7 +192,8 @@ if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi -test x\$exitcode = x0 || exit 1" +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && @@ -214,21 +238,25 @@ IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : - # We cannot yet assume a decent shell, so we have to provide a - # neutralization value for shells without unset; and this also - # works around shells that cannot unset nonexistent variables. - # Preserve -v and -x to the replacement shell. - BASH_ENV=/dev/null - ENV=/dev/null - (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV - export CONFIG_SHELL - case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; - esac - exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 fi if test x$as_have_required = xno; then : @@ -331,6 +359,14 @@ $as_echo X"$as_dir" | } # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take @@ -452,6 +488,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). @@ -486,16 +526,16 @@ if (echo >conf$$.file) 2>/dev/null; then # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. + # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' + as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else - as_ln_s='cp -p' + as_ln_s='cp -pR' fi else - as_ln_s='cp -p' + as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null @@ -507,28 +547,8 @@ else as_mkdir_p=false fi -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x +as_test_x='test -x' +as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -565,7 +585,7 @@ PACKAGE_STRING='breakpad 0.1' PACKAGE_BUGREPORT='google-breakpad-dev@googlegroups.com' PACKAGE_URL='' -ac_unique_file="README" +ac_unique_file="README.md" # Factoring default headers for most tests. ac_includes_default="\ #include @@ -654,6 +674,13 @@ CPPFLAGS LDFLAGS CFLAGS CC +MAINT +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +AM_DEFAULT_V +AM_V am__untar am__tar AMTAR @@ -726,8 +753,11 @@ SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking +enable_silent_rules +enable_maintainer_mode enable_dependency_tracking enable_m32 +enable_largefile enable_processor enable_tools enable_selftest @@ -1201,8 +1231,6 @@ target=$target_alias if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe - $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used" >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi @@ -1366,9 +1394,17 @@ Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors + --enable-silent-rules less verbose build output (undo: "make V=1") + --disable-silent-rules verbose build output (undo: "make V=0") + --enable-maintainer-mode + enable make rules and dependencies not useful (and + sometimes confusing) to the casual installer + --enable-dependency-tracking + do not reject slow dependency extractors + --disable-dependency-tracking + speeds up one-time build --enable-m32 Compile/build with -m32 (default is no) + --disable-largefile omit support for large files --disable-processor Don't build processor library (default is no) --disable-tools Don't build tool binaries (default is no) --enable-selftest Run extra tests with "make check" (may conflict with @@ -1455,9 +1491,9 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF breakpad configure 0.1 -generated by GNU Autoconf 2.68 +generated by GNU Autoconf 2.69 -Copyright (C) 2010 Free Software Foundation, Inc. +Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -1650,7 +1686,7 @@ $as_echo "$ac_try_echo"; } >&5 test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext + test -x conftest$ac_exeext }; then : ac_retval=0 else @@ -1795,7 +1831,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by breakpad $as_me 0.1, which was -generated by GNU Autoconf 2.68. Invocation command line was +generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2245,7 +2281,7 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac -am__api_version='1.11' +am__api_version='1.15' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or @@ -2284,7 +2320,7 @@ case $as_dir/ in #(( # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. @@ -2342,9 +2378,6 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } -# Just in case -sleep 1 -echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' @@ -2355,32 +2388,40 @@ case `pwd` in esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) - as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; + as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac -# Do `set' in a subshell so we don't clobber the current shell's +# Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - as_fn_error $? "ls -t appears to fail. Make sure there is not a broken -alias in your environment" "$LINENO" 5 - fi + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken + alias in your environment" "$LINENO" 5 + fi + if test "$2" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done test "$2" = conftest.file ) then @@ -2392,6 +2433,16 @@ Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi + +rm -f conftest.file + test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. @@ -2402,8 +2453,8 @@ test "$program_suffix" != NONE && ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in @@ -2414,15 +2465,15 @@ if test x"${MISSING+set}" != xset; then esac fi # Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " else am_missing_run= - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 -$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi -if test x"${install_sh}" != xset; then +if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; @@ -2431,10 +2482,10 @@ if test x"${install_sh}" != xset; then esac fi -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. +# will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. @@ -2453,7 +2504,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -2493,7 +2544,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -2544,7 +2595,7 @@ do test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do - { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ @@ -2573,12 +2624,6 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } -mkdir_p="$MKDIR_P" -case $mkdir_p in - [\\/$]* | ?:[\\/]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; -esac - for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -2597,7 +2642,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -2661,6 +2706,45 @@ else fi rmdir .tst 2>/dev/null +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=1;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." @@ -2711,102 +2795,213 @@ AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +mkdir_p='$(MKDIR_P)' + +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5 -$as_echo_n "checking how to create a ustar tar archive... " >&6; } -# Loop over all known methods to create a tar archive until one works. +# We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar plaintar pax cpio none' -_am_tools=${am_cv_prog_tar_ustar-$_am_tools} -# Do not fold the above two line into one, because Tru64 sh and -# Solaris sh will not grok spaces in the rhs of `-'. -for _am_tool in $_am_tools -do - case $_am_tool in - gnutar) - for _am_tar in tar gnutar gtar; - do - { echo "$as_me:$LINENO: $_am_tar --version" >&5 + +# The POSIX 1988 'ustar' format is defined with fixed-size fields. + # There is notably a 21 bits limit for the UID and the GID. In fact, + # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 + # and bug#13588). + am_max_uid=2097151 # 2^21 - 1 + am_max_gid=$am_max_uid + # The $UID and $GID variables are not portable, so we need to resort + # to the POSIX-mandated id(1) utility. Errors in the 'id' calls + # below are definitely unexpected, so allow the users to see them + # (that is, avoid stderr redirection). + am_uid=`id -u || echo unknown` + am_gid=`id -g || echo unknown` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether UID '$am_uid' is supported by ustar format" >&5 +$as_echo_n "checking whether UID '$am_uid' is supported by ustar format... " >&6; } + if test $am_uid -le $am_max_uid; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + _am_tools=none + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether GID '$am_gid' is supported by ustar format" >&5 +$as_echo_n "checking whether GID '$am_gid' is supported by ustar format... " >&6; } + if test $am_gid -le $am_max_gid; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + _am_tools=none + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5 +$as_echo_n "checking how to create a ustar tar archive... " >&6; } + + # Go ahead even if we have the value already cached. We do so because we + # need to set the values for the 'am__tar' and 'am__untar' variables. + _am_tools=${am_cv_prog_tar_ustar-$_am_tools} + + for _am_tool in $_am_tools; do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; do + { echo "$as_me:$LINENO: $_am_tar --version" >&5 ($_am_tar --version) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && break - done - am__tar="$_am_tar --format=ustar -chf - "'"$$tardir"' - am__tar_="$_am_tar --format=ustar -chf - "'"$tardir"' - am__untar="$_am_tar -xf -" - ;; - plaintar) - # Must skip GNU tar: if it does not support --format= it doesn't create - # ustar tarball either. - (tar --version) >/dev/null 2>&1 && continue - am__tar='tar chf - "$$tardir"' - am__tar_='tar chf - "$tardir"' - am__untar='tar xf -' - ;; - pax) - am__tar='pax -L -x ustar -w "$$tardir"' - am__tar_='pax -L -x ustar -w "$tardir"' - am__untar='pax -r' - ;; - cpio) - am__tar='find "$$tardir" -print | cpio -o -H ustar -L' - am__tar_='find "$tardir" -print | cpio -o -H ustar -L' - am__untar='cpio -i -H ustar -d' - ;; - none) - am__tar=false - am__tar_=false - am__untar=false - ;; - esac + done + am__tar="$_am_tar --format=ustar -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=ustar -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x ustar -w "$$tardir"' + am__tar_='pax -L -x ustar -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H ustar -L' + am__tar_='find "$tardir" -print | cpio -o -H ustar -L' + am__untar='cpio -i -H ustar -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac - # If the value was cached, stop now. We just wanted to have am__tar - # and am__untar set. - test -n "${am_cv_prog_tar_ustar}" && break + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_ustar}" && break - # tar/untar a dummy directory, and stop if the command works - rm -rf conftest.dir - mkdir conftest.dir - echo GrepMe > conftest.dir/file - { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5 + # tar/untar a dummy directory, and stop if the command works. + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5 (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } - rm -rf conftest.dir - if test -s conftest.tar; then - { echo "$as_me:$LINENO: $am__untar &5 + rm -rf conftest.dir + if test -s conftest.tar; then + { echo "$as_me:$LINENO: $am__untar &5 ($am__untar &5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } - grep GrepMe conftest.dir/file >/dev/null 2>&1 && break - fi -done -rm -rf conftest.dir + { echo "$as_me:$LINENO: cat conftest.dir/file" >&5 + (cat conftest.dir/file) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + grep GrepMe conftest.dir/file >/dev/null 2>&1 && break + fi + done + rm -rf conftest.dir -if ${am_cv_prog_tar_ustar+:} false; then : + if ${am_cv_prog_tar_ustar+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_prog_tar_ustar=$_am_tool fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5 $as_echo "$am_cv_prog_tar_ustar" >&6; } + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 + fi +fi + ac_config_headers="$ac_config_headers src/config.h" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + # Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + + + DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" @@ -2826,7 +3021,7 @@ am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. +# Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include @@ -2892,7 +3087,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -2932,7 +3127,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -2985,7 +3180,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3026,7 +3221,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue @@ -3084,7 +3279,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3128,7 +3323,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3574,8 +3769,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include -#include -#include +struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); @@ -3660,6 +3854,65 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } +if ${am_cv_prog_cc_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 + ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +$as_echo "$am_cv_prog_cc_c_o" >&6; } +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 @@ -3671,8 +3924,8 @@ else # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're @@ -3707,16 +3960,16 @@ else : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - # We check with `-c' and `-o' for the sake of the "dashmstdout" + # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in @@ -3725,8 +3978,8 @@ else test "$am__universal" = false || continue ;; nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else @@ -3734,7 +3987,7 @@ else fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has + # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} @@ -3806,8 +4059,8 @@ else # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're @@ -3840,16 +4093,16 @@ else : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - # We check with `-c' and `-o' for the sake of the "dashmstdout" + # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in @@ -3858,8 +4111,8 @@ else test "$am__universal" = false || continue ;; nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else @@ -3867,7 +4120,7 @@ else fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has + # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} @@ -3943,7 +4196,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -3983,7 +4236,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4036,7 +4289,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4077,7 +4330,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue @@ -4135,7 +4388,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4179,7 +4432,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4375,8 +4628,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include -#include -#include +struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); @@ -4461,6 +4713,65 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } +if ${am_cv_prog_cc_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 + ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +$as_echo "$am_cv_prog_cc_c_o" >&6; } +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 @@ -4472,8 +4783,8 @@ else # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're @@ -4508,16 +4819,16 @@ else : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - # We check with `-c' and `-o' for the sake of the "dashmstdout" + # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in @@ -4526,8 +4837,8 @@ else test "$am__universal" = false || continue ;; nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else @@ -4535,7 +4846,7 @@ else fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has + # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} @@ -4589,131 +4900,6 @@ else fi -if test "x$CC" != xcc; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 -$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5 -$as_echo_n "checking whether cc understands -c and -o together... " >&6; } -fi -set dummy $CC; ac_cc=`$as_echo "$2" | - sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` -if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -# Make sure it works both with $CC and with simple cc. -# We do the test twice because some compilers refuse to overwrite an -# existing .o file with -o, though they will create one. -ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' -rm -f conftest2.* -if { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && - test -f conftest2.$ac_objext && { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; -then - eval ac_cv_prog_cc_${ac_cc}_c_o=yes - if test "x$CC" != xcc; then - # Test first that cc exists at all. - if { ac_try='cc -c conftest.$ac_ext >&5' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' - rm -f conftest2.* - if { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && - test -f conftest2.$ac_objext && { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; - then - # cc works too. - : - else - # cc exists but doesn't like -o. - eval ac_cv_prog_cc_${ac_cc}_c_o=no - fi - fi - fi -else - eval ac_cv_prog_cc_${ac_cc}_c_o=no -fi -rm -f core conftest* - -fi -if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h - -fi - -# FIXME: we rely on the cache variable name because -# there is no other way. -set dummy $CC -am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` -eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o -if test "$am_t" != yes; then - # Losing compiler, so override with the script. - # FIXME: It is wrong to rewrite CC. - # But if we don't then we get into trouble of one sort or another. - # A longer-term fix would be to have automake use am__CC in this case, - # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" - CC="$am_aux_dir/compile $CC" -fi - ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -4880,7 +5066,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -4924,7 +5110,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5120,8 +5306,8 @@ else # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're @@ -5156,16 +5342,16 @@ else : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - # We check with `-c' and `-o' for the sake of the "dashmstdout" + # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in @@ -5174,8 +5360,8 @@ else test "$am__universal" = false || continue ;; nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else @@ -5183,7 +5369,7 @@ else fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has + # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} @@ -5254,7 +5440,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5294,7 +5480,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5338,6 +5524,26 @@ else fi # let the Makefile know if we're gcc +# Check whether --enable-m32 was given. +if test "${enable_m32+set}" = set; then : + enableval=$enable_m32; case "${enableval}" in + yes) + CFLAGS="${CFLAGS} -m32" + CXXFLAGS="${CXXFLAGS} -m32" + usem32=true + ;; + no) + usem32=false + ;; + *) + as_fn_error $? "bad value ${enableval} for --enable-m32" "$LINENO" 5 + ;; + esac +else + usem32=false +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 @@ -5356,7 +5562,7 @@ do for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue + as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in @@ -5422,7 +5628,7 @@ do for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue + as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in @@ -5580,6 +5786,206 @@ if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h +fi + +# Check whether --enable-largefile was given. +if test "${enable_largefile+set}" = set; then : + enableval=$enable_largefile; +fi + +if test "$enable_largefile" != no; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 +$as_echo_n "checking for special C compiler options needed for large files... " >&6; } +if ${ac_cv_sys_largefile_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_sys_largefile_CC=no + if test "$GCC" != yes; then + ac_save_CC=$CC + while :; do + # IRIX 6.2 and later do not support large files by default, + # so use the C compiler's -n32 option if that helps. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF + if ac_fn_c_try_compile "$LINENO"; then : + break +fi +rm -f core conftest.err conftest.$ac_objext + CC="$CC -n32" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_largefile_CC=' -n32'; break +fi +rm -f core conftest.err conftest.$ac_objext + break + done + CC=$ac_save_CC + rm -f conftest.$ac_ext + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 +$as_echo "$ac_cv_sys_largefile_CC" >&6; } + if test "$ac_cv_sys_largefile_CC" != no; then + CC=$CC$ac_cv_sys_largefile_CC + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 +$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } +if ${ac_cv_sys_file_offset_bits+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _FILE_OFFSET_BITS 64 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=64; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_file_offset_bits=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 +$as_echo "$ac_cv_sys_file_offset_bits" >&6; } +case $ac_cv_sys_file_offset_bits in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits +_ACEOF +;; +esac +rm -rf conftest* + if test $ac_cv_sys_file_offset_bits = unknown; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 +$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } +if ${ac_cv_sys_large_files+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _LARGE_FILES 1 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=1; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_large_files=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 +$as_echo "$ac_cv_sys_large_files" >&6; } +case $ac_cv_sys_large_files in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _LARGE_FILES $ac_cv_sys_large_files +_ACEOF +;; +esac +rm -rf conftest* + fi + + fi # =========================================================================== @@ -5821,7 +6227,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ax_pthread_config="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -5982,7 +6388,7 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_PTHREAD_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 @@ -6095,26 +6501,6 @@ else fi -# Check whether --enable-m32 was given. -if test "${enable_m32+set}" = set; then : - enableval=$enable_m32; case "${enableval}" in - yes) - CFLAGS="${CFLAGS} -m32" - CXXFLAGS="${CXXFLAGS} -m32" - usem32=true - ;; - no) - usem32=false - ;; - *) - as_fn_error $? "bad value ${enableval} for --enable-m32" "$LINENO" 5 - ;; - esac -else - usem32=false -fi - - # Check whether --enable-processor was given. if test "${enable_processor+set}" = set; then : enableval=$enable_processor; case "${enableval}" in @@ -6197,7 +6583,8 @@ else fi -ac_config_files="$ac_config_files Makefile" +ac_config_files="$ac_config_files breakpad.pc breakpad-client.pc Makefile" + cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -6293,7 +6680,6 @@ DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= -U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' @@ -6308,6 +6694,14 @@ LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 +$as_echo_n "checking that generated files are newer than configure... " >&6; } + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 +$as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' @@ -6316,6 +6710,10 @@ else am__EXEEXT_FALSE= fi +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -6658,16 +7056,16 @@ if (echo >conf$$.file) 2>/dev/null; then # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. + # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' + as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else - as_ln_s='cp -p' + as_ln_s='cp -pR' fi else - as_ln_s='cp -p' + as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null @@ -6727,28 +7125,16 @@ else as_mkdir_p=false fi -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -6770,7 +7156,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # values after options handling. ac_log=" This file was extended by breakpad $as_me 0.1, which was -generated by GNU Autoconf 2.68. Invocation command line was +generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -6836,10 +7222,10 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ breakpad config.status 0.1 -configured by $0, generated by GNU Autoconf 2.68, +configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" -Copyright (C) 2010 Free Software Foundation, Inc. +Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -6930,7 +7316,7 @@ fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then - set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' @@ -6966,6 +7352,8 @@ do case $ac_config_target in "src/config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "breakpad.pc") CONFIG_FILES="$CONFIG_FILES breakpad.pc" ;; + "breakpad-client.pc") CONFIG_FILES="$CONFIG_FILES breakpad-client.pc" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; @@ -7563,7 +7951,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;} case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { - # Autoconf 2.62 quotes --file arguments for eval, but not when files + # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in @@ -7576,7 +7964,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;} # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but + # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. @@ -7610,21 +7998,19 @@ $as_echo X"$mf" | continue fi # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. + # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue + test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || diff --git a/toolkit/crashreporter/google-breakpad/configure.ac b/toolkit/crashreporter/google-breakpad/configure.ac index 84295520fe32..42a3740bb351 100644 --- a/toolkit/crashreporter/google-breakpad/configure.ac +++ b/toolkit/crashreporter/google-breakpad/configure.ac @@ -32,13 +32,14 @@ AC_PREREQ(2.57) AC_INIT(breakpad, 0.1, google-breakpad-dev@googlegroups.com) dnl Sanity check: the argument is just a file that should exist. -AC_CONFIG_SRCDIR(README) +AC_CONFIG_SRCDIR(README.md) AC_CONFIG_AUX_DIR(autotools) AC_CONFIG_MACRO_DIR([m4]) AC_CANONICAL_HOST AM_INIT_AUTOMAKE(subdir-objects tar-ustar 1.11.1) AM_CONFIG_HEADER(src/config.h) +AM_MAINTAINER_MODE AM_PROG_AS AC_PROG_CC @@ -48,7 +49,28 @@ AC_PROG_CXX AC_PROG_RANLIB AM_CONDITIONAL(GCC, test "$GCC" = yes) # let the Makefile know if we're gcc +dnl This must come before all the feature tests below. +AC_ARG_ENABLE(m32, + AS_HELP_STRING([--enable-m32], + [Compile/build with -m32] + [(default is no)]), + [case "${enableval}" in + yes) + CFLAGS="${CFLAGS} -m32" + CXXFLAGS="${CXXFLAGS} -m32" + usem32=true + ;; + no) + usem32=false + ;; + *) + AC_MSG_ERROR(bad value ${enableval} for --enable-m32) + ;; + esac], + [usem32=false]) + AC_HEADER_STDC +AC_SYS_LARGEFILE m4_include(m4/ax_pthread.m4) AX_PTHREAD AC_CHECK_HEADERS([a.out.h]) @@ -69,25 +91,6 @@ case $host in esac AM_CONDITIONAL(ANDROID_HOST, test x$ANDROID_HOST = xtrue) -AC_ARG_ENABLE(m32, - AS_HELP_STRING([--enable-m32], - [Compile/build with -m32] - [(default is no)]), - [case "${enableval}" in - yes) - CFLAGS="${CFLAGS} -m32" - CXXFLAGS="${CXXFLAGS} -m32" - usem32=true - ;; - no) - usem32=false - ;; - *) - AC_MSG_ERROR(bad value ${enableval} for --enable-m32) - ;; - esac], - [usem32=false]) - AC_ARG_ENABLE(processor, AS_HELP_STRING([--disable-processor], [Don't build processor library] @@ -147,5 +150,10 @@ AC_ARG_ENABLE(selftest, [selftest=false]) AM_CONDITIONAL(SELFTEST, test x$selftest = xtrue) -AC_CONFIG_FILES([Makefile]) +AC_CONFIG_FILES(m4_flatten([ + breakpad.pc + breakpad-client.pc + Makefile +])) + AC_OUTPUT diff --git a/toolkit/crashreporter/google-breakpad/src/breakpad_googletest_includes.h b/toolkit/crashreporter/google-breakpad/src/breakpad_googletest_includes.h index 48a4cc1bb034..1cc324b2323a 100644 --- a/toolkit/crashreporter/google-breakpad/src/breakpad_googletest_includes.h +++ b/toolkit/crashreporter/google-breakpad/src/breakpad_googletest_includes.h @@ -33,4 +33,25 @@ #include "testing/gtest/include/gtest/gtest.h" #include "testing/include/gmock/gmock.h" +// If AddressSanitizer is used, NULL pointer dereferences generate SIGILL +// (illegal instruction) instead of SIGSEGV (segmentation fault). Also, +// the number of memory regions differs, so there is no point in running +// this test if AddressSanitizer is used. +// +// Ideally we'd use this attribute to disable ASAN on a per-func basis, +// but this doesn't seem to actually work, and it's changed names over +// time. So just stick with disabling the actual tests. +// http://crbug.com/304575 +//#define NO_ASAN __attribute__((no_sanitize_address)) +#if defined(__clang__) && defined(__has_feature) +// Have to keep this check sep from above as newer gcc will barf on it. +# if __has_feature(address_sanitizer) +# define ADDRESS_SANITIZER +# endif +#elif defined(__GNUC__) && defined(__SANITIZE_ADDRESS__) +# define ADDRESS_SANITIZER +#else +# undef ADDRESS_SANITIZER +#endif + #endif // BREAKPAD_GOOGLETEST_INCLUDES_H__ diff --git a/toolkit/crashreporter/google-breakpad/src/build/all.gyp b/toolkit/crashreporter/google-breakpad/src/build/all.gyp new file mode 100644 index 000000000000..4b59d917bb8d --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/build/all.gyp @@ -0,0 +1,41 @@ +# Copyright 2014 Google Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +{ + 'targets': [ + { + 'target_name': 'All', + 'type': 'none', + 'dependencies': [ + '../common/common.gyp:*', + '../processor/processor.gyp:*', + '../tools/tools.gyp:*', + ], + }, + ], +} diff --git a/toolkit/crashreporter/google-breakpad/src/client/windows/build/common.gypi b/toolkit/crashreporter/google-breakpad/src/build/common.gypi similarity index 72% rename from toolkit/crashreporter/google-breakpad/src/client/windows/build/common.gypi rename to toolkit/crashreporter/google-breakpad/src/build/common.gypi index dfd29bd0d210..b9466a325ad5 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/windows/build/common.gypi +++ b/toolkit/crashreporter/google-breakpad/src/build/common.gypi @@ -1,5 +1,4 @@ -# Copyright (c) 2010, Google Inc. -# All rights reserved. +# Copyright 2010 Google Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are @@ -32,34 +31,13 @@ # since gyp_chromium is automatically forcing its inclusion. { 'variables': { - # .gyp files or targets should set chromium_code to 1 if they build - # Chromium-specific code, as opposed to external code. This variable is - # used to control such things as the set of warnings to enable, and - # whether warnings are treated as errors. - 'chromium_code%': 0, - # Variables expected to be overriden on the GYP command line (-D) or by # ~/.gyp/include.gypi. # Putting a variables dict inside another variables dict looks kind of - # weird. This is done so that "branding" and "buildtype" are defined as - # variables within the outer variables dict here. This is necessary - # to get these variables defined for the conditions within this variables - # dict that operate on these variables. + # weird. This is necessary to get these variables defined for the conditions + # within this variables dict that operate on these variables. 'variables': { - # Override branding to select the desired branding flavor. - 'branding%': 'Chromium', - - # Override buildtype to select the desired build flavor. - # Dev - everyday build for development/testing - # Official - release build (generally implies additional processing) - # TODO(mmoss) Once 'buildtype' is fully supported (e.g. Windows gyp - # conversion is done), some of the things which are now controlled by - # 'branding', such as symbol generation, will need to be refactored based - # on 'buildtype' (i.e. we don't care about saving symbols for non-Official - # builds). - 'buildtype%': 'Dev', - 'variables': { # Compute the architecture that we're building on. 'conditions': [ @@ -73,49 +51,19 @@ 'host_arch%': 'ia32', }], ], - - # Whether we're building a ChromeOS build. We set the initial - # value at this level of nesting so it's available for the - # toolkit_views test below. - 'chromeos%': '0', }, - # Set default value of toolkit_views on for Windows and Chrome OS. - # We set it at this level of nesting so the value is available for - # other conditionals below. - 'conditions': [ - ['OS=="win" or chromeos==1', { - 'toolkit_views%': 1, - }, { - 'toolkit_views%': 0, - }], - ], - 'host_arch%': '<(host_arch)', # Default architecture we're building for is the architecture we're # building on. 'target_arch%': '<(host_arch)', - # We do want to build Chromium with Breakpad support in certain - # situations. I.e. for Chrome bot. - 'linux_chromium_breakpad%': 0, - # And if we want to dump symbols. - 'linux_chromium_dump_symbols%': 0, - # Also see linux_strip_binary below. - - # Copy conditionally-set chromeos variable out one scope. - 'chromeos%': '<(chromeos)', - # This variable tells WebCore.gyp and JavaScriptCore.gyp whether they are # are built under a chromium full build (1) or a webkit.org chromium # build (0). 'inside_chromium_build%': 1, - # Set to 1 to enable fast builds. It disables debug info for fastest - # compilation. - 'fastbuild%': 0, - # Set to 1 compile with -fPIC cflag on linux. This is a must for shared # libraries on linux x86-64 and arm. 'linux_fpic%': 0, @@ -123,10 +71,10 @@ # Python version. 'python_ver%': '2.5', - # Set ARM-v7 compilation flags - 'armv7%': 0, + # Determine ARM compilation flags. + 'arm_version%': 7, - # Set Neon compilation flags (only meaningful if armv7==1). + # Set Neon compilation flags (only meaningful if arm_version==7). 'arm_neon%': 1, # The system root for cross-compiles. Default: none. @@ -136,19 +84,12 @@ 'disable_sse2%': 0, }, - # Define branding and buildtype on the basis of their settings within the - # variables sub-dict above, unless overridden. - 'branding%': '<(branding)', - 'buildtype%': '<(buildtype)', 'target_arch%': '<(target_arch)', 'host_arch%': '<(host_arch)', - 'toolkit_views%': '<(toolkit_views)', - 'chromeos%': '<(chromeos)', 'inside_chromium_build%': '<(inside_chromium_build)', - 'fastbuild%': '<(fastbuild)', 'linux_fpic%': '<(linux_fpic)', 'python_ver%': '<(python_ver)', - 'armv7%': '<(armv7)', + 'arm_version%': '<(arm_version)', 'arm_neon%': '<(arm_neon)', 'sysroot%': '<(sysroot)', 'disable_sse2%': '<(disable_sse2)', @@ -245,7 +186,7 @@ 'linux_use_seccomp_sandbox%': 0, # Set to select the Title Case versions of strings in GRD files. - 'use_titlecase_in_grd_files%': 0, + 'use_titlecase_in_grd%': 0, # Used to disable Native Client at compile time, for platforms where it # isn't supported @@ -254,7 +195,7 @@ # Set Thumb compilation flags. 'arm_thumb%': 0, - # Set ARM fpu compilation flags (only meaningful if armv7==1 and + # Set ARM fpu compilation flags (only meaningful if arm_version==7 and # arm_neon==0). 'arm_fpu%': 'vfpv3', @@ -262,62 +203,6 @@ 'enable_new_npdevice_api%': 0, 'conditions': [ - ['OS=="linux" or OS=="freebsd" or OS=="openbsd"', { - # This will set gcc_version to XY if you are running gcc X.Y.*. - # This is used to tweak build flags for gcc 4.4. - 'gcc_version%': ' #import #include #include #include +#import "client/ios/handler/ios_exception_minidump_generator.h" #import "client/mac/crash_generation/ConfigFile.h" #import "client/mac/handler/exception_handler.h" #import "client/mac/handler/minidump_generator.h" #import "client/mac/sender/uploader.h" -#import "common/mac/SimpleStringDictionary.h" -#import "client/ios/handler/ios_exception_minidump_generator.h" #import "client/mac/handler/protected_memory_allocator.h" +#import "common/simple_string_dictionary.h" -#ifndef __EXCEPTIONS +#if !defined(__EXCEPTIONS) || (__clang__ && !__has_feature(cxx_exceptions)) // This file uses C++ try/catch (but shouldn't). Duplicate the macros from // allowing this file to work properly with // exceptions disabled even when other C++ libraries are used. #undef the try @@ -67,9 +59,7 @@ using google_breakpad::ConfigFile; using google_breakpad::EnsureDirectoryPathExists; -using google_breakpad::KeyValueEntry; using google_breakpad::SimpleStringDictionary; -using google_breakpad::SimpleStringDictionaryIterator; //============================================================================= // We want any memory allocations which are used by breakpad during the @@ -102,36 +92,32 @@ pthread_mutex_t gDictionaryMutex; // ProtectedMemoryLocker will unprotect this block after taking the lock. // Its destructor will first re-protect the memory then release the lock. class ProtectedMemoryLocker { -public: - // allocator may be NULL, in which case no Protect() or Unprotect() calls - // will be made, but a lock will still be taken + public: ProtectedMemoryLocker(pthread_mutex_t *mutex, ProtectedMemoryAllocator *allocator) - : mutex_(mutex), allocator_(allocator) { + : mutex_(mutex), + allocator_(allocator) { // Lock the mutex - assert(pthread_mutex_lock(mutex_) == 0); + __attribute__((unused)) int rv = pthread_mutex_lock(mutex_); + assert(rv == 0); // Unprotect the memory - if (allocator_ ) { - allocator_->Unprotect(); - } + allocator_->Unprotect(); } ~ProtectedMemoryLocker() { // First protect the memory - if (allocator_) { - allocator_->Protect(); - } + allocator_->Protect(); // Then unlock the mutex - assert(pthread_mutex_unlock(mutex_) == 0); + __attribute__((unused)) int rv = pthread_mutex_unlock(mutex_); + assert(rv == 0); }; -private: - // Keep anybody from ever creating one of these things not on the stack. - ProtectedMemoryLocker() { } + private: + ProtectedMemoryLocker(); ProtectedMemoryLocker(const ProtectedMemoryLocker&); - ProtectedMemoryLocker & operator=(ProtectedMemoryLocker&); + ProtectedMemoryLocker& operator=(const ProtectedMemoryLocker&); pthread_mutex_t *mutex_; ProtectedMemoryAllocator *allocator_; @@ -164,10 +150,17 @@ class Breakpad { void SetKeyValue(NSString *key, NSString *value); NSString *KeyValue(NSString *key); void RemoveKeyValue(NSString *key); + NSArray *CrashReportsToUpload(); NSString *NextCrashReportToUpload(); - void UploadNextReport(); + NSDictionary *NextCrashReportConfiguration(); + void UploadNextReport(NSDictionary *server_parameters); + void UploadReportWithConfiguration(NSDictionary *configuration, + NSDictionary *server_parameters); void UploadData(NSData *data, NSString *name, NSDictionary *server_parameters); + void HandleNetworkResponse(NSDictionary *configuration, + NSData *data, + NSError *error); NSDictionary *GenerateReport(NSDictionary *server_parameters); private: @@ -271,6 +264,7 @@ void Breakpad::UncaughtExceptionHandler(NSException *exception) { if (current_breakpad_) { current_breakpad_->HandleUncaughtException(exception); } + BreakpadRelease(current_breakpad_); } //============================================================================= @@ -290,7 +284,6 @@ bool Breakpad::Initialize(NSDictionary *parameters) { // Check for debugger if (IsDebuggerActive()) { - DEBUGLOG(stderr, "Debugger is active: Not installing handler\n"); return true; } @@ -329,8 +322,11 @@ bool Breakpad::ExtractParameters(NSDictionary *parameters) { NSString *urlStr = [parameters objectForKey:@BREAKPAD_URL]; NSString *vendor = [parameters objectForKey:@BREAKPAD_VENDOR]; - NSString *dumpSubdirectory = - [parameters objectForKey:@BREAKPAD_DUMP_DIRECTORY]; + // We check both parameters and the environment variable here. + char *envVarDumpSubdirectory = getenv(BREAKPAD_DUMP_DIRECTORY); + NSString *dumpSubdirectory = envVarDumpSubdirectory ? + [NSString stringWithUTF8String:envVarDumpSubdirectory] : + [parameters objectForKey:@BREAKPAD_DUMP_DIRECTORY]; NSDictionary *serverParameters = [parameters objectForKey:@BREAKPAD_SERVER_PARAMETER_DICT]; @@ -345,7 +341,7 @@ bool Breakpad::ExtractParameters(NSDictionary *parameters) { } } - if (!version) + if (!version.length) // Default nil or empty string to CFBundleVersion version = [parameters objectForKey:@"CFBundleVersion"]; if (!vendor) { @@ -366,17 +362,14 @@ bool Breakpad::ExtractParameters(NSDictionary *parameters) { // The product, version, and URL are required values. if (![product length]) { - DEBUGLOG(stderr, "Missing required product key.\n"); return false; } if (![version length]) { - DEBUGLOG(stderr, "Missing required version key.\n"); return false; } if (![urlStr length]) { - DEBUGLOG(stderr, "Missing required URL key.\n"); return false; } @@ -439,7 +432,7 @@ void Breakpad::RemoveKeyValue(NSString *key) { } //============================================================================= -NSString *Breakpad::NextCrashReportToUpload() { +NSArray *Breakpad::CrashReportsToUpload() { NSString *directory = KeyValue(@BREAKPAD_DUMP_DIRECTORY); if (!directory) return nil; @@ -447,20 +440,53 @@ NSString *Breakpad::NextCrashReportToUpload() { contentsOfDirectoryAtPath:directory error:nil]; NSArray *configs = [dirContents filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self BEGINSWITH 'Config-'"]]; - NSString *config = [configs lastObject]; + return configs; +} + +//============================================================================= +NSString *Breakpad::NextCrashReportToUpload() { + NSString *directory = KeyValue(@BREAKPAD_DUMP_DIRECTORY); + if (!directory) + return nil; + NSString *config = [CrashReportsToUpload() lastObject]; if (!config) return nil; return [NSString stringWithFormat:@"%@/%@", directory, config]; } //============================================================================= -void Breakpad::UploadNextReport() { - NSString *configFile = NextCrashReportToUpload(); - if (configFile) { - Uploader *uploader = [[[Uploader alloc] - initWithConfigFile:[configFile UTF8String]] autorelease]; - if (uploader) - [uploader report]; +NSDictionary *Breakpad::NextCrashReportConfiguration() { + return [Uploader readConfigurationDataFromFile:NextCrashReportToUpload()]; +} + +//============================================================================= +void Breakpad::HandleNetworkResponse(NSDictionary *configuration, + NSData *data, + NSError *error) { + Uploader *uploader = [[[Uploader alloc] + initWithConfig:configuration] autorelease]; + [uploader handleNetworkResponse:data withError:error]; +} + +//============================================================================= +void Breakpad::UploadReportWithConfiguration(NSDictionary *configuration, + NSDictionary *server_parameters) { + Uploader *uploader = [[[Uploader alloc] + initWithConfig:configuration] autorelease]; + if (!uploader) + return; + for (NSString *key in server_parameters) { + [uploader addServerParameter:[server_parameters objectForKey:key] + forKey:key]; + } + [uploader report]; +} + +//============================================================================= +void Breakpad::UploadNextReport(NSDictionary *server_parameters) { + NSDictionary *configuration = NextCrashReportConfiguration(); + if (configuration) { + return UploadReportWithConfiguration(configuration, server_parameters); } } @@ -469,10 +495,10 @@ void Breakpad::UploadData(NSData *data, NSString *name, NSDictionary *server_parameters) { NSMutableDictionary *config = [NSMutableDictionary dictionary]; - SimpleStringDictionaryIterator it(*config_params_); - while (const KeyValueEntry *next = it.Next()) { - [config setValue:[NSString stringWithUTF8String:next->GetValue()] - forKey:[NSString stringWithUTF8String:next->GetKey()]]; + SimpleStringDictionary::Iterator it(*config_params_); + while (const SimpleStringDictionary::Entry *next = it.Next()) { + [config setValue:[NSString stringWithUTF8String:next->value] + forKey:[NSString stringWithUTF8String:next->key]]; } Uploader *uploader = @@ -509,8 +535,7 @@ NSDictionary *Breakpad::GenerateReport(NSDictionary *server_parameters) { // Handle results. NSMutableDictionary *result = [NSMutableDictionary dictionary]; - NSString *dumpFullPath = [dumpDirAsNSString stringByAppendingPathComponent: - [NSString stringWithUTF8String:dumpFilename.c_str()]]; + NSString *dumpFullPath = [NSString stringWithUTF8String:dumpFilename.c_str()]; [result setValue:dumpFullPath forKey:@BREAKPAD_OUTPUT_DUMP_FILE]; [result setValue:[NSString stringWithUTF8String:config_file.GetFilePath()] @@ -521,8 +546,6 @@ NSDictionary *Breakpad::GenerateReport(NSDictionary *server_parameters) { //============================================================================= bool Breakpad::HandleMinidump(const char *dump_dir, const char *minidump_id) { - DEBUGLOG(stderr, "Breakpad: a minidump has been created.\n"); - config_file_.WriteFile(dump_dir, config_params_, dump_dir, @@ -778,31 +801,84 @@ void BreakpadRemoveKeyValue(BreakpadRef ref, NSString *key) { } //============================================================================= -bool BreakpadHasCrashReportToUpload(BreakpadRef ref) { +int BreakpadGetCrashReportCount(BreakpadRef ref) { try { // Not called at exception time Breakpad *breakpad = (Breakpad *)ref; if (breakpad) { - return breakpad->NextCrashReportToUpload() != 0; + return static_cast([breakpad->CrashReportsToUpload() count]); } } catch(...) { // don't let exceptions leave this C API - fprintf(stderr, "BreakpadHasCrashReportToUpload() : error\n"); + fprintf(stderr, "BreakpadGetCrashReportCount() : error\n"); } return false; } //============================================================================= void BreakpadUploadNextReport(BreakpadRef ref) { + BreakpadUploadNextReportWithParameters(ref, nil); +} + +//============================================================================= +NSDictionary *BreakpadGetNextReportConfiguration(BreakpadRef ref) { + try { + Breakpad *breakpad = (Breakpad *)ref; + if (breakpad) + return breakpad->NextCrashReportConfiguration(); + } catch(...) { // don't let exceptions leave this C API + fprintf(stderr, "BreakpadGetNextReportConfiguration() : error\n"); + } + return nil; +} + +//============================================================================= +void BreakpadUploadReportWithParametersAndConfiguration( + BreakpadRef ref, + NSDictionary *server_parameters, + NSDictionary *configuration) { + try { + Breakpad *breakpad = (Breakpad *)ref; + if (!breakpad || !configuration) + return; + breakpad->UploadReportWithConfiguration(configuration, server_parameters); + } catch(...) { // don't let exceptions leave this C API + fprintf(stderr, + "BreakpadUploadReportWithParametersAndConfiguration() : error\n"); + } + +} + +//============================================================================= +void BreakpadUploadNextReportWithParameters(BreakpadRef ref, + NSDictionary *server_parameters) { + try { + Breakpad *breakpad = (Breakpad *)ref; + if (!breakpad) + return; + NSDictionary *configuration = breakpad->NextCrashReportConfiguration(); + if (!configuration) + return; + return BreakpadUploadReportWithParametersAndConfiguration(ref, + server_parameters, + configuration); + } catch(...) { // don't let exceptions leave this C API + fprintf(stderr, "BreakpadUploadNextReportWithParameters() : error\n"); + } +} + +void BreakpadHandleNetworkResponse(BreakpadRef ref, + NSDictionary *configuration, + NSData *data, + NSError *error) { try { // Not called at exception time Breakpad *breakpad = (Breakpad *)ref; + if (breakpad && configuration) + breakpad->HandleNetworkResponse(configuration,data, error); - if (breakpad) { - breakpad->UploadNextReport(); - } } catch(...) { // don't let exceptions leave this C API - fprintf(stderr, "BreakpadUploadNextReport() : error\n"); + fprintf(stderr, "BreakpadHandleNetworkResponse() : error\n"); } } diff --git a/toolkit/crashreporter/google-breakpad/src/client/ios/Breakpad.xcodeproj/project.pbxproj b/toolkit/crashreporter/google-breakpad/src/client/ios/Breakpad.xcodeproj/project.pbxproj index 96986f20bbcb..e9fcae3f9d18 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/ios/Breakpad.xcodeproj/project.pbxproj +++ b/toolkit/crashreporter/google-breakpad/src/client/ios/Breakpad.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 14569321182CE29F0029C465 /* ucontext_compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 14569320182CE29F0029C465 /* ucontext_compat.h */; }; + 14569323182CE2C10029C465 /* mach_vm_compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 14569322182CE2C10029C465 /* mach_vm_compat.h */; }; 16BFA67014E195E9009704F8 /* ios_exception_minidump_generator.h in Headers */ = {isa = PBXBuildFile; fileRef = 16BFA66E14E195E9009704F8 /* ios_exception_minidump_generator.h */; }; 16BFA67214E1965A009704F8 /* ios_exception_minidump_generator.mm in Sources */ = {isa = PBXBuildFile; fileRef = 16BFA67114E1965A009704F8 /* ios_exception_minidump_generator.mm */; }; 16C7CCCB147D4A4300776EAD /* BreakpadDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 16C7C968147D4A4200776EAD /* BreakpadDefines.h */; }; @@ -29,15 +31,12 @@ 16C7CE18147D4A4300776EAD /* minidump_file_writer-inl.h in Headers */ = {isa = PBXBuildFile; fileRef = 16C7CC04147D4A4300776EAD /* minidump_file_writer-inl.h */; }; 16C7CE19147D4A4300776EAD /* minidump_file_writer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 16C7CC05147D4A4300776EAD /* minidump_file_writer.cc */; }; 16C7CE1A147D4A4300776EAD /* minidump_file_writer.h in Headers */ = {isa = PBXBuildFile; fileRef = 16C7CC06147D4A4300776EAD /* minidump_file_writer.h */; }; - 16C7CE1B147D4A4300776EAD /* minidump_file_writer_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = 16C7CC07147D4A4300776EAD /* minidump_file_writer_unittest.cc */; }; 16C7CE40147D4A4300776EAD /* convert_UTF.c in Sources */ = {isa = PBXBuildFile; fileRef = 16C7CC4A147D4A4300776EAD /* convert_UTF.c */; }; 16C7CE41147D4A4300776EAD /* convert_UTF.h in Headers */ = {isa = PBXBuildFile; fileRef = 16C7CC4B147D4A4300776EAD /* convert_UTF.h */; }; 16C7CE78147D4A4300776EAD /* GTMLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 16C7CC88147D4A4300776EAD /* GTMLogger.h */; }; 16C7CE79147D4A4300776EAD /* GTMLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 16C7CC89147D4A4300776EAD /* GTMLogger.m */; }; 16C7CE7A147D4A4300776EAD /* HTTPMultipartUpload.h in Headers */ = {isa = PBXBuildFile; fileRef = 16C7CC8A147D4A4300776EAD /* HTTPMultipartUpload.h */; }; 16C7CE7B147D4A4300776EAD /* HTTPMultipartUpload.m in Sources */ = {isa = PBXBuildFile; fileRef = 16C7CC8B147D4A4300776EAD /* HTTPMultipartUpload.m */; }; - 16C7CE7E147D4A4300776EAD /* SimpleStringDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 16C7CC8E147D4A4300776EAD /* SimpleStringDictionary.h */; }; - 16C7CE7F147D4A4300776EAD /* SimpleStringDictionary.mm in Sources */ = {isa = PBXBuildFile; fileRef = 16C7CC8F147D4A4300776EAD /* SimpleStringDictionary.mm */; }; 16C7CE83147D4A4300776EAD /* file_id.cc in Sources */ = {isa = PBXBuildFile; fileRef = 16C7CC93147D4A4300776EAD /* file_id.cc */; }; 16C7CE84147D4A4300776EAD /* file_id.h in Headers */ = {isa = PBXBuildFile; fileRef = 16C7CC94147D4A4300776EAD /* file_id.h */; }; 16C7CE85147D4A4300776EAD /* macho_id.cc in Sources */ = {isa = PBXBuildFile; fileRef = 16C7CC95147D4A4300776EAD /* macho_id.cc */; }; @@ -54,11 +53,15 @@ 16C7CEA8147D4A4300776EAD /* string_conversion.h in Headers */ = {isa = PBXBuildFile; fileRef = 16C7CCBA147D4A4300776EAD /* string_conversion.h */; }; 16C92FAD150DF8330053D7BA /* BreakpadController.h in Headers */ = {isa = PBXBuildFile; fileRef = 16C92FAB150DF8330053D7BA /* BreakpadController.h */; }; 16C92FAE150DF8330053D7BA /* BreakpadController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 16C92FAC150DF8330053D7BA /* BreakpadController.mm */; }; + 1EEEB60F1720821900F7E689 /* simple_string_dictionary.cc in Sources */ = {isa = PBXBuildFile; fileRef = 1EEEB60C1720821900F7E689 /* simple_string_dictionary.cc */; }; + 1EEEB6101720821900F7E689 /* simple_string_dictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EEEB60D1720821900F7E689 /* simple_string_dictionary.h */; }; AA747D9F0F9514B9006C5449 /* Breakpad_Prefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = AA747D9E0F9514B9006C5449 /* Breakpad_Prefix.pch */; }; AACBBE4A0F95108600F1A2B1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AACBBE490F95108600F1A2B1 /* Foundation.framework */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 14569320182CE29F0029C465 /* ucontext_compat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ucontext_compat.h; sourceTree = ""; }; + 14569322182CE2C10029C465 /* mach_vm_compat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mach_vm_compat.h; sourceTree = ""; }; 16BFA66E14E195E9009704F8 /* ios_exception_minidump_generator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ios_exception_minidump_generator.h; sourceTree = ""; }; 16BFA67114E1965A009704F8 /* ios_exception_minidump_generator.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ios_exception_minidump_generator.mm; sourceTree = ""; }; 16C7C968147D4A4200776EAD /* BreakpadDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BreakpadDefines.h; sourceTree = ""; }; @@ -88,8 +91,6 @@ 16C7CC89147D4A4300776EAD /* GTMLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMLogger.m; sourceTree = ""; }; 16C7CC8A147D4A4300776EAD /* HTTPMultipartUpload.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTTPMultipartUpload.h; sourceTree = ""; }; 16C7CC8B147D4A4300776EAD /* HTTPMultipartUpload.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTTPMultipartUpload.m; sourceTree = ""; }; - 16C7CC8E147D4A4300776EAD /* SimpleStringDictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimpleStringDictionary.h; sourceTree = ""; }; - 16C7CC8F147D4A4300776EAD /* SimpleStringDictionary.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = SimpleStringDictionary.mm; sourceTree = ""; }; 16C7CC93147D4A4300776EAD /* file_id.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = file_id.cc; sourceTree = ""; }; 16C7CC94147D4A4300776EAD /* file_id.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = file_id.h; sourceTree = ""; }; 16C7CC95147D4A4300776EAD /* macho_id.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = macho_id.cc; sourceTree = ""; }; @@ -106,6 +107,8 @@ 16C7CCBA147D4A4300776EAD /* string_conversion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = string_conversion.h; sourceTree = ""; }; 16C92FAB150DF8330053D7BA /* BreakpadController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BreakpadController.h; sourceTree = ""; }; 16C92FAC150DF8330053D7BA /* BreakpadController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = BreakpadController.mm; sourceTree = ""; }; + 1EEEB60C1720821900F7E689 /* simple_string_dictionary.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = simple_string_dictionary.cc; sourceTree = ""; }; + 1EEEB60D1720821900F7E689 /* simple_string_dictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = simple_string_dictionary.h; sourceTree = ""; }; AA747D9E0F9514B9006C5449 /* Breakpad_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Breakpad_Prefix.pch; sourceTree = SOURCE_ROOT; }; AACBBE490F95108600F1A2B1 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; D2AAC07E0554694100DB518D /* libBreakpad.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libBreakpad.a; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -239,10 +242,12 @@ 16C7CBB0147D4A4300776EAD /* dynamic_images.h */, 16C7CBB1147D4A4300776EAD /* exception_handler.cc */, 16C7CBB2147D4A4300776EAD /* exception_handler.h */, + 14569322182CE2C10029C465 /* mach_vm_compat.h */, 16C7CBB4147D4A4300776EAD /* minidump_generator.cc */, 16C7CBB5147D4A4300776EAD /* minidump_generator.h */, 16C7CBBC147D4A4300776EAD /* protected_memory_allocator.cc */, 16C7CBBD147D4A4300776EAD /* protected_memory_allocator.h */, + 14569320182CE29F0029C465 /* ucontext_compat.h */, ); path = handler; sourceTree = ""; @@ -259,6 +264,8 @@ 16C7CC47147D4A4300776EAD /* common */ = { isa = PBXGroup; children = ( + 1EEEB60C1720821900F7E689 /* simple_string_dictionary.cc */, + 1EEEB60D1720821900F7E689 /* simple_string_dictionary.h */, 16C7CC4A147D4A4300776EAD /* convert_UTF.c */, 16C7CC4B147D4A4300776EAD /* convert_UTF.h */, 16C7CC82147D4A4300776EAD /* mac */, @@ -278,8 +285,6 @@ 16C7CC89147D4A4300776EAD /* GTMLogger.m */, 16C7CC8A147D4A4300776EAD /* HTTPMultipartUpload.h */, 16C7CC8B147D4A4300776EAD /* HTTPMultipartUpload.m */, - 16C7CC8E147D4A4300776EAD /* SimpleStringDictionary.h */, - 16C7CC8F147D4A4300776EAD /* SimpleStringDictionary.mm */, 16C7CC93147D4A4300776EAD /* file_id.cc */, 16C7CC94147D4A4300776EAD /* file_id.h */, 16C7CC95147D4A4300776EAD /* macho_id.cc */, @@ -313,6 +318,7 @@ 16C7CCCB147D4A4300776EAD /* BreakpadDefines.h in Headers */, 16C7CCCC147D4A4300776EAD /* Breakpad.h in Headers */, 16C7CDE8147D4A4300776EAD /* ConfigFile.h in Headers */, + 14569321182CE29F0029C465 /* ucontext_compat.h in Headers */, 16C7CDF6147D4A4300776EAD /* breakpad_nlist_64.h in Headers */, 16C7CDF8147D4A4300776EAD /* dynamic_images.h in Headers */, 16C7CDFA147D4A4300776EAD /* exception_handler.h in Headers */, @@ -324,7 +330,6 @@ 16C7CE41147D4A4300776EAD /* convert_UTF.h in Headers */, 16C7CE78147D4A4300776EAD /* GTMLogger.h in Headers */, 16C7CE7A147D4A4300776EAD /* HTTPMultipartUpload.h in Headers */, - 16C7CE7E147D4A4300776EAD /* SimpleStringDictionary.h in Headers */, 16C7CE84147D4A4300776EAD /* file_id.h in Headers */, 16C7CE86147D4A4300776EAD /* macho_id.h in Headers */, 16C7CE8B147D4A4300776EAD /* macho_utilities.h in Headers */, @@ -334,6 +339,8 @@ 16C7CEA8147D4A4300776EAD /* string_conversion.h in Headers */, 16BFA67014E195E9009704F8 /* ios_exception_minidump_generator.h in Headers */, 16C92FAD150DF8330053D7BA /* BreakpadController.h in Headers */, + 1EEEB6101720821900F7E689 /* simple_string_dictionary.h in Headers */, + 14569323182CE2C10029C465 /* mach_vm_compat.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -362,6 +369,9 @@ /* Begin PBXProject section */ 0867D690FE84028FC02AAC07 /* Project object */ = { isa = PBXProject; + attributes = { + LastUpgradeCheck = 0510; + }; buildConfigurationList = 1DEB922208733DC00010E9CD /* Build configuration list for PBXProject "Breakpad" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; @@ -407,11 +417,9 @@ 16C7CDFE147D4A4300776EAD /* protected_memory_allocator.cc in Sources */, 16C7CE09147D4A4300776EAD /* uploader.mm in Sources */, 16C7CE19147D4A4300776EAD /* minidump_file_writer.cc in Sources */, - 16C7CE1B147D4A4300776EAD /* minidump_file_writer_unittest.cc in Sources */, 16C7CE40147D4A4300776EAD /* convert_UTF.c in Sources */, 16C7CE79147D4A4300776EAD /* GTMLogger.m in Sources */, 16C7CE7B147D4A4300776EAD /* HTTPMultipartUpload.m in Sources */, - 16C7CE7F147D4A4300776EAD /* SimpleStringDictionary.mm in Sources */, 16C7CE83147D4A4300776EAD /* file_id.cc in Sources */, 16C7CE85147D4A4300776EAD /* macho_id.cc in Sources */, 16C7CE8A147D4A4300776EAD /* macho_utilities.cc in Sources */, @@ -421,6 +429,7 @@ 16C7CEA7147D4A4300776EAD /* string_conversion.cc in Sources */, 16BFA67214E1965A009704F8 /* ios_exception_minidump_generator.mm in Sources */, 16C92FAE150DF8330053D7BA /* BreakpadController.mm in Sources */, + 1EEEB60F1720821900F7E689 /* simple_string_dictionary.cc in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -431,7 +440,6 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; COPY_PHASE_STRIP = NO; DSTROOT = /tmp/Breakpad.dst; FRAMEWORK_SEARCH_PATHS = ( @@ -463,7 +471,6 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; DSTROOT = /tmp/Breakpad.dst; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -491,7 +498,7 @@ 1DEB922308733DC00010E9CD /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; GCC_C_LANGUAGE_STANDARD = c99; GCC_OPTIMIZATION_LEVEL = 0; @@ -509,15 +516,18 @@ ../../client/apple/Framework, ../../common/mac, ); + IPHONEOS_DEPLOYMENT_TARGET = 5.0; + ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = "-ObjC"; SDKROOT = iphoneos; + WARNING_CFLAGS = "-Wundef"; }; name = Debug; }; 1DEB922408733DC00010E9CD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; GCC_C_LANGUAGE_STANDARD = c99; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -534,8 +544,10 @@ ../../client/apple/Framework, ../../common/mac, ); + IPHONEOS_DEPLOYMENT_TARGET = 5.0; OTHER_LDFLAGS = "-ObjC"; SDKROOT = iphoneos; + WARNING_CFLAGS = "-Wundef"; }; name = Release; }; diff --git a/toolkit/crashreporter/google-breakpad/src/client/ios/BreakpadController.h b/toolkit/crashreporter/google-breakpad/src/client/ios/BreakpadController.h index 6e6229a76305..13609cb8dc0e 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/ios/BreakpadController.h +++ b/toolkit/crashreporter/google-breakpad/src/client/ios/BreakpadController.h @@ -62,6 +62,10 @@ // The interval to wait between two uploads. Value is 0 if no upload must be // done. int uploadIntervalInSeconds_; + + // The dictionary that contains additional server parameters to send when + // uploading crash reports. + NSDictionary* uploadTimeParameters_; } // Singleton. @@ -71,6 +75,10 @@ // new one. Merge is done by replacing the old values by the new values. - (void)updateConfiguration:(NSDictionary*)configuration; +// Reset the controller configuration to its initial value, which is the +// infoDictionary of the bundle of the application. +- (void)resetConfiguration; + // Configure the URL to upload the report to. This must be called at least once // if the URL is not in the bundle information. - (void)setUploadingURL:(NSString*)url; @@ -80,8 +88,11 @@ // will prevent uploads. - (void)setUploadInterval:(int)intervalInSeconds; -// Specify a parameter that will be uploaded to the crash server. See -// |BreakpadAddUploadParameter|. +// Set additional server parameters to send when uploading crash reports. +- (void)setParametersToAddAtUploadTime:(NSDictionary*)uploadTimeParameters; + +// Specify an upload parameter that will be added to the crash report when a +// crash report is generated. See |BreakpadAddUploadParameter|. - (void)addUploadParameter:(NSString*)value forKey:(NSString*)key; // Remove a previously-added parameter from the upload parameter set. See @@ -108,6 +119,23 @@ // Check if there is currently a crash report to upload. - (void)hasReportToUpload:(void(^)(BOOL))callback; +// Get the number of crash reports waiting to upload. +- (void)getCrashReportCount:(void(^)(int))callback; + +// Get the next report to upload. +// - If upload is disabled, callback will be called with (nil, -1). +// - If a delay is to be waited before sending, callback will be called with +// (nil, n), with n (> 0) being the number of seconds to wait. +// - if no delay is needed, callback will be called with (0, configuration), +// configuration being next report to upload, or nil if none is pending. +- (void)getNextReportConfigurationOrSendDelay: + (void(^)(NSDictionary*, int))callback; + +// Sends synchronously the report specified by |configuration|. This method is +// NOT thread safe and must be called from the breakpad thread. +- (void)threadUnsafeSendReportWithConfiguration:(NSDictionary*)configuration + withBreakpadRef:(BreakpadRef)ref; + @end #endif // CLIENT_IOS_HANDLER_IOS_BREAKPAD_CONTROLLER_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/client/ios/BreakpadController.mm b/toolkit/crashreporter/google-breakpad/src/client/ios/BreakpadController.mm index 31affa183292..dd71cff68ac7 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/ios/BreakpadController.mm +++ b/toolkit/crashreporter/google-breakpad/src/client/ios/BreakpadController.mm @@ -108,12 +108,9 @@ NSString* GetPlatform() { self = [super init]; if (self) { queue_ = dispatch_queue_create("com.google.BreakpadQueue", NULL); - configuration_ = [[[NSBundle mainBundle] infoDictionary] mutableCopy]; enableUploads_ = NO; started_ = NO; - NSString* uploadInterval = - [configuration_ valueForKey:@BREAKPAD_REPORT_INTERVAL]; - [self setUploadInterval:[uploadInterval intValue]]; + [self resetConfiguration]; } return self; } @@ -123,6 +120,7 @@ NSString* GetPlatform() { assert(!breakpadRef_); dispatch_release(queue_); [configuration_ release]; + [uploadTimeParameters_ release]; [super dealloc]; } @@ -157,6 +155,18 @@ NSString* GetPlatform() { }); } +// This method must be called from the breakpad queue. +- (void)threadUnsafeSendReportWithConfiguration:(NSDictionary*)configuration + withBreakpadRef:(BreakpadRef)ref { + NSAssert(started_, @"The controller must be started before " + "threadUnsafeSendReportWithConfiguration is called"); + if (breakpadRef_) { + BreakpadUploadReportWithParametersAndConfiguration(breakpadRef_, + uploadTimeParameters_, + configuration); + } +} + - (void)setUploadingEnabled:(BOOL)enabled { NSAssert(started_, @"The controller must be started before setUploadingEnabled is called"); @@ -187,6 +197,17 @@ NSString* GetPlatform() { [self setUploadInterval:[uploadInterval intValue]]; } +- (void)resetConfiguration { + NSAssert(!started_, + @"The controller must not be started when resetConfiguration is called"); + [configuration_ autorelease]; + configuration_ = [[[NSBundle mainBundle] infoDictionary] mutableCopy]; + NSString* uploadInterval = + [configuration_ valueForKey:@BREAKPAD_REPORT_INTERVAL]; + [self setUploadInterval:[uploadInterval intValue]]; + [self setParametersToAddAtUploadTime:nil]; +} + - (void)setUploadingURL:(NSString*)url { NSAssert(!started_, @"The controller must not be started when setUploadingURL is called"); @@ -202,6 +223,13 @@ NSString* GetPlatform() { uploadIntervalInSeconds_ = 0; } +- (void)setParametersToAddAtUploadTime:(NSDictionary*)uploadTimeParameters { + NSAssert(!started_, @"The controller must not be started when " + "setParametersToAddAtUploadTime is called"); + [uploadTimeParameters_ autorelease]; + uploadTimeParameters_ = [uploadTimeParameters copy]; +} + - (void)addUploadParameter:(NSString*)value forKey:(NSString*)key { NSAssert(started_, @"The controller must be started before addUploadParameter is called"); @@ -232,7 +260,34 @@ NSString* GetPlatform() { NSAssert(started_, @"The controller must be started before " "hasReportToUpload is called"); dispatch_async(queue_, ^{ - callback(breakpadRef_ && BreakpadHasCrashReportToUpload(breakpadRef_)); + callback(breakpadRef_ && (BreakpadGetCrashReportCount(breakpadRef_) > 0)); + }); +} + +- (void)getCrashReportCount:(void(^)(int))callback { + NSAssert(started_, @"The controller must be started before " + "getCrashReportCount is called"); + dispatch_async(queue_, ^{ + callback(breakpadRef_ ? BreakpadGetCrashReportCount(breakpadRef_) : 0); + }); +} + +- (void)getNextReportConfigurationOrSendDelay: + (void(^)(NSDictionary*, int))callback { + NSAssert(started_, @"The controller must be started before " + "getNextReportConfigurationOrSendDelay is called"); + dispatch_async(queue_, ^{ + if (!breakpadRef_) { + callback(nil, -1); + return; + } + int delay = [self sendDelay]; + if (delay != 0) { + callback(nil, delay); + return; + } + [self reportWillBeSent]; + callback(BreakpadGetNextReportConfiguration(breakpadRef_), 0); }); } @@ -264,7 +319,7 @@ NSString* GetPlatform() { - (void)sendStoredCrashReports { dispatch_async(queue_, ^{ - if (!BreakpadHasCrashReportToUpload(breakpadRef_)) + if (BreakpadGetCrashReportCount(breakpadRef_) == 0) return; int timeToWait = [self sendDelay]; @@ -276,18 +331,23 @@ NSString* GetPlatform() { // A report can be sent now. if (timeToWait == 0) { [self reportWillBeSent]; - BreakpadUploadNextReport(breakpadRef_); + BreakpadUploadNextReportWithParameters(breakpadRef_, + uploadTimeParameters_); // If more reports must be sent, make sure this method is called again. - if (BreakpadHasCrashReportToUpload(breakpadRef_)) + if (BreakpadGetCrashReportCount(breakpadRef_) > 0) timeToWait = uploadIntervalInSeconds_; } // A report must be sent later. - if (timeToWait > 0) - [self performSelector:@selector(sendStoredCrashReports) - withObject:nil - afterDelay:timeToWait]; + if (timeToWait > 0) { + // performSelector: doesn't work on queue_ + dispatch_async(dispatch_get_main_queue(), ^{ + [self performSelector:@selector(sendStoredCrashReports) + withObject:nil + afterDelay:timeToWait]; + }); + } }); } diff --git a/toolkit/crashreporter/google-breakpad/src/client/ios/handler/ios_exception_minidump_generator.h b/toolkit/crashreporter/google-breakpad/src/client/ios/handler/ios_exception_minidump_generator.h index 59f248197eaf..21133e632957 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/ios/handler/ios_exception_minidump_generator.h +++ b/toolkit/crashreporter/google-breakpad/src/client/ios/handler/ios_exception_minidump_generator.h @@ -51,10 +51,20 @@ class IosExceptionMinidumpGenerator : public MinidumpGenerator { private: // Get the crashing program counter from the exception. - uint32_t GetPCFromException(); + uintptr_t GetPCFromException(); + + // Get the crashing link register from the exception. + uintptr_t GetLRFromException(); // Write a virtual thread context for the crashing site. bool WriteCrashingContext(MDLocationDescriptor *register_location); + // Per-CPU implementations of the above method. +#ifdef HAS_ARM_SUPPORT + bool WriteCrashingContextARM(MDLocationDescriptor *register_location); +#endif +#ifdef HAS_ARM64_SUPPORT + bool WriteCrashingContextARM64(MDLocationDescriptor *register_location); +#endif NSArray *return_addresses_; }; diff --git a/toolkit/crashreporter/google-breakpad/src/client/ios/handler/ios_exception_minidump_generator.mm b/toolkit/crashreporter/google-breakpad/src/client/ios/handler/ios_exception_minidump_generator.mm index 912c431226e2..82ea5bb5d3f4 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/ios/handler/ios_exception_minidump_generator.mm +++ b/toolkit/crashreporter/google-breakpad/src/client/ios/handler/ios_exception_minidump_generator.mm @@ -29,22 +29,30 @@ #include "client/ios/handler/ios_exception_minidump_generator.h" +#include + +#include "google_breakpad/common/minidump_cpu_arm.h" +#include "google_breakpad/common/minidump_cpu_arm64.h" #include "google_breakpad/common/minidump_exception_mac.h" #include "client/minidump_file_writer-inl.h" #include "common/scoped_ptr.h" +#if defined(HAS_ARM_SUPPORT) && defined(HAS_ARM64_SUPPORT) +#error "This file should be compiled for only one architecture at a time" +#endif + namespace { -const uint32_t kExpectedFinalFp = 4; -const uint32_t kExpectedFinalSp = 0; const int kExceptionType = EXC_SOFTWARE; const int kExceptionCode = MD_EXCEPTION_CODE_MAC_NS_EXCEPTION; -#ifdef HAS_ARM_SUPPORT -// Append the given 4 bytes value to the sp position of the stack represented +#if defined(HAS_ARM_SUPPORT) || defined(HAS_ARM64_SUPPORT) +const uintptr_t kExpectedFinalFp = sizeof(uintptr_t); +const uintptr_t kExpectedFinalSp = 0; + +// Append the given value to the sp position of the stack represented // by memory. -void AppendToMemory(uint8_t *memory, uint32_t sp, uint32_t data) { - assert(sizeof(data) == 4); +void AppendToMemory(uint8_t *memory, uintptr_t sp, uintptr_t data) { memcpy(memory + sp, &data, sizeof(data)); } #endif @@ -70,6 +78,18 @@ IosExceptionMinidumpGenerator::~IosExceptionMinidumpGenerator() { bool IosExceptionMinidumpGenerator::WriteCrashingContext( MDLocationDescriptor *register_location) { #ifdef HAS_ARM_SUPPORT + return WriteCrashingContextARM(register_location); +#elif defined(HAS_ARM64_SUPPORT) + return WriteCrashingContextARM64(register_location); +#else + assert(false); + return false; +#endif +} + +#ifdef HAS_ARM_SUPPORT +bool IosExceptionMinidumpGenerator::WriteCrashingContextARM( + MDLocationDescriptor *register_location) { TypedMDRVA context(&writer_); if (!context.Allocate()) return false; @@ -77,25 +97,43 @@ bool IosExceptionMinidumpGenerator::WriteCrashingContext( MDRawContextARM *context_ptr = context.get(); memset(context_ptr, 0, sizeof(MDRawContextARM)); context_ptr->context_flags = MD_CONTEXT_ARM_FULL; - context_ptr->iregs[7] = kExpectedFinalFp; // FP - context_ptr->iregs[13] = kExpectedFinalSp; // SP - uint32_t pc = GetPCFromException(); - context_ptr->iregs[14] = pc; // LR - context_ptr->iregs[15] = pc; // PC + context_ptr->iregs[MD_CONTEXT_ARM_REG_IOS_FP] = kExpectedFinalFp; // FP + context_ptr->iregs[MD_CONTEXT_ARM_REG_SP] = kExpectedFinalSp; // SP + context_ptr->iregs[MD_CONTEXT_ARM_REG_LR] = GetLRFromException(); // LR + context_ptr->iregs[MD_CONTEXT_ARM_REG_PC] = GetPCFromException(); // PC return true; -#else - assert(false); - return false; +} #endif + +#ifdef HAS_ARM64_SUPPORT +bool IosExceptionMinidumpGenerator::WriteCrashingContextARM64( + MDLocationDescriptor *register_location) { + TypedMDRVA context(&writer_); + if (!context.Allocate()) + return false; + *register_location = context.location(); + MDRawContextARM64 *context_ptr = context.get(); + memset(context_ptr, 0, sizeof(*context_ptr)); + context_ptr->context_flags = MD_CONTEXT_ARM64_FULL; + context_ptr->iregs[MD_CONTEXT_ARM64_REG_FP] = kExpectedFinalFp; // FP + context_ptr->iregs[MD_CONTEXT_ARM64_REG_SP] = kExpectedFinalSp; // SP + context_ptr->iregs[MD_CONTEXT_ARM64_REG_LR] = GetLRFromException(); // LR + context_ptr->iregs[MD_CONTEXT_ARM64_REG_PC] = GetPCFromException(); // PC + return true; +} +#endif + +uintptr_t IosExceptionMinidumpGenerator::GetPCFromException() { + return [[return_addresses_ objectAtIndex:0] unsignedIntegerValue]; } -uint32_t IosExceptionMinidumpGenerator::GetPCFromException() { - return [[return_addresses_ objectAtIndex:0] unsignedIntegerValue]; +uintptr_t IosExceptionMinidumpGenerator::GetLRFromException() { + return [[return_addresses_ objectAtIndex:1] unsignedIntegerValue]; } bool IosExceptionMinidumpGenerator::WriteExceptionStream( MDRawDirectory *exception_stream) { -#ifdef HAS_ARM_SUPPORT +#if defined(HAS_ARM_SUPPORT) || defined(HAS_ARM64_SUPPORT) TypedMDRVA exception(&writer_); if (!exception.Allocate()) @@ -123,34 +161,38 @@ bool IosExceptionMinidumpGenerator::WriteExceptionStream( bool IosExceptionMinidumpGenerator::WriteThreadStream(mach_port_t thread_id, MDRawThread *thread) { -#ifdef HAS_ARM_SUPPORT +#if defined(HAS_ARM_SUPPORT) || defined(HAS_ARM64_SUPPORT) if (pthread_mach_thread_np(pthread_self()) != thread_id) return MinidumpGenerator::WriteThreadStream(thread_id, thread); size_t frame_count = [return_addresses_ count]; - UntypedMDRVA memory(&writer_); - size_t size = 8 * (frame_count - 1) + 4; - if (!memory.Allocate(size)) + if (frame_count == 0) return false; - scoped_array stack_memory(new uint8_t[size]); - uint32_t sp = size - 4; - uint32_t fp = 0; - uint32_t lr = [[return_addresses_ lastObject] unsignedIntegerValue]; - for (int current_frame = frame_count - 2; - current_frame >= 0; + UntypedMDRVA memory(&writer_); + size_t pointer_size = sizeof(uintptr_t); + size_t frame_record_size = 2 * pointer_size; + size_t stack_size = frame_record_size * (frame_count - 1) + pointer_size; + if (!memory.Allocate(stack_size)) + return false; + scoped_array stack_memory(new uint8_t[stack_size]); + uintptr_t sp = stack_size - pointer_size; + uintptr_t fp = 0; + uintptr_t lr = 0; + for (size_t current_frame = frame_count - 1; + current_frame > 0; --current_frame) { - AppendToMemory(stack_memory.get(), sp, fp); - sp -= 4; - fp = sp; AppendToMemory(stack_memory.get(), sp, lr); - sp -= 4; + sp -= pointer_size; + AppendToMemory(stack_memory.get(), sp, fp); + fp = sp; + sp -= pointer_size; lr = [[return_addresses_ objectAtIndex:current_frame] unsignedIntegerValue]; } - if (!memory.Copy(stack_memory.get(), size)) + if (!memory.Copy(stack_memory.get(), stack_size)) return false; assert(sp == kExpectedFinalSp); assert(fp == kExpectedFinalFp); - assert(lr == GetPCFromException()); + assert(lr == GetLRFromException()); thread->stack.start_of_memory_range = sp; thread->stack.memory = memory.location(); memory_blocks_.push_back(thread->stack); diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/Makefile.in b/toolkit/crashreporter/google-breakpad/src/client/linux/Makefile.in new file mode 100644 index 000000000000..a02047f2bd99 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/Makefile.in @@ -0,0 +1,25 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +ifeq (Android,$(OS_TARGET)) +ifeq (gonk,$(MOZ_WIDGET_TOOLKIT)) +TARGET_LOCAL_INCLUDES += -I$(topsrcdir)/toolkit/crashreporter/gonk-include/ +else +TARGET_LOCAL_INCLUDES += -I$(topsrcdir)/toolkit/crashreporter/google-breakpad/src/common/android/include/ +endif +endif + +ifdef MOZ_THUMB2 #{ +# The syscall number is passed through r7 in the linux ARM ABI, but r7 +# is also the THUMB frame pointer. (Unfortunate, but ah well.) gcc +# complains if we store to r7, not unreasonably, but complains +# inconsistently. The generic syscall template pushes/stores to/pops +# r7 with no complaint from gcc, but the sys_clone() function marks r7 +# as a clobbered register yet gcc error's. The generated assembly for +# sys_clone() looks OK, so we chalk this up to a gcc/gas quirk and +# work around it by telling gcc that the THUMB frame pointer is a +# vanilla callee-save register. +OS_CXXFLAGS += -fomit-frame-pointer +MOZ_FRAMEPTR_FLAGS := -fomit-frame-pointer +endif #} diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/crash_generation_client.cc b/toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/crash_generation_client.cc index df069e44fb4e..d8bfbbad27a7 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/crash_generation_client.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/crash_generation_client.cc @@ -27,67 +27,79 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#include "client/linux/crash_generation/crash_generation_client.h" + #include #include #include #include -#include "client/linux/crash_generation/crash_generation_client.h" #include "common/linux/eintr_wrapper.h" #include "common/linux/ignore_ret.h" -#include "common/linux/linux_libc_support.h" #include "third_party/lss/linux_syscall_support.h" namespace google_breakpad { -bool -CrashGenerationClient::RequestDump(const void* blob, size_t blob_size) -{ - int fds[2]; - if (sys_pipe(fds) != 0) - return false; - static const unsigned kControlMsgSize = CMSG_SPACE(sizeof(int)); +namespace { - struct kernel_msghdr msg; - my_memset(&msg, 0, sizeof(struct kernel_msghdr)); - struct kernel_iovec iov[1]; - iov[0].iov_base = const_cast(blob); - iov[0].iov_len = blob_size; +class CrashGenerationClientImpl : public CrashGenerationClient { + public: + explicit CrashGenerationClientImpl(int server_fd) : server_fd_(server_fd) {} + virtual ~CrashGenerationClientImpl() {} - msg.msg_iov = iov; - msg.msg_iovlen = sizeof(iov) / sizeof(iov[0]); - char cmsg[kControlMsgSize]; - my_memset(cmsg, 0, kControlMsgSize); - msg.msg_control = cmsg; - msg.msg_controllen = sizeof(cmsg); + virtual bool RequestDump(const void* blob, size_t blob_size) { + int fds[2]; + if (sys_pipe(fds) < 0) + return false; + static const unsigned kControlMsgSize = CMSG_SPACE(sizeof(int)); - struct cmsghdr* hdr = CMSG_FIRSTHDR(&msg); - hdr->cmsg_level = SOL_SOCKET; - hdr->cmsg_type = SCM_RIGHTS; - hdr->cmsg_len = CMSG_LEN(sizeof(int)); - int* p = reinterpret_cast(CMSG_DATA(hdr)); - *p = fds[1]; + struct kernel_iovec iov; + iov.iov_base = const_cast(blob); + iov.iov_len = blob_size; - ssize_t ret = HANDLE_EINTR(sys_sendmsg(server_fd_, &msg, 0)); - sys_close(fds[1]); - if (ret <= 0) - return false; + struct kernel_msghdr msg = { 0 }; + msg.msg_iov = &iov; + msg.msg_iovlen = 1; + char cmsg[kControlMsgSize] = ""; + msg.msg_control = cmsg; + msg.msg_controllen = sizeof(cmsg); - // wait for an ACK from the server - char b; - IGNORE_RET(HANDLE_EINTR(sys_read(fds[0], &b, 1))); + struct cmsghdr* hdr = CMSG_FIRSTHDR(&msg); + hdr->cmsg_level = SOL_SOCKET; + hdr->cmsg_type = SCM_RIGHTS; + hdr->cmsg_len = CMSG_LEN(sizeof(int)); + int* p = reinterpret_cast(CMSG_DATA(hdr)); + *p = fds[1]; - return true; -} + ssize_t ret = HANDLE_EINTR(sys_sendmsg(server_fd_, &msg, 0)); + sys_close(fds[1]); + if (ret < 0) { + sys_close(fds[0]); + return false; + } -//static -CrashGenerationClient* -CrashGenerationClient::TryCreate(int server_fd) -{ - if (0 > server_fd) + // Wait for an ACK from the server. + char b; + IGNORE_RET(HANDLE_EINTR(sys_read(fds[0], &b, 1))); + sys_close(fds[0]); + + return true; + } + + private: + int server_fd_; + + DISALLOW_COPY_AND_ASSIGN(CrashGenerationClientImpl); +}; + +} // namespace + +// static +CrashGenerationClient* CrashGenerationClient::TryCreate(int server_fd) { + if (server_fd < 0) return NULL; - return new CrashGenerationClient(server_fd); + return new CrashGenerationClientImpl(server_fd); } -} +} // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/crash_generation_client.h b/toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/crash_generation_client.h index 7139dff44d86..4e68424ae892 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/crash_generation_client.h +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/crash_generation_client.h @@ -30,40 +30,36 @@ #ifndef CLIENT_LINUX_CRASH_GENERATION_CRASH_GENERATION_CLIENT_H_ #define CLIENT_LINUX_CRASH_GENERATION_CRASH_GENERATION_CLIENT_H_ +#include "common/basictypes.h" + #include namespace google_breakpad { +// CrashGenerationClient is an interface for implementing out-of-process crash +// dumping. The default implementation, accessed via the TryCreate() factory, +// works in conjunction with the CrashGenerationServer to generate a minidump +// via a remote process. class CrashGenerationClient { -public: - ~CrashGenerationClient() - { - } + public: + CrashGenerationClient() {} + virtual ~CrashGenerationClient() {} - // Request the crash server to generate a dump. |blob| is a hack, - // see exception_handler.h and minidump_writer.h - // - // Return true if the dump was successful; false otherwise. - bool RequestDump(const void* blob, size_t blob_size); + // Request the crash server to generate a dump. |blob| is an opaque + // CrashContext pointer from exception_handler.h. + // Returns true if the dump was successful; false otherwise. + virtual bool RequestDump(const void* blob, size_t blob_size) = 0; - // Return a new CrashGenerationClient if |server_fd| is valid and + // Returns a new CrashGenerationClient if |server_fd| is valid and // connects to a CrashGenerationServer. Otherwise, return NULL. // The returned CrashGenerationClient* is owned by the caller of // this function. static CrashGenerationClient* TryCreate(int server_fd); -private: - CrashGenerationClient(int server_fd) : server_fd_(server_fd) - { - } - - int server_fd_; - - // prevent copy construction and assignment - CrashGenerationClient(const CrashGenerationClient&); - CrashGenerationClient& operator=(const CrashGenerationClient&); + private: + DISALLOW_COPY_AND_ASSIGN(CrashGenerationClient); }; -} // namespace google_breakpad +} // namespace google_breakpad -#endif // CLIENT_LINUX_CRASH_GENERATION_CRASH_GENERATION_CLIENT_H_ +#endif // CLIENT_LINUX_CRASH_GENERATION_CRASH_GENERATION_CLIENT_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/crash_generation_server.cc b/toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/crash_generation_server.cc index 721078cac4f2..860e8bc9f3a4 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/crash_generation_server.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/crash_generation_server.cc @@ -239,7 +239,7 @@ CrashGenerationServer::ClientEvent(short revents) // A nasty process could try and send us too many descriptors and // force a leak. for (unsigned i = 0; i < num_fds; ++i) - HANDLE_EINTR(close(reinterpret_cast(CMSG_DATA(hdr))[i])); + close(reinterpret_cast(CMSG_DATA(hdr))[i]); return true; } else { signal_fd = reinterpret_cast(CMSG_DATA(hdr))[0]; @@ -253,7 +253,7 @@ CrashGenerationServer::ClientEvent(short revents) if (crashing_pid == -1 || signal_fd == -1) { if (signal_fd) - HANDLE_EINTR(close(signal_fd)); + close(signal_fd); return true; } @@ -264,7 +264,7 @@ CrashGenerationServer::ClientEvent(short revents) if (!google_breakpad::WriteMinidump(minidump_filename.c_str(), crashing_pid, crash_context, kCrashContextSize)) { - HANDLE_EINTR(close(signal_fd)); + close(signal_fd); return true; } @@ -276,7 +276,7 @@ CrashGenerationServer::ClientEvent(short revents) // Send the done signal to the process: it can exit now. // (Closing this will make the child's sys_read unblock and return 0.) - HANDLE_EINTR(close(signal_fd)); + close(signal_fd); return true; } diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/moz.build b/toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/moz.build deleted file mode 100644 index 0ae4f801517e..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/moz.build +++ /dev/null @@ -1,26 +0,0 @@ -# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*- -# vim: set filetype=python: -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -UNIFIED_SOURCES += [ - 'crash_generation_client.cc', - 'crash_generation_server.cc', -] - -# We allow warnings for third-party code that can be updated from upstream. -ALLOW_COMPILER_WARNINGS = True - -FINAL_LIBRARY = 'xul' - -LOCAL_INCLUDES += [ - '/toolkit/crashreporter/google-breakpad/src', -] - -if CONFIG['OS_TARGET'] == 'Android': - LOCAL_INCLUDES += [ - '/toolkit/crashreporter/google-breakpad/src/common/android/include', - ] - -include('/toolkit/crashreporter/crashreporter.mozbuild') diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stacktrace.h b/toolkit/crashreporter/google-breakpad/src/client/linux/dump_writer_common/mapping_info.h similarity index 64% rename from toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stacktrace.h rename to toolkit/crashreporter/google-breakpad/src/client/linux/dump_writer_common/mapping_info.h index 8c3e8fe8f8dd..5f247cfd4e7b 100644 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stacktrace.h +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/dump_writer_common/mapping_info.h @@ -1,4 +1,4 @@ -// Copyright (c) 2000 - 2007, Google Inc. +// Copyright (c) 2014, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -26,35 +26,36 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Routines to extract the current stack trace. These functions are -// thread-safe. -#ifndef BASE_STACKTRACE_H_ -#define BASE_STACKTRACE_H_ +#ifndef CLIENT_LINUX_DUMP_WRITER_COMMON_MAPPING_INFO_H_ +#define CLIENT_LINUX_DUMP_WRITER_COMMON_MAPPING_INFO_H_ -#include "config.h" +#include +#include +#include -_START_GOOGLE_NAMESPACE_ +#include "google_breakpad/common/minidump_format.h" -// This is similar to the GetStackFrames routine, except that it returns -// the stack trace only, and not the stack frame sizes as well. -// Example: -// main() { foo(); } -// foo() { bar(); } -// bar() { -// void* result[10]; -// int depth = GetStackFrames(result, 10, 1); -// } -// -// This produces: -// result[0] foo -// result[1] main -// .... ... -// -// "result" must not be NULL. -extern int GetStackTrace(void** result, int max_depth, int skip_count); +namespace google_breakpad { -_END_GOOGLE_NAMESPACE_ +// One of these is produced for each mapping in the process (i.e. line in +// /proc/$x/maps). +struct MappingInfo { + uintptr_t start_addr; + size_t size; + size_t offset; // offset into the backed file. + bool exec; // true if the mapping has the execute bit set. + char name[NAME_MAX]; +}; -#endif // BASE_STACKTRACE_H_ +struct MappingEntry { + MappingInfo first; + uint8_t second[sizeof(MDGUID)]; +}; + +// A list of +typedef std::list MappingList; + +} // namespace google_breakpad + +#endif // CLIENT_LINUX_DUMP_WRITER_COMMON_MAPPING_INFO_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/dump_writer_common/raw_context_cpu.h b/toolkit/crashreporter/google-breakpad/src/client/linux/dump_writer_common/raw_context_cpu.h new file mode 100644 index 000000000000..e2ef45df5d86 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/dump_writer_common/raw_context_cpu.h @@ -0,0 +1,53 @@ +// Copyright (c) 2014, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifndef CLIENT_LINUX_DUMP_WRITER_COMMON_RAW_CONTEXT_CPU_H +#define CLIENT_LINUX_DUMP_WRITER_COMMON_RAW_CONTEXT_CPU_H + +#include "google_breakpad/common/minidump_format.h" + +namespace google_breakpad { + +#if defined(__i386__) +typedef MDRawContextX86 RawContextCPU; +#elif defined(__x86_64) +typedef MDRawContextAMD64 RawContextCPU; +#elif defined(__ARM_EABI__) +typedef MDRawContextARM RawContextCPU; +#elif defined(__aarch64__) +typedef MDRawContextARM64 RawContextCPU; +#elif defined(__mips__) +typedef MDRawContextMIPS RawContextCPU; +#else +#error "This code has not been ported to your platform yet." +#endif + +} // namespace google_breakpad + +#endif // CLIENT_LINUX_DUMP_WRITER_COMMON_RAW_CONTEXT_CPU_H diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/dump_writer_common/thread_info.cc b/toolkit/crashreporter/google-breakpad/src/client/linux/dump_writer_common/thread_info.cc new file mode 100644 index 000000000000..9956d4450bb4 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/dump_writer_common/thread_info.cc @@ -0,0 +1,299 @@ +// Copyright (c) 2014, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include "client/linux/dump_writer_common/thread_info.h" + +#include +#include + +#include "common/linux/linux_libc_support.h" +#include "google_breakpad/common/minidump_format.h" + +namespace { + +#if defined(__i386__) +// Write a uint16_t to memory +// out: memory location to write to +// v: value to write. +void U16(void* out, uint16_t v) { + my_memcpy(out, &v, sizeof(v)); +} + +// Write a uint32_t to memory +// out: memory location to write to +// v: value to write. +void U32(void* out, uint32_t v) { + my_memcpy(out, &v, sizeof(v)); +} +#endif + +} + +namespace google_breakpad { + +#if defined(__i386__) + +uintptr_t ThreadInfo::GetInstructionPointer() const { + return regs.eip; +} + +void ThreadInfo::FillCPUContext(RawContextCPU* out) const { + out->context_flags = MD_CONTEXT_X86_ALL; + + out->dr0 = dregs[0]; + out->dr1 = dregs[1]; + out->dr2 = dregs[2]; + out->dr3 = dregs[3]; + // 4 and 5 deliberatly omitted because they aren't included in the minidump + // format. + out->dr6 = dregs[6]; + out->dr7 = dregs[7]; + + out->gs = regs.xgs; + out->fs = regs.xfs; + out->es = regs.xes; + out->ds = regs.xds; + + out->edi = regs.edi; + out->esi = regs.esi; + out->ebx = regs.ebx; + out->edx = regs.edx; + out->ecx = regs.ecx; + out->eax = regs.eax; + + out->ebp = regs.ebp; + out->eip = regs.eip; + out->cs = regs.xcs; + out->eflags = regs.eflags; + out->esp = regs.esp; + out->ss = regs.xss; + + out->float_save.control_word = fpregs.cwd; + out->float_save.status_word = fpregs.swd; + out->float_save.tag_word = fpregs.twd; + out->float_save.error_offset = fpregs.fip; + out->float_save.error_selector = fpregs.fcs; + out->float_save.data_offset = fpregs.foo; + out->float_save.data_selector = fpregs.fos; + + // 8 registers * 10 bytes per register. + my_memcpy(out->float_save.register_area, fpregs.st_space, 10 * 8); + + // This matches the Intel fpsave format. + U16(out->extended_registers + 0, fpregs.cwd); + U16(out->extended_registers + 2, fpregs.swd); + U16(out->extended_registers + 4, fpregs.twd); + U16(out->extended_registers + 6, fpxregs.fop); + U32(out->extended_registers + 8, fpxregs.fip); + U16(out->extended_registers + 12, fpxregs.fcs); + U32(out->extended_registers + 16, fpregs.foo); + U16(out->extended_registers + 20, fpregs.fos); + U32(out->extended_registers + 24, fpxregs.mxcsr); + + my_memcpy(out->extended_registers + 32, &fpxregs.st_space, 128); + my_memcpy(out->extended_registers + 160, &fpxregs.xmm_space, 128); +} + +#elif defined(__x86_64) + +uintptr_t ThreadInfo::GetInstructionPointer() const { + return regs.rip; +} + +void ThreadInfo::FillCPUContext(RawContextCPU* out) const { + out->context_flags = MD_CONTEXT_AMD64_FULL | + MD_CONTEXT_AMD64_SEGMENTS; + + out->cs = regs.cs; + + out->ds = regs.ds; + out->es = regs.es; + out->fs = regs.fs; + out->gs = regs.gs; + + out->ss = regs.ss; + out->eflags = regs.eflags; + + out->dr0 = dregs[0]; + out->dr1 = dregs[1]; + out->dr2 = dregs[2]; + out->dr3 = dregs[3]; + // 4 and 5 deliberatly omitted because they aren't included in the minidump + // format. + out->dr6 = dregs[6]; + out->dr7 = dregs[7]; + + out->rax = regs.rax; + out->rcx = regs.rcx; + out->rdx = regs.rdx; + out->rbx = regs.rbx; + + out->rsp = regs.rsp; + + out->rbp = regs.rbp; + out->rsi = regs.rsi; + out->rdi = regs.rdi; + out->r8 = regs.r8; + out->r9 = regs.r9; + out->r10 = regs.r10; + out->r11 = regs.r11; + out->r12 = regs.r12; + out->r13 = regs.r13; + out->r14 = regs.r14; + out->r15 = regs.r15; + + out->rip = regs.rip; + + out->flt_save.control_word = fpregs.cwd; + out->flt_save.status_word = fpregs.swd; + out->flt_save.tag_word = fpregs.ftw; + out->flt_save.error_opcode = fpregs.fop; + out->flt_save.error_offset = fpregs.rip; + out->flt_save.error_selector = 0; // We don't have this. + out->flt_save.data_offset = fpregs.rdp; + out->flt_save.data_selector = 0; // We don't have this. + out->flt_save.mx_csr = fpregs.mxcsr; + out->flt_save.mx_csr_mask = fpregs.mxcr_mask; + + my_memcpy(&out->flt_save.float_registers, &fpregs.st_space, 8 * 16); + my_memcpy(&out->flt_save.xmm_registers, &fpregs.xmm_space, 16 * 16); +} + +#elif defined(__ARM_EABI__) + +uintptr_t ThreadInfo::GetInstructionPointer() const { + return regs.uregs[15]; +} + +void ThreadInfo::FillCPUContext(RawContextCPU* out) const { + out->context_flags = MD_CONTEXT_ARM_FULL; + + for (int i = 0; i < MD_CONTEXT_ARM_GPR_COUNT; ++i) + out->iregs[i] = regs.uregs[i]; + // No CPSR register in ThreadInfo(it's not accessible via ptrace) + out->cpsr = 0; +#if !defined(__ANDROID__) + out->float_save.fpscr = fpregs.fpsr | + (static_cast(fpregs.fpcr) << 32); + // TODO: sort this out, actually collect floating point registers + my_memset(&out->float_save.regs, 0, sizeof(out->float_save.regs)); + my_memset(&out->float_save.extra, 0, sizeof(out->float_save.extra)); +#endif +} + +#elif defined(__aarch64__) + +uintptr_t ThreadInfo::GetInstructionPointer() const { + return regs.pc; +} + +void ThreadInfo::FillCPUContext(RawContextCPU* out) const { + out->context_flags = MD_CONTEXT_ARM64_FULL; + + out->cpsr = static_cast(regs.pstate); + for (int i = 0; i < MD_CONTEXT_ARM64_REG_SP; ++i) + out->iregs[i] = regs.regs[i]; + out->iregs[MD_CONTEXT_ARM64_REG_SP] = regs.sp; + out->iregs[MD_CONTEXT_ARM64_REG_PC] = regs.pc; + + out->float_save.fpsr = fpregs.fpsr; + out->float_save.fpcr = fpregs.fpcr; + my_memcpy(&out->float_save.regs, &fpregs.vregs, + MD_FLOATINGSAVEAREA_ARM64_FPR_COUNT * 16); +} + +#elif defined(__mips__) + +uintptr_t ThreadInfo::GetInstructionPointer() const { + return mcontext.pc; +} + +void ThreadInfo::FillCPUContext(RawContextCPU* out) const { + out->context_flags = MD_CONTEXT_MIPS_FULL; + + for (int i = 0; i < MD_CONTEXT_MIPS_GPR_COUNT; ++i) + out->iregs[i] = mcontext.gregs[i]; + + out->mdhi = mcontext.mdhi; + out->mdlo = mcontext.mdlo; + out->dsp_control = mcontext.dsp; + + out->hi[0] = mcontext.hi1; + out->lo[0] = mcontext.lo1; + out->hi[1] = mcontext.hi2; + out->lo[1] = mcontext.lo2; + out->hi[2] = mcontext.hi3; + out->lo[2] = mcontext.lo3; + + out->epc = mcontext.pc; + out->badvaddr = 0; // Not stored in mcontext + out->status = 0; // Not stored in mcontext + out->cause = 0; // Not stored in mcontext + + for (int i = 0; i < MD_FLOATINGSAVEAREA_MIPS_FPR_COUNT; ++i) + out->float_save.regs[i] = mcontext.fpregs.fp_r.fp_fregs[i]._fp_fregs; + + out->float_save.fpcsr = mcontext.fpc_csr; +#if _MIPS_SIM == _ABIO32 + out->float_save.fir = mcontext.fpc_eir; +#endif +} +#endif // __mips__ + +void ThreadInfo::GetGeneralPurposeRegisters(void** gp_regs, size_t* size) { + assert(gp_regs || size); +#if defined(__mips__) + if (gp_regs) + *gp_regs = mcontext.gregs; + if (size) + *size = sizeof(mcontext.gregs); +#else + if (gp_regs) + *gp_regs = ®s; + if (size) + *size = sizeof(regs); +#endif +} + +void ThreadInfo::GetFloatingPointRegisters(void** fp_regs, size_t* size) { + assert(fp_regs || size); +#if defined(__mips__) + if (fp_regs) + *fp_regs = &mcontext.fpregs; + if (size) + *size = sizeof(mcontext.fpregs); +#else + if (fp_regs) + *fp_regs = &fpregs; + if (size) + *size = sizeof(fpregs); +#endif +} + +} // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/dump_writer_common/thread_info.h b/toolkit/crashreporter/google-breakpad/src/client/linux/dump_writer_common/thread_info.h new file mode 100644 index 000000000000..99093d2e0b8c --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/dump_writer_common/thread_info.h @@ -0,0 +1,91 @@ +// Copyright (c) 2014, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifndef CLIENT_LINUX_DUMP_WRITER_COMMON_THREAD_INFO_H_ +#define CLIENT_LINUX_DUMP_WRITER_COMMON_THREAD_INFO_H_ + +#include +#include + +#include "client/linux/dump_writer_common/raw_context_cpu.h" +#include "common/memory.h" +#include "google_breakpad/common/minidump_format.h" + +namespace google_breakpad { + +#if defined(__i386) || defined(__x86_64) +typedef __typeof__(((struct user*) 0)->u_debugreg[0]) debugreg_t; +#endif + +// We produce one of these structures for each thread in the crashed process. +struct ThreadInfo { + pid_t tgid; // thread group id + pid_t ppid; // parent process + + uintptr_t stack_pointer; // thread stack pointer + + +#if defined(__i386) || defined(__x86_64) + user_regs_struct regs; + user_fpregs_struct fpregs; + static const unsigned kNumDebugRegisters = 8; + debugreg_t dregs[8]; +#if defined(__i386) + user_fpxregs_struct fpxregs; +#endif // defined(__i386) + +#elif defined(__ARM_EABI__) + // Mimicking how strace does this(see syscall.c, search for GETREGS) + struct user_regs regs; + struct user_fpregs fpregs; +#elif defined(__aarch64__) + // Use the structures defined in + struct user_regs_struct regs; + struct user_fpsimd_struct fpregs; +#elif defined(__mips__) + // Use the structure defined in . + mcontext_t mcontext; +#endif + + // Returns the instruction pointer (platform-dependent impl.). + uintptr_t GetInstructionPointer() const; + + // Fills a RawContextCPU using the context in the ThreadInfo object. + void FillCPUContext(RawContextCPU* out) const; + + // Returns the pointer and size of general purpose register area. + void GetGeneralPurposeRegisters(void** gp_regs, size_t* size); + + // Returns the pointer and size of float point register area. + void GetFloatingPointRegisters(void** fp_regs, size_t* size); +}; + +} // namespace google_breakpad + +#endif // CLIENT_LINUX_DUMP_WRITER_COMMON_THREAD_INFO_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc b/toolkit/crashreporter/google-breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc new file mode 100644 index 000000000000..d37fdeb01f83 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc @@ -0,0 +1,253 @@ +// Copyright (c) 2014, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include "client/linux/dump_writer_common/ucontext_reader.h" + +#include "common/linux/linux_libc_support.h" +#include "google_breakpad/common/minidump_format.h" + +namespace google_breakpad { + +// Minidump defines register structures which are different from the raw +// structures which we get from the kernel. These are platform specific +// functions to juggle the ucontext and user structures into minidump format. + +#if defined(__i386__) + +uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { + return uc->uc_mcontext.gregs[REG_ESP]; +} + +uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { + return uc->uc_mcontext.gregs[REG_EIP]; +} + +void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, + const struct _libc_fpstate* fp) { + const greg_t* regs = uc->uc_mcontext.gregs; + + out->context_flags = MD_CONTEXT_X86_FULL | + MD_CONTEXT_X86_FLOATING_POINT; + + out->gs = regs[REG_GS]; + out->fs = regs[REG_FS]; + out->es = regs[REG_ES]; + out->ds = regs[REG_DS]; + + out->edi = regs[REG_EDI]; + out->esi = regs[REG_ESI]; + out->ebx = regs[REG_EBX]; + out->edx = regs[REG_EDX]; + out->ecx = regs[REG_ECX]; + out->eax = regs[REG_EAX]; + + out->ebp = regs[REG_EBP]; + out->eip = regs[REG_EIP]; + out->cs = regs[REG_CS]; + out->eflags = regs[REG_EFL]; + out->esp = regs[REG_UESP]; + out->ss = regs[REG_SS]; + + out->float_save.control_word = fp->cw; + out->float_save.status_word = fp->sw; + out->float_save.tag_word = fp->tag; + out->float_save.error_offset = fp->ipoff; + out->float_save.error_selector = fp->cssel; + out->float_save.data_offset = fp->dataoff; + out->float_save.data_selector = fp->datasel; + + // 8 registers * 10 bytes per register. + my_memcpy(out->float_save.register_area, fp->_st, 10 * 8); +} + +#elif defined(__x86_64) + +uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { + return uc->uc_mcontext.gregs[REG_RSP]; +} + +uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { + return uc->uc_mcontext.gregs[REG_RIP]; +} + +void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, + const struct _libc_fpstate* fpregs) { + const greg_t* regs = uc->uc_mcontext.gregs; + + out->context_flags = MD_CONTEXT_AMD64_FULL; + + out->cs = regs[REG_CSGSFS] & 0xffff; + + out->fs = (regs[REG_CSGSFS] >> 32) & 0xffff; + out->gs = (regs[REG_CSGSFS] >> 16) & 0xffff; + + out->eflags = regs[REG_EFL]; + + out->rax = regs[REG_RAX]; + out->rcx = regs[REG_RCX]; + out->rdx = regs[REG_RDX]; + out->rbx = regs[REG_RBX]; + + out->rsp = regs[REG_RSP]; + out->rbp = regs[REG_RBP]; + out->rsi = regs[REG_RSI]; + out->rdi = regs[REG_RDI]; + out->r8 = regs[REG_R8]; + out->r9 = regs[REG_R9]; + out->r10 = regs[REG_R10]; + out->r11 = regs[REG_R11]; + out->r12 = regs[REG_R12]; + out->r13 = regs[REG_R13]; + out->r14 = regs[REG_R14]; + out->r15 = regs[REG_R15]; + + out->rip = regs[REG_RIP]; + + out->flt_save.control_word = fpregs->cwd; + out->flt_save.status_word = fpregs->swd; + out->flt_save.tag_word = fpregs->ftw; + out->flt_save.error_opcode = fpregs->fop; + out->flt_save.error_offset = fpregs->rip; + out->flt_save.data_offset = fpregs->rdp; + out->flt_save.error_selector = 0; // We don't have this. + out->flt_save.data_selector = 0; // We don't have this. + out->flt_save.mx_csr = fpregs->mxcsr; + out->flt_save.mx_csr_mask = fpregs->mxcr_mask; + my_memcpy(&out->flt_save.float_registers, &fpregs->_st, 8 * 16); + my_memcpy(&out->flt_save.xmm_registers, &fpregs->_xmm, 16 * 16); +} + +#elif defined(__ARM_EABI__) + +uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { + return uc->uc_mcontext.arm_sp; +} + +uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { + return uc->uc_mcontext.arm_pc; +} + +void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc) { + out->context_flags = MD_CONTEXT_ARM_FULL; + + out->iregs[0] = uc->uc_mcontext.arm_r0; + out->iregs[1] = uc->uc_mcontext.arm_r1; + out->iregs[2] = uc->uc_mcontext.arm_r2; + out->iregs[3] = uc->uc_mcontext.arm_r3; + out->iregs[4] = uc->uc_mcontext.arm_r4; + out->iregs[5] = uc->uc_mcontext.arm_r5; + out->iregs[6] = uc->uc_mcontext.arm_r6; + out->iregs[7] = uc->uc_mcontext.arm_r7; + out->iregs[8] = uc->uc_mcontext.arm_r8; + out->iregs[9] = uc->uc_mcontext.arm_r9; + out->iregs[10] = uc->uc_mcontext.arm_r10; + + out->iregs[11] = uc->uc_mcontext.arm_fp; + out->iregs[12] = uc->uc_mcontext.arm_ip; + out->iregs[13] = uc->uc_mcontext.arm_sp; + out->iregs[14] = uc->uc_mcontext.arm_lr; + out->iregs[15] = uc->uc_mcontext.arm_pc; + + out->cpsr = uc->uc_mcontext.arm_cpsr; + + // TODO: fix this after fixing ExceptionHandler + out->float_save.fpscr = 0; + my_memset(&out->float_save.regs, 0, sizeof(out->float_save.regs)); + my_memset(&out->float_save.extra, 0, sizeof(out->float_save.extra)); +} + +#elif defined(__aarch64__) + +uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { + return uc->uc_mcontext.sp; +} + +uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { + return uc->uc_mcontext.pc; +} + +void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, + const struct fpsimd_context* fpregs) { + out->context_flags = MD_CONTEXT_ARM64_FULL; + + out->cpsr = static_cast(uc->uc_mcontext.pstate); + for (int i = 0; i < MD_CONTEXT_ARM64_REG_SP; ++i) + out->iregs[i] = uc->uc_mcontext.regs[i]; + out->iregs[MD_CONTEXT_ARM64_REG_SP] = uc->uc_mcontext.sp; + out->iregs[MD_CONTEXT_ARM64_REG_PC] = uc->uc_mcontext.pc; + + out->float_save.fpsr = fpregs->fpsr; + out->float_save.fpcr = fpregs->fpcr; + my_memcpy(&out->float_save.regs, &fpregs->vregs, + MD_FLOATINGSAVEAREA_ARM64_FPR_COUNT * 16); +} + +#elif defined(__mips__) + +uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { + return uc->uc_mcontext.gregs[MD_CONTEXT_MIPS_REG_SP]; +} + +uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { + return uc->uc_mcontext.pc; +} + +void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc) { + out->context_flags = MD_CONTEXT_MIPS_FULL; + + for (int i = 0; i < MD_CONTEXT_MIPS_GPR_COUNT; ++i) + out->iregs[i] = uc->uc_mcontext.gregs[i]; + + out->mdhi = uc->uc_mcontext.mdhi; + out->mdlo = uc->uc_mcontext.mdlo; + + out->hi[0] = uc->uc_mcontext.hi1; + out->hi[1] = uc->uc_mcontext.hi2; + out->hi[2] = uc->uc_mcontext.hi3; + out->lo[0] = uc->uc_mcontext.lo1; + out->lo[1] = uc->uc_mcontext.lo2; + out->lo[2] = uc->uc_mcontext.lo3; + out->dsp_control = uc->uc_mcontext.dsp; + + out->epc = uc->uc_mcontext.pc; + out->badvaddr = 0; // Not reported in signal context. + out->status = 0; // Not reported in signal context. + out->cause = 0; // Not reported in signal context. + + for (int i = 0; i < MD_FLOATINGSAVEAREA_MIPS_FPR_COUNT; ++i) + out->float_save.regs[i] = uc->uc_mcontext.fpregs.fp_r.fp_dregs[i]; + + out->float_save.fpcsr = uc->uc_mcontext.fpc_csr; +#if _MIPS_SIM == _ABIO32 + out->float_save.fir = uc->uc_mcontext.fpc_eir; // Unused. +#endif +} +#endif + +} // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/dump_writer_common/ucontext_reader.h b/toolkit/crashreporter/google-breakpad/src/client/linux/dump_writer_common/ucontext_reader.h new file mode 100644 index 000000000000..b6e77b4b5272 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/dump_writer_common/ucontext_reader.h @@ -0,0 +1,64 @@ +// Copyright (c) 2014, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifndef CLIENT_LINUX_DUMP_WRITER_COMMON_UCONTEXT_READER_H +#define CLIENT_LINUX_DUMP_WRITER_COMMON_UCONTEXT_READER_H + +#include +#include + +#include "client/linux/dump_writer_common/raw_context_cpu.h" +#include "common/memory.h" +#include "google_breakpad/common/minidump_format.h" + +namespace google_breakpad { + +// Wraps platform-dependent implementations of accessors to ucontext structs. +struct UContextReader { + static uintptr_t GetStackPointer(const struct ucontext* uc); + + static uintptr_t GetInstructionPointer(const struct ucontext* uc); + + // Juggle a arch-specific ucontext into a minidump format + // out: the minidump structure + // info: the collection of register structures. +#if defined(__i386__) || defined(__x86_64) + static void FillCPUContext(RawContextCPU *out, const ucontext *uc, + const struct _libc_fpstate* fp); +#elif defined(__aarch64__) + static void FillCPUContext(RawContextCPU *out, const ucontext *uc, + const struct fpsimd_context* fpregs); +#else + static void FillCPUContext(RawContextCPU *out, const ucontext *uc); +#endif +}; + +} // namespace google_breakpad + +#endif // CLIENT_LINUX_DUMP_WRITER_COMMON_UCONTEXT_READER_H diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/handler/exception_handler.cc b/toolkit/crashreporter/google-breakpad/src/client/linux/handler/exception_handler.cc index df958fb36715..148d61f9f3d9 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/linux/handler/exception_handler.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/handler/exception_handler.cc @@ -68,6 +68,7 @@ #include #include #include +#include #include #include #include @@ -86,15 +87,19 @@ #include #include +#include "common/basictypes.h" #include "common/linux/linux_libc_support.h" #include "common/memory.h" #include "client/linux/log/log.h" +#include "client/linux/microdump_writer/microdump_writer.h" #include "client/linux/minidump_writer/linux_dumper.h" #include "client/linux/minidump_writer/minidump_writer.h" #include "common/linux/eintr_wrapper.h" #include "third_party/lss/linux_syscall_support.h" +#if defined(__ANDROID__) #include "linux/sched.h" +#endif #ifndef PR_SET_PTRACER #define PR_SET_PTRACER 0x59616d61 @@ -139,13 +144,13 @@ void InstallAlternateStackLocked() { // SIGSTKSZ may be too small to prevent the signal handlers from overrunning // the alternative stack. Ensure that the size of the alternative stack is // large enough. - static const unsigned kSigStackSize = std::max(8192, SIGSTKSZ); + static const unsigned kSigStackSize = std::max(16384, SIGSTKSZ); // Only set an alternative stack if there isn't already one, or if the current // one is too small. if (sys_sigaltstack(NULL, &old_stack) == -1 || !old_stack.ss_sp || old_stack.ss_size < kSigStackSize) { - new_stack.ss_sp = malloc(kSigStackSize); + new_stack.ss_sp = calloc(1, kSigStackSize); new_stack.ss_size = kSigStackSize; if (sys_sigaltstack(&new_stack, NULL) == -1) { @@ -183,13 +188,37 @@ void RestoreAlternateStackLocked() { stack_installed = false; } -} // namespace +void InstallDefaultHandler(int sig) { +#if defined(__ANDROID__) + // Android L+ expose signal and sigaction symbols that override the system + // ones. There is a bug in these functions where a request to set the handler + // to SIG_DFL is ignored. In that case, an infinite loop is entered as the + // signal is repeatedly sent to breakpad's signal handler. + // To work around this, directly call the system's sigaction. + struct kernel_sigaction sa; + memset(&sa, 0, sizeof(sa)); + sys_sigemptyset(&sa.sa_mask); + sa.sa_handler_ = SIG_DFL; + sa.sa_flags = SA_RESTART; + sys_rt_sigaction(sig, &sa, NULL, sizeof(kernel_sigset_t)); +#else + signal(sig, SIG_DFL); +#endif +} -// We can stack multiple exception handlers. In that case, this is the global -// which holds the stack. -std::vector* ExceptionHandler::handler_stack_ = NULL; -pthread_mutex_t ExceptionHandler::handler_stack_mutex_ = - PTHREAD_MUTEX_INITIALIZER; +// The global exception handler stack. This is needed because there may exist +// multiple ExceptionHandler instances in a process. Each will have itself +// registered in this stack. +std::vector* g_handler_stack_ = NULL; +pthread_mutex_t g_handler_stack_mutex_ = PTHREAD_MUTEX_INITIALIZER; + +// sizeof(CrashContext) can be too big w.r.t the size of alternatate stack +// for SignalHandler(). Keep the crash context as a .bss field. Exception +// handlers are serialized by the |g_handler_stack_mutex_| and at most one at a +// time can use |g_crash_context_|. +ExceptionHandler::CrashContext g_crash_context_; + +} // namespace // Runs before crashing: normal context. ExceptionHandler::ExceptionHandler(const MinidumpDescriptor& descriptor, @@ -206,31 +235,44 @@ ExceptionHandler::ExceptionHandler(const MinidumpDescriptor& descriptor, if (server_fd >= 0) crash_generation_client_.reset(CrashGenerationClient::TryCreate(server_fd)); - if (!IsOutOfProcess() && !minidump_descriptor_.IsFD()) + if (!IsOutOfProcess() && !minidump_descriptor_.IsFD() && + !minidump_descriptor_.IsMicrodumpOnConsole()) minidump_descriptor_.UpdatePath(); - pthread_mutex_lock(&handler_stack_mutex_); - if (!handler_stack_) - handler_stack_ = new std::vector; +#if defined(__ANDROID__) + if (minidump_descriptor_.IsMicrodumpOnConsole()) + logger::initializeCrashLogWriter(); +#endif + + pthread_mutex_lock(&g_handler_stack_mutex_); + + // Pre-fault the crash context struct. This is to avoid failing due to OOM + // if handling an exception when the process ran out of virtual memory. + memset(&g_crash_context_, 0, sizeof(g_crash_context_)); + + if (!g_handler_stack_) + g_handler_stack_ = new std::vector; if (install_handler) { InstallAlternateStackLocked(); InstallHandlersLocked(); } - handler_stack_->push_back(this); - pthread_mutex_unlock(&handler_stack_mutex_); + g_handler_stack_->push_back(this); + pthread_mutex_unlock(&g_handler_stack_mutex_); } // Runs before crashing: normal context. ExceptionHandler::~ExceptionHandler() { - pthread_mutex_lock(&handler_stack_mutex_); + pthread_mutex_lock(&g_handler_stack_mutex_); std::vector::iterator handler = - std::find(handler_stack_->begin(), handler_stack_->end(), this); - handler_stack_->erase(handler); - if (handler_stack_->empty()) { + std::find(g_handler_stack_->begin(), g_handler_stack_->end(), this); + g_handler_stack_->erase(handler); + if (g_handler_stack_->empty()) { + delete g_handler_stack_; + g_handler_stack_ = NULL; RestoreAlternateStackLocked(); RestoreHandlersLocked(); } - pthread_mutex_unlock(&handler_stack_mutex_); + pthread_mutex_unlock(&g_handler_stack_mutex_); } // Runs before crashing: normal context. @@ -275,7 +317,7 @@ void ExceptionHandler::RestoreHandlersLocked() { for (int i = 0; i < kNumHandledSignals; ++i) { if (sigaction(kExceptionSignals[i], &old_handlers[i], NULL) == -1) { - signal(kExceptionSignals[i], SIG_DFL); + InstallDefaultHandler(kExceptionSignals[i]); } } handlers_installed = false; @@ -290,7 +332,7 @@ void ExceptionHandler::RestoreHandlersLocked() { // static void ExceptionHandler::SignalHandler(int sig, siginfo_t* info, void* uc) { // All the exception signals are blocked at this point. - pthread_mutex_lock(&handler_stack_mutex_); + pthread_mutex_lock(&g_handler_stack_mutex_); // Sometimes, Breakpad runs inside a process where some other buggy code // saves and restores signal handlers temporarily with 'signal' @@ -315,15 +357,15 @@ void ExceptionHandler::SignalHandler(int sig, siginfo_t* info, void* uc) { if (sigaction(sig, &cur_handler, NULL) == -1) { // When resetting the handler fails, try to reset the // default one to avoid an infinite loop here. - signal(sig, SIG_DFL); + InstallDefaultHandler(sig); } - pthread_mutex_unlock(&handler_stack_mutex_); + pthread_mutex_unlock(&g_handler_stack_mutex_); return; } bool handled = false; - for (int i = handler_stack_->size() - 1; !handled && i >= 0; --i) { - handled = (*handler_stack_)[i]->HandleSignal(sig, info, uc); + for (int i = g_handler_stack_->size() - 1; !handled && i >= 0; --i) { + handled = (*g_handler_stack_)[i]->HandleSignal(sig, info, uc); } // Upon returning from this signal handler, sig will become unmasked and then @@ -332,17 +374,19 @@ void ExceptionHandler::SignalHandler(int sig, siginfo_t* info, void* uc) { // previously installed handler. Then, when the signal is retriggered, it will // be delivered to the appropriate handler. if (handled) { - signal(sig, SIG_DFL); + InstallDefaultHandler(sig); } else { RestoreHandlersLocked(); } - pthread_mutex_unlock(&handler_stack_mutex_); + pthread_mutex_unlock(&g_handler_stack_mutex_); - if (info->si_code <= 0) { - // This signal was sent by another process. (Positive values of - // si_code are reserved for kernel-originated signals.) In order - // to retrigger it, we have to queue a new signal. + // info->si_code <= 0 iff SI_FROMUSER (SI_FROMKERNEL otherwise). + if (info->si_code <= 0 || sig == SIGABRT) { + // This signal was triggered by somebody sending us the signal with kill(). + // In order to retrigger it, we have to queue a new signal by calling + // kill() ourselves. The special case (si_pid == 0 && sig == SIGABRT) is + // due to the kernel sending a SIGABRT from a user request via SysRQ. if (tgkill(getpid(), syscall(__NR_gettid), sig) < 0) { // If we failed to kill ourselves (e.g. because a sandbox disallows us // to do so), we instead resort to terminating our process. This will @@ -389,27 +433,39 @@ bool ExceptionHandler::HandleSignal(int sig, siginfo_t* info, void* uc) { bool signal_pid_trusted = info->si_code == SI_USER || info->si_code == SI_TKILL; if (signal_trusted || (signal_pid_trusted && info->si_pid == getpid())) { - sys_prctl(PR_SET_DUMPABLE, 1); + sys_prctl(PR_SET_DUMPABLE, 1, 0, 0, 0); } - CrashContext context; - memcpy(&context.siginfo, info, sizeof(siginfo_t)); - memcpy(&context.context, uc, sizeof(struct ucontext)); -#if !defined(__ARM_EABI__) + + // Fill in all the holes in the struct to make Valgrind happy. + memset(&g_crash_context_, 0, sizeof(g_crash_context_)); + memcpy(&g_crash_context_.siginfo, info, sizeof(siginfo_t)); + memcpy(&g_crash_context_.context, uc, sizeof(struct ucontext)); +#if defined(__aarch64__) + struct ucontext* uc_ptr = (struct ucontext*)uc; + struct fpsimd_context* fp_ptr = + (struct fpsimd_context*)&uc_ptr->uc_mcontext.__reserved; + if (fp_ptr->head.magic == FPSIMD_MAGIC) { + memcpy(&g_crash_context_.float_state, fp_ptr, + sizeof(g_crash_context_.float_state)); + } +#elif !defined(__ARM_EABI__) && !defined(__mips__) // FP state is not part of user ABI on ARM Linux. - struct ucontext *uc_ptr = (struct ucontext*)uc; + // In case of MIPS Linux FP state is already part of struct ucontext + // and 'float_state' is not a member of CrashContext. + struct ucontext* uc_ptr = (struct ucontext*)uc; if (uc_ptr->uc_mcontext.fpregs) { - memcpy(&context.float_state, - uc_ptr->uc_mcontext.fpregs, - sizeof(context.float_state)); + memcpy(&g_crash_context_.float_state, uc_ptr->uc_mcontext.fpregs, + sizeof(g_crash_context_.float_state)); } #endif - context.tid = syscall(__NR_gettid); + g_crash_context_.tid = syscall(__NR_gettid); if (crash_handler_ != NULL) { - if (crash_handler_(&context, sizeof(context), callback_context_)) { + if (crash_handler_(&g_crash_context_, sizeof(g_crash_context_), + callback_context_)) { return true; } } - return GenerateDump(&context); + return GenerateDump(&g_crash_context_); } // This is a public interface to HandleSignal that allows the client to @@ -430,9 +486,11 @@ bool ExceptionHandler::GenerateDump(CrashContext *context) { if (IsOutOfProcess()) return crash_generation_client_->RequestDump(context, sizeof(*context)); - static const unsigned kChildStackSize = 8000; + // Allocating too much stack isn't a problem, and better to err on the side + // of caution than smash it into random locations. + static const unsigned kChildStackSize = 16000; PageAllocator allocator; - uint8_t* stack = (uint8_t*) allocator.Alloc(kChildStackSize); + uint8_t* stack = reinterpret_cast(allocator.Alloc(kChildStackSize)); if (!stack) return false; // clone() needs the top-most address. (scrub just to be safe) @@ -450,28 +508,34 @@ bool ExceptionHandler::GenerateDump(CrashContext *context) { // kernels, but we need to know the PID of the cloned process before we // can do this. Create a pipe here which we can use to block the // cloned process after creating it, until we have explicitly enabled ptrace - if(sys_pipe(fdes) == -1) { + if (sys_pipe(fdes) == -1) { // Creating the pipe failed. We'll log an error but carry on anyway, // as we'll probably still get a useful crash report. All that will happen // is the write() and read() calls will fail with EBADF - static const char no_pipe_msg[] = "ExceptionHandler::GenerateDump \ - sys_pipe failed:"; + static const char no_pipe_msg[] = "ExceptionHandler::GenerateDump " + "sys_pipe failed:"; logger::write(no_pipe_msg, sizeof(no_pipe_msg) - 1); logger::write(strerror(errno), strlen(strerror(errno))); logger::write("\n", 1); + + // Ensure fdes[0] and fdes[1] are invalid file descriptors. + fdes[0] = fdes[1] = -1; } const pid_t child = sys_clone( ThreadEntry, stack, CLONE_FILES | CLONE_FS | CLONE_UNTRACED, &thread_arg, NULL, NULL, NULL); + if (child == -1) { + sys_close(fdes[0]); + sys_close(fdes[1]); + return false; + } - int r, status; // Allow the child to ptrace us - sys_prctl(PR_SET_PTRACER, child); + sys_prctl(PR_SET_PTRACER, child, 0, 0, 0); SendContinueSignalToChild(); - do { - r = sys_waitpid(child, &status, __WALL); - } while (r == -1 && errno == EINTR); + int status; + const int r = HANDLE_EINTR(sys_waitpid(child, &status, __WALL)); sys_close(fdes[0]); sys_close(fdes[1]); @@ -494,9 +558,9 @@ void ExceptionHandler::SendContinueSignalToChild() { static const char okToContinueMessage = 'a'; int r; r = HANDLE_EINTR(sys_write(fdes[1], &okToContinueMessage, sizeof(char))); - if(r == -1) { - static const char msg[] = "ExceptionHandler::SendContinueSignalToChild \ - sys_write failed:"; + if (r == -1) { + static const char msg[] = "ExceptionHandler::SendContinueSignalToChild " + "sys_write failed:"; logger::write(msg, sizeof(msg) - 1); logger::write(strerror(errno), strlen(strerror(errno))); logger::write("\n", 1); @@ -509,9 +573,9 @@ void ExceptionHandler::WaitForContinueSignal() { int r; char receivedMessage; r = HANDLE_EINTR(sys_read(fdes[0], &receivedMessage, sizeof(char))); - if(r == -1) { - static const char msg[] = "ExceptionHandler::WaitForContinueSignal \ - sys_read failed:"; + if (r == -1) { + static const char msg[] = "ExceptionHandler::WaitForContinueSignal " + "sys_read failed:"; logger::write(msg, sizeof(msg) - 1); logger::write(strerror(errno), strlen(strerror(errno))); logger::write("\n", 1); @@ -522,6 +586,14 @@ void ExceptionHandler::WaitForContinueSignal() { // Runs on the cloned process. bool ExceptionHandler::DoDump(pid_t crashing_process, const void* context, size_t context_size) { + if (minidump_descriptor_.IsMicrodumpOnConsole()) { + return google_breakpad::WriteMicrodump( + crashing_process, + context, + context_size, + mapping_list_, + *minidump_descriptor_.microdump_extra_info()); + } if (minidump_descriptor_.IsFD()) { return google_breakpad::WriteMinidump(minidump_descriptor_.fd(), minidump_descriptor_.size_limit(), @@ -549,8 +621,16 @@ bool ExceptionHandler::WriteMinidump(const string& dump_path, return eh.WriteMinidump(); } +// In order to making using EBP to calculate the desired value for ESP +// a valid operation, ensure that this function is compiled with a +// frame pointer using the following attribute. This attribute +// is supported on GCC but not on clang. +#if defined(__i386__) && defined(__GNUC__) && !defined(__clang__) +__attribute__((optimize("no-omit-frame-pointer"))) +#endif bool ExceptionHandler::WriteMinidump() { - if (!IsOutOfProcess() && !minidump_descriptor_.IsFD()) { + if (!IsOutOfProcess() && !minidump_descriptor_.IsFD() && + !minidump_descriptor_.IsMicrodumpOnConsole()) { // Update the path of the minidump so that this can be called multiple times // and new files are created for each minidump. This is done before the // generation happens, as clients may want to access the MinidumpDescriptor @@ -560,17 +640,40 @@ bool ExceptionHandler::WriteMinidump() { // Reposition the FD to its beginning and resize it to get rid of the // previous minidump info. lseek(minidump_descriptor_.fd(), 0, SEEK_SET); - static_cast(ftruncate(minidump_descriptor_.fd(), 0)); + ignore_result(ftruncate(minidump_descriptor_.fd(), 0)); } // Allow this process to be dumped. - sys_prctl(PR_SET_DUMPABLE, 1); + sys_prctl(PR_SET_DUMPABLE, 1, 0, 0, 0); CrashContext context; int getcontext_result = getcontext(&context.context); if (getcontext_result) return false; -#if !defined(__ARM_EABI__) + +#if defined(__i386__) + // In CPUFillFromUContext in minidumpwriter.cc the stack pointer is retrieved + // from REG_UESP instead of from REG_ESP. REG_UESP is the user stack pointer + // and it only makes sense when running in kernel mode with a different stack + // pointer. When WriteMiniDump is called during normal processing REG_UESP is + // zero which leads to bad minidump files. + if (!context.context.uc_mcontext.gregs[REG_UESP]) { + // If REG_UESP is set to REG_ESP then that includes the stack space for the + // CrashContext object in this function, which is about 128 KB. Since the + // Linux dumper only records 32 KB of stack this would mean that nothing + // useful would be recorded. A better option is to set REG_UESP to REG_EBP, + // perhaps with a small negative offset in case there is any code that + // objects to them being equal. + context.context.uc_mcontext.gregs[REG_UESP] = + context.context.uc_mcontext.gregs[REG_EBP] - 16; + // The stack saving is based off of REG_ESP so it must be set to match the + // new REG_UESP. + context.context.uc_mcontext.gregs[REG_ESP] = + context.context.uc_mcontext.gregs[REG_UESP]; + } +#endif + +#if !defined(__ARM_EABI__) && !defined(__aarch64__) && !defined(__mips__) // FPU state is not part of ARM EABI ucontext_t. memcpy(&context.float_state, context.context.uc_mcontext.fpregs, sizeof(context.float_state)); @@ -589,6 +692,12 @@ bool ExceptionHandler::WriteMinidump() { #elif defined(__arm__) context.siginfo.si_addr = reinterpret_cast(context.context.uc_mcontext.arm_pc); +#elif defined(__aarch64__) + context.siginfo.si_addr = + reinterpret_cast(context.context.uc_mcontext.pc); +#elif defined(__mips__) + context.siginfo.si_addr = + reinterpret_cast(context.context.uc_mcontext.pc); #else #error "This code has not been ported to your platform yet." #endif diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/handler/exception_handler.h b/toolkit/crashreporter/google-breakpad/src/client/linux/handler/exception_handler.h index c0039bcd940d..591c31085570 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/linux/handler/exception_handler.h +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/handler/exception_handler.h @@ -30,15 +30,13 @@ #ifndef CLIENT_LINUX_HANDLER_EXCEPTION_HANDLER_H_ #define CLIENT_LINUX_HANDLER_EXCEPTION_HANDLER_H_ -#include -#include - -#include #include #include #include #include +#include + #include "client/linux/crash_generation/crash_generation_client.h" #include "client/linux/handler/minidump_descriptor.h" #include "client/linux/minidump_writer/minidump_writer.h" @@ -129,7 +127,7 @@ class ExceptionHandler { ExceptionHandler(const MinidumpDescriptor& descriptor, FilterCallback filter, MinidumpCallback callback, - void *callback_context, + void* callback_context, bool install_handler, const int server_fd); ~ExceptionHandler(); @@ -146,6 +144,10 @@ class ExceptionHandler { crash_handler_ = callback; } + void set_crash_generation_client(CrashGenerationClient* client) { + crash_generation_client_.reset(client); + } + // Writes a minidump immediately. This can be used to capture the execution // state independently of a crash. // Returns true on success. @@ -190,15 +192,17 @@ class ExceptionHandler { siginfo_t siginfo; pid_t tid; // the crashing thread. struct ucontext context; -#if !defined(__ARM_EABI__) +#if !defined(__ARM_EABI__) && !defined(__mips__) // #ifdef this out because FP state is not part of user ABI for Linux ARM. - struct _libc_fpstate float_state; + // In case of MIPS Linux FP state is already part of struct + // ucontext so 'float_state' is not required. + fpstate_t float_state; #endif }; // Returns whether out-of-process dump generation is used or not. bool IsOutOfProcess() const { - return crash_generation_client_.get() != NULL; + return crash_generation_client_.get() != NULL; } // Add information about a memory mapping. This can be used if @@ -222,6 +226,7 @@ class ExceptionHandler { // Report a crash signal from an SA_SIGINFO signal handler. bool HandleSignal(int sig, siginfo_t* info, void* uc); + private: // Save the old signal handlers and install new ones. static bool InstallHandlersLocked(); @@ -246,18 +251,16 @@ class ExceptionHandler { MinidumpDescriptor minidump_descriptor_; - HandlerCallback crash_handler_; - - // The global exception handler stack. This is need becuase there may exist - // multiple ExceptionHandler instances in a process. Each will have itself - // registered in this stack. - static std::vector *handler_stack_; - static pthread_mutex_t handler_stack_mutex_; + // Must be volatile. The compiler is unaware of the code which runs in + // the signal handler which reads this variable. Without volatile the + // compiler is free to optimise away writes to this variable which it + // believes are never read. + volatile HandlerCallback crash_handler_; // We need to explicitly enable ptrace of parent processes on some // kernels, but we need to know the PID of the cloned process before we // can do this. We create a pipe which we can use to block the - // cloned process after creating it, until we have explicitly enabled + // cloned process after creating it, until we have explicitly enabled // ptrace. This is used to store the file descriptors for the pipe int fdes[2]; diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/handler/exception_handler_unittest.cc b/toolkit/crashreporter/google-breakpad/src/client/linux/handler/exception_handler_unittest.cc index 0ba5216346ea..b4065b414f88 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/linux/handler/exception_handler_unittest.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/handler/exception_handler_unittest.cc @@ -35,6 +35,9 @@ #include #include #include +#if defined(__mips__) +#include +#endif #include @@ -55,7 +58,7 @@ using namespace google_breakpad; namespace { // Flush the instruction cache for a given memory range. -// Only required on ARM. +// Only required on ARM and mips. void FlushInstructionCache(const char* memory, uint32_t memory_size) { #if defined(__arm__) long begin = reinterpret_cast(memory); @@ -72,6 +75,22 @@ void FlushInstructionCache(const char* memory, uint32_t memory_size) { # else # error "Your operating system is not supported yet" # endif +#elif defined(__mips__) +# if defined(__ANDROID__) + // Provided by Android's + long begin = reinterpret_cast(memory); + long end = begin + static_cast(memory_size); +#if _MIPS_SIM == _ABIO32 + cacheflush(begin, end, 0); +#else + syscall(__NR_cacheflush, begin, end, ICACHE); +#endif +# elif defined(__linux__) + // See http://www.linux-mips.org/wiki/Cacheflush_Syscall. + cacheflush(const_cast(memory), memory_size, ICACHE); +# else +# error "Your operating system is not supported yet" +# endif #endif } @@ -176,6 +195,22 @@ static bool DoneCallback(const MinidumpDescriptor& descriptor, return true; } +#ifndef ADDRESS_SANITIZER + +// This is a replacement for "*reinterpret_cast(NULL) = 0;" +// It is needed because GCC is allowed to assume that the program will +// not execute any undefined behavior (UB) operation. Further, when GCC +// observes that UB statement is reached, it can assume that all statements +// leading to the UB one are never executed either, and can completely +// optimize them out. In the case of ExceptionHandlerTest::ExternalDumper, +// GCC-4.9 optimized out the entire set up of ExceptionHandler, causing +// test failure. +volatile int *p_null; // external linkage, so GCC can't tell that it + // remains NULL. Volatile just for a good measure. +static void DoNullPointerDereference() { + *p_null = 1; +} + void ChildCrash(bool use_fd) { AutoTempDir temp_dir; int fds[2] = {0}; @@ -202,7 +237,7 @@ void ChildCrash(bool use_fd) { true, -1)); } // Crash with the exception handler in scope. - *reinterpret_cast(NULL) = 0; + DoNullPointerDereference(); } } if (!use_fd) @@ -227,6 +262,8 @@ TEST(ExceptionHandlerTest, ChildCrashWithFD) { ASSERT_NO_FATAL_FAILURE(ChildCrash(true)); } +#endif // !ADDRESS_SANITIZER + static bool DoneCallbackReturnFalse(const MinidumpDescriptor& descriptor, void* context, bool succeeded) { @@ -268,13 +305,15 @@ static bool InstallRaiseSIGKILL() { return sigaction(SIGSEGV, &sa, NULL) != -1; } +#ifndef ADDRESS_SANITIZER + static void CrashWithCallbacks(ExceptionHandler::FilterCallback filter, ExceptionHandler::MinidumpCallback done, string path) { ExceptionHandler handler( MinidumpDescriptor(path), filter, done, NULL, true, -1); // Crash with the exception handler in scope. - *reinterpret_cast(NULL) = 0; + DoNullPointerDereference(); } TEST(ExceptionHandlerTest, RedeliveryOnFilterCallbackFalse) { @@ -365,7 +404,7 @@ TEST(ExceptionHandlerTest, RedeliveryOnBadSignalHandlerFlag) { reinterpret_cast(SIG_ERR)); // Crash with the exception handler in scope. - *reinterpret_cast(NULL) = 0; + DoNullPointerDereference(); } // SIGKILL means Breakpad's signal handler didn't crash. ASSERT_NO_FATAL_FAILURE(WaitForProcessToTerminate(child, SIGKILL)); @@ -435,6 +474,18 @@ TEST(ExceptionHandlerTest, StackedHandlersUnhandledToBottom) { ASSERT_NO_FATAL_FAILURE(WaitForProcessToTerminate(child, SIGKILL)); } +#endif // !ADDRESS_SANITIZER + +const unsigned char kIllegalInstruction[] = { +#if defined(__mips__) + // mfc2 zero,Impl - usually illegal in userspace. + 0x48, 0x00, 0x00, 0x48 +#else + // This crashes with SIGILL on x86/x86-64/arm. + 0xff, 0xff, 0xff, 0xff +#endif +}; + // Test that memory around the instruction pointer is written // to the dump as a MinidumpMemoryRegion. TEST(ExceptionHandlerTest, InstructionPointerMemory) { @@ -446,8 +497,6 @@ TEST(ExceptionHandlerTest, InstructionPointerMemory) { // data from the minidump afterwards. const uint32_t kMemorySize = 256; // bytes const int kOffset = kMemorySize / 2; - // This crashes with SIGILL on x86/x86-64/arm. - const unsigned char instructions[] = { 0xff, 0xff, 0xff, 0xff }; const pid_t child = fork(); if (child == 0) { @@ -469,7 +518,7 @@ TEST(ExceptionHandlerTest, InstructionPointerMemory) { // Write some instructions that will crash. Put them in the middle // of the block of memory, because the minidump should contain 128 // bytes on either side of the instruction pointer. - memcpy(memory + kOffset, instructions, sizeof(instructions)); + memcpy(memory + kOffset, kIllegalInstruction, sizeof(kIllegalInstruction)); FlushInstructionCache(memory, kMemorySize); // Now execute the instructions, which should crash. @@ -517,12 +566,13 @@ TEST(ExceptionHandlerTest, InstructionPointerMemory) { ASSERT_TRUE(bytes); uint8_t prefix_bytes[kOffset]; - uint8_t suffix_bytes[kMemorySize - kOffset - sizeof(instructions)]; + uint8_t suffix_bytes[kMemorySize - kOffset - sizeof(kIllegalInstruction)]; memset(prefix_bytes, 0, sizeof(prefix_bytes)); memset(suffix_bytes, 0, sizeof(suffix_bytes)); EXPECT_TRUE(memcmp(bytes, prefix_bytes, sizeof(prefix_bytes)) == 0); - EXPECT_TRUE(memcmp(bytes + kOffset, instructions, sizeof(instructions)) == 0); - EXPECT_TRUE(memcmp(bytes + kOffset + sizeof(instructions), + EXPECT_TRUE(memcmp(bytes + kOffset, kIllegalInstruction, + sizeof(kIllegalInstruction)) == 0); + EXPECT_TRUE(memcmp(bytes + kOffset + sizeof(kIllegalInstruction), suffix_bytes, sizeof(suffix_bytes)) == 0); unlink(minidump_path.c_str()); @@ -539,8 +589,6 @@ TEST(ExceptionHandlerTest, InstructionPointerMemoryMinBound) { // data from the minidump afterwards. const uint32_t kMemorySize = 256; // bytes const int kOffset = 0; - // This crashes with SIGILL on x86/x86-64/arm. - const unsigned char instructions[] = { 0xff, 0xff, 0xff, 0xff }; const pid_t child = fork(); if (child == 0) { @@ -562,7 +610,7 @@ TEST(ExceptionHandlerTest, InstructionPointerMemoryMinBound) { // Write some instructions that will crash. Put them in the middle // of the block of memory, because the minidump should contain 128 // bytes on either side of the instruction pointer. - memcpy(memory + kOffset, instructions, sizeof(instructions)); + memcpy(memory + kOffset, kIllegalInstruction, sizeof(kIllegalInstruction)); FlushInstructionCache(memory, kMemorySize); // Now execute the instructions, which should crash. @@ -609,10 +657,11 @@ TEST(ExceptionHandlerTest, InstructionPointerMemoryMinBound) { const uint8_t* bytes = region->GetMemory(); ASSERT_TRUE(bytes); - uint8_t suffix_bytes[kMemorySize / 2 - sizeof(instructions)]; + uint8_t suffix_bytes[kMemorySize / 2 - sizeof(kIllegalInstruction)]; memset(suffix_bytes, 0, sizeof(suffix_bytes)); - EXPECT_TRUE(memcmp(bytes + kOffset, instructions, sizeof(instructions)) == 0); - EXPECT_TRUE(memcmp(bytes + kOffset + sizeof(instructions), + EXPECT_TRUE(memcmp(bytes + kOffset, kIllegalInstruction, + sizeof(kIllegalInstruction)) == 0); + EXPECT_TRUE(memcmp(bytes + kOffset + sizeof(kIllegalInstruction), suffix_bytes, sizeof(suffix_bytes)) == 0); unlink(minidump_path.c_str()); } @@ -630,9 +679,7 @@ TEST(ExceptionHandlerTest, InstructionPointerMemoryMaxBound) { // if a smaller size is requested, and this test wants to // test the upper bound of the memory range. const uint32_t kMemorySize = 4096; // bytes - // This crashes with SIGILL on x86/x86-64/arm. - const unsigned char instructions[] = { 0xff, 0xff, 0xff, 0xff }; - const int kOffset = kMemorySize - sizeof(instructions); + const int kOffset = kMemorySize - sizeof(kIllegalInstruction); const pid_t child = fork(); if (child == 0) { @@ -654,7 +701,7 @@ TEST(ExceptionHandlerTest, InstructionPointerMemoryMaxBound) { // Write some instructions that will crash. Put them in the middle // of the block of memory, because the minidump should contain 128 // bytes on either side of the instruction pointer. - memcpy(memory + kOffset, instructions, sizeof(instructions)); + memcpy(memory + kOffset, kIllegalInstruction, sizeof(kIllegalInstruction)); FlushInstructionCache(memory, kMemorySize); // Now execute the instructions, which should crash. @@ -697,7 +744,7 @@ TEST(ExceptionHandlerTest, InstructionPointerMemoryMaxBound) { ASSERT_TRUE(region); const size_t kPrefixSize = 128; // bytes - EXPECT_EQ(kPrefixSize + sizeof(instructions), region->GetSize()); + EXPECT_EQ(kPrefixSize + sizeof(kIllegalInstruction), region->GetSize()); const uint8_t* bytes = region->GetMemory(); ASSERT_TRUE(bytes); @@ -705,15 +752,11 @@ TEST(ExceptionHandlerTest, InstructionPointerMemoryMaxBound) { memset(prefix_bytes, 0, sizeof(prefix_bytes)); EXPECT_TRUE(memcmp(bytes, prefix_bytes, sizeof(prefix_bytes)) == 0); EXPECT_TRUE(memcmp(bytes + kPrefixSize, - instructions, sizeof(instructions)) == 0); + kIllegalInstruction, sizeof(kIllegalInstruction)) == 0); unlink(minidump_path.c_str()); } -// If AddressSanitizer is used, NULL pointer dereferences generate SIGILL -// (illegal instruction) instead of SIGSEGV (segmentation fault). Also, -// the number of memory regions differs, so there is no point in running -// this test if AddressSanitizer is used. #ifndef ADDRESS_SANITIZER // Ensure that an extra memory block doesn't get added when the instruction @@ -731,8 +774,13 @@ TEST(ExceptionHandlerTest, InstructionPointerMemoryNullPointer) { true, -1); // Try calling a NULL pointer. typedef void (*void_function)(void); - void_function memory_function = reinterpret_cast(NULL); + // Volatile markings are needed to keep Clang from generating invalid + // opcodes. See http://crbug.com/498354 for details. + volatile void_function memory_function = + reinterpret_cast(NULL); memory_function(); + // not reached + exit(1); } close(fds[1]); @@ -760,7 +808,8 @@ TEST(ExceptionHandlerTest, InstructionPointerMemoryNullPointer) { unlink(minidump_path.c_str()); } -#endif // !ADDRESS_SANITIZER + +#endif // !ADDRESS_SANITIZER // Test that anonymous memory maps can be annotated with names and IDs. TEST(ExceptionHandlerTest, ModuleInfo) { @@ -881,6 +930,8 @@ CrashHandler(const void* crash_context, size_t crash_context_size, return true; } +#ifndef ADDRESS_SANITIZER + TEST(ExceptionHandlerTest, ExternalDumper) { int fds[2]; ASSERT_NE(socketpair(AF_UNIX, SOCK_DGRAM, 0, fds), -1); @@ -894,7 +945,7 @@ TEST(ExceptionHandlerTest, ExternalDumper) { ExceptionHandler handler(MinidumpDescriptor("/tmp1"), NULL, NULL, reinterpret_cast(fds[1]), true, -1); handler.set_crash_handler(CrashHandler); - *reinterpret_cast(NULL) = 0; + DoNullPointerDereference(); } close(fds[1]); struct msghdr msg = {0}; @@ -913,7 +964,7 @@ TEST(ExceptionHandlerTest, ExternalDumper) { const ssize_t n = HANDLE_EINTR(recvmsg(fds[0], &msg, 0)); ASSERT_EQ(static_cast(kCrashContextSize), n); ASSERT_EQ(kControlMsgSize, msg.msg_controllen); - ASSERT_EQ(static_cast(0), msg.msg_flags); + ASSERT_EQ(static_cast<__typeof__(msg.msg_flags)>(0), msg.msg_flags); ASSERT_EQ(0, close(fds[0])); pid_t crashing_pid = -1; @@ -953,6 +1004,8 @@ TEST(ExceptionHandlerTest, ExternalDumper) { unlink(templ.c_str()); } +#endif // !ADDRESS_SANITIZER + TEST(ExceptionHandlerTest, WriteMinidumpExceptionStream) { AutoTempDir temp_dir; ExceptionHandler handler(MinidumpDescriptor(temp_dir.path()), NULL, NULL, diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/base/googleinit.h b/toolkit/crashreporter/google-breakpad/src/client/linux/handler/microdump_extra_info.h similarity index 70% rename from toolkit/crashreporter/google-breakpad/src/third_party/glog/src/base/googleinit.h rename to toolkit/crashreporter/google-breakpad/src/client/linux/handler/microdump_extra_info.h index c907308e8528..b9c3d30dc06e 100644 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/base/googleinit.h +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/handler/microdump_extra_info.h @@ -1,10 +1,10 @@ -// Copyright (c) 2008, Google Inc. +// Copyright 2015 Google Inc. // All rights reserved. -// +// // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: -// +// // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above @@ -14,7 +14,7 @@ // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. -// +// // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -27,25 +27,22 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// --- -// Author: Jacob Hoffman-Andrews +#ifndef CLIENT_LINUX_HANDLER_MICRODUMP_EXTRA_INFO_H_ +#define CLIENT_LINUX_HANDLER_MICRODUMP_EXTRA_INFO_H_ -#ifndef _GOOGLEINIT_H -#define _GOOGLEINIT_H +namespace google_breakpad { -class GoogleInitializer { - public: - typedef void (*void_function)(void); - GoogleInitializer(const char* name, void_function f) { - f(); - } +struct MicrodumpExtraInfo { + // Strings pointed to by this struct are not copied, and are + // expected to remain valid for the lifetime of the process. + const char* build_fingerprint; + const char* product_info; + const char* gpu_fingerprint; + + MicrodumpExtraInfo() + : build_fingerprint(NULL), product_info(NULL), gpu_fingerprint(NULL) {} }; -#define REGISTER_MODULE_INITIALIZER(name, body) \ - namespace { \ - static void google_init_module_##name () { body; } \ - GoogleInitializer google_initializer_module_##name(#name, \ - google_init_module_##name); \ - } +} -#endif /* _GOOGLEINIT_H */ +#endif // CLIENT_LINUX_HANDLER_MICRODUMP_EXTRA_INFO_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/handler/minidump_descriptor.cc b/toolkit/crashreporter/google-breakpad/src/client/linux/handler/minidump_descriptor.cc index c4618adcb725..ce09153ddba9 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/linux/handler/minidump_descriptor.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/handler/minidump_descriptor.cc @@ -35,11 +35,17 @@ namespace google_breakpad { +//static +const MinidumpDescriptor::MicrodumpOnConsole + MinidumpDescriptor::kMicrodumpOnConsole = {}; + MinidumpDescriptor::MinidumpDescriptor(const MinidumpDescriptor& descriptor) - : fd_(descriptor.fd_), + : mode_(descriptor.mode_), + fd_(descriptor.fd_), directory_(descriptor.directory_), c_path_(NULL), - size_limit_(descriptor.size_limit_) { + size_limit_(descriptor.size_limit_), + microdump_extra_info_(descriptor.microdump_extra_info_) { // The copy constructor is not allowed to be called on a MinidumpDescriptor // with a valid path_, as getting its c_path_ would require the heap which // can cause problems in compromised environments. @@ -50,6 +56,7 @@ MinidumpDescriptor& MinidumpDescriptor::operator=( const MinidumpDescriptor& descriptor) { assert(descriptor.path_.empty()); + mode_ = descriptor.mode_; fd_ = descriptor.fd_; directory_ = descriptor.directory_; path_.clear(); @@ -59,11 +66,12 @@ MinidumpDescriptor& MinidumpDescriptor::operator=( UpdatePath(); } size_limit_ = descriptor.size_limit_; + microdump_extra_info_ = descriptor.microdump_extra_info_; return *this; } void MinidumpDescriptor::UpdatePath() { - assert(fd_ == -1 && !directory_.empty()); + assert(mode_ == kWriteMinidumpToFile && !directory_.empty()); GUID guid; char guid_str[kGUIDStringLength + 1]; @@ -72,7 +80,7 @@ void MinidumpDescriptor::UpdatePath() { } path_.clear(); - path_ = directory_ + "/" + guid_str + ".dmp"; + path_ = directory_ + "/" + guid_str + ".dmp"; c_path_ = path_.c_str(); } diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/handler/minidump_descriptor.h b/toolkit/crashreporter/google-breakpad/src/client/linux/handler/minidump_descriptor.h index 9ffe622b0689..782a60a4e7dd 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/linux/handler/minidump_descriptor.h +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/handler/minidump_descriptor.h @@ -35,20 +35,29 @@ #include +#include "client/linux/handler/microdump_extra_info.h" #include "common/using_std_string.h" -// The MinidumpDescriptor describes how to access a minidump: it can contain -// either a file descriptor or a path. -// Note that when using files, it is created with the path to a directory. -// The actual path where the minidump is generated is created by this class. +// This class describes how a crash dump should be generated, either: +// - Writing a full minidump to a file in a given directory (the actual path, +// inside the directory, is determined by this class). +// - Writing a full minidump to a given fd. +// - Writing a reduced microdump to the console (logcat on Android). namespace google_breakpad { class MinidumpDescriptor { public: - MinidumpDescriptor() : fd_(-1), size_limit_(-1) {} + struct MicrodumpOnConsole {}; + static const MicrodumpOnConsole kMicrodumpOnConsole; + + MinidumpDescriptor() + : mode_(kUninitialized), + fd_(-1), + size_limit_(-1) {} explicit MinidumpDescriptor(const string& directory) - : fd_(-1), + : mode_(kWriteMinidumpToFile), + fd_(-1), directory_(directory), c_path_(NULL), size_limit_(-1) { @@ -56,16 +65,24 @@ class MinidumpDescriptor { } explicit MinidumpDescriptor(int fd) - : fd_(fd), + : mode_(kWriteMinidumpToFd), + fd_(fd), c_path_(NULL), size_limit_(-1) { assert(fd != -1); } + explicit MinidumpDescriptor(const MicrodumpOnConsole&) + : mode_(kWriteMicrodumpToConsole), + fd_(-1), + size_limit_(-1) {} + explicit MinidumpDescriptor(const MinidumpDescriptor& descriptor); MinidumpDescriptor& operator=(const MinidumpDescriptor& descriptor); - bool IsFD() const { return fd_ != -1; } + static MinidumpDescriptor getMicrodumpDescriptor(); + + bool IsFD() const { return mode_ == kWriteMinidumpToFd; } int fd() const { return fd_; } @@ -73,6 +90,10 @@ class MinidumpDescriptor { const char* path() const { return c_path_; } + bool IsMicrodumpOnConsole() const { + return mode_ == kWriteMicrodumpToConsole; + } + // Updates the path so it is unique. // Should be called from a normal context: this methods uses the heap. void UpdatePath(); @@ -80,19 +101,47 @@ class MinidumpDescriptor { off_t size_limit() const { return size_limit_; } void set_size_limit(off_t limit) { size_limit_ = limit; } + MicrodumpExtraInfo* microdump_extra_info() { + assert(IsMicrodumpOnConsole()); + return µdump_extra_info_; + }; + private: + enum DumpMode { + kUninitialized = 0, + kWriteMinidumpToFile, + kWriteMinidumpToFd, + kWriteMicrodumpToConsole + }; + + // Specifies the dump mode (see DumpMode). + DumpMode mode_; + // The file descriptor where the minidump is generated. int fd_; // The directory where the minidump should be generated. string directory_; + // The full path to the generated minidump. string path_; + // The C string of |path_|. Precomputed so it can be access from a compromised // context. const char* c_path_; off_t size_limit_; + + // The extra microdump data (e.g. product name/version, build + // fingerprint, gpu fingerprint) that should be appended to the dump + // (microdump only). Microdumps don't have the ability of appending + // extra metadata after the dump is generated (as opposite to + // minidumps MIME fields), therefore the extra data must be provided + // upfront. Any memory pointed to by members of the + // MicrodumpExtraInfo struct must be valid for the lifetime of the + // process (read: the caller has to guarantee that it is stored in + // global static storage.) + MicrodumpExtraInfo microdump_extra_info_; }; } // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/handler/moz.build b/toolkit/crashreporter/google-breakpad/src/client/linux/handler/moz.build deleted file mode 100644 index d78090fb0c79..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/client/linux/handler/moz.build +++ /dev/null @@ -1,30 +0,0 @@ -# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*- -# vim: set filetype=python: -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -UNIFIED_SOURCES += [ - '../log/log.cc', - 'exception_handler.cc', - 'minidump_descriptor.cc', -] - -# We allow warnings for third-party code that can be updated from upstream. -ALLOW_COMPILER_WARNINGS = True - -FINAL_LIBRARY = 'xul' - -if CONFIG['OS_TARGET'] == 'Android': - # NDK5 workarounds - DEFINES['_STLP_CONST_CONSTRUCTOR_BUG'] = True - DEFINES['_STLP_NO_MEMBER_TEMPLATES'] = True - LOCAL_INCLUDES += [ - '/toolkit/crashreporter/google-breakpad/src/common/android/include', - ] - -LOCAL_INCLUDES += [ - '/toolkit/crashreporter/google-breakpad/src', -] - -include('/toolkit/crashreporter/crashreporter.mozbuild') diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/log/log.cc b/toolkit/crashreporter/google-breakpad/src/client/linux/log/log.cc index 186359139054..fc23aa6d528a 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/linux/log/log.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/log/log.cc @@ -31,15 +31,51 @@ #if defined(__ANDROID__) #include +#include #else #include "third_party/lss/linux_syscall_support.h" #endif namespace logger { +#if defined(__ANDROID__) +namespace { + +// __android_log_buf_write() is not exported in the NDK and is being used by +// dynamic runtime linking. Its declaration is taken from Android's +// system/core/include/log/log.h. +using AndroidLogBufferWriteFunc = int (*)(int bufID, int prio, const char *tag, + const char *text); +const int kAndroidCrashLogId = 4; // From LOG_ID_CRASH in log.h. +const char kAndroidLogTag[] = "google-breakpad"; + +bool g_crash_log_initialized = false; +AndroidLogBufferWriteFunc g_android_log_buf_write = nullptr; + +} // namespace + +void initializeCrashLogWriter() { + if (g_crash_log_initialized) + return; + g_android_log_buf_write = reinterpret_cast( + dlsym(RTLD_DEFAULT, "__android_log_buf_write")); + g_crash_log_initialized = true; +} + +int writeToCrashLog(const char* buf) { + // Try writing to the crash log ring buffer. If not available, fall back to + // the standard log buffer. + if (g_android_log_buf_write) { + return g_android_log_buf_write(kAndroidCrashLogId, ANDROID_LOG_FATAL, + kAndroidLogTag, buf); + } + return __android_log_write(ANDROID_LOG_FATAL, kAndroidLogTag, buf); +} +#endif + int write(const char* buf, size_t nbytes) { #if defined(__ANDROID__) - return __android_log_write(ANDROID_LOG_WARN, "google-breakpad", buf); + return __android_log_write(ANDROID_LOG_WARN, kAndroidLogTag, buf); #else return sys_write(2, buf, nbytes); #endif diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/log/log.h b/toolkit/crashreporter/google-breakpad/src/client/linux/log/log.h index a50e30dcd4f5..f94bbd5fb7b3 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/linux/log/log.h +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/log/log.h @@ -36,6 +36,20 @@ namespace logger { int write(const char* buf, size_t nbytes); +// In the case of Android the log can be written to the default system log +// (default behavior of write() above, or to the crash log (see +// writeToCrashLog() below). +#if defined(__ANDROID__) + +// The logger must be initialized in a non-compromised context. +void initializeCrashLogWriter(); + +// Once initialized, writeToCrashLog is safe to use in a compromised context, +// even if the initialization failed, in which case this will silently fall +// back on write(). +int writeToCrashLog(const char* buf); +#endif + } // namespace logger #endif // CLIENT_LINUX_LOG_LOG_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/microdump_writer/microdump_writer.cc b/toolkit/crashreporter/google-breakpad/src/client/linux/microdump_writer/microdump_writer.cc new file mode 100644 index 000000000000..aa9f94136761 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/microdump_writer/microdump_writer.cc @@ -0,0 +1,433 @@ +// Copyright (c) 2014, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// This translation unit generates microdumps into the console (logcat on +// Android). See crbug.com/410294 for more info and design docs. + +#include "client/linux/microdump_writer/microdump_writer.h" + +#include + +#include "client/linux/dump_writer_common/thread_info.h" +#include "client/linux/dump_writer_common/ucontext_reader.h" +#include "client/linux/handler/exception_handler.h" +#include "client/linux/handler/microdump_extra_info.h" +#include "client/linux/log/log.h" +#include "client/linux/minidump_writer/linux_ptrace_dumper.h" +#include "common/linux/linux_libc_support.h" + +namespace { + +using google_breakpad::ExceptionHandler; +using google_breakpad::LinuxDumper; +using google_breakpad::LinuxPtraceDumper; +using google_breakpad::MappingInfo; +using google_breakpad::MappingList; +using google_breakpad::MicrodumpExtraInfo; +using google_breakpad::RawContextCPU; +using google_breakpad::ThreadInfo; +using google_breakpad::UContextReader; + +const size_t kLineBufferSize = 2048; + +class MicrodumpWriter { + public: + MicrodumpWriter(const ExceptionHandler::CrashContext* context, + const MappingList& mappings, + const MicrodumpExtraInfo& microdump_extra_info, + LinuxDumper* dumper) + : ucontext_(context ? &context->context : NULL), +#if !defined(__ARM_EABI__) && !defined(__mips__) + float_state_(context ? &context->float_state : NULL), +#endif + dumper_(dumper), + mapping_list_(mappings), + microdump_extra_info_(microdump_extra_info), + log_line_(NULL) { + log_line_ = reinterpret_cast(Alloc(kLineBufferSize)); + if (log_line_) + log_line_[0] = '\0'; // Clear out the log line buffer. + } + + ~MicrodumpWriter() { dumper_->ThreadsResume(); } + + bool Init() { + // In the exceptional case where the system was out of memory and there + // wasn't even room to allocate the line buffer, bail out. There is nothing + // useful we can possibly achieve without the ability to Log. At least let's + // try to not crash. + if (!dumper_->Init() || !log_line_) + return false; + return dumper_->ThreadsSuspend() && dumper_->LateInit(); + } + + bool Dump() { + bool success; + LogLine("-----BEGIN BREAKPAD MICRODUMP-----"); + DumpProductInformation(); + DumpOSInformation(); + DumpGPUInformation(); + success = DumpCrashingThread(); + if (success) + success = DumpMappings(); + LogLine("-----END BREAKPAD MICRODUMP-----"); + dumper_->ThreadsResume(); + return success; + } + + private: + // Writes one line to the system log. + void LogLine(const char* msg) { +#if defined(__ANDROID__) + logger::writeToCrashLog(msg); +#else + logger::write(msg, my_strlen(msg)); + logger::write("\n", 1); +#endif + } + + // Stages the given string in the current line buffer. + void LogAppend(const char* str) { + my_strlcat(log_line_, str, kLineBufferSize); + } + + // As above (required to take precedence over template specialization below). + void LogAppend(char* str) { + LogAppend(const_cast(str)); + } + + // Stages the hex repr. of the given int type in the current line buffer. + template + void LogAppend(T value) { + // Make enough room to hex encode the largest int type + NUL. + static const char HEX[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + 'A', 'B', 'C', 'D', 'E', 'F'}; + char hexstr[sizeof(T) * 2 + 1]; + for (int i = sizeof(T) * 2 - 1; i >= 0; --i, value >>= 4) + hexstr[i] = HEX[static_cast(value) & 0x0F]; + hexstr[sizeof(T) * 2] = '\0'; + LogAppend(hexstr); + } + + // Stages the buffer content hex-encoded in the current line buffer. + void LogAppend(const void* buf, size_t length) { + const uint8_t* ptr = reinterpret_cast(buf); + for (size_t i = 0; i < length; ++i, ++ptr) + LogAppend(*ptr); + } + + // Writes out the current line buffer on the system log. + void LogCommitLine() { + LogLine(log_line_); + my_strlcpy(log_line_, "", kLineBufferSize); + } + + void DumpProductInformation() { + LogAppend("V "); + if (microdump_extra_info_.product_info) { + LogAppend(microdump_extra_info_.product_info); + } else { + LogAppend("UNKNOWN:0.0.0.0"); + } + LogCommitLine(); + } + + void DumpOSInformation() { + const uint8_t n_cpus = static_cast(sysconf(_SC_NPROCESSORS_CONF)); + +#if defined(__ANDROID__) + const char kOSId[] = "A"; +#else + const char kOSId[] = "L"; +#endif + +// Dump the runtime architecture. On multiarch devices it might not match the +// hw architecture (the one returned by uname()), for instance in the case of +// a 32-bit app running on a aarch64 device. +#if defined(__aarch64__) + const char kArch[] = "arm64"; +#elif defined(__ARMEL__) + const char kArch[] = "arm"; +#elif defined(__x86_64__) + const char kArch[] = "x86_64"; +#elif defined(__i386__) + const char kArch[] = "x86"; +#elif defined(__mips__) + const char kArch[] = "mips"; +#else +#error "This code has not been ported to your platform yet" +#endif + + LogAppend("O "); + LogAppend(kOSId); + LogAppend(" "); + LogAppend(kArch); + LogAppend(" "); + LogAppend(n_cpus); + LogAppend(" "); + + // Dump the HW architecture (e.g., armv7l, aarch64). + struct utsname uts; + const bool has_uts_info = (uname(&uts) == 0); + const char* hwArch = has_uts_info ? uts.machine : "unknown_hw_arch"; + LogAppend(hwArch); + LogAppend(" "); + + // If the client has attached a build fingerprint to the MinidumpDescriptor + // use that one. Otherwise try to get some basic info from uname(). + if (microdump_extra_info_.build_fingerprint) { + LogAppend(microdump_extra_info_.build_fingerprint); + } else if (has_uts_info) { + LogAppend(uts.release); + LogAppend(" "); + LogAppend(uts.version); + } else { + LogAppend("no build fingerprint available"); + } + LogCommitLine(); + } + + void DumpGPUInformation() { + LogAppend("G "); + if (microdump_extra_info_.gpu_fingerprint) { + LogAppend(microdump_extra_info_.gpu_fingerprint); + } else { + LogAppend("UNKNOWN"); + } + LogCommitLine(); + } + + bool DumpThreadStack(uint32_t thread_id, + uintptr_t stack_pointer, + int max_stack_len, + uint8_t** stack_copy) { + *stack_copy = NULL; + const void* stack; + size_t stack_len; + + if (!dumper_->GetStackInfo(&stack, &stack_len, stack_pointer)) { + // The stack pointer might not be available. In this case we don't hard + // fail, just produce a (almost useless) microdump w/o a stack section. + return true; + } + + LogAppend("S 0 "); + LogAppend(stack_pointer); + LogAppend(" "); + LogAppend(reinterpret_cast(stack)); + LogAppend(" "); + LogAppend(stack_len); + LogCommitLine(); + + if (max_stack_len >= 0 && + stack_len > static_cast(max_stack_len)) { + stack_len = max_stack_len; + } + + *stack_copy = reinterpret_cast(Alloc(stack_len)); + dumper_->CopyFromProcess(*stack_copy, thread_id, stack, stack_len); + + // Dump the content of the stack, splicing it into chunks which size is + // compatible with the max logcat line size (see LOGGER_ENTRY_MAX_PAYLOAD). + const size_t STACK_DUMP_CHUNK_SIZE = 384; + for (size_t stack_off = 0; stack_off < stack_len; + stack_off += STACK_DUMP_CHUNK_SIZE) { + LogAppend("S "); + LogAppend(reinterpret_cast(stack) + stack_off); + LogAppend(" "); + LogAppend(*stack_copy + stack_off, + std::min(STACK_DUMP_CHUNK_SIZE, stack_len - stack_off)); + LogCommitLine(); + } + return true; + } + + // Write information about the crashing thread. + bool DumpCrashingThread() { + const unsigned num_threads = dumper_->threads().size(); + + for (unsigned i = 0; i < num_threads; ++i) { + MDRawThread thread; + my_memset(&thread, 0, sizeof(thread)); + thread.thread_id = dumper_->threads()[i]; + + // Dump only the crashing thread. + if (static_cast(thread.thread_id) != dumper_->crash_thread()) + continue; + + assert(ucontext_); + assert(!dumper_->IsPostMortem()); + + uint8_t* stack_copy; + const uintptr_t stack_ptr = UContextReader::GetStackPointer(ucontext_); + if (!DumpThreadStack(thread.thread_id, stack_ptr, -1, &stack_copy)) + return false; + + RawContextCPU cpu; + my_memset(&cpu, 0, sizeof(RawContextCPU)); +#if !defined(__ARM_EABI__) && !defined(__mips__) + UContextReader::FillCPUContext(&cpu, ucontext_, float_state_); +#else + UContextReader::FillCPUContext(&cpu, ucontext_); +#endif + DumpCPUState(&cpu); + } + return true; + } + + void DumpCPUState(RawContextCPU* cpu) { + LogAppend("C "); + LogAppend(cpu, sizeof(*cpu)); + LogCommitLine(); + } + + // If there is caller-provided information about this mapping + // in the mapping_list_ list, return true. Otherwise, return false. + bool HaveMappingInfo(const MappingInfo& mapping) { + for (MappingList::const_iterator iter = mapping_list_.begin(); + iter != mapping_list_.end(); + ++iter) { + // Ignore any mappings that are wholly contained within + // mappings in the mapping_info_ list. + if (mapping.start_addr >= iter->first.start_addr && + (mapping.start_addr + mapping.size) <= + (iter->first.start_addr + iter->first.size)) { + return true; + } + } + return false; + } + + // Dump information about the provided |mapping|. If |identifier| is non-NULL, + // use it instead of calculating a file ID from the mapping. + void DumpModule(const MappingInfo& mapping, + bool member, + unsigned int mapping_id, + const uint8_t* identifier) { + MDGUID module_identifier; + if (identifier) { + // GUID was provided by caller. + my_memcpy(&module_identifier, identifier, sizeof(MDGUID)); + } else { + dumper_->ElfFileIdentifierForMapping( + mapping, + member, + mapping_id, + reinterpret_cast(&module_identifier)); + } + + char file_name[NAME_MAX]; + char file_path[NAME_MAX]; + LinuxDumper::GetMappingEffectiveNameAndPath( + mapping, file_path, sizeof(file_path), file_name, sizeof(file_name)); + + LogAppend("M "); + LogAppend(static_cast(mapping.start_addr)); + LogAppend(" "); + LogAppend(mapping.offset); + LogAppend(" "); + LogAppend(mapping.size); + LogAppend(" "); + LogAppend(module_identifier.data1); + LogAppend(module_identifier.data2); + LogAppend(module_identifier.data3); + LogAppend(module_identifier.data4[0]); + LogAppend(module_identifier.data4[1]); + LogAppend(module_identifier.data4[2]); + LogAppend(module_identifier.data4[3]); + LogAppend(module_identifier.data4[4]); + LogAppend(module_identifier.data4[5]); + LogAppend(module_identifier.data4[6]); + LogAppend(module_identifier.data4[7]); + LogAppend("0 "); // Age is always 0 on Linux. + LogAppend(file_name); + LogCommitLine(); + } + + // Write information about the mappings in effect. + bool DumpMappings() { + // First write all the mappings from the dumper + for (unsigned i = 0; i < dumper_->mappings().size(); ++i) { + const MappingInfo& mapping = *dumper_->mappings()[i]; + if (mapping.name[0] == 0 || // only want modules with filenames. + !mapping.exec || // only want executable mappings. + mapping.size < 4096 || // too small to get a signature for. + HaveMappingInfo(mapping)) { + continue; + } + + DumpModule(mapping, true, i, NULL); + } + // Next write all the mappings provided by the caller + for (MappingList::const_iterator iter = mapping_list_.begin(); + iter != mapping_list_.end(); + ++iter) { + DumpModule(iter->first, false, 0, iter->second); + } + return true; + } + + void* Alloc(unsigned bytes) { return dumper_->allocator()->Alloc(bytes); } + + const struct ucontext* const ucontext_; +#if !defined(__ARM_EABI__) && !defined(__mips__) + const google_breakpad::fpstate_t* const float_state_; +#endif + LinuxDumper* dumper_; + const MappingList& mapping_list_; + const MicrodumpExtraInfo microdump_extra_info_; + char* log_line_; +}; +} // namespace + +namespace google_breakpad { + +bool WriteMicrodump(pid_t crashing_process, + const void* blob, + size_t blob_size, + const MappingList& mappings, + const MicrodumpExtraInfo& microdump_extra_info) { + LinuxPtraceDumper dumper(crashing_process); + const ExceptionHandler::CrashContext* context = NULL; + if (blob) { + if (blob_size != sizeof(ExceptionHandler::CrashContext)) + return false; + context = reinterpret_cast(blob); + dumper.set_crash_address( + reinterpret_cast(context->siginfo.si_addr)); + dumper.set_crash_signal(context->siginfo.si_signo); + dumper.set_crash_thread(context->tid); + } + MicrodumpWriter writer(context, mappings, microdump_extra_info, &dumper); + if (!writer.Init()) + return false; + return writer.Dump(); +} + +} // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/processor/testdata/linux_test_app.cc b/toolkit/crashreporter/google-breakpad/src/client/linux/microdump_writer/microdump_writer.h similarity index 50% rename from toolkit/crashreporter/google-breakpad/src/processor/testdata/linux_test_app.cc rename to toolkit/crashreporter/google-breakpad/src/client/linux/microdump_writer/microdump_writer.h index 18f0f62fd878..7c742761d7ca 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/testdata/linux_test_app.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/microdump_writer/microdump_writer.h @@ -1,4 +1,4 @@ -// Copyright (c) 2009, Google Inc. +// Copyright (c) 2014, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -27,56 +27,39 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// Breakpad test application for Linux. When run, it generates one on-demand -// minidump and then crashes, which should generate an on-crash minidump. -// dump_syms can be used to extract symbol information for use in processing. +#ifndef CLIENT_LINUX_MINIDUMP_WRITER_MICRODUMP_WRITER_H_ +#define CLIENT_LINUX_MINIDUMP_WRITER_MICRODUMP_WRITER_H_ -// To build: -// g++ -g -o linux_test_app -I ../../ -L../../client/linux linux_test_app.cc \ -// -lbreakpad -// Add -m32 to build a 32-bit executable, or -m64 for a 64-bit one -// (assuming your environment supports it). Replace -g with -gstabs+ to -// generate an executable with STABS symbols (needs -m32), or -gdwarf-2 for one -// with DWARF symbols (32- or 64-bit) - -#include +#include #include -#include -#include +#include "client/linux/dump_writer_common/mapping_info.h" -#include "client/linux/handler/exception_handler.h" -#include "third_party/lss/linux_syscall_support.h" +namespace google_breakpad { -namespace { +struct MicrodumpExtraInfo; -// google_breakpad::MinidumpCallback to invoke after minidump generation. -static bool callback(const char *dump_path, const char *id, - void *context, - bool succeeded) { - if (succeeded) { - printf("dump guid is %s\n", id); - } else { - printf("dump failed\n"); - } - fflush(stdout); +// Writes a microdump (a reduced dump containing only the state of the crashing +// thread) on the console (logcat on Android). These functions do not malloc nor +// use libc functions which may. Thus, it can be used in contexts where the +// state of the heap may be corrupt. +// Args: +// crashing_process: the pid of the crashing process. This must be trusted. +// blob: a blob of data from the crashing process. See exception_handler.h +// blob_size: the length of |blob| in bytes. +// mappings: a list of additional mappings provided by the application. +// build_fingerprint: a (optional) C string which determines the OS +// build fingerprint (e.g., aosp/occam/mako:5.1.1/LMY47W/1234:eng/dev-keys). +// product_info: a (optional) C string which determines the product name and +// version (e.g., WebView:42.0.2311.136). +// +// Returns true iff successful. +bool WriteMicrodump(pid_t crashing_process, + const void* blob, + size_t blob_size, + const MappingList& mappings, + const MicrodumpExtraInfo& microdump_extra_info); - return succeeded; -} +} // namespace google_breakpad -static void CrashFunction() { - int *i = reinterpret_cast(0x45); - *i = 5; // crash! -} - -} // namespace - -int main(int argc, char **argv) { - google_breakpad::ExceptionHandler eh(".", NULL, callback, NULL, true); - if (!eh.WriteMinidump()) { - printf("Failed to generate on-demand minidump\n"); - } - CrashFunction(); - printf("did not crash?\n"); - return 0; -} +#endif // CLIENT_LINUX_MINIDUMP_WRITER_MICRODUMP_WRITER_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/microdump_writer/microdump_writer_unittest.cc b/toolkit/crashreporter/google-breakpad/src/client/linux/microdump_writer/microdump_writer_unittest.cc new file mode 100644 index 000000000000..58a73118894c --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/microdump_writer/microdump_writer_unittest.cc @@ -0,0 +1,257 @@ +// Copyright (c) 2014 Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include +#include +#include +#include + +#include +#include + +#include "breakpad_googletest_includes.h" +#include "client/linux/handler/exception_handler.h" +#include "client/linux/handler/microdump_extra_info.h" +#include "client/linux/microdump_writer/microdump_writer.h" +#include "common/linux/eintr_wrapper.h" +#include "common/linux/ignore_ret.h" +#include "common/scoped_ptr.h" +#include "common/tests/auto_tempdir.h" +#include "common/using_std_string.h" + +using namespace google_breakpad; + +namespace { + +typedef testing::Test MicrodumpWriterTest; + +MicrodumpExtraInfo MakeMicrodumpExtraInfo( + const char* build_fingerprint, + const char* product_info, + const char* gpu_fingerprint) { + MicrodumpExtraInfo info; + info.build_fingerprint = build_fingerprint; + info.product_info = product_info; + info.gpu_fingerprint = gpu_fingerprint; + return info; +} + +void CrashAndGetMicrodump( + const MappingList& mappings, + const MicrodumpExtraInfo& microdump_extra_info, + scoped_array* buf) { + int fds[2]; + ASSERT_NE(-1, pipe(fds)); + + AutoTempDir temp_dir; + string stderr_file = temp_dir.path() + "/stderr.log"; + int err_fd = open(stderr_file.c_str(), O_CREAT | O_RDWR, S_IRUSR | S_IWUSR); + ASSERT_NE(-1, err_fd); + + const pid_t child = fork(); + if (child == 0) { + close(fds[1]); + char b; + IGNORE_RET(HANDLE_EINTR(read(fds[0], &b, sizeof(b)))); + close(fds[0]); + syscall(__NR_exit); + } + close(fds[0]); + + ExceptionHandler::CrashContext context; + memset(&context, 0, sizeof(context)); + + // Set a non-zero tid to avoid tripping asserts. + context.tid = child; + + // Redirect temporarily stderr to the stderr.log file. + int save_err = dup(STDERR_FILENO); + ASSERT_NE(-1, save_err); + ASSERT_NE(-1, dup2(err_fd, STDERR_FILENO)); + + ASSERT_TRUE(WriteMicrodump(child, &context, sizeof(context), mappings, + microdump_extra_info)); + + // Revert stderr back to the console. + dup2(save_err, STDERR_FILENO); + close(save_err); + + // Read back the stderr file and check for the microdump marker. + fsync(err_fd); + lseek(err_fd, 0, SEEK_SET); + const size_t kBufSize = 64 * 1024; + buf->reset(new char[kBufSize]); + ASSERT_GT(read(err_fd, buf->get(), kBufSize), 0); + + close(err_fd); + close(fds[1]); + + ASSERT_NE(static_cast(0), strstr( + buf->get(), "-----BEGIN BREAKPAD MICRODUMP-----")); + ASSERT_NE(static_cast(0), strstr( + buf->get(), "-----END BREAKPAD MICRODUMP-----")); +} + +void CheckMicrodumpContents(const string& microdump_content, + const MicrodumpExtraInfo& expected_info) { + std::istringstream iss(microdump_content); + bool did_find_os_info = false; + bool did_find_product_info = false; + bool did_find_gpu_info = false; + for (string line; std::getline(iss, line);) { + if (line.find("O ") == 0) { + std::istringstream os_info_tokens(line); + string token; + os_info_tokens.ignore(2); // Ignore the "O " preamble. + // Check the OS descriptor char (L=Linux, A=Android). + os_info_tokens >> token; + ASSERT_TRUE(token == "L" || token == "A"); + + os_info_tokens >> token; // HW architecture. + os_info_tokens >> token; // Number of cpus. + for (size_t i = 0; i < token.size(); ++i) + ASSERT_TRUE(isxdigit(token[i])); + os_info_tokens >> token; // SW architecture. + + // Check that the build fingerprint is in the right place. + os_info_tokens >> token; + if (expected_info.build_fingerprint) + ASSERT_EQ(expected_info.build_fingerprint, token); + did_find_os_info = true; + } else if (line.find("V ") == 0) { + if (expected_info.product_info) + ASSERT_EQ(string("V ") + expected_info.product_info, line); + did_find_product_info = true; + } else if (line.find("G ") == 0) { + if (expected_info.gpu_fingerprint) + ASSERT_EQ(string("G ") + expected_info.gpu_fingerprint, line); + did_find_gpu_info = true; + } + } + ASSERT_TRUE(did_find_os_info); + ASSERT_TRUE(did_find_product_info); + ASSERT_TRUE(did_find_gpu_info); +} + +void CheckMicrodumpContents(const string& microdump_content, + const string& expected_fingerprint, + const string& expected_product_info, + const string& expected_gpu_fingerprint) { + CheckMicrodumpContents( + microdump_content, + MakeMicrodumpExtraInfo(expected_fingerprint.c_str(), + expected_product_info.c_str(), + expected_gpu_fingerprint.c_str())); +} + +TEST(MicrodumpWriterTest, BasicWithMappings) { + // Push some extra mapping to check the MappingList logic. + const uint32_t memory_size = sysconf(_SC_PAGESIZE); + const char* kMemoryName = "libfoo.so"; + const uint8_t kModuleGUID[sizeof(MDGUID)] = { + 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, + 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF + }; + + MappingInfo info; + info.start_addr = memory_size; + info.size = memory_size; + info.offset = 42; + strcpy(info.name, kMemoryName); + + MappingList mappings; + MappingEntry mapping; + mapping.first = info; + memcpy(mapping.second, kModuleGUID, sizeof(MDGUID)); + mappings.push_back(mapping); + + scoped_array buf; + CrashAndGetMicrodump(mappings, MicrodumpExtraInfo(), &buf); + +#ifdef __LP64__ + ASSERT_NE(static_cast(0), strstr( + buf.get(), "M 0000000000001000 000000000000002A 0000000000001000 " + "33221100554477668899AABBCCDDEEFF0 libfoo.so")); +#else + ASSERT_NE(static_cast(0), strstr( + buf.get(), "M 00001000 0000002A 00001000 " + "33221100554477668899AABBCCDDEEFF0 libfoo.so")); +#endif + + // In absence of a product info in the minidump, the writer should just write + // an unknown marker. + ASSERT_NE(static_cast(0), strstr( + buf.get(), "V UNKNOWN:0.0.0.0")); +} + +// Ensure that the product info and build fingerprint metadata show up in the +// final microdump if present. +TEST(MicrodumpWriterTest, BuildFingerprintAndProductInfo) { + const char kProductInfo[] = "MockProduct:42.0.2311.99"; + const char kBuildFingerprint[] = + "aosp/occam/mako:5.1.1/LMY47W/12345678:userdegbug/dev-keys"; + const char kGPUFingerprint[] = + "Qualcomm;Adreno (TM) 330;OpenGL ES 3.0 V@104.0 AU@ (GIT@Id3510ff6dc)"; + const MicrodumpExtraInfo kMicrodumpExtraInfo( + MakeMicrodumpExtraInfo(kBuildFingerprint, kProductInfo, kGPUFingerprint)); + scoped_array buf; + MappingList no_mappings; + + CrashAndGetMicrodump(no_mappings, kMicrodumpExtraInfo, &buf); + CheckMicrodumpContents(string(buf.get()), kMicrodumpExtraInfo); +} + +TEST(MicrodumpWriterTest, NoProductInfo) { + const char kBuildFingerprint[] = "foobar"; + const char kGPUFingerprint[] = "bazqux"; + scoped_array buf; + MappingList no_mappings; + + const MicrodumpExtraInfo kMicrodumpExtraInfoNoProductInfo( + MakeMicrodumpExtraInfo(kBuildFingerprint, NULL, kGPUFingerprint)); + + CrashAndGetMicrodump(no_mappings, kMicrodumpExtraInfoNoProductInfo, &buf); + CheckMicrodumpContents(string(buf.get()), kBuildFingerprint, + "UNKNOWN:0.0.0.0", kGPUFingerprint); +} + +TEST(MicrodumpWriterTest, NoGPUInfo) { + const char kProductInfo[] = "bazqux"; + const char kBuildFingerprint[] = "foobar"; + scoped_array buf; + MappingList no_mappings; + + const MicrodumpExtraInfo kMicrodumpExtraInfoNoGPUInfo( + MakeMicrodumpExtraInfo(kBuildFingerprint, kProductInfo, NULL)); + + CrashAndGetMicrodump(no_mappings, kMicrodumpExtraInfoNoGPUInfo, &buf); + CheckMicrodumpContents(string(buf.get()), kBuildFingerprint, + kProductInfo, "UNKNOWN"); +} +} // namespace diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/cpu_set.h b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/cpu_set.h new file mode 100644 index 000000000000..1cca9aa5a0fc --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/cpu_set.h @@ -0,0 +1,144 @@ +// Copyright (c) 2013, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifndef CLIENT_LINUX_MINIDUMP_WRITER_CPU_SET_H_ +#define CLIENT_LINUX_MINIDUMP_WRITER_CPU_SET_H_ + +#include +#include +#include + +#include "common/linux/linux_libc_support.h" +#include "third_party/lss/linux_syscall_support.h" + +namespace google_breakpad { + +// Helper class used to model a set of CPUs, as read from sysfs +// files like /sys/devices/system/cpu/present +// See See http://www.kernel.org/doc/Documentation/cputopology.txt +class CpuSet { +public: + // The maximum number of supported CPUs. + static const size_t kMaxCpus = 1024; + + CpuSet() { + my_memset(mask_, 0, sizeof(mask_)); + } + + // Parse a sysfs file to extract the corresponding CPU set. + bool ParseSysFile(int fd) { + char buffer[512]; + int ret = sys_read(fd, buffer, sizeof(buffer)-1); + if (ret < 0) + return false; + + buffer[ret] = '\0'; + + // Expected format: comma-separated list of items, where each + // item can be a decimal integer, or two decimal integers separated + // by a dash. + // E.g.: + // 0 + // 0,1,2,3 + // 0-3 + // 1,10-23 + const char* p = buffer; + const char* p_end = p + ret; + while (p < p_end) { + // Skip leading space, if any + while (p < p_end && my_isspace(*p)) + p++; + + // Find start and size of current item. + const char* item = p; + size_t item_len = static_cast(p_end - p); + const char* item_next = + static_cast(my_memchr(p, ',', item_len)); + if (item_next != NULL) { + p = item_next + 1; + item_len = static_cast(item_next - item); + } else { + p = p_end; + item_next = p_end; + } + + // Ignore trailing spaces. + while (item_next > item && my_isspace(item_next[-1])) + item_next--; + + // skip empty items. + if (item_next == item) + continue; + + // read first decimal value. + uintptr_t start = 0; + const char* next = my_read_decimal_ptr(&start, item); + uintptr_t end = start; + if (*next == '-') + my_read_decimal_ptr(&end, next+1); + + while (start <= end) + SetBit(start++); + } + return true; + } + + // Intersect this CPU set with another one. + void IntersectWith(const CpuSet& other) { + for (size_t nn = 0; nn < kMaskWordCount; ++nn) + mask_[nn] &= other.mask_[nn]; + } + + // Return the number of CPUs in this set. + int GetCount() { + int result = 0; + for (size_t nn = 0; nn < kMaskWordCount; ++nn) { + result += __builtin_popcount(mask_[nn]); + } + return result; + } + +private: + void SetBit(uintptr_t index) { + size_t nn = static_cast(index); + if (nn < kMaxCpus) + mask_[nn / kMaskWordBits] |= (1U << (nn % kMaskWordBits)); + } + + typedef uint32_t MaskWordType; + static const size_t kMaskWordBits = 8*sizeof(MaskWordType); + static const size_t kMaskWordCount = + (kMaxCpus + kMaskWordBits - 1) / kMaskWordBits; + + MaskWordType mask_[kMaskWordCount]; +}; + +} // namespace google_breakpad + +#endif // CLIENT_LINUX_MINIDUMP_WRITER_CPU_SET_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/cpu_set_unittest.cc b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/cpu_set_unittest.cc new file mode 100644 index 000000000000..e2274bd17a9d --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/cpu_set_unittest.cc @@ -0,0 +1,164 @@ +// Copyright (c) 2013, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include +#include +#include +#include +#include +#include + +#include "breakpad_googletest_includes.h" +#include "client/linux/minidump_writer/cpu_set.h" +#include "common/linux/tests/auto_testfile.h" + +using namespace google_breakpad; + +namespace { + +typedef testing::Test CpuSetTest; + +// Helper class to write test text file to a temporary file and return +// its file descriptor. +class ScopedTestFile : public AutoTestFile { +public: + explicit ScopedTestFile(const char* text) + : AutoTestFile("cpu_set", text) { + } +}; + +} + +TEST(CpuSetTest, EmptyCount) { + CpuSet set; + ASSERT_EQ(0, set.GetCount()); +} + +TEST(CpuSetTest, OneCpu) { + ScopedTestFile file("10"); + ASSERT_TRUE(file.IsOk()); + + CpuSet set; + ASSERT_TRUE(set.ParseSysFile(file.GetFd())); + ASSERT_EQ(1, set.GetCount()); +} + +TEST(CpuSetTest, OneCpuTerminated) { + ScopedTestFile file("10\n"); + ASSERT_TRUE(file.IsOk()); + + CpuSet set; + ASSERT_TRUE(set.ParseSysFile(file.GetFd())); + ASSERT_EQ(1, set.GetCount()); +} + +TEST(CpuSetTest, TwoCpusWithComma) { + ScopedTestFile file("1,10"); + ASSERT_TRUE(file.IsOk()); + + CpuSet set; + ASSERT_TRUE(set.ParseSysFile(file.GetFd())); + ASSERT_EQ(2, set.GetCount()); +} + +TEST(CpuSetTest, TwoCpusWithRange) { + ScopedTestFile file("1-2"); + ASSERT_TRUE(file.IsOk()); + + CpuSet set; + ASSERT_TRUE(set.ParseSysFile(file.GetFd())); + ASSERT_EQ(2, set.GetCount()); +} + +TEST(CpuSetTest, TenCpusWithRange) { + ScopedTestFile file("9-18"); + ASSERT_TRUE(file.IsOk()); + + CpuSet set; + ASSERT_TRUE(set.ParseSysFile(file.GetFd())); + ASSERT_EQ(10, set.GetCount()); +} + +TEST(CpuSetTest, MultiItems) { + ScopedTestFile file("0, 2-4, 128"); + ASSERT_TRUE(file.IsOk()); + + CpuSet set; + ASSERT_TRUE(set.ParseSysFile(file.GetFd())); + ASSERT_EQ(5, set.GetCount()); +} + +TEST(CpuSetTest, IntersectWith) { + ScopedTestFile file1("9-19"); + ASSERT_TRUE(file1.IsOk()); + CpuSet set1; + ASSERT_TRUE(set1.ParseSysFile(file1.GetFd())); + ASSERT_EQ(11, set1.GetCount()); + + ScopedTestFile file2("16-24"); + ASSERT_TRUE(file2.IsOk()); + CpuSet set2; + ASSERT_TRUE(set2.ParseSysFile(file2.GetFd())); + ASSERT_EQ(9, set2.GetCount()); + + set1.IntersectWith(set2); + ASSERT_EQ(4, set1.GetCount()); + ASSERT_EQ(9, set2.GetCount()); +} + +TEST(CpuSetTest, SelfIntersection) { + ScopedTestFile file1("9-19"); + ASSERT_TRUE(file1.IsOk()); + CpuSet set1; + ASSERT_TRUE(set1.ParseSysFile(file1.GetFd())); + ASSERT_EQ(11, set1.GetCount()); + + set1.IntersectWith(set1); + ASSERT_EQ(11, set1.GetCount()); +} + +TEST(CpuSetTest, EmptyIntersection) { + ScopedTestFile file1("0-19"); + ASSERT_TRUE(file1.IsOk()); + CpuSet set1; + ASSERT_TRUE(set1.ParseSysFile(file1.GetFd())); + ASSERT_EQ(20, set1.GetCount()); + + ScopedTestFile file2("20-39"); + ASSERT_TRUE(file2.IsOk()); + CpuSet set2; + ASSERT_TRUE(set2.ParseSysFile(file2.GetFd())); + ASSERT_EQ(20, set2.GetCount()); + + set1.IntersectWith(set2); + ASSERT_EQ(0, set1.GetCount()); + + ASSERT_EQ(20, set2.GetCount()); +} + diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/line_reader_unittest.cc b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/line_reader_unittest.cc index 4448281df3d5..29686f04aae6 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/line_reader_unittest.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/line_reader_unittest.cc @@ -33,48 +33,41 @@ #include "client/linux/minidump_writer/line_reader.h" #include "breakpad_googletest_includes.h" -#include "common/linux/eintr_wrapper.h" +#include "common/linux/tests/auto_testfile.h" using namespace google_breakpad; -#if !defined(__ANDROID__) -#define TEMPDIR "/tmp" -#else -#define TEMPDIR "/data/local/tmp" -#endif - -static int TemporaryFile() { - static const char templ[] = TEMPDIR "/line-reader-unittest-XXXXXX"; - char templ_copy[sizeof(templ)]; - memcpy(templ_copy, templ, sizeof(templ)); - const int fd = mkstemp(templ_copy); - if (fd >= 0) - unlink(templ_copy); - - return fd; -} - namespace { + typedef testing::Test LineReaderTest; + +class ScopedTestFile : public AutoTestFile { +public: + explicit ScopedTestFile(const char* text) + : AutoTestFile("line_reader", text) { + } + + ScopedTestFile(const char* text, size_t text_len) + : AutoTestFile("line_reader", text, text_len) { + } +}; + } TEST(LineReaderTest, EmptyFile) { - const int fd = TemporaryFile(); - LineReader reader(fd); + ScopedTestFile file(""); + ASSERT_TRUE(file.IsOk()); + LineReader reader(file.GetFd()); const char *line; unsigned len; ASSERT_FALSE(reader.GetNextLine(&line, &len)); - - close(fd); } TEST(LineReaderTest, OneLineTerminated) { - const int fd = TemporaryFile(); - const int r = HANDLE_EINTR(write(fd, "a\n", 2)); - ASSERT_EQ(2, r); - lseek(fd, 0, SEEK_SET); - LineReader reader(fd); + ScopedTestFile file("a\n"); + ASSERT_TRUE(file.IsOk()); + LineReader reader(file.GetFd()); const char *line; unsigned int len; @@ -85,16 +78,12 @@ TEST(LineReaderTest, OneLineTerminated) { reader.PopLine(len); ASSERT_FALSE(reader.GetNextLine(&line, &len)); - - close(fd); } TEST(LineReaderTest, OneLine) { - const int fd = TemporaryFile(); - const int r = HANDLE_EINTR(write(fd, "a", 1)); - ASSERT_EQ(1, r); - lseek(fd, 0, SEEK_SET); - LineReader reader(fd); + ScopedTestFile file("a"); + ASSERT_TRUE(file.IsOk()); + LineReader reader(file.GetFd()); const char *line; unsigned len; @@ -105,16 +94,12 @@ TEST(LineReaderTest, OneLine) { reader.PopLine(len); ASSERT_FALSE(reader.GetNextLine(&line, &len)); - - close(fd); } TEST(LineReaderTest, TwoLinesTerminated) { - const int fd = TemporaryFile(); - const int r = HANDLE_EINTR(write(fd, "a\nb\n", 4)); - ASSERT_EQ(4, r); - lseek(fd, 0, SEEK_SET); - LineReader reader(fd); + ScopedTestFile file("a\nb\n"); + ASSERT_TRUE(file.IsOk()); + LineReader reader(file.GetFd()); const char *line; unsigned len; @@ -131,16 +116,12 @@ TEST(LineReaderTest, TwoLinesTerminated) { reader.PopLine(len); ASSERT_FALSE(reader.GetNextLine(&line, &len)); - - close(fd); } TEST(LineReaderTest, TwoLines) { - const int fd = TemporaryFile(); - const int r = HANDLE_EINTR(write(fd, "a\nb", 3)); - ASSERT_EQ(3, r); - lseek(fd, 0, SEEK_SET); - LineReader reader(fd); + ScopedTestFile file("a\nb"); + ASSERT_TRUE(file.IsOk()); + LineReader reader(file.GetFd()); const char *line; unsigned len; @@ -157,18 +138,14 @@ TEST(LineReaderTest, TwoLines) { reader.PopLine(len); ASSERT_FALSE(reader.GetNextLine(&line, &len)); - - close(fd); } TEST(LineReaderTest, MaxLength) { - const int fd = TemporaryFile(); - char l[LineReader::kMaxLineLen - 1]; + char l[LineReader::kMaxLineLen-1]; memset(l, 'a', sizeof(l)); - const int r = HANDLE_EINTR(write(fd, l, sizeof(l))); - ASSERT_EQ(static_cast(sizeof(l)), r); - lseek(fd, 0, SEEK_SET); - LineReader reader(fd); + ScopedTestFile file(l, sizeof(l)); + ASSERT_TRUE(file.IsOk()); + LineReader reader(file.GetFd()); const char *line; unsigned len; @@ -176,22 +153,17 @@ TEST(LineReaderTest, MaxLength) { ASSERT_EQ(sizeof(l), len); ASSERT_TRUE(memcmp(l, line, sizeof(l)) == 0); ASSERT_EQ('\0', line[len]); - - close(fd); } TEST(LineReaderTest, TooLong) { - const int fd = TemporaryFile(); + // Note: this writes kMaxLineLen 'a' chars in the test file. char l[LineReader::kMaxLineLen]; memset(l, 'a', sizeof(l)); - const int r = HANDLE_EINTR(write(fd, l, sizeof(l))); - ASSERT_EQ(static_cast(sizeof(l)), r); - lseek(fd, 0, SEEK_SET); - LineReader reader(fd); + ScopedTestFile file(l, sizeof(l)); + ASSERT_TRUE(file.IsOk()); + LineReader reader(file.GetFd()); const char *line; unsigned len; ASSERT_FALSE(reader.GetNextLine(&line, &len)); - - close(fd); } diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_core_dumper.cc b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_core_dumper.cc index 47cc26c04128..d732824593bf 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_core_dumper.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_core_dumper.cc @@ -38,6 +38,10 @@ #include #include #include +#if defined(__mips__) && defined(__ANDROID__) +// To get register definitions. +#include +#endif #include "common/linux/linux_libc_support.h" @@ -74,7 +78,7 @@ bool LinuxCoreDumper::BuildProcPath(char* path, pid_t pid, return true; } -void LinuxCoreDumper::CopyFromProcess(void* dest, pid_t child, +bool LinuxCoreDumper::CopyFromProcess(void* dest, pid_t child, const void* src, size_t length) { ElfCoreDump::Addr virtual_address = reinterpret_cast(src); // TODO(benchan): Investigate whether the data to be copied could span @@ -84,7 +88,9 @@ void LinuxCoreDumper::CopyFromProcess(void* dest, pid_t child, // If the data segment is not found in the core dump, fill the result // with marker characters. memset(dest, 0xab, length); + return false; } + return true; } bool LinuxCoreDumper::GetThreadInfoByIndex(size_t index, ThreadInfo* info) { @@ -99,6 +105,11 @@ bool LinuxCoreDumper::GetThreadInfoByIndex(size_t index, ThreadInfo* info) { memcpy(&stack_pointer, &info->regs.rsp, sizeof(info->regs.rsp)); #elif defined(__ARM_EABI__) memcpy(&stack_pointer, &info->regs.ARM_sp, sizeof(info->regs.ARM_sp)); +#elif defined(__aarch64__) + memcpy(&stack_pointer, &info->regs.sp, sizeof(info->regs.sp)); +#elif defined(__mips__) + stack_pointer = + reinterpret_cast(info->mcontext.gregs[MD_CONTEXT_MIPS_REG_SP]); #else #error "This code hasn't been ported to your platform yet." #endif @@ -119,7 +130,7 @@ bool LinuxCoreDumper::ThreadsResume() { } bool LinuxCoreDumper::EnumerateThreads() { - if (!mapped_core_file_.Map(core_path_)) { + if (!mapped_core_file_.Map(core_path_, 0)) { fprintf(stderr, "Could not map core dump file into memory\n"); return false; } @@ -183,7 +194,20 @@ bool LinuxCoreDumper::EnumerateThreads() { memset(&info, 0, sizeof(ThreadInfo)); info.tgid = status->pr_pgrp; info.ppid = status->pr_ppid; +#if defined(__mips__) +#if defined(__ANDROID__) + for (int i = EF_R0; i <= EF_R31; i++) + info.mcontext.gregs[i - EF_R0] = status->pr_reg[i]; +#else // __ANDROID__ + for (int i = EF_REG0; i <= EF_REG31; i++) + info.mcontext.gregs[i - EF_REG0] = status->pr_reg[i]; +#endif // __ANDROID__ + info.mcontext.mdlo = status->pr_reg[EF_LO]; + info.mcontext.mdhi = status->pr_reg[EF_HI]; + info.mcontext.pc = status->pr_reg[EF_CP0_EPC]; +#else // __mips__ memcpy(&info.regs, status->pr_reg, sizeof(info.regs)); +#endif // __mips__ if (first_thread) { crash_thread_ = pid; crash_signal_ = status->pr_info.si_signo; diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_core_dumper.h b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_core_dumper.h index edb9e738d925..8537896eecf4 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_core_dumper.h +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_core_dumper.h @@ -68,8 +68,9 @@ class LinuxCoreDumper : public LinuxDumper { // Copies content of |length| bytes from a given process |child|, // starting from |src|, into |dest|. This method extracts the content // the core dump and fills |dest| with a sequence of marker bytes - // if the expected data is not found in the core dump. - virtual void CopyFromProcess(void* dest, pid_t child, const void* src, + // if the expected data is not found in the core dump. Returns true if + // the expected data is found in the core dump. + virtual bool CopyFromProcess(void* dest, pid_t child, const void* src, size_t length); // Implements LinuxDumper::GetThreadInfoByIndex(). diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_core_dumper_unittest.cc b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_core_dumper_unittest.cc index 7aef4c0d38b1..8f6a423ee04f 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_core_dumper_unittest.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_core_dumper_unittest.cc @@ -74,18 +74,23 @@ TEST(LinuxCoreDumperTest, VerifyDumpWithMultipleThreads) { const unsigned kCrashThread = 1; const int kCrashSignal = SIGABRT; pid_t child_pid; - // TODO(benchan): Revert to use ASSERT_TRUE once the flakiness in - // CrashGenerator is identified and fixed. - if (!crash_generator.CreateChildCrash(kNumOfThreads, kCrashThread, - kCrashSignal, &child_pid)) { - fprintf(stderr, "LinuxCoreDumperTest.VerifyDumpWithMultipleThreads test " - "is skipped due to no core dump generated\n"); - return; - } + ASSERT_TRUE(crash_generator.CreateChildCrash(kNumOfThreads, kCrashThread, + kCrashSignal, &child_pid)); const string core_file = crash_generator.GetCoreFilePath(); const string procfs_path = crash_generator.GetDirectoryOfProcFilesCopy(); + +#if defined(__ANDROID__) + struct stat st; + if (stat(core_file.c_str(), &st) != 0) { + fprintf(stderr, "LinuxCoreDumperTest.VerifyDumpWithMultipleThreads test is " + "skipped due to no core file being generated"); + return; + } +#endif + LinuxCoreDumper dumper(child_pid, core_file.c_str(), procfs_path.c_str()); + EXPECT_TRUE(dumper.Init()); EXPECT_TRUE(dumper.IsPostMortem()); diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_dumper.cc b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_dumper.cc index 6a75ba940a20..43b74ad9de7e 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_dumper.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_dumper.cc @@ -38,20 +38,39 @@ #include "client/linux/minidump_writer/linux_dumper.h" #include +#include #include #include #include #include #include "client/linux/minidump_writer/line_reader.h" +#include "common/linux/elfutils.h" #include "common/linux/file_id.h" #include "common/linux/linux_libc_support.h" #include "common/linux/memory_mapped_file.h" #include "common/linux/safe_readlink.h" #include "third_party/lss/linux_syscall_support.h" +#if defined(__ANDROID__) + +// Android packed relocations definitions are not yet available from the +// NDK header files, so we have to provide them manually here. +#ifndef DT_LOOS +#define DT_LOOS 0x6000000d +#endif +#ifndef DT_ANDROID_REL +static const int DT_ANDROID_REL = DT_LOOS + 2; +#endif +#ifndef DT_ANDROID_RELA +static const int DT_ANDROID_RELA = DT_LOOS + 4; +#endif + +#endif // __ANDROID __ + static const char kMappedFileUnsafePrefix[] = "/dev/"; static const char kDeletedSuffix[] = " (deleted)"; +static const char kReservedFlags[] = " ---p"; inline static bool IsMappedFileOpenUnsafe( const google_breakpad::MappingInfo& mapping) { @@ -73,10 +92,13 @@ LinuxDumper::LinuxDumper(pid_t pid) : pid_(pid), crash_address_(0), crash_signal_(0), - crash_thread_(0), + crash_thread_(pid), threads_(&allocator_, 8), mappings_(&allocator_), auxv_(&allocator_, AT_MAX + 1) { + // The passed-in size to the constructor (above) is only a hint. + // Must call .resize() to do actual initialization of the elements. + auxv_.resize(AT_MAX + 1); } LinuxDumper::~LinuxDumper() { @@ -86,12 +108,18 @@ bool LinuxDumper::Init() { return ReadAuxv() && EnumerateThreads() && EnumerateMappings(); } +bool LinuxDumper::LateInit() { +#if defined(__ANDROID__) + LatePostprocessMappings(); +#endif + return true; +} + bool LinuxDumper::ElfFileIdentifierForMapping(const MappingInfo& mapping, bool member, unsigned int mapping_id, - uint8_t identifier[sizeof(MDGUID)]) -{ + uint8_t identifier[sizeof(MDGUID)]) { assert(!member || mapping_id < mappings_.size()); my_memset(identifier, 0, sizeof(MDGUID)); if (IsMappedFileOpenUnsafe(mapping)) @@ -113,15 +141,16 @@ LinuxDumper::ElfFileIdentifierForMapping(const MappingInfo& mapping, char filename[NAME_MAX]; size_t filename_len = my_strlen(mapping.name); - assert(filename_len < NAME_MAX); - if (filename_len >= NAME_MAX) + if (filename_len >= NAME_MAX) { + assert(false); return false; + } my_memcpy(filename, mapping.name, filename_len); filename[filename_len] = '\0'; bool filename_modified = HandleDeletedFileInMapping(filename); - MemoryMappedFile mapped_file(filename); - if (!mapped_file.data()) // Should probably check if size >= ElfW(Ehdr)? + MemoryMappedFile mapped_file(filename, mapping.offset); + if (!mapped_file.data() || mapped_file.size() < SELFMAG) return false; bool success = @@ -134,6 +163,120 @@ LinuxDumper::ElfFileIdentifierForMapping(const MappingInfo& mapping, return success; } +namespace { +bool ElfFileSoNameFromMappedFile( + const void* elf_base, char* soname, size_t soname_size) { + if (!IsValidElf(elf_base)) { + // Not ELF + return false; + } + + const void* segment_start; + size_t segment_size; + int elf_class; + if (!FindElfSection(elf_base, ".dynamic", SHT_DYNAMIC, + &segment_start, &segment_size, &elf_class)) { + // No dynamic section + return false; + } + + const void* dynstr_start; + size_t dynstr_size; + if (!FindElfSection(elf_base, ".dynstr", SHT_STRTAB, + &dynstr_start, &dynstr_size, &elf_class)) { + // No dynstr section + return false; + } + + const ElfW(Dyn)* dynamic = static_cast(segment_start); + size_t dcount = segment_size / sizeof(ElfW(Dyn)); + for (const ElfW(Dyn)* dyn = dynamic; dyn < dynamic + dcount; ++dyn) { + if (dyn->d_tag == DT_SONAME) { + const char* dynstr = static_cast(dynstr_start); + if (dyn->d_un.d_val >= dynstr_size) { + // Beyond the end of the dynstr section + return false; + } + const char* str = dynstr + dyn->d_un.d_val; + const size_t maxsize = dynstr_size - dyn->d_un.d_val; + my_strlcpy(soname, str, maxsize < soname_size ? maxsize : soname_size); + return true; + } + } + + // Did not find SONAME + return false; +} + +// Find the shared object name (SONAME) by examining the ELF information +// for |mapping|. If the SONAME is found copy it into the passed buffer +// |soname| and return true. The size of the buffer is |soname_size|. +// The SONAME will be truncated if it is too long to fit in the buffer. +bool ElfFileSoName( + const MappingInfo& mapping, char* soname, size_t soname_size) { + if (IsMappedFileOpenUnsafe(mapping)) { + // Not safe + return false; + } + + char filename[NAME_MAX]; + size_t filename_len = my_strlen(mapping.name); + if (filename_len >= NAME_MAX) { + assert(false); + // name too long + return false; + } + + my_memcpy(filename, mapping.name, filename_len); + filename[filename_len] = '\0'; + + MemoryMappedFile mapped_file(filename, mapping.offset); + if (!mapped_file.data() || mapped_file.size() < SELFMAG) { + // mmap failed + return false; + } + + return ElfFileSoNameFromMappedFile(mapped_file.data(), soname, soname_size); +} + +} // namespace + + +// static +void LinuxDumper::GetMappingEffectiveNameAndPath(const MappingInfo& mapping, + char* file_path, + size_t file_path_size, + char* file_name, + size_t file_name_size) { + my_strlcpy(file_path, mapping.name, file_path_size); + + // If an executable is mapped from a non-zero offset, this is likely because + // the executable was loaded directly from inside an archive file (e.g., an + // apk on Android). We try to find the name of the shared object (SONAME) by + // looking in the file for ELF sections. + bool mapped_from_archive = false; + if (mapping.exec && mapping.offset != 0) + mapped_from_archive = ElfFileSoName(mapping, file_name, file_name_size); + + if (mapped_from_archive) { + // Some tools (e.g., stackwalk) extract the basename from the pathname. In + // this case, we append the file_name to the mapped archive path as follows: + // file_name := libname.so + // file_path := /path/to/ARCHIVE.APK/libname.so + if (my_strlen(file_path) + 1 + my_strlen(file_name) < file_path_size) { + my_strlcat(file_path, "/", file_path_size); + my_strlcat(file_path, file_name, file_path_size); + } + } else { + // Common case: + // file_path := /path/to/libname.so + // file_name := libname.so + const char* basename = my_strrchr(file_path, '/'); + basename = basename == NULL ? file_path : (basename + 1); + my_strlcpy(file_name, basename, file_name_size); + } +} + bool LinuxDumper::ReadAuxv() { char auxv_path[NAME_MAX]; if (!BuildProcPath(auxv_path, pid_, "auxv")) { @@ -193,6 +336,7 @@ bool LinuxDumper::EnumerateMappings() { if (*i1 == '-') { const char* i2 = my_read_hex_ptr(&end_addr, i1 + 1); if (*i2 == ' ') { + bool exec = (*(i2 + 3) == 'x'); const char* i3 = my_read_hex_ptr(&offset, i2 + 6 /* skip ' rwxp ' */); if (*i3 == ' ') { const char* name = NULL; @@ -216,11 +360,29 @@ bool LinuxDumper::EnumerateMappings() { continue; } } + // Also merge mappings that result from address ranges that the + // linker reserved but which a loaded library did not use. These + // appear as an anonymous private mapping with no access flags set + // and which directly follow an executable mapping. + if (!name && !mappings_.empty()) { + MappingInfo* module = mappings_.back(); + if ((start_addr == module->start_addr + module->size) && + module->exec && + module->name[0] == '/' && + offset == 0 && my_strncmp(i2, + kReservedFlags, + sizeof(kReservedFlags) - 1) == 0) { + module->size = end_addr - module->start_addr; + line_reader->PopLine(line_len); + continue; + } + } MappingInfo* const module = new(allocator_) MappingInfo; my_memset(module, 0, sizeof(MappingInfo)); module->start_addr = start_addr; module->size = end_addr - start_addr; module->offset = offset; + module->exec = exec; if (name != NULL) { const unsigned l = my_strlen(name); if (l < sizeof(module->name)) @@ -256,6 +418,113 @@ bool LinuxDumper::EnumerateMappings() { return !mappings_.empty(); } +#if defined(__ANDROID__) + +bool LinuxDumper::GetLoadedElfHeader(uintptr_t start_addr, ElfW(Ehdr)* ehdr) { + CopyFromProcess(ehdr, pid_, + reinterpret_cast(start_addr), + sizeof(*ehdr)); + return my_memcmp(&ehdr->e_ident, ELFMAG, SELFMAG) == 0; +} + +void LinuxDumper::ParseLoadedElfProgramHeaders(ElfW(Ehdr)* ehdr, + uintptr_t start_addr, + uintptr_t* min_vaddr_ptr, + uintptr_t* dyn_vaddr_ptr, + size_t* dyn_count_ptr) { + uintptr_t phdr_addr = start_addr + ehdr->e_phoff; + + const uintptr_t max_addr = UINTPTR_MAX; + uintptr_t min_vaddr = max_addr; + uintptr_t dyn_vaddr = 0; + size_t dyn_count = 0; + + for (size_t i = 0; i < ehdr->e_phnum; ++i) { + ElfW(Phdr) phdr; + CopyFromProcess(&phdr, pid_, + reinterpret_cast(phdr_addr), + sizeof(phdr)); + if (phdr.p_type == PT_LOAD && phdr.p_vaddr < min_vaddr) { + min_vaddr = phdr.p_vaddr; + } + if (phdr.p_type == PT_DYNAMIC) { + dyn_vaddr = phdr.p_vaddr; + dyn_count = phdr.p_memsz / sizeof(ElfW(Dyn)); + } + phdr_addr += sizeof(phdr); + } + + *min_vaddr_ptr = min_vaddr; + *dyn_vaddr_ptr = dyn_vaddr; + *dyn_count_ptr = dyn_count; +} + +bool LinuxDumper::HasAndroidPackedRelocations(uintptr_t load_bias, + uintptr_t dyn_vaddr, + size_t dyn_count) { + uintptr_t dyn_addr = load_bias + dyn_vaddr; + for (size_t i = 0; i < dyn_count; ++i) { + ElfW(Dyn) dyn; + CopyFromProcess(&dyn, pid_, + reinterpret_cast(dyn_addr), + sizeof(dyn)); + if (dyn.d_tag == DT_ANDROID_REL || dyn.d_tag == DT_ANDROID_RELA) { + return true; + } + dyn_addr += sizeof(dyn); + } + return false; +} + +uintptr_t LinuxDumper::GetEffectiveLoadBias(ElfW(Ehdr)* ehdr, + uintptr_t start_addr) { + uintptr_t min_vaddr = 0; + uintptr_t dyn_vaddr = 0; + size_t dyn_count = 0; + ParseLoadedElfProgramHeaders(ehdr, start_addr, + &min_vaddr, &dyn_vaddr, &dyn_count); + // If |min_vaddr| is non-zero and we find Android packed relocation tags, + // return the effective load bias. + if (min_vaddr != 0) { + const uintptr_t load_bias = start_addr - min_vaddr; + if (HasAndroidPackedRelocations(load_bias, dyn_vaddr, dyn_count)) { + return load_bias; + } + } + // Either |min_vaddr| is zero, or it is non-zero but we did not find the + // expected Android packed relocations tags. + return start_addr; +} + +void LinuxDumper::LatePostprocessMappings() { + for (size_t i = 0; i < mappings_.size(); ++i) { + // Only consider exec mappings that indicate a file path was mapped, and + // where the ELF header indicates a mapped shared library. + MappingInfo* mapping = mappings_[i]; + if (!(mapping->exec && mapping->name[0] == '/')) { + continue; + } + ElfW(Ehdr) ehdr; + if (!GetLoadedElfHeader(mapping->start_addr, &ehdr)) { + continue; + } + if (ehdr.e_type == ET_DYN) { + // Compute the effective load bias for this mapped library, and update + // the mapping to hold that rather than |start_addr|, at the same time + // adjusting |size| to account for the change in |start_addr|. Where + // the library does not contain Android packed relocations, + // GetEffectiveLoadBias() returns |start_addr| and the mapping entry + // is not changed. + const uintptr_t load_bias = GetEffectiveLoadBias(&ehdr, + mapping->start_addr); + mapping->size += mapping->start_addr - load_bias; + mapping->start_addr = load_bias; + } + } +} + +#endif // __ANDROID__ + // Get information about the stack, given the stack pointer. We don't try to // walk the stack since we might not have all the information needed to do // unwind. So we just grab, up to, 32k of stack. @@ -273,7 +542,8 @@ bool LinuxDumper::GetStackInfo(const void** stack, size_t* stack_len, const MappingInfo* mapping = FindMapping(stack_pointer); if (!mapping) return false; - const ptrdiff_t offset = stack_pointer - (uint8_t*) mapping->start_addr; + const ptrdiff_t offset = stack_pointer - + reinterpret_cast(mapping->start_addr); const ptrdiff_t distance_to_end = static_cast(mapping->size) - offset; *stack_len = distance_to_end > kStackToCapture ? diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_dumper.h b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_dumper.h index a4a3ab5a3629..6a3a100f3237 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_dumper.h +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_dumper.h @@ -39,67 +39,37 @@ #define CLIENT_LINUX_MINIDUMP_WRITER_LINUX_DUMPER_H_ #include +#if defined(__ANDROID__) +#include +#endif #include #include #include #include +#include "client/linux/dump_writer_common/mapping_info.h" +#include "client/linux/dump_writer_common/thread_info.h" #include "common/memory.h" #include "google_breakpad/common/minidump_format.h" namespace google_breakpad { -#if defined(__i386) || defined(__x86_64) -typedef typeof(((struct user*) 0)->u_debugreg[0]) debugreg_t; -#endif - // Typedef for our parsing of the auxv variables in /proc/pid/auxv. -#if defined(__i386) || defined(__ARM_EABI__) +#if defined(__i386) || defined(__ARM_EABI__) || \ + (defined(__mips__) && _MIPS_SIM == _ABIO32) typedef Elf32_auxv_t elf_aux_entry; -#elif defined(__x86_64) +#elif defined(__x86_64) || defined(__aarch64__) || \ + (defined(__mips__) && _MIPS_SIM != _ABIO32) typedef Elf64_auxv_t elf_aux_entry; #endif -typedef typeof(((elf_aux_entry*) 0)->a_un.a_val) elf_aux_val_t; +typedef __typeof__(((elf_aux_entry*) 0)->a_un.a_val) elf_aux_val_t; // When we find the VDSO mapping in the process's address space, this // is the name we use for it when writing it to the minidump. // This should always be less than NAME_MAX! const char kLinuxGateLibraryName[] = "linux-gate.so"; -// We produce one of these structures for each thread in the crashed process. -struct ThreadInfo { - pid_t tgid; // thread group id - pid_t ppid; // parent process - - uintptr_t stack_pointer; // thread stack pointer - - -#if defined(__i386) || defined(__x86_64) - user_regs_struct regs; - user_fpregs_struct fpregs; - static const unsigned kNumDebugRegisters = 8; - debugreg_t dregs[8]; -#if defined(__i386) - user_fpxregs_struct fpxregs; -#endif // defined(__i386) - -#elif defined(__ARM_EABI__) - // Mimicking how strace does this(see syscall.c, search for GETREGS) - struct user_regs regs; - struct user_fpregs fpregs; -#endif -}; - -// One of these is produced for each mapping in the process (i.e. line in -// /proc/$x/maps). -struct MappingInfo { - uintptr_t start_addr; - size_t size; - size_t offset; // offset into the backed file. - char name[NAME_MAX]; -}; - class LinuxDumper { public: explicit LinuxDumper(pid_t pid); @@ -109,6 +79,12 @@ class LinuxDumper { // Parse the data for |threads| and |mappings|. virtual bool Init(); + // Take any actions that could not be taken in Init(). LateInit() is + // called after all other caller's initialization is complete, and in + // particular after it has called ThreadsSuspend(), so that ptrace is + // available. + virtual bool LateInit(); + // Return true if the dumper performs a post-mortem dump. virtual bool IsPostMortem() const = 0; @@ -135,8 +111,8 @@ class LinuxDumper { PageAllocator* allocator() { return &allocator_; } // Copy content of |length| bytes from a given process |child|, - // starting from |src|, into |dest|. - virtual void CopyFromProcess(void* dest, pid_t child, const void* src, + // starting from |src|, into |dest|. Returns true on success. + virtual bool CopyFromProcess(void* dest, pid_t child, const void* src, size_t length) = 0; // Builds a proc path for a certain pid for a node (/proc//). @@ -146,7 +122,8 @@ class LinuxDumper { virtual bool BuildProcPath(char* path, pid_t pid, const char* node) const = 0; // Generate a File ID from the .text section of a mapped entry. - // If not a member, mapping_id is ignored. + // If not a member, mapping_id is ignored. This method can also manipulate the + // |mapping|.name to truncate "(deleted)" from the file name if necessary. bool ElfFileIdentifierForMapping(const MappingInfo& mapping, bool member, unsigned int mapping_id, @@ -163,6 +140,17 @@ class LinuxDumper { pid_t crash_thread() const { return crash_thread_; } void set_crash_thread(pid_t crash_thread) { crash_thread_ = crash_thread; } + // Extracts the effective path and file name of from |mapping|. In most cases + // the effective name/path are just the mapping's path and basename. In some + // other cases, however, a library can be mapped from an archive (e.g., when + // loading .so libs from an apk on Android) and this method is able to + // reconstruct the original file name. + static void GetMappingEffectiveNameAndPath(const MappingInfo& mapping, + char* file_path, + size_t file_path_size, + char* file_name, + size_t file_name_size); + protected: bool ReadAuxv(); @@ -203,6 +191,62 @@ class LinuxDumper { // Info from /proc//auxv wasteful_vector auxv_; + +#if defined(__ANDROID__) + private: + // Android M and later support packed ELF relocations in shared libraries. + // Packing relocations changes the vaddr of the LOAD segments, such that + // the effective load bias is no longer the same as the start address of + // the memory mapping containing the executable parts of the library. The + // packing is applied to the stripped library run on the target, but not to + // any other library, and in particular not to the library used to generate + // breakpad symbols. As a result, we need to adjust the |start_addr| for + // any mapping that results from a shared library that contains Android + // packed relocations, so that it properly represents the effective library + // load bias. The following functions support this adjustment. + + // Check that a given mapping at |start_addr| is for an ELF shared library. + // If it is, place the ELF header in |ehdr| and return true. + // The first LOAD segment in an ELF shared library has offset zero, so the + // ELF file header is at the start of this map entry, and in already mapped + // memory. + bool GetLoadedElfHeader(uintptr_t start_addr, ElfW(Ehdr)* ehdr); + + // For the ELF file mapped at |start_addr|, iterate ELF program headers to + // find the min vaddr of all program header LOAD segments, the vaddr for + // the DYNAMIC segment, and a count of DYNAMIC entries. Return values in + // |min_vaddr_ptr|, |dyn_vaddr_ptr|, and |dyn_count_ptr|. + // The program header table is also in already mapped memory. + void ParseLoadedElfProgramHeaders(ElfW(Ehdr)* ehdr, + uintptr_t start_addr, + uintptr_t* min_vaddr_ptr, + uintptr_t* dyn_vaddr_ptr, + size_t* dyn_count_ptr); + + // Search the DYNAMIC tags for the ELF file with the given |load_bias|, and + // return true if the tags indicate that the file contains Android packed + // relocations. Dynamic tags are found at |dyn_vaddr| past the |load_bias|. + bool HasAndroidPackedRelocations(uintptr_t load_bias, + uintptr_t dyn_vaddr, + size_t dyn_count); + + // If the ELF file mapped at |start_addr| contained Android packed + // relocations, return the load bias that the system linker (or Chromium + // crazy linker) will have used. If the file did not contain Android + // packed relocations, returns |start_addr|, indicating that no adjustment + // is necessary. + // The effective load bias is |start_addr| adjusted downwards by the + // min vaddr in the library LOAD segments. + uintptr_t GetEffectiveLoadBias(ElfW(Ehdr)* ehdr, uintptr_t start_addr); + + // Called from LateInit(). Iterates |mappings_| and rewrites the |start_addr| + // field of any that represent ELF shared libraries with Android packed + // relocations, so that |start_addr| is the load bias that the system linker + // (or Chromium crazy linker) used. This value matches the addresses produced + // when the non-relocation-packed library is used for breakpad symbol + // generation. + void LatePostprocessMappings(); +#endif // __ANDROID__ }; } // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc index 68020694c0d8..4ccb7201fab0 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc @@ -43,10 +43,14 @@ #if defined(__ARM_EABI__) #define TID_PTR_REGISTER "r3" +#elif defined(__aarch64__) +#define TID_PTR_REGISTER "x3" #elif defined(__i386) #define TID_PTR_REGISTER "ecx" #elif defined(__x86_64) #define TID_PTR_REGISTER "rcx" +#elif defined(__mips__) +#define TID_PTR_REGISTER "$1" #else #error This test has not been ported to this platform. #endif diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper.cc b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper.cc index 6a1ffef3b73e..c35e0e9583ea 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper.cc @@ -47,8 +47,13 @@ #include #include #include +#include #include +#if defined(__i386) +#include +#endif + #include "client/linux/minidump_writer/directory_reader.h" #include "client/linux/minidump_writer/line_reader.h" #include "common/linux/linux_libc_support.h" @@ -125,7 +130,7 @@ bool LinuxPtraceDumper::BuildProcPath(char* path, pid_t pid, return true; } -void LinuxPtraceDumper::CopyFromProcess(void* dest, pid_t child, +bool LinuxPtraceDumper::CopyFromProcess(void* dest, pid_t child, const void* src, size_t length) { unsigned long tmp = 55; size_t done = 0; @@ -141,6 +146,7 @@ void LinuxPtraceDumper::CopyFromProcess(void* dest, pid_t child, my_memcpy(local + done, &tmp, l); done += l; } + return true; } // Read thread info from /proc/$pid/status. @@ -182,20 +188,52 @@ bool LinuxPtraceDumper::GetThreadInfoByIndex(size_t index, ThreadInfo* info) { if (info->ppid == -1 || info->tgid == -1) return false; - if (sys_ptrace(PTRACE_GETREGS, tid, NULL, &info->regs) == -1) { +#ifdef PTRACE_GETREGSET + struct iovec io; + info->GetGeneralPurposeRegisters(&io.iov_base, &io.iov_len); + if (sys_ptrace(PTRACE_GETREGSET, tid, (void*)NT_PRSTATUS, (void*)&io) == -1) { + return false; + } + + info->GetFloatingPointRegisters(&io.iov_base, &io.iov_len); + if (sys_ptrace(PTRACE_GETREGSET, tid, (void*)NT_FPREGSET, (void*)&io) == -1) { + return false; + } +#else // PTRACE_GETREGSET + void* gp_addr; + info->GetGeneralPurposeRegisters(&gp_addr, NULL); + if (sys_ptrace(PTRACE_GETREGS, tid, NULL, gp_addr) == -1) { return false; } #if !(defined(__ANDROID__) && defined(__ARM_EABI__)) - if (sys_ptrace(PTRACE_GETFPREGS, tid, NULL, &info->fpregs) == -1) { + // When running an arm build on an arm64 device, attempting to get the + // floating point registers fails. On Android, the floating point registers + // aren't written to the cpu context anyway, so just don't get them here. + // See http://crbug.com/508324 + void* fp_addr; + info->GetFloatingPointRegisters(&fp_addr, NULL); + if (sys_ptrace(PTRACE_GETFPREGS, tid, NULL, fp_addr) == -1) { return false; } #endif +#endif // PTRACE_GETREGSET #if defined(__i386) - if (sys_ptrace(PTRACE_GETFPXREGS, tid, NULL, &info->fpxregs) == -1) - return false; +#if !defined(bit_FXSAVE) // e.g. Clang +#define bit_FXSAVE bit_FXSR #endif + // Detect if the CPU supports the FXSAVE/FXRSTOR instructions + int eax, ebx, ecx, edx; + __cpuid(1, eax, ebx, ecx, edx); + if (edx & bit_FXSAVE) { + if (sys_ptrace(PTRACE_GETFPXREGS, tid, NULL, &info->fpxregs) == -1) { + return false; + } + } else { + memset(&info->fpxregs, 0, sizeof(info->fpxregs)); + } +#endif // defined(__i386) #if defined(__i386) || defined(__x86_64) for (unsigned i = 0; i < ThreadInfo::kNumDebugRegisters; ++i) { @@ -210,6 +248,23 @@ bool LinuxPtraceDumper::GetThreadInfoByIndex(size_t index, ThreadInfo* info) { } #endif +#if defined(__mips__) + sys_ptrace(PTRACE_PEEKUSER, tid, + reinterpret_cast(DSP_BASE), &info->mcontext.hi1); + sys_ptrace(PTRACE_PEEKUSER, tid, + reinterpret_cast(DSP_BASE + 1), &info->mcontext.lo1); + sys_ptrace(PTRACE_PEEKUSER, tid, + reinterpret_cast(DSP_BASE + 2), &info->mcontext.hi2); + sys_ptrace(PTRACE_PEEKUSER, tid, + reinterpret_cast(DSP_BASE + 3), &info->mcontext.lo2); + sys_ptrace(PTRACE_PEEKUSER, tid, + reinterpret_cast(DSP_BASE + 4), &info->mcontext.hi3); + sys_ptrace(PTRACE_PEEKUSER, tid, + reinterpret_cast(DSP_BASE + 5), &info->mcontext.lo3); + sys_ptrace(PTRACE_PEEKUSER, tid, + reinterpret_cast(DSP_CONTROL), &info->mcontext.dsp); +#endif + const uint8_t* stack_pointer; #if defined(__i386) my_memcpy(&stack_pointer, &info->regs.esp, sizeof(info->regs.esp)); @@ -217,6 +272,11 @@ bool LinuxPtraceDumper::GetThreadInfoByIndex(size_t index, ThreadInfo* info) { my_memcpy(&stack_pointer, &info->regs.rsp, sizeof(info->regs.rsp)); #elif defined(__ARM_EABI__) my_memcpy(&stack_pointer, &info->regs.ARM_sp, sizeof(info->regs.ARM_sp)); +#elif defined(__aarch64__) + my_memcpy(&stack_pointer, &info->regs.sp, sizeof(info->regs.sp)); +#elif defined(__mips__) + stack_pointer = + reinterpret_cast(info->mcontext.gregs[MD_CONTEXT_MIPS_REG_SP]); #else #error "This code hasn't been ported to your platform yet." #endif @@ -237,8 +297,10 @@ bool LinuxPtraceDumper::ThreadsSuspend() { // If the thread either disappeared before we could attach to it, or if // it was part of the seccomp sandbox's trusted code, it is OK to // silently drop it from the minidump. - my_memmove(&threads_[i], &threads_[i+1], - (threads_.size() - i - 1) * sizeof(threads_[i])); + if (i < threads_.size() - 1) { + my_memmove(&threads_[i], &threads_[i + 1], + (threads_.size() - i - 1) * sizeof(threads_[i])); + } threads_.resize(threads_.size() - 1); --i; } diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper.h b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper.h index 1e9bcfdf84e9..2ce834b0fd08 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper.h +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper.h @@ -55,8 +55,8 @@ class LinuxPtraceDumper : public LinuxDumper { // Implements LinuxDumper::CopyFromProcess(). // Copies content of |length| bytes from a given process |child|, // starting from |src|, into |dest|. This method uses ptrace to extract - // the content from the target process. - virtual void CopyFromProcess(void* dest, pid_t child, const void* src, + // the content from the target process. Always returns true. + virtual bool CopyFromProcess(void* dest, pid_t child, const void* src, size_t length); // Implements LinuxDumper::GetThreadInfoByIndex(). diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper_unittest.cc b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper_unittest.cc index db11651cc94e..838ea5f6bacd 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper_unittest.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper_unittest.cc @@ -28,7 +28,7 @@ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // linux_ptrace_dumper_unittest.cc: -// Unit tests for google_breakpad::LinuxPtraceDumoer. +// Unit tests for google_breakpad::LinuxPtraceDumper. // // This file was renamed from linux_dumper_unittest.cc and modified due // to LinuxDumper being splitted into two classes. @@ -41,6 +41,7 @@ #include #include #include +#include #include #include #include @@ -57,20 +58,72 @@ #include "common/memory.h" #include "common/using_std_string.h" +#ifndef PR_SET_PTRACER +#define PR_SET_PTRACER 0x59616d61 +#endif + using namespace google_breakpad; namespace { typedef testing::Test LinuxPtraceDumperTest; +/* Fixture for running tests in a child process. */ +class LinuxPtraceDumperChildTest : public testing::Test { + protected: + virtual void SetUp() { + child_pid_ = fork(); +#ifndef __ANDROID__ + prctl(PR_SET_PTRACER, child_pid_); +#endif + } + + /* Gtest is calling TestBody from this class, which sets up a child + * process in which the RealTestBody virtual member is called. + * As such, TestBody is not supposed to be overridden in derived classes. + */ + virtual void TestBody() /* final */ { + if (child_pid_ == 0) { + // child process + RealTestBody(); + exit(HasFatalFailure() ? kFatalFailure : + (HasNonfatalFailure() ? kNonFatalFailure : 0)); + } + + ASSERT_TRUE(child_pid_ > 0); + int status; + waitpid(child_pid_, &status, 0); + if (WEXITSTATUS(status) == kFatalFailure) { + GTEST_FATAL_FAILURE_("Test failed in child process"); + } else if (WEXITSTATUS(status) == kNonFatalFailure) { + GTEST_NONFATAL_FAILURE_("Test failed in child process"); + } + } + + /* Gtest defines TestBody functions through its macros, but classes + * derived from this one need to define RealTestBody instead. + * This is achieved by defining a TestBody macro further below. + */ + virtual void RealTestBody() = 0; + private: + static const int kFatalFailure = 1; + static const int kNonFatalFailure = 2; + + pid_t child_pid_; +}; + } // namespace -TEST(LinuxPtraceDumperTest, Setup) { - LinuxPtraceDumper dumper(getpid()); +/* Replace TestBody declarations within TEST*() with RealTestBody + * declarations */ +#define TestBody RealTestBody + +TEST_F(LinuxPtraceDumperChildTest, Setup) { + LinuxPtraceDumper dumper(getppid()); } -TEST(LinuxPtraceDumperTest, FindMappings) { - LinuxPtraceDumper dumper(getpid()); +TEST_F(LinuxPtraceDumperChildTest, FindMappings) { + LinuxPtraceDumper dumper(getppid()); ASSERT_TRUE(dumper.Init()); ASSERT_TRUE(dumper.FindMapping(reinterpret_cast(getpid))); @@ -78,30 +131,41 @@ TEST(LinuxPtraceDumperTest, FindMappings) { ASSERT_FALSE(dumper.FindMapping(NULL)); } -TEST(LinuxPtraceDumperTest, ThreadList) { - LinuxPtraceDumper dumper(getpid()); +TEST_F(LinuxPtraceDumperChildTest, ThreadList) { + LinuxPtraceDumper dumper(getppid()); ASSERT_TRUE(dumper.Init()); ASSERT_GE(dumper.threads().size(), (size_t)1); bool found = false; for (size_t i = 0; i < dumper.threads().size(); ++i) { - if (dumper.threads()[i] == getpid()) { + if (dumper.threads()[i] == getppid()) { + ASSERT_FALSE(found); found = true; - break; } } + ASSERT_TRUE(found); } // Helper stack class to close a file descriptor and unmap // a mmap'ed mapping. class StackHelper { public: - StackHelper(int fd, char* mapping, size_t size) - : fd_(fd), mapping_(mapping), size_(size) {} + StackHelper() + : fd_(-1), mapping_(NULL), size_(0) {} ~StackHelper() { - munmap(mapping_, size_); - close(fd_); + if (size_) + munmap(mapping_, size_); + if (fd_ >= 0) + close(fd_); } + void Init(int fd, char* mapping, size_t size) { + fd_ = fd; + mapping_ = mapping; + size_ = size; + } + + char* mapping() const { return mapping_; } + size_t size() const { return size_; } private: int fd_; @@ -109,19 +173,28 @@ class StackHelper { size_t size_; }; -TEST(LinuxPtraceDumperTest, MergedMappings) { - string helper_path(GetHelperBinary()); - if (helper_path.empty()) { +class LinuxPtraceDumperMappingsTest : public LinuxPtraceDumperChildTest { + protected: + virtual void SetUp(); + + string helper_path_; + size_t page_size_; + StackHelper helper_; +}; + +void LinuxPtraceDumperMappingsTest::SetUp() { + helper_path_ = GetHelperBinary(); + if (helper_path_.empty()) { FAIL() << "Couldn't find helper binary"; exit(1); } // mmap two segments out of the helper binary, one // enclosed in the other, but with different protections. - const size_t kPageSize = sysconf(_SC_PAGESIZE); - const size_t kMappingSize = 3 * kPageSize; - int fd = open(helper_path.c_str(), O_RDONLY); - ASSERT_NE(-1, fd) << "Failed to open file: " << helper_path + page_size_ = sysconf(_SC_PAGESIZE); + const size_t kMappingSize = 3 * page_size_; + int fd = open(helper_path_.c_str(), O_RDONLY); + ASSERT_NE(-1, fd) << "Failed to open file: " << helper_path_ << ", Error: " << strerror(errno); char* mapping = reinterpret_cast(mmap(NULL, @@ -132,34 +205,37 @@ TEST(LinuxPtraceDumperTest, MergedMappings) { 0)); ASSERT_TRUE(mapping); - const uintptr_t kMappingAddress = reinterpret_cast(mapping); - // Ensure that things get cleaned up. - StackHelper helper(fd, mapping, kMappingSize); + helper_.Init(fd, mapping, kMappingSize); // Carve a page out of the first mapping with different permissions. char* inside_mapping = reinterpret_cast( - mmap(mapping + 2 *kPageSize, - kPageSize, + mmap(mapping + 2 * page_size_, + page_size_, PROT_NONE, MAP_SHARED | MAP_FIXED, fd, // Map a different offset just to // better test real-world conditions. - kPageSize)); + page_size_)); ASSERT_TRUE(inside_mapping); + LinuxPtraceDumperChildTest::SetUp(); +} + +TEST_F(LinuxPtraceDumperMappingsTest, MergedMappings) { // Now check that LinuxPtraceDumper interpreted the mappings properly. - LinuxPtraceDumper dumper(getpid()); + LinuxPtraceDumper dumper(getppid()); ASSERT_TRUE(dumper.Init()); int mapping_count = 0; for (unsigned i = 0; i < dumper.mappings().size(); ++i) { const MappingInfo& mapping = *dumper.mappings()[i]; - if (strcmp(mapping.name, helper_path.c_str()) == 0) { + if (strcmp(mapping.name, this->helper_path_.c_str()) == 0) { // This mapping should encompass the entire original mapped // range. - EXPECT_EQ(kMappingAddress, mapping.start_addr); - EXPECT_EQ(kMappingSize, mapping.size); + EXPECT_EQ(reinterpret_cast(this->helper_.mapping()), + mapping.start_addr); + EXPECT_EQ(this->helper_.size(), mapping.size); EXPECT_EQ(0U, mapping.offset); mapping_count++; } @@ -167,6 +243,124 @@ TEST(LinuxPtraceDumperTest, MergedMappings) { EXPECT_EQ(1, mapping_count); } +TEST_F(LinuxPtraceDumperChildTest, BuildProcPath) { + const pid_t pid = getppid(); + LinuxPtraceDumper dumper(pid); + + char maps_path[NAME_MAX] = ""; + char maps_path_expected[NAME_MAX]; + snprintf(maps_path_expected, sizeof(maps_path_expected), + "/proc/%d/maps", pid); + EXPECT_TRUE(dumper.BuildProcPath(maps_path, pid, "maps")); + EXPECT_STREQ(maps_path_expected, maps_path); + + EXPECT_FALSE(dumper.BuildProcPath(NULL, pid, "maps")); + EXPECT_FALSE(dumper.BuildProcPath(maps_path, 0, "maps")); + EXPECT_FALSE(dumper.BuildProcPath(maps_path, pid, "")); + EXPECT_FALSE(dumper.BuildProcPath(maps_path, pid, NULL)); + + char long_node[NAME_MAX]; + size_t long_node_len = NAME_MAX - strlen("/proc/123") - 1; + memset(long_node, 'a', long_node_len); + long_node[long_node_len] = '\0'; + EXPECT_FALSE(dumper.BuildProcPath(maps_path, 123, long_node)); +} + +#if !defined(__ARM_EABI__) && !defined(__mips__) +// Ensure that the linux-gate VDSO is included in the mapping list. +TEST_F(LinuxPtraceDumperChildTest, MappingsIncludeLinuxGate) { + LinuxPtraceDumper dumper(getppid()); + ASSERT_TRUE(dumper.Init()); + + void* linux_gate_loc = + reinterpret_cast(dumper.auxv()[AT_SYSINFO_EHDR]); + ASSERT_TRUE(linux_gate_loc); + bool found_linux_gate = false; + + const wasteful_vector mappings = dumper.mappings(); + const MappingInfo* mapping; + for (unsigned i = 0; i < mappings.size(); ++i) { + mapping = mappings[i]; + if (!strcmp(mapping->name, kLinuxGateLibraryName)) { + found_linux_gate = true; + break; + } + } + EXPECT_TRUE(found_linux_gate); + EXPECT_EQ(linux_gate_loc, reinterpret_cast(mapping->start_addr)); + EXPECT_EQ(0, memcmp(linux_gate_loc, ELFMAG, SELFMAG)); +} + +// Ensure that the linux-gate VDSO can generate a non-zeroed File ID. +TEST_F(LinuxPtraceDumperChildTest, LinuxGateMappingID) { + LinuxPtraceDumper dumper(getppid()); + ASSERT_TRUE(dumper.Init()); + + bool found_linux_gate = false; + const wasteful_vector mappings = dumper.mappings(); + unsigned index = 0; + for (unsigned i = 0; i < mappings.size(); ++i) { + if (!strcmp(mappings[i]->name, kLinuxGateLibraryName)) { + found_linux_gate = true; + index = i; + break; + } + } + ASSERT_TRUE(found_linux_gate); + + // Need to suspend the child so ptrace actually works. + ASSERT_TRUE(dumper.ThreadsSuspend()); + uint8_t identifier[sizeof(MDGUID)]; + ASSERT_TRUE(dumper.ElfFileIdentifierForMapping(*mappings[index], + true, + index, + identifier)); + uint8_t empty_identifier[sizeof(MDGUID)]; + memset(empty_identifier, 0, sizeof(empty_identifier)); + EXPECT_NE(0, memcmp(empty_identifier, identifier, sizeof(identifier))); + EXPECT_TRUE(dumper.ThreadsResume()); +} +#endif + +TEST_F(LinuxPtraceDumperChildTest, FileIDsMatch) { + // Calculate the File ID of our binary using both + // FileID::ElfFileIdentifier and LinuxDumper::ElfFileIdentifierForMapping + // and ensure that we get the same result from both. + char exe_name[PATH_MAX]; + ASSERT_TRUE(SafeReadLink("/proc/self/exe", exe_name)); + + LinuxPtraceDumper dumper(getppid()); + ASSERT_TRUE(dumper.Init()); + const wasteful_vector mappings = dumper.mappings(); + bool found_exe = false; + unsigned i; + for (i = 0; i < mappings.size(); ++i) { + const MappingInfo* mapping = mappings[i]; + if (!strcmp(mapping->name, exe_name)) { + found_exe = true; + break; + } + } + ASSERT_TRUE(found_exe); + + uint8_t identifier1[sizeof(MDGUID)]; + uint8_t identifier2[sizeof(MDGUID)]; + EXPECT_TRUE(dumper.ElfFileIdentifierForMapping(*mappings[i], true, i, + identifier1)); + FileID fileid(exe_name); + EXPECT_TRUE(fileid.ElfFileIdentifier(identifier2)); + char identifier_string1[37]; + char identifier_string2[37]; + FileID::ConvertIdentifierToString(identifier1, identifier_string1, + 37); + FileID::ConvertIdentifierToString(identifier2, identifier_string2, + 37); + EXPECT_STREQ(identifier_string1, identifier_string2); +} + +/* Get back to normal behavior of TEST*() macros wrt TestBody. */ +#undef TestBody + TEST(LinuxPtraceDumperTest, VerifyStackReadWithMultipleThreads) { static const int kNumberOfThreadsInHelperProgram = 5; char kNumberOfThreadsArgument[2]; @@ -212,7 +406,7 @@ TEST(LinuxPtraceDumperTest, VerifyStackReadWithMultipleThreads) { ASSERT_EQ(1, r); ASSERT_TRUE(pfd.revents & POLLIN); uint8_t junk; - ASSERT_EQ(read(fds[0], &junk, sizeof(junk)), + ASSERT_EQ(read(fds[0], &junk, sizeof(junk)), static_cast(sizeof(junk))); } close(fds[0]); @@ -238,11 +432,16 @@ TEST(LinuxPtraceDumperTest, VerifyStackReadWithMultipleThreads) { // In the helper program, we stored a pointer to the thread id in a // specific register. Check that we can recover its value. #if defined(__ARM_EABI__) - pid_t *process_tid_location = (pid_t *)(one_thread.regs.uregs[3]); + pid_t* process_tid_location = (pid_t*)(one_thread.regs.uregs[3]); +#elif defined(__aarch64__) + pid_t* process_tid_location = (pid_t*)(one_thread.regs.regs[3]); #elif defined(__i386) - pid_t *process_tid_location = (pid_t *)(one_thread.regs.ecx); + pid_t* process_tid_location = (pid_t*)(one_thread.regs.ecx); #elif defined(__x86_64) - pid_t *process_tid_location = (pid_t *)(one_thread.regs.rcx); + pid_t* process_tid_location = (pid_t*)(one_thread.regs.rcx); +#elif defined(__mips__) + pid_t* process_tid_location = + reinterpret_cast(one_thread.mcontext.gregs[1]); #else #error This test has not been ported to this platform. #endif @@ -262,178 +461,3 @@ TEST(LinuxPtraceDumperTest, VerifyStackReadWithMultipleThreads) { ASSERT_TRUE(WIFSIGNALED(status)); ASSERT_EQ(SIGKILL, WTERMSIG(status)); } - -TEST(LinuxPtraceDumperTest, BuildProcPath) { - const pid_t pid = getpid(); - LinuxPtraceDumper dumper(pid); - - char maps_path[NAME_MAX] = ""; - char maps_path_expected[NAME_MAX]; - snprintf(maps_path_expected, sizeof(maps_path_expected), - "/proc/%d/maps", pid); - EXPECT_TRUE(dumper.BuildProcPath(maps_path, pid, "maps")); - EXPECT_STREQ(maps_path_expected, maps_path); - - EXPECT_FALSE(dumper.BuildProcPath(NULL, pid, "maps")); - EXPECT_FALSE(dumper.BuildProcPath(maps_path, 0, "maps")); - EXPECT_FALSE(dumper.BuildProcPath(maps_path, pid, "")); - EXPECT_FALSE(dumper.BuildProcPath(maps_path, pid, NULL)); - - char long_node[NAME_MAX]; - size_t long_node_len = NAME_MAX - strlen("/proc/123") - 1; - memset(long_node, 'a', long_node_len); - long_node[long_node_len] = '\0'; - EXPECT_FALSE(dumper.BuildProcPath(maps_path, 123, long_node)); -} - -#if !defined(__ARM_EABI__) -// Ensure that the linux-gate VDSO is included in the mapping list. -TEST(LinuxPtraceDumperTest, MappingsIncludeLinuxGate) { - LinuxPtraceDumper dumper(getpid()); - ASSERT_TRUE(dumper.Init()); - - void* linux_gate_loc = - reinterpret_cast(dumper.auxv()[AT_SYSINFO_EHDR]); - ASSERT_TRUE(linux_gate_loc); - bool found_linux_gate = false; - - const wasteful_vector mappings = dumper.mappings(); - const MappingInfo* mapping; - for (unsigned i = 0; i < mappings.size(); ++i) { - mapping = mappings[i]; - if (!strcmp(mapping->name, kLinuxGateLibraryName)) { - found_linux_gate = true; - break; - } - } - EXPECT_TRUE(found_linux_gate); - EXPECT_EQ(linux_gate_loc, reinterpret_cast(mapping->start_addr)); - EXPECT_EQ(0, memcmp(linux_gate_loc, ELFMAG, SELFMAG)); -} - -// Ensure that the linux-gate VDSO can generate a non-zeroed File ID. -TEST(LinuxPtraceDumperTest, LinuxGateMappingID) { - LinuxPtraceDumper dumper(getpid()); - ASSERT_TRUE(dumper.Init()); - - bool found_linux_gate = false; - const wasteful_vector mappings = dumper.mappings(); - unsigned index = 0; - for (unsigned i = 0; i < mappings.size(); ++i) { - if (!strcmp(mappings[i]->name, kLinuxGateLibraryName)) { - found_linux_gate = true; - index = i; - break; - } - } - ASSERT_TRUE(found_linux_gate); - - uint8_t identifier[sizeof(MDGUID)]; - ASSERT_TRUE(dumper.ElfFileIdentifierForMapping(*mappings[index], - true, - index, - identifier)); - uint8_t empty_identifier[sizeof(MDGUID)]; - memset(empty_identifier, 0, sizeof(empty_identifier)); - EXPECT_NE(0, memcmp(empty_identifier, identifier, sizeof(identifier))); -} - -// Ensure that the linux-gate VDSO can generate a non-zeroed File ID -// from a child process. -TEST(LinuxPtraceDumperTest, LinuxGateMappingIDChild) { - int fds[2]; - ASSERT_NE(-1, pipe(fds)); - - // Fork a child so ptrace works. - const pid_t child = fork(); - if (child == 0) { - close(fds[1]); - // Now wait forever for the parent. - char b; - IGNORE_RET(HANDLE_EINTR(read(fds[0], &b, sizeof(b)))); - close(fds[0]); - syscall(__NR_exit); - } - close(fds[0]); - - LinuxPtraceDumper dumper(child); - ASSERT_TRUE(dumper.Init()); - - bool found_linux_gate = false; - const wasteful_vector mappings = dumper.mappings(); - unsigned index = 0; - for (unsigned i = 0; i < mappings.size(); ++i) { - if (!strcmp(mappings[i]->name, kLinuxGateLibraryName)) { - found_linux_gate = true; - index = i; - break; - } - } - ASSERT_TRUE(found_linux_gate); - - // Need to suspend the child so ptrace actually works. - ASSERT_TRUE(dumper.ThreadsSuspend()); - uint8_t identifier[sizeof(MDGUID)]; - ASSERT_TRUE(dumper.ElfFileIdentifierForMapping(*mappings[index], - true, - index, - identifier)); - uint8_t empty_identifier[sizeof(MDGUID)]; - memset(empty_identifier, 0, sizeof(empty_identifier)); - EXPECT_NE(0, memcmp(empty_identifier, identifier, sizeof(identifier))); - EXPECT_TRUE(dumper.ThreadsResume()); - close(fds[1]); -} -#endif - -TEST(LinuxPtraceDumperTest, FileIDsMatch) { - // Calculate the File ID of our binary using both - // FileID::ElfFileIdentifier and LinuxDumper::ElfFileIdentifierForMapping - // and ensure that we get the same result from both. - char exe_name[PATH_MAX]; - ASSERT_TRUE(SafeReadLink("/proc/self/exe", exe_name)); - - int fds[2]; - ASSERT_NE(-1, pipe(fds)); - - // Fork a child so ptrace works. - const pid_t child = fork(); - if (child == 0) { - close(fds[1]); - // Now wait forever for the parent. - char b; - IGNORE_RET(HANDLE_EINTR(read(fds[0], &b, sizeof(b)))); - close(fds[0]); - syscall(__NR_exit); - } - close(fds[0]); - - LinuxPtraceDumper dumper(child); - ASSERT_TRUE(dumper.Init()); - const wasteful_vector mappings = dumper.mappings(); - bool found_exe = false; - unsigned i; - for (i = 0; i < mappings.size(); ++i) { - const MappingInfo* mapping = mappings[i]; - if (!strcmp(mapping->name, exe_name)) { - found_exe = true; - break; - } - } - ASSERT_TRUE(found_exe); - - uint8_t identifier1[sizeof(MDGUID)]; - uint8_t identifier2[sizeof(MDGUID)]; - EXPECT_TRUE(dumper.ElfFileIdentifierForMapping(*mappings[i], true, i, - identifier1)); - FileID fileid(exe_name); - EXPECT_TRUE(fileid.ElfFileIdentifier(identifier2)); - char identifier_string1[37]; - char identifier_string2[37]; - FileID::ConvertIdentifierToString(identifier1, identifier_string1, - 37); - FileID::ConvertIdentifierToString(identifier2, identifier_string2, - 37); - EXPECT_STREQ(identifier_string1, identifier_string2); - close(fds[1]); -} diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/minidump_writer.cc b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/minidump_writer.cc index 34091dbe51e3..4b1e6f87843e 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/minidump_writer.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/minidump_writer.cc @@ -59,16 +59,22 @@ #include #include #include +#include #include #include +#include "client/linux/dump_writer_common/thread_info.h" +#include "client/linux/dump_writer_common/ucontext_reader.h" #include "client/linux/handler/exception_handler.h" +#include "client/linux/minidump_writer/cpu_set.h" #include "client/linux/minidump_writer/line_reader.h" #include "client/linux/minidump_writer/linux_dumper.h" #include "client/linux/minidump_writer/linux_ptrace_dumper.h" +#include "client/linux/minidump_writer/proc_cpuinfo_reader.h" #include "client/minidump_file_writer.h" #include "common/linux/linux_libc_support.h" +#include "common/minidump_type_helper.h" #include "google_breakpad/common/minidump_format.h" #include "third_party/lss/linux_syscall_support.h" @@ -76,303 +82,26 @@ namespace { using google_breakpad::AppMemoryList; using google_breakpad::ExceptionHandler; +using google_breakpad::CpuSet; using google_breakpad::LineReader; using google_breakpad::LinuxDumper; using google_breakpad::LinuxPtraceDumper; +using google_breakpad::MDTypeHelper; using google_breakpad::MappingEntry; using google_breakpad::MappingInfo; using google_breakpad::MappingList; using google_breakpad::MinidumpFileWriter; using google_breakpad::PageAllocator; +using google_breakpad::ProcCpuInfoReader; +using google_breakpad::RawContextCPU; using google_breakpad::ThreadInfo; using google_breakpad::TypedMDRVA; +using google_breakpad::UContextReader; using google_breakpad::UntypedMDRVA; using google_breakpad::wasteful_vector; -// Minidump defines register structures which are different from the raw -// structures which we get from the kernel. These are platform specific -// functions to juggle the ucontext and user structures into minidump format. -#if defined(__i386) -typedef MDRawContextX86 RawContextCPU; - -// Write a uint16_t to memory -// out: memory location to write to -// v: value to write. -void U16(void* out, uint16_t v) { - my_memcpy(out, &v, sizeof(v)); -} - -// Write a uint32_t to memory -// out: memory location to write to -// v: value to write. -void U32(void* out, uint32_t v) { - my_memcpy(out, &v, sizeof(v)); -} - -// Juggle an x86 user_(fp|fpx|)regs_struct into minidump format -// out: the minidump structure -// info: the collection of register structures. -void CPUFillFromThreadInfo(MDRawContextX86 *out, - const google_breakpad::ThreadInfo &info) { - out->context_flags = MD_CONTEXT_X86_ALL; - - out->dr0 = info.dregs[0]; - out->dr1 = info.dregs[1]; - out->dr2 = info.dregs[2]; - out->dr3 = info.dregs[3]; - // 4 and 5 deliberatly omitted because they aren't included in the minidump - // format. - out->dr6 = info.dregs[6]; - out->dr7 = info.dregs[7]; - - out->gs = info.regs.xgs; - out->fs = info.regs.xfs; - out->es = info.regs.xes; - out->ds = info.regs.xds; - - out->edi = info.regs.edi; - out->esi = info.regs.esi; - out->ebx = info.regs.ebx; - out->edx = info.regs.edx; - out->ecx = info.regs.ecx; - out->eax = info.regs.eax; - - out->ebp = info.regs.ebp; - out->eip = info.regs.eip; - out->cs = info.regs.xcs; - out->eflags = info.regs.eflags; - out->esp = info.regs.esp; - out->ss = info.regs.xss; - - out->float_save.control_word = info.fpregs.cwd; - out->float_save.status_word = info.fpregs.swd; - out->float_save.tag_word = info.fpregs.twd; - out->float_save.error_offset = info.fpregs.fip; - out->float_save.error_selector = info.fpregs.fcs; - out->float_save.data_offset = info.fpregs.foo; - out->float_save.data_selector = info.fpregs.fos; - - // 8 registers * 10 bytes per register. - my_memcpy(out->float_save.register_area, info.fpregs.st_space, 10 * 8); - - // This matches the Intel fpsave format. - U16(out->extended_registers + 0, info.fpregs.cwd); - U16(out->extended_registers + 2, info.fpregs.swd); - U16(out->extended_registers + 4, info.fpregs.twd); - U16(out->extended_registers + 6, info.fpxregs.fop); - U32(out->extended_registers + 8, info.fpxregs.fip); - U16(out->extended_registers + 12, info.fpxregs.fcs); - U32(out->extended_registers + 16, info.fpregs.foo); - U16(out->extended_registers + 20, info.fpregs.fos); - U32(out->extended_registers + 24, info.fpxregs.mxcsr); - - my_memcpy(out->extended_registers + 32, &info.fpxregs.st_space, 128); - my_memcpy(out->extended_registers + 160, &info.fpxregs.xmm_space, 128); -} - -// Juggle an x86 ucontext into minidump format -// out: the minidump structure -// info: the collection of register structures. -void CPUFillFromUContext(MDRawContextX86 *out, const ucontext *uc, - const struct _libc_fpstate* fp) { - const greg_t* regs = uc->uc_mcontext.gregs; - - out->context_flags = MD_CONTEXT_X86_FULL | - MD_CONTEXT_X86_FLOATING_POINT; - - out->gs = regs[REG_GS]; - out->fs = regs[REG_FS]; - out->es = regs[REG_ES]; - out->ds = regs[REG_DS]; - - out->edi = regs[REG_EDI]; - out->esi = regs[REG_ESI]; - out->ebx = regs[REG_EBX]; - out->edx = regs[REG_EDX]; - out->ecx = regs[REG_ECX]; - out->eax = regs[REG_EAX]; - - out->ebp = regs[REG_EBP]; - out->eip = regs[REG_EIP]; - out->cs = regs[REG_CS]; - out->eflags = regs[REG_EFL]; - out->esp = regs[REG_UESP]; - out->ss = regs[REG_SS]; - - out->float_save.control_word = fp->cw; - out->float_save.status_word = fp->sw; - out->float_save.tag_word = fp->tag; - out->float_save.error_offset = fp->ipoff; - out->float_save.error_selector = fp->cssel; - out->float_save.data_offset = fp->dataoff; - out->float_save.data_selector = fp->datasel; - - // 8 registers * 10 bytes per register. - my_memcpy(out->float_save.register_area, fp->_st, 10 * 8); -} - -#elif defined(__x86_64) -typedef MDRawContextAMD64 RawContextCPU; - -void CPUFillFromThreadInfo(MDRawContextAMD64 *out, - const google_breakpad::ThreadInfo &info) { - out->context_flags = MD_CONTEXT_AMD64_FULL | - MD_CONTEXT_AMD64_SEGMENTS; - - out->cs = info.regs.cs; - - out->ds = info.regs.ds; - out->es = info.regs.es; - out->fs = info.regs.fs; - out->gs = info.regs.gs; - - out->ss = info.regs.ss; - out->eflags = info.regs.eflags; - - out->dr0 = info.dregs[0]; - out->dr1 = info.dregs[1]; - out->dr2 = info.dregs[2]; - out->dr3 = info.dregs[3]; - // 4 and 5 deliberatly omitted because they aren't included in the minidump - // format. - out->dr6 = info.dregs[6]; - out->dr7 = info.dregs[7]; - - out->rax = info.regs.rax; - out->rcx = info.regs.rcx; - out->rdx = info.regs.rdx; - out->rbx = info.regs.rbx; - - out->rsp = info.regs.rsp; - - out->rbp = info.regs.rbp; - out->rsi = info.regs.rsi; - out->rdi = info.regs.rdi; - out->r8 = info.regs.r8; - out->r9 = info.regs.r9; - out->r10 = info.regs.r10; - out->r11 = info.regs.r11; - out->r12 = info.regs.r12; - out->r13 = info.regs.r13; - out->r14 = info.regs.r14; - out->r15 = info.regs.r15; - - out->rip = info.regs.rip; - - out->flt_save.control_word = info.fpregs.cwd; - out->flt_save.status_word = info.fpregs.swd; - out->flt_save.tag_word = info.fpregs.ftw; - out->flt_save.error_opcode = info.fpregs.fop; - out->flt_save.error_offset = info.fpregs.rip; - out->flt_save.error_selector = 0; // We don't have this. - out->flt_save.data_offset = info.fpregs.rdp; - out->flt_save.data_selector = 0; // We don't have this. - out->flt_save.mx_csr = info.fpregs.mxcsr; - out->flt_save.mx_csr_mask = info.fpregs.mxcr_mask; - my_memcpy(&out->flt_save.float_registers, &info.fpregs.st_space, 8 * 16); - my_memcpy(&out->flt_save.xmm_registers, &info.fpregs.xmm_space, 16 * 16); -} - -void CPUFillFromUContext(MDRawContextAMD64 *out, const ucontext *uc, - const struct _libc_fpstate* fpregs) { - const greg_t* regs = uc->uc_mcontext.gregs; - - out->context_flags = MD_CONTEXT_AMD64_FULL; - - out->cs = regs[REG_CSGSFS] & 0xffff; - - out->fs = (regs[REG_CSGSFS] >> 32) & 0xffff; - out->gs = (regs[REG_CSGSFS] >> 16) & 0xffff; - - out->eflags = regs[REG_EFL]; - - out->rax = regs[REG_RAX]; - out->rcx = regs[REG_RCX]; - out->rdx = regs[REG_RDX]; - out->rbx = regs[REG_RBX]; - - out->rsp = regs[REG_RSP]; - out->rbp = regs[REG_RBP]; - out->rsi = regs[REG_RSI]; - out->rdi = regs[REG_RDI]; - out->r8 = regs[REG_R8]; - out->r9 = regs[REG_R9]; - out->r10 = regs[REG_R10]; - out->r11 = regs[REG_R11]; - out->r12 = regs[REG_R12]; - out->r13 = regs[REG_R13]; - out->r14 = regs[REG_R14]; - out->r15 = regs[REG_R15]; - - out->rip = regs[REG_RIP]; - - out->flt_save.control_word = fpregs->cwd; - out->flt_save.status_word = fpregs->swd; - out->flt_save.tag_word = fpregs->ftw; - out->flt_save.error_opcode = fpregs->fop; - out->flt_save.error_offset = fpregs->rip; - out->flt_save.data_offset = fpregs->rdp; - out->flt_save.error_selector = 0; // We don't have this. - out->flt_save.data_selector = 0; // We don't have this. - out->flt_save.mx_csr = fpregs->mxcsr; - out->flt_save.mx_csr_mask = fpregs->mxcr_mask; - my_memcpy(&out->flt_save.float_registers, &fpregs->_st, 8 * 16); - my_memcpy(&out->flt_save.xmm_registers, &fpregs->_xmm, 16 * 16); -} - -#elif defined(__ARMEL__) -typedef MDRawContextARM RawContextCPU; - -void CPUFillFromThreadInfo(MDRawContextARM* out, - const google_breakpad::ThreadInfo& info) { - out->context_flags = MD_CONTEXT_ARM_FULL; - - for (int i = 0; i < MD_CONTEXT_ARM_GPR_COUNT; ++i) - out->iregs[i] = info.regs.uregs[i]; - // No CPSR register in ThreadInfo(it's not accessible via ptrace) - out->cpsr = 0; -#if !defined(__ANDROID__) - out->float_save.fpscr = info.fpregs.fpsr | - (static_cast(info.fpregs.fpcr) << 32); - // TODO: sort this out, actually collect floating point registers - my_memset(&out->float_save.regs, 0, sizeof(out->float_save.regs)); - my_memset(&out->float_save.extra, 0, sizeof(out->float_save.extra)); -#endif -} - -void CPUFillFromUContext(MDRawContextARM* out, const ucontext* uc, - const struct _libc_fpstate* fpregs) { - out->context_flags = MD_CONTEXT_ARM_FULL; - - out->iregs[0] = uc->uc_mcontext.arm_r0; - out->iregs[1] = uc->uc_mcontext.arm_r1; - out->iregs[2] = uc->uc_mcontext.arm_r2; - out->iregs[3] = uc->uc_mcontext.arm_r3; - out->iregs[4] = uc->uc_mcontext.arm_r4; - out->iregs[5] = uc->uc_mcontext.arm_r5; - out->iregs[6] = uc->uc_mcontext.arm_r6; - out->iregs[7] = uc->uc_mcontext.arm_r7; - out->iregs[8] = uc->uc_mcontext.arm_r8; - out->iregs[9] = uc->uc_mcontext.arm_r9; - out->iregs[10] = uc->uc_mcontext.arm_r10; - - out->iregs[11] = uc->uc_mcontext.arm_fp; - out->iregs[12] = uc->uc_mcontext.arm_ip; - out->iregs[13] = uc->uc_mcontext.arm_sp; - out->iregs[14] = uc->uc_mcontext.arm_lr; - out->iregs[15] = uc->uc_mcontext.arm_pc; - - out->cpsr = uc->uc_mcontext.arm_cpsr; - - // TODO: fix this after fixing ExceptionHandler - out->float_save.fpscr = 0; - my_memset(&out->float_save.regs, 0, sizeof(out->float_save.regs)); - my_memset(&out->float_save.extra, 0, sizeof(out->float_save.extra)); -} - -#else -#error "This code has not been ported to your platform yet." -#endif +typedef MDTypeHelper::MDRawDebug MDRawDebug; +typedef MDTypeHelper::MDRawLinkMap MDRawLinkMap; class MinidumpWriter { public: @@ -401,11 +130,8 @@ class MinidumpWriter { : fd_(minidump_fd), path_(minidump_path), ucontext_(context ? &context->context : NULL), -#if !defined(__ARM_EABI__) +#if !defined(__ARM_EABI__) && !defined(__mips__) float_state_(context ? &context->float_state : NULL), -#else - // TODO: fix this after fixing ExceptionHandler - float_state_(NULL), #endif dumper_(dumper), minidump_size_limit_(-1), @@ -426,7 +152,7 @@ class MinidumpWriter { else if (!minidump_writer_.Open(path_)) return false; - return dumper_->ThreadsSuspend(); + return dumper_->ThreadsSuspend() && dumper_->LateInit(); } ~MinidumpWriter() { @@ -529,123 +255,6 @@ class MinidumpWriter { return true; } - // Check if the top of the stack is part of a system call that has been - // redirected by the seccomp sandbox. If so, try to pop the stack frames - // all the way back to the point where the interception happened. - void PopSeccompStackFrame(RawContextCPU* cpu, const MDRawThread& thread, - uint8_t* stack_copy) { -#if defined(__x86_64) - uint64_t bp = cpu->rbp; - uint64_t top = thread.stack.start_of_memory_range; - for (int i = 4; i--; ) { - if (bp < top || - bp + sizeof(bp) > thread.stack.start_of_memory_range + - thread.stack.memory.data_size || - bp & 1) { - break; - } - uint64_t old_top = top; - top = bp; - uint8_t* bp_addr = stack_copy + bp - thread.stack.start_of_memory_range; - my_memcpy(&bp, bp_addr, sizeof(bp)); - if (bp == 0xDEADBEEFDEADBEEFull) { - struct { - uint64_t r15; - uint64_t r14; - uint64_t r13; - uint64_t r12; - uint64_t r11; - uint64_t r10; - uint64_t r9; - uint64_t r8; - uint64_t rdi; - uint64_t rsi; - uint64_t rdx; - uint64_t rcx; - uint64_t rbx; - uint64_t deadbeef; - uint64_t rbp; - uint64_t fakeret; - uint64_t ret; - /* char redzone[128]; */ - } seccomp_stackframe; - if (top - offsetof(typeof(seccomp_stackframe), deadbeef) < old_top || - top - offsetof(typeof(seccomp_stackframe), deadbeef) + - sizeof(seccomp_stackframe) > - thread.stack.start_of_memory_range+thread.stack.memory.data_size) { - break; - } - my_memcpy(&seccomp_stackframe, - bp_addr - offsetof(typeof(seccomp_stackframe), deadbeef), - sizeof(seccomp_stackframe)); - cpu->rbx = seccomp_stackframe.rbx; - cpu->rcx = seccomp_stackframe.rcx; - cpu->rdx = seccomp_stackframe.rdx; - cpu->rsi = seccomp_stackframe.rsi; - cpu->rdi = seccomp_stackframe.rdi; - cpu->rbp = seccomp_stackframe.rbp; - cpu->rsp = top + 4*sizeof(uint64_t) + 128; - cpu->r8 = seccomp_stackframe.r8; - cpu->r9 = seccomp_stackframe.r9; - cpu->r10 = seccomp_stackframe.r10; - cpu->r11 = seccomp_stackframe.r11; - cpu->r12 = seccomp_stackframe.r12; - cpu->r13 = seccomp_stackframe.r13; - cpu->r14 = seccomp_stackframe.r14; - cpu->r15 = seccomp_stackframe.r15; - cpu->rip = seccomp_stackframe.fakeret; - return; - } - } -#elif defined(__i386) - uint32_t bp = cpu->ebp; - uint32_t top = thread.stack.start_of_memory_range; - for (int i = 4; i--; ) { - if (bp < top || - bp + sizeof(bp) > thread.stack.start_of_memory_range + - thread.stack.memory.data_size || - bp & 1) { - break; - } - uint32_t old_top = top; - top = bp; - uint8_t* bp_addr = stack_copy + bp - thread.stack.start_of_memory_range; - my_memcpy(&bp, bp_addr, sizeof(bp)); - if (bp == 0xDEADBEEFu) { - struct { - uint32_t edi; - uint32_t esi; - uint32_t edx; - uint32_t ecx; - uint32_t ebx; - uint32_t deadbeef; - uint32_t ebp; - uint32_t fakeret; - uint32_t ret; - } seccomp_stackframe; - if (top - offsetof(typeof(seccomp_stackframe), deadbeef) < old_top || - top - offsetof(typeof(seccomp_stackframe), deadbeef) + - sizeof(seccomp_stackframe) > - thread.stack.start_of_memory_range+thread.stack.memory.data_size) { - break; - } - my_memcpy(&seccomp_stackframe, - bp_addr - offsetof(typeof(seccomp_stackframe), deadbeef), - sizeof(seccomp_stackframe)); - cpu->ebx = seccomp_stackframe.ebx; - cpu->ecx = seccomp_stackframe.ecx; - cpu->edx = seccomp_stackframe.edx; - cpu->esi = seccomp_stackframe.esi; - cpu->edi = seccomp_stackframe.edi; - cpu->ebp = seccomp_stackframe.ebp; - cpu->esp = top + 4*sizeof(void*); - cpu->eip = seccomp_stackframe.fakeret; - return; - } - } -#endif - } - bool FillThreadStack(MDRawThread* thread, uintptr_t stack_pointer, int max_stack_len, uint8_t** stack_copy) { *stack_copy = NULL; @@ -716,12 +325,13 @@ class MinidumpWriter { ucontext_ && !dumper_->IsPostMortem()) { uint8_t* stack_copy; - if (!FillThreadStack(&thread, GetStackPointer(), -1, &stack_copy)) + const uintptr_t stack_ptr = UContextReader::GetStackPointer(ucontext_); + if (!FillThreadStack(&thread, stack_ptr, -1, &stack_copy)) return false; // Copy 256 bytes around crashing instruction pointer to minidump. const size_t kIPMemorySize = 256; - uint64_t ip = GetInstructionPointer(); + uint64_t ip = UContextReader::GetInstructionPointer(ucontext_); // Bound it to the upper and lower bounds of the memory map // it's contained within. If it's not in mapped memory, // don't bother trying to write it. @@ -766,9 +376,11 @@ class MinidumpWriter { if (!cpu.Allocate()) return false; my_memset(cpu.get(), 0, sizeof(RawContextCPU)); - CPUFillFromUContext(cpu.get(), ucontext_, float_state_); - if (stack_copy) - PopSeccompStackFrame(cpu.get(), thread, stack_copy); +#if !defined(__ARM_EABI__) && !defined(__mips__) + UContextReader::FillCPUContext(cpu.get(), ucontext_, float_state_); +#else + UContextReader::FillCPUContext(cpu.get(), ucontext_); +#endif thread.thread_context = cpu.location(); crashing_thread_context_ = cpu.location(); } else { @@ -788,9 +400,7 @@ class MinidumpWriter { if (!cpu.Allocate()) return false; my_memset(cpu.get(), 0, sizeof(RawContextCPU)); - CPUFillFromThreadInfo(cpu.get(), info); - if (stack_copy) - PopSeccompStackFrame(cpu.get(), thread, stack_copy); + info.FillCPUContext(cpu.get()); thread.thread_context = cpu.location(); if (dumper_->threads()[i] == GetCrashThread()) { crashing_thread_context_ = cpu.location(); @@ -798,7 +408,7 @@ class MinidumpWriter { // This is the crashing thread of a live process, but // no context was provided, so set the crash address // while the instruction pointer is already here. - dumper_->set_crash_address(GetInstructionPointer(info)); + dumper_->set_crash_address(info.GetInstructionPointer()); } } } @@ -835,7 +445,9 @@ class MinidumpWriter { static bool ShouldIncludeMapping(const MappingInfo& mapping) { if (mapping.name[0] == 0 || // only want modules with filenames. - mapping.offset || // only want to include one mapping per shared lib. + // Only want to include one mapping per shared lib. + // Avoid filtering executable mappings. + (mapping.offset != 0 && !mapping.exec) || mapping.size < 4096) { // too small to get a signature for. return false; } @@ -926,24 +538,9 @@ class MinidumpWriter { mod.base_of_image = mapping.start_addr; mod.size_of_image = mapping.size; - const size_t filepath_len = my_strlen(mapping.name); - - // Figure out file name from path - const char* filename_ptr = mapping.name + filepath_len - 1; - while (filename_ptr >= mapping.name) { - if (*filename_ptr == '/') - break; - filename_ptr--; - } - filename_ptr++; - - const size_t filename_len = mapping.name + filepath_len - filename_ptr; uint8_t cv_buf[MDCVInfoPDB70_minsize + NAME_MAX]; uint8_t* cv_ptr = cv_buf; - UntypedMDRVA cv(&minidump_writer_); - if (!cv.Allocate(MDCVInfoPDB70_minsize + filename_len + 1)) - return false; const uint32_t cv_signature = MD_CVINFOPDB70_SIGNATURE; my_memcpy(cv_ptr, &cv_signature, sizeof(cv_signature)); @@ -954,20 +551,31 @@ class MinidumpWriter { // GUID was provided by caller. my_memcpy(signature, identifier, sizeof(MDGUID)); } else { + // Note: ElfFileIdentifierForMapping() can manipulate the |mapping.name|. dumper_->ElfFileIdentifierForMapping(mapping, member, mapping_id, signature); } my_memset(cv_ptr, 0, sizeof(uint32_t)); // Set age to 0 on Linux. cv_ptr += sizeof(uint32_t); + char file_name[NAME_MAX]; + char file_path[NAME_MAX]; + LinuxDumper::GetMappingEffectiveNameAndPath( + mapping, file_path, sizeof(file_path), file_name, sizeof(file_name)); + + const size_t file_name_len = my_strlen(file_name); + UntypedMDRVA cv(&minidump_writer_); + if (!cv.Allocate(MDCVInfoPDB70_minsize + file_name_len + 1)) + return false; + // Write pdb_file_name - my_memcpy(cv_ptr, filename_ptr, filename_len + 1); - cv.Copy(cv_buf, MDCVInfoPDB70_minsize + filename_len + 1); + my_memcpy(cv_ptr, file_name, file_name_len + 1); + cv.Copy(cv_buf, MDCVInfoPDB70_minsize + file_name_len + 1); mod.cv_record = cv.location(); MDLocationDescriptor ld; - if (!minidump_writer_.WriteString(mapping.name, filepath_len, &ld)) + if (!minidump_writer_.WriteString(file_path, my_strlen(file_path), &ld)) return false; mod.module_name_rva = ld.rva; return true; @@ -1044,7 +652,9 @@ class MinidumpWriter { ElfW(Addr) dyn_addr = 0; for (; phnum >= 0; phnum--, phdr++) { ElfW(Phdr) ph; - dumper_->CopyFromProcess(&ph, GetCrashThread(), phdr, sizeof(ph)); + if (!dumper_->CopyFromProcess(&ph, GetCrashThread(), phdr, sizeof(ph))) + return false; + // Adjust base address with the virtual address of the PT_LOAD segment // corresponding to offset 0 if (ph.p_type == PT_LOAD && ph.p_offset == 0) { @@ -1065,15 +675,26 @@ class MinidumpWriter { struct r_debug* r_debug = NULL; uint32_t dynamic_length = 0; - for (int i = 0;;) { + for (int i = 0; ; ++i) { ElfW(Dyn) dyn; dynamic_length += sizeof(dyn); - dumper_->CopyFromProcess(&dyn, GetCrashThread(), dynamic+i++, - sizeof(dyn)); + if (!dumper_->CopyFromProcess(&dyn, GetCrashThread(), dynamic + i, + sizeof(dyn))) { + return false; + } + +#ifdef __mips__ + if (dyn.d_tag == DT_MIPS_RLD_MAP) { + r_debug = reinterpret_cast(dyn.d_un.d_ptr); + continue; + } +#else if (dyn.d_tag == DT_DEBUG) { r_debug = reinterpret_cast(dyn.d_un.d_ptr); continue; - } else if (dyn.d_tag == DT_NULL) { + } +#endif + else if (dyn.d_tag == DT_NULL) { break; } } @@ -1089,11 +710,15 @@ class MinidumpWriter { // Count the number of loaded DSOs int dso_count = 0; struct r_debug debug_entry; - dumper_->CopyFromProcess(&debug_entry, GetCrashThread(), r_debug, - sizeof(debug_entry)); + if (!dumper_->CopyFromProcess(&debug_entry, GetCrashThread(), r_debug, + sizeof(debug_entry))) { + return false; + } for (struct link_map* ptr = debug_entry.r_map; ptr; ) { struct link_map map; - dumper_->CopyFromProcess(&map, GetCrashThread(), ptr, sizeof(map)); + if (!dumper_->CopyFromProcess(&map, GetCrashThread(), ptr, sizeof(map))) + return false; + ptr = map.l_next; dso_count++; } @@ -1111,7 +736,9 @@ class MinidumpWriter { // Iterate over DSOs and write their information to mini dump for (struct link_map* ptr = debug_entry.r_map; ptr; ) { struct link_map map; - dumper_->CopyFromProcess(&map, GetCrashThread(), ptr, sizeof(map)); + if (!dumper_->CopyFromProcess(&map, GetCrashThread(), ptr, sizeof(map))) + return false; + ptr = map.l_next; char filename[257] = { 0 }; if (map.l_name) { @@ -1123,8 +750,8 @@ class MinidumpWriter { return false; MDRawLinkMap entry; entry.name = location.rva; - entry.addr = (void*)map.l_addr; - entry.ld = (void*)map.l_ld; + entry.addr = map.l_addr; + entry.ld = reinterpret_cast(map.l_ld); linkmap.CopyIndex(idx++, &entry); } } @@ -1140,11 +767,14 @@ class MinidumpWriter { debug.get()->version = debug_entry.r_version; debug.get()->map = linkmap_rva; debug.get()->dso_count = dso_count; - debug.get()->brk = (void*)debug_entry.r_brk; - debug.get()->ldbase = (void*)debug_entry.r_ldbase; - debug.get()->dynamic = dynamic; + debug.get()->brk = debug_entry.r_brk; + debug.get()->ldbase = debug_entry.r_ldbase; + debug.get()->dynamic = reinterpret_cast(dynamic); wasteful_vector dso_debug_data(dumper_->allocator(), dynamic_length); + // The passed-in size to the constructor (above) is only a hint. + // Must call .resize() to do actual initialization of the elements. + dso_debug_data.resize(dynamic_length); dumper_->CopyFromProcess(&dso_debug_data[0], GetCrashThread(), dynamic, dynamic_length); debug.CopyIndexAfterObject(0, &dso_debug_data[0], dynamic_length); @@ -1163,56 +793,16 @@ class MinidumpWriter { return dumper_->crash_thread(); } -#if defined(__i386) - uintptr_t GetStackPointer() { - return ucontext_->uc_mcontext.gregs[REG_ESP]; - } - - uintptr_t GetInstructionPointer() { - return ucontext_->uc_mcontext.gregs[REG_EIP]; - } - - uintptr_t GetInstructionPointer(const ThreadInfo& info) { - return info.regs.eip; - } -#elif defined(__x86_64) - uintptr_t GetStackPointer() { - return ucontext_->uc_mcontext.gregs[REG_RSP]; - } - - uintptr_t GetInstructionPointer() { - return ucontext_->uc_mcontext.gregs[REG_RIP]; - } - - uintptr_t GetInstructionPointer(const ThreadInfo& info) { - return info.regs.rip; - } -#elif defined(__ARM_EABI__) - uintptr_t GetStackPointer() { - return ucontext_->uc_mcontext.arm_sp; - } - - uintptr_t GetInstructionPointer() { - return ucontext_->uc_mcontext.arm_pc; - } - - uintptr_t GetInstructionPointer(const ThreadInfo& info) { - return info.regs.uregs[15]; - } -#else -#error "This code has not been ported to your platform yet." -#endif - void NullifyDirectoryEntry(MDRawDirectory* dirent) { dirent->stream_type = 0; dirent->location.data_size = 0; dirent->location.rva = 0; } +#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) bool WriteCPUInformation(MDRawSystemInfo* sys_info) { char vendor_id[sizeof(sys_info->cpu.x86_cpu_info.vendor_id) + 1] = {0}; static const char vendor_id_name[] = "vendor_id"; - static const size_t vendor_id_name_length = sizeof(vendor_id_name) - 1; struct CpuInfoEntry { const char* info_name; @@ -1220,7 +810,7 @@ class MinidumpWriter { bool found; } cpu_info_table[] = { { "processor", -1, false }, -#if defined(__i386) || defined(__x86_64) +#if defined(__i386__) || defined(__x86_64__) { "model", 0, false }, { "stepping", 0, false }, { "cpu family", 0, false }, @@ -1229,14 +819,12 @@ class MinidumpWriter { // processor_architecture should always be set, do this first sys_info->processor_architecture = -#if defined(__i386) +#if defined(__mips__) + MD_CPU_ARCHITECTURE_MIPS; +#elif defined(__i386__) MD_CPU_ARCHITECTURE_X86; -#elif defined(__x86_64) - MD_CPU_ARCHITECTURE_AMD64; -#elif defined(__arm__) - MD_CPU_ARCHITECTURE_ARM; #else -#error "Unknown CPU arch" + MD_CPU_ARCHITECTURE_AMD64; #endif const int fd = sys_open("/proc/cpuinfo", O_RDONLY, 0); @@ -1245,71 +833,39 @@ class MinidumpWriter { { PageAllocator allocator; - LineReader* const line_reader = new(allocator) LineReader(fd); - const char* line; - unsigned line_len; - while (line_reader->GetNextLine(&line, &line_len)) { + ProcCpuInfoReader* const reader = new(allocator) ProcCpuInfoReader(fd); + const char* field; + while (reader->GetNextField(&field)) { for (size_t i = 0; i < sizeof(cpu_info_table) / sizeof(cpu_info_table[0]); i++) { CpuInfoEntry* entry = &cpu_info_table[i]; - if (entry->found && i) + if (i > 0 && entry->found) { + // except for the 'processor' field, ignore repeated values. continue; - if (!my_strncmp(line, entry->info_name, strlen(entry->info_name))) { - const char* value = my_strchr(line, ':'); - if (!value) + } + if (!my_strcmp(field, entry->info_name)) { + size_t value_len; + const char* value = reader->GetValueAndLen(&value_len); + if (value_len == 0) continue; - // the above strncmp only matches the prefix, it might be the wrong - // line. i.e. we matched "model name" instead of "model". - // check and make sure there is only spaces between the prefix and - // the colon. - const char* space_ptr = line + my_strlen(entry->info_name); - for (; space_ptr < value; space_ptr++) { - if (!my_isspace(*space_ptr)) { - break; - } - } - if (space_ptr != value) - continue; - - // skip past the colon and all the spaces that follow - do { - value++; - } while (my_isspace(*value)); - uintptr_t val; if (my_read_decimal_ptr(&val, value) == value) continue; + entry->value = static_cast(val); entry->found = true; } } // special case for vendor_id - if (!my_strncmp(line, vendor_id_name, vendor_id_name_length)) { - const char* value = my_strchr(line, ':'); - if (!value) - goto popline; - - // skip past the colon and all the spaces that follow - do { - value++; - } while (my_isspace(*value)); - - if (*value) { - size_t length = my_strlen(value); - if (length == 0) - goto popline; + if (!my_strcmp(field, vendor_id_name)) { + size_t value_len; + const char* value = reader->GetValueAndLen(&value_len); + if (value_len > 0) my_strlcpy(vendor_id, value, sizeof(vendor_id)); - // we don't want the trailing newline - if (length < sizeof(vendor_id) && vendor_id[length - 1] == '\n') - vendor_id[length - 1] = '\0'; - } } - - popline: - line_reader->PopLine(line_len); } sys_close(fd); } @@ -1322,11 +878,13 @@ class MinidumpWriter { return false; } } - // /proc/cpuinfo contains cpu id, change it into number by adding one. + // cpu_info_table[0] holds the last cpu id listed in /proc/cpuinfo, + // assuming this is the highest id, change it to the number of CPUs + // by adding one. cpu_info_table[0].value++; sys_info->number_of_processors = cpu_info_table[0].value; -#if defined(__i386) || defined(__x86_64) +#if defined(__i386__) || defined(__x86_64__) sys_info->processor_level = cpu_info_table[3].value; sys_info->processor_revision = cpu_info_table[1].value << 8 | cpu_info_table[2].value; @@ -1338,6 +896,224 @@ class MinidumpWriter { } return true; } +#elif defined(__arm__) || defined(__aarch64__) + bool WriteCPUInformation(MDRawSystemInfo* sys_info) { + // The CPUID value is broken up in several entries in /proc/cpuinfo. + // This table is used to rebuild it from the entries. + const struct CpuIdEntry { + const char* field; + char format; + char bit_lshift; + char bit_length; + } cpu_id_entries[] = { + { "CPU implementer", 'x', 24, 8 }, + { "CPU variant", 'x', 20, 4 }, + { "CPU part", 'x', 4, 12 }, + { "CPU revision", 'd', 0, 4 }, + }; + + // The ELF hwcaps are listed in the "Features" entry as textual tags. + // This table is used to rebuild them. + const struct CpuFeaturesEntry { + const char* tag; + uint32_t hwcaps; + } cpu_features_entries[] = { +#if defined(__arm__) + { "swp", MD_CPU_ARM_ELF_HWCAP_SWP }, + { "half", MD_CPU_ARM_ELF_HWCAP_HALF }, + { "thumb", MD_CPU_ARM_ELF_HWCAP_THUMB }, + { "26bit", MD_CPU_ARM_ELF_HWCAP_26BIT }, + { "fastmult", MD_CPU_ARM_ELF_HWCAP_FAST_MULT }, + { "fpa", MD_CPU_ARM_ELF_HWCAP_FPA }, + { "vfp", MD_CPU_ARM_ELF_HWCAP_VFP }, + { "edsp", MD_CPU_ARM_ELF_HWCAP_EDSP }, + { "java", MD_CPU_ARM_ELF_HWCAP_JAVA }, + { "iwmmxt", MD_CPU_ARM_ELF_HWCAP_IWMMXT }, + { "crunch", MD_CPU_ARM_ELF_HWCAP_CRUNCH }, + { "thumbee", MD_CPU_ARM_ELF_HWCAP_THUMBEE }, + { "neon", MD_CPU_ARM_ELF_HWCAP_NEON }, + { "vfpv3", MD_CPU_ARM_ELF_HWCAP_VFPv3 }, + { "vfpv3d16", MD_CPU_ARM_ELF_HWCAP_VFPv3D16 }, + { "tls", MD_CPU_ARM_ELF_HWCAP_TLS }, + { "vfpv4", MD_CPU_ARM_ELF_HWCAP_VFPv4 }, + { "idiva", MD_CPU_ARM_ELF_HWCAP_IDIVA }, + { "idivt", MD_CPU_ARM_ELF_HWCAP_IDIVT }, + { "idiv", MD_CPU_ARM_ELF_HWCAP_IDIVA | MD_CPU_ARM_ELF_HWCAP_IDIVT }, +#elif defined(__aarch64__) + // No hwcaps on aarch64. +#endif + }; + + // processor_architecture should always be set, do this first + sys_info->processor_architecture = +#if defined(__aarch64__) + MD_CPU_ARCHITECTURE_ARM64; +#else + MD_CPU_ARCHITECTURE_ARM; +#endif + + // /proc/cpuinfo is not readable under various sandboxed environments + // (e.g. Android services with the android:isolatedProcess attribute) + // prepare for this by setting default values now, which will be + // returned when this happens. + // + // Note: Bogus values are used to distinguish between failures (to + // read /sys and /proc files) and really badly configured kernels. + sys_info->number_of_processors = 0; + sys_info->processor_level = 1U; // There is no ARMv1 + sys_info->processor_revision = 42; + sys_info->cpu.arm_cpu_info.cpuid = 0; + sys_info->cpu.arm_cpu_info.elf_hwcaps = 0; + + // Counting the number of CPUs involves parsing two sysfs files, + // because the content of /proc/cpuinfo will only mirror the number + // of 'online' cores, and thus will vary with time. + // See http://www.kernel.org/doc/Documentation/cputopology.txt + { + CpuSet cpus_present; + CpuSet cpus_possible; + + int fd = sys_open("/sys/devices/system/cpu/present", O_RDONLY, 0); + if (fd >= 0) { + cpus_present.ParseSysFile(fd); + sys_close(fd); + + fd = sys_open("/sys/devices/system/cpu/possible", O_RDONLY, 0); + if (fd >= 0) { + cpus_possible.ParseSysFile(fd); + sys_close(fd); + + cpus_present.IntersectWith(cpus_possible); + int cpu_count = cpus_present.GetCount(); + if (cpu_count > 255) + cpu_count = 255; + sys_info->number_of_processors = static_cast(cpu_count); + } + } + } + + // Parse /proc/cpuinfo to reconstruct the CPUID value, as well + // as the ELF hwcaps field. For the latter, it would be easier to + // read /proc/self/auxv but unfortunately, this file is not always + // readable from regular Android applications on later versions + // (>= 4.1) of the Android platform. + const int fd = sys_open("/proc/cpuinfo", O_RDONLY, 0); + if (fd < 0) { + // Do not return false here to allow the minidump generation + // to happen properly. + return true; + } + + { + PageAllocator allocator; + ProcCpuInfoReader* const reader = + new(allocator) ProcCpuInfoReader(fd); + const char* field; + while (reader->GetNextField(&field)) { + for (size_t i = 0; + i < sizeof(cpu_id_entries)/sizeof(cpu_id_entries[0]); + ++i) { + const CpuIdEntry* entry = &cpu_id_entries[i]; + if (my_strcmp(entry->field, field) != 0) + continue; + uintptr_t result = 0; + const char* value = reader->GetValue(); + const char* p = value; + if (value[0] == '0' && value[1] == 'x') { + p = my_read_hex_ptr(&result, value+2); + } else if (entry->format == 'x') { + p = my_read_hex_ptr(&result, value); + } else { + p = my_read_decimal_ptr(&result, value); + } + if (p == value) + continue; + + result &= (1U << entry->bit_length)-1; + result <<= entry->bit_lshift; + sys_info->cpu.arm_cpu_info.cpuid |= + static_cast(result); + } +#if defined(__arm__) + // Get the architecture version from the "Processor" field. + // Note that it is also available in the "CPU architecture" field, + // however, some existing kernels are misconfigured and will report + // invalid values here (e.g. 6, while the CPU is ARMv7-A based). + // The "Processor" field doesn't have this issue. + if (!my_strcmp(field, "Processor")) { + size_t value_len; + const char* value = reader->GetValueAndLen(&value_len); + // Expected format: (v) + // Where is some text like "ARMv7 Processor rev 2" + // and is a decimal corresponding to the ARM + // architecture number. is either 'l' or 'b' + // and corresponds to the endianess, it is ignored here. + while (value_len > 0 && my_isspace(value[value_len-1])) + value_len--; + + size_t nn = value_len; + while (nn > 0 && value[nn-1] != '(') + nn--; + if (nn > 0 && value[nn] == 'v') { + uintptr_t arch_level = 5; + my_read_decimal_ptr(&arch_level, value + nn + 1); + sys_info->processor_level = static_cast(arch_level); + } + } +#elif defined(__aarch64__) + // The aarch64 architecture does not provide the architecture level + // in the Processor field, so we instead check the "CPU architecture" + // field. + if (!my_strcmp(field, "CPU architecture")) { + uintptr_t arch_level = 0; + const char* value = reader->GetValue(); + const char* p = value; + p = my_read_decimal_ptr(&arch_level, value); + if (p == value) + continue; + sys_info->processor_level = static_cast(arch_level); + } +#endif + // Rebuild the ELF hwcaps from the 'Features' field. + if (!my_strcmp(field, "Features")) { + size_t value_len; + const char* value = reader->GetValueAndLen(&value_len); + + // Parse each space-separated tag. + while (value_len > 0) { + const char* tag = value; + size_t tag_len = value_len; + const char* p = my_strchr(tag, ' '); + if (p != NULL) { + tag_len = static_cast(p - tag); + value += tag_len + 1; + value_len -= tag_len + 1; + } else { + tag_len = strlen(tag); + value_len = 0; + } + for (size_t i = 0; + i < sizeof(cpu_features_entries)/ + sizeof(cpu_features_entries[0]); + ++i) { + const CpuFeaturesEntry* entry = &cpu_features_entries[i]; + if (tag_len == strlen(entry->tag) && + !memcmp(tag, entry->tag, tag_len)) { + sys_info->cpu.arm_cpu_info.elf_hwcaps |= entry->hwcaps; + break; + } + } + } + } + } + sys_close(fd); + } + + return true; + } +#else +# error "Unsupported CPU" +#endif bool WriteFile(MDLocationDescriptor* result, const char* filename) { const int fd = sys_open(filename, O_RDONLY, 0); @@ -1442,23 +1218,6 @@ class MinidumpWriter { space_left -= info_len; } -#ifdef __ANDROID__ - // On Android, try to get the build fingerprint and append it. - // Fail gracefully because there is no guarantee that the system - // property will always be available or accessible. - char fingerprint[PROP_VALUE_MAX]; - int fingerprint_len = __system_property_get("ro.build.fingerprint", - fingerprint); - // System property values shall always be zero-terminated. - // Be paranoid and don't trust the system. - if (fingerprint_len > 0 && fingerprint_len < PROP_VALUE_MAX) { - const char* separator = " "; - if (!first_item) - my_strlcat(buf, separator, sizeof(buf)); - my_strlcat(buf, fingerprint, sizeof(buf)); - } -#endif - MDLocationDescriptor location; if (!minidump_writer_.WriteString(buf, 0, &location)) return false; @@ -1480,7 +1239,9 @@ class MinidumpWriter { const char* path_; // Path to the file where the minidum should be written. const struct ucontext* const ucontext_; // also from the signal handler - const struct _libc_fpstate* const float_state_; // ditto +#if !defined(__ARM_EABI__) && !defined(__mips__) + const google_breakpad::fpstate_t* const float_state_; // ditto +#endif LinuxDumper* dumper_; MinidumpFileWriter minidump_writer_; off_t minidump_size_limit_; diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/minidump_writer.h b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/minidump_writer.h index c9e150ae0c08..d13fb120b52a 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/minidump_writer.h +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/minidump_writer.h @@ -32,6 +32,7 @@ #include #include +#include #include #include @@ -44,13 +45,11 @@ namespace google_breakpad { class ExceptionHandler; -struct MappingEntry { - MappingInfo first; - uint8_t second[sizeof(MDGUID)]; -}; - -// A list of -typedef std::list MappingList; +#if defined(__aarch64__) +typedef struct fpsimd_context fpstate_t; +#elif !defined(__ARM_EABI__) && !defined(__mips__) +typedef struct _libc_fpstate fpstate_t; +#endif // These entries store a list of memory regions that the client wants included // in the minidump. diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/minidump_writer_unittest.cc b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/minidump_writer_unittest.cc index 7d6b86674f6f..e1046e12a0b2 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/minidump_writer_unittest.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/minidump_writer_unittest.cc @@ -84,7 +84,7 @@ TEST(MinidumpWriterTest, SetupWithPath) { AutoTempDir temp_dir; string templ = temp_dir.path() + kMDWriterUnitTestFileName; // Set a non-zero tid to avoid tripping asserts. - context.tid = 1; + context.tid = child; ASSERT_TRUE(WriteMinidump(templ.c_str(), child, &context, sizeof(context))); struct stat st; ASSERT_EQ(0, stat(templ.c_str(), &st)); @@ -114,7 +114,7 @@ TEST(MinidumpWriterTest, SetupWithFD) { string templ = temp_dir.path() + kMDWriterUnitTestFileName; int fd = open(templ.c_str(), O_CREAT | O_WRONLY, S_IRWXU); // Set a non-zero tid to avoid tripping asserts. - context.tid = 1; + context.tid = child; ASSERT_TRUE(WriteMinidump(fd, child, &context, sizeof(context))); struct stat st; ASSERT_EQ(0, stat(templ.c_str(), &st)); @@ -391,7 +391,7 @@ TEST(MinidumpWriterTest, DeletedBinary) { string templ = temp_dir.path() + kMDWriterUnitTestFileName; // Set a non-zero tid to avoid tripping asserts. - context.tid = 1; + context.tid = child_pid; ASSERT_TRUE(WriteMinidump(templ.c_str(), child_pid, &context, sizeof(context))); kill(child_pid, SIGKILL); @@ -525,21 +525,20 @@ TEST(MinidumpWriterTest, InvalidStackPointer) { // Fake the child's stack pointer for its crashing thread. NOTE: This must // be an invalid memory address for the child process (stack or otherwise). -#if defined(__i386) // Try 1MB below the current stack. uintptr_t invalid_stack_pointer = reinterpret_cast(&context) - 1024*1024; +#if defined(__i386) context.context.uc_mcontext.gregs[REG_ESP] = invalid_stack_pointer; #elif defined(__x86_64) - // Try 1MB below the current stack. - uintptr_t invalid_stack_pointer = - reinterpret_cast(&context) - 1024*1024; context.context.uc_mcontext.gregs[REG_RSP] = invalid_stack_pointer; #elif defined(__ARM_EABI__) - // Try 1MB below the current stack. - uintptr_t invalid_stack_pointer = - reinterpret_cast(&context) - 1024*1024; context.context.uc_mcontext.arm_sp = invalid_stack_pointer; +#elif defined(__aarch64__) + context.context.uc_mcontext.sp = invalid_stack_pointer; +#elif defined(__mips__) + context.context.uc_mcontext.gregs[MD_CONTEXT_MIPS_REG_SP] = + invalid_stack_pointer; #else # error "This code has not been ported to your platform yet." #endif @@ -623,7 +622,7 @@ TEST(MinidumpWriterTest, MinidumpSizeLimit) { ASSERT_EQ(1, r); ASSERT_TRUE(pfd.revents & POLLIN); uint8_t junk; - ASSERT_EQ(read(fds[0], &junk, sizeof(junk)), + ASSERT_EQ(read(fds[0], &junk, sizeof(junk)), static_cast(sizeof(junk))); } close(fds[0]); diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/moz.build b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/moz.build deleted file mode 100644 index 9b3a60133699..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/moz.build +++ /dev/null @@ -1,27 +0,0 @@ -# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*- -# vim: set filetype=python: -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -UNIFIED_SOURCES += [ - 'linux_dumper.cc', - 'linux_ptrace_dumper.cc', - 'minidump_writer.cc', -] - -FINAL_LIBRARY = 'xul' - -if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk': - DEFINES['ELFSIZE'] = 32 - -LOCAL_INCLUDES += [ - '/toolkit/crashreporter/google-breakpad/src', -] - -if CONFIG['OS_TARGET'] == 'Android': - LOCAL_INCLUDES += [ - '/toolkit/crashreporter/google-breakpad/src/common/android/include', - ] - -include('/toolkit/crashreporter/crashreporter.mozbuild') diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/proc_cpuinfo_reader.h b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/proc_cpuinfo_reader.h new file mode 100644 index 000000000000..d9461bf30101 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/proc_cpuinfo_reader.h @@ -0,0 +1,130 @@ +// Copyright (c) 2013, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifndef CLIENT_LINUX_MINIDUMP_WRITER_PROC_CPUINFO_READER_H_ +#define CLIENT_LINUX_MINIDUMP_WRITER_PROC_CPUINFO_READER_H_ + +#include +#include +#include + +#include "client/linux/minidump_writer/line_reader.h" +#include "common/linux/linux_libc_support.h" +#include "third_party/lss/linux_syscall_support.h" + +namespace google_breakpad { + +// A class for reading /proc/cpuinfo without using fopen/fgets or other +// functions which may allocate memory. +class ProcCpuInfoReader { +public: + ProcCpuInfoReader(int fd) + : line_reader_(fd), pop_count_(-1) { + } + + // Return the next field name, or NULL in case of EOF. + // field: (output) Pointer to zero-terminated field name. + // Returns true on success, or false on EOF or error (line too long). + bool GetNextField(const char** field) { + for (;;) { + const char* line; + unsigned line_len; + + // Try to read next line. + if (pop_count_ >= 0) { + line_reader_.PopLine(pop_count_); + pop_count_ = -1; + } + + if (!line_reader_.GetNextLine(&line, &line_len)) + return false; + + pop_count_ = static_cast(line_len); + + const char* line_end = line + line_len; + + // Expected format: + ':' + // Note that: + // - empty lines happen. + // - can contain spaces. + // - some fields have an empty + char* sep = static_cast(my_memchr(line, ':', line_len)); + if (sep == NULL) + continue; + + // Record the value. Skip leading space after the column to get + // its start. + const char* val = sep+1; + while (val < line_end && my_isspace(*val)) + val++; + + value_ = val; + value_len_ = static_cast(line_end - val); + + // Remove trailing spaces before the column to properly 0-terminate + // the field name. + while (sep > line && my_isspace(sep[-1])) + sep--; + + if (sep == line) + continue; + + // zero-terminate field name. + *sep = '\0'; + + *field = line; + return true; + } + } + + // Return the field value. This must be called after a succesful + // call to GetNextField(). + const char* GetValue() { + assert(value_); + return value_; + } + + // Same as GetValue(), but also returns the length in characters of + // the value. + const char* GetValueAndLen(size_t* length) { + assert(value_); + *length = value_len_; + return value_; + } + +private: + LineReader line_reader_; + int pop_count_; + const char* value_; + size_t value_len_; +}; + +} // namespace google_breakpad + +#endif // CLIENT_LINUX_MINIDUMP_WRITER_PROC_CPUINFO_READER_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/proc_cpuinfo_reader_unittest.cc b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/proc_cpuinfo_reader_unittest.cc new file mode 100644 index 000000000000..6037c7e66547 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/proc_cpuinfo_reader_unittest.cc @@ -0,0 +1,199 @@ +// Copyright (c) 2013, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include +#include +#include +#include +#include +#include + +#include "client/linux/minidump_writer/proc_cpuinfo_reader.h" +#include "breakpad_googletest_includes.h" +#include "common/linux/tests/auto_testfile.h" + +using namespace google_breakpad; + +#if !defined(__ANDROID__) +#define TEMPDIR "/tmp" +#else +#define TEMPDIR "/data/local/tmp" +#endif + + +namespace { + +typedef testing::Test ProcCpuInfoReaderTest; + +class ScopedTestFile : public AutoTestFile { +public: + explicit ScopedTestFile(const char* text) + : AutoTestFile("proc_cpuinfo_reader", text) { + } +}; + +} + +TEST(ProcCpuInfoReaderTest, EmptyFile) { + ScopedTestFile file(""); + ASSERT_TRUE(file.IsOk()); + ProcCpuInfoReader reader(file.GetFd()); + + const char *field; + ASSERT_FALSE(reader.GetNextField(&field)); +} + +TEST(ProcCpuInfoReaderTest, OneLineTerminated) { + ScopedTestFile file("foo : bar\n"); + ASSERT_TRUE(file.IsOk()); + ProcCpuInfoReader reader(file.GetFd()); + + const char *field; + ASSERT_TRUE(reader.GetNextField(&field)); + ASSERT_STREQ("foo", field); + ASSERT_STREQ("bar", reader.GetValue()); + + ASSERT_FALSE(reader.GetNextField(&field)); +} + +TEST(ProcCpuInfoReaderTest, OneLine) { + ScopedTestFile file("foo : bar"); + ASSERT_TRUE(file.IsOk()); + ProcCpuInfoReader reader(file.GetFd()); + + const char *field; + size_t value_len; + ASSERT_TRUE(reader.GetNextField(&field)); + ASSERT_STREQ("foo", field); + ASSERT_STREQ("bar", reader.GetValueAndLen(&value_len)); + ASSERT_EQ(3U, value_len); + + ASSERT_FALSE(reader.GetNextField(&field)); +} + +TEST(ProcCpuInfoReaderTest, TwoLinesTerminated) { + ScopedTestFile file("foo : bar\nzoo : tut\n"); + ASSERT_TRUE(file.IsOk()); + ProcCpuInfoReader reader(file.GetFd()); + + const char* field; + ASSERT_TRUE(reader.GetNextField(&field)); + ASSERT_STREQ("foo", field); + ASSERT_STREQ("bar", reader.GetValue()); + + ASSERT_TRUE(reader.GetNextField(&field)); + ASSERT_STREQ("zoo", field); + ASSERT_STREQ("tut", reader.GetValue()); + + ASSERT_FALSE(reader.GetNextField(&field)); +} + +TEST(ProcCpuInfoReaderTest, SkipMalformedLine) { + ScopedTestFile file("this line should have a column\nfoo : bar\n"); + ASSERT_TRUE(file.IsOk()); + ProcCpuInfoReader reader(file.GetFd()); + + const char* field; + ASSERT_TRUE(reader.GetNextField(&field)); + ASSERT_STREQ("foo", field); + ASSERT_STREQ("bar", reader.GetValue()); + + ASSERT_FALSE(reader.GetNextField(&field)); +} + +TEST(ProcCpuInfoReaderTest, SkipOneEmptyLine) { + ScopedTestFile file("\n\nfoo : bar\n"); + ASSERT_TRUE(file.IsOk()); + ProcCpuInfoReader reader(file.GetFd()); + + const char* field; + ASSERT_TRUE(reader.GetNextField(&field)); + ASSERT_STREQ("foo", field); + ASSERT_STREQ("bar", reader.GetValue()); + + ASSERT_FALSE(reader.GetNextField(&field)); +} + +TEST(ProcCpuInfoReaderTest, SkipEmptyField) { + ScopedTestFile file(" : bar\nzoo : tut\n"); + ASSERT_TRUE(file.IsOk()); + ProcCpuInfoReader reader(file.GetFd()); + + const char* field; + ASSERT_TRUE(reader.GetNextField(&field)); + ASSERT_STREQ("zoo", field); + ASSERT_STREQ("tut", reader.GetValue()); + + ASSERT_FALSE(reader.GetNextField(&field)); +} + +TEST(ProcCpuInfoReaderTest, SkipTwoEmptyLines) { + ScopedTestFile file("foo : bar\n\n\nfoo : bar\n"); + ASSERT_TRUE(file.IsOk()); + ProcCpuInfoReader reader(file.GetFd()); + + const char* field; + ASSERT_TRUE(reader.GetNextField(&field)); + ASSERT_STREQ("foo", field); + ASSERT_STREQ("bar", reader.GetValue()); + + ASSERT_TRUE(reader.GetNextField(&field)); + ASSERT_STREQ("foo", field); + ASSERT_STREQ("bar", reader.GetValue()); + + ASSERT_FALSE(reader.GetNextField(&field)); +} + +TEST(ProcCpuInfoReaderTest, FieldWithSpaces) { + ScopedTestFile file("foo bar : zoo\n"); + ASSERT_TRUE(file.IsOk()); + ProcCpuInfoReader reader(file.GetFd()); + + const char* field; + ASSERT_TRUE(reader.GetNextField(&field)); + ASSERT_STREQ("foo bar", field); + ASSERT_STREQ("zoo", reader.GetValue()); + + ASSERT_FALSE(reader.GetNextField(&field)); +} + +TEST(ProcCpuInfoReaderTest, EmptyValue) { + ScopedTestFile file("foo :\n"); + ASSERT_TRUE(file.IsOk()); + ProcCpuInfoReader reader(file.GetFd()); + + const char* field; + ASSERT_TRUE(reader.GetNextField(&field)); + ASSERT_STREQ("foo", field); + size_t value_len; + ASSERT_STREQ("", reader.GetValueAndLen(&value_len)); + ASSERT_EQ(0U, value_len); + + ASSERT_FALSE(reader.GetNextField(&field)); +} diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/moz.build b/toolkit/crashreporter/google-breakpad/src/client/linux/moz.build new file mode 100644 index 000000000000..6324a0887bee --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/moz.build @@ -0,0 +1,33 @@ +# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*- +# vim: set filetype=python: +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +UNIFIED_SOURCES += [ + 'crash_generation/crash_generation_client.cc', + 'crash_generation/crash_generation_server.cc', + 'dump_writer_common/thread_info.cc', + 'dump_writer_common/ucontext_reader.cc', + 'handler/exception_handler.cc', + 'handler/minidump_descriptor.cc', + 'log/log.cc', + 'microdump_writer/microdump_writer.cc', + 'minidump_writer/linux_dumper.cc', + 'minidump_writer/linux_ptrace_dumper.cc', + 'minidump_writer/minidump_writer.cc', +] + +# We allow warnings for third-party code that can be updated from upstream. +ALLOW_COMPILER_WARNINGS = True + +FINAL_LIBRARY = 'xul' + +if CONFIG['OS_TARGET'] == 'Android' and CONFIG['CPU_ARCH'] == 'x86': + # The NDK's user.h defines this struct with a different name. + DEFINES['user_fpxregs_struct'] = 'user_fxsr_struct' + +if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk': + DEFINES['getcontext'] = 'breakpad_getcontext' + +include('/toolkit/crashreporter/crashreporter.mozbuild') diff --git a/toolkit/crashreporter/google-breakpad/src/client/linux/sender/google_crash_report_sender.cc b/toolkit/crashreporter/google-breakpad/src/client/linux/sender/google_crash_report_sender.cc index 0d48cbe61a1e..ec6c06e87d32 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/linux/sender/google_crash_report_sender.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/linux/sender/google_crash_report_sender.cc @@ -100,5 +100,5 @@ int main(int argc, char *argv[]) { FLAGS_crash_server, FLAGS_proxy_host, FLAGS_proxy_userpasswd); - g.Upload(); + g.Upload(NULL, NULL, NULL); } diff --git a/toolkit/crashreporter/google-breakpad/src/client/mac/Breakpad.xcodeproj/project.pbxproj b/toolkit/crashreporter/google-breakpad/src/client/mac/Breakpad.xcodeproj/project.pbxproj index 9864ed4a8e88..584ec5d229e2 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/mac/Breakpad.xcodeproj/project.pbxproj +++ b/toolkit/crashreporter/google-breakpad/src/client/mac/Breakpad.xcodeproj/project.pbxproj @@ -44,6 +44,11 @@ 163201E31443029300C4DBF5 /* ConfigFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 163201D51443019E00C4DBF5 /* ConfigFile.mm */; }; 16C7C918147D45AE00776EAD /* BreakpadDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 16C7C917147D45AE00776EAD /* BreakpadDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; 16E02DB8147410F0008C604D /* uploader.mm in Sources */ = {isa = PBXBuildFile; fileRef = 16E02DB4147410D4008C604D /* uploader.mm */; }; + 1EEEB6231720829E00F7E689 /* simple_string_dictionary.cc in Sources */ = {isa = PBXBuildFile; fileRef = 1EEEB6211720829E00F7E689 /* simple_string_dictionary.cc */; }; + 1EEEB6241720829E00F7E689 /* simple_string_dictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EEEB6221720829E00F7E689 /* simple_string_dictionary.h */; }; + 1EEEB6271720831E00F7E689 /* BreakpadFramework_Test.mm in Sources */ = {isa = PBXBuildFile; fileRef = F91AF5CF0FD60393009D8BE2 /* BreakpadFramework_Test.mm */; }; + 1EEEB62A1720859200F7E689 /* simple_string_dictionary_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = 1EEEB6251720830600F7E689 /* simple_string_dictionary_unittest.cc */; }; + 1EEEB62B1720868C00F7E689 /* simple_string_dictionary.cc in Sources */ = {isa = PBXBuildFile; fileRef = 1EEEB6211720829E00F7E689 /* simple_string_dictionary.cc */; }; 3329D4ED0FA16D820007BBC5 /* Breakpad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3329D4EC0FA16D820007BBC5 /* Breakpad.xib */; }; 33880C800F9E097100817F82 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 33880C7E0F9E097100817F82 /* InfoPlist.strings */; }; 4084699D0F5D9CF900FDCA37 /* crash_report_sender.icns in Resources */ = {isa = PBXBuildFile; fileRef = 4084699C0F5D9CF900FDCA37 /* crash_report_sender.icns */; }; @@ -141,7 +146,9 @@ D2F9A53F121383A1002747C1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D69BFE84028FC02AAC07 /* Foundation.framework */; }; D2F9A541121383A1002747C1 /* libgtest.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D2F9A41512131EF0002747C1 /* libgtest.a */; }; D2F9A553121383DC002747C1 /* crash_generation_server_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = D2F9A4CE121336F7002747C1 /* crash_generation_server_test.cc */; }; - F91AF5D00FD60393009D8BE2 /* BreakpadFramework_Test.mm in Sources */ = {isa = PBXBuildFile; fileRef = F91AF5CF0FD60393009D8BE2 /* BreakpadFramework_Test.mm */; }; + F4DAB1DD19F1027100A5A838 /* launch_reporter.cc in Sources */ = {isa = PBXBuildFile; fileRef = F4DAB1DB19F1027100A5A838 /* launch_reporter.cc */; }; + F4DAB1DE19F1027100A5A838 /* launch_reporter.h in Headers */ = {isa = PBXBuildFile; fileRef = F4DAB1DC19F1027100A5A838 /* launch_reporter.h */; }; + F4F916B619F10FFC00B83BE4 /* launch_reporter.cc in Sources */ = {isa = PBXBuildFile; fileRef = F4DAB1DB19F1027100A5A838 /* launch_reporter.cc */; }; F91AF6210FD60784009D8BE2 /* Breakpad.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DC2EF5B0486A6940098B216 /* Breakpad.framework */; }; F9286B3A0F7EB25800A4DCC8 /* InspectorMain.mm in Sources */ = {isa = PBXBuildFile; fileRef = F9286B390F7EB25800A4DCC8 /* InspectorMain.mm */; }; F92C53B80ECCE7B3009BE4BA /* Inspector.mm in Sources */ = {isa = PBXBuildFile; fileRef = F92C53B70ECCE7B3009BE4BA /* Inspector.mm */; }; @@ -159,7 +166,6 @@ F92C56450ECD10CA009BE4BA /* MachIPC.mm in Sources */ = {isa = PBXBuildFile; fileRef = F92C53790ECCE635009BE4BA /* MachIPC.mm */; }; F92C56460ECD10CA009BE4BA /* minidump_file_writer.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C538F0ECCE70A009BE4BA /* minidump_file_writer.cc */; }; F92C56470ECD10CA009BE4BA /* minidump_generator.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C536F0ECCE3FD009BE4BA /* minidump_generator.cc */; }; - F92C56480ECD10CA009BE4BA /* SimpleStringDictionary.mm in Sources */ = {isa = PBXBuildFile; fileRef = F92C53810ECCE635009BE4BA /* SimpleStringDictionary.mm */; }; F92C56490ECD10CA009BE4BA /* string_utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C53820ECCE635009BE4BA /* string_utilities.cc */; }; F92C564A0ECD10CA009BE4BA /* string_conversion.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C53850ECCE6AD009BE4BA /* string_conversion.cc */; }; F92C564C0ECD10DD009BE4BA /* breakpadUtilities.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F92C563C0ECD10B3009BE4BA /* breakpadUtilities.dylib */; }; @@ -211,8 +217,6 @@ F9C44EA20EF09F93003AEBAA /* HTTPMultipartUpload.m in Sources */ = {isa = PBXBuildFile; fileRef = F92C53770ECCE635009BE4BA /* HTTPMultipartUpload.m */; }; F9C44EE50EF0A006003AEBAA /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9C44EE40EF0A006003AEBAA /* SystemConfiguration.framework */; }; F9C44EE90EF0A3C1003AEBAA /* GTMLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = F9C44EE80EF0A3C1003AEBAA /* GTMLogger.m */; }; - F9C77DE20F7DD7E30045F7DB /* SimpleStringDictionaryTest.mm in Sources */ = {isa = PBXBuildFile; fileRef = F9C77DE10F7DD7E30045F7DB /* SimpleStringDictionaryTest.mm */; }; - F9C77DE40F7DD82F0045F7DB /* SimpleStringDictionary.mm in Sources */ = {isa = PBXBuildFile; fileRef = F92C53810ECCE635009BE4BA /* SimpleStringDictionary.mm */; }; F9C77E130F7DDF810045F7DB /* GTMSenTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = F9C77E120F7DDF810045F7DB /* GTMSenTestCase.m */; }; /* End PBXBuildFile section */ @@ -566,6 +570,9 @@ 163202431443201300C4DBF5 /* uploader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = uploader.h; path = sender/uploader.h; sourceTree = ""; }; 16C7C917147D45AE00776EAD /* BreakpadDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BreakpadDefines.h; sourceTree = ""; }; 16E02DB4147410D4008C604D /* uploader.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = uploader.mm; path = sender/uploader.mm; sourceTree = ""; }; + 1EEEB6211720829E00F7E689 /* simple_string_dictionary.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = simple_string_dictionary.cc; path = ../../common/simple_string_dictionary.cc; sourceTree = ""; }; + 1EEEB6221720829E00F7E689 /* simple_string_dictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = simple_string_dictionary.h; path = ../../common/simple_string_dictionary.h; sourceTree = ""; }; + 1EEEB6251720830600F7E689 /* simple_string_dictionary_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = simple_string_dictionary_unittest.cc; path = ../../common/simple_string_dictionary_unittest.cc; sourceTree = ""; }; 32DBCF5E0370ADEE00C91783 /* Breakpad_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Breakpad_Prefix.pch; path = Framework/Breakpad_Prefix.pch; sourceTree = ""; }; 3329D4EC0FA16D820007BBC5 /* Breakpad.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Breakpad.xib; path = sender/Breakpad.xib; sourceTree = ""; }; 33880C7F0F9E097100817F82 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = sender/English.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -623,6 +630,8 @@ DE43468E11C72971004F095F /* sl */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = sl; path = sender/sl.lproj/InfoPlist.strings; sourceTree = ""; }; DE43468F11C72973004F095F /* sv */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = sv; path = sender/sv.lproj/InfoPlist.strings; sourceTree = ""; }; DE43469011C72976004F095F /* tr */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = tr; path = sender/tr.lproj/InfoPlist.strings; sourceTree = ""; }; + F4DAB1DB19F1027100A5A838 /* launch_reporter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = launch_reporter.cc; path = ../../common/mac/launch_reporter.cc; sourceTree = SOURCE_ROOT; }; + F4DAB1DC19F1027100A5A838 /* launch_reporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = launch_reporter.h; path = ../../common/mac/launch_reporter.h; sourceTree = SOURCE_ROOT; }; F91AF5CF0FD60393009D8BE2 /* BreakpadFramework_Test.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = BreakpadFramework_Test.mm; path = tests/BreakpadFramework_Test.mm; sourceTree = ""; }; F9286B380F7EB25800A4DCC8 /* Inspector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Inspector.h; path = crash_generation/Inspector.h; sourceTree = ""; }; F9286B390F7EB25800A4DCC8 /* InspectorMain.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = InspectorMain.mm; path = crash_generation/InspectorMain.mm; sourceTree = ""; }; @@ -651,8 +660,6 @@ F92C537D0ECCE635009BE4BA /* macho_utilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = macho_utilities.h; path = ../../common/mac/macho_utilities.h; sourceTree = SOURCE_ROOT; }; F92C537E0ECCE635009BE4BA /* macho_walker.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = macho_walker.cc; path = ../../common/mac/macho_walker.cc; sourceTree = SOURCE_ROOT; }; F92C537F0ECCE635009BE4BA /* macho_walker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = macho_walker.h; path = ../../common/mac/macho_walker.h; sourceTree = SOURCE_ROOT; }; - F92C53800ECCE635009BE4BA /* SimpleStringDictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SimpleStringDictionary.h; path = ../../common/mac/SimpleStringDictionary.h; sourceTree = SOURCE_ROOT; }; - F92C53810ECCE635009BE4BA /* SimpleStringDictionary.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = SimpleStringDictionary.mm; path = ../../common/mac/SimpleStringDictionary.mm; sourceTree = SOURCE_ROOT; }; F92C53820ECCE635009BE4BA /* string_utilities.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = string_utilities.cc; path = ../../common/mac/string_utilities.cc; sourceTree = SOURCE_ROOT; }; F92C53830ECCE635009BE4BA /* string_utilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = string_utilities.h; path = ../../common/mac/string_utilities.h; sourceTree = SOURCE_ROOT; }; F92C53850ECCE6AD009BE4BA /* string_conversion.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = string_conversion.cc; path = ../../common/string_conversion.cc; sourceTree = SOURCE_ROOT; }; @@ -699,8 +706,6 @@ F9C44EE80EF0A3C1003AEBAA /* GTMLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GTMLogger.m; path = ../../common/mac/GTMLogger.m; sourceTree = SOURCE_ROOT; }; F9C77DDA0F7DD5CF0045F7DB /* UnitTests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = UnitTests.octest; sourceTree = BUILT_PRODUCTS_DIR; }; F9C77DDB0F7DD5CF0045F7DB /* UnitTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "UnitTests-Info.plist"; sourceTree = ""; }; - F9C77DE00F7DD7E30045F7DB /* SimpleStringDictionaryTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SimpleStringDictionaryTest.h; path = tests/SimpleStringDictionaryTest.h; sourceTree = ""; }; - F9C77DE10F7DD7E30045F7DB /* SimpleStringDictionaryTest.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = SimpleStringDictionaryTest.mm; path = tests/SimpleStringDictionaryTest.mm; sourceTree = ""; }; F9C77E110F7DDF810045F7DB /* GTMSenTestCase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GTMSenTestCase.h; path = ../../common/mac/testing/GTMSenTestCase.h; sourceTree = SOURCE_ROOT; }; F9C77E120F7DDF810045F7DB /* GTMSenTestCase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GTMSenTestCase.m; path = ../../common/mac/testing/GTMSenTestCase.m; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ @@ -936,6 +941,8 @@ F92C53870ECCE6C0009BE4BA /* convert_UTF.c */, F92C53880ECCE6C0009BE4BA /* convert_UTF.h */, 4D72CA0D13DFAD5C006CABE3 /* md5.cc */, + 1EEEB6211720829E00F7E689 /* simple_string_dictionary.cc */, + 1EEEB6221720829E00F7E689 /* simple_string_dictionary.h */, F92C53850ECCE6AD009BE4BA /* string_conversion.cc */, F92C53860ECCE6AD009BE4BA /* string_conversion.h */, F92C53840ECCE68D009BE4BA /* mac */, @@ -957,6 +964,8 @@ F92C53750ECCE635009BE4BA /* file_id.h */, F92C53760ECCE635009BE4BA /* HTTPMultipartUpload.h */, F92C53770ECCE635009BE4BA /* HTTPMultipartUpload.m */, + F4DAB1DB19F1027100A5A838 /* launch_reporter.cc */, + F4DAB1DC19F1027100A5A838 /* launch_reporter.h */, F92C53780ECCE635009BE4BA /* MachIPC.h */, F92C53790ECCE635009BE4BA /* MachIPC.mm */, 4D61A25D14F43CFC002D5862 /* bootstrap_compat.cc */, @@ -967,8 +976,6 @@ F92C537D0ECCE635009BE4BA /* macho_utilities.h */, F92C537E0ECCE635009BE4BA /* macho_walker.cc */, F92C537F0ECCE635009BE4BA /* macho_walker.h */, - F92C53800ECCE635009BE4BA /* SimpleStringDictionary.h */, - F92C53810ECCE635009BE4BA /* SimpleStringDictionary.mm */, F92C53820ECCE635009BE4BA /* string_utilities.cc */, F92C53830ECCE635009BE4BA /* string_utilities.h */, ); @@ -1116,12 +1123,11 @@ F9C77DDF0F7DD7CF0045F7DB /* tests */ = { isa = PBXGroup; children = ( + 1EEEB6251720830600F7E689 /* simple_string_dictionary_unittest.cc */, D23F4B9A12A8688800686C8D /* minidump_generator_test_helper.cc */, D23F4B2C12A7E13200686C8D /* minidump_generator_test.cc */, D2F9A4CE121336F7002747C1 /* crash_generation_server_test.cc */, D2F9A3D41212F87C002747C1 /* exception_handler_test.cc */, - F9C77DE00F7DD7E30045F7DB /* SimpleStringDictionaryTest.h */, - F9C77DE10F7DD7E30045F7DB /* SimpleStringDictionaryTest.mm */, F91AF5CF0FD60393009D8BE2 /* BreakpadFramework_Test.mm */, ); name = tests; @@ -1151,6 +1157,8 @@ 163201D61443019E00C4DBF5 /* ConfigFile.h in Headers */, 16C7C918147D45AE00776EAD /* BreakpadDefines.h in Headers */, 162F64F3161C577500CD68D5 /* arch_utilities.h in Headers */, + F4DAB1DE19F1027100A5A838 /* launch_reporter.h in Headers */, + 1EEEB6241720829E00F7E689 /* simple_string_dictionary.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1671,11 +1679,13 @@ F92C565F0ECD116B009BE4BA /* protected_memory_allocator.cc in Sources */, F92C56630ECD1179009BE4BA /* exception_handler.cc in Sources */, F92C55D10ECD0064009BE4BA /* Breakpad.mm in Sources */, + F4DAB1DD19F1027100A5A838 /* launch_reporter.cc in Sources */, F92C56340ECD0DF1009BE4BA /* OnDemandServer.mm in Sources */, D2F9A4CB121336C7002747C1 /* crash_generation_client.cc in Sources */, D2F9A4CD121336C7002747C1 /* crash_generation_server.cc in Sources */, 163201D71443019E00C4DBF5 /* ConfigFile.mm in Sources */, 162F64F2161C577500CD68D5 /* arch_utilities.cc in Sources */, + 1EEEB6231720829E00F7E689 /* simple_string_dictionary.cc in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1757,6 +1767,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + F4F916B619F10FFC00B83BE4 /* launch_reporter.cc in Sources */, 162F64F4161C579B00CD68D5 /* arch_utilities.cc in Sources */, 162F64F5161C579B00CD68D5 /* arch_utilities.h in Sources */, D2A5DD301188633800081F03 /* breakpad_nlist_64.cc in Sources */, @@ -1770,7 +1781,6 @@ 4D72CA0E13DFAD5C006CABE3 /* md5.cc in Sources */, F92C56460ECD10CA009BE4BA /* minidump_file_writer.cc in Sources */, F92C56470ECD10CA009BE4BA /* minidump_generator.cc in Sources */, - F92C56480ECD10CA009BE4BA /* SimpleStringDictionary.mm in Sources */, F92C56490ECD10CA009BE4BA /* string_utilities.cc in Sources */, F92C564A0ECD10CA009BE4BA /* string_conversion.cc in Sources */, 4D61A25F14F43CFC002D5862 /* bootstrap_compat.cc in Sources */, @@ -1814,6 +1824,8 @@ D23F4B2E12A7E13200686C8D /* minidump_generator_test.cc in Sources */, 4D72CA2F13DFAE65006CABE3 /* md5.cc in Sources */, 4D61A26D14F43D43002D5862 /* bootstrap_compat.cc in Sources */, + 1EEEB62B1720868C00F7E689 /* simple_string_dictionary.cc in Sources */, + 1EEEB62A1720859200F7E689 /* simple_string_dictionary_unittest.cc in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1855,6 +1867,7 @@ D244540B12439BA0009BBCE0 /* memory_unittest.cc in Sources */, 4D72CA3813DFAE91006CABE3 /* md5.cc in Sources */, 4D61A26E14F43D45002D5862 /* bootstrap_compat.cc in Sources */, + 1EEEB6271720831E00F7E689 /* BreakpadFramework_Test.mm in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1872,10 +1885,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - F9C77DE40F7DD82F0045F7DB /* SimpleStringDictionary.mm in Sources */, - F9C77DE20F7DD7E30045F7DB /* SimpleStringDictionaryTest.mm in Sources */, F9C77E130F7DDF810045F7DB /* GTMSenTestCase.m in Sources */, - F91AF5D00FD60393009D8BE2 /* BreakpadFramework_Test.mm in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/toolkit/crashreporter/google-breakpad/src/client/mac/Framework/Breakpad.h b/toolkit/crashreporter/google-breakpad/src/client/mac/Framework/Breakpad.h index dbc620ebf92c..dc7e45d1c8a6 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/mac/Framework/Breakpad.h +++ b/toolkit/crashreporter/google-breakpad/src/client/mac/Framework/Breakpad.h @@ -158,6 +158,11 @@ typedef bool (*BreakpadFilterCallback)(int exception_type, // but pass as URL parameters when // uploading theminidump to the crash // server. +// +// BREAKPAD_IN_PROCESS A boolean NSNumber value. If YES, Breakpad +// will write the dump file in-process and then +// launch the reporter executable as a child +// process. //============================================================================= // The BREAKPAD_PRODUCT, BREAKPAD_VERSION and BREAKPAD_URL are // required to have non-NULL values. By default, the BREAKPAD_PRODUCT diff --git a/toolkit/crashreporter/google-breakpad/src/client/mac/Framework/Breakpad.mm b/toolkit/crashreporter/google-breakpad/src/client/mac/Framework/Breakpad.mm index 4762516e915b..1d2e519bbdd6 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/mac/Framework/Breakpad.mm +++ b/toolkit/crashreporter/google-breakpad/src/client/mac/Framework/Breakpad.mm @@ -28,19 +28,12 @@ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -#define VERBOSE 0 -#if VERBOSE - static bool gDebugLog = true; -#else - static bool gDebugLog = false; -#endif - -#define DEBUGLOG if (gDebugLog) fprintf #define IGNORE_DEBUGGER "BREAKPAD_IGNORE_DEBUGGER" #import "client/mac/Framework/Breakpad.h" +#include #import #include #include @@ -51,10 +44,11 @@ #import "client/mac/Framework/Breakpad.h" #import "client/mac/Framework/OnDemandServer.h" #import "client/mac/handler/protected_memory_allocator.h" +#include "common/mac/launch_reporter.h" #import "common/mac/MachIPC.h" -#import "common/mac/SimpleStringDictionary.h" +#import "common/simple_string_dictionary.h" -#ifndef __EXCEPTIONS +#if !defined(__EXCEPTIONS) || (__clang__ && !__has_feature(cxx_exceptions)) // This file uses C++ try/catch (but shouldn't). Duplicate the macros from // allowing this file to work properly with // exceptions disabled even when other C++ libraries are used. #undef the try @@ -66,13 +60,11 @@ #define catch(X) if (false) #endif // __EXCEPTIONS -using google_breakpad::KeyValueEntry; using google_breakpad::MachPortSender; using google_breakpad::MachReceiveMessage; using google_breakpad::MachSendMessage; using google_breakpad::ReceivePort; using google_breakpad::SimpleStringDictionary; -using google_breakpad::SimpleStringDictionaryIterator; //============================================================================= // We want any memory allocations which are used by breakpad during the @@ -105,36 +97,32 @@ pthread_mutex_t gDictionaryMutex; // ProtectedMemoryLocker will unprotect this block after taking the lock. // Its destructor will first re-protect the memory then release the lock. class ProtectedMemoryLocker { -public: - // allocator may be NULL, in which case no Protect() or Unprotect() calls - // will be made, but a lock will still be taken + public: ProtectedMemoryLocker(pthread_mutex_t *mutex, ProtectedMemoryAllocator *allocator) - : mutex_(mutex), allocator_(allocator) { + : mutex_(mutex), + allocator_(allocator) { // Lock the mutex - assert(pthread_mutex_lock(mutex_) == 0); + __attribute__((unused)) int rv = pthread_mutex_lock(mutex_); + assert(rv == 0); // Unprotect the memory - if (allocator_ ) { - allocator_->Unprotect(); - } + allocator_->Unprotect(); } ~ProtectedMemoryLocker() { // First protect the memory - if (allocator_) { - allocator_->Protect(); - } + allocator_->Protect(); // Then unlock the mutex - assert(pthread_mutex_unlock(mutex_) == 0); + __attribute__((unused)) int rv = pthread_mutex_unlock(mutex_); + assert(rv == 0); }; -private: - // Keep anybody from ever creating one of these things not on the stack. - ProtectedMemoryLocker() { } + private: + ProtectedMemoryLocker(); ProtectedMemoryLocker(const ProtectedMemoryLocker&); - ProtectedMemoryLocker & operator=(ProtectedMemoryLocker&); + ProtectedMemoryLocker& operator=(const ProtectedMemoryLocker&); pthread_mutex_t *mutex_; ProtectedMemoryAllocator *allocator_; @@ -186,6 +174,8 @@ class Breakpad { } bool Initialize(NSDictionary *parameters); + bool InitializeInProcess(NSDictionary *parameters); + bool InitializeOutOfProcess(NSDictionary *parameters); bool ExtractParameters(NSDictionary *parameters); @@ -201,6 +191,17 @@ class Breakpad { int exception_subcode, mach_port_t crashing_thread); + // Dispatches to HandleMinidump(). + // This gets called instead of ExceptionHandlerDirectCallback when running + // with the BREAKPAD_IN_PROCESS option. + static bool HandleMinidumpCallback(const char *dump_dir, + const char *minidump_id, + void *context, + bool succeeded); + + // This is only used when BREAKPAD_IN_PROCESS is YES. + bool HandleMinidump(const char *dump_dir, const char *minidump_id); + // Since ExceptionHandler (w/o namespace) is defined as typedef in OSX's // MachineExceptions.h, we have to explicitly name the handler. google_breakpad::ExceptionHandler *handler_; // The actual handler (STRONG) @@ -278,6 +279,21 @@ bool Breakpad::ExceptionHandlerDirectCallback(void *context, crashing_thread); } +//============================================================================= +bool Breakpad::HandleMinidumpCallback(const char *dump_dir, + const char *minidump_id, + void *context, + bool succeeded) { + Breakpad *breakpad = (Breakpad *)context; + + // If our context is damaged or something, just return false to indicate that + // the handler should continue without us. + if (!breakpad || !succeeded) + return false; + + return breakpad->HandleMinidump(dump_dir, minidump_id); +} + //============================================================================= #pragma mark - @@ -313,7 +329,6 @@ NSString * GetResourcePath() { // executable code, since that's how the Breakpad framework is built. resourcePath = [bundlePath stringByAppendingPathComponent:@"Resources/"]; } else { - DEBUGLOG(stderr, "Could not find GetResourcePath\n"); // fallback plan NSBundle *bundle = [NSBundle bundleWithIdentifier:@"com.Google.BreakpadFramework"]; @@ -332,7 +347,6 @@ bool Breakpad::Initialize(NSDictionary *parameters) { // Check for debugger if (IsDebuggerActive()) { - DEBUGLOG(stderr, "Debugger is active: Not installing handler\n"); return true; } @@ -341,6 +355,25 @@ bool Breakpad::Initialize(NSDictionary *parameters) { return false; } + if ([[parameters objectForKey:@BREAKPAD_IN_PROCESS] boolValue]) + return InitializeInProcess(parameters); + else + return InitializeOutOfProcess(parameters); +} + +//============================================================================= +bool Breakpad::InitializeInProcess(NSDictionary* parameters) { + handler_ = + new (gBreakpadAllocator->Allocate( + sizeof(google_breakpad::ExceptionHandler))) + google_breakpad::ExceptionHandler( + config_params_->GetValueForKey(BREAKPAD_DUMP_DIRECTORY), + 0, &HandleMinidumpCallback, this, true, 0); + return true; +} + +//============================================================================= +bool Breakpad::InitializeOutOfProcess(NSDictionary* parameters) { // Get path to Inspector executable. NSString *inspectorPathString = KeyValue(@BREAKPAD_INSPECTOR_LOCATION); @@ -507,7 +540,6 @@ bool Breakpad::ExtractParameters(NSDictionary *parameters) { if (!inspectorPathString || !reporterPathString) { resourcePath = GetResourcePath(); if (!resourcePath) { - DEBUGLOG(stderr, "Could not get resource path\n"); return false; } } @@ -520,7 +552,6 @@ bool Breakpad::ExtractParameters(NSDictionary *parameters) { // Verify that there is an Inspector tool. if (![[NSFileManager defaultManager] fileExistsAtPath:inspectorPathString]) { - DEBUGLOG(stderr, "Cannot find Inspector tool\n"); return false; } @@ -536,7 +567,6 @@ bool Breakpad::ExtractParameters(NSDictionary *parameters) { // Verify that there is a Reporter application. if (![[NSFileManager defaultManager] fileExistsAtPath:reporterPathString]) { - DEBUGLOG(stderr, "Cannot find Reporter tool\n"); return false; } @@ -546,17 +576,14 @@ bool Breakpad::ExtractParameters(NSDictionary *parameters) { // The product, version, and URL are required values. if (![product length]) { - DEBUGLOG(stderr, "Missing required product key.\n"); return false; } if (![version length]) { - DEBUGLOG(stderr, "Missing required version key.\n"); return false; } if (![urlStr length]) { - DEBUGLOG(stderr, "Missing required URL key.\n"); return false; } @@ -653,8 +680,6 @@ bool Breakpad::HandleException(int exception_type, int exception_code, int exception_subcode, mach_port_t crashing_thread) { - DEBUGLOG(stderr, "Breakpad: an exception occurred\n"); - if (filter_callback_) { bool should_handle = filter_callback_(exception_type, exception_code, @@ -697,8 +722,8 @@ bool Breakpad::HandleException(int exception_type, if (result == KERN_SUCCESS) { // Now, send a series of key-value pairs to the Inspector. - const KeyValueEntry *entry = NULL; - SimpleStringDictionaryIterator iter(*config_params_); + const SimpleStringDictionary::Entry *entry = NULL; + SimpleStringDictionary::Iterator iter(*config_params_); while ( (entry = iter.Next()) ) { KeyValueMessageData keyvalue_data(*entry); @@ -733,6 +758,16 @@ bool Breakpad::HandleException(int exception_type, return false; } +//============================================================================= +bool Breakpad::HandleMinidump(const char *dump_dir, const char *minidump_id) { + google_breakpad::ConfigFile config_file; + config_file.WriteFile(dump_dir, config_params_, dump_dir, minidump_id); + google_breakpad::LaunchReporter( + config_params_->GetValueForKey(BREAKPAD_REPORTER_EXE_LOCATION), + config_file.GetFilePath()); + return true; +} + //============================================================================= //============================================================================= diff --git a/toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/ConfigFile.h b/toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/ConfigFile.h index f05753393e34..5662e8b09ce0 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/ConfigFile.h +++ b/toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/ConfigFile.h @@ -31,7 +31,7 @@ #import -#import "common/mac/SimpleStringDictionary.h" +#include "common/simple_string_dictionary.h" namespace google_breakpad { diff --git a/toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/ConfigFile.mm b/toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/ConfigFile.mm index ee2d94484a2c..acab7de84cca 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/ConfigFile.mm +++ b/toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/ConfigFile.mm @@ -36,18 +36,8 @@ #include #import "client/apple/Framework/BreakpadDefines.h" -#import "common/mac/SimpleStringDictionary.h" -#import "GTMDefines.h" +#import "common/mac/GTMDefines.h" -#define VERBOSE 0 - -#if VERBOSE - bool gDebugLog = true; -#else - bool gDebugLog = false; -#endif - -#define DEBUGLOG if (gDebugLog) fprintf namespace google_breakpad { @@ -78,13 +68,10 @@ BOOL ConfigFile::AppendConfigData(const char *key, assert(config_file_ != -1); if (!key) { - DEBUGLOG(stderr, "Breakpad: Missing Key\n"); return NO; } if (!data) { - DEBUGLOG(stderr, "Breakpad: Missing data for key: %s\n", key ? key : - ""); return NO; } @@ -148,14 +135,8 @@ void ConfigFile::WriteFile(const char* directory, config_file_ = mkstemp(config_file_path_); if (config_file_ == -1) { - DEBUGLOG(stderr, - "mkstemp(config_file_path_) == -1 (%s)\n", - strerror(errno)); return; } - else { - DEBUGLOG(stderr, "Writing config file to (%s)\n", config_file_path_); - } has_created_file_ = true; @@ -167,15 +148,11 @@ void ConfigFile::WriteFile(const char* directory, BOOL result = YES; const SimpleStringDictionary &dictionary = *configurationParameters; - const KeyValueEntry *entry = NULL; - SimpleStringDictionaryIterator iter(dictionary); + const SimpleStringDictionary::Entry *entry = NULL; + SimpleStringDictionary::Iterator iter(dictionary); while ((entry = iter.Next())) { - DEBUGLOG(stderr, - "config: (%s) -> (%s)\n", - entry->GetKey(), - entry->GetValue()); - result = AppendConfigString(entry->GetKey(), entry->GetValue()); + result = AppendConfigString(entry->key, entry->value); if (!result) break; diff --git a/toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/Inspector.h b/toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/Inspector.h index 11a0dec6e797..671235513416 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/Inspector.h +++ b/toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/Inspector.h @@ -30,7 +30,7 @@ // Interface file between the Breakpad.framework and // the Inspector process. -#import "common/mac/SimpleStringDictionary.h" +#include "common/simple_string_dictionary.h" #import #include @@ -38,9 +38,6 @@ #import "client/mac/crash_generation/ConfigFile.h" #import "client/mac/handler/minidump_generator.h" -extern bool gDebugLog; - -#define DEBUGLOG if (gDebugLog) fprintf // Types of mach messsages (message IDs) enum { @@ -65,13 +62,14 @@ struct InspectorInfo { struct KeyValueMessageData { public: KeyValueMessageData() {} - KeyValueMessageData(const google_breakpad::KeyValueEntry &inEntry) { - strlcpy(key, inEntry.GetKey(), sizeof(key) ); - strlcpy(value, inEntry.GetValue(), sizeof(value) ); + explicit KeyValueMessageData( + const google_breakpad::SimpleStringDictionary::Entry &inEntry) { + strlcpy(key, inEntry.key, sizeof(key) ); + strlcpy(value, inEntry.value, sizeof(value) ); } - char key[google_breakpad::KeyValueEntry::MAX_STRING_STORAGE_SIZE]; - char value[google_breakpad::KeyValueEntry::MAX_STRING_STORAGE_SIZE]; + char key[google_breakpad::SimpleStringDictionary::key_size]; + char value[google_breakpad::SimpleStringDictionary::value_size]; }; using std::string; @@ -86,7 +84,6 @@ class MinidumpLocation { // Ensure that the path exists. Fallback to /tmp if unable to locate path. assert(minidumpDir); if (!EnsureDirectoryPathExists(minidumpDir)) { - DEBUGLOG(stderr, "Unable to create: %s\n", [minidumpDir UTF8String]); minidumpDir = @"/tmp"; } @@ -141,7 +138,6 @@ class Inspector { bool InspectTask(); kern_return_t SendAcknowledgement(); - void LaunchReporter(const char *inConfigFilePath); // The bootstrap port in which the inspector is registered and into which it // must check in. diff --git a/toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/Inspector.mm b/toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/Inspector.mm index ea5d19a64798..dc6f48086de2 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/Inspector.mm +++ b/toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/Inspector.mm @@ -41,9 +41,9 @@ #import "client/mac/Framework/Breakpad.h" #import "client/mac/handler/minidump_generator.h" -#import "common/mac/SimpleStringDictionary.h" #import "common/mac/MachIPC.h" #include "common/mac/bootstrap_compat.h" +#include "common/mac/launch_reporter.h" #import "GTMDefines.h" @@ -77,7 +77,9 @@ void Inspector::Inspect(const char *receive_port_name) { if (wrote_minidump) { // Ask the user if he wants to upload the crash report to a server, // and do so if he agrees. - LaunchReporter(config_file_.GetFilePath()); + LaunchReporter( + config_params_.GetValueForKey(BREAKPAD_REPORTER_EXE_LOCATION), + config_file_.GetFilePath()); } else { fprintf(stderr, "Inspection of crashed process failed\n"); } @@ -253,8 +255,6 @@ kern_return_t Inspector::ReadMessages() { } } if (parameters_read != info.parameter_count) { - DEBUGLOG(stderr, "Only read %d parameters instead of %d, aborting crash " - "dump generation.", parameters_read, info.parameter_count); return KERN_FAILURE; } } @@ -266,7 +266,6 @@ kern_return_t Inspector::ReadMessages() { bool Inspector::InspectTask() { // keep the task quiet while we're looking at it task_suspend(remote_task_); - DEBUGLOG(stderr, "Suspended Remote task\n"); NSString *minidumpDir; @@ -283,11 +282,11 @@ bool Inspector::InspectTask() { NSString *applicationSupportDirectory = [libraryDirectories objectAtIndex:0]; - NSString *library_subdirectory = [NSString + NSString *library_subdirectory = [NSString stringWithUTF8String:kDefaultLibrarySubdirectory]; - NSString *breakpad_product = [NSString + NSString *breakpad_product = [NSString stringWithUTF8String:config_params_.GetValueForKey(BREAKPAD_PRODUCT)]; - + NSArray *path_components = [NSArray arrayWithObjects:applicationSupportDirectory, library_subdirectory, @@ -299,9 +298,6 @@ bool Inspector::InspectTask() { minidumpDir = [[NSString stringWithUTF8String:minidumpDirectory] stringByExpandingTildeInPath]; } - DEBUGLOG(stderr, - "Writing minidump to directory (%s)\n", - [minidumpDir UTF8String]); MinidumpLocation minidumpLocation(minidumpDir); @@ -315,13 +311,8 @@ bool Inspector::InspectTask() { NSString *pathid_ns = [NSString stringWithUTF8String:minidumpLocation.GetID()]; NSString *minidumpPath = [path_ns stringByAppendingPathComponent:pathid_ns]; - minidumpPath = [minidumpPath + minidumpPath = [minidumpPath stringByAppendingPathExtension:@"dmp"]; - - DEBUGLOG(stderr, - "minidump path (%s)\n", - [minidumpPath UTF8String]); - config_file_.WriteFile( 0, &config_params_, @@ -341,15 +332,8 @@ bool Inspector::InspectTask() { bool result = generator.Write([minidumpPath fileSystemRepresentation]); - if (result) { - DEBUGLOG(stderr, "Wrote minidump - OK\n"); - } else { - DEBUGLOG(stderr, "Error writing minidump - errno=%s\n", strerror(errno)); - } - // let the task continue task_resume(remote_task_); - DEBUGLOG(stderr, "Resumed remote task\n"); return result; } @@ -362,9 +346,6 @@ kern_return_t Inspector::SendAcknowledgement() { MachPortSender sender(ack_port_); MachSendMessage ack_message(kMsgType_InspectorAcknowledgement); - DEBUGLOG(stderr, "Inspector: trying to send acknowledgement to port %d\n", - ack_port_); - kern_return_t result = sender.SendMessage(ack_message, 2000); #if VERBOSE @@ -374,58 +355,8 @@ kern_return_t Inspector::SendAcknowledgement() { return result; } - DEBUGLOG(stderr, "Inspector: port translation failure!\n"); return KERN_INVALID_NAME; } -//============================================================================= -void Inspector::LaunchReporter(const char *inConfigFilePath) { - // Extract the path to the reporter executable. - const char *reporterExecutablePath = - config_params_.GetValueForKey(BREAKPAD_REPORTER_EXE_LOCATION); - DEBUGLOG(stderr, "reporter path = %s\n", reporterExecutablePath); - - // Setup and launch the crash dump sender. - const char *argv[3]; - argv[0] = reporterExecutablePath; - argv[1] = inConfigFilePath; - argv[2] = NULL; - - // Launch the reporter - pid_t pid = fork(); - - // If we're in the child, load in our new executable and run. - // The parent will not wait for the child to complete. - if (pid == 0) { - execv(argv[0], (char * const *)argv); - config_file_.Unlink(); // launch failed - get rid of config file - DEBUGLOG(stderr, "Inspector: unable to launch reporter app\n"); - _exit(1); - } - - // Wait until the Reporter child process exits. - // - - // We'll use a timeout of one minute. - int timeoutCount = 60; // 60 seconds - - while (timeoutCount-- > 0) { - int status; - pid_t result = waitpid(pid, &status, WNOHANG); - - if (result == 0) { - // The child has not yet finished. - sleep(1); - } else if (result == -1) { - DEBUGLOG(stderr, "Inspector: waitpid error (%d) waiting for reporter app\n", - errno); - break; - } else { - // child has finished - break; - } - } -} - } // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/crash_generation_server.cc b/toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/crash_generation_server.cc index abcd9ff73ee5..451e8d9c2a7e 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/crash_generation_server.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/crash_generation_server.cc @@ -29,10 +29,11 @@ #include "client/mac/crash_generation/crash_generation_server.h" +#include + #include "client/mac/crash_generation/client_info.h" #include "client/mac/handler/minidump_generator.h" #include "common/mac/scoped_task_suspend-inl.h" -#include "pthread.h" namespace google_breakpad { diff --git a/toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/crash_generation_server.h b/toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/crash_generation_server.h index d7e3fa8e8158..85bd5b5e33e4 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/crash_generation_server.h +++ b/toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/crash_generation_server.h @@ -51,7 +51,7 @@ enum { struct ExceptionInfo { int32_t exception_type; int32_t exception_code; - int64_t exception_subcode; + int32_t exception_subcode; }; class CrashGenerationServer { diff --git a/toolkit/crashreporter/google-breakpad/src/client/mac/handler/breakpad_nlist_64.cc b/toolkit/crashreporter/google-breakpad/src/client/mac/handler/breakpad_nlist_64.cc index f6e1d95abc17..3492b823dad0 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/mac/handler/breakpad_nlist_64.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/mac/handler/breakpad_nlist_64.cc @@ -202,17 +202,6 @@ int __breakpad_fdnlist(int fd, nlist_type *list, const char **symbolNames, if (CFSwapInt32BigToHost(*((uint32_t *)&buf)) == FAT_MAGIC || /* The following is the big-endian ppc64 check */ *((unsigned int *)&buf) == FAT_MAGIC) { - /* Get host info */ - host_t host = mach_host_self(); - unsigned hic = HOST_BASIC_INFO_COUNT; - struct host_basic_info hbi; - kern_return_t kr; - if ((kr = host_info(host, HOST_BASIC_INFO, - (host_info_t)(&hbi), &hic)) != KERN_SUCCESS) { - return -1; - } - mach_port_deallocate(mach_task_self(), host); - /* Read in the fat header */ struct fat_header fh; if (lseek(fd, 0, SEEK_SET) == -1) { diff --git a/toolkit/crashreporter/google-breakpad/src/client/mac/handler/dynamic_images.cc b/toolkit/crashreporter/google-breakpad/src/client/mac/handler/dynamic_images.cc index fbd6dcf0a3db..3dc4f3b463dc 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/mac/handler/dynamic_images.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/mac/handler/dynamic_images.cc @@ -567,7 +567,7 @@ cpu_type_t DynamicImages::DetermineTaskCPUType(task_t task) { cpu_type_t cpu_type; size_t cpuTypeSize = sizeof(cpu_type); - sysctl(mib, mibLen, &cpu_type, &cpuTypeSize, 0, 0); + sysctl(mib, static_cast(mibLen), &cpu_type, &cpuTypeSize, 0, 0); return cpu_type; } diff --git a/toolkit/crashreporter/google-breakpad/src/client/mac/handler/dynamic_images.h b/toolkit/crashreporter/google-breakpad/src/client/mac/handler/dynamic_images.h index d039eda0018f..65147900b822 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/mac/handler/dynamic_images.h +++ b/toolkit/crashreporter/google-breakpad/src/client/mac/handler/dynamic_images.h @@ -285,6 +285,8 @@ class DynamicImages { return CPU_TYPE_POWERPC64; #elif defined(__arm__) return CPU_TYPE_ARM; +#elif defined(__aarch64__) + return CPU_TYPE_ARM64; #else #error "GetNativeCPUType not implemented for this architecture" #endif diff --git a/toolkit/crashreporter/google-breakpad/src/client/mac/handler/exception_handler.cc b/toolkit/crashreporter/google-breakpad/src/client/mac/handler/exception_handler.cc index e0eca683c273..6928e98472b5 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/mac/handler/exception_handler.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/mac/handler/exception_handler.cc @@ -74,8 +74,12 @@ namespace google_breakpad { static union { #if USE_PROTECTED_ALLOCATIONS +#if defined PAGE_MAX_SIZE + char protected_buffer[PAGE_MAX_SIZE] __attribute__((aligned(PAGE_MAX_SIZE))); +#else char protected_buffer[PAGE_SIZE] __attribute__((aligned(PAGE_SIZE))); -#endif +#endif // defined PAGE_MAX_SIZE +#endif // USE_PROTECTED_ALLOCATIONS google_breakpad::ExceptionHandler *handler; } gProtectedData; @@ -282,8 +286,8 @@ bool ExceptionHandler::WriteMinidump(bool write_exception_stream) { // Send an empty message to the handle port so that a minidump will // be written bool result = SendMessageToHandlerThread(write_exception_stream ? - kWriteDumpWithExceptionMessage : - kWriteDumpMessage); + kWriteDumpWithExceptionMessage : + kWriteDumpMessage); if (!result) { pthread_mutex_unlock(&minidump_write_mutex_); return false; @@ -326,7 +330,7 @@ bool ExceptionHandler::WriteMinidumpForChild(mach_port_t child, EXC_I386_BPT, #elif defined(__ppc__) || defined(__ppc64__) EXC_PPC_BREAKPOINT, -#elif defined(__arm__) +#elif defined(__arm__) || defined(__aarch64__) EXC_ARM_BREAKPOINT, #else #error architecture not supported @@ -342,13 +346,14 @@ bool ExceptionHandler::WriteMinidumpForChild(mach_port_t child, return result; } -bool ExceptionHandler::WriteMinidumpWithException(int exception_type, - int exception_code, - int exception_subcode, - ucontext_t* task_context, - mach_port_t thread_name, - bool exit_after_write, - bool report_current_thread) { +bool ExceptionHandler::WriteMinidumpWithException( + int exception_type, + int exception_code, + int exception_subcode, + breakpad_ucontext_t* task_context, + mach_port_t thread_name, + bool exit_after_write, + bool report_current_thread) { bool result = false; if (directCallback_) { @@ -453,12 +458,13 @@ kern_return_t ForwardException(mach_port_t task, mach_port_t failed_thread, exception_behavior_t target_behavior = current.behaviors[found]; kern_return_t result; + // TODO: Handle the case where |target_behavior| has MACH_EXCEPTION_CODES + // set. https://code.google.com/p/google-breakpad/issues/detail?id=551 switch (target_behavior) { case EXCEPTION_DEFAULT: result = exception_raise(target_port, failed_thread, task, exception, code, code_count); break; - default: fprintf(stderr, "** Unknown exception behavior: %d\n", target_behavior); result = KERN_FAILURE; @@ -520,7 +526,7 @@ void* ExceptionHandler::WaitForMessage(void* exception_handler_class) { exception_code = EXC_I386_BPT; #elif defined(__ppc__) || defined(__ppc64__) exception_code = EXC_PPC_BREAKPOINT; -#elif defined(__arm__) +#elif defined(__arm__) || defined(__aarch64__) exception_code = EXC_ARM_BREAKPOINT; #else #error architecture not supported @@ -611,7 +617,7 @@ void ExceptionHandler::SignalHandler(int sig, siginfo_t* info, void* uc) { EXC_SOFTWARE, MD_EXCEPTION_CODE_MAC_ABORT, 0, - static_cast(uc), + static_cast(uc), mach_thread_self(), true, true); @@ -626,24 +632,25 @@ bool ExceptionHandler::InstallHandler() { if (gProtectedData.handler != NULL) { return false; } + if (!IsOutOfProcess()) { + struct sigaction sa; + memset(&sa, 0, sizeof(sa)); + sigemptyset(&sa.sa_mask); + sigaddset(&sa.sa_mask, SIGABRT); + sa.sa_sigaction = ExceptionHandler::SignalHandler; + sa.sa_flags = SA_SIGINFO; - struct sigaction sa; - memset(&sa, 0, sizeof(sa)); - sigemptyset(&sa.sa_mask); - sigaddset(&sa.sa_mask, SIGABRT); - sa.sa_sigaction = ExceptionHandler::SignalHandler; - sa.sa_flags = SA_SIGINFO; - - scoped_ptr old(new struct sigaction); - if (sigaction(SIGABRT, &sa, old.get()) == -1) { - return false; - } - old_handler_.swap(old); - gProtectedData.handler = this; + scoped_ptr old(new struct sigaction); + if (sigaction(SIGABRT, &sa, old.get()) == -1) { + return false; + } + old_handler_.swap(old); + gProtectedData.handler = this; #if USE_PROTECTED_ALLOCATIONS - assert(((size_t)(gProtectedData.protected_buffer) & PAGE_MASK) == 0); - mprotect(gProtectedData.protected_buffer, PAGE_SIZE, PROT_READ); + assert(((size_t)(gProtectedData.protected_buffer) & PAGE_MASK) == 0); + mprotect(gProtectedData.protected_buffer, PAGE_SIZE, PROT_READ); #endif + } try { #if USE_PROTECTED_ALLOCATIONS diff --git a/toolkit/crashreporter/google-breakpad/src/client/mac/handler/exception_handler.h b/toolkit/crashreporter/google-breakpad/src/client/mac/handler/exception_handler.h index b5e8bbaaf011..f1d9ae92dee2 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/mac/handler/exception_handler.h +++ b/toolkit/crashreporter/google-breakpad/src/client/mac/handler/exception_handler.h @@ -41,6 +41,7 @@ #include +#include "client/mac/handler/ucontext_compat.h" #include "common/scoped_ptr.h" #if !TARGET_OS_IPHONE @@ -188,7 +189,7 @@ class ExceptionHandler { bool WriteMinidumpWithException(int exception_type, int exception_code, int exception_subcode, - ucontext_t *task_context, + breakpad_ucontext_t *task_context, mach_port_t thread_name, bool exit_after_write, bool report_current_thread); diff --git a/toolkit/crashreporter/google-breakpad/src/client/mac/handler/mach_vm_compat.h b/toolkit/crashreporter/google-breakpad/src/client/mac/handler/mach_vm_compat.h index e0459be67da4..9e9028b928d8 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/mac/handler/mach_vm_compat.h +++ b/toolkit/crashreporter/google-breakpad/src/client/mac/handler/mach_vm_compat.h @@ -32,15 +32,14 @@ #include -// On iOS 5, mach/mach_vm.h is not supported anymore. As the architecture is 32 -// bits, we can use the simple vm_ functions instead of the mach_vm_ ones. +// On iOS 5 and higher, mach/mach_vm.h is not supported. Use the corresponding +// vm_map functions instead. #if TARGET_OS_IPHONE #include #define mach_vm_address_t vm_address_t #define mach_vm_deallocate vm_deallocate #define mach_vm_read vm_read -#define mach_vm_region vm_region -#define mach_vm_region_recurse vm_region_recurse +#define mach_vm_region_recurse vm_region_recurse_64 #define mach_vm_size_t vm_size_t #else #include diff --git a/toolkit/crashreporter/google-breakpad/src/client/mac/handler/minidump_generator.cc b/toolkit/crashreporter/google-breakpad/src/client/mac/handler/minidump_generator.cc index 809e684fa0d2..38baa04e874f 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/mac/handler/minidump_generator.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/mac/handler/minidump_generator.cc @@ -42,7 +42,7 @@ #include "client/mac/handler/minidump_generator.h" -#ifdef HAS_ARM_SUPPORT +#if defined(HAS_ARM_SUPPORT) || defined(HAS_ARM64_SUPPORT) #include #endif #ifdef HAS_PPC_SUPPORT @@ -62,7 +62,7 @@ using MacStringUtils::IntegerValueAtIndex; namespace google_breakpad { -#if __LP64__ +#if defined(__LP64__) && __LP64__ #define LC_SEGMENT_ARCH LC_SEGMENT_64 #else #define LC_SEGMENT_ARCH LC_SEGMENT @@ -171,7 +171,7 @@ void MinidumpGenerator::GatherSystemInformation() { os_build_number_ = IntegerValueAtIndex(product_str, 2); } -void MinidumpGenerator::SetTaskContext(ucontext_t *task_context) { +void MinidumpGenerator::SetTaskContext(breakpad_ucontext_t *task_context) { task_context_ = task_context; } @@ -369,6 +369,10 @@ bool MinidumpGenerator::WriteStack(breakpad_thread_state_data_t state, case CPU_TYPE_ARM: return WriteStackARM(state, stack_location); #endif +#ifdef HAS_ARM64_SUPPORT + case CPU_TYPE_ARM64: + return WriteStackARM64(state, stack_location); +#endif #ifdef HAS_PPC_SUPPORT case CPU_TYPE_POWERPC: return WriteStackPPC(state, stack_location); @@ -393,6 +397,10 @@ bool MinidumpGenerator::WriteContext(breakpad_thread_state_data_t state, case CPU_TYPE_ARM: return WriteContextARM(state, register_location); #endif +#ifdef HAS_ARM64_SUPPORT + case CPU_TYPE_ARM64: + return WriteContextARM64(state, register_location); +#endif #ifdef HAS_PPC_SUPPORT case CPU_TYPE_POWERPC: return WriteContextPPC(state, register_location); @@ -417,6 +425,10 @@ uint64_t MinidumpGenerator::CurrentPCForStack( case CPU_TYPE_ARM: return CurrentPCForStackARM(state); #endif +#ifdef HAS_ARM64_SUPPORT + case CPU_TYPE_ARM64: + return CurrentPCForStackARM64(state); +#endif #ifdef HAS_PPC_SUPPORT case CPU_TYPE_POWERPC: return CurrentPCForStackPPC(state); @@ -486,7 +498,82 @@ bool MinidumpGenerator::WriteContextARM(breakpad_thread_state_data_t state, AddGPR(10); AddGPR(11); AddGPR(12); -#undef AddReg +#undef AddGPR + + return true; +} +#endif + +#ifdef HAS_ARM64_SUPPORT +bool MinidumpGenerator::WriteStackARM64(breakpad_thread_state_data_t state, + MDMemoryDescriptor *stack_location) { + arm_thread_state64_t *machine_state = + reinterpret_cast(state); + mach_vm_address_t start_addr = REGISTER_FROM_THREADSTATE(machine_state, sp); + return WriteStackFromStartAddress(start_addr, stack_location); +} + +uint64_t +MinidumpGenerator::CurrentPCForStackARM64(breakpad_thread_state_data_t state) { + arm_thread_state64_t *machine_state = + reinterpret_cast(state); + + return REGISTER_FROM_THREADSTATE(machine_state, pc); +} + +bool +MinidumpGenerator::WriteContextARM64(breakpad_thread_state_data_t state, + MDLocationDescriptor *register_location) +{ + TypedMDRVA context(&writer_); + arm_thread_state64_t *machine_state = + reinterpret_cast(state); + + if (!context.Allocate()) + return false; + + *register_location = context.location(); + MDRawContextARM64 *context_ptr = context.get(); + context_ptr->context_flags = MD_CONTEXT_ARM64_FULL; + +#define AddGPR(a) context_ptr->iregs[a] = \ + REGISTER_FROM_THREADSTATE(machine_state, x[a]) + + context_ptr->iregs[29] = REGISTER_FROM_THREADSTATE(machine_state, fp); + context_ptr->iregs[30] = REGISTER_FROM_THREADSTATE(machine_state, lr); + context_ptr->iregs[31] = REGISTER_FROM_THREADSTATE(machine_state, sp); + context_ptr->iregs[32] = REGISTER_FROM_THREADSTATE(machine_state, pc); + context_ptr->cpsr = REGISTER_FROM_THREADSTATE(machine_state, cpsr); + + AddGPR(0); + AddGPR(1); + AddGPR(2); + AddGPR(3); + AddGPR(4); + AddGPR(5); + AddGPR(6); + AddGPR(7); + AddGPR(8); + AddGPR(9); + AddGPR(10); + AddGPR(11); + AddGPR(12); + AddGPR(13); + AddGPR(14); + AddGPR(15); + AddGPR(16); + AddGPR(17); + AddGPR(18); + AddGPR(19); + AddGPR(20); + AddGPR(21); + AddGPR(22); + AddGPR(23); + AddGPR(24); + AddGPR(25); + AddGPR(26); + AddGPR(27); + AddGPR(28); #undef AddGPR return true; @@ -540,8 +627,11 @@ bool MinidumpGenerator::WriteContextPPC(breakpad_thread_state_data_t state, MDRawContextPPC *context_ptr = context.get(); context_ptr->context_flags = MD_CONTEXT_PPC_BASE; -#define AddReg(a) context_ptr->a = REGISTER_FROM_THREADSTATE(machine_state, a) -#define AddGPR(a) context_ptr->gpr[a] = REGISTER_FROM_THREADSTATE(machine_state, r ## a) +#define AddReg(a) context_ptr->a = static_cast<__typeof__(context_ptr->a)>( \ + REGISTER_FROM_THREADSTATE(machine_state, a)) +#define AddGPR(a) context_ptr->gpr[a] = \ + static_cast<__typeof__(context_ptr->a)>( \ + REGISTER_FROM_THREADSTATE(machine_state, r ## a) AddReg(srr0); AddReg(cr); @@ -603,8 +693,11 @@ bool MinidumpGenerator::WriteContextPPC64( MDRawContextPPC64 *context_ptr = context.get(); context_ptr->context_flags = MD_CONTEXT_PPC_BASE; -#define AddReg(a) context_ptr->a = REGISTER_FROM_THREADSTATE(machine_state, a) -#define AddGPR(a) context_ptr->gpr[a] = REGISTER_FROM_THREADSTATE(machine_state, r ## a) +#define AddReg(a) context_ptr->a = static_cast<__typeof__(context_ptr->a)>( \ + REGISTER_FROM_THREADSTATE(machine_state, a)) +#define AddGPR(a) context_ptr->gpr[a] = \ + static_cast<__typeof__(context_ptr->a)>( \ + REGISTER_FROM_THREADSTATE(machine_state, r ## a) AddReg(srr0); AddReg(cr); @@ -668,7 +761,8 @@ bool MinidumpGenerator::WriteStackX86_64(breakpad_thread_state_data_t state, x86_thread_state64_t *machine_state = reinterpret_cast(state); - mach_vm_address_t start_addr = REGISTER_FROM_THREADSTATE(machine_state, rsp); + mach_vm_address_t start_addr = static_cast( + REGISTER_FROM_THREADSTATE(machine_state, rsp)); return WriteStackFromStartAddress(start_addr, stack_location); } @@ -701,7 +795,8 @@ bool MinidumpGenerator::WriteContextX86(breakpad_thread_state_data_t state, *register_location = context.location(); MDRawContextX86 *context_ptr = context.get(); -#define AddReg(a) context_ptr->a = REGISTER_FROM_THREADSTATE(machine_state, a) +#define AddReg(a) context_ptr->a = static_cast<__typeof__(context_ptr->a)>( \ + REGISTER_FROM_THREADSTATE(machine_state, a)) context_ptr->context_flags = MD_CONTEXT_X86; AddReg(eax); @@ -740,7 +835,8 @@ bool MinidumpGenerator::WriteContextX86_64( *register_location = context.location(); MDRawContextAMD64 *context_ptr = context.get(); -#define AddReg(a) context_ptr->a = REGISTER_FROM_THREADSTATE(machine_state, a) +#define AddReg(a) context_ptr->a = static_cast<__typeof__(context_ptr->a)>( \ + REGISTER_FROM_THREADSTATE(machine_state, a)) context_ptr->context_flags = MD_CONTEXT_AMD64; AddReg(rax); @@ -780,11 +876,19 @@ bool MinidumpGenerator::GetThreadState(thread_act_t target_thread, if (task_context_ && target_thread == mach_thread_self()) { switch (cpu_type_) { #ifdef HAS_ARM_SUPPORT - case CPU_TYPE_ARM: { + case CPU_TYPE_ARM: size_t final_size = std::min(static_cast(*count), sizeof(arm_thread_state_t)); - memcpy(state, &task_context_->uc_mcontext->__ss, final_size); - *count = final_size; + memcpy(state, &task_context_->breakpad_uc_mcontext->__ss, final_size); + *count = static_cast(final_size); + return true; +#endif +#ifdef HAS_ARM64_SUPPORT + case CPU_TYPE_ARM64: { + size_t final_size = + std::min(static_cast(*count), sizeof(arm_thread_state64_t)); + memcpy(state, &task_context_->breakpad_uc_mcontext->__ss, final_size); + *count = static_cast(final_size); return true; } #endif @@ -795,8 +899,8 @@ bool MinidumpGenerator::GetThreadState(thread_act_t target_thread, sizeof(i386_thread_state_t) : sizeof(x86_thread_state64_t); size_t final_size = std::min(static_cast(*count), state_size); - memcpy(state, &task_context_->uc_mcontext->__ss, final_size); - *count = final_size; + memcpy(state, &task_context_->breakpad_uc_mcontext->__ss, final_size); + *count = static_cast(final_size); return true; } #endif @@ -810,6 +914,11 @@ bool MinidumpGenerator::GetThreadState(thread_act_t target_thread, flavor = ARM_THREAD_STATE; break; #endif +#ifdef HAS_ARM64_SUPPORT + case CPU_TYPE_ARM64: + flavor = ARM_THREAD_STATE64; + break; +#endif #ifdef HAS_PPC_SUPPORT case CPU_TYPE_POWERPC: flavor = PPC_THREAD_STATE; @@ -940,9 +1049,9 @@ bool MinidumpGenerator::WriteMemoryListStream( uintptr_t end_of_range = std::min(uintptr_t(ip + (kIPMemorySize / 2)), uintptr_t(addr + size)); - ip_memory_d.memory.data_size = - end_of_range - + uintptr_t range_diff = end_of_range - static_cast(ip_memory_d.start_of_memory_range); + ip_memory_d.memory.data_size = static_cast(range_diff); have_ip_memory = true; // This needs to get appended to the list even though // the memory bytes aren't filled in yet so the entire @@ -954,7 +1063,7 @@ bool MinidumpGenerator::WriteMemoryListStream( } // Now fill in the memory list and write it. - unsigned memory_count = memory_blocks_.size(); + size_t memory_count = memory_blocks_.size(); if (!list.AllocateObjectAndArray(memory_count, sizeof(MDMemoryDescriptor))) return false; @@ -962,7 +1071,7 @@ bool MinidumpGenerator::WriteMemoryListStream( memory_list_stream->stream_type = MD_MEMORY_LIST_STREAM; memory_list_stream->location = list.location(); - list.get()->number_of_memory_ranges = memory_count; + list.get()->number_of_memory_ranges = static_cast(memory_count); unsigned int i; for (i = 0; i < memory_count; ++i) { @@ -1060,6 +1169,11 @@ bool MinidumpGenerator::WriteSystemInfoStream( info_ptr->processor_architecture = MD_CPU_ARCHITECTURE_ARM; break; #endif +#ifdef HAS_ARM64_SUPPORT + case CPU_TYPE_ARM64: + info_ptr->processor_architecture = MD_CPU_ARCHITECTURE_ARM64; + break; +#endif #ifdef HAS_PPC_SUPPORT case CPU_TYPE_POWERPC: case CPU_TYPE_POWERPC64: @@ -1111,9 +1225,9 @@ bool MinidumpGenerator::WriteSystemInfoStream( info_ptr->processor_level = (info_ptr->cpu.x86_cpu_info.version_information & 0xF00) >> 8; // 0xMMSS (Model, Stepping) - info_ptr->processor_revision = - (info_ptr->cpu.x86_cpu_info.version_information & 0xF) | - ((info_ptr->cpu.x86_cpu_info.version_information & 0xF0) << 4); + info_ptr->processor_revision = static_cast( + (info_ptr->cpu.x86_cpu_info.version_information & 0xF) | + ((info_ptr->cpu.x86_cpu_info.version_information & 0xF0) << 4)); // decode extended model info if (info_ptr->processor_level == 0xF || @@ -1356,8 +1470,8 @@ bool MinidumpGenerator::WriteModuleListStream( MDRawDirectory *module_list_stream) { TypedMDRVA list(&writer_); - size_t image_count = dynamic_images_ ? - static_cast(dynamic_images_->GetImageCount()) : + uint32_t image_count = dynamic_images_ ? + dynamic_images_->GetImageCount() : _dyld_image_count(); if (!list.AllocateObjectAndArray(image_count, MD_MODULE_SIZE)) @@ -1365,22 +1479,22 @@ bool MinidumpGenerator::WriteModuleListStream( module_list_stream->stream_type = MD_MODULE_LIST_STREAM; module_list_stream->location = list.location(); - list.get()->number_of_modules = image_count; + list.get()->number_of_modules = static_cast(image_count); // Write out the executable module as the first one MDRawModule module; - size_t executableIndex = FindExecutableModule(); + uint32_t executableIndex = FindExecutableModule(); - if (!WriteModuleStream(executableIndex, &module)) { + if (!WriteModuleStream(static_cast(executableIndex), &module)) { return false; } list.CopyIndexAfterObject(0, &module, MD_MODULE_SIZE); int destinationIndex = 1; // Write all other modules after this one - for (size_t i = 0; i < image_count; ++i) { + for (uint32_t i = 0; i < image_count; ++i) { if (i != executableIndex) { - if (!WriteModuleStream(i, &module)) { + if (!WriteModuleStream(static_cast(i), &module)) { return false; } diff --git a/toolkit/crashreporter/google-breakpad/src/client/mac/handler/minidump_generator.h b/toolkit/crashreporter/google-breakpad/src/client/mac/handler/minidump_generator.h index c79873fa7eef..4e4b4a684883 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/mac/handler/minidump_generator.h +++ b/toolkit/crashreporter/google-breakpad/src/client/mac/handler/minidump_generator.h @@ -37,6 +37,7 @@ #include +#include "client/mac/handler/ucontext_compat.h" #include "client/minidump_file_writer.h" #include "common/memory.h" #include "common/mac/macho_utilities.h" @@ -49,7 +50,9 @@ #define HAS_PPC_SUPPORT #endif #if defined(__arm__) - #define HAS_ARM_SUPPORT +#define HAS_ARM_SUPPORT +#elif defined(__aarch64__) +#define HAS_ARM64_SUPPORT #elif defined(__i386__) || defined(__x86_64__) #define HAS_X86_SUPPORT #endif @@ -105,7 +108,7 @@ class MinidumpGenerator { // Specify the task context. If |task_context| is not NULL, it will be used // to retrieve the context of the current thread, instead of using // |thread_get_state|. - void SetTaskContext(ucontext_t *task_context); + void SetTaskContext(breakpad_ucontext_t *task_context); // Gather system information. This should be call at least once before using // the MinidumpGenerator class. @@ -153,6 +156,13 @@ class MinidumpGenerator { MDLocationDescriptor *register_location); uint64_t CurrentPCForStackARM(breakpad_thread_state_data_t state); #endif +#ifdef HAS_ARM64_SUPPORT + bool WriteStackARM64(breakpad_thread_state_data_t state, + MDMemoryDescriptor *stack_location); + bool WriteContextARM64(breakpad_thread_state_data_t state, + MDLocationDescriptor *register_location); + uint64_t CurrentPCForStackARM64(breakpad_thread_state_data_t state); +#endif #ifdef HAS_PPC_SUPPORT bool WriteStackPPC(breakpad_thread_state_data_t state, MDMemoryDescriptor *stack_location); @@ -197,7 +207,7 @@ class MinidumpGenerator { // CPU type of the task being dumped. cpu_type_t cpu_type_; - + // System information static char build_string_[16]; static int os_major_version_; @@ -205,7 +215,7 @@ class MinidumpGenerator { static int os_build_number_; // Context of the task to dump. - ucontext_t *task_context_; + breakpad_ucontext_t *task_context_; // Information about dynamically loaded code DynamicImages *dynamic_images_; diff --git a/toolkit/crashreporter/google-breakpad/src/client/mac/handler/ucontext_compat.h b/toolkit/crashreporter/google-breakpad/src/client/mac/handler/ucontext_compat.h new file mode 100644 index 000000000000..1e4b752e514f --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/client/mac/handler/ucontext_compat.h @@ -0,0 +1,47 @@ +// Copyright 2013 Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifndef CLIENT_MAC_HANDLER_UCONTEXT_COMPAT_H_ +#define CLIENT_MAC_HANDLER_UCONTEXT_COMPAT_H_ + +#include + +// The purpose of this file is to work around the fact that ucontext_t's +// uc_mcontext member is an mcontext_t rather than an mcontext64_t on ARM64. +#if defined(__aarch64__) +// doesn't include the below file. +#include +typedef ucontext64_t breakpad_ucontext_t; +#define breakpad_uc_mcontext uc_mcontext64 +#else +typedef ucontext_t breakpad_ucontext_t; +#define breakpad_uc_mcontext uc_mcontext +#endif // defined(__aarch64__) + +#endif // CLIENT_MAC_HANDLER_UCONTEXT_COMPAT_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/client/mac/sender/crash_report_sender.m b/toolkit/crashreporter/google-breakpad/src/client/mac/sender/crash_report_sender.m index c591f0ca32cf..88d26fb0383a 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/mac/sender/crash_report_sender.m +++ b/toolkit/crashreporter/google-breakpad/src/client/mac/sender/crash_report_sender.m @@ -265,11 +265,13 @@ const int kEmailMaxLength = 64; } } else { // Create an alert panel to tell the user something happened - NSPanel* alert = NSGetAlertPanel([self shortDialogMessage], - [self explanatoryDialogText], - NSLocalizedString(@"sendReportButton", @""), - NSLocalizedString(@"cancelButton", @""), - nil); + NSPanel* alert = + NSGetAlertPanel([self shortDialogMessage], + @"%@", + NSLocalizedString(@"sendReportButton", @""), + NSLocalizedString(@"cancelButton", @""), + nil, + [self explanatoryDialogText]); // Pop the alert with an automatic timeout, and wait for the response buttonPressed = [self runModalWindow:alert withTimeout:timeout]; @@ -553,13 +555,13 @@ doCommandBySelector:(SEL)commandSelector { displayName = [[uploader_ parameters] objectForKey:@BREAKPAD_PRODUCT]; if ([self isOnDemand]) { - return [NSString - stringWithFormat:NSLocalizedString(@"noCrashDialogHeader", @""), - displayName]; + // Local variable to pacify clang's -Wformat-extra-args. + NSString* format = NSLocalizedString(@"noCrashDialogHeader", @""); + return [NSString stringWithFormat:format, displayName]; } else { - return [NSString - stringWithFormat:NSLocalizedString(@"crashDialogHeader", @""), - displayName]; + // Local variable to pacify clang's -Wformat-extra-args. + NSString* format = NSLocalizedString(@"crashDialogHeader", @""); + return [NSString stringWithFormat:format, displayName]; } } @@ -574,13 +576,13 @@ doCommandBySelector:(SEL)commandSelector { vendor = @"unknown vendor"; if ([self isOnDemand]) { - return [NSString - stringWithFormat:NSLocalizedString(@"noCrashDialogMsg", @""), - vendor, displayName]; + // Local variable to pacify clang's -Wformat-extra-args. + NSString* format = NSLocalizedString(@"noCrashDialogMsg", @""); + return [NSString stringWithFormat:format, vendor, displayName]; } else { - return [NSString - stringWithFormat:NSLocalizedString(@"crashDialogMsg", @""), - vendor]; + // Local variable to pacify clang's -Wformat-extra-args. + NSString* format = NSLocalizedString(@"crashDialogMsg", @""); + return [NSString stringWithFormat:format, vendor]; } } diff --git a/toolkit/crashreporter/google-breakpad/src/client/mac/sender/uploader.h b/toolkit/crashreporter/google-breakpad/src/client/mac/sender/uploader.h index 318165c98845..5f6aa464df0a 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/mac/sender/uploader.h +++ b/toolkit/crashreporter/google-breakpad/src/client/mac/sender/uploader.h @@ -67,6 +67,10 @@ extern NSString *const kDefaultServerType; - (id)initWithConfig:(NSDictionary *)config; +// Reads the file |configFile| and returns the corresponding NSDictionary. +// |configFile| will be deleted after reading. ++ (NSDictionary *)readConfigurationDataFromFile:(NSString *)configFile; + - (NSMutableDictionary *)parameters; - (void)report; @@ -78,4 +82,8 @@ extern NSString *const kDefaultServerType; // will be uploaded to the crash server. - (void)addServerParameter:(id)value forKey:(NSString *)key; +// This method process the HTTP response and renames the minidump file with the +// new ID. +- (void)handleNetworkResponse:(NSData *)data withError:(NSError *)error; + @end diff --git a/toolkit/crashreporter/google-breakpad/src/client/mac/sender/uploader.mm b/toolkit/crashreporter/google-breakpad/src/client/mac/sender/uploader.mm index b6da82149001..42a43bfc337e 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/mac/sender/uploader.mm +++ b/toolkit/crashreporter/google-breakpad/src/client/mac/sender/uploader.mm @@ -204,6 +204,11 @@ NSDictionary *readConfigurationData(const char *configFile) { return self; } +//============================================================================= ++ (NSDictionary *)readConfigurationDataFromFile:(NSString *)configFile { + return readConfigurationData([configFile fileSystemRepresentation]); +} + //============================================================================= - (void)translateConfigurationData:(NSDictionary *)config { parameters_ = [[NSMutableDictionary alloc] init]; @@ -486,6 +491,46 @@ NSDictionary *readConfigurationData(const char *configFile) { [extraServerVars_ setObject:value forKey:key]; } +//============================================================================= +- (void)handleNetworkResponse:(NSData *)data withError:(NSError *)error { + NSString *result = [[NSString alloc] initWithData:data + encoding:NSUTF8StringEncoding]; + const char *reportID = "ERR"; + if (error) { + fprintf(stderr, "Breakpad Uploader: Send Error: %s\n", + [[error description] UTF8String]); + } else { + NSCharacterSet *trimSet = + [NSCharacterSet whitespaceAndNewlineCharacterSet]; + reportID = [[result stringByTrimmingCharactersInSet:trimSet] UTF8String]; + [self logUploadWithID:reportID]; + } + + // rename the minidump file according to the id returned from the server + NSString *minidumpDir = + [parameters_ objectForKey:@kReporterMinidumpDirectoryKey]; + NSString *minidumpID = [parameters_ objectForKey:@kReporterMinidumpIDKey]; + + NSString *srcString = [NSString stringWithFormat:@"%@/%@.dmp", + minidumpDir, minidumpID]; + NSString *destString = [NSString stringWithFormat:@"%@/%s.dmp", + minidumpDir, reportID]; + + const char *src = [srcString fileSystemRepresentation]; + const char *dest = [destString fileSystemRepresentation]; + + if (rename(src, dest) == 0) { + GTMLoggerInfo(@"Breakpad Uploader: Renamed %s to %s after successful " \ + "upload",src, dest); + } + else { + // can't rename - don't worry - it's not important for users + GTMLoggerDebug(@"Breakpad Uploader: successful upload report ID = %s\n", + reportID ); + } + [result release]; +} + //============================================================================= - (void)report { NSURL *url = [NSURL URLWithString:[parameters_ objectForKey:@BREAKPAD_URL]]; @@ -511,43 +556,16 @@ NSDictionary *readConfigurationData(const char *configFile) { // Send it NSError *error = nil; NSData *data = [upload send:&error]; - NSString *result = [[NSString alloc] initWithData:data - encoding:NSUTF8StringEncoding]; - const char *reportID = "ERR"; - if (error) { - fprintf(stderr, "Breakpad Uploader: Send Error: %s\n", - [[error description] UTF8String]); + if (![url isFileURL]) { + [self handleNetworkResponse:data withError:error]; } else { - NSCharacterSet *trimSet = - [NSCharacterSet whitespaceAndNewlineCharacterSet]; - reportID = [[result stringByTrimmingCharactersInSet:trimSet] UTF8String]; - [self logUploadWithID:reportID]; + if (error) { + fprintf(stderr, "Breakpad Uploader: Error writing request file: %s\n", + [[error description] UTF8String]); + } } - // rename the minidump file according to the id returned from the server - NSString *minidumpDir = - [parameters_ objectForKey:@kReporterMinidumpDirectoryKey]; - NSString *minidumpID = [parameters_ objectForKey:@kReporterMinidumpIDKey]; - - NSString *srcString = [NSString stringWithFormat:@"%@/%@.dmp", - minidumpDir, minidumpID]; - NSString *destString = [NSString stringWithFormat:@"%@/%s.dmp", - minidumpDir, reportID]; - - const char *src = [srcString fileSystemRepresentation]; - const char *dest = [destString fileSystemRepresentation]; - - if (rename(src, dest) == 0) { - GTMLoggerInfo(@"Breakpad Uploader: Renamed %s to %s after successful " \ - "upload",src, dest); - } - else { - // can't rename - don't worry - it's not important for users - GTMLoggerDebug(@"Breakpad Uploader: successful upload report ID = %s\n", - reportID ); - } - [result release]; } else { // Minidump is missing -- upload just the log file. if (logFileData_) { diff --git a/toolkit/crashreporter/google-breakpad/src/client/mac/tests/SimpleStringDictionaryTest.mm b/toolkit/crashreporter/google-breakpad/src/client/mac/tests/SimpleStringDictionaryTest.mm deleted file mode 100644 index 94179cd2394d..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/client/mac/tests/SimpleStringDictionaryTest.mm +++ /dev/null @@ -1,243 +0,0 @@ -// Copyright (c) 2008, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#import "SimpleStringDictionaryTest.h" -#import "SimpleStringDictionary.h" - -using google_breakpad::KeyValueEntry; -using google_breakpad::SimpleStringDictionary; -using google_breakpad::SimpleStringDictionaryIterator; - -@implementation SimpleStringDictionaryTest - -//============================================================================== -- (void)testKeyValueEntry { - KeyValueEntry entry; - - // Verify that initial state is correct - STAssertFalse(entry.IsActive(), @"Initial key value entry is active!"); - STAssertEquals(strlen(entry.GetKey()), (size_t)0, @"Empty key value did not " - @"have length 0"); - STAssertEquals(strlen(entry.GetValue()), (size_t)0, @"Empty key value did not " - @"have length 0"); - - // Try setting a key/value and then verify - entry.SetKeyValue("key1", "value1"); - STAssertEqualCStrings(entry.GetKey(), "key1", @"key was not equal to key1"); - STAssertEqualCStrings(entry.GetValue(), "value1", @"value was not equal"); - - // Try setting a new value - entry.SetValue("value3"); - - // Make sure the new value took - STAssertEqualCStrings(entry.GetValue(), "value3", @"value was not equal"); - - // Make sure the key didn't change - STAssertEqualCStrings(entry.GetKey(), "key1", @"key changed after setting " - @"value!"); - - // Try setting a new key/value and then verify - entry.SetKeyValue("key2", "value2"); - STAssertEqualCStrings(entry.GetKey(), "key2", @"New key was not equal to " - @"key2"); - STAssertEqualCStrings(entry.GetValue(), "value2", @"New value was not equal " - @"to value2"); - - // Clear the entry and verify the key and value are empty strings - entry.Clear(); - STAssertFalse(entry.IsActive(), @"Key value clear did not clear object"); - STAssertEquals(strlen(entry.GetKey()), (size_t)0, @"Length of cleared key " - @"was not 0"); - STAssertEquals(strlen(entry.GetValue()), (size_t)0, @"Length of cleared " - @"value was not 0!"); -} - -- (void)testEmptyKeyValueCombos { - KeyValueEntry entry; - entry.SetKeyValue(NULL, NULL); - STAssertEqualCStrings(entry.GetKey(), "", @"Setting NULL key did not return " - @"empty key!"); - STAssertEqualCStrings(entry.GetValue(), "", @"Setting NULL value did not " - @"set empty string value!"); -} - - -//============================================================================== -- (void)testSimpleStringDictionary { - // Make a new dictionary - SimpleStringDictionary *dict = new SimpleStringDictionary(); - STAssertTrue(dict != NULL, nil); - - // try passing in NULL for key - //dict->SetKeyValue(NULL, "bad"); // causes assert() to fire - - // Set three distinct values on three keys - dict->SetKeyValue("key1", "value1"); - dict->SetKeyValue("key2", "value2"); - dict->SetKeyValue("key3", "value3"); - - STAssertTrue(!strcmp(dict->GetValueForKey("key1"), "value1"), nil); - STAssertTrue(!strcmp(dict->GetValueForKey("key2"), "value2"), nil); - STAssertTrue(!strcmp(dict->GetValueForKey("key3"), "value3"), nil); - STAssertEquals(dict->GetCount(), 3, @"GetCount did not return 3"); - // try an unknown key - STAssertTrue(dict->GetValueForKey("key4") == NULL, nil); - - // try a NULL key - //STAssertTrue(dict->GetValueForKey(NULL) == NULL, nil); // asserts - - // Remove a key - dict->RemoveKey("key3"); - - // Now make sure it's not there anymore - STAssertTrue(dict->GetValueForKey("key3") == NULL, nil); - - // Remove a NULL key - //dict->RemoveKey(NULL); // will cause assert() to fire - - // Remove by setting value to NULL - dict->SetKeyValue("key2", NULL); - - // Now make sure it's not there anymore - STAssertTrue(dict->GetValueForKey("key2") == NULL, nil); -} - -//============================================================================== -// The idea behind this test is to add a bunch of values to the dictionary, -// remove some in the middle, then add a few more in. We then create a -// SimpleStringDictionaryIterator and iterate through the dictionary, taking -// note of the key/value pairs we see. We then verify that it iterates -// through exactly the number of key/value pairs we expect, and that they -// match one-for-one with what we would expect. In all cases we're setting -// key value pairs of the form: -// -// key/value (like key0/value0, key17,value17, etc.) -// -- (void)testSimpleStringDictionaryIterator { - SimpleStringDictionary *dict = new SimpleStringDictionary(); - STAssertTrue(dict != NULL, nil); - - char key[KeyValueEntry::MAX_STRING_STORAGE_SIZE]; - char value[KeyValueEntry::MAX_STRING_STORAGE_SIZE]; - - const int kDictionaryCapacity = SimpleStringDictionary::MAX_NUM_ENTRIES; - const int kPartitionIndex = kDictionaryCapacity - 5; - - // We assume at least this size in the tests below - STAssertTrue(kDictionaryCapacity >= 64, nil); - - // We'll keep track of the number of key/value pairs we think should - // be in the dictionary - int expectedDictionarySize = 0; - - // Set a bunch of key/value pairs like key0/value0, key1/value1, ... - for (int i = 0; i < kPartitionIndex; ++i) { - sprintf(key, "key%d", i); - sprintf(value, "value%d", i); - dict->SetKeyValue(key, value); - } - expectedDictionarySize = kPartitionIndex; - - // set a couple of the keys twice (with the same value) - should be nop - dict->SetKeyValue("key2", "value2"); - dict->SetKeyValue("key4", "value4"); - dict->SetKeyValue("key15", "value15"); - - // Remove some random elements in the middle - dict->RemoveKey("key7"); - dict->RemoveKey("key18"); - dict->RemoveKey("key23"); - dict->RemoveKey("key31"); - expectedDictionarySize -= 4; // we just removed four key/value pairs - - // Set some more key/value pairs like key59/value59, key60/value60, ... - for (int i = kPartitionIndex; i < kDictionaryCapacity; ++i) { - sprintf(key, "key%d", i); - sprintf(value, "value%d", i); - dict->SetKeyValue(key, value); - } - expectedDictionarySize += kDictionaryCapacity - kPartitionIndex; - - // Now create an iterator on the dictionary - SimpleStringDictionaryIterator iter(*dict); - - // We then verify that it iterates through exactly the number of - // key/value pairs we expect, and that they match one-for-one with what we - // would expect. The ordering of the iteration does not matter... - - // used to keep track of number of occurrences found for key/value pairs - int count[kDictionaryCapacity]; - memset(count, 0, sizeof(count)); - - int totalCount = 0; - - const KeyValueEntry *entry; - - while ((entry = iter.Next())) { - totalCount++; - - // Extract keyNumber from a string of the form key - int keyNumber; - sscanf(entry->GetKey(), "key%d", &keyNumber); - - // Extract valueNumber from a string of the form value - int valueNumber; - sscanf(entry->GetValue(), "value%d", &valueNumber); - - // The value number should equal the key number since that's how we set them - STAssertTrue(keyNumber == valueNumber, nil); - - // Key and value numbers should be in proper range: - // 0 <= keyNumber < kDictionaryCapacity - bool isKeyInGoodRange = - (keyNumber >= 0 && keyNumber < kDictionaryCapacity); - bool isValueInGoodRange = - (valueNumber >= 0 && valueNumber < kDictionaryCapacity); - STAssertTrue(isKeyInGoodRange, nil); - STAssertTrue(isValueInGoodRange, nil); - - if (isKeyInGoodRange && isValueInGoodRange) { - ++count[keyNumber]; - } - } - - // Make sure each of the key/value pairs showed up exactly one time, except - // for the ones which we removed. - for (int i = 0; i < kDictionaryCapacity; ++i) { - // Skip over key7, key18, key23, and key31, since we removed them - if (!(i == 7 || i == 18 || i == 23 || i == 31)) { - STAssertTrue(count[i] == 1, nil); - } - } - - // Make sure the number of iterations matches the expected dictionary size. - STAssertTrue(totalCount == expectedDictionarySize, nil); -} - -@end diff --git a/toolkit/crashreporter/google-breakpad/src/client/mac/tests/exception_handler_test.cc b/toolkit/crashreporter/google-breakpad/src/client/mac/tests/exception_handler_test.cc index e19944d0871d..a8cf6968c823 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/mac/tests/exception_handler_test.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/mac/tests/exception_handler_test.cc @@ -610,7 +610,9 @@ TEST_F(ExceptionHandlerTest, InstructionPointerMemoryNullPointer) { ExceptionHandler eh(tempDir.path(), NULL, MDCallback, &fds[1], true, NULL); // Try calling a NULL pointer. typedef void (*void_function)(void); - void_function memory_function = + // Volatile markings are needed to keep Clang from generating invalid + // opcodes. See http://crbug.com/498354 for details. + volatile void_function memory_function = reinterpret_cast(NULL); memory_function(); // not reached diff --git a/toolkit/crashreporter/google-breakpad/src/client/minidump_file_writer.cc b/toolkit/crashreporter/google-breakpad/src/client/minidump_file_writer.cc index 1e18d24ba298..9e905335320a 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/minidump_file_writer.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/minidump_file_writer.cc @@ -40,7 +40,7 @@ #include "client/minidump_file_writer-inl.h" #include "common/linux/linux_libc_support.h" #include "common/string_conversion.h" -#if __linux__ +#if defined(__linux__) && __linux__ #include "third_party/lss/linux_syscall_support.h" #endif @@ -62,7 +62,7 @@ MinidumpFileWriter::~MinidumpFileWriter() { bool MinidumpFileWriter::Open(const char *path) { assert(file_ == -1); -#if __linux__ +#if defined(__linux__) && __linux__ file_ = sys_open(path, O_WRONLY | O_CREAT | O_EXCL, 0600); #else file_ = open(path, O_WRONLY | O_CREAT | O_EXCL, 0600); @@ -84,7 +84,7 @@ bool MinidumpFileWriter::Close() { if (-1 == ftruncate(file_, position_)) { return false; } -#if __linux__ +#if defined(__linux__) && __linux__ result = (sys_close(file_) == 0); #else result = (close(file_) == 0); @@ -253,7 +253,7 @@ bool MinidumpFileWriter::Copy(MDRVA position, const void *src, ssize_t size) { return false; // Seek and write the data -#if __linux__ +#if defined(__linux__) && __linux__ if (sys_lseek(file_, position, SEEK_SET) == static_cast(position)) { if (sys_write(file_, src, size) == size) { #else diff --git a/toolkit/crashreporter/google-breakpad/src/client/minidump_file_writer.h b/toolkit/crashreporter/google-breakpad/src/client/minidump_file_writer.h index 538e85453fd9..ce32b6d0879f 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/minidump_file_writer.h +++ b/toolkit/crashreporter/google-breakpad/src/client/minidump_file_writer.h @@ -74,8 +74,8 @@ public: MinidumpFileWriter(); ~MinidumpFileWriter(); - // Open |path| as the destination of the minidump data. Any existing file - // will be overwritten. + // Open |path| as the destination of the minidump data. If |path| already + // exists, then Open() will fail. // Return true on success, or false on failure. bool Open(const char *path); diff --git a/toolkit/crashreporter/google-breakpad/src/client/solaris/handler/minidump_generator.cc b/toolkit/crashreporter/google-breakpad/src/client/solaris/handler/minidump_generator.cc index fcf0dc751d97..7485025fe45f 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/solaris/handler/minidump_generator.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/solaris/handler/minidump_generator.cc @@ -511,7 +511,7 @@ bool ModuleInfoCallback(const ModuleInfo &module_info, void *context) { int count; snprintf(path, sizeof (path), "/proc/self/path/%s", module_info.name); - if ((count = readlink(path, buf, PATH_MAX - 1)) < 0) + if ((count = readlink(path, buf, PATH_MAX)) < 0) return false; buf[count] = '\0'; diff --git a/toolkit/crashreporter/google-breakpad/src/client/windows/breakpad_client.gyp b/toolkit/crashreporter/google-breakpad/src/client/windows/breakpad_client.gyp index ae26b91df223..64797534282f 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/windows/breakpad_client.gyp +++ b/toolkit/crashreporter/google-breakpad/src/client/windows/breakpad_client.gyp @@ -1,5 +1,4 @@ -# Copyright (c) 2010, Google Inc. -# All rights reserved. +# Copyright 2010 Google Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are @@ -29,7 +28,7 @@ { 'includes': [ - 'build/common.gypi', + '../../build/common.gypi', ], 'targets': [ { diff --git a/toolkit/crashreporter/google-breakpad/src/client/windows/build/internal/release_defaults.gypi b/toolkit/crashreporter/google-breakpad/src/client/windows/build/internal/release_defaults.gypi deleted file mode 100644 index 1bf6bbee4e7f..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/client/windows/build/internal/release_defaults.gypi +++ /dev/null @@ -1,15 +0,0 @@ -{ - 'msvs_settings': { - 'VCCLCompilerTool': { - 'Optimization': '2', - 'StringPooling': 'true', - 'OmitFramePointers': 'true', - }, - 'VCLinkerTool': { - 'LinkIncremental': '1', - 'OptimizeReferences': '2', - 'EnableCOMDATFolding': '2', - 'OptimizeForWindows98': '1', - }, - }, -} diff --git a/toolkit/crashreporter/google-breakpad/src/client/windows/build/internal/release_impl.gypi b/toolkit/crashreporter/google-breakpad/src/client/windows/build/internal/release_impl.gypi deleted file mode 100644 index aff06dc64ce5..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/client/windows/build/internal/release_impl.gypi +++ /dev/null @@ -1,3 +0,0 @@ -{ - 'includes': ['release_defaults.gypi'], -} diff --git a/toolkit/crashreporter/google-breakpad/src/client/windows/build/internal/release_impl_official.gypi b/toolkit/crashreporter/google-breakpad/src/client/windows/build/internal/release_impl_official.gypi deleted file mode 100644 index 18f792828302..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/client/windows/build/internal/release_impl_official.gypi +++ /dev/null @@ -1,21 +0,0 @@ -{ - 'includes': ['release_defaults.gypi'], - 'defines': ['OFFICIAL_BUILD'], - 'msvs_settings': { - 'VCCLCompilerTool': { - 'Optimization': '3', - 'InlineFunctionExpansion': '2', - 'EnableIntrinsicFunctions': 'true', - 'FavorSizeOrSpeed': '2', - 'OmitFramePointers': 'true', - 'EnableFiberSafeOptimizations': 'true', - 'WholeProgramOptimization': 'true', - }, - 'VCLibrarianTool': { - 'AdditionalOptions': ['/ltcg', '/expectedoutputsize:120000000'], - }, - 'VCLinkerTool': { - 'LinkTimeCodeGeneration': '1', - }, - }, -} diff --git a/toolkit/crashreporter/google-breakpad/src/client/windows/build/release.gypi b/toolkit/crashreporter/google-breakpad/src/client/windows/build/release.gypi deleted file mode 100644 index c12526b81307..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/client/windows/build/release.gypi +++ /dev/null @@ -1,19 +0,0 @@ -{ - 'conditions': [ - # Handle build types. - ['buildtype=="Dev"', { - 'includes': ['internal/release_impl.gypi'], - }], - ['buildtype=="Official"', { - 'includes': ['internal/release_impl_official.gypi'], - }], - # TODO(bradnelson): may also need: - # checksenabled - # coverage - # dom_stats - # pgo_instrument - # pgo_optimize - # purify - ], -} - diff --git a/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/client_info.cc b/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/client_info.cc index ca10caa4cdb2..ed3126381139 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/client_info.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/client_info.cc @@ -67,8 +67,10 @@ bool ClientInfo::Initialize() { // The crash_id will be the low order word of the process creation time. FILETIME creation_time, exit_time, kernel_time, user_time; if (GetProcessTimes(process_handle_, &creation_time, &exit_time, - &kernel_time, &user_time)) - crash_id_ = creation_time.dwLowDateTime; + &kernel_time, &user_time)) { + start_time_ = creation_time; + } + crash_id_ = start_time_.dwLowDateTime; dump_requested_handle_ = CreateEvent(NULL, // Security attributes. TRUE, // Manual reset. @@ -206,7 +208,7 @@ bool ClientInfo::PopulateCustomInfo() { } SetProcessUptime(); - return (bytes_count != read_count); + return (bytes_count == read_count); } CustomClientInfo ClientInfo::GetCustomInfo() const { diff --git a/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/client_info.h b/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/client_info.h index 6d4cc29dd36f..6a8fba31f459 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/client_info.h +++ b/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/client_info.h @@ -66,6 +66,9 @@ class ClientInfo { HANDLE dump_requested_handle() const { return dump_requested_handle_; } HANDLE dump_generated_handle() const { return dump_generated_handle_; } DWORD crash_id() const { return crash_id_; } + const CustomClientInfo& custom_client_info() const { + return custom_client_info_; + } void set_dump_request_wait_handle(HANDLE value) { dump_request_wait_handle_ = value; diff --git a/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/crash_generation.gyp b/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/crash_generation.gyp index 23862d758cc0..ba343768abca 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/crash_generation.gyp +++ b/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/crash_generation.gyp @@ -1,5 +1,4 @@ -# Copyright (c) 2010, Google Inc. -# All rights reserved. +# Copyright 2010 Google Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are @@ -29,7 +28,7 @@ { 'includes': [ - '../build/common.gypi', + '../../../build/common.gypi', ], 'targets': [ { diff --git a/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/crash_generation_client.cc b/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/crash_generation_client.cc index b0d3d04df3b6..3ba5d4e4fbde 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/crash_generation_client.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/crash_generation_client.cc @@ -96,14 +96,14 @@ CrashGenerationClient::CrashGenerationClient( const CustomClientInfo* custom_info) : pipe_name_(pipe_name), pipe_handle_(NULL), + custom_info_(), dump_type_(dump_type), - thread_id_(0), - server_process_id_(0), crash_event_(NULL), crash_generated_(NULL), server_alive_(NULL), - exception_pointers_(NULL), - custom_info_() { + server_process_id_(0), + thread_id_(0), + exception_pointers_(NULL) { memset(&assert_info_, 0, sizeof(assert_info_)); if (custom_info) { custom_info_ = *custom_info; @@ -116,14 +116,14 @@ CrashGenerationClient::CrashGenerationClient( const CustomClientInfo* custom_info) : pipe_name_(), pipe_handle_(pipe_handle), + custom_info_(), dump_type_(dump_type), - thread_id_(0), - server_process_id_(0), crash_event_(NULL), crash_generated_(NULL), server_alive_(NULL), - exception_pointers_(NULL), - custom_info_() { + server_process_id_(0), + thread_id_(0), + exception_pointers_(NULL) { memset(&assert_info_, 0, sizeof(assert_info_)); if (custom_info) { custom_info_ = *custom_info; @@ -178,6 +178,10 @@ CrashGenerationClient::~CrashGenerationClient() { // // Returns true if the registration is successful; false otherwise. bool CrashGenerationClient::Register() { + if (IsRegistered()) { + return true; + } + HANDLE pipe = ConnectToServer(); if (!pipe) { return false; diff --git a/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/crash_generation_server.cc b/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/crash_generation_server.cc index 676dec2d27a3..bb0968fe01af 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/crash_generation_server.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/crash_generation_server.cc @@ -85,6 +85,15 @@ static bool IsClientRequestValid(const ProtocolMessage& msg) { msg.assert_info != NULL); } +#ifndef NDEBUG +static bool CheckForIOIncomplete(bool success) { + // We should never get an I/O incomplete since we should not execute this + // unless the operation has finished and the overlapped event is signaled. If + // we do get INCOMPLETE, we have a bug in our code. + return success ? false : (GetLastError() == ERROR_IO_INCOMPLETE); +} +#endif + CrashGenerationServer::CrashGenerationServer( const std::wstring& pipe_name, SECURITY_ATTRIBUTES* pipe_sec_attrs, @@ -112,16 +121,13 @@ CrashGenerationServer::CrashGenerationServer( upload_request_callback_(upload_request_callback), upload_context_(upload_context), generate_dumps_(generate_dumps), - dump_generator_(NULL), + pre_fetch_custom_info_(true), + dump_path_(dump_path ? *dump_path : L""), server_state_(IPC_SERVER_STATE_UNINITIALIZED), shutting_down_(false), overlapped_(), client_info_(NULL) { InitializeCriticalSection(&sync_); - - if (dump_path) { - dump_generator_.reset(new MinidumpGenerator(*dump_path)); - } } // This should never be called from the OnPipeConnected callback. @@ -198,7 +204,7 @@ CrashGenerationServer::~CrashGenerationServer() { if (overlapped_.hEvent) { CloseHandle(overlapped_.hEvent); } - + DeleteCriticalSection(&sync_); } @@ -387,18 +393,13 @@ void CrashGenerationServer::HandleReadingState() { &overlapped_, &bytes_count, FALSE) != FALSE; - DWORD error_code = success ? ERROR_SUCCESS : GetLastError(); - if (success && bytes_count == sizeof(ProtocolMessage)) { EnterStateImmediately(IPC_SERVER_STATE_READ_DONE); - } else { - // We should never get an I/O incomplete since we should not execute this - // unless the Read has finished and the overlapped event is signaled. If - // we do get INCOMPLETE, we have a bug in our code. - assert(error_code != ERROR_IO_INCOMPLETE); - - EnterStateImmediately(IPC_SERVER_STATE_DISCONNECTING); + return; } + + assert(!CheckForIOIncomplete(success)); + EnterStateImmediately(IPC_SERVER_STATE_DISCONNECTING); } // When the server thread serving the client is in the READ_DONE state, @@ -467,18 +468,12 @@ void CrashGenerationServer::HandleWritingState() { &overlapped_, &bytes_count, FALSE) != FALSE; - DWORD error_code = success ? ERROR_SUCCESS : GetLastError(); - if (success) { EnterStateImmediately(IPC_SERVER_STATE_WRITE_DONE); return; } - // We should never get an I/O incomplete since we should not execute this - // unless the Write has finished and the overlapped event is signaled. If - // we do get INCOMPLETE, we have a bug in our code. - assert(error_code != ERROR_IO_INCOMPLETE); - + assert(!CheckForIOIncomplete(success)); EnterStateImmediately(IPC_SERVER_STATE_DISCONNECTING); } @@ -516,8 +511,6 @@ void CrashGenerationServer::HandleReadingAckState() { &overlapped_, &bytes_count, FALSE) != FALSE; - DWORD error_code = success ? ERROR_SUCCESS : GetLastError(); - if (success) { // The connection handshake with the client is now complete; perform // the callback. @@ -550,10 +543,7 @@ void CrashGenerationServer::HandleReadingAckState() { } } } else { - // We should never get an I/O incomplete since we should not execute this - // unless the Read has finished and the overlapped event is signaled. If - // we do get INCOMPLETE, we have a bug in our code. - assert(error_code != ERROR_IO_INCOMPLETE); + assert(!CheckForIOIncomplete(success)); } EnterStateImmediately(IPC_SERVER_STATE_DISCONNECTING); @@ -831,10 +821,12 @@ void CALLBACK CrashGenerationServer::OnPipeConnected(void* context, BOOLEAN) { void CALLBACK CrashGenerationServer::OnDumpRequest(void* context, BOOLEAN) { assert(context); ClientInfo* client_info = reinterpret_cast(context); - client_info->PopulateCustomInfo(); CrashGenerationServer* crash_server = client_info->crash_server(); assert(crash_server); + if (crash_server->pre_fetch_custom_info_) { + client_info->PopulateCustomInfo(); + } crash_server->HandleDumpRequest(*client_info); ResetEvent(client_info->dump_requested_handle()); @@ -921,15 +913,19 @@ bool CrashGenerationServer::GenerateDump(const ClientInfo& client, return false; } - return dump_generator_->WriteMinidump(client.process_handle(), - client.pid(), - client_thread_id, - GetCurrentThreadId(), - client_ex_info, - client.assert_info(), - client.dump_type(), - true, - dump_path); + MinidumpGenerator dump_generator(dump_path_, + client.process_handle(), + client.pid(), + client_thread_id, + GetCurrentThreadId(), + client_ex_info, + client.assert_info(), + client.dump_type(), + true); + if (!dump_generator.GenerateDumpFile(dump_path)) { + return false; + } + return dump_generator.WriteMinidump(); } } // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/crash_generation_server.h b/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/crash_generation_server.h index 4dcc532d0679..0ea90e5100fa 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/crash_generation_server.h +++ b/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/crash_generation_server.h @@ -102,6 +102,10 @@ class CrashGenerationServer { // Returns true if initialization is successful; false otherwise. bool Start(); + void pre_fetch_custom_info(bool do_pre_fetch) { + pre_fetch_custom_info_ = do_pre_fetch; + } + private: // Various states the client can be in during the handshake with // the server. @@ -261,8 +265,11 @@ class CrashGenerationServer { // Whether to generate dumps. bool generate_dumps_; - // Instance of a mini dump generator. - scoped_ptr dump_generator_; + // Wether to populate custom information up-front. + bool pre_fetch_custom_info_; + + // The dump path for the server. + const std::wstring dump_path_; // State of the server in performing the IPC with the client. // Note that since we restrict the pipe to one instance, we diff --git a/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/minidump_generator.cc b/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/minidump_generator.cc index 16887a674ad1..786c9b93720d 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/minidump_generator.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/minidump_generator.cc @@ -38,6 +38,7 @@ #include #include "client/windows/common/auto_critical_section.h" +#include "common/scoped_ptr.h" #include "common/windows/guid_string.h" using std::wstring; @@ -247,17 +248,48 @@ ULONG CALLBACK HandleTraceData::RecordHandleOperations( namespace google_breakpad { -MinidumpGenerator::MinidumpGenerator(const wstring& dump_path) +MinidumpGenerator::MinidumpGenerator( + const std::wstring& dump_path, + const HANDLE process_handle, + const DWORD process_id, + const DWORD thread_id, + const DWORD requesting_thread_id, + EXCEPTION_POINTERS* exception_pointers, + MDRawAssertionInfo* assert_info, + const MINIDUMP_TYPE dump_type, + const bool is_client_pointers) : dbghelp_module_(NULL), - rpcrt4_module_(NULL), - dump_path_(dump_path), write_dump_(NULL), - create_uuid_(NULL) { + rpcrt4_module_(NULL), + create_uuid_(NULL), + process_handle_(process_handle), + process_id_(process_id), + thread_id_(thread_id), + requesting_thread_id_(requesting_thread_id), + exception_pointers_(exception_pointers), + assert_info_(assert_info), + dump_type_(dump_type), + is_client_pointers_(is_client_pointers), + dump_path_(dump_path), + dump_file_(INVALID_HANDLE_VALUE), + full_dump_file_(INVALID_HANDLE_VALUE), + dump_file_is_internal_(false), + full_dump_file_is_internal_(false), + additional_streams_(NULL), + callback_info_(NULL) { InitializeCriticalSection(&module_load_sync_); InitializeCriticalSection(&get_proc_address_sync_); } MinidumpGenerator::~MinidumpGenerator() { + if (dump_file_is_internal_ && dump_file_ != INVALID_HANDLE_VALUE) { + CloseHandle(dump_file_); + } + + if (full_dump_file_is_internal_ && full_dump_file_ != INVALID_HANDLE_VALUE) { + CloseHandle(full_dump_file_); + } + if (dbghelp_module_) { FreeLibrary(dbghelp_module_); } @@ -270,91 +302,28 @@ MinidumpGenerator::~MinidumpGenerator() { DeleteCriticalSection(&module_load_sync_); } -bool MinidumpGenerator::WriteMinidump(HANDLE process_handle, - DWORD process_id, - DWORD thread_id, - DWORD requesting_thread_id, - EXCEPTION_POINTERS* exception_pointers, - MDRawAssertionInfo* assert_info, - MINIDUMP_TYPE dump_type, - bool is_client_pointers, - wstring* dump_path) { - // Just call the full WriteMinidump with NULL as the full_dump_path. - return this->WriteMinidump(process_handle, process_id, thread_id, - requesting_thread_id, exception_pointers, - assert_info, dump_type, is_client_pointers, - dump_path, NULL); -} +bool MinidumpGenerator::WriteMinidump() { + bool full_memory_dump = (dump_type_ & MiniDumpWithFullMemory) != 0; + if (dump_file_ == INVALID_HANDLE_VALUE || + (full_memory_dump && full_dump_file_ == INVALID_HANDLE_VALUE)) { + return false; + } -bool MinidumpGenerator::WriteMinidump(HANDLE process_handle, - DWORD process_id, - DWORD thread_id, - DWORD requesting_thread_id, - EXCEPTION_POINTERS* exception_pointers, - MDRawAssertionInfo* assert_info, - MINIDUMP_TYPE dump_type, - bool is_client_pointers, - wstring* dump_path, - wstring* full_dump_path) { MiniDumpWriteDumpType write_dump = GetWriteDump(); if (!write_dump) { return false; } - wstring dump_file_path; - if (!GenerateDumpFilePath(&dump_file_path)) { - return false; - } - - // If the client requests a full memory dump, we will write a normal mini - // dump and a full memory dump. Both dump files use the same uuid as file - // name prefix. - bool full_memory_dump = (dump_type & MiniDumpWithFullMemory) != 0; - wstring full_dump_file_path; - if (full_memory_dump) { - full_dump_file_path.assign(dump_file_path); - full_dump_file_path.resize(full_dump_file_path.size() - 4); // strip .dmp - full_dump_file_path.append(TEXT("-full.dmp")); - } - - HANDLE dump_file = CreateFile(dump_file_path.c_str(), - GENERIC_WRITE, - 0, - NULL, - CREATE_NEW, - FILE_ATTRIBUTE_NORMAL, - NULL); - - if (dump_file == INVALID_HANDLE_VALUE) { - return false; - } - - HANDLE full_dump_file = INVALID_HANDLE_VALUE; - if (full_memory_dump) { - full_dump_file = CreateFile(full_dump_file_path.c_str(), - GENERIC_WRITE, - 0, - NULL, - CREATE_NEW, - FILE_ATTRIBUTE_NORMAL, - NULL); - - if (full_dump_file == INVALID_HANDLE_VALUE) { - CloseHandle(dump_file); - return false; - } - } - MINIDUMP_EXCEPTION_INFORMATION* dump_exception_pointers = NULL; MINIDUMP_EXCEPTION_INFORMATION dump_exception_info; // Setup the exception information object only if it's a dump // due to an exception. - if (exception_pointers) { + if (exception_pointers_) { dump_exception_pointers = &dump_exception_info; - dump_exception_info.ThreadId = thread_id; - dump_exception_info.ExceptionPointers = exception_pointers; - dump_exception_info.ClientPointers = is_client_pointers; + dump_exception_info.ThreadId = thread_id_; + dump_exception_info.ExceptionPointers = exception_pointers_; + dump_exception_info.ClientPointers = is_client_pointers_; } // Add an MDRawBreakpadInfo stream to the minidump, to provide additional @@ -364,49 +333,54 @@ bool MinidumpGenerator::WriteMinidump(HANDLE process_handle, // can function better with Breakpad-generated dumps when it is present. // The native debugger is not harmed by the presence of this information. MDRawBreakpadInfo breakpad_info = {0}; - if (!is_client_pointers) { + if (!is_client_pointers_) { // Set the dump thread id and requesting thread id only in case of // in-process dump generation. breakpad_info.validity = MD_BREAKPAD_INFO_VALID_DUMP_THREAD_ID | MD_BREAKPAD_INFO_VALID_REQUESTING_THREAD_ID; - breakpad_info.dump_thread_id = thread_id; - breakpad_info.requesting_thread_id = requesting_thread_id; + breakpad_info.dump_thread_id = thread_id_; + breakpad_info.requesting_thread_id = requesting_thread_id_; } - // Leave room in user_stream_array for possible assertion info and handle - // operations streams. - MINIDUMP_USER_STREAM user_stream_array[3]; + int additional_streams_count = additional_streams_ ? + additional_streams_->UserStreamCount : 0; + scoped_array user_stream_array( + new MINIDUMP_USER_STREAM[3 + additional_streams_count]); user_stream_array[0].Type = MD_BREAKPAD_INFO_STREAM; user_stream_array[0].BufferSize = sizeof(breakpad_info); user_stream_array[0].Buffer = &breakpad_info; MINIDUMP_USER_STREAM_INFORMATION user_streams; user_streams.UserStreamCount = 1; - user_streams.UserStreamArray = user_stream_array; + user_streams.UserStreamArray = user_stream_array.get(); - MDRawAssertionInfo* actual_assert_info = assert_info; + MDRawAssertionInfo* actual_assert_info = assert_info_; MDRawAssertionInfo client_assert_info = {{0}}; - if (assert_info) { + if (assert_info_) { // If the assertion info object lives in the client process, // read the memory of the client process. - if (is_client_pointers) { + if (is_client_pointers_) { SIZE_T bytes_read = 0; - if (!ReadProcessMemory(process_handle, - assert_info, + if (!ReadProcessMemory(process_handle_, + assert_info_, &client_assert_info, sizeof(client_assert_info), &bytes_read)) { - CloseHandle(dump_file); - if (full_dump_file != INVALID_HANDLE_VALUE) - CloseHandle(full_dump_file); + if (dump_file_is_internal_) + CloseHandle(dump_file_); + if (full_dump_file_is_internal_ && + full_dump_file_ != INVALID_HANDLE_VALUE) + CloseHandle(full_dump_file_); return false; } if (bytes_read != sizeof(client_assert_info)) { - CloseHandle(dump_file); - if (full_dump_file != INVALID_HANDLE_VALUE) - CloseHandle(full_dump_file); + if (dump_file_is_internal_) + CloseHandle(dump_file_); + if (full_dump_file_is_internal_ && + full_dump_file_ != INVALID_HANDLE_VALUE) + CloseHandle(full_dump_file_); return false; } @@ -419,16 +393,31 @@ bool MinidumpGenerator::WriteMinidump(HANDLE process_handle, ++user_streams.UserStreamCount; } + if (additional_streams_) { + for (size_t i = 0; + i < additional_streams_->UserStreamCount; + i++, user_streams.UserStreamCount++) { + user_stream_array[user_streams.UserStreamCount].Type = + additional_streams_->UserStreamArray[i].Type; + user_stream_array[user_streams.UserStreamCount].BufferSize = + additional_streams_->UserStreamArray[i].BufferSize; + user_stream_array[user_streams.UserStreamCount].Buffer = + additional_streams_->UserStreamArray[i].Buffer; + } + } + // If the process is terminated by STATUS_INVALID_HANDLE exception store - // the trace of operatios for the offending handle value. Do nothing special + // the trace of operations for the offending handle value. Do nothing special // if the client already requested the handle trace to be stored in the dump. HandleTraceData handle_trace_data; - if (exception_pointers && (dump_type & MiniDumpWithHandleData) == 0) { - if (!handle_trace_data.CollectHandleData(process_handle, - exception_pointers)) { - CloseHandle(dump_file); - if (full_dump_file != INVALID_HANDLE_VALUE) - CloseHandle(full_dump_file); + if (exception_pointers_ && (dump_type_ & MiniDumpWithHandleData) == 0) { + if (!handle_trace_data.CollectHandleData(process_handle_, + exception_pointers_)) { + if (dump_file_is_internal_) + CloseHandle(dump_file_); + if (full_dump_file_is_internal_ && + full_dump_file_ != INVALID_HANDLE_VALUE) + CloseHandle(full_dump_file_); return false; } } @@ -436,12 +425,12 @@ bool MinidumpGenerator::WriteMinidump(HANDLE process_handle, bool result_full_memory = true; if (full_memory_dump) { result_full_memory = write_dump( - process_handle, - process_id, - full_dump_file, - static_cast((dump_type & (~MiniDumpNormal)) + process_handle_, + process_id_, + full_dump_file_, + static_cast((dump_type_ & (~MiniDumpNormal)) | MiniDumpWithHandleData), - exception_pointers ? &dump_exception_info : NULL, + exception_pointers_ ? &dump_exception_info : NULL, &user_streams, NULL) != FALSE; } @@ -453,31 +442,79 @@ bool MinidumpGenerator::WriteMinidump(HANDLE process_handle, } bool result_minidump = write_dump( - process_handle, - process_id, - dump_file, - static_cast((dump_type & (~MiniDumpWithFullMemory)) + process_handle_, + process_id_, + dump_file_, + static_cast((dump_type_ & (~MiniDumpWithFullMemory)) | MiniDumpNormal), - exception_pointers ? &dump_exception_info : NULL, + exception_pointers_ ? &dump_exception_info : NULL, &user_streams, - NULL) != FALSE; + callback_info_) != FALSE; - bool result = result_minidump && result_full_memory; + return result_minidump && result_full_memory; +} - CloseHandle(dump_file); - if (full_dump_file != INVALID_HANDLE_VALUE) - CloseHandle(full_dump_file); - - // Store the path of the dump file in the out parameter if dump generation - // succeeded. - if (result && dump_path) { - *dump_path = dump_file_path; - } - if (result && full_memory_dump && full_dump_path) { - *full_dump_path = full_dump_file_path; +bool MinidumpGenerator::GenerateDumpFile(wstring* dump_path) { + // The dump file was already set by handle or this function was previously + // called. + if (dump_file_ != INVALID_HANDLE_VALUE) { + return false; } - return result; + wstring dump_file_path; + if (!GenerateDumpFilePath(&dump_file_path)) { + return false; + } + + dump_file_ = CreateFile(dump_file_path.c_str(), + GENERIC_WRITE, + 0, + NULL, + CREATE_NEW, + FILE_ATTRIBUTE_NORMAL, + NULL); + if (dump_file_ == INVALID_HANDLE_VALUE) { + return false; + } + + dump_file_is_internal_ = true; + *dump_path = dump_file_path; + return true; +} + +bool MinidumpGenerator::GenerateFullDumpFile(wstring* full_dump_path) { + // A full minidump was not requested. + if ((dump_type_ & MiniDumpWithFullMemory) == 0) { + return false; + } + + // The dump file was already set by handle or this function was previously + // called. + if (full_dump_file_ != INVALID_HANDLE_VALUE) { + return false; + } + + wstring full_dump_file_path; + if (!GenerateDumpFilePath(&full_dump_file_path)) { + return false; + } + full_dump_file_path.resize(full_dump_file_path.size() - 4); // strip .dmp + full_dump_file_path.append(TEXT("-full.dmp")); + + full_dump_file_ = CreateFile(full_dump_file_path.c_str(), + GENERIC_WRITE, + 0, + NULL, + CREATE_NEW, + FILE_ATTRIBUTE_NORMAL, + NULL); + if (full_dump_file_ == INVALID_HANDLE_VALUE) { + return false; + } + + full_dump_file_is_internal_ = true; + *full_dump_path = full_dump_file_path; + return true; } HMODULE MinidumpGenerator::GetDbghelpModule() { diff --git a/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/minidump_generator.h b/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/minidump_generator.h old mode 100755 new mode 100644 index 006fec8e211f..a3c123056fa9 --- a/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/minidump_generator.h +++ b/toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/minidump_generator.h @@ -45,37 +45,55 @@ namespace google_breakpad { // the clients to generate minidumps. class MinidumpGenerator { public: - // Creates an instance with the given dump path. - explicit MinidumpGenerator(const std::wstring& dump_path); + // Creates an instance with the given parameters. + // is_client_pointers specifies whether the exception_pointers and + // assert_info point into the process that is being dumped. + // Before calling WriteMinidump on the returned instance a dump file muct be + // specified by a call to either SetDumpFile() or GenerateDumpFile(). + // If a full dump file will be requested via a subsequent call to either + // SetFullDumpFile or GenerateFullDumpFile() dump_type must include + // MiniDumpWithFullMemory. + MinidumpGenerator(const std::wstring& dump_path, + const HANDLE process_handle, + const DWORD process_id, + const DWORD thread_id, + const DWORD requesting_thread_id, + EXCEPTION_POINTERS* exception_pointers, + MDRawAssertionInfo* assert_info, + const MINIDUMP_TYPE dump_type, + const bool is_client_pointers); ~MinidumpGenerator(); + void SetDumpFile(const HANDLE dump_file) { dump_file_ = dump_file; } + void SetFullDumpFile(const HANDLE full_dump_file) { + full_dump_file_ = full_dump_file; + } + + // Generate the name for the dump file that will be written to once + // WriteMinidump() is called. Can only be called once and cannot be called + // if the dump file is set via SetDumpFile(). + bool GenerateDumpFile(std::wstring* dump_path); + + // Generate the name for the full dump file that will be written to once + // WriteMinidump() is called. Cannot be called unless the minidump type + // includes MiniDumpWithFullMemory. Can only be called once and cannot be + // called if the dump file is set via SetFullDumpFile(). + bool GenerateFullDumpFile(std::wstring* full_dump_path); + + void SetAdditionalStreams( + MINIDUMP_USER_STREAM_INFORMATION* additional_streams) { + additional_streams_ = additional_streams; + } + + void SetCallback(MINIDUMP_CALLBACK_INFORMATION* callback_info) { + callback_info_ = callback_info; + } + // Writes the minidump with the given parameters. Stores the // dump file path in the dump_path parameter if dump generation // succeeds. - bool WriteMinidump(HANDLE process_handle, - DWORD process_id, - DWORD thread_id, - DWORD requesting_thread_id, - EXCEPTION_POINTERS* exception_pointers, - MDRawAssertionInfo* assert_info, - MINIDUMP_TYPE dump_type, - bool is_client_pointers, - std::wstring* dump_path); - - // Writes the minidump with the given parameters. Stores the dump file - // path in the dump_path (and full_dump_path) parameter if dump - // generation succeeds. full_dump_path and dump_path can be NULL. - bool WriteMinidump(HANDLE process_handle, - DWORD process_id, - DWORD thread_id, - DWORD requesting_thread_id, - EXCEPTION_POINTERS* exception_pointers, - MDRawAssertionInfo* assert_info, - MINIDUMP_TYPE dump_type, - bool is_client_pointers, - std::wstring* dump_path, - std::wstring* full_dump_path); + bool WriteMinidump(); private: // Function pointer type for MiniDumpWriteDump, which is looked up @@ -121,9 +139,53 @@ class MinidumpGenerator { // Pointer to the UuidCreate function. UuidCreateType create_uuid_; + // Handle for the process to dump. + HANDLE process_handle_; + + // Process ID for the process to dump. + DWORD process_id_; + + // The crashing thread ID. + DWORD thread_id_; + + // The thread ID which is requesting the dump. + DWORD requesting_thread_id_; + + // Pointer to the exception information for the crash. This may point to an + // address in the crashing process so it should not be dereferenced. + EXCEPTION_POINTERS* exception_pointers_; + + // Assertion info for the report. + MDRawAssertionInfo* assert_info_; + + // Type of minidump to generate. + MINIDUMP_TYPE dump_type_; + + // Specifies whether the exception_pointers_ reference memory in the crashing + // process. + bool is_client_pointers_; + // Folder path to store dump files. std::wstring dump_path_; + // The file where the dump will be written. + HANDLE dump_file_; + + // The file where the full dump will be written. + HANDLE full_dump_file_; + + // Tracks whether the dump file handle is managed externally. + bool dump_file_is_internal_; + + // Tracks whether the full dump file handle is managed externally. + bool full_dump_file_is_internal_; + + // Additional streams to be written to the dump. + MINIDUMP_USER_STREAM_INFORMATION* additional_streams_; + + // The user defined callback for the various stages of the dump process. + MINIDUMP_CALLBACK_INFORMATION* callback_info_; + // Critical section to sychronize action of loading modules dynamically. CRITICAL_SECTION module_load_sync_; diff --git a/toolkit/crashreporter/google-breakpad/src/client/windows/handler/exception_handler.cc b/toolkit/crashreporter/google-breakpad/src/client/windows/handler/exception_handler.cc index 5ce9a46af5cf..b78075dec5a1 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/windows/handler/exception_handler.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/windows/handler/exception_handler.cc @@ -73,7 +73,8 @@ ExceptionHandler::ExceptionHandler(const wstring& dump_path, handler_types, dump_type, pipe_name, - NULL, + NULL, // pipe_handle + NULL, // crash_generation_client custom_info); } @@ -91,10 +92,32 @@ ExceptionHandler::ExceptionHandler(const wstring& dump_path, callback_context, handler_types, dump_type, - NULL, + NULL, // pipe_name pipe_handle, + NULL, // crash_generation_client custom_info); -} +} + +ExceptionHandler::ExceptionHandler( + const wstring& dump_path, + FilterCallback filter, + MinidumpCallback callback, + void* callback_context, + int handler_types, + CrashGenerationClient* crash_generation_client) { + // The dump_type, pipe_name and custom_info that are passed in to Initialize() + // are not used. The ones set in crash_generation_client are used instead. + Initialize(dump_path, + filter, + callback, + callback_context, + handler_types, + MiniDumpNormal, // dump_type - not used + NULL, // pipe_name - not used + NULL, // pipe_handle + crash_generation_client, + NULL); // custom_info - not used +} ExceptionHandler::ExceptionHandler(const wstring &dump_path, FilterCallback filter, @@ -107,20 +130,23 @@ ExceptionHandler::ExceptionHandler(const wstring &dump_path, callback_context, handler_types, MiniDumpNormal, - NULL, - NULL, - NULL); + NULL, // pipe_name + NULL, // pipe_handle + NULL, // crash_generation_client + NULL); // custom_info } -void ExceptionHandler::Initialize(const wstring& dump_path, - FilterCallback filter, - MinidumpCallback callback, - void* callback_context, - int handler_types, - MINIDUMP_TYPE dump_type, - const wchar_t* pipe_name, - HANDLE pipe_handle, - const CustomClientInfo* custom_info) { +void ExceptionHandler::Initialize( + const wstring& dump_path, + FilterCallback filter, + MinidumpCallback callback, + void* callback_context, + int handler_types, + MINIDUMP_TYPE dump_type, + const wchar_t* pipe_name, + HANDLE pipe_handle, + CrashGenerationClient* crash_generation_client, + const CustomClientInfo* custom_info) { LONG instance_count = InterlockedIncrement(&instance_count_); filter_ = filter; callback_ = callback; @@ -148,24 +174,22 @@ void ExceptionHandler::Initialize(const wstring& dump_path, assertion_ = NULL; handler_return_value_ = false; handle_debug_exceptions_ = false; + consume_invalid_handle_exceptions_ = false; - // Attempt to use out-of-process if user has specified a pipe. - if (pipe_name != NULL || pipe_handle != NULL) { - assert(!(pipe_name && pipe_handle)); - - scoped_ptr client; - if (pipe_name) { - client.reset( - new CrashGenerationClient(pipe_name, - dump_type_, - custom_info)); - } else { - client.reset( - new CrashGenerationClient(pipe_handle, - dump_type_, - custom_info)); - } + // Attempt to use out-of-process if user has specified a pipe or a + // crash generation client. + scoped_ptr client; + if (crash_generation_client) { + client.reset(crash_generation_client); + } else if (pipe_name) { + client.reset( + new CrashGenerationClient(pipe_name, dump_type_, custom_info)); + } else if (pipe_handle) { + client.reset( + new CrashGenerationClient(pipe_handle, dump_type_, custom_info)); + } + if (client.get() != NULL) { // If successful in registering with the monitoring process, // there is no need to setup in-process crash generation. if (client->Register()) { @@ -458,6 +482,11 @@ LONG ExceptionHandler::HandleException(EXCEPTION_POINTERS* exinfo) { bool is_debug_exception = (code == EXCEPTION_BREAKPOINT) || (code == EXCEPTION_SINGLE_STEP); + if (code == EXCEPTION_INVALID_HANDLE && + current_handler->consume_invalid_handle_exceptions_) { + return EXCEPTION_CONTINUE_EXECUTION; + } + bool success = false; if (!is_debug_exception || @@ -852,7 +881,7 @@ BOOL CALLBACK ExceptionHandler::MinidumpWriteDumpCallback( callback_context->iter++; return TRUE; } - + // Include all modules. case IncludeModuleCallback: case ModuleCallback: diff --git a/toolkit/crashreporter/google-breakpad/src/client/windows/handler/exception_handler.gyp b/toolkit/crashreporter/google-breakpad/src/client/windows/handler/exception_handler.gyp index 77293627a50f..c5733277df29 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/windows/handler/exception_handler.gyp +++ b/toolkit/crashreporter/google-breakpad/src/client/windows/handler/exception_handler.gyp @@ -1,5 +1,4 @@ -# Copyright (c) 2010, Google Inc. -# All rights reserved. +# Copyright 2010 Google Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are @@ -29,7 +28,7 @@ { 'includes': [ - '../build/common.gypi', + '../../../build/common.gypi', ], 'targets': [ { diff --git a/toolkit/crashreporter/google-breakpad/src/client/windows/handler/exception_handler.h b/toolkit/crashreporter/google-breakpad/src/client/windows/handler/exception_handler.h index b99f999937df..e3cd8146b3b0 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/windows/handler/exception_handler.h +++ b/toolkit/crashreporter/google-breakpad/src/client/windows/handler/exception_handler.h @@ -61,9 +61,9 @@ #include #include -#pragma warning( push ) +#pragma warning(push) // Disable exception handler warnings. -#pragma warning( disable : 4530 ) +#pragma warning(disable:4530) #include #include @@ -195,6 +195,25 @@ class ExceptionHandler { HANDLE pipe_handle, const CustomClientInfo* custom_info); + // ExceptionHandler that ENSURES out-of-process dump generation. Expects a + // crash generation client that is already registered with a crash generation + // server. Takes ownership of the passed-in crash_generation_client. + // + // Usage example: + // crash_generation_client = new CrashGenerationClient(..); + // if (crash_generation_client->Register()) { + // // Registration with the crash generation server succeeded. + // // Out-of-process dump generation is guaranteed. + // g_handler = new ExceptionHandler(.., crash_generation_client, ..); + // return true; + // } + ExceptionHandler(const wstring& dump_path, + FilterCallback filter, + MinidumpCallback callback, + void* callback_context, + int handler_types, + CrashGenerationClient* crash_generation_client); + ~ExceptionHandler(); // Get and set the minidump path. @@ -244,6 +263,15 @@ class ExceptionHandler { handle_debug_exceptions_ = handle_debug_exceptions; } + // Controls behavior of EXCEPTION_INVALID_HANDLE. + bool get_consume_invalid_handle_exceptions() const { + return consume_invalid_handle_exceptions_; + } + void set_consume_invalid_handle_exceptions( + bool consume_invalid_handle_exceptions) { + consume_invalid_handle_exceptions_ = consume_invalid_handle_exceptions; + } + // Returns whether out-of-process dump generation is used or not. bool IsOutOfProcess() const { return crash_generation_client_.get() != NULL; } @@ -264,6 +292,7 @@ class ExceptionHandler { MINIDUMP_TYPE dump_type, const wchar_t* pipe_name, HANDLE pipe_handle, + CrashGenerationClient* crash_generation_client, const CustomClientInfo* custom_info); // Function pointer type for MiniDumpWriteDump, which is looked up @@ -452,6 +481,10 @@ class ExceptionHandler { // to not interfere with debuggers. bool handle_debug_exceptions_; + // If true, the handler will consume any EXCEPTION_INVALID_HANDLE exceptions. + // Leave this false (the default) to handle these exceptions as normal. + bool consume_invalid_handle_exceptions_; + // Callers can request additional memory regions to be included in // the dump. AppMemoryList app_memory_info_; @@ -475,7 +508,7 @@ class ExceptionHandler { static CRITICAL_SECTION handler_stack_critical_section_; // The number of instances of this class. - volatile static LONG instance_count_; + static volatile LONG instance_count_; // disallow copy ctor and operator= explicit ExceptionHandler(const ExceptionHandler &); @@ -484,6 +517,6 @@ class ExceptionHandler { } // namespace google_breakpad -#pragma warning( pop ) +#pragma warning(pop) #endif // CLIENT_WINDOWS_HANDLER_EXCEPTION_HANDLER_H__ diff --git a/toolkit/crashreporter/google-breakpad/src/client/windows/sender/crash_report_sender.gyp b/toolkit/crashreporter/google-breakpad/src/client/windows/sender/crash_report_sender.gyp index e4db3a86cede..dc8583a0afd8 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/windows/sender/crash_report_sender.gyp +++ b/toolkit/crashreporter/google-breakpad/src/client/windows/sender/crash_report_sender.gyp @@ -1,5 +1,4 @@ -# Copyright (c) 2010, Google Inc. -# All rights reserved. +# Copyright 2010 Google Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are @@ -29,7 +28,7 @@ { 'includes': [ - '../build/common.gypi', + '../../../build/common.gypi', ], 'targets': [ { diff --git a/toolkit/crashreporter/google-breakpad/src/client/windows/tests/crash_generation_app/crash_generation_app.cc b/toolkit/crashreporter/google-breakpad/src/client/windows/tests/crash_generation_app/crash_generation_app.cc index e36c1d1e181e..0d837e521d0b 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/windows/tests/crash_generation_app/crash_generation_app.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/windows/tests/crash_generation_app/crash_generation_app.cc @@ -73,7 +73,7 @@ BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); -static int kCustomInfoCount = 2; +static size_t kCustomInfoCount = 2; static CustomInfoEntry kCustomInfoEntries[] = { CustomInfoEntry(L"prod", L"CrashTestApp"), CustomInfoEntry(L"ver", L"1.0"), @@ -197,8 +197,8 @@ bool ShowDumpResults(const wchar_t* dump_path, return succeeded; } -static void _cdecl ShowClientConnected(void* context, - const ClientInfo* client_info) { +static void ShowClientConnected(void* context, + const ClientInfo* client_info) { TCHAR* line = new TCHAR[kMaximumLineLength]; line[0] = _T('\0'); int result = swprintf_s(line, @@ -214,9 +214,9 @@ static void _cdecl ShowClientConnected(void* context, QueueUserWorkItem(AppendTextWorker, line, WT_EXECUTEDEFAULT); } -static void _cdecl ShowClientCrashed(void* context, - const ClientInfo* client_info, - const wstring* dump_path) { +static void ShowClientCrashed(void* context, + const ClientInfo* client_info, + const wstring* dump_path) { TCHAR* line = new TCHAR[kMaximumLineLength]; line[0] = _T('\0'); int result = swprintf_s(line, @@ -259,8 +259,8 @@ static void _cdecl ShowClientCrashed(void* context, QueueUserWorkItem(AppendTextWorker, line, WT_EXECUTEDEFAULT); } -static void _cdecl ShowClientExited(void* context, - const ClientInfo* client_info) { +static void ShowClientExited(void* context, + const ClientInfo* client_info) { TCHAR* line = new TCHAR[kMaximumLineLength]; line[0] = _T('\0'); int result = swprintf_s(line, @@ -283,6 +283,12 @@ void CrashServerStart() { } std::wstring dump_path = L"C:\\Dumps\\"; + + if (_wmkdir(dump_path.c_str()) && (errno != EEXIST)) { + MessageBoxW(NULL, L"Unable to create dump directory", L"Dumper", MB_OK); + return; + } + crash_server = new CrashGenerationServer(kPipeName, NULL, ShowClientConnected, @@ -345,9 +351,9 @@ void CleanUp() { // Processes messages for the main window. // -// WM_COMMAND - process the application menu. -// WM_PAINT - Paint the main window. -// WM_DESTROY - post a quit message and return. +// WM_COMMAND - process the application menu. +// WM_PAINT - Paint the main window. +// WM_DESTROY - post a quit message and return. LRESULT CALLBACK WndProc(HWND wnd, UINT message, WPARAM w_param, @@ -357,13 +363,7 @@ LRESULT CALLBACK WndProc(HWND wnd, PAINTSTRUCT ps; HDC hdc; -#pragma warning(push) -#pragma warning(disable:4312) - // Disable warning C4312: 'type cast' : conversion from 'LONG' to - // 'HINSTANCE' of greater size. - // The value returned by GetwindowLong in the case below returns unsigned. - HINSTANCE instance = (HINSTANCE)GetWindowLong(wnd, GWL_HINSTANCE); -#pragma warning(pop) + HINSTANCE instance = (HINSTANCE)GetWindowLongPtr(wnd, GWLP_HINSTANCE); switch (message) { case WM_COMMAND: @@ -415,16 +415,16 @@ LRESULT CALLBACK WndProc(HWND wnd, instance, NULL); break; - case WM_SIZE: - // Make the edit control the size of the window's client area. - MoveWindow(client_status_edit_box, + case WM_SIZE: + // Make the edit control the size of the window's client area. + MoveWindow(client_status_edit_box, 0, 0, LOWORD(l_param), // width of client area. HIWORD(l_param), // height of client area. TRUE); // repaint window. break; - case WM_SETFOCUS: + case WM_SETFOCUS: SetFocus(client_status_edit_box); break; case WM_PAINT: @@ -501,7 +501,7 @@ int APIENTRY _tWinMain(HINSTANCE instance, MyRegisterClass(instance); // Perform application initialization. - if (!InitInstance (instance, command_show)) { + if (!InitInstance(instance, command_show)) { return FALSE; } @@ -518,5 +518,5 @@ int APIENTRY _tWinMain(HINSTANCE instance, } } - return (int)msg.wParam; + return static_cast(msg.wParam); } diff --git a/toolkit/crashreporter/google-breakpad/src/client/windows/tests/crash_generation_app/crash_generation_app.gyp b/toolkit/crashreporter/google-breakpad/src/client/windows/tests/crash_generation_app/crash_generation_app.gyp index b5dabc54ff63..3ce307da0d32 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/windows/tests/crash_generation_app/crash_generation_app.gyp +++ b/toolkit/crashreporter/google-breakpad/src/client/windows/tests/crash_generation_app/crash_generation_app.gyp @@ -1,5 +1,4 @@ -# Copyright (c) 2010, Google Inc. -# All rights reserved. +# Copyright 2010 Google Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are @@ -29,7 +28,7 @@ { 'includes': [ - '../../build/common.gypi', + '../../../../build/common.gypi', ], 'targets': [ { @@ -45,6 +44,9 @@ 'resource.h', 'small.ico', ], + 'libraries': [ + 'user32.lib', + ], 'dependencies': [ '../../breakpad_client.gyp:common', '../../crash_generation/crash_generation.gyp:crash_generation_server', diff --git a/toolkit/crashreporter/google-breakpad/src/client/windows/unittests/client_tests.gyp b/toolkit/crashreporter/google-breakpad/src/client/windows/unittests/client_tests.gyp index 6dc9fe717938..b13603ef44cd 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/windows/unittests/client_tests.gyp +++ b/toolkit/crashreporter/google-breakpad/src/client/windows/unittests/client_tests.gyp @@ -1,5 +1,4 @@ -# Copyright (c) 2010, Google Inc. -# All rights reserved. +# Copyright 2010 Google Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are @@ -29,7 +28,7 @@ { 'includes': [ - '../build/common.gypi', + '../../../build/common.gypi', ], 'targets': [ { @@ -69,9 +68,12 @@ 'sources': [ '<(DEPTH)/common/string_conversion.cc', '<(DEPTH)/processor/basic_code_modules.cc', + '<(DEPTH)/processor/dump_context.cc', + '<(DEPTH)/processor/dump_object.cc', '<(DEPTH)/processor/logging.cc', '<(DEPTH)/processor/minidump.cc', '<(DEPTH)/processor/pathname_stripper.cc', + '<(DEPTH)/processor/proc_maps_linux.cc', ] } ], diff --git a/toolkit/crashreporter/google-breakpad/src/client/windows/unittests/crash_generation_server_test.cc b/toolkit/crashreporter/google-breakpad/src/client/windows/unittests/crash_generation_server_test.cc index cf95d43f00ac..b7b2b84f2d10 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/windows/unittests/crash_generation_server_test.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/windows/unittests/crash_generation_server_test.cc @@ -50,9 +50,8 @@ const DWORD kPipeFlagsAndAttributes = SECURITY_IDENTIFICATION | const DWORD kPipeMode = PIPE_READMODE_MESSAGE; -int kCustomInfoCount = 2; - -google_breakpad::CustomInfoEntry kCustomInfoEntries[] = { +#define arraysize(f) (sizeof(f) / sizeof(*f)) +const google_breakpad::CustomInfoEntry kCustomInfoEntries[] = { google_breakpad::CustomInfoEntry(L"prod", L"CrashGenerationServerTest"), google_breakpad::CustomInfoEntry(L"ver", L"1.0"), }; @@ -165,7 +164,7 @@ class CrashGenerationServerTest : public ::testing::Test { } google_breakpad::CustomClientInfo custom_info = {kCustomInfoEntries, - kCustomInfoCount}; + arraysize(kCustomInfoEntries)}; google_breakpad::ProtocolMessage msg( fault_type == SEND_INVALID_REGISTRATION ? diff --git a/toolkit/crashreporter/google-breakpad/src/client/windows/unittests/exception_handler_death_test.cc b/toolkit/crashreporter/google-breakpad/src/client/windows/unittests/exception_handler_death_test.cc index c4cb99300520..079ca3d6fd37 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/windows/unittests/exception_handler_death_test.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/windows/unittests/exception_handler_death_test.cc @@ -54,6 +54,11 @@ const char kFailureIndicator[] = "failure"; // Utility function to test for a path's existence. BOOL DoesPathExist(const TCHAR *path_name); +enum OutOfProcGuarantee { + OUT_OF_PROC_GUARANTEED, + OUT_OF_PROC_BEST_EFFORT, +}; + class ExceptionHandlerDeathTest : public ::testing::Test { protected: // Member variable for each test that they can use @@ -62,7 +67,7 @@ class ExceptionHandlerDeathTest : public ::testing::Test { // Actually constructs a temp path name. virtual void SetUp(); // A helper method that tests can use to crash. - void DoCrashAccessViolation(); + void DoCrashAccessViolation(const OutOfProcGuarantee out_of_proc_guarantee); void DoCrashPureVirtualCall(); }; @@ -119,17 +124,19 @@ TEST_F(ExceptionHandlerDeathTest, InProcTest) { // the semantics of the exception handler being inherited/not // inherited across CreateProcess(). ASSERT_TRUE(DoesPathExist(temp_path_)); - google_breakpad::ExceptionHandler *exc = - new google_breakpad::ExceptionHandler( - temp_path_, NULL, &MinidumpWrittenCallback, NULL, - google_breakpad::ExceptionHandler::HANDLER_ALL); + scoped_ptr exc( + new google_breakpad::ExceptionHandler( + temp_path_, + NULL, + &MinidumpWrittenCallback, + NULL, + google_breakpad::ExceptionHandler::HANDLER_ALL)); // Disable GTest SEH handler testing::DisableExceptionHandlerInScope disable_exception_handler; int *i = NULL; ASSERT_DEATH((*i)++, kSuccessIndicator); - delete exc; } static bool gDumpCallbackCalled = false; @@ -140,12 +147,35 @@ void clientDumpCallback(void *dump_context, gDumpCallbackCalled = true; } -void ExceptionHandlerDeathTest::DoCrashAccessViolation() { - google_breakpad::ExceptionHandler *exc = - new google_breakpad::ExceptionHandler( - temp_path_, NULL, NULL, NULL, - google_breakpad::ExceptionHandler::HANDLER_ALL, MiniDumpNormal, kPipeName, - NULL); +void ExceptionHandlerDeathTest::DoCrashAccessViolation( + const OutOfProcGuarantee out_of_proc_guarantee) { + scoped_ptr exc; + + if (out_of_proc_guarantee == OUT_OF_PROC_GUARANTEED) { + google_breakpad::CrashGenerationClient *client = + new google_breakpad::CrashGenerationClient(kPipeName, + MiniDumpNormal, + NULL); // custom_info + ASSERT_TRUE(client->Register()); + exc.reset(new google_breakpad::ExceptionHandler( + temp_path_, + NULL, // filter + NULL, // callback + NULL, // callback_context + google_breakpad::ExceptionHandler::HANDLER_ALL, + client)); + } else { + ASSERT_TRUE(out_of_proc_guarantee == OUT_OF_PROC_BEST_EFFORT); + exc.reset(new google_breakpad::ExceptionHandler( + temp_path_, + NULL, // filter + NULL, // callback + NULL, // callback_context + google_breakpad::ExceptionHandler::HANDLER_ALL, + MiniDumpNormal, + kPipeName, + NULL)); // custom_info + } // Disable GTest SEH handler testing::DisableExceptionHandlerInScope disable_exception_handler; @@ -170,15 +200,38 @@ TEST_F(ExceptionHandlerDeathTest, OutOfProcTest) { ASSERT_TRUE(DoesPathExist(temp_path_)); std::wstring dump_path(temp_path_); google_breakpad::CrashGenerationServer server( - kPipeName, NULL, NULL, NULL, &clientDumpCallback, NULL, NULL, NULL, NULL, - NULL, true, &dump_path); + kPipeName, NULL, NULL, NULL, &clientDumpCallback, NULL, NULL, NULL, NULL, + NULL, true, &dump_path); // This HAS to be EXPECT_, because when this test case is executed in the // child process, the server registration will fail due to the named pipe // being the same. EXPECT_TRUE(server.Start()); - EXPECT_FALSE(gDumpCallbackCalled); - ASSERT_DEATH(this->DoCrashAccessViolation(), ""); + gDumpCallbackCalled = false; + ASSERT_DEATH(this->DoCrashAccessViolation(OUT_OF_PROC_BEST_EFFORT), ""); + EXPECT_TRUE(gDumpCallbackCalled); +} + +TEST_F(ExceptionHandlerDeathTest, OutOfProcGuaranteedTest) { + // This is similar to the previous test (OutOfProcTest). The only difference + // is that in this test, the crash generation client is created and registered + // with the crash generation server outside of the ExceptionHandler + // constructor which allows breakpad users to opt out of the default + // in-process dump generation when the registration with the crash generation + // server fails. + + ASSERT_TRUE(DoesPathExist(temp_path_)); + std::wstring dump_path(temp_path_); + google_breakpad::CrashGenerationServer server( + kPipeName, NULL, NULL, NULL, &clientDumpCallback, NULL, NULL, NULL, NULL, + NULL, true, &dump_path); + + // This HAS to be EXPECT_, because when this test case is executed in the + // child process, the server registration will fail due to the named pipe + // being the same. + EXPECT_TRUE(server.Start()); + gDumpCallbackCalled = false; + ASSERT_DEATH(this->DoCrashAccessViolation(OUT_OF_PROC_GUARANTEED), ""); EXPECT_TRUE(gDumpCallbackCalled); } @@ -249,17 +302,22 @@ wstring find_minidump_in_directory(const wstring &directory) { filename = directory + L"\\" + find_data.cFileName; break; } - } while(FindNextFile(find_handle, &find_data)); + } while (FindNextFile(find_handle, &find_data)); FindClose(find_handle); return filename; } +#ifndef ADDRESS_SANITIZER + TEST_F(ExceptionHandlerDeathTest, InstructionPointerMemory) { ASSERT_TRUE(DoesPathExist(temp_path_)); - google_breakpad::ExceptionHandler *exc = + scoped_ptr exc( new google_breakpad::ExceptionHandler( - temp_path_, NULL, NULL, NULL, - google_breakpad::ExceptionHandler::HANDLER_ALL); + temp_path_, + NULL, + NULL, + NULL, + google_breakpad::ExceptionHandler::HANDLER_ALL)); // Disable GTest SEH handler testing::DisableExceptionHandlerInScope disable_exception_handler; @@ -280,7 +338,7 @@ TEST_F(ExceptionHandlerDeathTest, InstructionPointerMemory) { // minidump should contain 128 bytes on either side of the // instruction pointer. memcpy(memory + kOffset, instructions, sizeof(instructions)); - + // Now execute the instructions, which should crash. typedef void (*void_function)(void); void_function memory_function = @@ -329,11 +387,10 @@ TEST_F(ExceptionHandlerDeathTest, InstructionPointerMemory) { uint8_t suffix_bytes[kMemorySize - kOffset - sizeof(instructions)]; memset(prefix_bytes, 0, sizeof(prefix_bytes)); memset(suffix_bytes, 0, sizeof(suffix_bytes)); - EXPECT_TRUE(memcmp(bytes, prefix_bytes, sizeof(prefix_bytes)) == 0); - EXPECT_TRUE(memcmp(bytes + kOffset, instructions, - sizeof(instructions)) == 0); - EXPECT_TRUE(memcmp(bytes + kOffset + sizeof(instructions), - suffix_bytes, sizeof(suffix_bytes)) == 0); + EXPECT_EQ(0, memcmp(bytes, prefix_bytes, sizeof(prefix_bytes))); + EXPECT_EQ(0, memcmp(bytes + kOffset, instructions, sizeof(instructions))); + EXPECT_EQ(0, memcmp(bytes + kOffset + sizeof(instructions), + suffix_bytes, sizeof(suffix_bytes))); } DeleteFileW(minidump_filename_wide.c_str()); @@ -341,10 +398,13 @@ TEST_F(ExceptionHandlerDeathTest, InstructionPointerMemory) { TEST_F(ExceptionHandlerDeathTest, InstructionPointerMemoryMinBound) { ASSERT_TRUE(DoesPathExist(temp_path_)); - google_breakpad::ExceptionHandler *exc = + scoped_ptr exc( new google_breakpad::ExceptionHandler( - temp_path_, NULL, NULL, NULL, - google_breakpad::ExceptionHandler::HANDLER_ALL); + temp_path_, + NULL, + NULL, + NULL, + google_breakpad::ExceptionHandler::HANDLER_ALL)); // Disable GTest SEH handler testing::DisableExceptionHandlerInScope disable_exception_handler; @@ -373,7 +433,7 @@ TEST_F(ExceptionHandlerDeathTest, InstructionPointerMemoryMinBound) { // minidump should contain 128 bytes on either side of the // instruction pointer. memcpy(memory + kOffset, instructions, sizeof(instructions)); - + // Now execute the instructions, which should crash. typedef void (*void_function)(void); void_function memory_function = @@ -431,10 +491,13 @@ TEST_F(ExceptionHandlerDeathTest, InstructionPointerMemoryMinBound) { TEST_F(ExceptionHandlerDeathTest, InstructionPointerMemoryMaxBound) { ASSERT_TRUE(DoesPathExist(temp_path_)); - google_breakpad::ExceptionHandler *exc = + scoped_ptr exc( new google_breakpad::ExceptionHandler( - temp_path_, NULL, NULL, NULL, - google_breakpad::ExceptionHandler::HANDLER_ALL); + temp_path_, + NULL, + NULL, + NULL, + google_breakpad::ExceptionHandler::HANDLER_ALL)); // Disable GTest SEH handler testing::DisableExceptionHandlerInScope disable_exception_handler; @@ -458,7 +521,7 @@ TEST_F(ExceptionHandlerDeathTest, InstructionPointerMemoryMaxBound) { // Write some instructions that will crash. memcpy(memory + kOffset, instructions, sizeof(instructions)); - + // Now execute the instructions, which should crash. typedef void (*void_function)(void); void_function memory_function = @@ -506,12 +569,14 @@ TEST_F(ExceptionHandlerDeathTest, InstructionPointerMemoryMaxBound) { uint8_t prefix_bytes[kPrefixSize]; memset(prefix_bytes, 0, sizeof(prefix_bytes)); - EXPECT_TRUE(memcmp(bytes, prefix_bytes, sizeof(prefix_bytes)) == 0); - EXPECT_TRUE(memcmp(bytes + kPrefixSize, - instructions, sizeof(instructions)) == 0); + EXPECT_EQ(0, memcmp(bytes, prefix_bytes, sizeof(prefix_bytes))); + EXPECT_EQ(0, memcmp(bytes + kPrefixSize, + instructions, sizeof(instructions))); } DeleteFileW(minidump_filename_wide.c_str()); } +#endif // !ADDRESS_SANITIZER + } // namespace diff --git a/toolkit/crashreporter/google-breakpad/src/client/windows/unittests/exception_handler_nesting_test.cc b/toolkit/crashreporter/google-breakpad/src/client/windows/unittests/exception_handler_nesting_test.cc old mode 100755 new mode 100644 index 0cf300137bdd..3ae1d7cd0525 --- a/toolkit/crashreporter/google-breakpad/src/client/windows/unittests/exception_handler_nesting_test.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/windows/unittests/exception_handler_nesting_test.cc @@ -149,7 +149,7 @@ void InstallExceptionHandlerAndCrash(bool install_filter, ASSERT_TRUE(DoesPathExist(temp_path)); google_breakpad::ExceptionHandler exc( temp_path, - install_filter ? + install_filter ? (filter_return_value ? &CrashHandlerFilter : &CrashHandlerFilter) : @@ -178,7 +178,7 @@ TEST(AssertDeathSanity, Regex) { std::string(kFoo) + std::string(kEndOfLine)); - ASSERT_DEATH(DoCrash(kBar), + ASSERT_DEATH(DoCrash(kBar), std::string(kStartOfLine) + std::string(kBar) + std::string(kEndOfLine)); diff --git a/toolkit/crashreporter/google-breakpad/src/client/windows/unittests/exception_handler_test.cc b/toolkit/crashreporter/google-breakpad/src/client/windows/unittests/exception_handler_test.cc index 7b50e3011dd0..55275323ee3a 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/windows/unittests/exception_handler_test.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/windows/unittests/exception_handler_test.cc @@ -390,7 +390,7 @@ TEST_F(ExceptionHandlerTest, WriteMinidumpTest) { // Read the minidump and verify some info. Minidump minidump(minidump_filename); ASSERT_TRUE(minidump.Read()); - //TODO(ted): more comprehensive tests... + // TODO(ted): more comprehensive tests... } // Test that an additional memory region can be included in the minidump. diff --git a/toolkit/crashreporter/google-breakpad/src/client/windows/unittests/exception_handler_test.h b/toolkit/crashreporter/google-breakpad/src/client/windows/unittests/exception_handler_test.h old mode 100755 new mode 100644 diff --git a/toolkit/crashreporter/google-breakpad/src/client/windows/unittests/minidump_test.cc b/toolkit/crashreporter/google-breakpad/src/client/windows/unittests/minidump_test.cc index 62f212f80f3a..8d2d726c4961 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/windows/unittests/minidump_test.cc +++ b/toolkit/crashreporter/google-breakpad/src/client/windows/unittests/minidump_test.cc @@ -104,19 +104,19 @@ class MinidumpTest: public testing::Test { &ctx_record, }; - MinidumpGenerator generator(dump_path_); - + MinidumpGenerator generator(dump_path_, + ::GetCurrentProcess(), + ::GetCurrentProcessId(), + ::GetCurrentThreadId(), + ::GetCurrentThreadId(), + &ex_ptrs, + NULL, + static_cast(flags), + TRUE); + generator.GenerateDumpFile(&dump_file_); + generator.GenerateFullDumpFile(&full_dump_file_); // And write a dump - bool result = generator.WriteMinidump(::GetCurrentProcess(), - ::GetCurrentProcessId(), - ::GetCurrentThreadId(), - ::GetCurrentThreadId(), - &ex_ptrs, - NULL, - static_cast(flags), - TRUE, - &dump_file_, - &full_dump_file_); + bool result = generator.WriteMinidump(); return result == TRUE; } @@ -161,7 +161,8 @@ bool HasFileInfo(const std::wstring& file_path) { } TEST_F(MinidumpTest, Version) { - API_VERSION* version = ::ImagehlpApiVersion(); + // Loads DbgHelp.dll in process + ImagehlpApiVersion(); HMODULE dbg_help = ::GetModuleHandle(L"dbghelp.dll"); ASSERT_TRUE(dbg_help != NULL); diff --git a/toolkit/crashreporter/google-breakpad/src/client/windows/unittests/testing.gyp b/toolkit/crashreporter/google-breakpad/src/client/windows/unittests/testing.gyp index 3234f46c1178..141d0ed0c825 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/windows/unittests/testing.gyp +++ b/toolkit/crashreporter/google-breakpad/src/client/windows/unittests/testing.gyp @@ -1,5 +1,4 @@ -# Copyright (c) 2010, Google Inc. -# All rights reserved. +# Copyright 2010 Google Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are @@ -29,7 +28,7 @@ { 'includes': [ - '../build/common.gypi', + '../../../build/common.gypi', ], 'target_defaults': { }, diff --git a/toolkit/crashreporter/google-breakpad/src/common/Makefile.in b/toolkit/crashreporter/google-breakpad/src/common/Makefile.in index 5399134c661c..2869526d3339 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/Makefile.in +++ b/toolkit/crashreporter/google-breakpad/src/common/Makefile.in @@ -2,8 +2,16 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. -ifeq ($(OS_TARGET),Android) +ifeq (Android,$(OS_TARGET)) +ifeq (gonk,$(MOZ_WIDGET_TOOLKIT)) +TARGET_LOCAL_INCLUDES += -I$(topsrcdir)/toolkit/crashreporter/gonk-include/ +else TARGET_LOCAL_INCLUDES += -I$(topsrcdir)/toolkit/crashreporter/google-breakpad/src/common/android/include/ endif +endif include $(topsrcdir)/config/rules.mk + +# memory.h in this dir breaks things if -I$(srcdir) gets added, since memory.h +# is also a system header and the copy here winds up getting included instead. +INCLUDES := $(LOCAL_INCLUDES) -I$(DIST)/include diff --git a/toolkit/crashreporter/google-breakpad/src/common/android/breakpad_getcontext.S b/toolkit/crashreporter/google-breakpad/src/common/android/breakpad_getcontext.S index 13ccd46b4d8f..fd6326adfe3c 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/android/breakpad_getcontext.S +++ b/toolkit/crashreporter/google-breakpad/src/common/android/breakpad_getcontext.S @@ -34,7 +34,7 @@ /* int getcontext (ucontext_t *ucp) */ -#ifdef __arm__ +#if defined(__arm__) .text .global breakpad_getcontext @@ -50,7 +50,7 @@ breakpad_getcontext: /* r12 is a scratch register, don't save it */ - /* Save sp and lr explicitely. */ + /* Save sp and lr explicitly. */ /* - sp can't be stored with stmia in Thumb-2 */ /* - STM instructions that store sp and pc are deprecated in ARM */ str sp, [r0, #(MCONTEXT_GREGS_OFFSET + 13*4)] @@ -59,7 +59,7 @@ breakpad_getcontext: /* Save the caller's address in 'pc' */ str lr, [r0, #(MCONTEXT_GREGS_OFFSET + 15*4)] - /* Save ucontext_t* pointer accross next call */ + /* Save ucontext_t* pointer across next call */ mov r4, r0 /* Call sigprocmask(SIG_BLOCK, NULL, &(ucontext->uc_sigmask)) */ @@ -88,6 +88,93 @@ breakpad_getcontext: .fnend .size breakpad_getcontext, . - breakpad_getcontext +#elif defined(__aarch64__) + +#define _NSIG 64 +#define __NR_rt_sigprocmask 135 + + .text + .global breakpad_getcontext + .hidden breakpad_getcontext + .type breakpad_getcontext, #function + .align 4 + .cfi_startproc +breakpad_getcontext: + + /* The saved context will return to the getcontext() call point + with a return value of 0 */ + str xzr, [x0, MCONTEXT_GREGS_OFFSET + 0 * REGISTER_SIZE] + + stp x18, x19, [x0, MCONTEXT_GREGS_OFFSET + 18 * REGISTER_SIZE] + stp x20, x21, [x0, MCONTEXT_GREGS_OFFSET + 20 * REGISTER_SIZE] + stp x22, x23, [x0, MCONTEXT_GREGS_OFFSET + 22 * REGISTER_SIZE] + stp x24, x25, [x0, MCONTEXT_GREGS_OFFSET + 24 * REGISTER_SIZE] + stp x26, x27, [x0, MCONTEXT_GREGS_OFFSET + 26 * REGISTER_SIZE] + stp x28, x29, [x0, MCONTEXT_GREGS_OFFSET + 28 * REGISTER_SIZE] + str x30, [x0, MCONTEXT_GREGS_OFFSET + 30 * REGISTER_SIZE] + + /* Place LR into the saved PC, this will ensure that when + switching to this saved context with setcontext() control + will pass back to the caller of getcontext(), we have + already arranged to return the appropriate return value in x0 + above. */ + str x30, [x0, MCONTEXT_PC_OFFSET] + + /* Save the current SP */ + mov x2, sp + str x2, [x0, MCONTEXT_SP_OFFSET] + + /* Initialize the pstate. */ + str xzr, [x0, MCONTEXT_PSTATE_OFFSET] + + /* Figure out where to place the first context extension + block. */ + add x2, x0, #MCONTEXT_EXTENSION_OFFSET + + /* Write the context extension fpsimd header. */ + mov w3, #(FPSIMD_MAGIC & 0xffff) + movk w3, #(FPSIMD_MAGIC >> 16), lsl #16 + str w3, [x2, #FPSIMD_CONTEXT_MAGIC_OFFSET] + mov w3, #FPSIMD_CONTEXT_SIZE + str w3, [x2, #FPSIMD_CONTEXT_SIZE_OFFSET] + + /* Fill in the FP SIMD context. */ + add x3, x2, #(FPSIMD_CONTEXT_VREGS_OFFSET + 8 * SIMD_REGISTER_SIZE) + stp d8, d9, [x3], #(2 * SIMD_REGISTER_SIZE) + stp d10, d11, [x3], #(2 * SIMD_REGISTER_SIZE) + stp d12, d13, [x3], #(2 * SIMD_REGISTER_SIZE) + stp d14, d15, [x3], #(2 * SIMD_REGISTER_SIZE) + + add x3, x2, FPSIMD_CONTEXT_FPSR_OFFSET + + mrs x4, fpsr + str w4, [x3] + + mrs x4, fpcr + str w4, [x3, FPSIMD_CONTEXT_FPCR_OFFSET - FPSIMD_CONTEXT_FPSR_OFFSET] + + /* Write the termination context extension header. */ + add x2, x2, #FPSIMD_CONTEXT_SIZE + + str xzr, [x2, #FPSIMD_CONTEXT_MAGIC_OFFSET] + str xzr, [x2, #FPSIMD_CONTEXT_SIZE_OFFSET] + + /* Grab the signal mask */ + /* rt_sigprocmask (SIG_BLOCK, NULL, &ucp->uc_sigmask, _NSIG8) */ + add x2, x0, #UCONTEXT_SIGMASK_OFFSET + mov x0, #0 /* SIG_BLOCK */ + mov x1, #0 /* NULL */ + mov x3, #(_NSIG / 8) + mov x8, #__NR_rt_sigprocmask + svc 0 + + /* Return x0 for success */ + mov x0, 0 + ret + + .cfi_endproc + .size breakpad_getcontext, . - breakpad_getcontext + #elif defined(__i386__) .text @@ -140,6 +227,263 @@ breakpad_getcontext: .size breakpad_getcontext, . - breakpad_getcontext +#elif defined(__mips__) + +// This implementation is inspired by implementation of getcontext in glibc. +#if _MIPS_SIM == _ABIO32 +#include +#include +#include +#else +#include +#include +#endif + +// from asm/asm.h +#if _MIPS_SIM == _ABIO32 +#define ALSZ 7 +#define ALMASK ~7 +#define SZREG 4 +#else // _MIPS_SIM != _ABIO32 +#define ALSZ 15 +#define ALMASK ~15 +#define SZREG 8 +#endif + +#include // for __NR_rt_sigprocmask + +#define _NSIG8 128 / 8 +#define SIG_BLOCK 1 + + + .text +LOCALS_NUM = 1 // save gp on stack +FRAME_SIZE = ((LOCALS_NUM * SZREG) + ALSZ) & ALMASK + +GP_FRAME_OFFSET = FRAME_SIZE - (1 * SZREG) +MCONTEXT_REG_SIZE = 8 + +#if _MIPS_SIM == _ABIO32 + +NESTED (breakpad_getcontext, FRAME_SIZE, ra) + .mask 0x00000000, 0 + .fmask 0x00000000, 0 + + .set noreorder + .cpload t9 + .set reorder + + move a2, sp +#define _SP a2 + + addiu sp, -FRAME_SIZE + .cprestore GP_FRAME_OFFSET + + sw s0, (16 * MCONTEXT_REG_SIZE + MCONTEXT_GREGS_OFFSET)(a0) + sw s1, (17 * MCONTEXT_REG_SIZE + MCONTEXT_GREGS_OFFSET)(a0) + sw s2, (18 * MCONTEXT_REG_SIZE + MCONTEXT_GREGS_OFFSET)(a0) + sw s3, (19 * MCONTEXT_REG_SIZE + MCONTEXT_GREGS_OFFSET)(a0) + sw s4, (20 * MCONTEXT_REG_SIZE + MCONTEXT_GREGS_OFFSET)(a0) + sw s5, (21 * MCONTEXT_REG_SIZE + MCONTEXT_GREGS_OFFSET)(a0) + sw s6, (22 * MCONTEXT_REG_SIZE + MCONTEXT_GREGS_OFFSET)(a0) + sw s7, (23 * MCONTEXT_REG_SIZE + MCONTEXT_GREGS_OFFSET)(a0) + sw _SP, (29 * MCONTEXT_REG_SIZE + MCONTEXT_GREGS_OFFSET)(a0) + sw fp, (30 * MCONTEXT_REG_SIZE + MCONTEXT_GREGS_OFFSET)(a0) + sw ra, (31 * MCONTEXT_REG_SIZE + MCONTEXT_GREGS_OFFSET)(a0) + sw ra, MCONTEXT_PC_OFFSET(a0) + +#ifdef __mips_hard_float + s.d fs0, (20 * MCONTEXT_REG_SIZE + MCONTEXT_FPREGS_OFFSET)(a0) + s.d fs1, (22 * MCONTEXT_REG_SIZE + MCONTEXT_FPREGS_OFFSET)(a0) + s.d fs2, (24 * MCONTEXT_REG_SIZE + MCONTEXT_FPREGS_OFFSET)(a0) + s.d fs3, (26 * MCONTEXT_REG_SIZE + MCONTEXT_FPREGS_OFFSET)(a0) + s.d fs4, (28 * MCONTEXT_REG_SIZE + MCONTEXT_FPREGS_OFFSET)(a0) + s.d fs5, (30 * MCONTEXT_REG_SIZE + MCONTEXT_FPREGS_OFFSET)(a0) + + cfc1 v1, fcr31 + sw v1, MCONTEXT_FPC_CSR(a0) +#endif // __mips_hard_float + + /* rt_sigprocmask (SIG_BLOCK, NULL, &ucp->uc_sigmask, _NSIG8) */ + li a3, _NSIG8 + addu a2, a0, UCONTEXT_SIGMASK_OFFSET + move a1, zero + li a0, SIG_BLOCK + li v0, __NR_rt_sigprocmask + syscall + + addiu sp, FRAME_SIZE + jr ra + +END (breakpad_getcontext) +#else + +#ifndef NESTED +/* + * NESTED - declare nested routine entry point + */ +#define NESTED(symbol, framesize, rpc) \ + .globl symbol; \ + .align 2; \ + .type symbol,@function; \ + .ent symbol,0; \ +symbol: .frame sp, framesize, rpc; +#endif + +/* + * END - mark end of function + */ +#ifndef END +# define END(function) \ + .end function; \ + .size function,.-function +#endif + +/* int getcontext (ucontext_t *ucp) */ + +NESTED (breakpad_getcontext, FRAME_SIZE, ra) + .mask 0x10000000, 0 + .fmask 0x00000000, 0 + + move a2, sp +#define _SP a2 + move a3, gp +#define _GP a3 + + daddiu sp, -FRAME_SIZE + .cpsetup $25, GP_FRAME_OFFSET, breakpad_getcontext + + /* Store a magic flag. */ + li v1, 1 + sd v1, (0 * MCONTEXT_REG_SIZE + MCONTEXT_GREGS_OFFSET)(a0) /* zero */ + + sd s0, (16 * MCONTEXT_REG_SIZE + MCONTEXT_GREGS_OFFSET)(a0) + sd s1, (17 * MCONTEXT_REG_SIZE + MCONTEXT_GREGS_OFFSET)(a0) + sd s2, (18 * MCONTEXT_REG_SIZE + MCONTEXT_GREGS_OFFSET)(a0) + sd s3, (19 * MCONTEXT_REG_SIZE + MCONTEXT_GREGS_OFFSET)(a0) + sd s4, (20 * MCONTEXT_REG_SIZE + MCONTEXT_GREGS_OFFSET)(a0) + sd s5, (21 * MCONTEXT_REG_SIZE + MCONTEXT_GREGS_OFFSET)(a0) + sd s6, (22 * MCONTEXT_REG_SIZE + MCONTEXT_GREGS_OFFSET)(a0) + sd s7, (23 * MCONTEXT_REG_SIZE + MCONTEXT_GREGS_OFFSET)(a0) + sd _GP, (28 * MCONTEXT_REG_SIZE + MCONTEXT_GREGS_OFFSET)(a0) + sd _SP, (29 * MCONTEXT_REG_SIZE + MCONTEXT_GREGS_OFFSET)(a0) + sd s8, (30 * MCONTEXT_REG_SIZE + MCONTEXT_GREGS_OFFSET)(a0) + sd ra, (31 * MCONTEXT_REG_SIZE + MCONTEXT_GREGS_OFFSET)(a0) + sd ra, MCONTEXT_PC_OFFSET(a0) + +#ifdef __mips_hard_float + s.d $f24, (24 * MCONTEXT_REG_SIZE + MCONTEXT_FPREGS_OFFSET)(a0) + s.d $f25, (25 * MCONTEXT_REG_SIZE + MCONTEXT_FPREGS_OFFSET)(a0) + s.d $f26, (26 * MCONTEXT_REG_SIZE + MCONTEXT_FPREGS_OFFSET)(a0) + s.d $f27, (27 * MCONTEXT_REG_SIZE + MCONTEXT_FPREGS_OFFSET)(a0) + s.d $f28, (28 * MCONTEXT_REG_SIZE + MCONTEXT_FPREGS_OFFSET)(a0) + s.d $f29, (29 * MCONTEXT_REG_SIZE + MCONTEXT_FPREGS_OFFSET)(a0) + s.d $f30, (30 * MCONTEXT_REG_SIZE + MCONTEXT_FPREGS_OFFSET)(a0) + s.d $f31, (31 * MCONTEXT_REG_SIZE + MCONTEXT_FPREGS_OFFSET)(a0) + + cfc1 v1, $31 + sw v1, MCONTEXT_FPC_CSR(a0) +#endif /* __mips_hard_float */ + +/* rt_sigprocmask (SIG_BLOCK, NULL, &ucp->uc_sigmask, _NSIG8) */ + li a3, _NSIG8 + daddu a2, a0, UCONTEXT_SIGMASK_OFFSET + move a1, zero + li a0, SIG_BLOCK + + li v0, __NR_rt_sigprocmask + syscall + + .cpreturn + daddiu sp, FRAME_SIZE + move v0, zero + jr ra + +END (breakpad_getcontext) +#endif // _MIPS_SIM == _ABIO32 + +#elif defined(__x86_64__) +/* The x64 implementation of breakpad_getcontext was derived in part + from the implementation of libunwind which requires the following + notice. */ +/* libunwind - a platform-independent unwind library + Copyright (C) 2008 Google, Inc + Contributed by Paul Pluzhnikov + Copyright (C) 2010 Konstantin Belousov + +This file is part of libunwind. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + + .text + .global breakpad_getcontext + .hidden breakpad_getcontext + .align 4 + .type breakpad_getcontext, @function + +breakpad_getcontext: + .cfi_startproc + + /* Callee saved: RBX, RBP, R12-R15 */ + movq %r12, MCONTEXT_GREGS_R12(%rdi) + movq %r13, MCONTEXT_GREGS_R13(%rdi) + movq %r14, MCONTEXT_GREGS_R14(%rdi) + movq %r15, MCONTEXT_GREGS_R15(%rdi) + movq %rbp, MCONTEXT_GREGS_RBP(%rdi) + movq %rbx, MCONTEXT_GREGS_RBX(%rdi) + + /* Save argument registers (not strictly needed, but setcontext + restores them, so don't restore garbage). */ + movq %r8, MCONTEXT_GREGS_R8(%rdi) + movq %r9, MCONTEXT_GREGS_R9(%rdi) + movq %rdi, MCONTEXT_GREGS_RDI(%rdi) + movq %rsi, MCONTEXT_GREGS_RSI(%rdi) + movq %rdx, MCONTEXT_GREGS_RDX(%rdi) + movq %rax, MCONTEXT_GREGS_RAX(%rdi) + movq %rcx, MCONTEXT_GREGS_RCX(%rdi) + + /* Save fp state (not needed, except for setcontext not + restoring garbage). */ + leaq MCONTEXT_FPREGS_MEM(%rdi),%r8 + movq %r8, MCONTEXT_FPREGS_PTR(%rdi) + fnstenv (%r8) + stmxcsr FPREGS_OFFSET_MXCSR(%r8) + + leaq 8(%rsp), %rax /* exclude this call. */ + movq %rax, MCONTEXT_GREGS_RSP(%rdi) + + movq 0(%rsp), %rax + movq %rax, MCONTEXT_GREGS_RIP(%rdi) + + /* Save signal mask: sigprocmask(SIGBLOCK, NULL, &uc->uc_sigmask) */ + leaq UCONTEXT_SIGMASK_OFFSET(%rdi), %rdx // arg3 + xorq %rsi, %rsi // arg2 NULL + xorq %rdi, %rdi // arg1 SIGBLOCK == 0 + call sigprocmask@PLT + + /* Always return 0 for success, even if sigprocmask failed. */ + xorl %eax, %eax + ret + .cfi_endproc + .size breakpad_getcontext, . - breakpad_getcontext + #else #error "This file has not been ported for your CPU!" #endif diff --git a/toolkit/crashreporter/google-breakpad/src/common/android/breakpad_getcontext_unittest.cc b/toolkit/crashreporter/google-breakpad/src/common/android/breakpad_getcontext_unittest.cc index 3bafb9a678c0..2c550bf280d8 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/android/breakpad_getcontext_unittest.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/android/breakpad_getcontext_unittest.cc @@ -27,17 +27,45 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#if defined(__x86_64__) +#include +#endif + #include #include "breakpad_googletest_includes.h" #include "common/android/ucontext_constants.h" +template +struct CompileAssertEquals { + // a compilation error here indicates left and right are not equal. + char left_too_large[right - left]; + // a compilation error here indicates left and right are not equal. + char right_too_large[left - right]; +}; + +#define COMPILE_ASSERT_EQ(left, right, tag) \ + CompileAssertEquals tag; + TEST(AndroidUContext, GRegsOffset) { -#ifdef __arm__ +#if defined(__arm__) // There is no gregs[] array on ARM, so compare to the offset of // first register fields, since they're stored in order. ASSERT_EQ(static_cast(MCONTEXT_GREGS_OFFSET), offsetof(ucontext_t,uc_mcontext.arm_r0)); +#elif defined(__aarch64__) + // There is no gregs[] array on ARM, so compare to the offset of + // first register fields, since they're stored in order. + ASSERT_EQ(static_cast(MCONTEXT_GREGS_OFFSET), + offsetof(ucontext_t,uc_mcontext.regs[0])); + ASSERT_EQ(static_cast(MCONTEXT_SP_OFFSET), + offsetof(ucontext_t,uc_mcontext.sp)); + ASSERT_EQ(static_cast(MCONTEXT_PC_OFFSET), + offsetof(ucontext_t,uc_mcontext.pc)); + ASSERT_EQ(static_cast(MCONTEXT_PSTATE_OFFSET), + offsetof(ucontext_t,uc_mcontext.pstate)); + ASSERT_EQ(static_cast(MCONTEXT_EXTENSION_OFFSET), + offsetof(ucontext_t,uc_mcontext.__reserved)); #elif defined(__i386__) ASSERT_EQ(static_cast(MCONTEXT_GREGS_OFFSET), offsetof(ucontext_t,uc_mcontext.gregs)); @@ -69,6 +97,83 @@ TEST(AndroidUContext, GRegsOffset) { ASSERT_EQ(static_cast(UCONTEXT_FPREGS_MEM_OFFSET), offsetof(ucontext_t,__fpregs_mem)); +#elif defined(__mips__) + ASSERT_EQ(static_cast(MCONTEXT_GREGS_OFFSET), + offsetof(ucontext_t,uc_mcontext.gregs)); + + // PC for mips is not part of gregs. + ASSERT_EQ(static_cast(MCONTEXT_PC_OFFSET), + offsetof(ucontext_t,uc_mcontext.pc)); + + ASSERT_EQ(static_cast(MCONTEXT_FPREGS_OFFSET), + offsetof(ucontext_t,uc_mcontext.fpregs)); + + ASSERT_EQ(static_cast(MCONTEXT_FPC_CSR), + offsetof(ucontext_t,uc_mcontext.fpc_csr)); +#elif defined(__x86_64__) + + COMPILE_ASSERT_EQ(static_cast(MCONTEXT_GREGS_OFFSET), + offsetof(ucontext_t,uc_mcontext.gregs), + mcontext_gregs_offset); +#define CHECK_REG(x) \ + COMPILE_ASSERT_EQ(static_cast(MCONTEXT_GREGS_##x), \ + offsetof(ucontext_t,uc_mcontext.gregs[REG_##x]), reg_##x) + CHECK_REG(R8); + CHECK_REG(R9); + CHECK_REG(R10); + CHECK_REG(R11); + CHECK_REG(R12); + CHECK_REG(R13); + CHECK_REG(R14); + CHECK_REG(R15); + CHECK_REG(RDI); + CHECK_REG(RSI); + CHECK_REG(RBP); + CHECK_REG(RBX); + CHECK_REG(RDX); + CHECK_REG(RAX); + CHECK_REG(RCX); + CHECK_REG(RSP); + CHECK_REG(RIP); + + // sigcontext is an analog to mcontext_t. The layout should be the same. + COMPILE_ASSERT_EQ(offsetof(mcontext_t,fpregs), + offsetof(sigcontext,fpstate), sigcontext_fpstate); + // Check that _fpstate from asm/sigcontext.h is essentially the same + // as _libc_fpstate. + COMPILE_ASSERT_EQ(sizeof(_libc_fpstate), sizeof(_fpstate), + sigcontext_fpstate_size); + COMPILE_ASSERT_EQ(offsetof(_libc_fpstate,cwd),offsetof(_fpstate,cwd), + sigcontext_fpstate_cwd); + COMPILE_ASSERT_EQ(offsetof(_libc_fpstate,swd),offsetof(_fpstate,swd), + sigcontext_fpstate_swd); + COMPILE_ASSERT_EQ(offsetof(_libc_fpstate,ftw),offsetof(_fpstate,twd), + sigcontext_fpstate_twd); + COMPILE_ASSERT_EQ(offsetof(_libc_fpstate,fop),offsetof(_fpstate,fop), + sigcontext_fpstate_fop); + COMPILE_ASSERT_EQ(offsetof(_libc_fpstate,rip),offsetof(_fpstate,rip), + sigcontext_fpstate_rip); + COMPILE_ASSERT_EQ(offsetof(_libc_fpstate,rdp),offsetof(_fpstate,rdp), + sigcontext_fpstate_rdp); + COMPILE_ASSERT_EQ(offsetof(_libc_fpstate,mxcsr),offsetof(_fpstate,mxcsr), + sigcontext_fpstate_mxcsr); + COMPILE_ASSERT_EQ(offsetof(_libc_fpstate,mxcr_mask), + offsetof(_fpstate,mxcsr_mask), + sigcontext_fpstate_mxcsr_mask); + COMPILE_ASSERT_EQ(offsetof(_libc_fpstate,_st), offsetof(_fpstate,st_space), + sigcontext_fpstate_stspace); + COMPILE_ASSERT_EQ(offsetof(_libc_fpstate,_xmm), offsetof(_fpstate,xmm_space), + sigcontext_fpstate_xmm_space); + + COMPILE_ASSERT_EQ(MCONTEXT_FPREGS_PTR, + offsetof(ucontext_t,uc_mcontext.fpregs), + mcontext_fpregs_ptr); + COMPILE_ASSERT_EQ(MCONTEXT_FPREGS_MEM, offsetof(ucontext_t,__fpregs_mem), + mcontext_fpregs_mem); + COMPILE_ASSERT_EQ(FPREGS_OFFSET_MXCSR, offsetof(_libc_fpstate,mxcsr), + fpregs_offset_mxcsr); + COMPILE_ASSERT_EQ(UCONTEXT_SIGMASK_OFFSET, offsetof(ucontext_t, uc_sigmask), + ucontext_sigmask); #else ASSERT_EQ(static_cast(MCONTEXT_GREGS_OFFSET), offsetof(ucontext_t,uc_mcontext.gregs)); diff --git a/toolkit/crashreporter/google-breakpad/src/common/android/include/elf.h b/toolkit/crashreporter/google-breakpad/src/common/android/include/elf.h index debe30be67af..b2a28df448a8 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/android/include/elf.h +++ b/toolkit/crashreporter/google-breakpad/src/common/android/include/elf.h @@ -38,7 +38,7 @@ extern "C" { #endif // __cplusplus // The Android provides BSD-based definitions for the ElfXX_Nhdr -// types +// types // always source-compatible with the GLibc/kernel ones. To overcome this // issue without modifying a lot of code in Breakpad, use an ugly macro // renaming trick with #include_next @@ -110,9 +110,14 @@ typedef struct { // __WORDSIZE is GLibc-specific and used by Google Breakpad on Linux. -// All Android platforms are 32-bit for now. #ifndef __WORDSIZE +#if defined(__i386__) || defined(__ARM_EABI__) || defined(__mips__) #define __WORDSIZE 32 +#elif defined(__x86_64__) || defined(__aarch64__) +#define __WORDSIZE 64 +#else +#error "Unsupported Android CPU ABI" +#endif #endif // The Android headers don't always define this constant. @@ -152,6 +157,10 @@ typedef struct { #define NT_FPREGSET 2 #endif +#if !defined(SHT_MIPS_DWARF) +#define SHT_MIPS_DWARF 0x7000001e +#endif + #ifdef __cplusplus } // extern "C" #endif // __cplusplus diff --git a/toolkit/crashreporter/google-breakpad/src/common/android/include/link.h b/toolkit/crashreporter/google-breakpad/src/common/android/include/link.h index 6f3c182805eb..e7ff8e2d8702 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/android/include/link.h +++ b/toolkit/crashreporter/google-breakpad/src/common/android/include/link.h @@ -30,17 +30,19 @@ #ifndef GOOGLE_BREAKPAD_ANDROID_INCLUDE_LINK_H #define GOOGLE_BREAKPAD_ANDROID_INCLUDE_LINK_H -/* Android doesn't provide . Provide custom version here */ -#include +/* Android doesn't provide all the data-structures required in its . + Provide custom version here. */ +#include_next + +// TODO(rmcilroy): Remove this file once the ndk is updated for other +// architectures - crbug.com/358831 +#if !defined(__aarch64__) && !defined(__x86_64__) && \ + !(defined(__mips__) && _MIPS_SIM == _ABI64) #ifdef __cplusplus extern "C" { #endif // __cplusplus -#define ElfW(type) _ElfW (Elf, ELFSIZE, type) -#define _ElfW(e,w,t) _ElfW_1 (e, w, _##t) -#define _ElfW_1(e,w,t) e##w##t - struct r_debug { int r_version; struct link_map* r_map; @@ -64,4 +66,6 @@ struct link_map { } // extern "C" #endif // __cplusplus +#endif // !defined(__aarch64__) && !defined(__x86_64__) + #endif /* GOOGLE_BREAKPAD_ANDROID_INCLUDE_LINK_H */ diff --git a/toolkit/crashreporter/google-breakpad/src/client/mac/tests/SimpleStringDictionaryTest.h b/toolkit/crashreporter/google-breakpad/src/common/android/include/sgidefs.h similarity index 81% rename from toolkit/crashreporter/google-breakpad/src/client/mac/tests/SimpleStringDictionaryTest.h rename to toolkit/crashreporter/google-breakpad/src/common/android/include/sgidefs.h index 53f6ae42247b..33796dcf74c8 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/mac/tests/SimpleStringDictionaryTest.h +++ b/toolkit/crashreporter/google-breakpad/src/common/android/include/sgidefs.h @@ -1,4 +1,4 @@ -// Copyright (c) 2008, Google Inc. +// Copyright (c) 2013, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -27,14 +27,15 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -#import "GTMSenTestCase.h" -#import "SimpleStringDictionary.h" +#ifndef GOOGLE_BREAKPAD_ANDROID_INCLUDE_SGIDEFS_H +#define GOOGLE_BREAKPAD_ANDROID_INCLUDE_SGIDEFS_H -@interface SimpleStringDictionaryTest : GTMTestCase { +#ifdef __mips__ -} +// Android doesn't contain sgidefs.h, but does have which +// contains what we need. +#include -- (void)testKeyValueEntry; -- (void)testSimpleStringDictionary; -- (void)testSimpleStringDictionaryIterator; -@end +#endif // __mips__ + +#endif // GOOGLE_BREAKPAD_ANDROID_INCLUDE_SGIDEFS_H diff --git a/toolkit/crashreporter/google-breakpad/src/common/android/include/sys/procfs.h b/toolkit/crashreporter/google-breakpad/src/common/android/include/sys/procfs.h index 9cfdd01c7e2b..27223ea34a9a 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/android/include/sys/procfs.h +++ b/toolkit/crashreporter/google-breakpad/src/common/android/include/sys/procfs.h @@ -36,7 +36,11 @@ #else +#include #include +#if defined (__mips__) +#include +#endif #include #include @@ -44,7 +48,7 @@ extern "C" { #endif // __cplusplus -#ifdef __x86_64__ +#if defined(__x86_64__) || defined(__aarch64__) typedef unsigned long long elf_greg_t; #else typedef unsigned long elf_greg_t; @@ -52,6 +56,10 @@ typedef unsigned long elf_greg_t; #ifdef __arm__ #define ELF_NGREG (sizeof(struct user_regs) / sizeof(elf_greg_t)) +#elif defined(__aarch64__) +#define ELF_NGREG (sizeof(struct user_pt_regs) / sizeof(elf_greg_t)) +#elif defined(__mips__) +#define ELF_NGREG 45 #else #define ELF_NGREG (sizeof(struct user_regs_struct) / sizeof(elf_greg_t)) #endif @@ -92,6 +100,9 @@ struct elf_prpsinfo { #ifdef __x86_64__ unsigned int pr_uid; unsigned int pr_gid; +#elif defined(__mips__) + unsigned long pr_uid; + unsigned long pr_gid; #else unsigned short pr_uid; unsigned short pr_gid; diff --git a/toolkit/crashreporter/google-breakpad/src/common/android/include/sys/user.h b/toolkit/crashreporter/google-breakpad/src/common/android/include/sys/user.h index d13e5f6eb473..5f0360475dcf 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/android/include/sys/user.h +++ b/toolkit/crashreporter/google-breakpad/src/common/android/include/sys/user.h @@ -30,105 +30,46 @@ #ifndef GOOGLE_BREAKPAD_COMMON_ANDROID_INCLUDE_SYS_USER_H #define GOOGLE_BREAKPAD_COMMON_ANDROID_INCLUDE_SYS_USER_H +// The purpose of this file is to glue the mismatching headers (Android NDK vs +// glibc) and therefore avoid doing otherwise awkward #ifdefs in the code. +// The following quirks are currently handled by this file: +// - i386: Use the Android NDK but alias user_fxsr_struct > user_fpxregs_struct. +// - aarch64: Add missing user_regs_struct and user_fpsimd_struct structs. +// - Other platforms: Just use the Android NDK unchanged. + +// TODO(primiano): remove these changes after Chromium has stably rolled to +// an NDK with the appropriate fixes. + +#include_next + +#ifdef __i386__ #ifdef __cplusplus extern "C" { #endif // __cplusplus - -// These types are used with ptrace(), more specifically with -// PTRACE_GETREGS, PTRACE_GETFPREGS and PTRACE_GETVFPREGS respectively. -// -// They are also defined, sometimes with different names, in -// - -#if defined(__arm__) - -#define _ARM_USER_H 1 // Prevent conflicts - -// Note: on ARM, GLibc uses user_regs instead of user_regs_struct. -struct user_regs { - // Note: Entries 0-15 match r0..r15 - // Entry 16 is used to store the CPSR register. - // Entry 17 is used to store the "orig_r0" value. - unsigned long int uregs[18]; -}; - -// Same here: user_fpregs instead of user_fpregs_struct. -struct user_fpregs { - struct fp_reg { - unsigned int sign1:1; - unsigned int unused:15; - unsigned int sign2:1; - unsigned int exponent:14; - unsigned int j:1; - unsigned int mantissa1:31; - unsigned int mantissa0:32; - } fpregs[8]; - unsigned int fpsr:32; - unsigned int fpcr:32; - unsigned char ftype[8]; - unsigned int init_flag; -}; - -// GLibc doesn't define this one in though. -struct user_vfpregs { - unsigned long long fpregs[32]; - unsigned long fpscr; -}; - -#elif defined(__i386__) - -#define _I386_USER_H 1 // Prevent conflicts - -// GLibc-compatible definitions -struct user_regs_struct { - long ebx, ecx, edx, esi, edi, ebp, eax; - long xds, xes, xfs, xgs, orig_eax; - long eip, xcs, eflags, esp, xss; -}; - -struct user_fpregs_struct { - long cwd, swd, twd, fip, fcs, foo, fos; - long st_space[20]; -}; - -struct user_fpxregs_struct { - unsigned short cwd, swd, twd, fop; - long fip, fcs, foo, fos, mxcsr, reserved; - long st_space[32]; - long xmm_space[32]; - long padding[56]; -}; - -struct user { - struct user_regs_struct regs; - int u_fpvalid; - struct user_fpregs_struct i387; - unsigned long u_tsize; - unsigned long u_dsize; - unsigned long u_ssize; - unsigned long start_code; - unsigned long start_stack; - long signal; - int reserved; - struct user_regs_struct* u_ar0; - struct user_fpregs_struct* u_fpstate; - unsigned long magic; - char u_comm [32]; - int u_debugreg [8]; -}; - - -#elif defined(__mips__) - -// TODO: Provide some useful definitions here, once the rest of Breakpad -// requires them. - -#else -# error "Unsupported Android CPU ABI" -#endif - +typedef struct user_fxsr_struct user_fpxregs_struct; #ifdef __cplusplus } // extern "C" #endif // __cplusplus +#endif // __i386__ + +#ifdef __aarch64__ +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus +struct user_regs_struct { + __u64 regs[31]; + __u64 sp; + __u64 pc; + __u64 pstate; +}; +struct user_fpsimd_struct { + __uint128_t vregs[32]; + __u32 fpsr; + __u32 fpcr; +}; +#ifdef __cplusplus +} // extern "C" +#endif // __cplusplus +#endif // __aarch64__ #endif // GOOGLE_BREAKPAD_COMMON_ANDROID_INCLUDE_SYS_USER_H diff --git a/toolkit/crashreporter/google-breakpad/src/common/android/include/ucontext.h b/toolkit/crashreporter/google-breakpad/src/common/android/include/ucontext.h index cbaba6527bbd..29db8adee69a 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/android/include/ucontext.h +++ b/toolkit/crashreporter/google-breakpad/src/common/android/include/ucontext.h @@ -31,13 +31,12 @@ #define GOOGLE_BREAKPAD_COMMON_ANDROID_INCLUDE_UCONTEXT_H #include -#include -#ifdef __BIONIC_HAVE_UCONTEXT_H -# include_next +#ifdef __BIONIC_UCONTEXT_H +#include #else -# include -#endif // __BIONIC_UCONTEXT_H + +#include #ifdef __cplusplus extern "C" { @@ -52,4 +51,6 @@ int breakpad_getcontext(ucontext_t* ucp); } // extern "C" #endif // __cplusplus +#endif // __BIONIC_UCONTEXT_H + #endif // GOOGLE_BREAKPAD_COMMON_ANDROID_INCLUDE_UCONTEXT_H diff --git a/toolkit/crashreporter/google-breakpad/src/common/android/testing/include/wchar.h b/toolkit/crashreporter/google-breakpad/src/common/android/testing/include/wchar.h index 9649cab6cdd7..85373fd2a0d2 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/android/testing/include/wchar.h +++ b/toolkit/crashreporter/google-breakpad/src/common/android/testing/include/wchar.h @@ -38,6 +38,9 @@ #include_next +#if !defined(__aarch64__) && !defined(__x86_64__) && \ + !(defined(__mips__) && _MIPS_SIM == _ABI64) + // This needs to be in an extern "C" namespace, or Googletest will not // compile against it. #ifdef __cplusplus @@ -68,5 +71,6 @@ static int inline wcscasecmp(const wchar_t* s1, const wchar_t* s2) { #ifdef __cplusplus } // extern "C" #endif // __cplusplus +#endif #endif // GOOGLEBREAKPAD_COMMON_ANDROID_INCLUDE_WCHAR_H diff --git a/toolkit/crashreporter/google-breakpad/src/common/android/testing/mkdtemp.h b/toolkit/crashreporter/google-breakpad/src/common/android/testing/mkdtemp.h index 85644c9f5024..b86e2cd78323 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/android/testing/mkdtemp.h +++ b/toolkit/crashreporter/google-breakpad/src/common/android/testing/mkdtemp.h @@ -27,9 +27,11 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// Android doesn't provide mkdtemp(). Keep this implementation in an -// C++ anonymous namespace to avoid conflicts on Chromium (which -// already provides an extern "C" mkdtemp function). +// mkdtemp() wasn't declared in until NDK r9b due to a simple +// packaging bug (the function has always been implemented in all versions +// of the C library). This header is provided to build Breakpad with earlier +// NDK revisions (e.g. the one used by Chromium). It may be removed in the +// future once all major projects upgrade to use a more recent NDK. // // The reason this is inlined here is to avoid linking a new object file // into each unit test program (i.e. keep build files simple). @@ -44,9 +46,14 @@ #include #include +// Using a macro renaming trick here is necessary when building against +// NDK r9b. Otherwise the compiler will complain that calls to mkdtemp() +// are ambiguous. +#define mkdtemp breakpad_mkdtemp + namespace { -char* mkdtemp(char* path) { +char* breakpad_mkdtemp(char* path) { if (path == NULL) { errno = EINVAL; return NULL; diff --git a/toolkit/crashreporter/google-breakpad/src/common/android/ucontext_constants.h b/toolkit/crashreporter/google-breakpad/src/common/android/ucontext_constants.h index 9c7a69711489..1932d5739ceb 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/android/ucontext_constants.h +++ b/toolkit/crashreporter/google-breakpad/src/common/android/ucontext_constants.h @@ -45,6 +45,28 @@ #define MCONTEXT_GREGS_OFFSET 32 #define UCONTEXT_SIGMASK_OFFSET 104 +#elif defined(__aarch64__) + +#define UCONTEXT_SIGMASK_OFFSET 40 + +#define MCONTEXT_GREGS_OFFSET 184 +#define MCONTEXT_SP_OFFSET 432 +#define MCONTEXT_PC_OFFSET 440 +#define MCONTEXT_PSTATE_OFFSET 448 +#define MCONTEXT_EXTENSION_OFFSET 464 + +#define FPSIMD_MAGIC 0x46508001 + +#define FPSIMD_CONTEXT_MAGIC_OFFSET 0 +#define FPSIMD_CONTEXT_SIZE_OFFSET 4 +#define FPSIMD_CONTEXT_FPSR_OFFSET 8 +#define FPSIMD_CONTEXT_FPCR_OFFSET 12 +#define FPSIMD_CONTEXT_VREGS_OFFSET 16 +#define FPSIMD_CONTEXT_SIZE 528 + +#define REGISTER_SIZE 8 +#define SIMD_REGISTER_SIZE 16 + #elif defined(__i386__) #define MCONTEXT_GREGS_OFFSET 20 @@ -75,8 +97,45 @@ #elif defined(__mips__) -#define MCONTEXT_GREGS_OFFSET 0 -#define UCONTEXT_SIGMASK_OFFSET 0 +#if _MIPS_SIM == _ABIO32 +#define MCONTEXT_PC_OFFSET 32 +#define MCONTEXT_GREGS_OFFSET 40 +#define MCONTEXT_FPREGS_OFFSET 296 +#define MCONTEXT_FPC_CSR 556 +#define UCONTEXT_SIGMASK_OFFSET 616 +#else +#define MCONTEXT_GREGS_OFFSET 40 +#define MCONTEXT_FPREGS_OFFSET 296 +#define MCONTEXT_PC_OFFSET 616 +#define MCONTEXT_FPC_CSR 624 +#define UCONTEXT_SIGMASK_OFFSET 640 +#endif + +#elif defined(__x86_64__) + +#define MCONTEXT_GREGS_OFFSET 40 +#define UCONTEXT_SIGMASK_OFFSET 296 + +#define MCONTEXT_GREGS_R8 40 +#define MCONTEXT_GREGS_R9 48 +#define MCONTEXT_GREGS_R10 56 +#define MCONTEXT_GREGS_R11 64 +#define MCONTEXT_GREGS_R12 72 +#define MCONTEXT_GREGS_R13 80 +#define MCONTEXT_GREGS_R14 88 +#define MCONTEXT_GREGS_R15 96 +#define MCONTEXT_GREGS_RDI 104 +#define MCONTEXT_GREGS_RSI 112 +#define MCONTEXT_GREGS_RBP 120 +#define MCONTEXT_GREGS_RBX 128 +#define MCONTEXT_GREGS_RDX 136 +#define MCONTEXT_GREGS_RAX 144 +#define MCONTEXT_GREGS_RCX 152 +#define MCONTEXT_GREGS_RSP 160 +#define MCONTEXT_GREGS_RIP 168 +#define MCONTEXT_FPREGS_PTR 224 +#define MCONTEXT_FPREGS_MEM 304 +#define FPREGS_OFFSET_MXCSR 24 #else #error "This header has not been ported for your CPU" diff --git a/toolkit/crashreporter/google-breakpad/src/common/arm_ex_reader.cc b/toolkit/crashreporter/google-breakpad/src/common/arm_ex_reader.cc index 97f99e4e3a40..2d1ed983dc81 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/arm_ex_reader.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/arm_ex_reader.cc @@ -57,9 +57,9 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "common/arm_ex_reader.h" -#include "common/logging.h" #include +#include // This file, in conjunction with arm_ex_to_module.cc, translates // EXIDX unwind information into the same format that Breakpad uses @@ -116,8 +116,7 @@ using arm_ex_to_module::ARM_EXIDX_VFP_FSTMD; using google_breakpad::MemoryRange; -static void* Prel31ToAddr(const void* addr) -{ +static void* Prel31ToAddr(const void* addr) { uint32_t offset32 = *reinterpret_cast(addr); // sign extend offset32[30:0] to 64 bits -- copy bit 30 to positions // 63:31 inclusive. @@ -134,11 +133,10 @@ static void* Prel31ToAddr(const void* addr) // and return the number of bytes of |buf| written, along with a code // indicating the outcome. -ExceptionTableInfo::ExExtractResult -ExceptionTableInfo::ExtabEntryExtract(const struct exidx_entry* entry, - uint8_t* buf, size_t buf_size, - /*OUT*/size_t* buf_used) -{ +ExceptionTableInfo::ExExtractResult ExceptionTableInfo::ExtabEntryExtract( + const struct exidx_entry* entry, + uint8_t* buf, size_t buf_size, + size_t* buf_used) { MemoryRange mr_out(buf, buf_size); *buf_used = 0; @@ -258,8 +256,7 @@ ExceptionTableInfo::ExtabEntryExtract(const struct exidx_entry* entry, // This reads from |buf[0, +data_size)|. It checks for overruns of // the input buffer and returns a negative value if that happens, or // for any other failure cases. It returns zero in case of success. -int ExceptionTableInfo::ExtabEntryDecode(const uint8_t* buf, size_t buf_size) -{ +int ExceptionTableInfo::ExtabEntryDecode(const uint8_t* buf, size_t buf_size) { if (buf == NULL || buf_size == 0) return -1; @@ -282,13 +279,11 @@ int ExceptionTableInfo::ExtabEntryDecode(const uint8_t* buf, size_t buf_size) // vsp = vsp + (xxxxxx << 2) + 4 edata.cmd = ARM_EXIDX_CMD_ADD_TO_VSP; edata.data = (((int)op & 0x3f) << 2) + 4; - } - else if ((op & 0xc0) == 0x40) { + } else if ((op & 0xc0) == 0x40) { // vsp = vsp - (xxxxxx << 2) - 4 edata.cmd = ARM_EXIDX_CMD_SUB_FROM_VSP; edata.data = (((int)op & 0x3f) << 2) + 4; - } - else if ((op & 0xf0) == 0x80) { + } else if ((op & 0xf0) == 0x80) { uint8_t op2; GET_BUF_U8(op2); if (op == 0x80 && op2 == 0x00) { @@ -300,8 +295,7 @@ int ExceptionTableInfo::ExtabEntryDecode(const uint8_t* buf, size_t buf_size) edata.data = ((op & 0xf) << 8) | op2; edata.data = edata.data << 4; } - } - else if ((op & 0xf0) == 0x90) { + } else if ((op & 0xf0) == 0x90) { if (op == 0x9d || op == 0x9f) { // 9d: Reserved as prefix for ARM register to register moves // 9f: Reserved as perfix for Intel Wireless MMX reg to reg moves @@ -311,8 +305,7 @@ int ExceptionTableInfo::ExtabEntryDecode(const uint8_t* buf, size_t buf_size) edata.cmd = ARM_EXIDX_CMD_REG_TO_SP; edata.data = op & 0x0f; } - } - else if ((op & 0xf0) == 0xa0) { + } else if ((op & 0xf0) == 0xa0) { // Pop r4 to r[4+nnn], or // Pop r4 to r[4+nnn] and r14 or unsigned end = (op & 0x07); @@ -320,13 +313,11 @@ int ExceptionTableInfo::ExtabEntryDecode(const uint8_t* buf, size_t buf_size) edata.data = edata.data << 4; if (op & 0x08) edata.data |= 1 << 14; edata.cmd = ARM_EXIDX_CMD_REG_POP; - } - else if (op == ARM_EXTBL_OP_FINISH) { + } else if (op == ARM_EXTBL_OP_FINISH) { // Finish edata.cmd = ARM_EXIDX_CMD_FINISH; buf = end; - } - else if (op == 0xb1) { + } else if (op == 0xb1) { uint8_t op2; GET_BUF_U8(op2); if (op2 == 0 || (op2 & 0xf0)) { @@ -337,8 +328,7 @@ int ExceptionTableInfo::ExtabEntryDecode(const uint8_t* buf, size_t buf_size) edata.cmd = ARM_EXIDX_CMD_REG_POP; edata.data = op2 & 0x0f; } - } - else if (op == 0xb2) { + } else if (op == 0xb2) { // vsp = vsp + 0x204 + (uleb128 << 2) uint64_t offset = 0; uint8_t byte, shift = 0; @@ -349,8 +339,7 @@ int ExceptionTableInfo::ExtabEntryDecode(const uint8_t* buf, size_t buf_size) } while ((byte & 0x80) && buf < end); edata.data = offset * 4 + 0x204; edata.cmd = ARM_EXIDX_CMD_ADD_TO_VSP; - } - else if (op == 0xb3 || op == 0xc8 || op == 0xc9) { + } else if (op == 0xb3 || op == 0xc8 || op == 0xc9) { // b3: Pop VFP regs D[ssss] to D[ssss+cccc], FSTMFDX-ishly // c8: Pop VFP regs D[16+ssss] to D[16+ssss+cccc], FSTMFDD-ishly // c9: Pop VFP regs D[ssss] to D[ssss+cccc], FSTMFDD-ishly @@ -358,25 +347,21 @@ int ExceptionTableInfo::ExtabEntryDecode(const uint8_t* buf, size_t buf_size) GET_BUF_U8(edata.data); if (op == 0xc8) edata.data |= ARM_EXIDX_VFP_SHIFT_16; if (op != 0xb3) edata.data |= ARM_EXIDX_VFP_FSTMD; - } - else if ((op & 0xf8) == 0xb8 || (op & 0xf8) == 0xd0) { + } else if ((op & 0xf8) == 0xb8 || (op & 0xf8) == 0xd0) { // b8: Pop VFP regs D[8] to D[8+nnn], FSTMFDX-ishly // d0: Pop VFP regs D[8] to D[8+nnn], FSTMFDD-ishly edata.cmd = ARM_EXIDX_CMD_VFP_POP; edata.data = 0x80 | (op & 0x07); if ((op & 0xf8) == 0xd0) edata.data |= ARM_EXIDX_VFP_FSTMD; - } - else if (op >= 0xc0 && op <= 0xc5) { + } else if (op >= 0xc0 && op <= 0xc5) { // Intel Wireless MMX pop wR[10]-wr[10+nnn], nnn != 6,7 edata.cmd = ARM_EXIDX_CMD_WREG_POP; edata.data = 0xa0 | (op & 0x07); - } - else if (op == 0xc6) { + } else if (op == 0xc6) { // Intel Wireless MMX pop wR[ssss] to wR[ssss+cccc] edata.cmd = ARM_EXIDX_CMD_WREG_POP; GET_BUF_U8(edata.data); - } - else if (op == 0xc7) { + } else if (op == 0xc7) { uint8_t op2; GET_BUF_U8(op2); if (op2 == 0 || (op2 & 0xf0)) { @@ -387,22 +372,21 @@ int ExceptionTableInfo::ExtabEntryDecode(const uint8_t* buf, size_t buf_size) edata.cmd = ARM_EXIDX_CMD_WCGR_POP; edata.data = op2 & 0x0f; } - } - else { + } else { // Spare edata.cmd = ARM_EXIDX_CMD_RESERVED; } int ret = handler_->ImproveStackFrame(&edata); - if (ret < 0) return ret; + if (ret < 0) + return ret; } return 0; # undef GET_BUF_U8 } -void ExceptionTableInfo::Start() -{ +void ExceptionTableInfo::Start() { const struct exidx_entry* start = reinterpret_cast(mr_exidx_.data()); const struct exidx_entry* end @@ -412,16 +396,15 @@ void ExceptionTableInfo::Start() // Iterate over each of the EXIDX entries (pairs of 32-bit words). // These occupy the entire .exidx section. for (const struct exidx_entry* entry = start; entry < end; ++entry) { - // Figure out the code address range that this table entry is // associated with. uint32_t addr = (reinterpret_cast(Prel31ToAddr(&entry->addr)) - mapping_addr_ + loading_addr_) & 0x7fffffff; uint32_t next_addr; - if (entry < end - 1) + if (entry < end - 1) { next_addr = (reinterpret_cast(Prel31ToAddr(&((entry + 1)->addr))) - mapping_addr_ + loading_addr_) & 0x7fffffff; - else { + } else { // This is the last EXIDX entry in the sequence, so we don't // have an address for the start of the next function, to limit // this one. Instead use the address of the last byte of the @@ -445,10 +428,10 @@ void ExceptionTableInfo::Start() plausible = true; } } - if (!plausible) - BPLOG(INFO) << "ExceptionTableInfo: implausible EXIDX last entry size " - << (int32_t)(text_last_svma_ - addr) - << "; using 1 instead."; + if (!plausible) { + fprintf(stderr, "ExceptionTableInfo: implausible EXIDX last entry size " + "%d, using 1 instead.", (int32_t)(text_last_svma_ - addr)); + } } // Extract the unwind info into |buf|. This might fail for @@ -462,22 +445,22 @@ void ExceptionTableInfo::Start() // Couldn't extract the unwind info, for some reason. Move on. switch (res) { case ExInBufOverflow: - BPLOG(INFO) << "ExtabEntryExtract: .exidx/.extab section overrun"; + fprintf(stderr, "ExtabEntryExtract: .exidx/.extab section overrun"); break; case ExOutBufOverflow: - BPLOG(INFO) << "ExtabEntryExtract: bytecode buffer overflow"; + fprintf(stderr, "ExtabEntryExtract: bytecode buffer overflow"); break; case ExCantUnwind: - BPLOG(INFO) << "ExtabEntryExtract: function is marked CANT_UNWIND"; + fprintf(stderr, "ExtabEntryExtract: function is marked CANT_UNWIND"); break; case ExCantRepresent: - BPLOG(INFO) << "ExtabEntryExtract: bytecode can't be represented"; + fprintf(stderr, "ExtabEntryExtract: bytecode can't be represented"); break; case ExInvalid: - BPLOG(INFO) << "ExtabEntryExtract: index table entry is invalid"; + fprintf(stderr, "ExtabEntryExtract: index table entry is invalid"); break; default: - BPLOG(INFO) << "ExtabEntryExtract: unknown error: " << (int)res; + fprintf(stderr, "ExtabEntryExtract: unknown error: %d", (int)res); break; } continue; @@ -492,7 +475,7 @@ void ExceptionTableInfo::Start() int ret = ExtabEntryDecode(buf, buf_used); if (ret < 0) { handler_->DeleteStackFrame(); - BPLOG(INFO) << "ExtabEntryDecode: failed with error code: " << ret; + fprintf(stderr, "ExtabEntryDecode: failed with error code: %d", ret); continue; } handler_->SubmitStackFrame(); @@ -501,4 +484,4 @@ void ExceptionTableInfo::Start() } /* iterating over .exidx */ } -} // arm_ex_reader +} // namespace arm_ex_reader diff --git a/toolkit/crashreporter/google-breakpad/src/common/arm_ex_reader.h b/toolkit/crashreporter/google-breakpad/src/common/arm_ex_reader.h index 450438e60137..9b54e8a0bee9 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/arm_ex_reader.h +++ b/toolkit/crashreporter/google-breakpad/src/common/arm_ex_reader.h @@ -1,4 +1,3 @@ - /* libunwind - a platform-independent unwind library Copyright 2011 Linaro Limited @@ -105,11 +104,11 @@ class ExceptionTableInfo { ExExtractResult ExtabEntryExtract(const struct arm_ex_to_module::exidx_entry* entry, uint8_t* buf, size_t buf_size, - /*OUT*/size_t* buf_used); + size_t* buf_used); int ExtabEntryDecode(const uint8_t* buf, size_t buf_size); }; -} // namespace arm_ex_reader +} // namespace arm_ex_reader #endif // COMMON_ARM_EX_READER_H__ diff --git a/toolkit/crashreporter/google-breakpad/src/common/arm_ex_to_module.cc b/toolkit/crashreporter/google-breakpad/src/common/arm_ex_to_module.cc index b5e3b060a8cb..c326744f6427 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/arm_ex_to_module.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/arm_ex_to_module.cc @@ -55,78 +55,82 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ // Derived from libunwind, with extensive modifications. -#include "common/unique_string.h" #include "common/arm_ex_to_module.h" #include #include -// For big-picture comments on how the EXIDX reader works, +// For big-picture comments on how the EXIDX reader works, // see arm_ex_reader.cc. #define ARM_EXBUF_START(x) (((x) >> 4) & 0x0f) #define ARM_EXBUF_COUNT(x) ((x) & 0x0f) #define ARM_EXBUF_END(x) (ARM_EXBUF_START(x) + ARM_EXBUF_COUNT(x)) -using google_breakpad::ustr__pc; -using google_breakpad::ustr__lr; -using google_breakpad::ustr__sp; -using google_breakpad::ustr__ZDra; -using google_breakpad::ustr__ZDcfa; using google_breakpad::Module; -using google_breakpad::ToUniqueString; -using google_breakpad::UniqueString; namespace arm_ex_to_module { +static const char* const regnames[] = { + "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", + "r8", "r9", "r10", "r11", "r12", "sp", "lr", "pc", + "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", + "fps", "cpsr" +}; + // Translate command from extab_data to command for Module. int ARMExToModule::TranslateCmd(const struct extab_data* edata, - Module::StackFrameEntry* entry, - Module::Expr& vsp) { + Module::StackFrameEntry* entry, string& vsp) { int ret = 0; switch (edata->cmd) { case ARM_EXIDX_CMD_FINISH: /* Copy LR to PC if there isn't currently a rule for PC in force. */ - if (entry->initial_rules.find(ustr__pc()) + if (entry->initial_rules.find("pc") == entry->initial_rules.end()) { - if (entry->initial_rules.find(ustr__lr()) + if (entry->initial_rules.find("lr") == entry->initial_rules.end()) { - entry->initial_rules[ustr__pc()] = Module::Expr(ustr__lr(), - 0, false); // "lr" + entry->initial_rules["pc"] = "lr"; } else { - entry->initial_rules[ustr__pc()] = entry->initial_rules[ustr__lr()]; + entry->initial_rules["pc"] = entry->initial_rules["lr"]; } } break; case ARM_EXIDX_CMD_SUB_FROM_VSP: - vsp = vsp.add_delta(- static_cast(edata->data)); + { + char c[16]; + sprintf(c, " %d -", edata->data); + vsp += c; + } break; case ARM_EXIDX_CMD_ADD_TO_VSP: - vsp = vsp.add_delta(static_cast(edata->data)); + { + char c[16]; + sprintf(c, " %d +", edata->data); + vsp += c; + } break; case ARM_EXIDX_CMD_REG_POP: for (unsigned int i = 0; i < 16; i++) { if (edata->data & (1 << i)) { - entry->initial_rules[ToUniqueString(regnames[i])] = vsp.deref(); - vsp = vsp.add_delta(4); + entry->initial_rules[regnames[i]] + = vsp + " ^"; + vsp += " 4 +"; } } /* Set cfa in case the SP got popped. */ if (edata->data & (1 << 13)) { - vsp = entry->initial_rules[ustr__sp()]; + vsp = entry->initial_rules["sp"]; } break; case ARM_EXIDX_CMD_REG_TO_SP: { assert (edata->data < 16); const char* const regname = regnames[edata->data]; - const UniqueString* regname_us = ToUniqueString(regname); - if (entry->initial_rules.find(regname_us) == entry->initial_rules.end()) { - entry->initial_rules[ustr__sp()] = Module::Expr(regname_us, - 0, false); // "regname" + if (entry->initial_rules.find(regname) == entry->initial_rules.end()) { + entry->initial_rules["sp"] = regname; } else { - entry->initial_rules[ustr__sp()] = entry->initial_rules[regname_us]; + entry->initial_rules["sp"] = entry->initial_rules[regname]; } - vsp = entry->initial_rules[ustr__sp()]; + vsp = entry->initial_rules["sp"]; break; } case ARM_EXIDX_CMD_VFP_POP: @@ -134,23 +138,23 @@ int ARMExToModule::TranslateCmd(const struct extab_data* edata, pointer. */ for (unsigned int i = ARM_EXBUF_START(edata->data); i <= ARM_EXBUF_END(edata->data); i++) { - vsp = vsp.add_delta(8); + vsp += " 8 +"; } if (!(edata->data & ARM_EXIDX_VFP_FSTMD)) { - vsp = vsp.add_delta(4); + vsp += " 4 +"; } break; case ARM_EXIDX_CMD_WREG_POP: for (unsigned int i = ARM_EXBUF_START(edata->data); i <= ARM_EXBUF_END(edata->data); i++) { - vsp = vsp.add_delta(8); + vsp += " 8 +"; } break; case ARM_EXIDX_CMD_WCGR_POP: // Pop wCGR registers under mask {wCGR3,2,1,0}, hence "i < 4" for (unsigned int i = 0; i < 4; i++) { if (edata->data & (1 << i)) { - vsp = vsp.add_delta(4); + vsp += " 4 +"; } } break; @@ -181,9 +185,8 @@ void ARMExToModule::AddStackFrame(uintptr_t addr, size_t size) { stack_frame_entry_ = new Module::StackFrameEntry; stack_frame_entry_->address = addr; stack_frame_entry_->size = size; - Module::Expr sp_expr = Module::Expr(ustr__sp(), 0, false); // "sp" - stack_frame_entry_->initial_rules[ustr__ZDcfa()] = sp_expr; // ".cfa" - vsp_ = sp_expr; + stack_frame_entry_->initial_rules[".cfa"] = "sp"; + vsp_ = "sp"; } int ARMExToModule::ImproveStackFrame(const struct extab_data* edata) { @@ -196,11 +199,11 @@ void ARMExToModule::DeleteStackFrame() { void ARMExToModule::SubmitStackFrame() { // return address always winds up in pc - stack_frame_entry_->initial_rules[ustr__ZDra()] // ".ra" - = stack_frame_entry_->initial_rules[ustr__pc()]; + stack_frame_entry_->initial_rules[".ra"] + = stack_frame_entry_->initial_rules["pc"]; // the final value of vsp is the new value of sp - stack_frame_entry_->initial_rules[ustr__sp()] = vsp_; + stack_frame_entry_->initial_rules["sp"] = vsp_; module_->AddStackFrameEntry(stack_frame_entry_); } -} // namespace arm_ex_to_module +} // namespace arm_ex_to_module diff --git a/toolkit/crashreporter/google-breakpad/src/common/arm_ex_to_module.h b/toolkit/crashreporter/google-breakpad/src/common/arm_ex_to_module.h index 9d6a879cbe16..f413a16a93aa 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/arm_ex_to_module.h +++ b/toolkit/crashreporter/google-breakpad/src/common/arm_ex_to_module.h @@ -1,4 +1,3 @@ - /* libunwind - a platform-independent unwind library Copyright 2011 Linaro Limited @@ -94,13 +93,6 @@ enum extab_cmd_flags { ARM_EXIDX_VFP_FSTMD = 1 << 17, // distinguishes FSTMxxD from FSTMxxX }; -static const char* const regnames[] = { - "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", - "r8", "r9", "r10", "r11", "r12", "sp", "lr", "pc", - "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", - "fps", "cpsr" -}; - // Receives information from arm_ex_reader::ExceptionTableInfo // and adds it to the Module object class ARMExToModule { @@ -116,10 +108,10 @@ class ARMExToModule { private: Module* module_; Module::StackFrameEntry* stack_frame_entry_; - Module::Expr vsp_; + string vsp_; int TranslateCmd(const struct extab_data* edata, Module::StackFrameEntry* entry, - Module::Expr& vsp); + string& vsp); }; } // namespace arm_ex_to_module diff --git a/toolkit/crashreporter/google-breakpad/src/common/basictypes.h b/toolkit/crashreporter/google-breakpad/src/common/basictypes.h index 84668b79d968..9426c1f6c269 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/basictypes.h +++ b/toolkit/crashreporter/google-breakpad/src/common/basictypes.h @@ -38,4 +38,21 @@ void operator=(const TypeName&) #endif // DISALLOW_COPY_AND_ASSIGN +namespace google_breakpad { + +// Used to explicitly mark the return value of a function as unused. If you are +// really sure you don't want to do anything with the return value of a function +// that has been marked with __attribute__((warn_unused_result)), wrap it with +// this. Example: +// +// scoped_ptr my_var = ...; +// if (TakeOwnership(my_var.get()) == SUCCESS) +// ignore_result(my_var.release()); +// +template +inline void ignore_result(const T&) { +} + +} // namespace google_breakpad + #endif // COMMON_BASICTYPES_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/common/common.gyp b/toolkit/crashreporter/google-breakpad/src/common/common.gyp new file mode 100644 index 000000000000..5a666de61f03 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/common/common.gyp @@ -0,0 +1,243 @@ +# Copyright 2014 Google Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +{ + 'target_defaults': { + 'target_conditions': [ + ['OS=="mac"', { + 'defines': ['HAVE_MACH_O_NLIST_H'], + }], + ['OS=="linux"', { + 'defines': ['HAVE_A_OUT_H'], + }], + ], + }, + 'targets': [ + { + 'target_name': 'common', + 'type': 'static_library', + 'sources': [ + 'android/breakpad_getcontext.S', + 'android/include/elf.h', + 'android/include/link.h', + 'android/include/sgidefs.h', + 'android/include/stab.h', + 'android/include/sys/procfs.h', + 'android/include/sys/signal.h', + 'android/include/sys/user.h', + 'android/include/ucontext.h', + 'android/testing/include/wchar.h', + 'android/testing/mkdtemp.h', + 'android/testing/pthread_fixes.h', + 'android/ucontext_constants.h', + 'basictypes.h', + 'byte_cursor.h', + 'convert_UTF.c', + 'convert_UTF.h', + 'dwarf/bytereader-inl.h', + 'dwarf/bytereader.cc', + 'dwarf/bytereader.h', + 'dwarf/cfi_assembler.cc', + 'dwarf/cfi_assembler.h', + 'dwarf/dwarf2diehandler.cc', + 'dwarf/dwarf2diehandler.h', + 'dwarf/dwarf2enums.h', + 'dwarf/dwarf2reader.cc', + 'dwarf/dwarf2reader.h', + 'dwarf/dwarf2reader_test_common.h', + 'dwarf/functioninfo.cc', + 'dwarf/functioninfo.h', + 'dwarf/line_state_machine.h', + 'dwarf/types.h', + 'dwarf_cfi_to_module.cc', + 'dwarf_cfi_to_module.h', + 'dwarf_cu_to_module.cc', + 'dwarf_cu_to_module.h', + 'dwarf_line_to_module.cc', + 'dwarf_line_to_module.h', + 'language.cc', + 'language.h', + 'linux/crc32.cc', + 'linux/crc32.h', + 'linux/dump_symbols.cc', + 'linux/dump_symbols.h', + 'linux/eintr_wrapper.h', + 'linux/elf_core_dump.cc', + 'linux/elf_core_dump.h', + 'linux/elf_gnu_compat.h', + 'linux/elf_symbols_to_module.cc', + 'linux/elf_symbols_to_module.h', + 'linux/elfutils-inl.h', + 'linux/elfutils.cc', + 'linux/elfutils.h', + 'linux/file_id.cc', + 'linux/file_id.h', + 'linux/google_crashdump_uploader.cc', + 'linux/google_crashdump_uploader.h', + 'linux/guid_creator.cc', + 'linux/guid_creator.h', + 'linux/http_upload.cc', + 'linux/http_upload.h', + 'linux/ignore_ret.h', + 'linux/libcurl_wrapper.cc', + 'linux/libcurl_wrapper.h', + 'linux/linux_libc_support.cc', + 'linux/linux_libc_support.h', + 'linux/memory_mapped_file.cc', + 'linux/memory_mapped_file.h', + 'linux/safe_readlink.cc', + 'linux/safe_readlink.h', + 'linux/synth_elf.cc', + 'linux/synth_elf.h', + 'mac/arch_utilities.cc', + 'mac/arch_utilities.h', + 'mac/bootstrap_compat.cc', + 'mac/bootstrap_compat.h', + 'mac/byteswap.h', + 'mac/dump_syms.h', + 'mac/dump_syms.cc', + 'mac/file_id.cc', + 'mac/file_id.h', + 'mac/GTMDefines.h', + 'mac/GTMLogger.h', + 'mac/GTMLogger.m', + 'mac/HTTPMultipartUpload.h', + 'mac/HTTPMultipartUpload.m', + 'mac/MachIPC.h', + 'mac/MachIPC.mm', + 'mac/macho_id.cc', + 'mac/macho_id.h', + 'mac/macho_reader.cc', + 'mac/macho_reader.h', + 'mac/macho_utilities.cc', + 'mac/macho_utilities.h', + 'mac/macho_walker.cc', + 'mac/macho_walker.h', + 'mac/scoped_task_suspend-inl.h', + 'mac/string_utilities.cc', + 'mac/string_utilities.h', + 'mac/super_fat_arch.h', + 'md5.cc', + 'md5.h', + 'memory.h', + 'memory_range.h', + 'module.cc', + 'module.h', + 'scoped_ptr.h', + 'simple_string_dictionary.cc', + 'simple_string_dictionary.h', + 'solaris/dump_symbols.cc', + 'solaris/dump_symbols.h', + 'solaris/file_id.cc', + 'solaris/file_id.h', + 'solaris/guid_creator.cc', + 'solaris/guid_creator.h', + 'solaris/message_output.h', + 'stabs_reader.cc', + 'stabs_reader.h', + 'stabs_to_module.cc', + 'stabs_to_module.h', + 'string_conversion.cc', + 'string_conversion.h', + 'symbol_data.h', + 'test_assembler.cc', + 'test_assembler.h', + 'unordered.h', + 'using_std_string.h', + 'windows/common_windows.gyp', + 'windows/dia_util.cc', + 'windows/dia_util.h', + 'windows/guid_string.cc', + 'windows/guid_string.h', + 'windows/http_upload.cc', + 'windows/http_upload.h', + 'windows/omap.cc', + 'windows/omap.h', + 'windows/omap_internal.h', + 'windows/pdb_source_line_writer.cc', + 'windows/pdb_source_line_writer.h', + 'windows/string_utils-inl.h', + 'windows/string_utils.cc', + ], + 'include_dirs': [ + '..', + ], + }, + { + 'target_name': 'common_unittests', + 'type': 'executable', + 'sources': [ + 'android/breakpad_getcontext_unittest.cc', + 'byte_cursor_unittest.cc', + 'dwarf/bytereader_unittest.cc', + 'dwarf/dwarf2diehandler_unittest.cc', + 'dwarf/dwarf2reader_cfi_unittest.cc', + 'dwarf/dwarf2reader_die_unittest.cc', + 'dwarf_cfi_to_module_unittest.cc', + 'dwarf_cu_to_module_unittest.cc', + 'dwarf_line_to_module_unittest.cc', + 'linux/dump_symbols_unittest.cc', + 'linux/elf_core_dump_unittest.cc', + 'linux/elf_symbols_to_module_unittest.cc', + 'linux/file_id_unittest.cc', + 'linux/google_crashdump_uploader_test.cc', + 'linux/linux_libc_support_unittest.cc', + 'linux/memory_mapped_file_unittest.cc', + 'linux/safe_readlink_unittest.cc', + 'linux/synth_elf_unittest.cc', + 'linux/tests/auto_testfile.h', + 'linux/tests/crash_generator.cc', + 'linux/tests/crash_generator.h', + 'mac/macho_reader_unittest.cc', + 'memory_range_unittest.cc', + 'memory_unittest.cc', + 'module_unittest.cc', + 'simple_string_dictionary_unittest.cc', + 'stabs_reader_unittest.cc', + 'stabs_to_module_unittest.cc', + 'test_assembler_unittest.cc', + 'tests/auto_tempdir.h', + 'tests/file_utils.cc', + 'tests/file_utils.h', + 'windows/omap_unittest.cc', + ], + 'include_dirs': [ + '..', + ], + 'dependencies': [ + 'common', + '../build/testing.gypi:gmock_main', + '../build/testing.gypi:gmock', + '../build/testing.gypi:gtest', + ], + 'libraries': [ + '-ldl', + ], + }, + ], +} diff --git a/toolkit/crashreporter/google-breakpad/src/common/convert_UTF.c b/toolkit/crashreporter/google-breakpad/src/common/convert_UTF.c index 9448ede26e6a..12a3c891741d 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/convert_UTF.c +++ b/toolkit/crashreporter/google-breakpad/src/common/convert_UTF.c @@ -69,8 +69,13 @@ static const UTF32 halfMask = 0x3FFUL; #define UNI_SUR_HIGH_END (UTF32)0xDBFF #define UNI_SUR_LOW_START (UTF32)0xDC00 #define UNI_SUR_LOW_END (UTF32)0xDFFF + +#ifndef false #define false 0 +#endif +#ifndef true #define true 1 +#endif /* --------------------------------------------------------------------- */ diff --git a/toolkit/crashreporter/google-breakpad/src/common/convert_UTF.h b/toolkit/crashreporter/google-breakpad/src/common/convert_UTF.h index 8ce3aebcb5e7..644d099506fb 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/convert_UTF.h +++ b/toolkit/crashreporter/google-breakpad/src/common/convert_UTF.h @@ -36,6 +36,9 @@ * written authorization of the copyright holder. */ +#ifndef COMMON_CONVERT_UTF_H_ +#define COMMON_CONVERT_UTF_H_ + /* --------------------------------------------------------------------- Conversions between UTF32, UTF-16, and UTF-8. Header file. @@ -157,3 +160,5 @@ Boolean isLegalUTF8Sequence(const UTF8 *source, const UTF8 *sourceEnd); #endif /* --------------------------------------------------------------------- */ + +#endif // COMMON_CONVERT_UTF_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/common/dwarf/dwarf2reader.cc b/toolkit/crashreporter/google-breakpad/src/common/dwarf/dwarf2reader.cc index 7d0b8af2e2af..f2f3d5810e14 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/dwarf/dwarf2reader.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/dwarf/dwarf2reader.cc @@ -183,14 +183,15 @@ const char* CompilationUnit::SkipAttribute(const char* start, case DW_FORM_addr: return start + reader_->AddressSize(); case DW_FORM_ref_addr: - // DWARF2 and 3 differ on whether ref_addr is address size or + // DWARF2 and 3/4 differ on whether ref_addr is address size or // offset size. - assert(header_.version == 2 || header_.version == 3); + assert(header_.version >= 2); if (header_.version == 2) { return start + reader_->AddressSize(); - } else if (header_.version == 3) { + } else if (header_.version >= 3) { return start + reader_->OffsetSize(); } + break; case DW_FORM_block1: return start + 1 + reader_->ReadOneByte(start); @@ -390,14 +391,14 @@ const char* CompilationUnit::ProcessAttribute( + offset_from_section_start_); return start + len; case DW_FORM_ref_addr: - // DWARF2 and 3 differ on whether ref_addr is address size or + // DWARF2 and 3/4 differ on whether ref_addr is address size or // offset size. - assert(header_.version == 2 || header_.version == 3); + assert(header_.version >= 2); if (header_.version == 2) { handler_->ProcessAttributeReference(dieoffset, attr, form, reader_->ReadAddress(start)); return start + reader_->AddressSize(); - } else if (header_.version == 3) { + } else if (header_.version >= 3) { handler_->ProcessAttributeReference(dieoffset, attr, form, reader_->ReadOffset(start)); return start + reader_->OffsetSize(); @@ -892,21 +893,6 @@ class CallFrameInfo::Rule { // If this is a base+offset rule, change its offset to OFFSET. Otherwise, // do nothing. (Ugly, but required for DW_CFA_def_cfa_offset.) virtual void SetOffset(long long offset) { } - - // A RTTI workaround, to make it possible to implement equality - // comparisons on classes derived from this one. - enum CFIRTag { - CFIR_UNDEFINED_RULE, - CFIR_SAME_VALUE_RULE, - CFIR_OFFSET_RULE, - CFIR_VAL_OFFSET_RULE, - CFIR_REGISTER_RULE, - CFIR_EXPRESSION_RULE, - CFIR_VAL_EXPRESSION_RULE - }; - - // Produce the tag that identifies the child class of this object. - virtual CFIRTag getTag() const = 0; }; // Rule: the value the register had in the caller cannot be recovered. @@ -914,13 +900,14 @@ class CallFrameInfo::UndefinedRule: public CallFrameInfo::Rule { public: UndefinedRule() { } ~UndefinedRule() { } - CFIRTag getTag() const { return CFIR_UNDEFINED_RULE; } bool Handle(Handler *handler, uint64 address, int reg) const { return handler->UndefinedRule(address, reg); } bool operator==(const Rule &rhs) const { - if (rhs.getTag() != CFIR_UNDEFINED_RULE) return false; - return true; + // dynamic_cast is allowed by the Google C++ Style Guide, if the use has + // been carefully considered; cheap RTTI-like workarounds are forbidden. + const UndefinedRule *our_rhs = dynamic_cast(&rhs); + return (our_rhs != NULL); } Rule *Copy() const { return new UndefinedRule(*this); } }; @@ -930,13 +917,14 @@ class CallFrameInfo::SameValueRule: public CallFrameInfo::Rule { public: SameValueRule() { } ~SameValueRule() { } - CFIRTag getTag() const { return CFIR_SAME_VALUE_RULE; } bool Handle(Handler *handler, uint64 address, int reg) const { return handler->SameValueRule(address, reg); } bool operator==(const Rule &rhs) const { - if (rhs.getTag() != CFIR_SAME_VALUE_RULE) return false; - return true; + // dynamic_cast is allowed by the Google C++ Style Guide, if the use has + // been carefully considered; cheap RTTI-like workarounds are forbidden. + const SameValueRule *our_rhs = dynamic_cast(&rhs); + return (our_rhs != NULL); } Rule *Copy() const { return new SameValueRule(*this); } }; @@ -948,14 +936,15 @@ class CallFrameInfo::OffsetRule: public CallFrameInfo::Rule { OffsetRule(int base_register, long offset) : base_register_(base_register), offset_(offset) { } ~OffsetRule() { } - CFIRTag getTag() const { return CFIR_OFFSET_RULE; } bool Handle(Handler *handler, uint64 address, int reg) const { return handler->OffsetRule(address, reg, base_register_, offset_); } bool operator==(const Rule &rhs) const { - if (rhs.getTag() != CFIR_OFFSET_RULE) return false; - const OffsetRule *our_rhs = static_cast(&rhs); - return (base_register_ == our_rhs->base_register_ && + // dynamic_cast is allowed by the Google C++ Style Guide, if the use has + // been carefully considered; cheap RTTI-like workarounds are forbidden. + const OffsetRule *our_rhs = dynamic_cast(&rhs); + return (our_rhs && + base_register_ == our_rhs->base_register_ && offset_ == our_rhs->offset_); } Rule *Copy() const { return new OffsetRule(*this); } @@ -976,14 +965,15 @@ class CallFrameInfo::ValOffsetRule: public CallFrameInfo::Rule { ValOffsetRule(int base_register, long offset) : base_register_(base_register), offset_(offset) { } ~ValOffsetRule() { } - CFIRTag getTag() const { return CFIR_VAL_OFFSET_RULE; } bool Handle(Handler *handler, uint64 address, int reg) const { return handler->ValOffsetRule(address, reg, base_register_, offset_); } bool operator==(const Rule &rhs) const { - if (rhs.getTag() != CFIR_VAL_OFFSET_RULE) return false; - const ValOffsetRule *our_rhs = static_cast(&rhs); - return (base_register_ == our_rhs->base_register_ && + // dynamic_cast is allowed by the Google C++ Style Guide, if the use has + // been carefully considered; cheap RTTI-like workarounds are forbidden. + const ValOffsetRule *our_rhs = dynamic_cast(&rhs); + return (our_rhs && + base_register_ == our_rhs->base_register_ && offset_ == our_rhs->offset_); } Rule *Copy() const { return new ValOffsetRule(*this); } @@ -1000,14 +990,14 @@ class CallFrameInfo::RegisterRule: public CallFrameInfo::Rule { explicit RegisterRule(int register_number) : register_number_(register_number) { } ~RegisterRule() { } - CFIRTag getTag() const { return CFIR_REGISTER_RULE; } bool Handle(Handler *handler, uint64 address, int reg) const { return handler->RegisterRule(address, reg, register_number_); } bool operator==(const Rule &rhs) const { - if (rhs.getTag() != CFIR_REGISTER_RULE) return false; - const RegisterRule *our_rhs = static_cast(&rhs); - return (register_number_ == our_rhs->register_number_); + // dynamic_cast is allowed by the Google C++ Style Guide, if the use has + // been carefully considered; cheap RTTI-like workarounds are forbidden. + const RegisterRule *our_rhs = dynamic_cast(&rhs); + return (our_rhs && register_number_ == our_rhs->register_number_); } Rule *Copy() const { return new RegisterRule(*this); } private: @@ -1020,14 +1010,14 @@ class CallFrameInfo::ExpressionRule: public CallFrameInfo::Rule { explicit ExpressionRule(const string &expression) : expression_(expression) { } ~ExpressionRule() { } - CFIRTag getTag() const { return CFIR_EXPRESSION_RULE; } bool Handle(Handler *handler, uint64 address, int reg) const { return handler->ExpressionRule(address, reg, expression_); } bool operator==(const Rule &rhs) const { - if (rhs.getTag() != CFIR_EXPRESSION_RULE) return false; - const ExpressionRule *our_rhs = static_cast(&rhs); - return (expression_ == our_rhs->expression_); + // dynamic_cast is allowed by the Google C++ Style Guide, if the use has + // been carefully considered; cheap RTTI-like workarounds are forbidden. + const ExpressionRule *our_rhs = dynamic_cast(&rhs); + return (our_rhs && expression_ == our_rhs->expression_); } Rule *Copy() const { return new ExpressionRule(*this); } private: @@ -1040,15 +1030,15 @@ class CallFrameInfo::ValExpressionRule: public CallFrameInfo::Rule { explicit ValExpressionRule(const string &expression) : expression_(expression) { } ~ValExpressionRule() { } - CFIRTag getTag() const { return CFIR_VAL_EXPRESSION_RULE; } bool Handle(Handler *handler, uint64 address, int reg) const { return handler->ValExpressionRule(address, reg, expression_); } bool operator==(const Rule &rhs) const { - if (rhs.getTag() != CFIR_VAL_EXPRESSION_RULE) return false; + // dynamic_cast is allowed by the Google C++ Style Guide, if the use has + // been carefully considered; cheap RTTI-like workarounds are forbidden. const ValExpressionRule *our_rhs = - static_cast(&rhs); - return (expression_ == our_rhs->expression_); + dynamic_cast(&rhs); + return (our_rhs && expression_ == our_rhs->expression_); } Rule *Copy() const { return new ValExpressionRule(*this); } private: @@ -1523,16 +1513,19 @@ bool CallFrameInfo::State::DoInstruction() { // Change the base register used to compute the CFA. case DW_CFA_def_cfa_register: { + if (!ParseOperands("r", &ops)) return false; Rule *cfa_rule = rules_.CFARule(); if (!cfa_rule) { - reporter_->NoCFARule(entry_->offset, entry_->kind, CursorOffset()); + if (!DoDefCFA(ops.register_number, ops.offset)) { + reporter_->NoCFARule(entry_->offset, entry_->kind, CursorOffset()); + return false; + } + } else { + cfa_rule->SetBaseRegister(ops.register_number); + if (!cfa_rule->Handle(handler_, address_, + Handler::kCFARegister)) return false; } - if (!ParseOperands("r", &ops)) return false; - cfa_rule->SetBaseRegister(ops.register_number); - if (!cfa_rule->Handle(handler_, address_, - Handler::kCFARegister)) - return false; break; } diff --git a/toolkit/crashreporter/google-breakpad/src/common/dwarf/functioninfo.cc b/toolkit/crashreporter/google-breakpad/src/common/dwarf/functioninfo.cc index 69023bfff88f..55a255eda61b 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/dwarf/functioninfo.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/dwarf/functioninfo.cc @@ -36,12 +36,14 @@ #include #include #include -#include #include "common/dwarf/functioninfo.h" #include "common/dwarf/bytereader.h" +#include "common/scoped_ptr.h" #include "common/using_std_string.h" +using google_breakpad::scoped_ptr; + namespace dwarf2reader { CULineInfoHandler::CULineInfoHandler(std::vector* files, @@ -99,11 +101,11 @@ void CULineInfoHandler::AddLine(uint64 address, uint64 length, uint32 file_num, std::make_pair(files_->at(file_num).name.c_str(), line_num))); - if(address < files_->at(file_num).lowpc) { + if (address < files_->at(file_num).lowpc) { files_->at(file_num).lowpc = address; } } else { - fprintf(stderr,"error in AddLine"); + fprintf(stderr, "error in AddLine"); } } @@ -151,7 +153,7 @@ void CUFunctionInfoHandler::ProcessAttributeString(uint64 offset, if (current_function_info_) { if (attr == DW_AT_name) current_function_info_->name = data; - else if(attr == DW_AT_MIPS_linkage_name) + else if (attr == DW_AT_MIPS_linkage_name) current_function_info_->mangled_name = data; } } @@ -164,10 +166,9 @@ void CUFunctionInfoHandler::ProcessAttributeUnsigned(uint64 offset, SectionMap::const_iterator iter = sections_.find("__debug_line"); assert(iter != sections_.end()); - // this should be a scoped_ptr but we dont' use boost :-( - std::auto_ptr lireader(new LineInfo(iter->second.first + data, - iter->second.second - data, - reader_, linehandler_)); + scoped_ptr lireader(new LineInfo(iter->second.first + data, + iter->second.second - data, + reader_, linehandler_)); lireader->Start(); } else if (current_function_info_) { switch (attr) { @@ -208,7 +209,10 @@ void CUFunctionInfoHandler::ProcessAttributeReference(uint64 offset, current_function_info_->mangled_name = iter->second->mangled_name; } else { // If you hit this, this code probably needs to be rewritten. - fprintf(stderr, "Error: DW_AT_specification was seen before the referenced DIE! (Looking for DIE at offset %08llx, in DIE at offset %08llx)\n", data, offset); + fprintf(stderr, + "Error: DW_AT_specification was seen before the referenced " + "DIE! (Looking for DIE at offset %08llx, in DIE at " + "offset %08llx)\n", data, offset); } break; } diff --git a/toolkit/crashreporter/google-breakpad/src/common/dwarf/moz.build b/toolkit/crashreporter/google-breakpad/src/common/dwarf/moz.build index f6621725991d..501322928d19 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/dwarf/moz.build +++ b/toolkit/crashreporter/google-breakpad/src/common/dwarf/moz.build @@ -4,21 +4,17 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. -if CONFIG['MOZ_CRASHREPORTER']: - HostLibrary('host_breakpad_dwarf_s') - HOST_SOURCES += [ - 'bytereader.cc', - 'dwarf2diehandler.cc', - 'dwarf2reader.cc', - 'functioninfo.cc', - ] - HOST_CXXFLAGS += [ - '-O2', - '-g', - ] - LOCAL_INCLUDES += [ - '../..', - ] +HostLibrary('host_breakpad_dwarf_s') +HOST_SOURCES += [ + 'bytereader.cc', + 'dwarf2diehandler.cc', + 'dwarf2reader.cc', + 'functioninfo.cc', +] +HOST_CXXFLAGS += [ + '-O2', + '-g', +] # need static lib FORCE_STATIC_LIB = True @@ -30,3 +26,4 @@ HOST_CXXFLAGS += [ '-funsigned-char', ] +include('/toolkit/crashreporter/crashreporter.mozbuild') diff --git a/toolkit/crashreporter/google-breakpad/src/common/dwarf_cfi_to_module.cc b/toolkit/crashreporter/google-breakpad/src/common/dwarf_cfi_to_module.cc index bd2348d66bf4..1bf1d96d59d9 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/dwarf_cfi_to_module.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/dwarf_cfi_to_module.cc @@ -35,27 +35,21 @@ // See dwarf_cfi_to_module.h for details. #include -#include #include "common/dwarf_cfi_to_module.h" -#include "common/logging.h" namespace google_breakpad { using std::ostringstream; -vector DwarfCFIToModule::RegisterNames::MakeVector( - const char* const* strings, +vector DwarfCFIToModule::RegisterNames::MakeVector( + const char * const *strings, size_t size) { - vector names(size, NULL); - for (size_t i = 0; i < size; ++i) { - names[i] = ToUniqueString(strings[i]); - } - + vector names(strings, strings + size); return names; } -vector DwarfCFIToModule::RegisterNames::I386() { +vector DwarfCFIToModule::RegisterNames::I386() { static const char *const names[] = { "$eax", "$ecx", "$edx", "$ebx", "$esp", "$ebp", "$esi", "$edi", "$eip", "$eflags", "$unused1", @@ -71,7 +65,7 @@ vector DwarfCFIToModule::RegisterNames::I386() { return MakeVector(names, sizeof(names) / sizeof(names[0])); } -vector DwarfCFIToModule::RegisterNames::X86_64() { +vector DwarfCFIToModule::RegisterNames::X86_64() { static const char *const names[] = { "$rax", "$rdx", "$rcx", "$rbx", "$rsi", "$rdi", "$rbp", "$rsp", "$r8", "$r9", "$r10", "$r11", "$r12", "$r13", "$r14", "$r15", @@ -91,7 +85,7 @@ vector DwarfCFIToModule::RegisterNames::X86_64() { } // Per ARM IHI 0040A, section 3.1 -vector DwarfCFIToModule::RegisterNames::ARM() { +vector DwarfCFIToModule::RegisterNames::ARM() { static const char *const names[] = { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "sp", "lr", "pc", @@ -111,6 +105,43 @@ vector DwarfCFIToModule::RegisterNames::ARM() { return MakeVector(names, sizeof(names) / sizeof(names[0])); } +// Per ARM IHI 0057A, section 3.1 +vector DwarfCFIToModule::RegisterNames::ARM64() { + static const char *const names[] = { + "x0", "x1", "x2", "x3", "x4", "x5", "x6", "x7", + "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", + "x16", "x17", "x18", "x19", "x20", "x21", "x22", "x23", + "x24", "x25", "x26", "x27", "x28", "x29", "x30", "sp", + "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", + "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", + "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", + "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", + "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31" + }; + + return MakeVector(names, sizeof(names) / sizeof(names[0])); +} + +vector DwarfCFIToModule::RegisterNames::MIPS() { + static const char* const kRegisterNames[] = { + "$zero", "$at", "$v0", "$v1", "$a0", "$a1", "$a2", "$a3", + "$t0", "$t1", "$t2", "$t3", "$t4", "$t5", "$t6", "$t7", + "$s0", "$s1", "$s2", "$s3", "$s4", "$s5", "$s6", "$s7", + "$t8", "$t9", "$k0", "$k1", "$gp", "$sp", "$fp", "$ra", + "$lo", "$hi", "$pc", "$f0", "$f2", "$f3", "$f4", "$f5", + "$f6", "$f7", "$f8", "$f9", "$f10", "$f11", "$f12", "$f13", + "$f14", "$f15", "$f16", "$f17", "$f18", "$f19", "$f20", + "$f21", "$f22", "$f23", "$f24", "$f25", "$f26", "$f27", + "$f28", "$f29", "$f30", "$f31", "$fcsr", "$fir" + }; + + return MakeVector(kRegisterNames, + sizeof(kRegisterNames) / sizeof(kRegisterNames[0])); +} + bool DwarfCFIToModule::Entry(size_t offset, uint64 address, uint64 length, uint8 version, const string &augmentation, unsigned return_address) { @@ -133,42 +164,49 @@ bool DwarfCFIToModule::Entry(size_t offset, uint64 address, uint64 length, // address on entry to the function. So establish an initial .ra // rule citing the return address register. if (return_address_ < register_names_.size()) - entry_->initial_rules[ustr__ZDra()] - = Module::Expr(register_names_[return_address_], 0, false); + entry_->initial_rules[ra_name_] = register_names_[return_address_]; return true; } -const UniqueString* DwarfCFIToModule::RegisterName(int i) { +string DwarfCFIToModule::RegisterName(int i) { assert(entry_); if (i < 0) { assert(i == kCFARegister); - return ustr__ZDcfa(); + return cfa_name_; } unsigned reg = i; if (reg == return_address_) - return ustr__ZDra(); + return ra_name_; // Ensure that a non-empty name exists for this register value. - if (reg < register_names_.size() && register_names_[reg] != ustr__empty()) + if (reg < register_names_.size() && !register_names_[reg].empty()) return register_names_[reg]; reporter_->UnnamedRegister(entry_offset_, reg); char buf[30]; sprintf(buf, "unnamed_register%u", reg); - return ToUniqueString(buf); + return buf; } void DwarfCFIToModule::Record(Module::Address address, int reg, - const Module::Expr &rule) { + const string &rule) { assert(entry_); + // Place the name in our global set of strings, and then use the string + // from the set. Even though the assignment looks like a copy, all the + // major std::string implementations use reference counting internally, + // so the effect is to have all our data structures share copies of rules + // whenever possible. Since register names are drawn from a + // vector, register names are already shared. + string shared_rule = *common_strings_.insert(rule).first; + // Is this one of this entry's initial rules? if (address == entry_->address) - entry_->initial_rules[RegisterName(reg)] = rule; + entry_->initial_rules[RegisterName(reg)] = shared_rule; // File it under the appropriate address. else - entry_->rule_changes[address][RegisterName(reg)] = rule; + entry_->rule_changes[address][RegisterName(reg)] = shared_rule; } bool DwarfCFIToModule::UndefinedRule(uint64 address, int reg) { @@ -178,37 +216,33 @@ bool DwarfCFIToModule::UndefinedRule(uint64 address, int reg) { } bool DwarfCFIToModule::SameValueRule(uint64 address, int reg) { - // reg + 0 - Module::Expr rule - = Module::Expr(RegisterName(reg), 0, false); - Record(address, reg, rule); + ostringstream s; + s << RegisterName(reg); + Record(address, reg, s.str()); return true; } bool DwarfCFIToModule::OffsetRule(uint64 address, int reg, int base_register, long offset) { - // *(base_register + offset) - Module::Expr rule - = Module::Expr(RegisterName(base_register), offset, true); - Record(address, reg, rule); + ostringstream s; + s << RegisterName(base_register) << " " << offset << " + ^"; + Record(address, reg, s.str()); return true; } bool DwarfCFIToModule::ValOffsetRule(uint64 address, int reg, int base_register, long offset) { - // base_register + offset - Module::Expr rule - = Module::Expr(RegisterName(base_register), offset, false); - Record(address, reg, rule); + ostringstream s; + s << RegisterName(base_register) << " " << offset << " +"; + Record(address, reg, s.str()); return true; } bool DwarfCFIToModule::RegisterRule(uint64 address, int reg, int base_register) { - // base_register + 0 - Module::Expr rule - = Module::Expr(RegisterName(base_register), 0, false); - Record(address, reg, rule); + ostringstream s; + s << RegisterName(base_register); + Record(address, reg, s.str()); return true; } @@ -233,37 +267,29 @@ bool DwarfCFIToModule::End() { } void DwarfCFIToModule::Reporter::UnnamedRegister(size_t offset, int reg) { - BPLOG(INFO) << file_ << ", section '" << section_ - << "': the call frame entry at offset 0x" - << std::setbase(16) << offset << std::setbase(10) - << " refers to register " << reg << ", whose name we don't know"; + fprintf(stderr, "%s, section '%s': " + "the call frame entry at offset 0x%zx refers to register %d," + " whose name we don't know\n", + file_.c_str(), section_.c_str(), offset, reg); } -void DwarfCFIToModule::Reporter::UndefinedNotSupported( - size_t offset, - const UniqueString* reg) { - BPLOG(INFO) << file_ << ", section '" << section_ - << "': the call frame entry at offset 0x" - << std::setbase(16) << offset << std::setbase(10) - << " sets the rule for register '" << FromUniqueString(reg) - << "' to 'undefined', but the Breakpad symbol file format cannot " - << " express this"; +void DwarfCFIToModule::Reporter::UndefinedNotSupported(size_t offset, + const string ®) { + fprintf(stderr, "%s, section '%s': " + "the call frame entry at offset 0x%zx sets the rule for " + "register '%s' to 'undefined', but the Breakpad symbol file format" + " cannot express this\n", + file_.c_str(), section_.c_str(), offset, reg.c_str()); } -void DwarfCFIToModule::Reporter::ExpressionsNotSupported( - size_t offset, - const UniqueString* reg) { - static uint64_t n_complaints = 0; // This isn't threadsafe - n_complaints++; - if (!is_power_of_2(n_complaints)) - return; - BPLOG(INFO) << file_ << ", section '" << section_ - << "': the call frame entry at offset 0x" - << std::setbase(16) << offset << std::setbase(10) - << " uses a DWARF expression to describe how to recover register '" - << FromUniqueString(reg) << "', but this translator cannot yet " - << "translate DWARF expressions to Breakpad postfix expressions (shown " - << n_complaints << " times)"; +void DwarfCFIToModule::Reporter::ExpressionsNotSupported(size_t offset, + const string ®) { + fprintf(stderr, "%s, section '%s': " + "the call frame entry at offset 0x%zx uses a DWARF expression to" + " describe how to recover register '%s', " + " but this translator cannot yet translate DWARF expressions to" + " Breakpad postfix expressions\n", + file_.c_str(), section_.c_str(), offset, reg.c_str()); } } // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/common/dwarf_cfi_to_module.h b/toolkit/crashreporter/google-breakpad/src/common/dwarf_cfi_to_module.h index fb837c5e6b5b..084b8f5a7517 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/dwarf_cfi_to_module.h +++ b/toolkit/crashreporter/google-breakpad/src/common/dwarf_cfi_to_module.h @@ -49,7 +49,6 @@ #include "common/module.h" #include "common/dwarf/dwarf2reader.h" #include "common/using_std_string.h" -#include "common/unique_string.h" namespace google_breakpad { @@ -84,15 +83,13 @@ class DwarfCFIToModule: public CallFrameInfo::Handler { // The DWARF CFI entry at OFFSET says that REG is undefined, but the // Breakpad symbol file format cannot express this. - virtual void UndefinedNotSupported(size_t offset, - const UniqueString* reg); + virtual void UndefinedNotSupported(size_t offset, const string ®); // The DWARF CFI entry at OFFSET says that REG uses a DWARF // expression to find its value, but DwarfCFIToModule is not // capable of translating DWARF expressions to Breakpad postfix // expressions. - virtual void ExpressionsNotSupported(size_t offset, - const UniqueString* reg); + virtual void ExpressionsNotSupported(size_t offset, const string ®); protected: string file_, section_; @@ -104,19 +101,24 @@ class DwarfCFIToModule: public CallFrameInfo::Handler { class RegisterNames { public: // Intel's "x86" or IA-32. - static vector I386(); + static vector I386(); // AMD x86_64, AMD64, Intel EM64T, or Intel 64 - static vector X86_64(); + static vector X86_64(); // ARM. - static vector ARM(); + static vector ARM(); + + // ARM64, aka AARCH64. + static vector ARM64(); + + // MIPS. + static vector MIPS(); private: // Given STRINGS, an array of C strings with SIZE elements, return an // equivalent vector. - static vector MakeVector(const char * const *strings, - size_t size); + static vector MakeVector(const char * const *strings, size_t size); }; // Create a handler for the dwarf2reader::CallFrameInfo parser that @@ -128,11 +130,10 @@ class DwarfCFIToModule: public CallFrameInfo::Handler { // // Use REPORTER for reporting problems encountered in the conversion // process. - DwarfCFIToModule(Module *module, - const vector ®ister_names, + DwarfCFIToModule(Module *module, const vector ®ister_names, Reporter *reporter) : module_(module), register_names_(register_names), reporter_(reporter), - entry_(NULL), return_address_(-1) { + entry_(NULL), return_address_(-1), cfa_name_(".cfa"), ra_name_(".ra") { } virtual ~DwarfCFIToModule() { delete entry_; } @@ -154,16 +155,16 @@ class DwarfCFIToModule: public CallFrameInfo::Handler { private: // Return the name to use for register REG. - const UniqueString* RegisterName(int i); + string RegisterName(int i); // Record RULE for register REG at ADDRESS. - void Record(Module::Address address, int reg, const Module::Expr &rule); + void Record(Module::Address address, int reg, const string &rule); // The module to which we should add entries. Module *module_; // Map from register numbers to register names. - const vector ®ister_names_; + const vector ®ister_names_; // The reporter to use to report problems. Reporter *reporter_; @@ -177,6 +178,23 @@ class DwarfCFIToModule: public CallFrameInfo::Handler { // The return address column for that entry. unsigned return_address_; + + // The names of the return address and canonical frame address. Putting + // these here instead of using string literals allows us to share their + // texts in reference-counted std::string implementations (all the + // popular ones). Many, many rules cite these strings. + string cfa_name_, ra_name_; + + // A set of strings used by this CFI. Before storing a string in one of + // our data structures, insert it into this set, and then use the string + // from the set. + // + // Because std::string uses reference counting internally, simply using + // strings from this set, even if passed by value, assigned, or held + // directly in structures and containers (map, for example), + // causes those strings to share a single instance of each distinct piece + // of text. + set common_strings_; }; } // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/common/dwarf_cfi_to_module_unittest.cc b/toolkit/crashreporter/google-breakpad/src/common/dwarf_cfi_to_module_unittest.cc index 4189beb44a5b..807d1b20c338 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/dwarf_cfi_to_module_unittest.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/dwarf_cfi_to_module_unittest.cc @@ -42,11 +42,6 @@ using std::vector; using google_breakpad::Module; using google_breakpad::DwarfCFIToModule; -using google_breakpad::ToUniqueString; -using google_breakpad::UniqueString; -using google_breakpad::ustr__ZDcfa; -using google_breakpad::ustr__ZDra; -using google_breakpad::ustr__empty; using testing::ContainerEq; using testing::Test; using testing::_; @@ -55,10 +50,8 @@ struct MockCFIReporter: public DwarfCFIToModule::Reporter { MockCFIReporter(const string &file, const string §ion) : Reporter(file, section) { } MOCK_METHOD2(UnnamedRegister, void(size_t offset, int reg)); - MOCK_METHOD2(UndefinedNotSupported, void(size_t offset, - const UniqueString* reg)); - MOCK_METHOD2(ExpressionsNotSupported, void(size_t offset, - const UniqueString* reg)); + MOCK_METHOD2(UndefinedNotSupported, void(size_t offset, const string ®)); + MOCK_METHOD2(ExpressionsNotSupported, void(size_t offset, const string ®)); }; struct DwarfCFIToModuleFixture { @@ -66,17 +59,17 @@ struct DwarfCFIToModuleFixture { : module("module name", "module os", "module arch", "module id"), reporter("reporter file", "reporter section"), handler(&module, register_names, &reporter) { - register_names.push_back(ToUniqueString("reg0")); - register_names.push_back(ToUniqueString("reg1")); - register_names.push_back(ToUniqueString("reg2")); - register_names.push_back(ToUniqueString("reg3")); - register_names.push_back(ToUniqueString("reg4")); - register_names.push_back(ToUniqueString("reg5")); - register_names.push_back(ToUniqueString("reg6")); - register_names.push_back(ToUniqueString("reg7")); - register_names.push_back(ToUniqueString("sp")); - register_names.push_back(ToUniqueString("pc")); - register_names.push_back(ustr__empty()); + register_names.push_back("reg0"); + register_names.push_back("reg1"); + register_names.push_back("reg2"); + register_names.push_back("reg3"); + register_names.push_back("reg4"); + register_names.push_back("reg5"); + register_names.push_back("reg6"); + register_names.push_back("reg7"); + register_names.push_back("sp"); + register_names.push_back("pc"); + register_names.push_back(""); EXPECT_CALL(reporter, UnnamedRegister(_, _)).Times(0); EXPECT_CALL(reporter, UndefinedNotSupported(_, _)).Times(0); @@ -84,7 +77,7 @@ struct DwarfCFIToModuleFixture { } Module module; - vector register_names; + vector register_names; MockCFIReporter reporter; DwarfCFIToModule handler; vector entries; @@ -139,7 +132,7 @@ struct RuleFixture: public DwarfCFIToModuleFixture { class Rule: public RuleFixture, public Test { }; TEST_F(Rule, UndefinedRule) { - EXPECT_CALL(reporter, UndefinedNotSupported(_, ToUniqueString("reg7"))); + EXPECT_CALL(reporter, UndefinedNotSupported(_, "reg7")); StartEntry(); ASSERT_TRUE(handler.UndefinedRule(entry_address, 7)); ASSERT_TRUE(handler.End()); @@ -150,8 +143,7 @@ TEST_F(Rule, UndefinedRule) { TEST_F(Rule, RegisterWithEmptyName) { EXPECT_CALL(reporter, UnnamedRegister(_, 10)); - EXPECT_CALL(reporter, - UndefinedNotSupported(_, ToUniqueString("unnamed_register10"))); + EXPECT_CALL(reporter, UndefinedNotSupported(_, "unnamed_register10")); StartEntry(); ASSERT_TRUE(handler.UndefinedRule(entry_address, 10)); ASSERT_TRUE(handler.End()); @@ -166,8 +158,7 @@ TEST_F(Rule, SameValueRule) { ASSERT_TRUE(handler.End()); CheckEntry(); Module::RuleMap expected_initial; - const UniqueString* reg6 = ToUniqueString("reg6"); - expected_initial[reg6] = Module::Expr(reg6, 0, false); + expected_initial["reg6"] = "reg6"; EXPECT_THAT(entries[0]->initial_rules, ContainerEq(expected_initial)); EXPECT_EQ(0U, entries[0]->rule_changes.size()); } @@ -181,8 +172,7 @@ TEST_F(Rule, OffsetRule) { CheckEntry(); EXPECT_EQ(0U, entries[0]->initial_rules.size()); Module::RuleChangeMap expected_changes; - expected_changes[entry_address + 1][ustr__ZDra()] = - Module::Expr(ustr__ZDcfa(), 16927065, true); + expected_changes[entry_address + 1][".ra"] = ".cfa 16927065 + ^"; EXPECT_THAT(entries[0]->rule_changes, ContainerEq(expected_changes)); } @@ -194,8 +184,7 @@ TEST_F(Rule, OffsetRuleNegative) { CheckEntry(); EXPECT_EQ(0U, entries[0]->initial_rules.size()); Module::RuleChangeMap expected_changes; - expected_changes[entry_address + 1][ustr__ZDcfa()] = - Module::Expr(ToUniqueString("reg4"), -34530721, true); + expected_changes[entry_address + 1][".cfa"] = "reg4 -34530721 + ^"; EXPECT_THAT(entries[0]->rule_changes, ContainerEq(expected_changes)); } @@ -210,8 +199,8 @@ TEST_F(Rule, ValOffsetRule) { CheckEntry(); EXPECT_EQ(0U, entries[0]->initial_rules.size()); Module::RuleChangeMap expected_changes; - expected_changes[entry_address + 0x5ab7][ustr__ZDcfa()] = - Module::Expr(ToUniqueString("unnamed_register11"), 61812979, false); + expected_changes[entry_address + 0x5ab7][".cfa"] = + "unnamed_register11 61812979 +"; EXPECT_THAT(entries[0]->rule_changes, ContainerEq(expected_changes)); } @@ -221,14 +210,13 @@ TEST_F(Rule, RegisterRule) { ASSERT_TRUE(handler.End()); CheckEntry(); Module::RuleMap expected_initial; - expected_initial[ustr__ZDra()] = - Module::Expr(ToUniqueString("reg3"), 0, false); + expected_initial[".ra"] = "reg3"; EXPECT_THAT(entries[0]->initial_rules, ContainerEq(expected_initial)); EXPECT_EQ(0U, entries[0]->rule_changes.size()); } TEST_F(Rule, ExpressionRule) { - EXPECT_CALL(reporter, ExpressionsNotSupported(_, ToUniqueString("reg2"))); + EXPECT_CALL(reporter, ExpressionsNotSupported(_, "reg2")); StartEntry(); ASSERT_TRUE(handler.ExpressionRule(entry_address + 0xf326, 2, "it takes two to tango")); @@ -239,7 +227,7 @@ TEST_F(Rule, ExpressionRule) { } TEST_F(Rule, ValExpressionRule) { - EXPECT_CALL(reporter, ExpressionsNotSupported(_, ToUniqueString("reg0"))); + EXPECT_CALL(reporter, ExpressionsNotSupported(_, "reg0")); StartEntry(); ASSERT_TRUE(handler.ValExpressionRule(entry_address + 0x6367, 0, "bit off more than he could chew")); @@ -256,10 +244,8 @@ TEST_F(Rule, DefaultReturnAddressRule) { ASSERT_TRUE(handler.End()); CheckEntry(); Module::RuleMap expected_initial; - expected_initial[ustr__ZDra()] = - Module::Expr(ToUniqueString("reg2"), 0, false); - expected_initial[ToUniqueString("reg0")] = - Module::Expr(ToUniqueString("reg1"), 0, false); + expected_initial[".ra"] = "reg2"; + expected_initial["reg0"] = "reg1"; EXPECT_THAT(entries[0]->initial_rules, ContainerEq(expected_initial)); EXPECT_EQ(0U, entries[0]->rule_changes.size()); } @@ -271,8 +257,7 @@ TEST_F(Rule, DefaultReturnAddressRuleOverride) { ASSERT_TRUE(handler.End()); CheckEntry(); Module::RuleMap expected_initial; - expected_initial[ustr__ZDra()] = - Module::Expr(ToUniqueString("reg1"), 0, false); + expected_initial[".ra"] = "reg1"; EXPECT_THAT(entries[0]->initial_rules, ContainerEq(expected_initial)); EXPECT_EQ(0U, entries[0]->rule_changes.size()); } @@ -284,40 +269,38 @@ TEST_F(Rule, DefaultReturnAddressRuleLater) { ASSERT_TRUE(handler.End()); CheckEntry(); Module::RuleMap expected_initial; - expected_initial[ustr__ZDra()] = - Module::Expr(ToUniqueString("reg2"), 0, false); + expected_initial[".ra"] = "reg2"; EXPECT_THAT(entries[0]->initial_rules, ContainerEq(expected_initial)); Module::RuleChangeMap expected_changes; - expected_changes[entry_address + 1][ustr__ZDra()] = - Module::Expr(ToUniqueString("reg1"), 0, false); + expected_changes[entry_address + 1][".ra"] = "reg1"; EXPECT_THAT(entries[0]->rule_changes, ContainerEq(expected_changes)); } TEST(RegisterNames, I386) { - vector names = DwarfCFIToModule::RegisterNames::I386(); + vector names = DwarfCFIToModule::RegisterNames::I386(); - EXPECT_EQ(ToUniqueString("$eax"), names[0]); - EXPECT_EQ(ToUniqueString("$ecx"), names[1]); - EXPECT_EQ(ToUniqueString("$esp"), names[4]); - EXPECT_EQ(ToUniqueString("$eip"), names[8]); + EXPECT_EQ("$eax", names[0]); + EXPECT_EQ("$ecx", names[1]); + EXPECT_EQ("$esp", names[4]); + EXPECT_EQ("$eip", names[8]); } TEST(RegisterNames, ARM) { - vector names = DwarfCFIToModule::RegisterNames::ARM(); + vector names = DwarfCFIToModule::RegisterNames::ARM(); - EXPECT_EQ(ToUniqueString("r0"), names[0]); - EXPECT_EQ(ToUniqueString("r10"), names[10]); - EXPECT_EQ(ToUniqueString("sp"), names[13]); - EXPECT_EQ(ToUniqueString("lr"), names[14]); - EXPECT_EQ(ToUniqueString("pc"), names[15]); + EXPECT_EQ("r0", names[0]); + EXPECT_EQ("r10", names[10]); + EXPECT_EQ("sp", names[13]); + EXPECT_EQ("lr", names[14]); + EXPECT_EQ("pc", names[15]); } TEST(RegisterNames, X86_64) { - vector names = DwarfCFIToModule::RegisterNames::X86_64(); + vector names = DwarfCFIToModule::RegisterNames::X86_64(); - EXPECT_EQ(ToUniqueString("$rax"), names[0]); - EXPECT_EQ(ToUniqueString("$rdx"), names[1]); - EXPECT_EQ(ToUniqueString("$rbp"), names[6]); - EXPECT_EQ(ToUniqueString("$rsp"), names[7]); - EXPECT_EQ(ToUniqueString("$rip"), names[16]); + EXPECT_EQ("$rax", names[0]); + EXPECT_EQ("$rdx", names[1]); + EXPECT_EQ("$rbp", names[6]); + EXPECT_EQ("$rsp", names[7]); + EXPECT_EQ("$rip", names[16]); } diff --git a/toolkit/crashreporter/google-breakpad/src/common/dwarf_cu_to_module.cc b/toolkit/crashreporter/google-breakpad/src/common/dwarf_cu_to_module.cc index 59bef859dcdc..1729d4ac93af 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/dwarf_cu_to_module.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/dwarf_cu_to_module.cc @@ -43,20 +43,18 @@ #include #endif #include +#include #include -#include #include -#include #include "common/dwarf_line_to_module.h" -#include "common/logging.h" +#include "common/unordered.h" namespace google_breakpad { using std::map; using std::pair; -using std::set; using std::sort; using std::vector; @@ -92,7 +90,7 @@ struct DwarfCUToModule::Specification { // An abstract origin -- base definition of an inline function. struct AbstractOrigin { AbstractOrigin() : name() {} - AbstractOrigin(const string& name) : name(name) {} + explicit AbstractOrigin(const string& name) : name(name) {} string name; }; @@ -119,7 +117,7 @@ struct DwarfCUToModule::FilePrivate { // so this set will actually hold yet another copy of the string (although // everything will still work). To improve memory consumption portably, // we will probably need to use pointers to strings held in this set. - set common_strings; + unordered_set common_strings; // A map from offsets of DIEs within the .debug_info section to // Specifications describing those DIEs. Specification references can @@ -129,14 +127,42 @@ struct DwarfCUToModule::FilePrivate { AbstractOriginByOffset origins; }; -DwarfCUToModule::FileContext::FileContext(const string &filename_arg, - Module *module_arg) - : filename(filename_arg), module(module_arg) { - file_private = new FilePrivate(); +DwarfCUToModule::FileContext::FileContext(const string &filename, + Module *module, + bool handle_inter_cu_refs) + : filename_(filename), + module_(module), + handle_inter_cu_refs_(handle_inter_cu_refs), + file_private_(new FilePrivate()) { } DwarfCUToModule::FileContext::~FileContext() { - delete file_private; +} + +void DwarfCUToModule::FileContext::AddSectionToSectionMap( + const string& name, const char* contents, uint64 length) { + section_map_[name] = std::make_pair(contents, length); +} + +void DwarfCUToModule::FileContext::ClearSectionMapForTest() { + section_map_.clear(); +} + +const dwarf2reader::SectionMap& +DwarfCUToModule::FileContext::section_map() const { + return section_map_; +} + +void DwarfCUToModule::FileContext::ClearSpecifications() { + if (!handle_inter_cu_refs_) + file_private_->specifications.clear(); +} + +bool DwarfCUToModule::FileContext::IsUnhandledInterCUReference( + uint64 offset, uint64 compilation_unit_start) const { + if (handle_inter_cu_refs_) + return false; + return offset < compilation_unit_start; } // Information global to the particular compilation unit we're @@ -146,11 +172,13 @@ struct DwarfCUToModule::CUContext { CUContext(FileContext *file_context_arg, WarningReporter *reporter_arg) : file_context(file_context_arg), reporter(reporter_arg), - language(Language::CPlusPlus) { } + language(Language::CPlusPlus) {} + ~CUContext() { for (vector::iterator it = functions.begin(); - it != functions.end(); it++) + it != functions.end(); ++it) { delete *it; + } }; // The DWARF-bearing file into which this CU was incorporated. @@ -277,14 +305,19 @@ void DwarfCUToModule::GenericDIEHandler::ProcessAttributeReference( uint64 data) { switch (attr) { case dwarf2reader::DW_AT_specification: { + FileContext *file_context = cu_context_->file_context; + if (file_context->IsUnhandledInterCUReference( + data, cu_context_->reporter->cu_offset())) { + cu_context_->reporter->UnhandledInterCUReference(offset_, data); + break; + } // Find the Specification to which this attribute refers, and // set specification_ appropriately. We could do more processing // here, but it's better to leave the real work to our // EndAttribute member function, at which point we know we have // seen all the DIE's attributes. - FileContext *file_context = cu_context_->file_context; - SpecificationByOffset *specifications - = &file_context->file_private->specifications; + SpecificationByOffset *specifications = + &file_context->file_private_->specifications; SpecificationByOffset::iterator spec = specifications->find(data); if (spec != specifications->end()) { specification_ = &spec->second; @@ -303,8 +336,8 @@ void DwarfCUToModule::GenericDIEHandler::ProcessAttributeReference( } string DwarfCUToModule::GenericDIEHandler::AddStringToPool(const string &str) { - pair::iterator, bool> result = - cu_context_->file_context->file_private->common_strings.insert(str); + pair::iterator, bool> result = + cu_context_->file_context->file_private_->common_strings.insert(str); return *result.first; } @@ -318,9 +351,15 @@ void DwarfCUToModule::GenericDIEHandler::ProcessAttributeString( break; case dwarf2reader::DW_AT_MIPS_linkage_name: { char* demangled = NULL; -#if !defined(__ANDROID__) - demangled = abi::__cxa_demangle(data.c_str(), NULL, NULL, NULL); + int status = -1; +#if !defined(__ANDROID__) // Android NDK doesn't provide abi::__cxa_demangle. + demangled = abi::__cxa_demangle(data.c_str(), NULL, NULL, &status); #endif + if (status != 0) { + cu_context_->reporter->DemangleError(data, status); + demangled_name_ = ""; + break; + } if (demangled) { demangled_name_ = AddStringToPool(demangled); free(reinterpret_cast(demangled)); @@ -363,27 +402,32 @@ string DwarfCUToModule::GenericDIEHandler::ComputeQualifiedName() { enclosing_name = &parent_context_->name; } + // Prepare the return value before upcoming mutations possibly invalidate the + // existing pointers. + string return_value; + if (qualified_name) { + return_value = *qualified_name; + } else { + // Combine the enclosing name and unqualified name to produce our + // own fully-qualified name. + return_value = cu_context_->language->MakeQualifiedName(*enclosing_name, + *unqualified_name); + } + // If this DIE was marked as a declaration, record its names in the // specification table. if (declaration_) { - FileContext *file_context = cu_context_->file_context; Specification spec; - if (qualified_name) + if (qualified_name) { spec.qualified_name = *qualified_name; - else { + } else { spec.enclosing_name = *enclosing_name; spec.unqualified_name = *unqualified_name; } - file_context->file_private->specifications[offset_] = spec; + cu_context_->file_context->file_private_->specifications[offset_] = spec; } - if (qualified_name) - return *qualified_name; - - // Combine the enclosing name and unqualified name to produce our - // own fully-qualified name. - return cu_context_->language->MakeQualifiedName(*enclosing_name, - *unqualified_name); + return return_value; } // A handler class for DW_TAG_subprogram DIEs. @@ -458,10 +502,10 @@ void DwarfCUToModule::FuncHandler::ProcessAttributeReference( enum DwarfAttribute attr, enum DwarfForm form, uint64 data) { - switch(attr) { + switch (attr) { case dwarf2reader::DW_AT_abstract_origin: { const AbstractOriginByOffset& origins = - cu_context_->file_context->file_private->origins; + cu_context_->file_context->file_private_->origins; AbstractOriginByOffset::const_iterator origin = origins.find(data); if (origin != origins.end()) { abstract_origin_ = &(origin->second); @@ -496,28 +540,29 @@ void DwarfCUToModule::FuncHandler::Finish() { // functions that were never used), but all the ones we're // interested in cover a non-empty range of bytes. if (low_pc_ < high_pc_) { - // Create a Module::Function based on the data we've gathered, and - // add it to the functions_ list. - Module::Function *func = new Module::Function; // Malformed DWARF may omit the name, but all Module::Functions must // have names. + string name; if (!name_.empty()) { - func->name = name_; + name = name_; } else { cu_context_->reporter->UnnamedFunction(offset_); - func->name = ""; + name = ""; } - func->address = low_pc_; + + // Create a Module::Function based on the data we've gathered, and + // add it to the functions_ list. + scoped_ptr func(new Module::Function(name, low_pc_)); func->size = high_pc_ - low_pc_; func->parameter_size = 0; if (func->address) { // If the function address is zero this is a sign that this function // description is just empty debug data and should just be discarded. - cu_context_->functions.push_back(func); + cu_context_->functions.push_back(func.release()); } } else if (inline_) { AbstractOrigin origin(name_); - cu_context_->file_context->file_private->origins[offset_] = origin; + cu_context_->file_context->file_private_->origins[offset_] = origin; } } @@ -559,54 +604,48 @@ dwarf2reader::DIEHandler *DwarfCUToModule::NamedScopeHandler::FindChildHandler( void DwarfCUToModule::WarningReporter::CUHeading() { if (printed_cu_header_) return; - BPLOG(INFO) - << filename_ << ": in compilation unit '" << cu_name_ - << "' (offset 0x" << std::setbase(16) << cu_offset_ << std::setbase(10) - << "):"; + fprintf(stderr, "%s: in compilation unit '%s' (offset 0x%llx):\n", + filename_.c_str(), cu_name_.c_str(), cu_offset_); printed_cu_header_ = true; } void DwarfCUToModule::WarningReporter::UnknownSpecification(uint64 offset, uint64 target) { CUHeading(); - BPLOG(INFO) - << filename_ << ": the DIE at offset 0x" - << std::setbase(16) << offset << std::setbase(10) - << " has a DW_AT_specification attribute referring to the die at offset 0x" - << std::setbase(16) << target << std::setbase(10) - << ", which either was not marked as a declaration, or comes " - << "later in the file"; + fprintf(stderr, "%s: the DIE at offset 0x%llx has a DW_AT_specification" + " attribute referring to the die at offset 0x%llx, which either" + " was not marked as a declaration, or comes later in the file\n", + filename_.c_str(), offset, target); } void DwarfCUToModule::WarningReporter::UnknownAbstractOrigin(uint64 offset, uint64 target) { CUHeading(); - BPLOG(INFO) - << filename_ << ": the DIE at offset 0x" - << std::setbase(16) << offset << std::setbase(10) - << " has a DW_AT_abstract_origin attribute referring to the die at" - << " offset 0x" << std::setbase(16) << target << std::setbase(10) - << ", which either was not marked as an inline, or comes " - << "later in the file"; + fprintf(stderr, "%s: the DIE at offset 0x%llx has a DW_AT_abstract_origin" + " attribute referring to the die at offset 0x%llx, which either" + " was not marked as an inline, or comes later in the file\n", + filename_.c_str(), offset, target); } void DwarfCUToModule::WarningReporter::MissingSection(const string &name) { CUHeading(); - BPLOG(INFO) << filename_ << ": warning: couldn't find DWARF '" - << name << "' section"; + fprintf(stderr, "%s: warning: couldn't find DWARF '%s' section\n", + filename_.c_str(), name.c_str()); } void DwarfCUToModule::WarningReporter::BadLineInfoOffset(uint64 offset) { CUHeading(); - BPLOG(INFO) << filename_ << ": warning: line number data offset beyond " - << "end of '.debug_line' section"; + fprintf(stderr, "%s: warning: line number data offset beyond end" + " of '.debug_line' section\n", + filename_.c_str()); } void DwarfCUToModule::WarningReporter::UncoveredHeading() { if (printed_unpaired_header_) return; CUHeading(); - BPLOG(INFO) << filename_ << ": warning: skipping unpaired lines/functions:"; + fprintf(stderr, "%s: warning: skipping unpaired lines/functions:\n", + filename_.c_str()); printed_unpaired_header_ = true; } @@ -615,36 +654,52 @@ void DwarfCUToModule::WarningReporter::UncoveredFunction( if (!uncovered_warnings_enabled_) return; UncoveredHeading(); - BPLOG(INFO) << " function" << (function.size == 0 ? " (zero-length)" : "") - << ": " << function.name; + fprintf(stderr, " function%s: %s\n", + function.size == 0 ? " (zero-length)" : "", + function.name.c_str()); } void DwarfCUToModule::WarningReporter::UncoveredLine(const Module::Line &line) { if (!uncovered_warnings_enabled_) return; UncoveredHeading(); - BPLOG(INFO) << " line" << (line.size == 0 ? " (zero-length)" : "") - << ": " << line.file->name << ":" << line.number - << " at 0x" << std::setbase(16) << line.address << std::setbase(10); + fprintf(stderr, " line%s: %s:%d at 0x%" PRIx64 "\n", + (line.size == 0 ? " (zero-length)" : ""), + line.file->name.c_str(), line.number, line.address); } void DwarfCUToModule::WarningReporter::UnnamedFunction(uint64 offset) { CUHeading(); - BPLOG(INFO) << filename_ << ": warning: function at offset 0x" - << std::setbase(16) << offset << std::setbase(10) << " has no name"; + fprintf(stderr, "%s: warning: function at offset 0x%llx has no name\n", + filename_.c_str(), offset); +} + +void DwarfCUToModule::WarningReporter::DemangleError( + const string &input, int error) { + CUHeading(); + fprintf(stderr, "%s: warning: failed to demangle %s with error %d\n", + filename_.c_str(), input.c_str(), error); +} + +void DwarfCUToModule::WarningReporter::UnhandledInterCUReference( + uint64 offset, uint64 target) { + CUHeading(); + fprintf(stderr, "%s: warning: the DIE at offset 0x%llx has a " + "DW_FORM_ref_addr attribute with an inter-CU reference to " + "0x%llx, but inter-CU reference handling is turned off.\n", + filename_.c_str(), offset, target); } DwarfCUToModule::DwarfCUToModule(FileContext *file_context, LineToModuleHandler *line_reader, WarningReporter *reporter) - : line_reader_(line_reader), has_source_line_info_(false) { - cu_context_ = new CUContext(file_context, reporter); - child_context_ = new DIEContext(); + : line_reader_(line_reader), + cu_context_(new CUContext(file_context, reporter)), + child_context_(new DIEContext()), + has_source_line_info_(false) { } DwarfCUToModule::~DwarfCUToModule() { - delete cu_context_; - delete child_context_; } void DwarfCUToModule::ProcessAttributeSigned(enum DwarfAttribute attr, @@ -699,12 +754,13 @@ dwarf2reader::DIEHandler *DwarfCUToModule::FindChildHandler( enum DwarfTag tag) { switch (tag) { case dwarf2reader::DW_TAG_subprogram: - return new FuncHandler(cu_context_, child_context_, offset); + return new FuncHandler(cu_context_.get(), child_context_.get(), offset); case dwarf2reader::DW_TAG_namespace: case dwarf2reader::DW_TAG_class_type: case dwarf2reader::DW_TAG_structure_type: case dwarf2reader::DW_TAG_union_type: - return new NamedScopeHandler(cu_context_, child_context_, offset); + return new NamedScopeHandler(cu_context_.get(), child_context_.get(), + offset); default: return NULL; } @@ -729,7 +785,7 @@ void DwarfCUToModule::SetLanguage(DwarfLanguage language) { // Objective C and Objective C++ seem to create entries for // methods whose DW_AT_name values are already fully-qualified: // "-[Classname method:]". These appear at the top level. - // + // // DWARF data for C should never include namespaces or functions // nested in struct types, but if it ever does, then C++'s // notation is probably not a bad choice for that. @@ -747,7 +803,7 @@ void DwarfCUToModule::SetLanguage(DwarfLanguage language) { void DwarfCUToModule::ReadSourceLines(uint64 offset) { const dwarf2reader::SectionMap §ion_map - = cu_context_->file_context->section_map; + = cu_context_->file_context->section_map(); dwarf2reader::SectionMap::const_iterator map_entry = section_map.find(".debug_line"); // Mac OS X puts DWARF data in sections whose names begin with "__" @@ -765,7 +821,7 @@ void DwarfCUToModule::ReadSourceLines(uint64 offset) { return; } line_reader_->ReadProgram(section_start + offset, section_length - offset, - cu_context_->file_context->module, &lines_); + cu_context_->file_context->module_, &lines_); } namespace { @@ -932,7 +988,7 @@ void DwarfCUToModule::AssignLinesToFunctions() { // both func and line begin after CURRENT. The next transition // is the start of the next function or next line, whichever // is earliest. - assert (func || line); + assert(func || line); if (func && line) next_transition = std::min(func->address, line->address); else if (func) @@ -990,12 +1046,14 @@ void DwarfCUToModule::Finish() { // Add our functions, which now have source lines assigned to them, // to module_. - cu_context_->file_context->module->AddFunctions(functions->begin(), - functions->end()); + cu_context_->file_context->module_->AddFunctions(functions->begin(), + functions->end()); // Ownership of the function objects has shifted from cu_context to // the Module. functions->clear(); + + cu_context_->file_context->ClearSpecifications(); } bool DwarfCUToModule::StartCompilationUnit(uint64 offset, diff --git a/toolkit/crashreporter/google-breakpad/src/common/dwarf_cu_to_module.h b/toolkit/crashreporter/google-breakpad/src/common/dwarf_cu_to_module.h index 4f1f05801d0b..fd9c380d9d8b 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/dwarf_cu_to_module.h +++ b/toolkit/crashreporter/google-breakpad/src/common/dwarf_cu_to_module.h @@ -46,6 +46,7 @@ #include "common/dwarf/bytereader.h" #include "common/dwarf/dwarf2diehandler.h" #include "common/dwarf/dwarf2reader.h" +#include "common/scoped_ptr.h" #include "common/using_std_string.h" namespace google_breakpad { @@ -65,7 +66,6 @@ using dwarf2reader::DwarfTag; class DwarfCUToModule: public dwarf2reader::RootDIEHandler { struct FilePrivate; public: - // Information global to the DWARF-bearing file we are processing, // for use by DwarfCUToModule. Each DwarfCUToModule instance deals // with a single compilation unit within the file, but information @@ -73,23 +73,52 @@ class DwarfCUToModule: public dwarf2reader::RootDIEHandler { // for filling it in appropriately (except for the 'file_private' // field, which the constructor and destructor take care of), and // then providing it to the DwarfCUToModule instance for each - // compilation unit we process in that file. - struct FileContext { - FileContext(const string &filename_arg, Module *module_arg); + // compilation unit we process in that file. Set HANDLE_INTER_CU_REFS + // to true to handle debugging symbols with DW_FORM_ref_addr entries. + class FileContext { + public: + FileContext(const string &filename, + Module *module, + bool handle_inter_cu_refs); ~FileContext(); + // Add CONTENTS of size LENGTH to the section map as NAME. + void AddSectionToSectionMap(const string& name, + const char* contents, + uint64 length); + + // Clear the section map for testing. + void ClearSectionMapForTest(); + + const dwarf2reader::SectionMap& section_map() const; + + private: + friend class DwarfCUToModule; + + // Clears all the Specifications if HANDLE_INTER_CU_REFS_ is false. + void ClearSpecifications(); + + // Given an OFFSET and a CU that starts at COMPILATION_UNIT_START, returns + // true if this is an inter-compilation unit reference that is not being + // handled. + bool IsUnhandledInterCUReference(uint64 offset, + uint64 compilation_unit_start) const; + // The name of this file, for use in error messages. - string filename; + const string filename_; // A map of this file's sections, used for finding other DWARF // sections that the .debug_info section may refer to. - dwarf2reader::SectionMap section_map; + dwarf2reader::SectionMap section_map_; // The Module to which we're contributing definitions. - Module *module; + Module *module_; + + // True if we are handling references between compilation units. + const bool handle_inter_cu_refs_; // Inter-compilation unit data used internally by the handlers. - FilePrivate *file_private; + scoped_ptr file_private_; }; // An abstract base class for handlers that handle DWARF line data @@ -170,9 +199,20 @@ class DwarfCUToModule: public dwarf2reader::RootDIEHandler { // link. virtual void UnnamedFunction(uint64 offset); + // __cxa_demangle() failed to demangle INPUT. + virtual void DemangleError(const string &input, int error); + + // The DW_FORM_ref_addr at OFFSET to TARGET was not handled because + // FilePrivate did not retain the inter-CU specification data. + virtual void UnhandledInterCUReference(uint64 offset, uint64 target); + + uint64 cu_offset() const { + return cu_offset_; + } + protected: - string filename_; - uint64 cu_offset_; + const string filename_; + const uint64 cu_offset_; string cu_name_; bool printed_cu_header_; bool printed_unpaired_header_; @@ -218,12 +258,11 @@ class DwarfCUToModule: public dwarf2reader::RootDIEHandler { bool StartRootDIE(uint64 offset, enum DwarfTag tag); private: - // Used internally by the handler. Full definitions are in // dwarf_cu_to_module.cc. - struct Specification; struct CUContext; struct DIEContext; + struct Specification; class GenericDIEHandler; class FuncHandler; class NamedScopeHandler; @@ -233,7 +272,7 @@ class DwarfCUToModule: public dwarf2reader::RootDIEHandler { // Set this compilation unit's source language to LANGUAGE. void SetLanguage(DwarfLanguage language); - + // Read source line information at OFFSET in the .debug_line // section. Record source files in module_, but record source lines // in lines_; we apportion them to functions in @@ -256,10 +295,10 @@ class DwarfCUToModule: public dwarf2reader::RootDIEHandler { LineToModuleHandler *line_reader_; // This compilation unit's context. - CUContext *cu_context_; + scoped_ptr cu_context_; // A context for our children. - DIEContext *child_context_; + scoped_ptr child_context_; // True if this compilation unit has source line information. bool has_source_line_info_; @@ -274,6 +313,6 @@ class DwarfCUToModule: public dwarf2reader::RootDIEHandler { vector lines_; }; -} // namespace google_breakpad +} // namespace google_breakpad #endif // COMMON_LINUX_DWARF_CU_TO_MODULE_H__ diff --git a/toolkit/crashreporter/google-breakpad/src/common/dwarf_cu_to_module_unittest.cc b/toolkit/crashreporter/google-breakpad/src/common/dwarf_cu_to_module_unittest.cc index 81e629b04abf..9ff842c882e6 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/dwarf_cu_to_module_unittest.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/dwarf_cu_to_module_unittest.cc @@ -81,6 +81,8 @@ class MockWarningReporter: public DwarfCUToModule::WarningReporter { MOCK_METHOD1(UncoveredFunction, void(const Module::Function &function)); MOCK_METHOD1(UncoveredLine, void(const Module::Line &line)); MOCK_METHOD1(UnnamedFunction, void(uint64 offset)); + MOCK_METHOD2(DemangleError, void(const string &input, int error)); + MOCK_METHOD2(UnhandledInterCUReference, void(uint64 offset, uint64 target)); }; // A fixture class including all the objects needed to handle a @@ -88,7 +90,6 @@ class MockWarningReporter: public DwarfCUToModule::WarningReporter { // for doing common kinds of setup and tests. class CUFixtureBase { public: - // If we have: // // vector lines; @@ -108,7 +109,8 @@ class CUFixtureBase { // in which case calling l2m with some line vector will append lines. class AppendLinesFunctor { public: - AppendLinesFunctor(const vector *lines) : lines_(lines) { } + explicit AppendLinesFunctor( + const vector *lines) : lines_(lines) { } void operator()(const char *program, uint64 length, Module *module, vector *lines) { lines->insert(lines->end(), lines_->begin(), lines_->end()); @@ -119,7 +121,7 @@ class CUFixtureBase { CUFixtureBase() : module_("module-name", "module-os", "module-arch", "module-id"), - file_context_("dwarf-filename", &module_), + file_context_("dwarf-filename", &module_, true), language_(dwarf2reader::DW_LANG_none), language_signed_(false), appender_(&lines_), @@ -137,6 +139,7 @@ class CUFixtureBase { EXPECT_CALL(reporter_, UncoveredFunction(_)).Times(0); EXPECT_CALL(reporter_, UncoveredLine(_)).Times(0); EXPECT_CALL(reporter_, UnnamedFunction(_)).Times(0); + EXPECT_CALL(reporter_, UnhandledInterCUReference(_, _)).Times(0); // By default, expect the line program reader not to be invoked. We // may override this in StartCU. @@ -145,8 +148,9 @@ class CUFixtureBase { // The handler will consult this section map to decide what to // pass to our line reader. - file_context_.section_map[".debug_line"] = make_pair(dummy_line_program_, - dummy_line_size_); + file_context_.AddSectionToSectionMap(".debug_line", + dummy_line_program_, + dummy_line_size_); } // Add a line with the given address, size, filename, and line @@ -182,7 +186,7 @@ class CUFixtureBase { // not Finish. DIEHandler *StartNamedDIE(DIEHandler *parent, DwarfTag tag, const string &name); - + // Start a child DIE of PARENT with the given tag and a // DW_AT_specification attribute whose value is SPECIFICATION. Leave // the handler ready to hear about children: call EndAttributes, but @@ -190,7 +194,7 @@ class CUFixtureBase { // attribute. DIEHandler *StartSpecifiedDIE(DIEHandler *parent, DwarfTag tag, uint64 specification, const char *name = NULL); - + // Define a function as a child of PARENT with the given name, address, and // size. If high_pc_form is DW_FORM_addr then the DW_AT_high_pc attribute // will be written as an address; otherwise it will be written as the @@ -246,7 +250,7 @@ class CUFixtureBase { // parameter size is zero. void TestFunction(int i, const string &name, Module::Address address, Module::Address size); - + // Test that the number of source lines owned by the I'th function // in the module this.module_ is equal to EXPECTED. void TestLineCount(int i, size_t expected); @@ -283,7 +287,7 @@ class CUFixtureBase { AppendLinesFunctor appender_; static const char dummy_line_program_[]; static const size_t dummy_line_size_; - + MockWarningReporter reporter_; DwarfCUToModule root_handler_; @@ -299,8 +303,8 @@ class CUFixtureBase { }; const char CUFixtureBase::dummy_line_program_[] = "lots of fun data"; -const size_t CUFixtureBase::dummy_line_size_ = - sizeof (CUFixtureBase::dummy_line_program_); +const size_t CUFixtureBase::dummy_line_size_ = + sizeof(CUFixtureBase::dummy_line_program_); void CUFixtureBase::PushLine(Module::Address address, Module::Address size, const string &filename, int line_number) { @@ -320,7 +324,7 @@ void CUFixtureBase::StartCU() { // If we have lines, make the line reader expect to be invoked at // most once. (Hey, if the handler can pass its tests without // bothering to read the line number data, that's great.) - // Have it add the lines passed to PushLine. Otherwise, leave the + // Have it add the lines passed to PushLine. Otherwise, leave the // initial expectation (no calls) in force. if (!lines_.empty()) EXPECT_CALL(line_reader_, @@ -396,7 +400,7 @@ DIEHandler *CUFixtureBase::StartNamedDIE(DIEHandler *parent, delete handler; return NULL; } - + return handler; } @@ -420,7 +424,7 @@ DIEHandler *CUFixtureBase::StartSpecifiedDIE(DIEHandler *parent, delete handler; return NULL; } - + return handler; } @@ -541,7 +545,7 @@ void CUFixtureBase::AbstractInstanceDIE(DIEHandler *parent, void CUFixtureBase::DefineInlineInstanceDIE(DIEHandler *parent, const string &name, - uint64 origin, + uint64 origin, Module::Address address, Module::Address size) { dwarf2reader::DIEHandler *func @@ -708,7 +712,7 @@ TEST_F(SimpleCU, IrrelevantNamedScopeChildren) { // Verify that FileContexts can safely be deleted unused. TEST_F(SimpleCU, UnusedFileContext) { Module m("module-name", "module-os", "module-arch", "module-id"); - DwarfCUToModule::FileContext fc("dwarf-filename", &m); + DwarfCUToModule::FileContext fc("dwarf-filename", &m, true); // Kludge: satisfy reporter_'s expectation. reporter_.SetCUName("compilation-unit-name"); @@ -864,34 +868,33 @@ TEST_P(FuncLinePairing, Pairing) { StartCU(); DefineFunction(&root_handler_, "function1", - s.functions[0].start, + s.functions[0].start, s.functions[0].end - s.functions[0].start, NULL); DefineFunction(&root_handler_, "function2", - s.functions[1].start, + s.functions[1].start, s.functions[1].end - s.functions[1].start, NULL); root_handler_.Finish(); TestFunctionCount(2); TestFunction(0, "function1", - s.functions[0].start, + s.functions[0].start, s.functions[0].end - s.functions[0].start); TestLineCount(0, s.paired_count[0]); for (int i = 0; i < s.paired_count[0]; i++) - TestLine(0, i, s.paired[0][i].start, - s.paired[0][i].end - s.paired[0][i].start, + TestLine(0, i, s.paired[0][i].start, + s.paired[0][i].end - s.paired[0][i].start, "line-file", 67636963); TestFunction(1, "function2", - s.functions[1].start, + s.functions[1].start, s.functions[1].end - s.functions[1].start); TestLineCount(1, s.paired_count[1]); for (int i = 0; i < s.paired_count[1]; i++) - TestLine(1, i, s.paired[1][i].start, - s.paired[1][i].end - s.paired[1][i].start, + TestLine(1, i, s.paired[1][i].start, + s.paired[1][i].end - s.paired[1][i].start, "line-file", 67636963); } TEST_F(FuncLinePairing, EmptyCU) { - StartCU(); root_handler_.Finish(); @@ -913,7 +916,7 @@ TEST_F(FuncLinePairing, FuncsNoLines) { StartCU(); DefineFunction(&root_handler_, "function1", 0x127da12ffcf5c51fULL, 0x1000U, - NULL); + NULL); root_handler_.Finish(); TestFunctionCount(1); @@ -1064,11 +1067,11 @@ TEST_P(CXXQualifiedNames, FuncInEnclosureInNamespace) { PushLine(10, 1, "line-file", 69819327); StartCU(); - DIEHandler *namespace_handler + DIEHandler *namespace_handler = StartNamedDIE(&root_handler_, dwarf2reader::DW_TAG_namespace, "Namespace"); EXPECT_TRUE(namespace_handler != NULL); - DIEHandler *enclosure_handler = StartNamedDIE(namespace_handler, tag, + DIEHandler *enclosure_handler = StartNamedDIE(namespace_handler, tag, "Enclosure"); EXPECT_TRUE(enclosure_handler != NULL); DefineFunction(enclosure_handler, "function", 10, 1, NULL); @@ -1127,10 +1130,10 @@ const LanguageAndQualifiedName LanguageAndQualifiedNameCases[] = { { dwarf2reader::DW_LANG_Mips_Assembler, NULL } }; -class QualifiedForLanguage: - public CUFixtureBase, - public TestWithParam { }; - +class QualifiedForLanguage + : public CUFixtureBase, + public TestWithParam { }; + INSTANTIATE_TEST_CASE_P(LanguageAndQualifiedName, QualifiedForLanguage, ValuesIn(LanguageAndQualifiedNameCases)); @@ -1254,7 +1257,7 @@ TEST_F(Specifications, FunctionDeclarationParent) { } DefinitionDIE(&root_handler_, dwarf2reader::DW_TAG_subprogram, - 0x0e0e877c8404544aULL, "definition-name", + 0x0e0e877c8404544aULL, "definition-name", 0x463c9ddf405be227ULL, 0x6a47774af5049680ULL); root_handler_.Finish(); @@ -1287,14 +1290,14 @@ TEST_F(Specifications, NamedScopeDeclarationParent) { = StartSpecifiedDIE(&root_handler_, dwarf2reader::DW_TAG_class_type, 0x419bb1d12f9a73a2ULL, "class-definition-name"); ASSERT_TRUE(class_handler != NULL); - DefineFunction(class_handler, "function", + DefineFunction(class_handler, "function", 0x5d13433d0df13d00ULL, 0x48ebebe5ade2cab4ULL, NULL); class_handler->Finish(); delete class_handler; } root_handler_.Finish(); - + TestFunctionCount(1); TestFunction(0, "space_A::class-definition-name::function", 0x5d13433d0df13d00ULL, 0x48ebebe5ade2cab4ULL); @@ -1341,14 +1344,14 @@ TEST_F(Specifications, LongChain) { // class_H definition // func_I declaration // func_I definition - // - // So: + // + // So: // - space_A, struct_C, union_E, and class_G don't use specifications; // - space_B, struct_D, union_F, and class_H do. // - func_I uses a specification. - // + // // The full name for func_I is thus: - // + // // space_A::space_B::struct_C::struct_D::union_E::union_F:: // class_G::class_H::func_I { @@ -1429,7 +1432,7 @@ TEST_F(Specifications, LongChain) { TEST_F(Specifications, InterCU) { Module m("module-name", "module-os", "module-arch", "module-id"); - DwarfCUToModule::FileContext fc("dwarf-filename", &m); + DwarfCUToModule::FileContext fc("dwarf-filename", &m, true); EXPECT_CALL(reporter_, UncoveredFunction(_)).WillOnce(Return()); MockLineToModuleHandler lr; EXPECT_CALL(lr, ReadProgram(_,_,_,_)).Times(0); @@ -1449,7 +1452,7 @@ TEST_F(Specifications, InterCU) { dwarf2reader::DW_TAG_class_type, "class_A", ""); root1_handler.Finish(); } - + // Second CU. Defines class_A, declares member_func_B. { DwarfCUToModule root2_handler(&fc, &lr, &reporter_); @@ -1486,6 +1489,63 @@ TEST_F(Specifications, InterCU) { EXPECT_STREQ("class_A::member_func_B", functions[0]->name.c_str()); } +TEST_F(Specifications, UnhandledInterCU) { + Module m("module-name", "module-os", "module-arch", "module-id"); + DwarfCUToModule::FileContext fc("dwarf-filename", &m, false); + EXPECT_CALL(reporter_, UncoveredFunction(_)).WillOnce(Return()); + MockLineToModuleHandler lr; + EXPECT_CALL(lr, ReadProgram(_,_,_,_)).Times(0); + + // Kludge: satisfy reporter_'s expectation. + reporter_.SetCUName("compilation-unit-name"); + + // First CU. Declares class_A. + { + DwarfCUToModule root1_handler(&fc, &lr, &reporter_); + ASSERT_TRUE(root1_handler.StartCompilationUnit(0, 1, 2, 3, 3)); + ASSERT_TRUE(root1_handler.StartRootDIE(1, + dwarf2reader::DW_TAG_compile_unit)); + ProcessStrangeAttributes(&root1_handler); + ASSERT_TRUE(root1_handler.EndAttributes()); + DeclarationDIE(&root1_handler, 0xb8fbfdd5f0b26fceULL, + dwarf2reader::DW_TAG_class_type, "class_A", ""); + root1_handler.Finish(); + } + + // Second CU. Defines class_A, declares member_func_B. + { + DwarfCUToModule root2_handler(&fc, &lr, &reporter_); + ASSERT_TRUE(root2_handler.StartCompilationUnit(0, 1, 2, 3, 3)); + ASSERT_TRUE(root2_handler.StartRootDIE(1, + dwarf2reader::DW_TAG_compile_unit)); + ASSERT_TRUE(root2_handler.EndAttributes()); + EXPECT_CALL(reporter_, UnhandledInterCUReference(_, _)).Times(1); + DIEHandler *class_A_handler + = StartSpecifiedDIE(&root2_handler, dwarf2reader::DW_TAG_class_type, + 0xb8fbfdd5f0b26fceULL); + DeclarationDIE(class_A_handler, 0xb01fef8b380bd1a2ULL, + dwarf2reader::DW_TAG_subprogram, "member_func_B", ""); + class_A_handler->Finish(); + delete class_A_handler; + root2_handler.Finish(); + } + + // Third CU. Defines member_func_B. + { + DwarfCUToModule root3_handler(&fc, &lr, &reporter_); + ASSERT_TRUE(root3_handler.StartCompilationUnit(0, 1, 2, 3, 3)); + ASSERT_TRUE(root3_handler.StartRootDIE(1, + dwarf2reader::DW_TAG_compile_unit)); + ASSERT_TRUE(root3_handler.EndAttributes()); + EXPECT_CALL(reporter_, UnhandledInterCUReference(_, _)).Times(1); + EXPECT_CALL(reporter_, UnnamedFunction(_)).Times(1); + DefinitionDIE(&root3_handler, dwarf2reader::DW_TAG_subprogram, + 0xb01fef8b380bd1a2ULL, "", + 0x2618f00a1a711e53ULL, 0x4fd94b76d7c2caf5ULL); + root3_handler.Finish(); + } +} + TEST_F(Specifications, BadOffset) { PushLine(0xa0277efd7ce83771ULL, 0x149554a184c730c1ULL, "line-file", 56636272); EXPECT_CALL(reporter_, UnknownSpecification(_, 0x2be953efa6f9a996ULL)) @@ -1554,8 +1614,9 @@ TEST_F(Specifications, PreferSpecificationParents) { StartCU(); { - dwarf2reader::DIEHandler *declaration_class_handler - = StartNamedDIE(&root_handler_, dwarf2reader::DW_TAG_class_type, "declaration-class"); + dwarf2reader::DIEHandler *declaration_class_handler = + StartNamedDIE(&root_handler_, dwarf2reader::DW_TAG_class_type, + "declaration-class"); DeclarationDIE(declaration_class_handler, 0x9ddb35517455ef7aULL, dwarf2reader::DW_TAG_subprogram, "function-declaration", ""); @@ -1603,7 +1664,7 @@ TEST_F(CUErrors, NoLineSection) { EXPECT_CALL(reporter_, MissingSection(".debug_line")).Times(1); PushLine(0x88507fb678052611ULL, 0x42c8e9de6bbaa0faULL, "line-file", 64472290); // Delete the entry for .debug_line added by the fixture class's constructor. - file_context_.section_map.clear(); + file_context_.ClearSectionMapForTest(); StartCU(); root_handler_.Finish(); @@ -1652,22 +1713,20 @@ TEST_F(CUErrors, BadCURootDIETag) { // produce) output, so their results need to be checked by hand. struct Reporter: public Test { Reporter() - : reporter("filename", 0x123456789abcdef0ULL) { + : reporter("filename", 0x123456789abcdef0ULL), + function("function name", 0x19c45c30770c1eb0ULL), + file("source file name") { reporter.SetCUName("compilation-unit-name"); - function.name = "function name"; - function.address = 0x19c45c30770c1eb0ULL; function.size = 0x89808a5bdfa0a6a3ULL; function.parameter_size = 0x6a329f18683dcd51ULL; - file.name = "source file name"; - line.address = 0x3606ac6267aebeccULL; line.size = 0x5de482229f32556aULL; line.file = &file; line.number = 93400201; } - + DwarfCUToModule::WarningReporter reporter; Module::Function function; Module::File file; @@ -1714,7 +1773,7 @@ TEST_F(Reporter, UncoveredLineEnabled) { TEST_F(Reporter, UnnamedFunction) { reporter.UnnamedFunction(0x90c0baff9dedb2d9ULL); -} +} // Would be nice to also test: // - overlapping lines, functions diff --git a/toolkit/crashreporter/google-breakpad/src/common/dwarf_line_to_module.cc b/toolkit/crashreporter/google-breakpad/src/common/dwarf_line_to_module.cc index d899aa3b0db2..258b0b603f85 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/dwarf_line_to_module.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/dwarf_line_to_module.cc @@ -32,11 +32,12 @@ // dwarf_line_to_module.cc: Implementation of DwarfLineToModule class. // See dwarf_line_to_module.h for details. +#include + #include #include "common/dwarf_line_to_module.h" #include "common/using_std_string.h" -#include "common/logging.h" // Trying to support Windows paths in a reasonable way adds a lot of // variations to test; it would be better to just put off dealing with @@ -88,8 +89,8 @@ void DwarfLineToModule::DefineFile(const string &name, int32 file_num, dir_name = directory_it->second; } else { if (!warned_bad_directory_number_) { - BPLOG(INFO) << "warning: DWARF line number data refers to undefined" - << " directory numbers"; + fprintf(stderr, "warning: DWARF line number data refers to undefined" + " directory numbers\n"); warned_bad_directory_number_ = true; } } @@ -124,8 +125,8 @@ void DwarfLineToModule::AddLine(uint64 address, uint64 length, Module::File *file = files_[file_num]; if (!file) { if (!warned_bad_file_number_) { - BPLOG(INFO) << "warning: DWARF line number data refers to " - << "undefined file numbers"; + fprintf(stderr, "warning: DWARF line number data refers to " + "undefined file numbers\n"); warned_bad_file_number_ = true; } return; diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/Makefile.in b/toolkit/crashreporter/google-breakpad/src/common/linux/Makefile.in index a35acea48e6f..48bb7bdcc4c9 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/linux/Makefile.in +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/Makefile.in @@ -2,12 +2,12 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. -ifneq (Android,$(OS_TARGET)) +ifeq (Android,$(OS_TARGET)) +ifeq (gonk,$(MOZ_WIDGET_TOOLKIT)) +TARGET_LOCAL_INCLUDES += -I$(topsrcdir)/toolkit/crashreporter/gonk-include/ else TARGET_LOCAL_INCLUDES += -I$(topsrcdir)/toolkit/crashreporter/google-breakpad/src/common/android/include/ endif +endif include $(topsrcdir)/config/rules.mk - -# See https://bugzilla.mozilla.org/show_bug.cgi?id=741348#c11 -file_id.$(OBJ_SUFFIX): DISABLE_STL_WRAPPING := 1 diff --git a/toolkit/crashreporter/google-breakpad/src/processor/testdata/test_app.cc b/toolkit/crashreporter/google-breakpad/src/common/linux/crc32.cc similarity index 58% rename from toolkit/crashreporter/google-breakpad/src/processor/testdata/test_app.cc rename to toolkit/crashreporter/google-breakpad/src/common/linux/crc32.cc index 7882a8bd61b4..8df636ce4d73 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/testdata/test_app.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/crc32.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2006, Google Inc. +// Copyright 2014 Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -27,43 +27,44 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// This file is used to generate minidump2.dmp and minidump2.sym. -// cl /Zi test_app.cc /Fetest_app.exe /I google_breakpad/src \ -// google_breakpad/src/client/windows/releasestaticcrt/exception_handler.lib -// Then run test_app to generate a dump, and dump_syms to create the .sym file. +#include "common/linux/crc32.h" -#include +namespace google_breakpad { -#include "client/windows/handler/exception_handler.h" +// This implementation is based on the sample implementation in RFC 1952. -namespace { +// CRC32 polynomial, in reversed form. +// See RFC 1952, or http://en.wikipedia.org/wiki/Cyclic_redundancy_check +static const uint32_t kCrc32Polynomial = 0xEDB88320; +static uint32_t kCrc32Table[256] = { 0 }; -static bool callback(const wchar_t *dump_path, const wchar_t *id, - void *context, EXCEPTION_POINTERS *exinfo, - MDRawAssertionInfo *assertion, - bool succeeded) { - if (succeeded) { - printf("dump guid is %ws\n", id); - } else { - printf("dump failed\n"); +#define arraysize(f) (sizeof(f) / sizeof(*f)) + +static void EnsureCrc32TableInited() { + if (kCrc32Table[arraysize(kCrc32Table) - 1]) + return; // already inited + for (uint32_t i = 0; i < arraysize(kCrc32Table); ++i) { + uint32_t c = i; + for (size_t j = 0; j < 8; ++j) { + if (c & 1) { + c = kCrc32Polynomial ^ (c >> 1); + } else { + c >>= 1; + } + } + kCrc32Table[i] = c; } - fflush(stdout); - - return succeeded; } -static void CrashFunction() { - int *i = reinterpret_cast(0x45); - *i = 5; // crash! +uint32_t UpdateCrc32(uint32_t start, const void* buf, size_t len) { + EnsureCrc32TableInited(); + + uint32_t c = start ^ 0xFFFFFFFF; + const uint8_t* u = static_cast(buf); + for (size_t i = 0; i < len; ++i) { + c = kCrc32Table[(c ^ u[i]) & 0xFF] ^ (c >> 8); + } + return c ^ 0xFFFFFFFF; } -} // namespace - -int main(int argc, char **argv) { - google_breakpad::ExceptionHandler eh( - L".", NULL, callback, NULL, - google_breakpad::ExceptionHandler::HANDLER_ALL); - CrashFunction(); - printf("did not crash?\n"); - return 0; -} +} // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/utilities_unittest.cc b/toolkit/crashreporter/google-breakpad/src/common/linux/crc32.h similarity index 68% rename from toolkit/crashreporter/google-breakpad/src/third_party/glog/src/utilities_unittest.cc rename to toolkit/crashreporter/google-breakpad/src/common/linux/crc32.h index 7b796190e392..e3d9db92bef2 100644 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/utilities_unittest.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/crc32.h @@ -1,4 +1,4 @@ -// Copyright (c) 2008, Google Inc. +// Copyright 2014 Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -26,29 +26,28 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: Shinichiro Hamaji -#include "utilities.h" -#include "googletest.h" -#include "glog/logging.h" +#ifndef COMMON_LINUX_CRC32_H_ +#define COMMON_LINUX_CRC32_H_ -using namespace GOOGLE_NAMESPACE; +#include -TEST(utilities, sync_val_compare_and_swap) { - bool now_entering = false; - EXPECT_FALSE(sync_val_compare_and_swap(&now_entering, false, true)); - EXPECT_TRUE(sync_val_compare_and_swap(&now_entering, false, true)); - EXPECT_TRUE(sync_val_compare_and_swap(&now_entering, false, true)); +#include + +namespace google_breakpad { + +// Updates a CRC32 checksum with |len| bytes from |buf|. |initial| holds the +// checksum result from the previous update; for the first call, it should be 0. +uint32_t UpdateCrc32(uint32_t initial, const void* buf, size_t len); + +// Computes a CRC32 checksum using |len| bytes from |buf|. +inline uint32_t ComputeCrc32(const void* buf, size_t len) { + return UpdateCrc32(0, buf, len); +} +inline uint32_t ComputeCrc32(const std::string& str) { + return ComputeCrc32(str.c_str(), str.size()); } -TEST(utilities, InitGoogleLoggingDeathTest) { - ASSERT_DEATH(InitGoogleLogging("foobar"), ""); -} +} // namespace google_breakpad -int main(int argc, char **argv) { - InitGoogleLogging(argv[0]); - InitGoogleTest(&argc, argv); - - CHECK_EQ(RUN_ALL_TESTS(), 0); -} +#endif // COMMON_LINUX_CRC32_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/dump_symbols.cc b/toolkit/crashreporter/google-breakpad/src/common/linux/dump_symbols.cc index 8e379a7eca78..4222ce30281b 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/linux/dump_symbols.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/dump_symbols.cc @@ -58,6 +58,8 @@ #include "common/dwarf_cfi_to_module.h" #include "common/dwarf_cu_to_module.h" #include "common/dwarf_line_to_module.h" +#include "common/linux/crc32.h" +#include "common/linux/eintr_wrapper.h" #include "common/linux/elfutils.h" #include "common/linux/elfutils-inl.h" #include "common/linux/elf_symbols_to_module.h" @@ -69,16 +71,16 @@ #include "common/stabs_to_module.h" #endif #include "common/using_std_string.h" -#include "common/logging.h" #ifndef SHT_ARM_EXIDX -// bionic and older glibc don't define it +// bionic and older glibc don't define this # define SHT_ARM_EXIDX (SHT_LOPROC + 1) #endif // This namespace contains helper functions. namespace { +using google_breakpad::DumpOptions; using google_breakpad::DwarfCFIToModule; using google_breakpad::DwarfCUToModule; using google_breakpad::DwarfLineToModule; @@ -92,9 +94,22 @@ using google_breakpad::Module; #ifndef NO_STABS_SUPPORT using google_breakpad::StabsToModule; #endif -using google_breakpad::UniqueString; using google_breakpad::scoped_ptr; +// Define AARCH64 ELF architecture if host machine does not include this define. +#ifndef EM_AARCH64 +#define EM_AARCH64 183 +#endif + +// Define SHT_ANDROID_REL and SHT_ANDROID_RELA if not defined by the host. +// Sections with this type contain Android packed relocations. +#ifndef SHT_ANDROID_REL +#define SHT_ANDROID_REL (SHT_LOOS + 1) +#endif +#ifndef SHT_ANDROID_RELA +#define SHT_ANDROID_RELA (SHT_LOOS + 2) +#endif + // // FDWrapper // @@ -148,7 +163,7 @@ class MmapWrapper { private: bool is_set_; - void *base_; + void* base_; size_t size_; }; @@ -159,14 +174,16 @@ typename ElfClass::Addr GetLoadingAddress( int nheader) { typedef typename ElfClass::Phdr Phdr; + // For non-PIC executables (e_type == ET_EXEC), the load address is + // the start address of the first PT_LOAD segment. (ELF requires + // the segments to be sorted by load address.) For PIC executables + // and dynamic libraries (e_type == ET_DYN), this address will + // normally be zero. for (int i = 0; i < nheader; ++i) { const Phdr& header = program_headers[i]; - // For executable, it is the PT_LOAD segment with offset to zero. - if (header.p_type == PT_LOAD && - header.p_offset == 0) + if (header.p_type == PT_LOAD) return header.p_vaddr; } - // For other types of ELF, return 0. return 0; } @@ -209,8 +226,8 @@ class DumperLineToModule: public DwarfCUToModule::LineToModuleHandler { void StartCompilationUnit(const string& compilation_dir) { compilation_dir_ = compilation_dir; } - void ReadProgram(const char *program, uint64 length, - Module *module, std::vector *lines) { + void ReadProgram(const char* program, uint64 length, + Module* module, std::vector* lines) { DwarfLineToModule handler(module, compilation_dir_, lines); dwarf2reader::LineInfo parser(program, length, byte_reader_, &handler); parser.Start(); @@ -224,6 +241,7 @@ template bool LoadDwarf(const string& dwarf_filename, const typename ElfClass::Ehdr* elf_header, const bool big_endian, + bool handle_inter_cu_refs, Module* module) { typedef typename ElfClass::Shdr Shdr; @@ -232,7 +250,9 @@ bool LoadDwarf(const string& dwarf_filename, dwarf2reader::ByteReader byte_reader(endianness); // Construct a context for this file. - DwarfCUToModule::FileContext file_context(dwarf_filename, module); + DwarfCUToModule::FileContext file_context(dwarf_filename, + module, + handle_inter_cu_refs); // Build a map of the ELF file's sections. const Shdr* sections = @@ -246,14 +266,16 @@ bool LoadDwarf(const string& dwarf_filename, section->sh_name; const char* contents = GetOffset(elf_header, section->sh_offset); - uint64 length = section->sh_size; - file_context.section_map[name] = std::make_pair(contents, length); + file_context.AddSectionToSectionMap(name, contents, section->sh_size); } // Parse all the compilation units in the .debug_info section. DumperLineToModule line_to_module(&byte_reader); - std::pair debug_info_section - = file_context.section_map[".debug_info"]; + dwarf2reader::SectionMap::const_iterator debug_info_entry = + file_context.section_map().find(".debug_info"); + assert(debug_info_entry != file_context.section_map().end()); + const std::pair& debug_info_section = + debug_info_entry->second; // This should never have been called if the file doesn't have a // .debug_info section. assert(debug_info_section.first); @@ -266,7 +288,7 @@ bool LoadDwarf(const string& dwarf_filename, // Make a Dwarf2Handler that drives the DIEHandler. dwarf2reader::DIEDispatcher die_dispatcher(&root_handler); // Make a DWARF parser for the compilation unit at OFFSET. - dwarf2reader::CompilationUnit reader(file_context.section_map, + dwarf2reader::CompilationUnit reader(file_context.section_map(), offset, &byte_reader, &die_dispatcher); @@ -283,7 +305,7 @@ bool LoadDwarf(const string& dwarf_filename, // supported. template bool DwarfCFIRegisterNames(const typename ElfClass::Ehdr* elf_header, - std::vector* register_names) { + std::vector* register_names) { switch (elf_header->e_machine) { case EM_386: *register_names = DwarfCFIToModule::RegisterNames::I386(); @@ -291,6 +313,12 @@ bool DwarfCFIRegisterNames(const typename ElfClass::Ehdr* elf_header, case EM_ARM: *register_names = DwarfCFIToModule::RegisterNames::ARM(); return true; + case EM_AARCH64: + *register_names = DwarfCFIToModule::RegisterNames::ARM64(); + return true; + case EM_MIPS: + *register_names = DwarfCFIToModule::RegisterNames::MIPS(); + return true; case EM_X86_64: *register_names = DwarfCFIToModule::RegisterNames::X86_64(); return true; @@ -311,7 +339,7 @@ bool LoadDwarfCFI(const string& dwarf_filename, Module* module) { // Find the appropriate set of register names for this file's // architecture. - std::vector register_names; + std::vector register_names; if (!DwarfCFIRegisterNames(elf_header, ®ister_names)) { fprintf(stderr, "%s: unrecognized ELF machine architecture '%d';" " cannot convert DWARF call frame information\n", @@ -412,7 +440,7 @@ bool LoadELF(const string& obj_file, MmapWrapper* map_wrapper, obj_file.c_str(), strerror(errno)); return false; } - void *obj_base = mmap(NULL, st.st_size, + void* obj_base = mmap(NULL, st.st_size, PROT_READ | PROT_WRITE, MAP_PRIVATE, obj_fd, 0); if (obj_base == MAP_FAILED) { fprintf(stderr, "Failed to mmap ELF file '%s': %s\n", @@ -446,52 +474,97 @@ bool ElfEndianness(const typename ElfClass::Ehdr* elf_header, return false; } +// Given |left_abspath|, find the absolute path for |right_path| and see if the +// two absolute paths are the same. +bool IsSameFile(const char* left_abspath, const string& right_path) { + char right_abspath[PATH_MAX]; + if (!realpath(right_path.c_str(), right_abspath)) + return false; + return strcmp(left_abspath, right_abspath) == 0; +} + // Read the .gnu_debuglink and get the debug file name. If anything goes // wrong, return an empty string. -template string ReadDebugLink(const char* debuglink, - size_t debuglink_size, + const size_t debuglink_size, + const bool big_endian, const string& obj_file, const std::vector& debug_dirs) { - size_t debuglink_len = strlen(debuglink) + 5; // '\0' + CRC32. - debuglink_len = 4 * ((debuglink_len + 3) / 4); // Round to nearest 4 bytes. + size_t debuglink_len = strlen(debuglink) + 5; // Include '\0' + CRC32. + debuglink_len = 4 * ((debuglink_len + 3) / 4); // Round up to 4 bytes. // Sanity check. if (debuglink_len != debuglink_size) { fprintf(stderr, "Mismatched .gnu_debuglink string / section size: " "%zx %zx\n", debuglink_len, debuglink_size); - return ""; + return string(); } - bool found = false; - int debuglink_fd = -1; + char obj_file_abspath[PATH_MAX]; + if (!realpath(obj_file.c_str(), obj_file_abspath)) { + fprintf(stderr, "Cannot resolve absolute path for %s\n", obj_file.c_str()); + return string(); + } + + std::vector searched_paths; string debuglink_path; std::vector::const_iterator it; for (it = debug_dirs.begin(); it < debug_dirs.end(); ++it) { const string& debug_dir = *it; debuglink_path = debug_dir + "/" + debuglink; - debuglink_fd = open(debuglink_path.c_str(), O_RDONLY); - if (debuglink_fd >= 0) { - found = true; - break; + + // There is the annoying case of /path/to/foo.so having foo.so as the + // debug link file name. Thus this may end up opening /path/to/foo.so again, + // and there is a small chance of the two files having the same CRC. + if (IsSameFile(obj_file_abspath, debuglink_path)) + continue; + + searched_paths.push_back(debug_dir); + int debuglink_fd = open(debuglink_path.c_str(), O_RDONLY); + if (debuglink_fd < 0) + continue; + + FDWrapper debuglink_fd_wrapper(debuglink_fd); + + // The CRC is the last 4 bytes in |debuglink|. + const dwarf2reader::Endianness endianness = big_endian ? + dwarf2reader::ENDIANNESS_BIG : dwarf2reader::ENDIANNESS_LITTLE; + dwarf2reader::ByteReader byte_reader(endianness); + uint32_t expected_crc = + byte_reader.ReadFourBytes(&debuglink[debuglink_size - 4]); + + uint32_t actual_crc = 0; + while (true) { + const size_t kReadSize = 4096; + char buf[kReadSize]; + ssize_t bytes_read = HANDLE_EINTR(read(debuglink_fd, &buf, kReadSize)); + if (bytes_read < 0) { + fprintf(stderr, "Error reading debug ELF file %s.\n", + debuglink_path.c_str()); + return string(); + } + if (bytes_read == 0) + break; + actual_crc = google_breakpad::UpdateCrc32(actual_crc, buf, bytes_read); } + if (actual_crc != expected_crc) { + fprintf(stderr, "Error reading debug ELF file - CRC32 mismatch: %s\n", + debuglink_path.c_str()); + continue; + } + + // Found debug file. + return debuglink_path; } - if (!found) { - fprintf(stderr, "Failed to find debug ELF file for '%s' after trying:\n", - obj_file.c_str()); - for (it = debug_dirs.begin(); it < debug_dirs.end(); ++it) { - const string debug_dir = *it; - fprintf(stderr, " %s/%s\n", debug_dir.c_str(), debuglink); - } - return ""; + // Not found case. + fprintf(stderr, "Failed to find debug ELF file for '%s' after trying:\n", + obj_file.c_str()); + for (it = searched_paths.begin(); it < searched_paths.end(); ++it) { + const string& debug_dir = *it; + fprintf(stderr, " %s/%s\n", debug_dir.c_str(), debuglink); } - - FDWrapper debuglink_fd_wrapper(debuglink_fd); - // TODO(thestig) check the CRC-32 at the end of the .gnu_debuglink - // section. - - return debuglink_path; + return string(); } // @@ -575,14 +648,12 @@ bool LoadSymbols(const string& obj_file, const typename ElfClass::Ehdr* elf_header, const bool read_gnu_debug_link, LoadSymbolsInfo* info, - SymbolData symbol_data, + const DumpOptions& options, Module* module) { typedef typename ElfClass::Addr Addr; typedef typename ElfClass::Phdr Phdr; typedef typename ElfClass::Shdr Shdr; - - BPLOG(INFO) << ""; - BPLOG(INFO) << "LoadSymbols: BEGIN " << obj_file; + typedef typename ElfClass::Word Word; Addr loading_addr = GetLoadingAddress( GetOffset(elf_header, elf_header->e_phoff), @@ -590,6 +661,8 @@ bool LoadSymbols(const string& obj_file, module->SetLoadAddress(loading_addr); info->set_loading_addr(loading_addr, obj_file); + Word debug_section_type = + elf_header->e_machine == EM_MIPS ? SHT_MIPS_DWARF : SHT_PROGBITS; const Shdr* sections = GetOffset(elf_header, elf_header->e_shoff); const Shdr* section_names = sections + elf_header->e_shstrndx; @@ -599,7 +672,29 @@ bool LoadSymbols(const string& obj_file, bool found_debug_info_section = false; bool found_usable_info = false; - if (symbol_data != ONLY_CFI) { + // Reject files that contain Android packed relocations. The pre-packed + // version of the file should be symbolized; the packed version is only + // intended for use on the target system. + if (FindElfSectionByName(".rel.dyn", SHT_ANDROID_REL, + sections, names, + names_end, elf_header->e_shnum)) { + fprintf(stderr, "%s: file contains a \".rel.dyn\" section " + "with type SHT_ANDROID_REL\n", obj_file.c_str()); + fprintf(stderr, "Files containing Android packed relocations " + "may not be symbolized.\n"); + return false; + } + if (FindElfSectionByName(".rela.dyn", SHT_ANDROID_RELA, + sections, names, + names_end, elf_header->e_shnum)) { + fprintf(stderr, "%s: file contains a \".rela.dyn\" section " + "with type SHT_ANDROID_RELA\n", obj_file.c_str()); + fprintf(stderr, "Files containing Android packed relocations " + "may not be symbolized.\n"); + return false; + } + + if (options.symbol_data != ONLY_CFI) { #ifndef NO_STABS_SUPPORT // Look for STABS debugging information, and load it if present. const Shdr* stab_section = @@ -623,129 +718,21 @@ bool LoadSymbols(const string& obj_file, // Look for DWARF debugging information, and load it if present. const Shdr* dwarf_section = - FindElfSectionByName(".debug_info", SHT_PROGBITS, + FindElfSectionByName(".debug_info", debug_section_type, sections, names, names_end, elf_header->e_shnum); if (dwarf_section) { found_debug_info_section = true; found_usable_info = true; info->LoadedSection(".debug_info"); - if (!LoadDwarf(obj_file, elf_header, big_endian, module)) + if (!LoadDwarf(obj_file, elf_header, big_endian, + options.handle_inter_cu_refs, module)) { fprintf(stderr, "%s: \".debug_info\" section found, but failed to load " "DWARF debugging information\n", obj_file.c_str()); - } - } - - if (symbol_data != NO_CFI) { - // Dwarf Call Frame Information (CFI) is actually independent from - // the other DWARF debugging information, and can be used alone. - const Shdr* dwarf_cfi_section = - FindElfSectionByName(".debug_frame", SHT_PROGBITS, - sections, names, names_end, - elf_header->e_shnum); - if (dwarf_cfi_section) { - // Ignore the return value of this function; even without call frame - // information, the other debugging information could be perfectly - // useful. - info->LoadedSection(".debug_frame"); - bool result = - LoadDwarfCFI(obj_file, elf_header, ".debug_frame", - dwarf_cfi_section, false, 0, 0, big_endian, - module); - found_usable_info = found_usable_info || result; - if (result) - BPLOG(INFO) << "LoadSymbols: read CFI from .debug_frame"; - } - - // Linux C++ exception handling information can also provide - // unwinding data. - const Shdr* eh_frame_section = - FindElfSectionByName(".eh_frame", SHT_PROGBITS, - sections, names, names_end, - elf_header->e_shnum); - if (eh_frame_section) { - // Pointers in .eh_frame data may be relative to the base addresses of - // certain sections. Provide those sections if present. - const Shdr* got_section = - FindElfSectionByName(".got", SHT_PROGBITS, - sections, names, names_end, - elf_header->e_shnum); - const Shdr* text_section = - FindElfSectionByName(".text", SHT_PROGBITS, - sections, names, names_end, - elf_header->e_shnum); - info->LoadedSection(".eh_frame"); - // As above, ignore the return value of this function. - bool result = - LoadDwarfCFI(obj_file, elf_header, ".eh_frame", - eh_frame_section, true, - got_section, text_section, big_endian, module); - found_usable_info = found_usable_info || result; - if (result) - BPLOG(INFO) << "LoadSymbols: read CFI from .eh_frame"; - } - } - - // ARM has special unwind tables that can be used. - const Shdr* arm_exidx_section = - FindElfSectionByName(".ARM.exidx", SHT_ARM_EXIDX, - sections, names, names_end, - elf_header->e_shnum); - const Shdr* arm_extab_section = - FindElfSectionByName(".ARM.extab", SHT_PROGBITS, - sections, names, names_end, - elf_header->e_shnum); - // Load information from these sections even if there is - // .debug_info, because some functions (e.g., hand-written or - // script-generated assembly) could have exidx entries but no DWARF. - // (For functions with both, the DWARF info that has already been - // parsed will take precedence.) - if (arm_exidx_section && arm_extab_section && symbol_data != NO_CFI) { - info->LoadedSection(".ARM.exidx"); - info->LoadedSection(".ARM.extab"); - bool result = LoadARMexidx(elf_header, - arm_exidx_section, arm_extab_section, - loading_addr, module); - found_usable_info = found_usable_info || result; - if (result) - BPLOG(INFO) << "LoadSymbols: read EXIDX from .ARM.{exidx,extab}"; - } - - if (!found_debug_info_section && symbol_data != ONLY_CFI) { - fprintf(stderr, "%s: file contains no debugging information" - " (no \".stab\" or \".debug_info\" sections)\n", - obj_file.c_str()); - - // Failed, but maybe there's a .gnu_debuglink section? - if (read_gnu_debug_link) { - const Shdr* gnu_debuglink_section - = FindElfSectionByName(".gnu_debuglink", SHT_PROGBITS, - sections, names, - names_end, elf_header->e_shnum); - if (gnu_debuglink_section) { - if (!info->debug_dirs().empty()) { - found_debug_info_section = true; - - const char* debuglink_contents = - GetOffset(elf_header, - gnu_debuglink_section->sh_offset); - string debuglink_file - = ReadDebugLink(debuglink_contents, - gnu_debuglink_section->sh_size, - obj_file, info->debug_dirs()); - info->set_debuglink_file(debuglink_file); - } else { - fprintf(stderr, ".gnu_debuglink section found in '%s', " - "but no debug path specified.\n", obj_file.c_str()); - } - } else { - fprintf(stderr, "%s does not contain a .gnu_debuglink section.\n", - obj_file.c_str()); } } - } - if (symbol_data != ONLY_CFI) { + // See if there are export symbols available. const Shdr* dynsym_section = FindElfSectionByName(".dynsym", SHT_DYNSYM, sections, names, names_end, @@ -775,15 +762,118 @@ bool LoadSymbols(const string& obj_file, } } - if (read_gnu_debug_link) { - return found_debug_info_section; + if (options.symbol_data != NO_CFI) { + // Dwarf Call Frame Information (CFI) is actually independent from + // the other DWARF debugging information, and can be used alone. + const Shdr* dwarf_cfi_section = + FindElfSectionByName(".debug_frame", debug_section_type, + sections, names, names_end, + elf_header->e_shnum); + if (dwarf_cfi_section) { + // Ignore the return value of this function; even without call frame + // information, the other debugging information could be perfectly + // useful. + info->LoadedSection(".debug_frame"); + bool result = + LoadDwarfCFI(obj_file, elf_header, ".debug_frame", + dwarf_cfi_section, false, 0, 0, big_endian, + module); + found_usable_info = found_usable_info || result; + } + + // Linux C++ exception handling information can also provide + // unwinding data. + const Shdr* eh_frame_section = + FindElfSectionByName(".eh_frame", SHT_PROGBITS, + sections, names, names_end, + elf_header->e_shnum); + if (eh_frame_section) { + // Pointers in .eh_frame data may be relative to the base addresses of + // certain sections. Provide those sections if present. + const Shdr* got_section = + FindElfSectionByName(".got", SHT_PROGBITS, + sections, names, names_end, + elf_header->e_shnum); + const Shdr* text_section = + FindElfSectionByName(".text", SHT_PROGBITS, + sections, names, names_end, + elf_header->e_shnum); + info->LoadedSection(".eh_frame"); + // As above, ignore the return value of this function. + bool result = + LoadDwarfCFI(obj_file, elf_header, ".eh_frame", + eh_frame_section, true, + got_section, text_section, big_endian, module); + found_usable_info = found_usable_info || result; + } } - // Return true if some usable information was found - BPLOG(INFO) << "LoadSymbols: " - << (found_usable_info ? "SUCCESS " : "FAILURE ") - << obj_file; - return found_usable_info; + // ARM has special unwind tables that can be used. + const Shdr* arm_exidx_section = + FindElfSectionByName(".ARM.exidx", SHT_ARM_EXIDX, + sections, names, names_end, + elf_header->e_shnum); + const Shdr* arm_extab_section = + FindElfSectionByName(".ARM.extab", SHT_PROGBITS, + sections, names, names_end, + elf_header->e_shnum); + // Load information from these sections even if there is + // .debug_info, because some functions (e.g., hand-written or + // script-generated assembly) could have exidx entries but no DWARF. + // (For functions with both, the DWARF info that has already been + // parsed will take precedence.) + if (arm_exidx_section && arm_extab_section && options.symbol_data != NO_CFI) { + info->LoadedSection(".ARM.exidx"); + info->LoadedSection(".ARM.extab"); + bool result = LoadARMexidx(elf_header, + arm_exidx_section, arm_extab_section, + loading_addr, module); + found_usable_info = found_usable_info || result; + } + + if (!found_debug_info_section) { + fprintf(stderr, "%s: file contains no debugging information" + " (no \".stab\" or \".debug_info\" sections)\n", + obj_file.c_str()); + + // Failed, but maybe there's a .gnu_debuglink section? + if (read_gnu_debug_link) { + const Shdr* gnu_debuglink_section + = FindElfSectionByName(".gnu_debuglink", SHT_PROGBITS, + sections, names, + names_end, elf_header->e_shnum); + if (gnu_debuglink_section) { + if (!info->debug_dirs().empty()) { + const char* debuglink_contents = + GetOffset(elf_header, + gnu_debuglink_section->sh_offset); + string debuglink_file = + ReadDebugLink(debuglink_contents, + gnu_debuglink_section->sh_size, + big_endian, + obj_file, + info->debug_dirs()); + info->set_debuglink_file(debuglink_file); + } else { + fprintf(stderr, ".gnu_debuglink section found in '%s', " + "but no debug path specified.\n", obj_file.c_str()); + } + } else { + fprintf(stderr, "%s does not contain a .gnu_debuglink section.\n", + obj_file.c_str()); + } + } else { + // Return true if some usable information was found, since the caller + // doesn't want to use .gnu_debuglink. + return found_usable_info; + } + + // No debug info was found, let the user try again with .gnu_debuglink + // if present. + return false; + } + + return true; } // Return the breakpad symbol file identifier for the architecture of @@ -795,6 +885,7 @@ const char* ElfArchitecture(const typename ElfClass::Ehdr* elf_header) { switch (arch) { case EM_386: return "x86"; case EM_ARM: return "arm"; + case EM_AARCH64: return "arm64"; case EM_MIPS: return "mips"; case EM_PPC64: return "ppc64"; case EM_PPC: return "ppc"; @@ -829,18 +920,49 @@ string FormatIdentifier(unsigned char identifier[16]) { // last slash, or the whole filename if there are no slashes. string BaseFileName(const string &filename) { // Lots of copies! basename's behavior is less than ideal. - char *c_filename = strdup(filename.c_str()); + char* c_filename = strdup(filename.c_str()); string base = basename(c_filename); free(c_filename); return base; } +template +bool SanitizeDebugFile(const typename ElfClass::Ehdr* debug_elf_header, + const string& debuglink_file, + const string& obj_filename, + const char* obj_file_architecture, + const bool obj_file_is_big_endian) { + const char* debug_architecture = + ElfArchitecture(debug_elf_header); + if (!debug_architecture) { + fprintf(stderr, "%s: unrecognized ELF machine architecture: %d\n", + debuglink_file.c_str(), debug_elf_header->e_machine); + return false; + } + if (strcmp(obj_file_architecture, debug_architecture)) { + fprintf(stderr, "%s with ELF machine architecture %s does not match " + "%s with ELF architecture %s\n", + debuglink_file.c_str(), debug_architecture, + obj_filename.c_str(), obj_file_architecture); + return false; + } + bool debug_big_endian; + if (!ElfEndianness(debug_elf_header, &debug_big_endian)) + return false; + if (debug_big_endian != obj_file_is_big_endian) { + fprintf(stderr, "%s and %s does not match in endianness\n", + obj_filename.c_str(), debuglink_file.c_str()); + return false; + } + return true; +} + template bool ReadSymbolDataElfClass(const typename ElfClass::Ehdr* elf_header, - const string& obj_filename, - const std::vector& debug_dirs, - SymbolData symbol_data, - Module** out_module) { + const string& obj_filename, + const std::vector& debug_dirs, + const DumpOptions& options, + Module** out_module) { typedef typename ElfClass::Ehdr Ehdr; typedef typename ElfClass::Shdr Shdr; @@ -874,7 +996,7 @@ bool ReadSymbolDataElfClass(const typename ElfClass::Ehdr* elf_header, scoped_ptr module(new Module(name, os, architecture, id)); if (!LoadSymbols(obj_filename, big_endian, elf_header, !debug_dirs.empty(), &info, - symbol_data, module.get())) { + options, module.get())) { const string debuglink_file = info.debuglink_file(); if (debuglink_file.empty()) return false; @@ -884,36 +1006,15 @@ bool ReadSymbolDataElfClass(const typename ElfClass::Ehdr* elf_header, MmapWrapper debug_map_wrapper; Ehdr* debug_elf_header = NULL; if (!LoadELF(debuglink_file, &debug_map_wrapper, - reinterpret_cast(&debug_elf_header))) - return false; - // Sanity checks to make sure everything matches up. - const char *debug_architecture = - ElfArchitecture(debug_elf_header); - if (!debug_architecture) { - fprintf(stderr, "%s: unrecognized ELF machine architecture: %d\n", - debuglink_file.c_str(), debug_elf_header->e_machine); - return false; - } - if (strcmp(architecture, debug_architecture)) { - fprintf(stderr, "%s with ELF machine architecture %s does not match " - "%s with ELF architecture %s\n", - debuglink_file.c_str(), debug_architecture, - obj_filename.c_str(), architecture); + reinterpret_cast(&debug_elf_header)) || + !SanitizeDebugFile(debug_elf_header, debuglink_file, + obj_filename, architecture, big_endian)) { return false; } - bool debug_big_endian; - if (!ElfEndianness(debug_elf_header, &debug_big_endian)) - return false; - if (debug_big_endian != big_endian) { - fprintf(stderr, "%s and %s does not match in endianness\n", - obj_filename.c_str(), debuglink_file.c_str()); - return false; - } - - if (!LoadSymbols(debuglink_file, debug_big_endian, + if (!LoadSymbols(debuglink_file, big_endian, debug_elf_header, false, &info, - symbol_data, module.get())) { + options, module.get())) { return false; } } @@ -930,9 +1031,8 @@ namespace google_breakpad { bool ReadSymbolDataInternal(const uint8_t* obj_file, const string& obj_filename, const std::vector& debug_dirs, - SymbolData symbol_data, + const DumpOptions& options, Module** module) { - if (!IsValidElf(obj_file)) { fprintf(stderr, "Not a valid ELF file: %s\n", obj_filename.c_str()); return false; @@ -942,12 +1042,12 @@ bool ReadSymbolDataInternal(const uint8_t* obj_file, if (elfclass == ELFCLASS32) { return ReadSymbolDataElfClass( reinterpret_cast(obj_file), obj_filename, debug_dirs, - symbol_data, module); + options, module); } if (elfclass == ELFCLASS64) { return ReadSymbolDataElfClass( reinterpret_cast(obj_file), obj_filename, debug_dirs, - symbol_data, module); + options, module); } return false; @@ -955,20 +1055,20 @@ bool ReadSymbolDataInternal(const uint8_t* obj_file, bool WriteSymbolFile(const string &obj_file, const std::vector& debug_dirs, - SymbolData symbol_data, + const DumpOptions& options, std::ostream &sym_stream) { Module* module; - if (!ReadSymbolData(obj_file, debug_dirs, symbol_data, &module)) + if (!ReadSymbolData(obj_file, debug_dirs, options, &module)) return false; - bool result = module->Write(sym_stream, symbol_data); + bool result = module->Write(sym_stream, options.symbol_data); delete module; return result; } bool ReadSymbolData(const string& obj_file, const std::vector& debug_dirs, - SymbolData symbol_data, + const DumpOptions& options, Module** module) { MmapWrapper map_wrapper; void* elf_header = NULL; @@ -976,7 +1076,7 @@ bool ReadSymbolData(const string& obj_file, return false; return ReadSymbolDataInternal(reinterpret_cast(elf_header), - obj_file, debug_dirs, symbol_data, module); + obj_file, debug_dirs, options, module); } } // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/dump_symbols.h b/toolkit/crashreporter/google-breakpad/src/common/linux/dump_symbols.h index 229657117361..636bb72f73e2 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/linux/dump_symbols.h +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/dump_symbols.h @@ -41,12 +41,21 @@ #include "common/symbol_data.h" #include "common/using_std_string.h" -#include "google_breakpad/common/breakpad_types.h" namespace google_breakpad { class Module; +struct DumpOptions { + DumpOptions(SymbolData symbol_data, bool handle_inter_cu_refs) + : symbol_data(symbol_data), + handle_inter_cu_refs(handle_inter_cu_refs) { + } + + SymbolData symbol_data; + bool handle_inter_cu_refs; +}; + // Find all the debugging information in OBJ_FILE, an ELF executable // or shared library, and write it to SYM_STREAM in the Breakpad symbol // file format. @@ -55,7 +64,7 @@ class Module; // SYMBOL_DATA allows limiting the type of symbol data written. bool WriteSymbolFile(const string &obj_file, const std::vector& debug_dirs, - SymbolData symbol_data, + const DumpOptions& options, std::ostream &sym_stream); // As above, but simply return the debugging information in MODULE @@ -63,17 +72,9 @@ bool WriteSymbolFile(const string &obj_file, // Module object and must delete it when finished. bool ReadSymbolData(const string& obj_file, const std::vector& debug_dirs, - SymbolData symbol_data, + const DumpOptions& options, Module** module); -// Same as ReadSymbolData, except don't try to open the file; instead -// just use the in-memory data (mapped image of it) located at OBJ_FILE. -bool ReadSymbolDataInternal(const uint8_t* obj_file, - const string& obj_filename, - const std::vector& debug_dirs, - SymbolData symbol_data, - Module** module); - } // namespace google_breakpad #endif // COMMON_LINUX_DUMP_SYMBOLS_H__ diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/dump_symbols_unittest.cc b/toolkit/crashreporter/google-breakpad/src/common/linux/dump_symbols_unittest.cc index 6f5aef2ec11f..3f86dbe6a347 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/linux/dump_symbols_unittest.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/dump_symbols_unittest.cc @@ -40,25 +40,24 @@ #include #include "breakpad_googletest_includes.h" +#include "common/linux/dump_symbols.h" #include "common/linux/synth_elf.h" #include "common/module.h" #include "common/using_std_string.h" namespace google_breakpad { + bool ReadSymbolDataInternal(const uint8_t* obj_file, const string& obj_filename, const std::vector& debug_dir, - SymbolData symbol_data, + const DumpOptions& options, Module** module); -} using google_breakpad::synth_elf::ELF; using google_breakpad::synth_elf::StringTable; using google_breakpad::synth_elf::SymbolTable; using google_breakpad::test_assembler::kLittleEndian; using google_breakpad::test_assembler::Section; -using google_breakpad::Module; -using google_breakpad::ReadSymbolDataInternal; using std::stringstream; using std::vector; using ::testing::Test; @@ -83,10 +82,11 @@ TEST_F(DumpSymbols, Invalid) { Elf32_Ehdr header; memset(&header, 0, sizeof(header)); Module* module; + DumpOptions options(ALL_SYMBOL_DATA, true); EXPECT_FALSE(ReadSymbolDataInternal(reinterpret_cast(&header), "foo", vector(), - ALL_SYMBOL_DATA, + options, &module)); } @@ -115,10 +115,11 @@ TEST_F(DumpSymbols, SimplePublic32) { GetElfContents(elf); Module* module; + DumpOptions options(ALL_SYMBOL_DATA, true); EXPECT_TRUE(ReadSymbolDataInternal(elfdata, "foo", vector(), - ALL_SYMBOL_DATA, + options, &module)); stringstream s; @@ -154,10 +155,11 @@ TEST_F(DumpSymbols, SimplePublic64) { GetElfContents(elf); Module* module; + DumpOptions options(ALL_SYMBOL_DATA, true); EXPECT_TRUE(ReadSymbolDataInternal(elfdata, "foo", vector(), - ALL_SYMBOL_DATA, + options, &module)); stringstream s; @@ -166,3 +168,5 @@ TEST_F(DumpSymbols, SimplePublic64) { "PUBLIC 1000 0 superfunc\n", s.str()); } + +} // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/eintr_wrapper.h b/toolkit/crashreporter/google-breakpad/src/common/linux/eintr_wrapper.h index 20b6bed13b72..3f1d1848179b 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/linux/eintr_wrapper.h +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/eintr_wrapper.h @@ -37,11 +37,22 @@ // #define HANDLE_EINTR(x) ({ \ - typeof(x) __eintr_result__; \ + __typeof__(x) eintr_wrapper_result; \ do { \ - __eintr_result__ = x; \ - } while (__eintr_result__ == -1 && errno == EINTR); \ - __eintr_result__;\ + eintr_wrapper_result = (x); \ + } while (eintr_wrapper_result == -1 && errno == EINTR); \ + eintr_wrapper_result; \ +}) + +#define IGNORE_EINTR(x) ({ \ + __typeof__(x) eintr_wrapper_result; \ + do { \ + eintr_wrapper_result = (x); \ + if (eintr_wrapper_result == -1 && errno == EINTR) { \ + eintr_wrapper_result = 0; \ + } \ + } while (0); \ + eintr_wrapper_result; \ }) #endif // COMMON_LINUX_EINTR_WRAPPER_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/elf_core_dump_unittest.cc b/toolkit/crashreporter/google-breakpad/src/common/linux/elf_core_dump_unittest.cc index 45aa5364ad4c..9b41dceee230 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/linux/elf_core_dump_unittest.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/elf_core_dump_unittest.cc @@ -70,7 +70,7 @@ TEST(ElfCoreDumpTest, TestElfHeader) { ElfCoreDump core; ASSERT_TRUE(WriteFile(core_file, &header, sizeof(header) - 1)); - ASSERT_TRUE(mapped_core_file.Map(core_file)); + ASSERT_TRUE(mapped_core_file.Map(core_file, 0)); core.SetContent(mapped_core_file.content()); EXPECT_FALSE(core.IsValid()); EXPECT_EQ(NULL, core.GetHeader()); @@ -80,49 +80,49 @@ TEST(ElfCoreDumpTest, TestElfHeader) { EXPECT_FALSE(core.GetFirstNote().IsValid()); ASSERT_TRUE(WriteFile(core_file, &header, sizeof(header))); - ASSERT_TRUE(mapped_core_file.Map(core_file)); + ASSERT_TRUE(mapped_core_file.Map(core_file, 0)); core.SetContent(mapped_core_file.content()); EXPECT_FALSE(core.IsValid()); header.e_ident[0] = ELFMAG0; ASSERT_TRUE(WriteFile(core_file, &header, sizeof(header))); - ASSERT_TRUE(mapped_core_file.Map(core_file)); + ASSERT_TRUE(mapped_core_file.Map(core_file, 0)); core.SetContent(mapped_core_file.content()); EXPECT_FALSE(core.IsValid()); header.e_ident[1] = ELFMAG1; ASSERT_TRUE(WriteFile(core_file, &header, sizeof(header))); - ASSERT_TRUE(mapped_core_file.Map(core_file)); + ASSERT_TRUE(mapped_core_file.Map(core_file, 0)); core.SetContent(mapped_core_file.content()); EXPECT_FALSE(core.IsValid()); header.e_ident[2] = ELFMAG2; ASSERT_TRUE(WriteFile(core_file, &header, sizeof(header))); - ASSERT_TRUE(mapped_core_file.Map(core_file)); + ASSERT_TRUE(mapped_core_file.Map(core_file, 0)); core.SetContent(mapped_core_file.content()); EXPECT_FALSE(core.IsValid()); header.e_ident[3] = ELFMAG3; ASSERT_TRUE(WriteFile(core_file, &header, sizeof(header))); - ASSERT_TRUE(mapped_core_file.Map(core_file)); + ASSERT_TRUE(mapped_core_file.Map(core_file, 0)); core.SetContent(mapped_core_file.content()); EXPECT_FALSE(core.IsValid()); header.e_ident[4] = ElfCoreDump::kClass; ASSERT_TRUE(WriteFile(core_file, &header, sizeof(header))); - ASSERT_TRUE(mapped_core_file.Map(core_file)); + ASSERT_TRUE(mapped_core_file.Map(core_file, 0)); core.SetContent(mapped_core_file.content()); EXPECT_FALSE(core.IsValid()); header.e_version = EV_CURRENT; ASSERT_TRUE(WriteFile(core_file, &header, sizeof(header))); - ASSERT_TRUE(mapped_core_file.Map(core_file)); + ASSERT_TRUE(mapped_core_file.Map(core_file, 0)); core.SetContent(mapped_core_file.content()); EXPECT_FALSE(core.IsValid()); header.e_type = ET_CORE; ASSERT_TRUE(WriteFile(core_file, &header, sizeof(header))); - ASSERT_TRUE(mapped_core_file.Map(core_file)); + ASSERT_TRUE(mapped_core_file.Map(core_file, 0)); core.SetContent(mapped_core_file.content()); EXPECT_TRUE(core.IsValid()); } @@ -138,22 +138,26 @@ TEST(ElfCoreDumpTest, ValidCoreFile) { const unsigned kNumOfThreads = 3; const unsigned kCrashThread = 1; const int kCrashSignal = SIGABRT; - // TODO(benchan): Revert to use ASSERT_TRUE once the flakiness in - // CrashGenerator is identified and fixed. - if (!crash_generator.CreateChildCrash(kNumOfThreads, kCrashThread, - kCrashSignal, NULL)) { - fprintf(stderr, "ElfCoreDumpTest.ValidCoreFile test is skipped " - "due to no core dump generated"); - return; - } + ASSERT_TRUE(crash_generator.CreateChildCrash(kNumOfThreads, kCrashThread, + kCrashSignal, NULL)); pid_t expected_crash_thread_id = crash_generator.GetThreadId(kCrashThread); set expected_thread_ids; for (unsigned i = 0; i < kNumOfThreads; ++i) { expected_thread_ids.insert(crash_generator.GetThreadId(i)); } +#if defined(__ANDROID__) + struct stat st; + if (stat(crash_generator.GetCoreFilePath().c_str(), &st) != 0) { + fprintf(stderr, "ElfCoreDumpTest.ValidCoreFile test is skipped " + "due to no core file being generated"); + return; + } +#endif + MemoryMappedFile mapped_core_file; - ASSERT_TRUE(mapped_core_file.Map(crash_generator.GetCoreFilePath().c_str())); + ASSERT_TRUE( + mapped_core_file.Map(crash_generator.GetCoreFilePath().c_str(), 0)); ElfCoreDump core; core.SetContent(mapped_core_file.content()); @@ -182,6 +186,7 @@ TEST(ElfCoreDumpTest, ValidCoreFile) { size_t num_nt_prpsinfo = 0; size_t num_nt_prstatus = 0; + size_t num_pr_fpvalid = 0; #if defined(__i386__) || defined(__x86_64__) size_t num_nt_fpregset = 0; #endif @@ -213,6 +218,8 @@ TEST(ElfCoreDumpTest, ValidCoreFile) { EXPECT_EQ(kCrashSignal, status->pr_info.si_signo); } ++num_nt_prstatus; + if (status->pr_fpvalid) + ++num_pr_fpvalid; break; } #if defined(__i386__) || defined(__x86_64__) @@ -241,9 +248,9 @@ TEST(ElfCoreDumpTest, ValidCoreFile) { EXPECT_EQ(1U, num_nt_prpsinfo); EXPECT_EQ(kNumOfThreads, num_nt_prstatus); #if defined(__i386__) || defined(__x86_64__) - EXPECT_EQ(kNumOfThreads, num_nt_fpregset); + EXPECT_EQ(num_pr_fpvalid, num_nt_fpregset); #endif #if defined(__i386__) - EXPECT_EQ(kNumOfThreads, num_nt_prxfpreg); + EXPECT_EQ(num_pr_fpvalid, num_nt_prxfpreg); #endif } diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/elf_gnu_compat.h b/toolkit/crashreporter/google-breakpad/src/common/linux/elf_gnu_compat.h new file mode 100644 index 000000000000..f870cbc7d2d8 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/elf_gnu_compat.h @@ -0,0 +1,46 @@ +// -*- mode: C++ -*- + +// Copyright (c) 2013, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Original author: Lei Zhang + +// elf_gnu_compat.h: #defines unique to glibc's elf.h. + +#ifndef COMMON_LINUX_ELF_GNU_COMPAT_H_ +#define COMMON_LINUX_ELF_GNU_COMPAT_H_ + +#include + +// A note type on GNU systems corresponding to the .note.gnu.build-id section. +#ifndef NT_GNU_BUILD_ID +#define NT_GNU_BUILD_ID 3 +#endif + +#endif // COMMON_LINUX_ELF_GNU_COMPAT_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/elf_symbols_to_module.cc b/toolkit/crashreporter/google-breakpad/src/common/linux/elf_symbols_to_module.cc index 82d53dd1fcb9..562875e11b5f 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/linux/elf_symbols_to_module.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/elf_symbols_to_module.cc @@ -32,6 +32,7 @@ #include "common/linux/elf_symbols_to_module.h" +#include #include #include @@ -155,9 +156,18 @@ bool ELFSymbolsToModule(const uint8_t *symtab_section, while(!iterator->at_end) { if (ELF32_ST_TYPE(iterator->info) == STT_FUNC && iterator->shndx != SHN_UNDEF) { - Module::Extern *ext = new Module::Extern; + Module::Extern *ext = new Module::Extern(iterator->value); ext->name = SymbolString(iterator->name_offset, strings); - ext->address = iterator->value; +#if !defined(__ANDROID__) // Android NDK doesn't provide abi::__cxa_demangle. + int status = 0; + char* demangled = + abi::__cxa_demangle(ext->name.c_str(), NULL, NULL, &status); + if (demangled) { + if (status == 0) + ext->name = demangled; + free(demangled); + } +#endif module->AddExtern(ext); } ++iterator; diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/elf_symbols_to_module_unittest.cc b/toolkit/crashreporter/google-breakpad/src/common/linux/elf_symbols_to_module_unittest.cc index 2f36b7399662..8984449ab656 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/linux/elf_symbols_to_module_unittest.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/elf_symbols_to_module_unittest.cc @@ -90,7 +90,7 @@ public: }; class ELFSymbolsToModuleTest32 : public ELFSymbolsToModuleTestFixture, - public TestWithParam { + public TestWithParam { public: ELFSymbolsToModuleTest32() : ELFSymbolsToModuleTestFixture(GetParam(), 4) {} diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/elfutils.cc b/toolkit/crashreporter/google-breakpad/src/common/linux/elfutils.cc index 1fd504d976af..a79391c133e3 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/linux/elfutils.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/elfutils.cc @@ -44,7 +44,7 @@ void FindElfClassSection(const char *elf_base, const char *section_name, typename ElfClass::Word section_type, const void **section_start, - int *section_size) { + size_t *section_size) { typedef typename ElfClass::Ehdr Ehdr; typedef typename ElfClass::Shdr Shdr; @@ -58,10 +58,10 @@ void FindElfClassSection(const char *elf_base, assert(elf_header->e_ident[EI_CLASS] == ElfClass::kClass); const Shdr* sections = - GetOffset(elf_header, elf_header->e_shoff); + GetOffset(elf_header, elf_header->e_shoff); const Shdr* section_names = sections + elf_header->e_shstrndx; const char* names = - GetOffset(elf_header, section_names->sh_offset); + GetOffset(elf_header, section_names->sh_offset); const char *names_end = names + section_names->sh_size; const Shdr* section = @@ -79,7 +79,7 @@ template void FindElfClassSegment(const char *elf_base, typename ElfClass::Word segment_type, const void **segment_start, - int *segment_size) { + size_t *segment_size) { typedef typename ElfClass::Ehdr Ehdr; typedef typename ElfClass::Phdr Phdr; @@ -93,7 +93,7 @@ void FindElfClassSegment(const char *elf_base, assert(elf_header->e_ident[EI_CLASS] == ElfClass::kClass); const Phdr* phdrs = - GetOffset(elf_header, elf_header->e_phoff); + GetOffset(elf_header, elf_header->e_phoff); for (int i = 0; i < elf_header->e_phnum; ++i) { if (phdrs[i].p_type == segment_type) { @@ -122,7 +122,7 @@ bool FindElfSection(const void *elf_mapped_base, const char *section_name, uint32_t section_type, const void **section_start, - int *section_size, + size_t *section_size, int *elfclass) { assert(elf_mapped_base); assert(section_start); @@ -158,7 +158,7 @@ bool FindElfSection(const void *elf_mapped_base, bool FindElfSegment(const void *elf_mapped_base, uint32_t segment_type, const void **segment_start, - int *segment_size, + size_t *segment_size, int *elfclass) { assert(elf_mapped_base); assert(segment_start); diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/elfutils.h b/toolkit/crashreporter/google-breakpad/src/common/linux/elfutils.h index fe12e2514abf..dccdc235e290 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/linux/elfutils.h +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/elfutils.h @@ -30,8 +30,8 @@ // elfutils.h: Utilities for dealing with ELF files. // -#ifndef COMMON_LINUX_ELFUTILS_H__ -#define COMMON_LINUX_ELFUTILS_H__ +#ifndef COMMON_LINUX_ELFUTILS_H_ +#define COMMON_LINUX_ELFUTILS_H_ #include #include @@ -79,7 +79,7 @@ bool FindElfSection(const void *elf_mapped_base, const char *section_name, uint32_t section_type, const void **section_start, - int *section_size, + size_t *section_size, int *elfclass); // Internal helper method, exposed for convenience for callers @@ -101,7 +101,7 @@ FindElfSectionByName(const char* name, bool FindElfSegment(const void *elf_mapped_base, uint32_t segment_type, const void **segment_start, - int *segment_size, + size_t *segment_size, int *elfclass); // Convert an offset from an Elf header into a pointer to the mapped @@ -115,4 +115,4 @@ GetOffset(const typename ElfClass::Ehdr* elf_header, } // namespace google_breakpad -#endif // COMMON_LINUX_ELFUTILS_H__ +#endif // COMMON_LINUX_ELFUTILS_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/file_id.cc b/toolkit/crashreporter/google-breakpad/src/common/linux/file_id.cc index ca5a3e1f02e1..00b37313afd9 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/linux/file_id.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/file_id.cc @@ -40,6 +40,7 @@ #include +#include "common/linux/elf_gnu_compat.h" #include "common/linux/elfutils.h" #include "common/linux/linux_libc_support.h" #include "common/linux/memory_mapped_file.h" @@ -47,13 +48,7 @@ namespace google_breakpad { -#ifndef NT_GNU_BUILD_ID -#define NT_GNU_BUILD_ID 3 -#endif - -FileID::FileID(const char* path) { - strncpy(path_, path, sizeof(path_)); -} +FileID::FileID(const char* path) : path_(path) {} // ELF note name and desc are 32-bits word padded. #define NOTE_PADDING(a) ((a + 3) & ~3) @@ -62,7 +57,7 @@ FileID::FileID(const char* path) { // and use the syscall/libc wrappers instead of direct syscalls or libc. template -static bool ElfClassBuildIDNoteIdentifier(const void *section, int length, +static bool ElfClassBuildIDNoteIdentifier(const void *section, size_t length, uint8_t identifier[kMDGUIDSize]) { typedef typename ElfClass::Nhdr Nhdr; @@ -97,7 +92,8 @@ static bool ElfClassBuildIDNoteIdentifier(const void *section, int length, static bool FindElfBuildIDNote(const void *elf_mapped_base, uint8_t identifier[kMDGUIDSize]) { void* note_section; - int note_size, elfclass; + size_t note_size; + int elfclass; if ((!FindElfSegment(elf_mapped_base, PT_NOTE, (const void**)¬e_section, ¬e_size, &elfclass) || note_size == 0) && @@ -123,7 +119,7 @@ static bool FindElfBuildIDNote(const void *elf_mapped_base, static bool HashElfTextSection(const void *elf_mapped_base, uint8_t identifier[kMDGUIDSize]) { void* text_section; - int text_size; + size_t text_size; if (!FindElfSection(elf_mapped_base, ".text", SHT_PROGBITS, (const void**)&text_section, &text_size, NULL) || text_size == 0) { @@ -132,7 +128,7 @@ static bool HashElfTextSection(const void *elf_mapped_base, my_memset(identifier, 0, kMDGUIDSize); const uint8_t* ptr = reinterpret_cast(text_section); - const uint8_t* ptr_end = ptr + std::min(text_size, 4096); + const uint8_t* ptr_end = ptr + std::min(text_size, static_cast(4096)); while (ptr < ptr_end) { for (unsigned i = 0; i < kMDGUIDSize; i++) identifier[i] ^= ptr[i]; @@ -153,7 +149,7 @@ bool FileID::ElfFileIdentifierFromMappedFile(const void* base, } bool FileID::ElfFileIdentifier(uint8_t identifier[kMDGUIDSize]) { - MemoryMappedFile mapped_file(path_); + MemoryMappedFile mapped_file(path_.c_str(), 0); if (!mapped_file.data()) // Should probably check if size >= ElfW(Ehdr)? return false; diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/file_id.h b/toolkit/crashreporter/google-breakpad/src/common/linux/file_id.h index 70a6b3f587d6..2642722a6305 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/linux/file_id.h +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/file_id.h @@ -34,6 +34,7 @@ #define COMMON_LINUX_FILE_ID_H__ #include +#include #include "common/linux/guid_creator.h" @@ -69,7 +70,7 @@ class FileID { private: // Storage for the path specified - char path_[PATH_MAX]; + std::string path_; }; } // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/file_id_unittest.cc b/toolkit/crashreporter/google-breakpad/src/common/linux/file_id_unittest.cc index bcd030dca044..760eae8260d6 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/linux/file_id_unittest.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/file_id_unittest.cc @@ -34,6 +34,7 @@ #include +#include "common/linux/elf_gnu_compat.h" #include "common/linux/elfutils.h" #include "common/linux/file_id.h" #include "common/linux/safe_readlink.h" @@ -65,6 +66,9 @@ void PopulateSection(Section* section, int size, int prime_number) { } // namespace +#ifndef __ANDROID__ +// This test is disabled on Android: It will always fail, since there is no +// 'strip' binary installed on test devices. TEST(FileIDStripTest, StripSelf) { // Calculate the File ID of this binary using // FileID::ElfFileIdentifier, then make a copy of this binary, @@ -97,6 +101,7 @@ TEST(FileIDStripTest, StripSelf) { 37); EXPECT_STREQ(identifier_string1, identifier_string2); } +#endif // !__ANDROID__ template class FileIDTest : public testing::Test { diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/google_crashdump_uploader.cc b/toolkit/crashreporter/google-breakpad/src/common/linux/google_crashdump_uploader.cc index b5f32c69eb38..6d86fb36970f 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/linux/google_crashdump_uploader.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/google_crashdump_uploader.cc @@ -29,7 +29,6 @@ #include "common/linux/google_crashdump_uploader.h" -#include "common/linux/libcurl_wrapper.h" #include #include @@ -112,7 +111,7 @@ void GoogleCrashdumpUploader::Init(const string& product, ctime_ = ctime; email_ = email; comments_ = comments; - http_layer_ = http_layer; + http_layer_.reset(http_layer); crash_server_ = crash_server; proxy_host_ = proxy_host; @@ -162,7 +161,9 @@ bool GoogleCrashdumpUploader::CheckRequiredParametersArePresent() { } -bool GoogleCrashdumpUploader::Upload() { +bool GoogleCrashdumpUploader::Upload(int* http_status_code, + string* http_response_header, + string* http_response_body) { bool ok = http_layer_->Init(); if (!ok) { std::cout << "http layer init failed"; @@ -194,6 +195,8 @@ bool GoogleCrashdumpUploader::Upload() { std::cout << "Sending request to " << crash_server_; return http_layer_->SendRequest(crash_server_, parameters_, - NULL); + http_status_code, + http_response_header, + http_response_body); } } diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/google_crashdump_uploader.h b/toolkit/crashreporter/google-breakpad/src/common/linux/google_crashdump_uploader.h index 5eef28b3a017..a2d0575b5e7b 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/linux/google_crashdump_uploader.h +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/google_crashdump_uploader.h @@ -28,15 +28,18 @@ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#ifndef COMMON_LINUX_GOOGLE_CRASHDUMP_UPLOADER_H_ +#define COMMON_LINUX_GOOGLE_CRASHDUMP_UPLOADER_H_ + #include #include +#include "common/linux/libcurl_wrapper.h" +#include "common/scoped_ptr.h" #include "common/using_std_string.h" namespace google_breakpad { -class LibcurlWrapper; - class GoogleCrashdumpUploader { public: GoogleCrashdumpUploader(const string& product, @@ -76,12 +79,14 @@ class GoogleCrashdumpUploader { const string& proxy_host, const string& proxy_userpassword, LibcurlWrapper* http_layer); - bool Upload(); + bool Upload(int* http_status_code, + string* http_response_header, + string* http_response_body); private: bool CheckRequiredParametersArePresent(); - LibcurlWrapper* http_layer_; + scoped_ptr http_layer_; string product_; string version_; string guid_; @@ -98,3 +103,5 @@ class GoogleCrashdumpUploader { std::map parameters_; }; } + +#endif // COMMON_LINUX_GOOGLE_CRASHDUMP_UPLOADER_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/google_crashdump_uploader_test.cc b/toolkit/crashreporter/google-breakpad/src/common/linux/google_crashdump_uploader_test.cc index 957874ada606..e94c5d62a2de 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/linux/google_crashdump_uploader_test.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/google_crashdump_uploader_test.cc @@ -32,7 +32,6 @@ #include #include "common/linux/google_crashdump_uploader.h" -#include "common/linux/libcurl_wrapper.h" #include "breakpad_googletest_includes.h" #include "common/using_std_string.h" @@ -48,10 +47,12 @@ class MockLibcurlWrapper : public LibcurlWrapper { const string& proxy_userpwd)); MOCK_METHOD2(AddFile, bool(const string& upload_file_path, const string& basename)); - MOCK_METHOD3(SendRequest, + MOCK_METHOD5(SendRequest, bool(const string& url, const std::map& parameters, - string* server_response)); + int* http_status_code, + string* http_header_data, + string* http_response_data)); }; class GoogleCrashdumpUploaderTest : public ::testing::Test { @@ -72,7 +73,7 @@ TEST_F(GoogleCrashdumpUploaderTest, InitFailsCausesUploadFailure) { "", "", &m); - ASSERT_FALSE(uploader->Upload()); + ASSERT_FALSE(uploader->Upload(NULL, NULL, NULL)); } TEST_F(GoogleCrashdumpUploaderTest, TestSendRequestHappensWithValidParameters) { @@ -86,7 +87,7 @@ TEST_F(GoogleCrashdumpUploaderTest, TestSendRequestHappensWithValidParameters) { EXPECT_CALL(m, Init()).Times(1).WillOnce(Return(true)); EXPECT_CALL(m, AddFile(tempfn, _)).WillOnce(Return(true)); EXPECT_CALL(m, - SendRequest("http://foo.com",_,_)).Times(1).WillOnce(Return(true)); + SendRequest("http://foo.com",_,_,_,_)).Times(1).WillOnce(Return(true)); GoogleCrashdumpUploader *uploader = new GoogleCrashdumpUploader("foobar", "1.0", "AAA-BBB", @@ -99,14 +100,14 @@ TEST_F(GoogleCrashdumpUploaderTest, TestSendRequestHappensWithValidParameters) { "", "", &m); - ASSERT_TRUE(uploader->Upload()); + ASSERT_TRUE(uploader->Upload(NULL, NULL, NULL)); } TEST_F(GoogleCrashdumpUploaderTest, InvalidPathname) { MockLibcurlWrapper m; EXPECT_CALL(m, Init()).Times(1).WillOnce(Return(true)); - EXPECT_CALL(m, SendRequest(_,_,_)).Times(0); + EXPECT_CALL(m, SendRequest(_,_,_,_,_)).Times(0); GoogleCrashdumpUploader *uploader = new GoogleCrashdumpUploader("foobar", "1.0", "AAA-BBB", @@ -119,7 +120,7 @@ TEST_F(GoogleCrashdumpUploaderTest, InvalidPathname) { "", "", &m); - ASSERT_FALSE(uploader->Upload()); + ASSERT_FALSE(uploader->Upload(NULL, NULL, NULL)); } TEST_F(GoogleCrashdumpUploaderTest, TestRequiredParametersMustBePresent) { @@ -135,7 +136,7 @@ TEST_F(GoogleCrashdumpUploaderTest, TestRequiredParametersMustBePresent) { "http://foo.com", "", ""); - ASSERT_FALSE(uploader.Upload()); + ASSERT_FALSE(uploader.Upload(NULL, NULL, NULL)); // Test with empty product version. GoogleCrashdumpUploader uploader1("product", @@ -150,7 +151,7 @@ TEST_F(GoogleCrashdumpUploaderTest, TestRequiredParametersMustBePresent) { "", ""); - ASSERT_FALSE(uploader1.Upload()); + ASSERT_FALSE(uploader1.Upload(NULL, NULL, NULL)); // Test with empty client GUID. GoogleCrashdumpUploader uploader2("product", @@ -164,6 +165,6 @@ TEST_F(GoogleCrashdumpUploaderTest, TestRequiredParametersMustBePresent) { "", "", ""); - ASSERT_FALSE(uploader2.Upload()); + ASSERT_FALSE(uploader2.Upload(NULL, NULL, NULL)); } } diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/http_upload.cc b/toolkit/crashreporter/google-breakpad/src/common/linux/http_upload.cc index 7aa0bc1844ca..4492fe84542c 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/linux/http_upload.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/http_upload.cc @@ -69,7 +69,17 @@ bool HTTPUpload::SendRequest(const string &url, if (!CheckParameters(parameters)) return false; - void *curl_lib = dlopen("libcurl.so", RTLD_NOW); + // We may have been linked statically; if curl_easy_init is in the + // current binary, no need to search for a dynamic version. + void* curl_lib = dlopen(NULL, RTLD_NOW); + if (!curl_lib || dlsym(curl_lib, "curl_easy_init") == NULL) { + dlerror(); // Clear dlerror before attempting to open libraries. + dlclose(curl_lib); + curl_lib = NULL; + } + if (!curl_lib) { + curl_lib = dlopen("libcurl.so", RTLD_NOW); + } if (!curl_lib) { if (error_description != NULL) *error_description = dlerror(); diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/libcurl_wrapper.cc b/toolkit/crashreporter/google-breakpad/src/common/linux/libcurl_wrapper.cc index 08307f0291b7..fd4e34cd8f13 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/linux/libcurl_wrapper.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/libcurl_wrapper.cc @@ -57,6 +57,8 @@ LibcurlWrapper::LibcurlWrapper() return; } +LibcurlWrapper::~LibcurlWrapper() {} + bool LibcurlWrapper::SetProxy(const string& proxy_host, const string& proxy_userpwd) { if (!init_ok_) { @@ -108,7 +110,9 @@ static size_t WriteCallback(void *ptr, size_t size, bool LibcurlWrapper::SendRequest(const string& url, const std::map& parameters, - string* server_response) { + int* http_status_code, + string* http_header_data, + string* http_response_data) { (*easy_setopt_)(curl_, CURLOPT_URL, url.c_str()); std::map::const_iterator iter = parameters.begin(); for (; iter != parameters.end(); ++iter) @@ -118,10 +122,17 @@ bool LibcurlWrapper::SendRequest(const string& url, CURLFORM_END); (*easy_setopt_)(curl_, CURLOPT_HTTPPOST, formpost_); - if (server_response != NULL) { + if (http_response_data != NULL) { + http_response_data->clear(); (*easy_setopt_)(curl_, CURLOPT_WRITEFUNCTION, WriteCallback); (*easy_setopt_)(curl_, CURLOPT_WRITEDATA, - reinterpret_cast(server_response)); + reinterpret_cast(http_response_data)); + } + if (http_header_data != NULL) { + http_header_data->clear(); + (*easy_setopt_)(curl_, CURLOPT_HEADERFUNCTION, WriteCallback); + (*easy_setopt_)(curl_, CURLOPT_HEADERDATA, + reinterpret_cast(http_header_data)); } CURLcode err_code = CURLE_OK; @@ -129,6 +140,10 @@ bool LibcurlWrapper::SendRequest(const string& url, easy_strerror_ = reinterpret_cast (dlsym(curl_lib_, "curl_easy_strerror")); + if (http_status_code != NULL) { + (*easy_getinfo_)(curl_, CURLINFO_RESPONSE_CODE, http_status_code); + } + #ifndef NDEBUG if (err_code != CURLE_OK) fprintf(stderr, "Failed to send http request to %s, error: %s\n", @@ -209,6 +224,10 @@ bool LibcurlWrapper::SetFunctionPointers() { "curl_easy_cleanup", void(*)(CURL*)); + SET_AND_CHECK_FUNCTION_POINTER(easy_getinfo_, + "curl_easy_getinfo", + CURLcode(*)(CURL *, CURLINFO info, ...)); + SET_AND_CHECK_FUNCTION_POINTER(slist_free_all_, "curl_slist_free_all", void(*)(curl_slist*)); diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/libcurl_wrapper.h b/toolkit/crashreporter/google-breakpad/src/common/linux/libcurl_wrapper.h index 3b72b5e79b7c..de84a63b4059 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/linux/libcurl_wrapper.h +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/libcurl_wrapper.h @@ -30,6 +30,9 @@ // A wrapper for libcurl to do HTTP Uploads, to support easy mocking // and unit testing of the HTTPUpload class. +#ifndef COMMON_LINUX_LIBCURL_WRAPPER_H_ +#define COMMON_LINUX_LIBCURL_WRAPPER_H_ + #include #include @@ -40,6 +43,7 @@ namespace google_breakpad { class LibcurlWrapper { public: LibcurlWrapper(); + ~LibcurlWrapper(); virtual bool Init(); virtual bool SetProxy(const string& proxy_host, const string& proxy_userpwd); @@ -47,7 +51,9 @@ class LibcurlWrapper { const string& basename); virtual bool SendRequest(const string& url, const std::map& parameters, - string* server_response); + int* http_status_code, + string* http_header_data, + string* http_response_data); private: // This function initializes class state corresponding to function // pointers into the CURL library. @@ -78,7 +84,10 @@ class LibcurlWrapper { CURLcode (*easy_perform_)(CURL *); const char* (*easy_strerror_)(CURLcode); void (*easy_cleanup_)(CURL *); + CURLcode (*easy_getinfo_)(CURL *, CURLINFO info, ...); void (*formfree_)(struct curl_httppost *); }; } + +#endif // COMMON_LINUX_LIBCURL_WRAPPER_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/linux_libc_support.cc b/toolkit/crashreporter/google-breakpad/src/common/linux/linux_libc_support.cc index 845729c989ba..08b0325e6d9e 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/linux/linux_libc_support.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/linux_libc_support.cc @@ -138,6 +138,16 @@ const char* my_strrchr(const char* haystack, char needle) { return ret; } +void* my_memchr(const void* src, int needle, size_t src_len) { + const unsigned char* p = (const unsigned char*)src; + const unsigned char* p_end = p + src_len; + for (; p < p_end; ++p) { + if (*p == needle) + return (void*)p; + } + return NULL; +} + // Read a hex value // result: (output) the resulting value // s: a string diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/linux_libc_support.h b/toolkit/crashreporter/google-breakpad/src/common/linux/linux_libc_support.h index 3429600b79f8..ec5a8d6b6b4a 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/linux/linux_libc_support.h +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/linux_libc_support.h @@ -77,6 +77,8 @@ extern const char* my_read_decimal_ptr(uintptr_t* result, const char* s); extern void my_memset(void* ip, char c, size_t len); +extern void* my_memchr(const void* src, int c, size_t len); + // The following are considered safe to use in a compromised environment. // Besides, this gives the compiler an opportunity to optimize their calls. #define my_memcpy memcpy diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/linux_libc_support_unittest.cc b/toolkit/crashreporter/google-breakpad/src/common/linux/linux_libc_support_unittest.cc index 5d06d17e0092..adadfed44dce 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/linux/linux_libc_support_unittest.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/linux_libc_support_unittest.cc @@ -154,6 +154,18 @@ TEST(LinuxLibcSupportTest, strrchr) { ASSERT_EQ(abc3 + 6, my_strrchr(abc3, 'a')); } +TEST(LinuxLibcSupportTest, memchr) { + ASSERT_EQ(NULL, my_memchr("abc", 'd', 3)); + ASSERT_EQ(NULL, my_memchr("abcd", 'd', 3)); + ASSERT_EQ(NULL, my_memchr("a", 'a', 0)); + + static const char abc3[] = "abcabcabc"; + ASSERT_EQ(abc3, my_memchr(abc3, 'a', 3)); + ASSERT_EQ(abc3, my_memchr(abc3, 'a', 9)); + ASSERT_EQ(abc3+1, my_memchr(abc3, 'b', 9)); + ASSERT_EQ(abc3+2, my_memchr(abc3, 'c', 9)); +} + TEST(LinuxLibcSupportTest, read_hex_ptr) { uintptr_t result; const char* last; diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/memory_mapped_file.cc b/toolkit/crashreporter/google-breakpad/src/common/linux/memory_mapped_file.cc index 853cce570db7..592b66c8d646 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/linux/memory_mapped_file.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/memory_mapped_file.cc @@ -46,15 +46,17 @@ namespace google_breakpad { MemoryMappedFile::MemoryMappedFile() {} -MemoryMappedFile::MemoryMappedFile(const char* path) { - Map(path); +MemoryMappedFile::MemoryMappedFile(const char* path, size_t offset) { + Map(path, offset); } MemoryMappedFile::~MemoryMappedFile() { Unmap(); } -bool MemoryMappedFile::Map(const char* path) { +#include + +bool MemoryMappedFile::Map(const char* path, size_t offset) { Unmap(); int fd = sys_open(path, O_RDONLY, 0); @@ -62,7 +64,9 @@ bool MemoryMappedFile::Map(const char* path) { return false; } -#if defined(__x86_64__) +#if defined(__x86_64__) || defined(__aarch64__) || \ + (defined(__mips__) && _MIPS_SIM == _ABI64) + struct kernel_stat st; if (sys_fstat(fd, &st) == -1 || st.st_size < 0) { #else @@ -73,25 +77,34 @@ bool MemoryMappedFile::Map(const char* path) { return false; } - // If the file size is zero, simply use an empty MemoryRange and return - // true. Don't bother to call mmap() even though mmap() can handle an - // empty file on some platforms. - if (st.st_size == 0) { + // Strangely file size can be negative, but we check above that it is not. + size_t file_len = static_cast(st.st_size); + // If the file does not extend beyond the offset, simply use an empty + // MemoryRange and return true. Don't bother to call mmap() + // even though mmap() can handle an empty file on some platforms. + if (offset >= file_len) { sys_close(fd); return true; } -#if defined(__x86_64__) - void* data = sys_mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0); +#if defined(__x86_64__) || defined(__aarch64__) || \ + (defined(__mips__) && _MIPS_SIM == _ABI64) + void* data = sys_mmap(NULL, file_len, PROT_READ, MAP_PRIVATE, fd, offset); #else - void* data = sys_mmap2(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0); + if ((offset & 4095) != 0) { + // Not page aligned. + sys_close(fd); + return false; + } + void* data = sys_mmap2( + NULL, file_len, PROT_READ, MAP_PRIVATE, fd, offset >> 12); #endif sys_close(fd); if (data == MAP_FAILED) { return false; } - content_.Set(data, st.st_size); + content_.Set(data, file_len - offset); return true; } diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/memory_mapped_file.h b/toolkit/crashreporter/google-breakpad/src/common/linux/memory_mapped_file.h index 6abd5b0c74a3..fa660cc91af9 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/linux/memory_mapped_file.h +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/memory_mapped_file.h @@ -33,6 +33,7 @@ #ifndef COMMON_LINUX_MEMORY_MAPPED_FILE_H_ #define COMMON_LINUX_MEMORY_MAPPED_FILE_H_ +#include #include "common/basictypes.h" #include "common/memory_range.h" @@ -47,7 +48,7 @@ class MemoryMappedFile { // Constructor that calls Map() to map a file at |path| into memory. // If Map() fails, the object behaves as if it is default constructed. - explicit MemoryMappedFile(const char* path); + MemoryMappedFile(const char* path, size_t offset); ~MemoryMappedFile(); @@ -56,7 +57,7 @@ class MemoryMappedFile { // success. Mapping an empty file will succeed but with data() and size() // returning NULL and 0, respectively. An existing mapping is unmapped // before a new mapping is created. - bool Map(const char* path); + bool Map(const char* path, size_t offset); // Unmaps the memory for the mapped file. It's a no-op if no file is // mapped. diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/memory_mapped_file_unittest.cc b/toolkit/crashreporter/google-breakpad/src/common/linux/memory_mapped_file_unittest.cc index 7c34e7083da7..fad59f40cd1e 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/linux/memory_mapped_file_unittest.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/memory_mapped_file_unittest.cc @@ -37,7 +37,6 @@ #include #include "breakpad_googletest_includes.h" -#include "common/linux/eintr_wrapper.h" #include "common/linux/memory_mapped_file.h" #include "common/tests/auto_tempdir.h" #include "common/tests/file_utils.h" @@ -72,12 +71,12 @@ TEST_F(MemoryMappedFileTest, UnmapWithoutMap) { TEST_F(MemoryMappedFileTest, MapNonexistentFile) { { - MemoryMappedFile mapped_file("nonexistent-file"); + MemoryMappedFile mapped_file("nonexistent-file", 0); ExpectNoMappedData(mapped_file); } { MemoryMappedFile mapped_file; - EXPECT_FALSE(mapped_file.Map("nonexistent-file")); + EXPECT_FALSE(mapped_file.Map("nonexistent-file", 0)); ExpectNoMappedData(mapped_file); } } @@ -88,12 +87,12 @@ TEST_F(MemoryMappedFileTest, MapEmptyFile) { ASSERT_TRUE(WriteFile(test_file.c_str(), NULL, 0)); { - MemoryMappedFile mapped_file(test_file.c_str()); + MemoryMappedFile mapped_file(test_file.c_str(), 0); ExpectNoMappedData(mapped_file); } { MemoryMappedFile mapped_file; - EXPECT_TRUE(mapped_file.Map(test_file.c_str())); + EXPECT_TRUE(mapped_file.Map(test_file.c_str(), 0)); ExpectNoMappedData(mapped_file); } } @@ -110,7 +109,7 @@ TEST_F(MemoryMappedFileTest, MapNonEmptyFile) { ASSERT_TRUE(WriteFile(test_file.c_str(), data, data_size)); { - MemoryMappedFile mapped_file(test_file.c_str()); + MemoryMappedFile mapped_file(test_file.c_str(), 0); EXPECT_FALSE(mapped_file.content().IsEmpty()); EXPECT_TRUE(mapped_file.data() != NULL); EXPECT_EQ(data_size, mapped_file.size()); @@ -118,7 +117,7 @@ TEST_F(MemoryMappedFileTest, MapNonEmptyFile) { } { MemoryMappedFile mapped_file; - EXPECT_TRUE(mapped_file.Map(test_file.c_str())); + EXPECT_TRUE(mapped_file.Map(test_file.c_str(), 0)); EXPECT_FALSE(mapped_file.content().IsEmpty()); EXPECT_TRUE(mapped_file.data() != NULL); EXPECT_EQ(data_size, mapped_file.size()); @@ -146,13 +145,13 @@ TEST_F(MemoryMappedFileTest, RemapAfterMap) { ASSERT_TRUE(WriteFile(test_file2.c_str(), data2, data2_size)); { - MemoryMappedFile mapped_file(test_file1.c_str()); + MemoryMappedFile mapped_file(test_file1.c_str(), 0); EXPECT_FALSE(mapped_file.content().IsEmpty()); EXPECT_TRUE(mapped_file.data() != NULL); EXPECT_EQ(data1_size, mapped_file.size()); EXPECT_EQ(0, memcmp(data1, mapped_file.data(), data1_size)); - mapped_file.Map(test_file2.c_str()); + mapped_file.Map(test_file2.c_str(), 0); EXPECT_FALSE(mapped_file.content().IsEmpty()); EXPECT_TRUE(mapped_file.data() != NULL); EXPECT_EQ(data2_size, mapped_file.size()); @@ -160,16 +159,50 @@ TEST_F(MemoryMappedFileTest, RemapAfterMap) { } { MemoryMappedFile mapped_file; - EXPECT_TRUE(mapped_file.Map(test_file1.c_str())); + EXPECT_TRUE(mapped_file.Map(test_file1.c_str(), 0)); EXPECT_FALSE(mapped_file.content().IsEmpty()); EXPECT_TRUE(mapped_file.data() != NULL); EXPECT_EQ(data1_size, mapped_file.size()); EXPECT_EQ(0, memcmp(data1, mapped_file.data(), data1_size)); - mapped_file.Map(test_file2.c_str()); + mapped_file.Map(test_file2.c_str(), 0); EXPECT_FALSE(mapped_file.content().IsEmpty()); EXPECT_TRUE(mapped_file.data() != NULL); EXPECT_EQ(data2_size, mapped_file.size()); EXPECT_EQ(0, memcmp(data2, mapped_file.data(), data2_size)); } } + +TEST_F(MemoryMappedFileTest, MapWithOffset) { + // Put more data in the test file this time. Offsets can only be + // done on page boundaries, so we need a two page file to test this. + const int page_size = 4096; + char data1[2 * page_size]; + size_t data1_size = sizeof(data1); + for (size_t i = 0; i < data1_size; ++i) { + data1[i] = i & 0x7f; + } + + AutoTempDir temp_dir; + string test_file1 = temp_dir.path() + "/test_file1"; + ASSERT_TRUE(WriteFile(test_file1.c_str(), data1, data1_size)); + { + MemoryMappedFile mapped_file(test_file1.c_str(), page_size); + EXPECT_FALSE(mapped_file.content().IsEmpty()); + EXPECT_TRUE(mapped_file.data() != NULL); + EXPECT_EQ(data1_size - page_size, mapped_file.size()); + EXPECT_EQ( + 0, + memcmp(data1 + page_size, mapped_file.data(), data1_size - page_size)); + } + { + MemoryMappedFile mapped_file; + mapped_file.Map(test_file1.c_str(), page_size); + EXPECT_FALSE(mapped_file.content().IsEmpty()); + EXPECT_TRUE(mapped_file.data() != NULL); + EXPECT_EQ(data1_size - page_size, mapped_file.size()); + EXPECT_EQ( + 0, + memcmp(data1 + page_size, mapped_file.data(), data1_size - page_size)); + } +} diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/moz.build b/toolkit/crashreporter/google-breakpad/src/common/linux/moz.build index 30e059e0d975..d085922abefc 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/linux/moz.build +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/moz.build @@ -22,32 +22,27 @@ if CONFIG['OS_TARGET'] != 'Android': 'http_upload.cc', ] -if CONFIG['MOZ_CRASHREPORTER']: - HostLibrary('host_breakpad_linux_common_s') - HOST_SOURCES += [ - 'dump_symbols.cc', - 'elf_symbols_to_module.cc', - 'elfutils.cc', - 'file_id.cc', - 'guid_creator.cc', - 'linux_libc_support.cc', - 'memory_mapped_file.cc', - ] - HOST_CXXFLAGS += [ - '-O2', - '-g', - ] +HostLibrary('host_breakpad_linux_common_s') +HOST_SOURCES += [ + 'crc32.cc', + 'dump_symbols.cc', + 'elf_symbols_to_module.cc', + 'elfutils.cc', + 'file_id.cc', + 'guid_creator.cc', + 'linux_libc_support.cc', + 'memory_mapped_file.cc', +] + +HOST_CXXFLAGS += [ + '-O2', + '-g', +] Library('breakpad_linux_common_s') FINAL_LIBRARY = 'xul' -if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk': - DEFINES['ELFSIZE'] = 32 - -DEFINES['NO_STABS_SUPPORT'] = True - -LOCAL_INCLUDES += [ - '/toolkit/crashreporter/google-breakpad/src', -] +HOST_DEFINES['NO_STABS_SUPPORT'] = True +include('/toolkit/crashreporter/crashreporter.mozbuild') diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/synth_elf.cc b/toolkit/crashreporter/google-breakpad/src/common/linux/synth_elf.cc index 9cd03ef8331b..b978550f85e5 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/linux/synth_elf.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/synth_elf.cc @@ -5,15 +5,12 @@ #include #include +#include "common/linux/elf_gnu_compat.h" #include "common/using_std_string.h" namespace google_breakpad { namespace synth_elf { -#ifndef NT_GNU_BUILD_ID -#define NT_GNU_BUILD_ID 3 -#endif - ELF::ELF(uint16_t machine, uint8_t file_class, Endianness endianness) diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/tests/auto_testfile.h b/toolkit/crashreporter/google-breakpad/src/common/linux/tests/auto_testfile.h new file mode 100644 index 000000000000..92fe017b92be --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/tests/auto_testfile.h @@ -0,0 +1,124 @@ +// Copyright (c) 2013, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Utility class for creating a temporary file for unit tests +// that is deleted in the destructor. + +#ifndef GOOGLE_BREAKPAD_COMMON_LINUX_TESTS_AUTO_TESTFILE +#define GOOGLE_BREAKPAD_COMMON_LINUX_TESTS_AUTO_TESTFILE + +#include +#include + +#include + +#include "breakpad_googletest_includes.h" +#include "common/linux/eintr_wrapper.h" +#include "common/tests/auto_tempdir.h" + +namespace google_breakpad { + +class AutoTestFile { + public: + // Create a new empty test file. + // test_prefix: (input) test-specific prefix, can't be NULL. + explicit AutoTestFile(const char* test_prefix) { + Init(test_prefix); + } + + // Create a new test file, and fill it with initial data from a C string. + // The terminating zero is not written. + // test_prefix: (input) test-specific prefix, can't be NULL. + // text: (input) initial content. + AutoTestFile(const char* test_prefix, const char* text) { + Init(test_prefix); + if (fd_ >= 0) + WriteText(text, static_cast(strlen(text))); + } + + AutoTestFile(const char* test_prefix, const char* text, size_t text_len) { + Init(test_prefix); + if (fd_ >= 0) + WriteText(text, text_len); + } + + // Destroy test file on scope exit. + ~AutoTestFile() { + if (fd_ >= 0) { + close(fd_); + fd_ = -1; + } + } + + // Returns true iff the test file could be created properly. + // Useful in tests inside EXPECT_TRUE(file.IsOk()); + bool IsOk() { + return fd_ >= 0; + } + + // Returns the Posix file descriptor for the test file, or -1 + // If IsOk() returns false. Note: on Windows, this always returns -1. + int GetFd() { + return fd_; + } + + private: + void Init(const char* test_prefix) { + fd_ = -1; + char path_templ[PATH_MAX]; + int ret = snprintf(path_templ, sizeof(path_templ), + TEMPDIR "/%s-unittest.XXXXXX", + test_prefix); + if (ret >= static_cast(sizeof(path_templ))) + return; + + fd_ = mkstemp(path_templ); + if (fd_ < 0) + return; + + unlink(path_templ); + } + + void WriteText(const char* text, size_t text_len) { + ssize_t r = HANDLE_EINTR(write(fd_, text, text_len)); + if (r != static_cast(text_len)) { + close(fd_); + fd_ = -1; + return; + } + + lseek(fd_, 0, SEEK_SET); + } + + int fd_; +}; + +} // namespace google_breakpad + +#endif // GOOGLE_BREAKPAD_COMMON_LINUX_TESTS_AUTO_TESTFILE diff --git a/toolkit/crashreporter/google-breakpad/src/common/linux/tests/crash_generator.cc b/toolkit/crashreporter/google-breakpad/src/common/linux/tests/crash_generator.cc index 9262c3230bc1..c9491f6f2923 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/linux/tests/crash_generator.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/linux/tests/crash_generator.cc @@ -65,15 +65,26 @@ const char* const kProcFilesToCopy[] = { const size_t kNumProcFilesToCopy = sizeof(kProcFilesToCopy) / sizeof(kProcFilesToCopy[0]); +int gettid() { + // Glibc does not provide a wrapper for this. + return syscall(__NR_gettid); +} + +int tkill(pid_t tid, int sig) { + // Glibc does not provide a wrapper for this. + return syscall(__NR_tkill, tid, sig); +} + // Core file size limit set to 1 MB, which is big enough for test purposes. const rlim_t kCoreSizeLimit = 1024 * 1024; void *thread_function(void *data) { ThreadData* thread_data = reinterpret_cast(data); - volatile pid_t thread_id = syscall(__NR_gettid); + volatile pid_t thread_id = gettid(); *(thread_data->thread_id_ptr) = thread_id; int result = pthread_barrier_wait(thread_data->barrier); if (result != 0 && result != PTHREAD_BARRIER_SERIAL_THREAD) { + perror("Failed to wait for sync barrier"); exit(1); } while (true) { @@ -160,11 +171,16 @@ bool CrashGenerator::SetCoreFileSizeLimit(rlim_t limit) const { bool CrashGenerator::CreateChildCrash( unsigned num_threads, unsigned crash_thread, int crash_signal, pid_t* child_pid) { - if (num_threads == 0 || crash_thread >= num_threads) + if (num_threads == 0 || crash_thread >= num_threads) { + fprintf(stderr, "CrashGenerator: Invalid thread counts; num_threads=%u" + " crash_thread=%u\n", num_threads, crash_thread); return false; + } - if (!MapSharedMemory(num_threads * sizeof(pid_t))) + if (!MapSharedMemory(num_threads * sizeof(pid_t))) { + perror("CrashGenerator: Unable to map shared memory"); return false; + } pid_t pid = fork(); if (pid == 0) { @@ -183,9 +199,35 @@ bool CrashGenerator::CreateChildCrash( fprintf(stderr, "CrashGenerator: Failed to copy proc files\n"); exit(1); } - if (kill(*GetThreadIdPointer(crash_thread), crash_signal) == -1) { - perror("CrashGenerator: Failed to kill thread by signal"); + // On Android the signal sometimes doesn't seem to get sent even though + // tkill returns '0'. Retry a couple of times if the signal doesn't get + // through on the first go: + // https://code.google.com/p/google-breakpad/issues/detail?id=579 +#if defined(__ANDROID__) + const int kRetries = 60; + const unsigned int kSleepTimeInSeconds = 1; +#else + const int kRetries = 1; + const unsigned int kSleepTimeInSeconds = 600; +#endif + for (int i = 0; i < kRetries; i++) { + if (tkill(*GetThreadIdPointer(crash_thread), crash_signal) == -1) { + perror("CrashGenerator: Failed to kill thread by signal"); + } else { + // At this point, we've queued the signal for delivery, but there's no + // guarantee when it'll be delivered. We don't want the main thread to + // race and exit before the thread we signaled is processed. So sleep + // long enough that we won't flake even under fairly high load. + // TODO: See if we can't be a bit more deterministic. There doesn't + // seem to be an API to check on signal delivery status, so we can't + // really poll and wait for the kernel to declare the signal has been + // delivered. If it has, and things worked, we'd be killed, so the + // sleep length doesn't really matter. + sleep(kSleepTimeInSeconds); + } } + } else { + perror("CrashGenerator: Failed to set core limit"); } exit(1); } else if (pid == -1) { @@ -200,8 +242,8 @@ bool CrashGenerator::CreateChildCrash( } if (!WIFSIGNALED(status) || WTERMSIG(status) != crash_signal) { fprintf(stderr, "CrashGenerator: Child process not killed by the expected signal\n" - " exit status=0x%x signaled=%s sig=%d expected=%d\n", - status, WIFSIGNALED(status) ? "true" : "false", + " exit status=0x%x pid=%u signaled=%s sig=%d expected=%d\n", + status, pid, WIFSIGNALED(status) ? "true" : "false", WTERMSIG(status), crash_signal); return false; } diff --git a/toolkit/crashreporter/google-breakpad/src/common/mac/BreakpadRelease.xcconfig b/toolkit/crashreporter/google-breakpad/src/common/mac/BreakpadRelease.xcconfig index af209a423cec..920f277db831 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/mac/BreakpadRelease.xcconfig +++ b/toolkit/crashreporter/google-breakpad/src/common/mac/BreakpadRelease.xcconfig @@ -31,3 +31,4 @@ GCC_OPTIMIZATION_LEVEL = s GCC_WARN_UNINITIALIZED_AUTOS = YES +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) NDEBUG diff --git a/toolkit/crashreporter/google-breakpad/src/common/mac/GTMDefines.h b/toolkit/crashreporter/google-breakpad/src/common/mac/GTMDefines.h index b970d69c8546..14ffa7e13f31 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/mac/GTMDefines.h +++ b/toolkit/crashreporter/google-breakpad/src/common/mac/GTMDefines.h @@ -193,9 +193,11 @@ // For iPhone specific stuff #define GTM_IPHONE_SDK 1 #if TARGET_IPHONE_SIMULATOR + #define GTM_IPHONE_DEVICE 0 #define GTM_IPHONE_SIMULATOR 1 #else #define GTM_IPHONE_DEVICE 1 + #define GTM_IPHONE_SIMULATOR 0 #endif // TARGET_IPHONE_SIMULATOR // By default, GTM has provided it's own unittesting support, define this // to use the support provided by Xcode, especially for the Xcode4 support @@ -203,9 +205,14 @@ #ifndef GTM_IPHONE_USE_SENTEST #define GTM_IPHONE_USE_SENTEST 0 #endif + #define GTM_MACOS_SDK 0 #else // For MacOS specific stuff #define GTM_MACOS_SDK 1 + #define GTM_IPHONE_SDK 0 + #define GTM_IPHONE_SIMULATOR 0 + #define GTM_IPHONE_DEVICE 0 + #define GTM_IPHONE_USE_SENTEST 0 #endif // Some of our own availability macros @@ -217,21 +224,10 @@ #define GTM_AVAILABLE_ONLY_ON_MACOS UNAVAILABLE_ATTRIBUTE #endif -// Provide a symbol to include/exclude extra code for GC support. (This mainly -// just controls the inclusion of finalize methods). +// GC was dropped by Apple, define the old constant incase anyone still keys +// off of it. #ifndef GTM_SUPPORT_GC - #if GTM_IPHONE_SDK - // iPhone never needs GC - #define GTM_SUPPORT_GC 0 - #else - // We can't find a symbol to tell if GC is supported/required, so best we - // do on Mac targets is include it if we're on 10.5 or later. - #if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 - #define GTM_SUPPORT_GC 0 - #else - #define GTM_SUPPORT_GC 1 - #endif - #endif + #define GTM_SUPPORT_GC 0 #endif // To simplify support for 64bit (and Leopard in general), we provide the type @@ -239,7 +235,7 @@ #if !(MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) // NSInteger/NSUInteger and Max/Mins #ifndef NSINTEGER_DEFINED - #if __LP64__ || NS_BUILD_32_LIKE_64 + #if (defined(__LP64__) && __LP64__) || NS_BUILD_32_LIKE_64 typedef long NSInteger; typedef unsigned long NSUInteger; #else @@ -352,7 +348,15 @@ #endif #ifndef GTM_NONNULL - #define GTM_NONNULL(x) __attribute__((nonnull(x))) + #if defined(__has_attribute) + #if __has_attribute(nonnull) + #define GTM_NONNULL(x) __attribute__((nonnull x)) + #else + #define GTM_NONNULL(x) + #endif + #else + #define GTM_NONNULL(x) + #endif #endif // Invalidates the initializer from which it's called. @@ -374,6 +378,14 @@ #endif #endif +#ifndef GTMCFAutorelease + #if __has_feature(objc_arc) + #define GTMCFAutorelease(x) CFBridgingRelease(x) + #else + #define GTMCFAutorelease(x) ([(id)x autorelease]) + #endif +#endif + #ifdef __OBJC__ // Declared here so that it can easily be used for logging tracking if diff --git a/toolkit/crashreporter/google-breakpad/src/common/mac/GTMGarbageCollection.h b/toolkit/crashreporter/google-breakpad/src/common/mac/GTMGarbageCollection.h deleted file mode 100644 index 93d4efabf6ff..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/common/mac/GTMGarbageCollection.h +++ /dev/null @@ -1,72 +0,0 @@ -// -// GTMGarbageCollection.h -// -// Copyright 2007-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import - -#import "GTMDefines.h" - -// This allows us to easily move our code from GC to non GC. -// They are no-ops unless we are require Leopard or above. -// See -// http://developer.apple.com/documentation/Cocoa/Conceptual/GarbageCollection/index.html -// and -// http://developer.apple.com/documentation/Cocoa/Conceptual/GarbageCollection/Articles/gcCoreFoundation.html#//apple_ref/doc/uid/TP40006687-SW1 -// for details. - -#if (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5) && !GTM_IPHONE_SDK -// General use would be to call this through GTMCFAutorelease -// but there may be a reason the you want to make something collectable -// but not autoreleased, especially in pure GC code where you don't -// want to bother with the nop autorelease. Done as a define instead of an -// inline so that tools like Clang's scan-build don't report code as leaking. -#define GTMNSMakeCollectable(cf) ((id)NSMakeCollectable(cf)) - -// GTMNSMakeUncollectable is for global maps, etc. that we don't -// want released ever. You should still retain these in non-gc code. -GTM_INLINE void GTMNSMakeUncollectable(id object) { - [[NSGarbageCollector defaultCollector] disableCollectorForPointer:object]; -} - -// Hopefully no code really needs this, but GTMIsGarbageCollectionEnabled is -// a common way to check at runtime if GC is on. -// There are some places where GC doesn't work w/ things w/in Apple's -// frameworks, so this is here so GTM unittests and detect it, and not run -// individual tests to work around bugs in Apple's frameworks. -GTM_INLINE BOOL GTMIsGarbageCollectionEnabled(void) { - return ([NSGarbageCollector defaultCollector] != nil); -} - -#else - -#define GTMNSMakeCollectable(cf) ((id)(cf)) - -GTM_INLINE void GTMNSMakeUncollectable(id object) { -} - -GTM_INLINE BOOL GTMIsGarbageCollectionEnabled(void) { - return NO; -} - -#endif - -// GTMCFAutorelease makes a CF object collectable in GC mode, or adds it -// to the autorelease pool in non-GC mode. Either way it is taken care -// of. Done as a define instead of an inline so that tools like Clang's -// scan-build don't report code as leaking. -#define GTMCFAutorelease(cf) ([GTMNSMakeCollectable(cf) autorelease]) - diff --git a/toolkit/crashreporter/google-breakpad/src/common/mac/GTMLogger.m b/toolkit/crashreporter/google-breakpad/src/common/mac/GTMLogger.m index 4b40747bfe63..ebc5836a25e7 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/mac/GTMLogger.m +++ b/toolkit/crashreporter/google-breakpad/src/common/mac/GTMLogger.m @@ -17,7 +17,6 @@ // #import "GTMLogger.h" -#import "GTMGarbageCollection.h" #import #import #import @@ -506,7 +505,7 @@ static BOOL IsVerboseLoggingEnabled(void) { // In DEBUG builds, log everything. If we're not in a debug build we'll assume // that we're in a Release build. - (BOOL)filterAllowsMessage:(NSString *)msg level:(GTMLoggerLevel)level { -#if DEBUG +#if defined(DEBUG) && DEBUG return YES; #endif diff --git a/toolkit/crashreporter/google-breakpad/src/common/mac/HTTPMultipartUpload.m b/toolkit/crashreporter/google-breakpad/src/common/mac/HTTPMultipartUpload.m index 76f38f8a2fde..2ed1b6322651 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/mac/HTTPMultipartUpload.m +++ b/toolkit/crashreporter/google-breakpad/src/common/mac/HTTPMultipartUpload.m @@ -143,7 +143,7 @@ //============================================================================= - (NSData *)send:(NSError **)error { - NSMutableURLRequest *req = + NSMutableURLRequest *req = [[NSMutableURLRequest alloc] initWithURL:url_ cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0 ]; @@ -190,12 +190,17 @@ [response_ release]; response_ = nil; - - NSData *data = [NSURLConnection sendSynchronousRequest:req - returningResponse:&response_ - error:error]; - [response_ retain]; + NSData *data = nil; + if ([[req URL] isFileURL]) { + [[req HTTPBody] writeToURL:[req URL] options:0 error:error]; + } else { + NSURLResponse *response = nil; + data = [NSURLConnection sendSynchronousRequest:req + returningResponse:&response + error:error]; + response_ = (NSHTTPURLResponse *)[response retain]; + } [req release]; return data; diff --git a/toolkit/crashreporter/google-breakpad/src/common/mac/SimpleStringDictionary.h b/toolkit/crashreporter/google-breakpad/src/common/mac/SimpleStringDictionary.h deleted file mode 100644 index 814a6f7a5776..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/common/mac/SimpleStringDictionary.h +++ /dev/null @@ -1,195 +0,0 @@ -// Copyright (c) 2007, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// SimpleStringDictionary.h -// - -#ifndef SimpleStringDictionary_H__ -#define SimpleStringDictionary_H__ - -#import -#import - -namespace google_breakpad { - -//============================================================================== -// SimpleStringDictionary (and associated class KeyValueEntry) implement a very -// basic dictionary container class. It has the property of not making any -// memory allocations when getting and setting values. But it is not very -// efficient, with calls to get and set values operating in linear time. -// It has the additional limitation of having a fairly small fixed capacity of -// SimpleStringDictionary::MAX_NUM_ENTRIES entries. An assert() will fire if -// the client attempts to set more than this number of key/value pairs. -// Ordinarilly a C++ programmer would use something like the std::map template -// class, or on the Macintosh would often choose CFDictionary or NSDictionary. -// But these dictionary classes may call malloc() during get and set operations. -// Google Breakpad requires that no memory allocations be made in code running -// in its exception handling thread, so it uses SimpleStringDictionary as the -// underlying implementation for the GoogleBreakpad.framework APIs: -// GoogleBreakpadSetKeyValue(), GoogleBreakpadKeyValue(), and -// GoogleBreakpadRemoveKeyValue() -// - -//============================================================================== -// KeyValueEntry -// -// A helper class used by SimpleStringDictionary representing a single -// storage cell for a key/value pair. Each key and value string are -// limited to MAX_STRING_STORAGE_SIZE-1 bytes (not glyphs). This class -// performs no memory allocations. It has methods for setting and getting -// key and value strings. -// -class KeyValueEntry { - public: - KeyValueEntry() { - Clear(); - } - - KeyValueEntry(const char *key, const char *value) { - SetKeyValue(key, value); - } - - void SetKeyValue(const char *key, const char *value) { - if (!key) { - key = ""; - } - if (!value) { - value = ""; - } - - strlcpy(key_, key, sizeof(key_)); - strlcpy(value_, value, sizeof(value_)); - } - - void SetValue(const char *value) { - if (!value) { - value = ""; - } - strlcpy(value_, value, sizeof(value_)); - }; - - // Removes the key/value - void Clear() { - memset(key_, 0, sizeof(key_)); - memset(value_, 0, sizeof(value_)); - } - - bool IsActive() const { return key_[0] != '\0'; } - const char *GetKey() const { return key_; } - const char *GetValue() const { return value_; } - - // Don't change this without considering the fixed size - // of MachMessage (in MachIPC.h) - // (see also struct KeyValueMessageData in Inspector.h) - enum {MAX_STRING_STORAGE_SIZE = 256}; - - private: - char key_[MAX_STRING_STORAGE_SIZE]; - char value_[MAX_STRING_STORAGE_SIZE]; -}; - -//============================================================================== -// This class is not an efficient dictionary, but for the purposes of breakpad -// will be just fine. We're just dealing with ten or so distinct -// key/value pairs. The idea is to avoid any malloc() or free() calls -// in certain important methods to be called when a process is in a -// crashed state. Each key and value string are limited to -// KeyValueEntry::MAX_STRING_STORAGE_SIZE-1 bytes (not glyphs). Strings passed -// in exceeding this length will be truncated. -// -class SimpleStringDictionary { - public: - SimpleStringDictionary() {}; // entries will all be cleared - - // Returns the number of active key/value pairs. The upper limit for this - // is MAX_NUM_ENTRIES. - int GetCount() const; - - // Given |key|, returns its corresponding |value|. - // If |key| is NULL, an assert will fire or NULL will be returned. If |key| - // is not found or is an empty string, NULL is returned. - const char *GetValueForKey(const char *key) const; - - // Stores a string |value| represented by |key|. If |key| is NULL or an empty - // string, this will assert (or do nothing). If |value| is NULL then - // the |key| will be removed. An empty string is OK for |value|. - void SetKeyValue(const char *key, const char *value); - - // Given |key|, removes any associated value. It will assert (or do nothing) - // if NULL is passed in. It will do nothing if |key| is not found. - void RemoveKey(const char *key); - - // This is the maximum number of key/value pairs which may be set in the - // dictionary. An assert may fire if more values than this are set. - // Don't change this without also changing comment in GoogleBreakpad.h - enum {MAX_NUM_ENTRIES = 64}; - - private: - friend class SimpleStringDictionaryIterator; - - const KeyValueEntry *GetEntry(int i) const; - - KeyValueEntry entries_[MAX_NUM_ENTRIES]; -}; - -//============================================================================== -class SimpleStringDictionaryIterator { - public: - SimpleStringDictionaryIterator(const SimpleStringDictionary &dict) - : dict_(dict), i_(0) { - } - - // Initializes iterator to the beginning (may later call Next() ) - void Start() { - i_ = 0; - } - - // like the nextObject method of NSEnumerator (in Cocoa) - // returns NULL when there are no more entries - // - const KeyValueEntry* Next() { - for (; i_ < SimpleStringDictionary::MAX_NUM_ENTRIES; ++i_) { - const KeyValueEntry *entry = dict_.GetEntry(i_); - if (entry->IsActive()) { - i_++; // move to next entry for next time - return entry; - } - } - - return NULL; // reached end of array - } - - private: - const SimpleStringDictionary& dict_; - int i_; -}; - -} // namespace google_breakpad - -#endif // SimpleStringDictionary_H__ diff --git a/toolkit/crashreporter/google-breakpad/src/common/mac/SimpleStringDictionary.mm b/toolkit/crashreporter/google-breakpad/src/common/mac/SimpleStringDictionary.mm deleted file mode 100644 index b97b760c6fe8..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/common/mac/SimpleStringDictionary.mm +++ /dev/null @@ -1,133 +0,0 @@ -// Copyright (c) 2007, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// SimpleStringDictionary.mm -// Simple string dictionary that does not allocate memory -// - -#include - -#import "SimpleStringDictionary.h" - -namespace google_breakpad { - -//============================================================================== -const KeyValueEntry *SimpleStringDictionary::GetEntry(int i) const { - return (i >= 0 && i < MAX_NUM_ENTRIES) ? &entries_[i] : NULL; -} - -//============================================================================== -int SimpleStringDictionary::GetCount() const { - int count = 0; - for (int i = 0; i < MAX_NUM_ENTRIES; ++i) { - if (entries_[i].IsActive() ) { - ++count; - } - } - - return count; -} - -//============================================================================== -const char *SimpleStringDictionary::GetValueForKey(const char *key) const { - assert(key); - if (!key) - return NULL; - - for (int i = 0; i < MAX_NUM_ENTRIES; ++i) { - const KeyValueEntry &entry = entries_[i]; - if (entry.IsActive() && !strcmp(entry.GetKey(), key)) { - return entry.GetValue(); - } - } - - return NULL; -} - -//============================================================================== -void SimpleStringDictionary::SetKeyValue(const char *key, - const char *value) { - if (!value) { - RemoveKey(key); - return; - } - - // key must not be NULL - assert(key); - if (!key) - return; - - // key must not be empty string - assert(key[0] != '\0'); - if (key[0] == '\0') - return; - - int free_index = -1; - - // check if key already exists - for (int i = 0; i < MAX_NUM_ENTRIES; ++i) { - KeyValueEntry &entry = entries_[i]; - - if (entry.IsActive()) { - if (!strcmp(entry.GetKey(), key)) { - entry.SetValue(value); - return; - } - } else { - // Make a note of an empty slot - if (free_index == -1) { - free_index = i; - } - } - } - - // check if we've run out of space - assert(free_index != -1); - - // Put new key into an empty slot (if found) - if (free_index != -1) { - entries_[free_index].SetKeyValue(key, value); - } -} - -//============================================================================== -void SimpleStringDictionary::RemoveKey(const char *key) { - assert(key); - if (!key) - return; - - for (int i = 0; i < MAX_NUM_ENTRIES; ++i) { - if (!strcmp(entries_[i].GetKey(), key)) { - entries_[i].Clear(); - return; - } - } -} - -} // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/common/mac/arch_utilities.cc b/toolkit/crashreporter/google-breakpad/src/common/mac/arch_utilities.cc index 4250eb3a6d3d..4e5f5534a571 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/mac/arch_utilities.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/mac/arch_utilities.cc @@ -48,6 +48,17 @@ namespace { +const NXArchInfo* ArchInfo_arm64() { + NXArchInfo* arm64 = new NXArchInfo; + *arm64 = *NXGetArchInfoFromCpuType(CPU_TYPE_ARM, + CPU_SUBTYPE_ARM_V7); + arm64->name = "arm64"; + arm64->cputype = CPU_TYPE_ARM64; + arm64->cpusubtype = CPU_SUBTYPE_ARM64_ALL; + arm64->description = "arm 64"; + return arm64; +} + const NXArchInfo* ArchInfo_armv7s() { NXArchInfo* armv7s = new NXArchInfo; *armv7s = *NXGetArchInfoFromCpuType(CPU_TYPE_ARM, @@ -63,19 +74,32 @@ const NXArchInfo* ArchInfo_armv7s() { namespace google_breakpad { const NXArchInfo* BreakpadGetArchInfoFromName(const char* arch_name) { + // TODO: Remove this when the OS knows about arm64. + if (!strcmp("arm64", arch_name)) + return BreakpadGetArchInfoFromCpuType(CPU_TYPE_ARM64, + CPU_SUBTYPE_ARM64_ALL); + // TODO: Remove this when the OS knows about armv7s. if (!strcmp("armv7s", arch_name)) return BreakpadGetArchInfoFromCpuType(CPU_TYPE_ARM, CPU_SUBTYPE_ARM_V7S); + return NXGetArchInfoFromName(arch_name); } const NXArchInfo* BreakpadGetArchInfoFromCpuType(cpu_type_t cpu_type, cpu_subtype_t cpu_subtype) { + // TODO: Remove this when the OS knows about arm64. + if (cpu_type == CPU_TYPE_ARM64 && cpu_subtype == CPU_SUBTYPE_ARM64_ALL) { + static const NXArchInfo* arm64 = ArchInfo_arm64(); + return arm64; + } + // TODO: Remove this when the OS knows about armv7s. if (cpu_type == CPU_TYPE_ARM && cpu_subtype == CPU_SUBTYPE_ARM_V7S) { static const NXArchInfo* armv7s = ArchInfo_armv7s(); return armv7s; } + return NXGetArchInfoFromCpuType(cpu_type, cpu_subtype); } @@ -160,7 +184,7 @@ const NXArchInfo *NXGetArchInfoFromName(const char *name) { return &kKnownArchitectures[arch]; } } - return nullptr; + return NULL; } const NXArchInfo *NXGetArchInfoFromCpuType(cpu_type_t cputype, @@ -170,7 +194,7 @@ const NXArchInfo *NXGetArchInfoFromCpuType(cpu_type_t cputype, return &kKnownArchitectures[arch]; } } - return nullptr; + return NULL; } struct fat_arch *NXFindBestFatArch(cpu_type_t cputype, @@ -182,6 +206,6 @@ struct fat_arch *NXFindBestFatArch(cpu_type_t cputype, return &fat_archs[f]; } } - return nullptr; + return NULL; } #endif // !__APPLE__ diff --git a/toolkit/crashreporter/google-breakpad/src/common/mac/dump_syms.cc b/toolkit/crashreporter/google-breakpad/src/common/mac/dump_syms.cc index 2ec8ebdfe92a..4dcdb73e8771 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/mac/dump_syms.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/mac/dump_syms.cc @@ -68,6 +68,10 @@ #define CPU_TYPE_ARM (static_cast(12)) #endif // CPU_TYPE_ARM +#ifndef CPU_TYPE_ARM64 +#define CPU_TYPE_ARM64 (static_cast(16777228)) +#endif // CPU_TYPE_ARM64 + using dwarf2reader::ByteReader; using google_breakpad::DwarfCUToModule; using google_breakpad::DwarfLineToModule; @@ -188,7 +192,7 @@ bool DumpSymbols::Read(const string &filename) { // Get our own copy of fat_reader's object file list. size_t object_files_count; - const struct fat_arch *object_files = + const SuperFatArch *object_files = fat_reader.object_files(&object_files_count); if (object_files_count == 0) { fprintf(stderr, "Fat binary file contains *no* architectures: %s\n", @@ -197,7 +201,7 @@ bool DumpSymbols::Read(const string &filename) { } object_files_.resize(object_files_count); memcpy(&object_files_[0], object_files, - sizeof(struct fat_arch) * object_files_count); + sizeof(SuperFatArch) * object_files_count); return true; } @@ -205,9 +209,8 @@ bool DumpSymbols::Read(const string &filename) { bool DumpSymbols::SetArchitecture(cpu_type_t cpu_type, cpu_subtype_t cpu_subtype) { // Find the best match for the architecture the user requested. - const struct fat_arch *best_match - = NXFindBestFatArch(cpu_type, cpu_subtype, &object_files_[0], - static_cast(object_files_.size())); + const SuperFatArch *best_match = FindBestMatchForArchitecture( + cpu_type, cpu_subtype); if (!best_match) return false; // Record the selected object file. @@ -225,6 +228,57 @@ bool DumpSymbols::SetArchitecture(const std::string &arch_name) { return arch_set; } +SuperFatArch* DumpSymbols::FindBestMatchForArchitecture( + cpu_type_t cpu_type, cpu_subtype_t cpu_subtype) { + // Check if all the object files can be converted to struct fat_arch. + bool can_convert_to_fat_arch = true; + vector fat_arch_vector; + for (vector::const_iterator it = object_files_.begin(); + it != object_files_.end(); + ++it) { + struct fat_arch arch; + bool success = it->ConvertToFatArch(&arch); + if (!success) { + can_convert_to_fat_arch = false; + break; + } + fat_arch_vector.push_back(arch); + } + + // If all the object files can be converted to struct fat_arch, use + // NXFindBestFatArch. + if (can_convert_to_fat_arch) { + const struct fat_arch *best_match + = NXFindBestFatArch(cpu_type, cpu_subtype, &fat_arch_vector[0], + static_cast(fat_arch_vector.size())); + + for (size_t i = 0; i < fat_arch_vector.size(); ++i) { + if (best_match == &fat_arch_vector[i]) + return &object_files_[i]; + } + assert(best_match == NULL); + return NULL; + } + + // Check for an exact match with cpu_type and cpu_subtype. + for (vector::iterator it = object_files_.begin(); + it != object_files_.end(); + ++it) { + if (static_cast(it->cputype) == cpu_type && + static_cast(it->cpusubtype) == cpu_subtype) + return &*it; + } + + // No exact match found. + // TODO(erikchen): If it becomes necessary, we can copy the implementation of + // NXFindBestFatArch, located at + // http://web.mit.edu/darwin/src/modules/cctools/libmacho/arch.c. + fprintf(stderr, "Failed to find an exact match for an object file with cpu " + "type: %d and cpu subtype: %d. Furthermore, at least one object file is " + "larger than 2**32.\n", cpu_type, cpu_subtype); + return NULL; +} + string DumpSymbols::Identifier() { FileID file_id(object_filename_.c_str()); unsigned char identifier_bytes[16]; @@ -275,7 +329,8 @@ class DumpSymbols::DumperLineToModule: bool DumpSymbols::ReadDwarf(google_breakpad::Module *module, const mach_o::Reader &macho_reader, - const mach_o::SectionMap &dwarf_sections) const { + const mach_o::SectionMap &dwarf_sections, + bool handle_inter_cu_refs) const { // Build a byte reader of the appropriate endianness. ByteReader byte_reader(macho_reader.big_endian() ? dwarf2reader::ENDIANNESS_BIG @@ -283,19 +338,24 @@ bool DumpSymbols::ReadDwarf(google_breakpad::Module *module, // Construct a context for this file. DwarfCUToModule::FileContext file_context(selected_object_name_, - module); + module, + handle_inter_cu_refs); // Build a dwarf2reader::SectionMap from our mach_o::SectionMap. for (mach_o::SectionMap::const_iterator it = dwarf_sections.begin(); - it != dwarf_sections.end(); it++) { - file_context.section_map[it->first] = - make_pair(reinterpret_cast(it->second.contents.start), - it->second.contents.Size()); + it != dwarf_sections.end(); ++it) { + file_context.AddSectionToSectionMap( + it->first, + reinterpret_cast(it->second.contents.start), + it->second.contents.Size()); } // Find the __debug_info section. - std::pair debug_info_section - = file_context.section_map["__debug_info"]; + dwarf2reader::SectionMap::const_iterator debug_info_entry = + file_context.section_map().find("__debug_info"); + assert(debug_info_entry != file_context.section_map().end()); + const std::pair& debug_info_section = + debug_info_entry->second; // There had better be a __debug_info section! if (!debug_info_section.first) { fprintf(stderr, "%s: __DWARF segment of file has no __debug_info section\n", @@ -317,7 +377,7 @@ bool DumpSymbols::ReadDwarf(google_breakpad::Module *module, // Make a Dwarf2Handler that drives our DIEHandler. dwarf2reader::DIEDispatcher die_dispatcher(&root_handler); // Make a DWARF parser for the compilation unit at OFFSET. - dwarf2reader::CompilationUnit dwarf_reader(file_context.section_map, + dwarf2reader::CompilationUnit dwarf_reader(file_context.section_map(), offset, &byte_reader, &die_dispatcher); @@ -334,7 +394,7 @@ bool DumpSymbols::ReadCFI(google_breakpad::Module *module, bool eh_frame) const { // Find the appropriate set of register names for this file's // architecture. - vector register_names; + vector register_names; switch (macho_reader.cpu_type()) { case CPU_TYPE_X86: register_names = DwarfCFIToModule::RegisterNames::I386(); @@ -345,6 +405,9 @@ bool DumpSymbols::ReadCFI(google_breakpad::Module *module, case CPU_TYPE_ARM: register_names = DwarfCFIToModule::RegisterNames::ARM(); break; + case CPU_TYPE_ARM64: + register_names = DwarfCFIToModule::RegisterNames::ARM64(); + break; default: { const NXArchInfo *arch = google_breakpad::BreakpadGetArchInfoFromCpuType( macho_reader.cpu_type(), macho_reader.cpu_subtype()); @@ -396,11 +459,13 @@ class DumpSymbols::LoadCommandDumper: LoadCommandDumper(const DumpSymbols &dumper, google_breakpad::Module *module, const mach_o::Reader &reader, - SymbolData symbol_data) + SymbolData symbol_data, + bool handle_inter_cu_refs) : dumper_(dumper), module_(module), reader_(reader), - symbol_data_(symbol_data) { } + symbol_data_(symbol_data), + handle_inter_cu_refs_(handle_inter_cu_refs) { } bool SegmentCommand(const mach_o::Segment &segment); bool SymtabCommand(const ByteBuffer &entries, const ByteBuffer &strings); @@ -410,6 +475,7 @@ class DumpSymbols::LoadCommandDumper: google_breakpad::Module *module_; // WEAK const mach_o::Reader &reader_; const SymbolData symbol_data_; + const bool handle_inter_cu_refs_; }; bool DumpSymbols::LoadCommandDumper::SegmentCommand(const Segment &segment) { @@ -417,21 +483,25 @@ bool DumpSymbols::LoadCommandDumper::SegmentCommand(const Segment &segment) { if (!reader_.MapSegmentSections(segment, §ion_map)) return false; - if (segment.name == "__TEXT" && symbol_data_ != NO_CFI) { + if (segment.name == "__TEXT") { module_->SetLoadAddress(segment.vmaddr); - mach_o::SectionMap::const_iterator eh_frame = - section_map.find("__eh_frame"); - if (eh_frame != section_map.end()) { - // If there is a problem reading this, don't treat it as a fatal error. - dumper_.ReadCFI(module_, reader_, eh_frame->second, true); + if (symbol_data_ != NO_CFI) { + mach_o::SectionMap::const_iterator eh_frame = + section_map.find("__eh_frame"); + if (eh_frame != section_map.end()) { + // If there is a problem reading this, don't treat it as a fatal error. + dumper_.ReadCFI(module_, reader_, eh_frame->second, true); + } } return true; } if (segment.name == "__DWARF") { if (symbol_data_ != ONLY_CFI) { - if (!dumper_.ReadDwarf(module_, reader_, section_map)) + if (!dumper_.ReadDwarf(module_, reader_, section_map, + handle_inter_cu_refs_)) { return false; + } } if (symbol_data_ != NO_CFI) { mach_o::SectionMap::const_iterator debug_frame @@ -532,7 +602,7 @@ bool DumpSymbols::ReadSymbolData(Module** out_module) { // Walk its load commands, and deal with whatever is there. LoadCommandDumper load_command_dumper(*this, module.get(), reader, - symbol_data_); + symbol_data_, handle_inter_cu_refs_); if (!reader.WalkLoadCommands(&load_command_dumper)) return false; diff --git a/toolkit/crashreporter/google-breakpad/src/common/mac/dump_syms.h b/toolkit/crashreporter/google-breakpad/src/common/mac/dump_syms.h index 035042d3ca74..b09928c95fbc 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/mac/dump_syms.h +++ b/toolkit/crashreporter/google-breakpad/src/common/mac/dump_syms.h @@ -45,6 +45,7 @@ #include "common/byte_cursor.h" #include "common/mac/macho_reader.h" +#include "common/mac/super_fat_arch.h" #include "common/module.h" #include "common/scoped_ptr.h" #include "common/symbol_data.h" @@ -53,11 +54,13 @@ namespace google_breakpad { class DumpSymbols { public: - explicit DumpSymbols(SymbolData symbol_data) + DumpSymbols(SymbolData symbol_data, bool handle_inter_cu_refs) : symbol_data_(symbol_data), + handle_inter_cu_refs_(handle_inter_cu_refs), input_pathname_(), object_filename_(), contents_(), + object_files_(), selected_object_file_(), selected_object_name_() { } ~DumpSymbols() { @@ -90,14 +93,14 @@ class DumpSymbols { // architecture matches that of this dumper program. bool SetArchitecture(const std::string &arch_name); - // Return a pointer to an array of 'struct fat_arch' structures, - // describing the object files contained in this dumper's file. Set - // *|count| to the number of elements in the array. The returned array is - // owned by this DumpSymbols instance. + // Return a pointer to an array of SuperFatArch structures describing the + // object files contained in this dumper's file. Set *|count| to the number + // of elements in the array. The returned array is owned by this DumpSymbols + // instance. // // If there are no available architectures, this function // may return NULL. - const struct fat_arch *AvailableArchitectures(size_t *count) { + const SuperFatArch* AvailableArchitectures(size_t *count) { *count = object_files_.size(); if (object_files_.size() > 0) return &object_files_[0]; @@ -119,6 +122,11 @@ class DumpSymbols { class DumperLineToModule; class LoadCommandDumper; + // This method behaves similarly to NXFindBestFatArch, but it supports + // SuperFatArch. + SuperFatArch* FindBestMatchForArchitecture( + cpu_type_t cpu_type, cpu_subtype_t cpu_subtype); + // Return an identifier string for the file this DumpSymbols is dumping. std::string Identifier(); @@ -127,7 +135,8 @@ class DumpSymbols { // on failure, report the problem and return false. bool ReadDwarf(google_breakpad::Module *module, const mach_o::Reader &macho_reader, - const mach_o::SectionMap &dwarf_sections) const; + const mach_o::SectionMap &dwarf_sections, + bool handle_inter_cu_refs) const; // Read DWARF CFI or .eh_frame data from |section|, belonging to // |macho_reader|, and record it in |module|. If |eh_frame| is true, @@ -142,6 +151,9 @@ class DumpSymbols { // The selection of what type of symbol data to read/write. const SymbolData symbol_data_; + // Whether to handle references between compilation units. + const bool handle_inter_cu_refs_; + // The name of the file or bundle whose symbols this will dump. // This is the path given to Read, for use in error messages. std::string input_pathname_; @@ -155,15 +167,15 @@ class DumpSymbols { // The complete contents of object_filename_, mapped into memory. scoped_array contents_; - // A vector of fat_arch structures describing the object files + // A vector of SuperFatArch structures describing the object files // object_filename_ contains. If object_filename_ refers to a fat binary, // this may have more than one element; if it refers to a Mach-O file, this // has exactly one element. - vector object_files_; + vector object_files_; // The object file in object_files_ selected to dump, or NULL if // SetArchitecture hasn't been called yet. - const struct fat_arch *selected_object_file_; + const SuperFatArch *selected_object_file_; // A string that identifies the selected object file, for use in error // messages. This is usually object_filename_, but if that refers to a diff --git a/toolkit/crashreporter/google-breakpad/src/common/mac/file_id.cc b/toolkit/crashreporter/google-breakpad/src/common/mac/file_id.cc index dc6c829b58cb..4661d5d625c5 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/mac/file_id.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/mac/file_id.cc @@ -34,6 +34,7 @@ // Author: Dan Waylonis #include +#include #include #include @@ -45,7 +46,7 @@ using MacFileUtilities::MachoID; namespace google_breakpad { FileID::FileID(const char *path) { - strncpy(path_, path, sizeof(path_) - 1); + snprintf(path_, sizeof(path_), "%s", path); } bool FileID::FileIdentifier(unsigned char identifier[16]) { @@ -61,7 +62,7 @@ bool FileID::FileIdentifier(unsigned char identifier[16]) { unsigned char buffer[4096 * 2]; size_t buffer_size = sizeof(buffer); while ((buffer_size = read(fd, buffer, buffer_size) > 0)) { - MD5Update(&md5, buffer, buffer_size); + MD5Update(&md5, buffer, static_cast(buffer_size)); } close(fd); diff --git a/toolkit/crashreporter/google-breakpad/src/common/mac/launch_reporter.cc b/toolkit/crashreporter/google-breakpad/src/common/mac/launch_reporter.cc new file mode 100644 index 000000000000..245be8265952 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/common/mac/launch_reporter.cc @@ -0,0 +1,84 @@ +// Copyright (c) 2014, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include +#include +#include + +namespace google_breakpad { + +void LaunchReporter(const char *reporter_executable_path, + const char *config_file_path) { + const char* argv[] = { reporter_executable_path, config_file_path, NULL }; + + // Launch the reporter + pid_t pid = fork(); + + if (pid == -1) { + perror("fork"); + fprintf(stderr, "Failed to fork reporter process\n"); + return; + } + + // If we're in the child, load in our new executable and run. + // The parent will not wait for the child to complete. + if (pid == 0) { + execv(argv[0], (char* const*)argv); + perror("exec"); + fprintf(stderr, + "Failed to launch reporter process from path %s\n", + reporter_executable_path); + unlink(config_file_path); // launch failed - get rid of config file + _exit(1); + } + + // Wait until the Reporter child process exits. + // + + // We'll use a timeout of one minute. + int timeout_count = 60; // 60 seconds + + while (timeout_count-- > 0) { + int status; + pid_t result = waitpid(pid, &status, WNOHANG); + + if (result == 0) { + // The child has not yet finished. + sleep(1); + } else if (result == -1) { + // error occurred. + break; + } else { + // child has finished + break; + } + } +} + +} // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/common/mac/launch_reporter.h b/toolkit/crashreporter/google-breakpad/src/common/mac/launch_reporter.h new file mode 100644 index 000000000000..4531123c2df8 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/common/mac/launch_reporter.h @@ -0,0 +1,43 @@ +// Copyright (c) 2014, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifndef COMMON_MAC_LAUNCH_REPORTER_H__ +#define COMMON_MAC_LAUNCH_REPORTER_H__ + +namespace google_breakpad { + +// Launch the crash dump sender app. +// |reporter_executable_path| is the path to the sender executable. +// |config_file_path| is the path to the config file. +void LaunchReporter(const char *reporter_executable_path, + const char *config_file_path); + +} // namespace google_breakpad + +#endif // COMMON_MAC_LAUNCH_REPORTER_H__ diff --git a/toolkit/crashreporter/google-breakpad/src/common/mac/macho_id.cc b/toolkit/crashreporter/google-breakpad/src/common/mac/macho_id.cc index 3427fe586c2c..c396ad888d80 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/mac/macho_id.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/mac/macho_id.cc @@ -33,16 +33,15 @@ // // Author: Dan Waylonis -extern "C" { // necessary for Leopard - #include - #include - #include - #include - #include - #include - #include - #include -} + +#include +#include +#include +#include +#include +#include +#include +#include #include "common/mac/macho_id.h" #include "common/mac/macho_walker.h" @@ -60,7 +59,7 @@ MachoID::MachoID(const char *path) crc_(0), md5_context_(), update_function_(NULL) { - strncpy(path_, path, sizeof(path_) - 1); + snprintf(path_, sizeof(path_), "%s", path); } MachoID::MachoID(const char *path, void *memory, size_t size) @@ -69,7 +68,7 @@ MachoID::MachoID(const char *path, void *memory, size_t size) crc_(0), md5_context_(), update_function_(NULL) { - strncpy(path_, path, sizeof(path_) - 1); + snprintf(path_, sizeof(path_), "%s", path); } MachoID::~MachoID() { @@ -124,7 +123,7 @@ void MachoID::UpdateCRC(unsigned char *bytes, size_t size) { } void MachoID::UpdateMD5(unsigned char *bytes, size_t size) { - MD5Update(&md5_context_, bytes, size); + MD5Update(&md5_context_, bytes, static_cast(size)); } void MachoID::Update(MachoWalker *walker, off_t offset, size_t size) { diff --git a/toolkit/crashreporter/google-breakpad/src/common/mac/macho_reader.cc b/toolkit/crashreporter/google-breakpad/src/common/mac/macho_reader.cc index f1f0a179d6ab..6d7207ce4bf3 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/mac/macho_reader.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/mac/macho_reader.cc @@ -43,6 +43,10 @@ #define CPU_TYPE_ARM 12 #endif +#if !defined(CPU_TYPE_ARM_64) +#define CPU_TYPE_ARM_64 16777228 +#endif + namespace google_breakpad { namespace mach_o { @@ -97,22 +101,26 @@ bool FatReader::Read(const uint8_t *buffer, size_t size) { // Read the list of object files. object_files_.resize(object_files_count); for (size_t i = 0; i < object_files_count; i++) { - struct fat_arch *objfile = &object_files_[i]; + struct fat_arch objfile; // Read this object file entry, byte-swapping as appropriate. - cursor >> objfile->cputype - >> objfile->cpusubtype - >> objfile->offset - >> objfile->size - >> objfile->align; + cursor >> objfile.cputype + >> objfile.cpusubtype + >> objfile.offset + >> objfile.size + >> objfile.align; + + SuperFatArch super_fat_arch(objfile); + object_files_[i] = super_fat_arch; + if (!cursor) { reporter_->TooShort(); return false; } // Does the file actually have the bytes this entry refers to? size_t fat_size = buffer_.Size(); - if (objfile->offset > fat_size || - objfile->size > fat_size - objfile->offset) { + if (objfile.offset > fat_size || + objfile.size > fat_size - objfile.offset) { reporter_->MisplacedObjectFile(); return false; } @@ -135,16 +143,14 @@ bool FatReader::Read(const uint8_t *buffer, size_t size) { } object_files_[0].offset = 0; - object_files_[0].size = static_cast(buffer_.Size()); + object_files_[0].size = static_cast(buffer_.Size()); // This alignment is correct for 32 and 64-bit x86 and ppc. // See get_align in the lipo source for other architectures: // http://www.opensource.apple.com/source/cctools/cctools-773/misc/lipo.c object_files_[0].align = 12; // 2^12 == 4096 - return true; } } - reporter_->BadHeader(); return false; } @@ -242,6 +248,7 @@ bool Reader::Read(const uint8_t *buffer, case CPU_TYPE_POWERPC: expected_magic = MH_MAGIC; break; + case CPU_TYPE_ARM_64: case CPU_TYPE_X86_64: expected_magic = MH_CIGAM_64; break; @@ -310,7 +317,7 @@ bool Reader::WalkLoadCommands(Reader::LoadCommandHandler *handler) const { // remainder of the load command series. ByteBuffer command(list_cursor.here(), list_cursor.Available()); ByteCursor cursor(&command, big_endian_); - + // Read the command type and size --- fields common to all commands. uint32_t type, size; if (!(cursor >> type)) { @@ -395,7 +402,7 @@ bool Reader::WalkLoadCommands(Reader::LoadCommandHandler *handler) const { return false; break; } - + default: { if (!handler->UnknownCommand(type, command)) return false; @@ -414,7 +421,7 @@ class Reader::SegmentFinder : public LoadCommandHandler { public: // Create a load command handler that looks for a segment named NAME, // and sets SEGMENT to describe it if found. - SegmentFinder(const string &name, Segment *segment) + SegmentFinder(const string &name, Segment *segment) : name_(name), segment_(segment), found_() { } // Return true if the traversal found the segment, false otherwise. @@ -474,10 +481,12 @@ bool Reader::WalkSegmentSections(const Segment &segment, reporter_->SectionsMissing(segment.name); return false; } - if ((section.flags & SECTION_TYPE) == S_ZEROFILL) { + const uint32_t section_type = section.flags & SECTION_TYPE; + if (section_type == S_ZEROFILL || section_type == S_THREAD_LOCAL_ZEROFILL || + section_type == S_GB_ZEROFILL) { // Zero-fill sections have a size, but no contents. section.contents.start = section.contents.end = NULL; - } else if (segment.contents.start == NULL && + } else if (segment.contents.start == NULL && segment.contents.end == NULL) { // Mach-O files in .dSYM bundles have the contents of the loaded // segments removed, and their file offsets and file sizes zeroed diff --git a/toolkit/crashreporter/google-breakpad/src/common/mac/macho_reader.h b/toolkit/crashreporter/google-breakpad/src/common/mac/macho_reader.h index 753764822e5d..30db742db5f1 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/mac/macho_reader.h +++ b/toolkit/crashreporter/google-breakpad/src/common/mac/macho_reader.h @@ -47,6 +47,7 @@ #include #include "common/byte_cursor.h" +#include "common/mac/super_fat_arch.h" namespace google_breakpad { namespace mach_o { @@ -93,7 +94,7 @@ class FatReader { // complete header, or the header implies that contents are present // beyond the actual end of the file. virtual void TooShort(); - + private: // The filename to which the reader should attribute problems. string filename_; @@ -101,7 +102,7 @@ class FatReader { // Create a fat binary file reader that uses |reporter| to report problems. explicit FatReader(Reporter *reporter) : reporter_(reporter) { } - + // Read the |size| bytes at |buffer| as a fat binary file. On success, // return true; on failure, report the problem to reporter_ and return // false. @@ -111,13 +112,13 @@ class FatReader { // single object file is the Mach-O file. bool Read(const uint8_t *buffer, size_t size); - // Return an array of 'struct fat_arch' structures describing the + // Return an array of 'SuperFatArch' structures describing the // object files present in this fat binary file. Set |size| to the // number of elements in the array. // - // Assuming Read returned true, the entries are validated: it is - // safe to assume that the offsets and sizes in each 'struct - // fat_arch' refer to subranges of the bytes passed to Read. + // Assuming Read returned true, the entries are validated: it is safe to + // assume that the offsets and sizes in each SuperFatArch refer to subranges + // of the bytes passed to Read. // // If there are no object files in this fat binary, then this // function can return NULL. @@ -129,7 +130,7 @@ class FatReader { // possible to use the result with OS X functions like NXFindBestFatArch, // so that the symbol dumper will behave consistently with other OS X // utilities that work with fat binaries. - const struct fat_arch *object_files(size_t *count) const { + const SuperFatArch* object_files(size_t *count) const { *count = object_files_.size(); if (object_files_.size() > 0) return &object_files_[0]; @@ -149,7 +150,7 @@ class FatReader { // The list of object files in this binary. // object_files_.size() == fat_header.nfat_arch - vector object_files_; + vector object_files_; }; // A segment in a Mach-O file. All these fields have been byte-swapped as @@ -177,7 +178,7 @@ struct Segment { // The maximum and initial VM protection of this segment's contents. uint32_t maxprot; uint32_t initprot; - + // The number of sections in section_list. uint32_t nsects; @@ -376,7 +377,7 @@ class Reader { return Read(buffer.start, buffer.Size(), expected_cpu_type, - expected_cpu_subtype); + expected_cpu_subtype); } // Return this file's characteristics, as found in the Mach-O header. diff --git a/toolkit/crashreporter/google-breakpad/src/common/mac/macho_reader_unittest.cc b/toolkit/crashreporter/google-breakpad/src/common/mac/macho_reader_unittest.cc index 9bc6d25a5c4d..8ceab14bf2ef 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/mac/macho_reader_unittest.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/mac/macho_reader_unittest.cc @@ -196,7 +196,7 @@ struct FatReaderFixture { FatReaderFixture() : fat(kBigEndian), reporter("reporter filename"), - reader(&reporter), object_files(), object_files_size() { + reader(&reporter), object_files() { EXPECT_CALL(reporter, BadHeader()).Times(0); EXPECT_CALL(reporter, TooShort()).Times(0); @@ -224,7 +224,12 @@ struct FatReaderFixture { fat_bytes = reinterpret_cast(contents.data()); if (expect_parse_success) { EXPECT_TRUE(reader.Read(fat_bytes, contents.size())); - object_files = reader.object_files(&object_files_size); + size_t fat_files_count; + const SuperFatArch* fat_files = reader.object_files(&fat_files_count); + object_files.resize(fat_files_count); + for (size_t i = 0; i < fat_files_count; ++i) { + EXPECT_TRUE(fat_files[i].ConvertToFatArch(&object_files[i])); + } } else EXPECT_FALSE(reader.Read(fat_bytes, contents.size())); @@ -234,8 +239,7 @@ struct FatReaderFixture { FatReader reader; string contents; const uint8_t *fat_bytes; - const struct fat_arch *object_files; - size_t object_files_size; + vector object_files; }; class FatReaderTest: public FatReaderFixture, public Test { }; @@ -289,7 +293,7 @@ TEST_F(FatReaderTest, NoObjectFiles) { .B32(0xcafebabe) // magic number .B32(0); // number of architectures ReadFat(); - EXPECT_EQ(0U, object_files_size); + EXPECT_EQ(0U, object_files.size()); } TEST_F(FatReaderTest, OneObjectFile) { @@ -304,7 +308,7 @@ TEST_F(FatReaderTest, OneObjectFile) { .Mark(&obj1_offset) .Append(0x42, '*'); // dummy contents ReadFat(); - ASSERT_EQ(1U, object_files_size); + ASSERT_EQ(1U, object_files.size()); EXPECT_EQ(0x5e3a6e91, object_files[0].cputype); EXPECT_EQ(0x52ccd852, object_files[0].cpusubtype); EXPECT_EQ(obj1_offset.Value(), object_files[0].offset); @@ -334,7 +338,7 @@ TEST_F(FatReaderTest, ThreeObjectFiles) { ReadFat(); - ASSERT_EQ(3U, object_files_size); + ASSERT_EQ(3U, object_files.size()); // First object file. EXPECT_EQ(0x0cb92c30, object_files[0].cputype); @@ -373,7 +377,7 @@ TEST_F(FatReaderTest, BigEndianMachO32) { // FatReader should treat a Mach-O file as if it were a fat binary file // containing one object file --- the whole thing. - ASSERT_EQ(1U, object_files_size); + ASSERT_EQ(1U, object_files.size()); EXPECT_EQ(0x1a9d0518, object_files[0].cputype); EXPECT_EQ(0x1b779357, object_files[0].cpusubtype); EXPECT_EQ(0U, object_files[0].offset); @@ -395,7 +399,7 @@ TEST_F(FatReaderTest, BigEndianMachO64) { // FatReader should treat a Mach-O file as if it were a fat binary file // containing one object file --- the whole thing. - ASSERT_EQ(1U, object_files_size); + ASSERT_EQ(1U, object_files.size()); EXPECT_EQ(0x5aff8487, object_files[0].cputype); EXPECT_EQ(0x4c6a57f7, object_files[0].cpusubtype); EXPECT_EQ(0U, object_files[0].offset); @@ -417,7 +421,7 @@ TEST_F(FatReaderTest, LittleEndianMachO32) { // FatReader should treat a Mach-O file as if it were a fat binary file // containing one object file --- the whole thing. - ASSERT_EQ(1U, object_files_size); + ASSERT_EQ(1U, object_files.size()); EXPECT_EQ(0x1a9d0518, object_files[0].cputype); EXPECT_EQ(0x1b779357, object_files[0].cpusubtype); EXPECT_EQ(0U, object_files[0].offset); @@ -439,7 +443,7 @@ TEST_F(FatReaderTest, LittleEndianMachO64) { // FatReader should treat a Mach-O file as if it were a fat binary file // containing one object file --- the whole thing. - ASSERT_EQ(1U, object_files_size); + ASSERT_EQ(1U, object_files.size()); EXPECT_EQ(0x5aff8487, object_files[0].cputype); EXPECT_EQ(0x4c6a57f7, object_files[0].cpusubtype); EXPECT_EQ(0U, object_files[0].offset); diff --git a/toolkit/crashreporter/google-breakpad/src/common/mac/macho_walker.cc b/toolkit/crashreporter/google-breakpad/src/common/mac/macho_walker.cc index 8111719596d4..1acd86656b6c 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/mac/macho_walker.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/mac/macho_walker.cc @@ -33,15 +33,13 @@ // // Author: Dan Waylonis -extern "C" { // necessary for Leopard - #include - #include - #include - #include - #include - #include - #include -} +#include +#include +#include +#include +#include +#include +#include #include "common/mac/byteswap.h" #include "common/mac/macho_walker.h" @@ -51,7 +49,7 @@ namespace MacFileUtilities { MachoWalker::MachoWalker(const char *path, LoadCommandCallback callback, void *context) - : file_(0), + : file_(-1), memory_(NULL), memory_size_(0), callback_(callback), @@ -64,7 +62,7 @@ MachoWalker::MachoWalker(const char *path, LoadCommandCallback callback, MachoWalker::MachoWalker(void *memory, size_t size, LoadCommandCallback callback, void *context) - : file_(0), + : file_(-1), memory_(memory), memory_size_(size), callback_(callback), diff --git a/toolkit/crashreporter/google-breakpad/src/common/mac/moz.build b/toolkit/crashreporter/google-breakpad/src/common/mac/moz.build index db5bd6fd1b36..5b6485d1fc03 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/mac/moz.build +++ b/toolkit/crashreporter/google-breakpad/src/common/mac/moz.build @@ -46,8 +46,6 @@ ALLOW_COMPILER_WARNINGS = True FINAL_LIBRARY = 'xul' -LOCAL_INCLUDES += [ - '../..', -] - CMFLAGS += ['-std=c99'] + +include('/toolkit/crashreporter/crashreporter.mozbuild') diff --git a/toolkit/crashreporter/google-breakpad/src/common/mac/super_fat_arch.h b/toolkit/crashreporter/google-breakpad/src/common/mac/super_fat_arch.h new file mode 100644 index 000000000000..501c8652a1c1 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/common/mac/super_fat_arch.h @@ -0,0 +1,88 @@ +// Copyright (c) 2015, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Original author: Erik Chen + +// super_fat_arch.h: A class to handle 64-bit object files. Has conversions to +// and from struct fat_arch. + +#ifndef BREAKPAD_COMMON_MAC_SUPER_FAT_ARCH_H_ +#define BREAKPAD_COMMON_MAC_SUPER_FAT_ARCH_H_ + +#include +#include +#include + +// Similar to struct fat_arch, except size-related parameters support +// 64-bits. +class SuperFatArch { + public: + uint32_t cputype; + uint32_t cpusubtype; + uint64_t offset; + uint64_t size; + uint64_t align; + + SuperFatArch() : + cputype(0), + cpusubtype(0), + offset(0), + size(0), + align(0) { + } + + explicit SuperFatArch(const struct fat_arch &arch) : + cputype(arch.cputype), + cpusubtype(arch.cpusubtype), + offset(arch.offset), + size(arch.size), + align(arch.align) { + } + + // Returns false if the conversion cannot be made. + // If the conversion succeeds, the result is placed in |output_arch|. + bool ConvertToFatArch(struct fat_arch* output_arch) const { + if (offset > std::numeric_limits::max()) + return false; + if (size > std::numeric_limits::max()) + return false; + if (align > std::numeric_limits::max()) + return false; + struct fat_arch arch; + arch.cputype = cputype; + arch.cpusubtype = cpusubtype; + arch.offset = offset; + arch.size = size; + arch.align = align; + *output_arch = arch; + return true; + } +}; + +#endif // BREAKPAD_COMMON_MAC_SUPER_FAT_ARCH_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/common/md5.cc b/toolkit/crashreporter/google-breakpad/src/common/md5.cc index 3debebb16424..a0d9a1bdd891 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/md5.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/md5.cc @@ -58,7 +58,7 @@ void MD5Init(struct MD5Context *ctx) * Update context to reflect the concatenation of another buffer full * of bytes. */ -void MD5Update(struct MD5Context *ctx, unsigned char const *buf, unsigned len) +void MD5Update(struct MD5Context *ctx, unsigned char const *buf, size_t len) { u32 t; diff --git a/toolkit/crashreporter/google-breakpad/src/common/md5.h b/toolkit/crashreporter/google-breakpad/src/common/md5.h index e96521eedd04..2ab0ab95aebd 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/md5.h +++ b/toolkit/crashreporter/google-breakpad/src/common/md5.h @@ -18,7 +18,7 @@ struct MD5Context { void MD5Init(struct MD5Context *ctx); -void MD5Update(struct MD5Context *ctx, unsigned char const *buf, unsigned len); +void MD5Update(struct MD5Context *ctx, unsigned char const *buf, size_t len); void MD5Final(unsigned char digest[16], struct MD5Context *ctx); diff --git a/toolkit/crashreporter/google-breakpad/src/common/memory.h b/toolkit/crashreporter/google-breakpad/src/common/memory.h index e90bd52c21bc..d6aa137d35c0 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/memory.h +++ b/toolkit/crashreporter/google-breakpad/src/common/memory.h @@ -35,6 +35,13 @@ #include #include +#include +#include + +#if defined(MEMORY_SANITIZER) +#include +#endif + #ifdef __APPLE__ #define sys_mmap mmap #define sys_mmap2 mmap @@ -64,7 +71,7 @@ class PageAllocator { FreeAll(); } - void *Alloc(unsigned bytes) { + void *Alloc(size_t bytes) { if (!bytes) return NULL; @@ -79,21 +86,36 @@ class PageAllocator { return ret; } - const unsigned pages = + const size_t pages = (bytes + sizeof(PageHeader) + page_size_ - 1) / page_size_; uint8_t *const ret = GetNPages(pages); if (!ret) return NULL; - page_offset_ = (page_size_ - (page_size_ * pages - (bytes + sizeof(PageHeader)))) % page_size_; + page_offset_ = + (page_size_ - (page_size_ * pages - (bytes + sizeof(PageHeader)))) % + page_size_; current_page_ = page_offset_ ? ret + page_size_ * (pages - 1) : NULL; return ret + sizeof(PageHeader); } + // Checks whether the page allocator owns the passed-in pointer. + // This method exists for testing pursposes only. + bool OwnsPointer(const void* p) { + for (PageHeader* header = last_; header; header = header->next) { + const char* current = reinterpret_cast(header); + if ((p >= current) && (p < current + header->num_pages * page_size_)) + return true; + } + + return false; + } + private: - uint8_t *GetNPages(unsigned num_pages) { -#ifdef __x86_64 + uint8_t *GetNPages(size_t num_pages) { +#if defined(__x86_64__) || defined(__aarch64__) || defined(__aarch64__) || \ + ((defined(__mips__) && _MIPS_SIM == _ABI64)) void *a = sys_mmap(NULL, page_size_ * num_pages, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); #else @@ -103,6 +125,12 @@ class PageAllocator { if (a == MAP_FAILED) return NULL; +#if defined(MEMORY_SANITIZER) + // We need to indicate to MSan that memory allocated through sys_mmap is + // initialized, since linux_syscall_support.h doesn't have MSan hooks. + __msan_unpoison(a, page_size_ * num_pages); +#endif + struct PageHeader *header = reinterpret_cast(a); header->next = last_; header->num_pages = num_pages; @@ -122,97 +150,63 @@ class PageAllocator { struct PageHeader { PageHeader *next; // pointer to the start of the next set of pages. - unsigned num_pages; // the number of pages in this set. + size_t num_pages; // the number of pages in this set. }; - const unsigned page_size_; + const size_t page_size_; PageHeader *last_; uint8_t *current_page_; - unsigned page_offset_; + size_t page_offset_; }; -// A wasteful vector is like a normal std::vector, except that it's very much -// simplier and it allocates memory from a PageAllocator. It's wasteful -// because, when resizing, it always allocates a whole new array since the -// PageAllocator doesn't support realloc. -template -class wasteful_vector { - public: - wasteful_vector(PageAllocator *allocator, unsigned size_hint = 16) - : allocator_(allocator), - a_((T*) allocator->Alloc(sizeof(T) * size_hint)), - allocated_(size_hint), - used_(0) { +// Wrapper to use with STL containers +template +struct PageStdAllocator : public std::allocator { + typedef typename std::allocator::pointer pointer; + typedef typename std::allocator::size_type size_type; + + explicit PageStdAllocator(PageAllocator& allocator): allocator_(allocator) {} + template PageStdAllocator(const PageStdAllocator& other) + : allocator_(other.allocator_) {} + + inline pointer allocate(size_type n, const void* = 0) { + return static_cast(allocator_.Alloc(sizeof(T) * n)); } - T& back() { - return a_[used_ - 1]; + inline void deallocate(pointer, size_type) { + // The PageAllocator doesn't free. } - const T& back() const { - return a_[used_ - 1]; - } - - bool empty() const { - return used_ == 0; - } - - void push_back(const T& new_element) { - if (used_ == allocated_) - Realloc(allocated_ * 2); - a_[used_++] = new_element; - } - - size_t size() const { - return used_; - } - - void resize(unsigned sz, T c = T()) { - // No need to test "sz >= 0", as "sz" is unsigned. - if (sz <= used_) { - used_ = sz; - } else { - unsigned a = allocated_; - if (sz > a) { - while (sz > a) { - a *= 2; - } - Realloc(a); - } - while (sz > used_) { - a_[used_++] = c; - } - } - } - - T& operator[](size_t index) { - return a_[index]; - } - - const T& operator[](size_t index) const { - return a_[index]; - } + template struct rebind { + typedef PageStdAllocator other; + }; private: - void Realloc(unsigned new_size) { - T *new_array = - reinterpret_cast(allocator_->Alloc(sizeof(T) * new_size)); - memcpy(new_array, a_, used_ * sizeof(T)); - a_ = new_array; - allocated_ = new_size; - } + // Silly workaround for the gcc from Android's ndk (gcc 4.6), which will + // otherwise complain that `other.allocator_` is private in the constructor + // code. + template friend struct PageStdAllocator; - PageAllocator *const allocator_; - T *a_; // pointer to an array of |allocated_| elements. - unsigned allocated_; // size of |a_|, in elements. - unsigned used_; // number of used slots in |a_|. + PageAllocator& allocator_; +}; + +// A wasteful vector is a std::vector, except that it allocates memory from a +// PageAllocator. It's wasteful because, when resizing, it always allocates a +// whole new array since the PageAllocator doesn't support realloc. +template +class wasteful_vector : public std::vector > { + public: + wasteful_vector(PageAllocator* allocator, unsigned size_hint = 16) + : std::vector >(PageStdAllocator(*allocator)) { + std::vector >::reserve(size_hint); + } }; } // namespace google_breakpad inline void* operator new(size_t nbytes, google_breakpad::PageAllocator& allocator) { - return allocator.Alloc(nbytes); + return allocator.Alloc(nbytes); } #endif // GOOGLE_BREAKPAD_COMMON_MEMORY_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/common/memory_unittest.cc b/toolkit/crashreporter/google-breakpad/src/common/memory_unittest.cc index 69d9f8ab2558..1e511ca56ea7 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/memory_unittest.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/memory_unittest.cc @@ -87,3 +87,11 @@ TEST(WastefulVectorTest, Simple) { for (unsigned i = 0; i < 256; ++i) ASSERT_EQ(v[i], i); } + +TEST(WastefulVectorTest, UsesPageAllocator) { + PageAllocator allocator_; + wasteful_vector v(&allocator_); + + v.push_back(1); + ASSERT_TRUE(allocator_.OwnsPointer(&v[0])); +} diff --git a/toolkit/crashreporter/google-breakpad/src/common/minidump_type_helper.h b/toolkit/crashreporter/google-breakpad/src/common/minidump_type_helper.h new file mode 100644 index 000000000000..5a7d5a6a8701 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/common/minidump_type_helper.h @@ -0,0 +1,56 @@ +// Copyright (c) 2014, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifndef GOOGLE_BREAKPAD_COMMON_MINIDUMP_TYPE_HELPER_H_ +#define GOOGLE_BREAKPAD_COMMON_MINIDUMP_TYPE_HELPER_H_ + +#include + +#include "google_breakpad/common/minidump_format.h" + +namespace google_breakpad { + +template +struct MDTypeHelper; + +template <> +struct MDTypeHelper { + typedef MDRawDebug32 MDRawDebug; + typedef MDRawLinkMap32 MDRawLinkMap; +}; + +template <> +struct MDTypeHelper { + typedef MDRawDebug64 MDRawDebug; + typedef MDRawLinkMap64 MDRawLinkMap; +}; + +} // namespace google_breakpad + +#endif // GOOGLE_BREAKPAD_COMMON_MINIDUMP_TYPE_HELPER_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/common/module.cc b/toolkit/crashreporter/google-breakpad/src/common/module.cc index f9eccd74bced..ca52f9fc80c8 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/module.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/module.cc @@ -38,7 +38,6 @@ #include #include -#include #include #include @@ -80,8 +79,34 @@ void Module::AddFunction(Function *function) { // FUNC lines must not hold an empty name, so catch the problem early if // callers try to add one. assert(!function->name.empty()); + + // FUNCs are better than PUBLICs as they come with sizes, so remove an extern + // with the same address if present. + Extern ext(function->address); + ExternSet::iterator it_ext = externs_.find(&ext); + if (it_ext == externs_.end() && + architecture_ == "arm" && + (function->address & 0x1) == 0) { + // ARM THUMB functions have bit 0 set. ARM64 does not have THUMB. + Extern arm_thumb_ext(function->address | 0x1); + it_ext = externs_.find(&arm_thumb_ext); + } + if (it_ext != externs_.end()) { + delete *it_ext; + externs_.erase(it_ext); + } +#if _DEBUG + { + // There should be no other PUBLIC symbols that overlap with the function. + Extern debug_ext(function->address); + ExternSet::iterator it_debug = externs_.lower_bound(&ext); + assert(it_debug == externs_.end() || + (*it_debug)->address >= function->address + function->size); + } +#endif + std::pair ret = functions_.insert(function); - if (!ret.second) { + if (!ret.second && (*ret.first != function)) { // Free the duplicate that was not inserted because this Module // now owns it. delete function; @@ -105,21 +130,10 @@ void Module::AddStackFrameEntry(StackFrameEntry* stack_frame_entry) { } void Module::AddExtern(Extern *ext) { - Function func; - func.name = ext->name; - func.address = ext->address; - - // Since parsing debug section and public info are not necessarily - // mutually exclusive, check if the symbol has already been read - // as a function to avoid duplicates. - if (functions_.find(&func) == functions_.end()) { - std::pair ret = externs_.insert(ext); - if (!ret.second) { - // Free the duplicate that was not inserted because this Module - // now owns it. - delete ext; - } - } else { + std::pair ret = externs_.insert(ext); + if (!ret.second) { + // Free the duplicate that was not inserted because this Module + // now owns it. delete ext; } } @@ -129,50 +143,11 @@ void Module::GetFunctions(vector *vec, vec->insert(i, functions_.begin(), functions_.end()); } -template -bool EntryContainsAddress(T entry, Module::Address address) { - return entry->address <= address && address < entry->address + entry->size; -} - -Module::Function* Module::FindFunctionByAddress(Address address) { - Function search; - search.address = address; - // Ensure that name always sorts higher than the function name, - // so that upper_bound always returns the function just after - // the function containing this address. - search.name = "\xFF"; - FunctionSet::iterator it = functions_.upper_bound(&search); - if (it == functions_.begin()) - return NULL; - - it--; - - if (EntryContainsAddress(*it, address)) - return *it; - - return NULL; -} - void Module::GetExterns(vector *vec, vector::iterator i) { vec->insert(i, externs_.begin(), externs_.end()); } -Module::Extern* Module::FindExternByAddress(Address address) { - Extern search; - search.address = address; - ExternSet::iterator it = externs_.upper_bound(&search); - - if (it == externs_.begin()) - return NULL; - - it--; - if ((*it)->address > address) - return NULL; - - return *it; -} - Module::File *Module::FindFile(const string &name) { // A tricky bit here. The key of each map entry needs to be a // pointer to the entry's File's name string. This means that we @@ -187,8 +162,7 @@ Module::File *Module::FindFile(const string &name) { FileByNameMap::iterator destiny = files_.lower_bound(&name); if (destiny == files_.end() || *destiny->first != name) { // Repeated string comparison, boo hoo. - File *file = new File; - file->name = name; + File *file = new File(name); file->source_id = -1; destiny = files_.insert(destiny, FileByNameMap::value_type(&file->name, file)); @@ -212,7 +186,7 @@ void Module::GetFiles(vector *vec) { vec->push_back(it->second); } -void Module::GetStackFrameEntries(vector* vec) { +void Module::GetStackFrameEntries(vector* vec) const { vec->clear(); vec->insert(vec->begin(), stack_frame_entries_.begin(), stack_frame_entries_.end()); @@ -227,7 +201,7 @@ Module::StackFrameEntry* Module::FindStackFrameEntryByAddress(Address address) { return NULL; it--; - if (EntryContainsAddress(*it, address)) + if ((*it)->address <= address && address < (*it)->address + (*it)->size) return *it; return NULL; @@ -268,44 +242,12 @@ bool Module::ReportError() { return false; } -std::ostream& operator<<(std::ostream& stream, const Module::Expr& expr) { - assert(!expr.isExprInvalid()); - switch (expr.how_) { - case Module::kExprSimple: - stream << FromUniqueString(expr.ident_) << " " << expr.offset_ << " +"; - break; - case Module::kExprSimpleMem: - stream << FromUniqueString(expr.ident_) << " " << expr.offset_ << " + ^"; - break; - case Module::kExprPostfix: - stream << expr.postfix_; break; - case Module::kExprInvalid: - default: - break; - } - return stream; -} - bool Module::WriteRuleMap(const RuleMap &rule_map, std::ostream &stream) { - // Visit the register rules in alphabetical order. Because - // rule_map has the elements in some arbitrary order, - // get the names out into a vector, sort them, and visit in - // sorted order. - std::vector rr_names; for (RuleMap::const_iterator it = rule_map.begin(); it != rule_map.end(); ++it) { - rr_names.push_back(it->first); - } - - std::sort(rr_names.begin(), rr_names.end(), LessThan_UniqueString); - - // Now visit the register rules in alphabetical order. - for (std::vector::const_iterator name = rr_names.begin(); - name != rr_names.end(); - ++name) { - if (name != rr_names.begin()) - stream << " "; - stream << FromUniqueString(*name) << ": " << rule_map.find(*name)->second; + if (it != rule_map.begin()) + stream << ' '; + stream << it->first << ": " << it->second; } return stream.good(); } diff --git a/toolkit/crashreporter/google-breakpad/src/common/module.h b/toolkit/crashreporter/google-breakpad/src/common/module.h index 7f90388903bd..299bc3857e02 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/module.h +++ b/toolkit/crashreporter/google-breakpad/src/common/module.h @@ -44,13 +44,8 @@ #include #include -#include -#include -#include - #include "common/symbol_data.h" #include "common/using_std_string.h" -#include "common/unique_string.h" #include "google_breakpad/common/breakpad_types.h" namespace google_breakpad { @@ -79,8 +74,10 @@ class Module { // A source file. struct File { + explicit File(const string &name_input) : name(name_input), source_id(0) {} + // The name of the source file. - string name; + const string name; // The file's source id. The Write member function clears this // field and assigns source ids a fresh, so any value placed here @@ -90,6 +87,9 @@ class Module { // A function. struct Function { + Function(const string &name_input, const Address &address_input) : + name(name_input), address(address_input), size(0), parameter_size(0) {} + // For sorting by address. (Not style-guide compliant, but it's // stupid not to put this in the struct.) static bool CompareByAddress(const Function *x, const Function *y) { @@ -97,10 +97,11 @@ class Module { } // The function's name. - string name; + const string name; // The start address and length of the function's code. - Address address, size; + const Address address; + Address size; // The function's parameter size. Address parameter_size; @@ -125,150 +126,16 @@ class Module { // An exported symbol. struct Extern { - Address address; + explicit Extern(const Address &address_input) : address(address_input) {} + const Address address; string name; }; - // Representation of an expression. This can either be a postfix - // expression, in which case it is stored as a string, or a simple - // expression of the form (identifier + imm) or *(identifier + imm). - // It can also be invalid (denoting "no value"). - enum ExprHow { - kExprInvalid = 1, - kExprPostfix, - kExprSimple, - kExprSimpleMem - }; - struct Expr { - // Construct a simple-form expression - Expr(const UniqueString* ident, long offset, bool deref) { - if (ident == ustr__empty()) { - Expr(); - } else { - postfix_ = ""; - ident_ = ident; - offset_ = offset; - how_ = deref ? kExprSimpleMem : kExprSimple; - } - } - // Construct an expression from a postfix string - Expr(string postfix) { - if (postfix.empty()) { - Expr(); - } else { - postfix_ = postfix; - ident_ = NULL; - offset_ = 0; - how_ = kExprPostfix; - } - } - // Construct an invalid expression - Expr() { - postfix_ = ""; - ident_ = NULL; - offset_ = 0; - how_ = kExprInvalid; - } - bool isExprInvalid() const { return how_ == kExprInvalid; } - - // Return the postfix expression string, either directly, - // if this is a postfix expression, or by synthesising it - // for a simple expression. - string getExprPostfix() const { - switch (how_) { - case kExprPostfix: - return postfix_; - case kExprSimple: - case kExprSimpleMem: { - char buf[40]; - sprintf(buf, " %ld %c%s", labs(offset_), offset_ < 0 ? '-' : '+', - how_ == kExprSimple ? "" : " ^"); - return string(FromUniqueString(ident_)) + string(buf); - } - case kExprInvalid: - default: - assert(0 && "getExprPostfix: invalid Module::Expr type"); - return "Expr::genExprPostfix: kExprInvalid"; - } - } - - bool operator==(const Expr& other) const { - return how_ == other.how_ && - ident_ == other.ident_ && - offset_ == other.offset_ && - postfix_ == other.postfix_; - } - - // Returns an Expr which evaluates to |this| + |delta| - Expr add_delta(long delta) { - if (delta == 0) { - return *this; - } - // If it's a simple form expression of the form "identifier + offset", - // simply add |delta| on to |offset|. In the other two possible - // cases: - // *(identifier + offset) - // completely arbitrary postfix expression string - // the only option is to "downgrade" it to a postfix expression and add - // "+/- delta" at the end of the string, since the result can't be - // represented in the simple form. - switch (how_) { - case kExprSimpleMem: - case kExprPostfix: { - char buf[40]; - sprintf(buf, " %ld %c", labs(delta), delta < 0 ? '-' : '+'); - return Expr(getExprPostfix() + string(buf)); - } - case kExprSimple: - return Expr(ident_, offset_ + delta, false); - case kExprInvalid: - default: - assert(0 && "add_delta: invalid Module::Expr type"); - // Invalid inputs produce an invalid result - return Expr(); - } - } - - // Returns an Expr which evaluates to *|this| - Expr deref() { - // In the simplest case, a kExprSimple can be changed into a - // kExprSimpleMem. In all other cases it has to be dumped as a - // postfix string, and " ^" added at the end. - switch (how_) { - case kExprSimple: { - Expr t = *this; - t.how_ = kExprSimpleMem; - return t; - } - case kExprSimpleMem: - case kExprPostfix: { - return Expr(getExprPostfix() + " ^"); - } - case kExprInvalid: - default: - assert(0 && "deref: invalid Module::Expr type"); - // Invalid inputs produce an invalid result - return Expr(); - } - } - - // The identifier that gives the starting value for simple expressions. - const UniqueString* ident_; - // The offset to add for simple expressions. - long offset_; - // The Postfix expression string to evaluate for non-simple expressions. - string postfix_; - // The operation expressed by this expression. - ExprHow how_; - - friend std::ostream& operator<<(std::ostream& stream, const Expr& expr); - }; - - // A map from register names to expressions that recover - // their values. This can represent a complete set of rules to + // A map from register names to postfix expressions that recover + // their their values. This can represent a complete set of rules to // follow at some address, or a set of changes to be applied to an // extant set of rules. - typedef map RuleMap; + typedef map RuleMap; // A map from addresses to RuleMaps, representing changes that take // effect at given addresses. @@ -375,10 +242,6 @@ class Module { // appropriate interface.) void GetFunctions(vector *vec, vector::iterator i); - // If this module has a function at ADDRESS, return a pointer to it. - // Otherwise, return NULL. - Function* FindFunctionByAddress(Address address); - // Insert pointers to the externs added to this module at I in // VEC. The pointed-to Externs are still owned by this module. // (Since this is effectively a copy of the extern list, this is @@ -386,10 +249,6 @@ class Module { // appropriate interface.) void GetExterns(vector *vec, vector::iterator i); - // If this module has an extern whose base address is less than ADDRESS, - // return a pointer to it. Otherwise, return NULL. - Extern* FindExternByAddress(Address address); - // Clear VEC and fill it with pointers to the Files added to this // module, sorted by name. The pointed-to Files are still owned by // this module. (Since this is effectively a copy of the file list, @@ -402,7 +261,7 @@ class Module { // effectively a copy of the stack frame entry list, this is mostly // useful for testing; other uses should probably get // a more appropriate interface.) - void GetStackFrameEntries(vector *vec); + void GetStackFrameEntries(vector *vec) const; // If this module has a StackFrameEntry whose address range covers // ADDRESS, return it. Otherwise return NULL. @@ -429,6 +288,11 @@ class Module { // established by SetLoadAddress. bool Write(std::ostream &stream, SymbolData symbol_data); + string name() const { return name_; } + string os() const { return os_; } + string architecture() const { return architecture_; } + string identifier() const { return id_; } + private: // Report an error that has occurred writing the symbol file, using // errno to find the appropriate cause. Return false. diff --git a/toolkit/crashreporter/google-breakpad/src/common/module_unittest.cc b/toolkit/crashreporter/google-breakpad/src/common/module_unittest.cc index 11cc7c5f9610..bf72736d9026 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/module_unittest.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/module_unittest.cc @@ -45,8 +45,6 @@ #include "common/using_std_string.h" using google_breakpad::Module; -using google_breakpad::ToUniqueString; -using google_breakpad::ustr__ZDcfa; using std::stringstream; using std::vector; using testing::ContainerEq; @@ -56,9 +54,7 @@ static Module::Function *generate_duplicate_function(const string &name) { const Module::Address DUP_SIZE = 0x200b26e605f99071LL; const Module::Address DUP_PARAMETER_SIZE = 0xf14ac4fed48c4a99LL; - Module::Function *function = new(Module::Function); - function->name = name; - function->address = DUP_ADDRESS; + Module::Function *function = new Module::Function(name, DUP_ADDRESS); function->size = DUP_SIZE; function->parameter_size = DUP_PARAMETER_SIZE; return function; @@ -83,9 +79,8 @@ TEST(Write, OneLineFunc) { Module m(MODULE_NAME, MODULE_OS, MODULE_ARCH, MODULE_ID); Module::File *file = m.FindFile("file_name.cc"); - Module::Function *function = new(Module::Function); - function->name = "function_name"; - function->address = 0xe165bf8023b9d9abLL; + Module::Function *function = new Module::Function( + "function_name", 0xe165bf8023b9d9abLL); function->size = 0x1e4bb0eb1cbf5b09LL; function->parameter_size = 0x772beee89114358aLL; Module::Line line = { 0xe165bf8023b9d9abLL, 0x1e4bb0eb1cbf5b09LL, @@ -112,9 +107,8 @@ TEST(Write, RelativeLoadAddress) { Module::File *file2 = m.FindFile("filename-a.cc"); // A function. - Module::Function *function = new(Module::Function); - function->name = "A_FLIBBERTIJIBBET::a_will_o_the_wisp(a clown)"; - function->address = 0xbec774ea5dd935f3LL; + Module::Function *function = new Module::Function( + "A_FLIBBERTIJIBBET::a_will_o_the_wisp(a clown)", 0xbec774ea5dd935f3LL); function->size = 0x2922088f98d3f6fcLL; function->parameter_size = 0xe5e9aa008bd5f0d0LL; @@ -132,17 +126,11 @@ TEST(Write, RelativeLoadAddress) { Module::StackFrameEntry *entry = new Module::StackFrameEntry(); entry->address = 0x30f9e5c83323973dULL; entry->size = 0x49fc9ca7c7c13dc2ULL; - entry->initial_rules[ustr__ZDcfa()] = Module::Expr("he was a handsome man"); - entry->initial_rules[ToUniqueString("and")] = - Module::Expr("what i want to know is"); - entry->initial_rules[ToUniqueString("stallion")] = - Module::Expr(ToUniqueString("and break"), 8, false); - entry->initial_rules[ToUniqueString("onetwothreefourfive")] = - Module::Expr(ToUniqueString("pigeonsjustlikethat"), 42, true); - entry->rule_changes[0x30f9e5c83323973eULL][ToUniqueString("how")] = - Module::Expr("do you like your blueeyed boy"); - entry->rule_changes[0x30f9e5c83323973eULL][ToUniqueString("Mister")] = - Module::Expr("Death"); + entry->initial_rules[".cfa"] = "he was a handsome man"; + entry->initial_rules["and"] = "what i want to know is"; + entry->rule_changes[0x30f9e5c83323973eULL]["how"] = + "do you like your blueeyed boy"; + entry->rule_changes[0x30f9e5c83323973eULL]["Mister"] = "Death"; m.AddStackFrameEntry(entry); // Set the load address. Doing this after adding all the data to @@ -160,9 +148,7 @@ TEST(Write, RelativeLoadAddress) { "9410dc39a798c580 1c2be6d6c5af2611 41676901 1\n" "STACK CFI INIT 6434d177ce326ca 49fc9ca7c7c13dc2" " .cfa: he was a handsome man" - " and: what i want to know is" - " onetwothreefourfive: pigeonsjustlikethat 42 + ^" - " stallion: and break 8 +\n" + " and: what i want to know is\n" "STACK CFI 6434d177ce326cb" " Mister: Death" " how: do you like your blueeyed boy\n", @@ -178,9 +164,8 @@ TEST(Write, OmitUnusedFiles) { Module::File *file3 = m.FindFile("filename3"); // Create a function. - Module::Function *function = new(Module::Function); - function->name = "function_name"; - function->address = 0x9b926d464f0b9384LL; + Module::Function *function = new Module::Function( + "function_name", 0x9b926d464f0b9384LL); function->size = 0x4f524a4ba795e6a6LL; function->parameter_size = 0xbbe8133a6641c9b7LL; @@ -227,9 +212,8 @@ TEST(Write, NoCFI) { Module::File *file1 = m.FindFile("filename.cc"); // A function. - Module::Function *function = new(Module::Function); - function->name = "A_FLIBBERTIJIBBET::a_will_o_the_wisp(a clown)"; - function->address = 0xbec774ea5dd935f3LL; + Module::Function *function = new Module::Function( + "A_FLIBBERTIJIBBET::a_will_o_the_wisp(a clown)", 0xbec774ea5dd935f3LL); function->size = 0x2922088f98d3f6fcLL; function->parameter_size = 0xe5e9aa008bd5f0d0LL; @@ -244,13 +228,11 @@ TEST(Write, NoCFI) { Module::StackFrameEntry *entry = new Module::StackFrameEntry(); entry->address = 0x30f9e5c83323973dULL; entry->size = 0x49fc9ca7c7c13dc2ULL; - entry->initial_rules[ustr__ZDcfa()] = Module::Expr("he was a handsome man"); - entry->initial_rules[ToUniqueString("and")] = - Module::Expr("what i want to know is"); - entry->rule_changes[0x30f9e5c83323973eULL][ToUniqueString("how")] = - Module::Expr("do you like your blueeyed boy"); - entry->rule_changes[0x30f9e5c83323973eULL][ToUniqueString("Mister")] = - Module::Expr("Death"); + entry->initial_rules[".cfa"] = "he was a handsome man"; + entry->initial_rules["and"] = "what i want to know is"; + entry->rule_changes[0x30f9e5c83323973eULL]["how"] = + "do you like your blueeyed boy"; + entry->rule_changes[0x30f9e5c83323973eULL]["Mister"] = "Death"; m.AddStackFrameEntry(entry); // Set the load address. Doing this after adding all the data to @@ -272,15 +254,13 @@ TEST(Construct, AddFunctions) { Module m(MODULE_NAME, MODULE_OS, MODULE_ARCH, MODULE_ID); // Two functions. - Module::Function *function1 = new(Module::Function); - function1->name = "_without_form"; - function1->address = 0xd35024aa7ca7da5cLL; + Module::Function *function1 = new Module::Function( + "_without_form", 0xd35024aa7ca7da5cLL); function1->size = 0x200b26e605f99071LL; function1->parameter_size = 0xf14ac4fed48c4a99LL; - Module::Function *function2 = new(Module::Function); - function2->name = "_and_void"; - function2->address = 0x2987743d0b35b13fLL; + Module::Function *function2 = new Module::Function( + "_and_void", 0x2987743d0b35b13fLL); function2->size = 0xb369db048deb3010LL; function2->parameter_size = 0x938e556cb5a79988LL; @@ -322,27 +302,24 @@ TEST(Construct, AddFrames) { Module::StackFrameEntry *entry2 = new Module::StackFrameEntry(); entry2->address = 0x8064f3af5e067e38ULL; entry2->size = 0x0de2a5ee55509407ULL; - entry2->initial_rules[ustr__ZDcfa()] = - Module::Expr("I think that I shall never see"); - entry2->initial_rules[ToUniqueString("stromboli")] = - Module::Expr("a poem lovely as a tree"); - entry2->initial_rules[ToUniqueString("cannoli")] = - Module::Expr("a tree whose hungry mouth is prest"); + entry2->initial_rules[".cfa"] = "I think that I shall never see"; + entry2->initial_rules["stromboli"] = "a poem lovely as a tree"; + entry2->initial_rules["cannoli"] = "a tree whose hungry mouth is prest"; m.AddStackFrameEntry(entry2); // Third STACK CFI entry, with initial rules and deltas. Module::StackFrameEntry *entry3 = new Module::StackFrameEntry(); entry3->address = 0x5e8d0db0a7075c6cULL; entry3->size = 0x1c7edb12a7aea229ULL; - entry3->initial_rules[ustr__ZDcfa()] = Module::Expr("Whose woods are these"); - entry3->rule_changes[0x47ceb0f63c269d7fULL][ToUniqueString("calzone")] = - Module::Expr("the village though"); - entry3->rule_changes[0x47ceb0f63c269d7fULL][ToUniqueString("cannoli")] = - Module::Expr("he will not see me stopping here"); - entry3->rule_changes[0x36682fad3763ffffULL][ToUniqueString("stromboli")] = - Module::Expr("his house is in"); - entry3->rule_changes[0x36682fad3763ffffULL][ustr__ZDcfa()] = - Module::Expr("I think I know"); + entry3->initial_rules[".cfa"] = "Whose woods are these"; + entry3->rule_changes[0x47ceb0f63c269d7fULL]["calzone"] = + "the village though"; + entry3->rule_changes[0x47ceb0f63c269d7fULL]["cannoli"] = + "he will not see me stopping here"; + entry3->rule_changes[0x36682fad3763ffffULL]["stromboli"] = + "his house is in"; + entry3->rule_changes[0x36682fad3763ffffULL][".cfa"] = + "I think I know"; m.AddStackFrameEntry(entry3); // Check that Write writes STACK CFI records properly. @@ -372,29 +349,23 @@ TEST(Construct, AddFrames) { EXPECT_EQ(0x5e8d0db0a7075c6cULL, entries[0]->address); EXPECT_EQ(0x1c7edb12a7aea229ULL, entries[0]->size); Module::RuleMap entry1_initial; - entry1_initial[ustr__ZDcfa()] = Module::Expr("Whose woods are these"); + entry1_initial[".cfa"] = "Whose woods are these"; EXPECT_THAT(entries[0]->initial_rules, ContainerEq(entry1_initial)); Module::RuleChangeMap entry1_changes; - entry1_changes[0x36682fad3763ffffULL][ustr__ZDcfa()] = - Module::Expr("I think I know"); - entry1_changes[0x36682fad3763ffffULL][ToUniqueString("stromboli")] = - Module::Expr("his house is in"); - entry1_changes[0x47ceb0f63c269d7fULL][ToUniqueString("calzone")] = - Module::Expr("the village though"); - entry1_changes[0x47ceb0f63c269d7fULL][ToUniqueString("cannoli")] = - Module::Expr("he will not see me stopping here"); + entry1_changes[0x36682fad3763ffffULL][".cfa"] = "I think I know"; + entry1_changes[0x36682fad3763ffffULL]["stromboli"] = "his house is in"; + entry1_changes[0x47ceb0f63c269d7fULL]["calzone"] = "the village though"; + entry1_changes[0x47ceb0f63c269d7fULL]["cannoli"] = + "he will not see me stopping here"; EXPECT_THAT(entries[0]->rule_changes, ContainerEq(entry1_changes)); // Check second entry. EXPECT_EQ(0x8064f3af5e067e38ULL, entries[1]->address); EXPECT_EQ(0x0de2a5ee55509407ULL, entries[1]->size); ASSERT_EQ(3U, entries[1]->initial_rules.size()); Module::RuleMap entry2_initial; - entry2_initial[ustr__ZDcfa()] = - Module::Expr("I think that I shall never see"); - entry2_initial[ToUniqueString("stromboli")] = - Module::Expr("a poem lovely as a tree"); - entry2_initial[ToUniqueString("cannoli")] = - Module::Expr("a tree whose hungry mouth is prest"); + entry2_initial[".cfa"] = "I think that I shall never see"; + entry2_initial["stromboli"] = "a poem lovely as a tree"; + entry2_initial["cannoli"] = "a tree whose hungry mouth is prest"; EXPECT_THAT(entries[1]->initial_rules, ContainerEq(entry2_initial)); ASSERT_EQ(0U, entries[1]->rule_changes.size()); // Check third entry. @@ -464,11 +435,9 @@ TEST(Construct, Externs) { Module m(MODULE_NAME, MODULE_OS, MODULE_ARCH, MODULE_ID); // Two externs. - Module::Extern *extern1 = new(Module::Extern); - extern1->address = 0xffff; + Module::Extern *extern1 = new Module::Extern(0xffff); extern1->name = "_abc"; - Module::Extern *extern2 = new(Module::Extern); - extern2->address = 0xaaaa; + Module::Extern *extern2 = new Module::Extern(0xaaaa); extern2->name = "_xyz"; m.AddExtern(extern1); @@ -491,11 +460,9 @@ TEST(Construct, DuplicateExterns) { Module m(MODULE_NAME, MODULE_OS, MODULE_ARCH, MODULE_ID); // Two externs. - Module::Extern *extern1 = new(Module::Extern); - extern1->address = 0xffff; + Module::Extern *extern1 = new Module::Extern(0xffff); extern1->name = "_xyz"; - Module::Extern *extern2 = new(Module::Extern); - extern2->address = 0xffff; + Module::Extern *extern2 = new Module::Extern(0xffff); extern2->name = "_abc"; m.AddExtern(extern1); @@ -510,92 +477,72 @@ TEST(Construct, DuplicateExterns) { contents.c_str()); } -TEST(Lookup, Function) { - Module m(MODULE_NAME, MODULE_OS, MODULE_ARCH, MODULE_ID); - - Module::Function *function1 = new(Module::Function); - function1->name = "_abc1"; - function1->address = 0x1000; - function1->size = 0x900; - function1->parameter_size = 0x0; - - Module::Function *function2 = new(Module::Function); - function2->name = "_xyz2"; - function2->address = 0x2000; - function2->size = 0x900; - function2->parameter_size = 0x0; - - Module::Function *function3 = new(Module::Function); - function3->name = "_def3"; - function3->address = 0x3000; - function3->size = 0x900; - function3->parameter_size = 0x0; - - // Put them in a vector. - vector vec; - vec.push_back(function1); - vec.push_back(function2); - vec.push_back(function3); - - m.AddFunctions(vec.begin(), vec.end()); - - // Try looking up functions by address. - Module::Function* f = m.FindFunctionByAddress(0x1000); - EXPECT_EQ(function1, f); - f = m.FindFunctionByAddress(0x18FF); - EXPECT_EQ(function1, f); - - f = m.FindFunctionByAddress(0x1900); - EXPECT_EQ((Module::Function*)NULL, f); - f = m.FindFunctionByAddress(0x1A00); - EXPECT_EQ((Module::Function*)NULL, f); - - f = m.FindFunctionByAddress(0x2000); - EXPECT_EQ(function2, f); - f = m.FindFunctionByAddress(0x28FF); - EXPECT_EQ(function2, f); - - f = m.FindFunctionByAddress(0x3000); - EXPECT_EQ(function3, f); - f = m.FindFunctionByAddress(0x38FF); - EXPECT_EQ(function3, f); - - f = m.FindFunctionByAddress(0x3900); - EXPECT_EQ((Module::Function*)NULL, f); - f = m.FindFunctionByAddress(0x3A00); - EXPECT_EQ((Module::Function*)NULL, f); -} - -TEST(Lookup, Externs) { +// If there exists an extern and a function at the same address, only write +// out the FUNC entry. +TEST(Construct, FunctionsAndExternsWithSameAddress) { + stringstream s; Module m(MODULE_NAME, MODULE_OS, MODULE_ARCH, MODULE_ID); // Two externs. - Module::Extern* extern1 = new(Module::Extern); - extern1->address = 0x1000; - extern1->name = "_abc"; - Module::Extern* extern2 = new(Module::Extern); - extern2->address = 0x2000; - extern2->name = "_xyz"; + Module::Extern* extern1 = new Module::Extern(0xabc0); + extern1->name = "abc"; + Module::Extern* extern2 = new Module::Extern(0xfff0); + extern2->name = "xyz"; m.AddExtern(extern1); m.AddExtern(extern2); - Module::Extern* e = m.FindExternByAddress(0xFFF); - EXPECT_EQ((Module::Extern*)NULL, e); + Module::Function* function = new Module::Function("_xyz", 0xfff0); + function->size = 0x10; + function->parameter_size = 0; + m.AddFunction(function); - e = m.FindExternByAddress(0x1000); - EXPECT_EQ(extern1, e); - e = m.FindExternByAddress(0x1900); - EXPECT_EQ(extern1, e); - e = m.FindExternByAddress(0x1FFF); - EXPECT_EQ(extern1, e); + m.Write(s, ALL_SYMBOL_DATA); + string contents = s.str(); - e = m.FindExternByAddress(0x2000); - EXPECT_EQ(extern2, e); - e = m.FindExternByAddress(0x2900); - EXPECT_EQ(extern2, e); - e = m.FindExternByAddress(0xFFFFFFFF); - EXPECT_EQ(extern2, e); + EXPECT_STREQ("MODULE " MODULE_OS " " MODULE_ARCH " " + MODULE_ID " " MODULE_NAME "\n" + "FUNC fff0 10 0 _xyz\n" + "PUBLIC abc0 0 abc\n", + contents.c_str()); +} + +// If there exists an extern and a function at the same address, only write +// out the FUNC entry. For ARM THUMB, the extern that comes from the ELF +// symbol section has bit 0 set. +TEST(Construct, FunctionsAndThumbExternsWithSameAddress) { + stringstream s; + Module m(MODULE_NAME, MODULE_OS, "arm", MODULE_ID); + + // Two THUMB externs. + Module::Extern* thumb_extern1 = new Module::Extern(0xabc1); + thumb_extern1->name = "thumb_abc"; + Module::Extern* thumb_extern2 = new Module::Extern(0xfff1); + thumb_extern2->name = "thumb_xyz"; + + Module::Extern* arm_extern1 = new Module::Extern(0xcc00); + arm_extern1->name = "arm_func"; + + m.AddExtern(thumb_extern1); + m.AddExtern(thumb_extern2); + m.AddExtern(arm_extern1); + + // The corresponding function from the DWARF debug data have the actual + // address. + Module::Function* function = new Module::Function("_thumb_xyz", 0xfff0); + function->size = 0x10; + function->parameter_size = 0; + m.AddFunction(function); + + m.Write(s, ALL_SYMBOL_DATA); + string contents = s.str(); + + EXPECT_STREQ("MODULE " MODULE_OS " arm " + MODULE_ID " " MODULE_NAME "\n" + "FUNC fff0 10 0 _thumb_xyz\n" + "PUBLIC abc1 0 thumb_abc\n" + "PUBLIC cc00 0 arm_func\n", + contents.c_str()); } TEST(Lookup, StackFrameEntries) { @@ -611,27 +558,24 @@ TEST(Lookup, StackFrameEntries) { Module::StackFrameEntry *entry2 = new Module::StackFrameEntry(); entry2->address = 0x3000; entry2->size = 0x900; - entry2->initial_rules[ustr__ZDcfa()] = - Module::Expr("I think that I shall never see"); - entry2->initial_rules[ToUniqueString("stromboli")] = - Module::Expr("a poem lovely as a tree"); - entry2->initial_rules[ToUniqueString("cannoli")] = - Module::Expr("a tree whose hungry mouth is prest"); + entry2->initial_rules[".cfa"] = "I think that I shall never see"; + entry2->initial_rules["stromboli"] = "a poem lovely as a tree"; + entry2->initial_rules["cannoli"] = "a tree whose hungry mouth is prest"; m.AddStackFrameEntry(entry2); // Third STACK CFI entry, with initial rules and deltas. Module::StackFrameEntry *entry3 = new Module::StackFrameEntry(); entry3->address = 0x1000; entry3->size = 0x900; - entry3->initial_rules[ustr__ZDcfa()] = Module::Expr("Whose woods are these"); - entry3->rule_changes[0x47ceb0f63c269d7fULL][ToUniqueString("calzone")] = - Module::Expr("the village though"); - entry3->rule_changes[0x47ceb0f63c269d7fULL][ToUniqueString("cannoli")] = - Module::Expr("he will not see me stopping here"); - entry3->rule_changes[0x36682fad3763ffffULL][ToUniqueString("stromboli")] = - Module::Expr("his house is in"); - entry3->rule_changes[0x36682fad3763ffffULL][ustr__ZDcfa()] = - Module::Expr("I think I know"); + entry3->initial_rules[".cfa"] = "Whose woods are these"; + entry3->rule_changes[0x47ceb0f63c269d7fULL]["calzone"] = + "the village though"; + entry3->rule_changes[0x47ceb0f63c269d7fULL]["cannoli"] = + "he will not see me stopping here"; + entry3->rule_changes[0x36682fad3763ffffULL]["stromboli"] = + "his house is in"; + entry3->rule_changes[0x36682fad3763ffffULL][".cfa"] = + "I think I know"; m.AddStackFrameEntry(entry3); Module::StackFrameEntry* s = m.FindStackFrameEntryByAddress(0x1000); diff --git a/toolkit/crashreporter/google-breakpad/src/common/moz.build b/toolkit/crashreporter/google-breakpad/src/common/moz.build index 6456e286446d..1f72345f4912 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/moz.build +++ b/toolkit/crashreporter/google-breakpad/src/common/moz.build @@ -9,47 +9,28 @@ if CONFIG['OS_ARCH'] in ('Darwin', 'Linux'): UNIFIED_SOURCES += [ 'convert_UTF.c', - 'logging.cc', - 'module.cc', - 'pathname_stripper.cc', 'string_conversion.cc', - 'unique_string.cc', ] if CONFIG['OS_ARCH'] != 'WINNT': UNIFIED_SOURCES += [ - 'arm_ex_reader.cc', - 'arm_ex_to_module.cc', - 'dwarf/bytereader.cc', - 'dwarf/dwarf2diehandler.cc', - 'dwarf/dwarf2reader.cc', - 'dwarf_cfi_to_module.cc', - 'dwarf_cu_to_module.cc', - 'dwarf_line_to_module.cc', - 'language.cc', 'md5.cc', ] if CONFIG['OS_ARCH'] == 'Linux': - UNIFIED_SOURCES += [ - 'linux/dump_symbols.cc', - 'linux/elf_symbols_to_module.cc', - ] HOST_DEFINES['HAVE_A_OUT_H'] = True - DEFINES['HAVE_A_OUT_H'] = True - -if CONFIG['OS_ARCH'] == 'Darwin' and CONFIG['HOST_OS_ARCH'] != 'Darwin': - HOST_CXXFLAGS += [ - '-I%s/toolkit/crashreporter/google-breakpad/src/third_party/mac_headers/' % TOPSRCDIR, - ] - -if CONFIG['OS_TARGET'] != 'Android' and CONFIG['OS_ARCH'] != 'WINNT': - UNIFIED_SOURCES += [ +elif CONFIG['OS_ARCH'] == 'Darwin': + HOST_DEFINES['HAVE_MACH_O_NLIST_H'] = True + HOST_SOURCES += [ 'stabs_reader.cc', 'stabs_to_module.cc', ] + if CONFIG['HOST_OS_ARCH'] != 'Darwin': + HOST_CXXFLAGS += [ + '-I%s/toolkit/crashreporter/google-breakpad/src/third_party/mac_headers/' % TOPSRCDIR, + ] -if CONFIG['OS_ARCH'] != 'WINNT' and CONFIG['MOZ_CRASHREPORTER']: +if CONFIG['OS_ARCH'] != 'WINNT': HOST_SOURCES += [ 'arm_ex_reader.cc', 'arm_ex_to_module.cc', @@ -58,14 +39,9 @@ if CONFIG['OS_ARCH'] != 'WINNT' and CONFIG['MOZ_CRASHREPORTER']: 'dwarf_cu_to_module.cc', 'dwarf_line_to_module.cc', 'language.cc', - 'logging.cc', 'md5.cc', 'module.cc', - 'pathname_stripper.cc', - 'stabs_reader.cc', - 'stabs_to_module.cc', 'string_conversion.cc', - 'unique_string.cc', ] HOST_CXXFLAGS += [ '-O2', @@ -73,13 +49,6 @@ if CONFIG['OS_ARCH'] != 'WINNT' and CONFIG['MOZ_CRASHREPORTER']: ] HostLibrary('host_breakpad_common_s') -if CONFIG['OS_ARCH'] == 'Darwin': - UNIFIED_SOURCES += [ - 'mac/dump_syms.cc', - ] - HOST_DEFINES['HAVE_MACH_O_NLIST_H'] = True - DEFINES['HAVE_MACH_O_NLIST_H'] = True - if CONFIG['OS_TARGET'] == 'Android': # We don't support unifying assembly files. SOURCES += [ @@ -93,17 +62,4 @@ ALLOW_COMPILER_WARNINGS = True FINAL_LIBRARY = 'xul' -if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk': - DEFINES['ELFSIZE'] = 32 - -if CONFIG['OS_TARGET'] == 'Android': - DEFINES['NO_STABS_SUPPORT'] = True - -DEFINES['BP_LOGGING_INCLUDE'] = '"BreakpadLogging.h"' - include('/toolkit/crashreporter/crashreporter.mozbuild') - -LOCAL_INCLUDES += [ - '..', - '../../../breakpad-logging', -] diff --git a/toolkit/crashreporter/google-breakpad/src/common/scoped_ptr.h b/toolkit/crashreporter/google-breakpad/src/common/scoped_ptr.h index 2dbc40df3bcd..d137c186811c 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/scoped_ptr.h +++ b/toolkit/crashreporter/google-breakpad/src/common/scoped_ptr.h @@ -1,231 +1,285 @@ -// (C) Copyright Greg Colvin and Beman Dawes 1998, 1999. -// Copyright (c) 2001, 2002 Peter Dimov +// Copyright 2013 Google Inc. All Rights Reserved. // -// Permission to copy, use, modify, sell and distribute this software -// is granted provided this copyright notice appears in all copies. -// This software is provided "as is" without express or implied -// warranty, and with no claim as to its suitability for any purpose. +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: // -// See http://www.boost.org/libs/smart_ptr/scoped_ptr.htm for documentation. +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. // +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// scoped_ptr mimics a built-in pointer except that it guarantees deletion -// of the object pointed to, either on destruction of the scoped_ptr or via -// an explicit reset(). scoped_ptr is a simple solution for simple needs; -// use shared_ptr or std::auto_ptr if your needs are more complex. - -// *** NOTE *** -// If your scoped_ptr is a class member of class FOO pointing to a -// forward declared type BAR (as shown below), then you MUST use a non-inlined -// version of the destructor. The destructor of a scoped_ptr (called from -// FOO's destructor) must have a complete definition of BAR in order to -// destroy it. Example: +// Scopers help you manage ownership of a pointer, helping you easily manage the +// a pointer within a scope, and automatically destroying the pointer at the +// end of a scope. There are two main classes you will use, which correspond +// to the operators new/delete and new[]/delete[]. // -// -- foo.h -- -// class BAR; +// Example usage (scoped_ptr): +// { +// scoped_ptr foo(new Foo("wee")); +// } // foo goes out of scope, releasing the pointer with it. // -// class FOO { -// public: -// FOO(); -// ~FOO(); // Required for sources that instantiate class FOO to compile! -// -// private: -// scoped_ptr bar_; -// }; +// { +// scoped_ptr foo; // No pointer managed. +// foo.reset(new Foo("wee")); // Now a pointer is managed. +// foo.reset(new Foo("wee2")); // Foo("wee") was destroyed. +// foo.reset(new Foo("wee3")); // Foo("wee2") was destroyed. +// foo->Method(); // Foo::Method() called. +// foo.get()->Method(); // Foo::Method() called. +// SomeFunc(foo.release()); // SomeFunc takes ownership, foo no longer +// // manages a pointer. +// foo.reset(new Foo("wee4")); // foo manages a pointer again. +// foo.reset(); // Foo("wee4") destroyed, foo no longer +// // manages a pointer. +// } // foo wasn't managing a pointer, so nothing was destroyed. // -// -- foo.cc -- -// #include "foo.h" -// FOO::~FOO() {} // Empty, but must be non-inlined to FOO's class definition. - -// scoped_ptr_malloc added by Google -// When one of these goes out of scope, instead of doing a delete or -// delete[], it calls free(). scoped_ptr_malloc is likely to see -// much more use than any other specializations. - -// release() added by Google -// Use this to conditionally transfer ownership of a heap-allocated object -// to the caller, usually on method success. +// Example usage (scoped_array): +// { +// scoped_array foo(new Foo[100]); +// foo.get()->Method(); // Foo::Method on the 0th element. +// foo[10].Method(); // Foo::Method on the 10th element. +// } #ifndef COMMON_SCOPED_PTR_H_ #define COMMON_SCOPED_PTR_H_ -#include // for std::ptrdiff_t -#include // for assert -#include // for free() decl +// This is an implementation designed to match the anticipated future TR2 +// implementation of the scoped_ptr class, and its closely-related brethren, +// scoped_array, scoped_ptr_malloc. + +#include +#include +#include namespace google_breakpad { -template +// A scoped_ptr is like a T*, except that the destructor of scoped_ptr +// automatically deletes the pointer it holds (if any). +// That is, scoped_ptr owns the T object that it points to. +// Like a T*, a scoped_ptr may hold either NULL or a pointer to a T object. +// Also like T*, scoped_ptr is thread-compatible, and once you +// dereference it, you get the threadsafety guarantees of T. +// +// The size of a scoped_ptr is small: +// sizeof(scoped_ptr) == sizeof(C*) +template class scoped_ptr { - private: - - T* ptr; - - scoped_ptr(scoped_ptr const &); - scoped_ptr & operator=(scoped_ptr const &); - public: - typedef T element_type; + // The element type + typedef C element_type; - explicit scoped_ptr(T* p = 0): ptr(p) {} + // Constructor. Defaults to initializing with NULL. + // There is no way to create an uninitialized scoped_ptr. + // The input parameter must be allocated with new. + explicit scoped_ptr(C* p = NULL) : ptr_(p) { } + // Destructor. If there is a C object, delete it. + // We don't need to test ptr_ == NULL because C++ does that for us. ~scoped_ptr() { - typedef char type_must_be_complete[sizeof(T)]; - delete ptr; + enum { type_must_be_complete = sizeof(C) }; + delete ptr_; } - void reset(T* p = 0) { - typedef char type_must_be_complete[sizeof(T)]; - - if (ptr != p) { - delete ptr; - ptr = p; + // Reset. Deletes the current owned object, if any. + // Then takes ownership of a new object, if given. + // this->reset(this->get()) works. + void reset(C* p = NULL) { + if (p != ptr_) { + enum { type_must_be_complete = sizeof(C) }; + delete ptr_; + ptr_ = p; } } - T& operator*() const { - assert(ptr != 0); - return *ptr; + // Accessors to get the owned object. + // operator* and operator-> will assert() if there is no current object. + C& operator*() const { + assert(ptr_ != NULL); + return *ptr_; + } + C* operator->() const { + assert(ptr_ != NULL); + return ptr_; + } + C* get() const { return ptr_; } + + // Comparison operators. + // These return whether two scoped_ptr refer to the same object, not just to + // two different but equal objects. + bool operator==(C* p) const { return ptr_ == p; } + bool operator!=(C* p) const { return ptr_ != p; } + + // Swap two scoped pointers. + void swap(scoped_ptr& p2) { + C* tmp = ptr_; + ptr_ = p2.ptr_; + p2.ptr_ = tmp; } - T* operator->() const { - assert(ptr != 0); - return ptr; - } - - bool operator==(T* p) const { - return ptr == p; - } - - bool operator!=(T* p) const { - return ptr != p; - } - - T* get() const { - return ptr; - } - - void swap(scoped_ptr & b) { - T* tmp = b.ptr; - b.ptr = ptr; - ptr = tmp; - } - - T* release() { - T* tmp = ptr; - ptr = 0; - return tmp; + // Release a pointer. + // The return value is the current pointer held by this object. + // If this object holds a NULL pointer, the return value is NULL. + // After this operation, this object will hold a NULL pointer, + // and will not own the object any more. + C* release() { + C* retVal = ptr_; + ptr_ = NULL; + return retVal; } private: + C* ptr_; - // no reason to use these: each scoped_ptr should have its own object - template bool operator==(scoped_ptr const& p) const; - template bool operator!=(scoped_ptr const& p) const; + // Forbid comparison of scoped_ptr types. If C2 != C, it totally doesn't + // make sense, and if C2 == C, it still doesn't make sense because you should + // never have the same object owned by two different scoped_ptrs. + template bool operator==(scoped_ptr const& p2) const; + template bool operator!=(scoped_ptr const& p2) const; + + // Disallow evil constructors + scoped_ptr(const scoped_ptr&); + void operator=(const scoped_ptr&); }; -template inline -void swap(scoped_ptr& a, scoped_ptr& b) { - a.swap(b); +// Free functions +template +void swap(scoped_ptr& p1, scoped_ptr& p2) { + p1.swap(p2); } -template inline -bool operator==(T* p, const scoped_ptr& b) { - return p == b.get(); +template +bool operator==(C* p1, const scoped_ptr& p2) { + return p1 == p2.get(); } -template inline -bool operator!=(T* p, const scoped_ptr& b) { - return p != b.get(); +template +bool operator!=(C* p1, const scoped_ptr& p2) { + return p1 != p2.get(); } -// scoped_array extends scoped_ptr to arrays. Deletion of the array pointed to -// is guaranteed, either on destruction of the scoped_array or via an explicit -// reset(). Use shared_array or std::vector if your needs are more complex. - -template +// scoped_array is like scoped_ptr, except that the caller must allocate +// with new [] and the destructor deletes objects with delete []. +// +// As with scoped_ptr, a scoped_array either points to an object +// or is NULL. A scoped_array owns the object that it points to. +// scoped_array is thread-compatible, and once you index into it, +// the returned objects have only the threadsafety guarantees of T. +// +// Size: sizeof(scoped_array) == sizeof(C*) +template class scoped_array { - private: - - T* ptr; - - scoped_array(scoped_array const &); - scoped_array & operator=(scoped_array const &); - public: - typedef T element_type; + // The element type + typedef C element_type; - explicit scoped_array(T* p = 0) : ptr(p) {} + // Constructor. Defaults to intializing with NULL. + // There is no way to create an uninitialized scoped_array. + // The input parameter must be allocated with new []. + explicit scoped_array(C* p = NULL) : array_(p) { } + // Destructor. If there is a C object, delete it. + // We don't need to test ptr_ == NULL because C++ does that for us. ~scoped_array() { - typedef char type_must_be_complete[sizeof(T)]; - delete[] ptr; + enum { type_must_be_complete = sizeof(C) }; + delete[] array_; } - void reset(T* p = 0) { - typedef char type_must_be_complete[sizeof(T)]; - - if (ptr != p) { - delete [] ptr; - ptr = p; + // Reset. Deletes the current owned object, if any. + // Then takes ownership of a new object, if given. + // this->reset(this->get()) works. + void reset(C* p = NULL) { + if (p != array_) { + enum { type_must_be_complete = sizeof(C) }; + delete[] array_; + array_ = p; } } - T& operator[](std::ptrdiff_t i) const { - assert(ptr != 0); + // Get one element of the current object. + // Will assert() if there is no current object, or index i is negative. + C& operator[](ptrdiff_t i) const { assert(i >= 0); - return ptr[i]; + assert(array_ != NULL); + return array_[i]; } - bool operator==(T* p) const { - return ptr == p; + // Get a pointer to the zeroth element of the current object. + // If there is no current object, return NULL. + C* get() const { + return array_; } - bool operator!=(T* p) const { - return ptr != p; + // Comparison operators. + // These return whether two scoped_array refer to the same object, not just to + // two different but equal objects. + bool operator==(C* p) const { return array_ == p; } + bool operator!=(C* p) const { return array_ != p; } + + // Swap two scoped arrays. + void swap(scoped_array& p2) { + C* tmp = array_; + array_ = p2.array_; + p2.array_ = tmp; } - T* get() const { - return ptr; - } - - void swap(scoped_array & b) { - T* tmp = b.ptr; - b.ptr = ptr; - ptr = tmp; - } - - T* release() { - T* tmp = ptr; - ptr = 0; - return tmp; + // Release an array. + // The return value is the current pointer held by this object. + // If this object holds a NULL pointer, the return value is NULL. + // After this operation, this object will hold a NULL pointer, + // and will not own the object any more. + C* release() { + C* retVal = array_; + array_ = NULL; + return retVal; } private: + C* array_; - // no reason to use these: each scoped_array should have its own object - template bool operator==(scoped_array const& p) const; - template bool operator!=(scoped_array const& p) const; + // Forbid comparison of different scoped_array types. + template bool operator==(scoped_array const& p2) const; + template bool operator!=(scoped_array const& p2) const; + + // Disallow evil constructors + scoped_array(const scoped_array&); + void operator=(const scoped_array&); }; -template inline -void swap(scoped_array& a, scoped_array& b) { - a.swap(b); +// Free functions +template +void swap(scoped_array& p1, scoped_array& p2) { + p1.swap(p2); } -template inline -bool operator==(T* p, const scoped_array& b) { - return p == b.get(); +template +bool operator==(C* p1, const scoped_array& p2) { + return p1 == p2.get(); } -template inline -bool operator!=(T* p, const scoped_array& b) { - return p != b.get(); +template +bool operator!=(C* p1, const scoped_array& p2) { + return p1 != p2.get(); } - // This class wraps the c library function free() in a class that can be // passed as a template argument to scoped_ptr_malloc below. class ScopedPtrMallocFree { @@ -238,95 +292,110 @@ class ScopedPtrMallocFree { // scoped_ptr_malloc<> is similar to scoped_ptr<>, but it accepts a // second template argument, the functor used to free the object. -template +template class scoped_ptr_malloc { - private: - - T* ptr; - - scoped_ptr_malloc(scoped_ptr_malloc const &); - scoped_ptr_malloc & operator=(scoped_ptr_malloc const &); - public: - typedef T element_type; + // The element type + typedef C element_type; - explicit scoped_ptr_malloc(T* p = 0): ptr(p) {} + // Constructor. Defaults to initializing with NULL. + // There is no way to create an uninitialized scoped_ptr. + // The input parameter must be allocated with an allocator that matches the + // Free functor. For the default Free functor, this is malloc, calloc, or + // realloc. + explicit scoped_ptr_malloc(C* p = NULL): ptr_(p) {} + // Destructor. If there is a C object, call the Free functor. ~scoped_ptr_malloc() { - typedef char type_must_be_complete[sizeof(T)]; - free_((void*) ptr); + reset(); } - void reset(T* p = 0) { - typedef char type_must_be_complete[sizeof(T)]; - - if (ptr != p) { - free_((void*) ptr); - ptr = p; + // Reset. Calls the Free functor on the current owned object, if any. + // Then takes ownership of a new object, if given. + // this->reset(this->get()) works. + void reset(C* p = NULL) { + if (ptr_ != p) { + FreeProc free_proc; + free_proc(ptr_); + ptr_ = p; } } - T& operator*() const { - assert(ptr != 0); - return *ptr; + // Get the current object. + // operator* and operator-> will cause an assert() failure if there is + // no current object. + C& operator*() const { + assert(ptr_ != NULL); + return *ptr_; } - T* operator->() const { - assert(ptr != 0); - return ptr; + C* operator->() const { + assert(ptr_ != NULL); + return ptr_; } - bool operator==(T* p) const { - return ptr == p; + C* get() const { + return ptr_; } - bool operator!=(T* p) const { - return ptr != p; + // Comparison operators. + // These return whether a scoped_ptr_malloc and a plain pointer refer + // to the same object, not just to two different but equal objects. + // For compatibility with the boost-derived implementation, these + // take non-const arguments. + bool operator==(C* p) const { + return ptr_ == p; } - T* get() const { - return ptr; + bool operator!=(C* p) const { + return ptr_ != p; } + // Swap two scoped pointers. void swap(scoped_ptr_malloc & b) { - T* tmp = b.ptr; - b.ptr = ptr; - ptr = tmp; + C* tmp = b.ptr_; + b.ptr_ = ptr_; + ptr_ = tmp; } - T* release() { - T* tmp = ptr; - ptr = 0; + // Release a pointer. + // The return value is the current pointer held by this object. + // If this object holds a NULL pointer, the return value is NULL. + // After this operation, this object will hold a NULL pointer, + // and will not own the object any more. + C* release() { + C* tmp = ptr_; + ptr_ = NULL; return tmp; } private: + C* ptr_; // no reason to use these: each scoped_ptr_malloc should have its own object - template - bool operator==(scoped_ptr_malloc const& p) const; - template - bool operator!=(scoped_ptr_malloc const& p) const; + template + bool operator==(scoped_ptr_malloc const& p) const; + template + bool operator!=(scoped_ptr_malloc const& p) const; - static FreeProc const free_; + // Disallow evil constructors + scoped_ptr_malloc(const scoped_ptr_malloc&); + void operator=(const scoped_ptr_malloc&); }; -template -FP const scoped_ptr_malloc::free_ = FP(); - -template inline -void swap(scoped_ptr_malloc& a, scoped_ptr_malloc& b) { +template inline +void swap(scoped_ptr_malloc& a, scoped_ptr_malloc& b) { a.swap(b); } -template inline -bool operator==(T* p, const scoped_ptr_malloc& b) { +template inline +bool operator==(C* p, const scoped_ptr_malloc& b) { return p == b.get(); } -template inline -bool operator!=(T* p, const scoped_ptr_malloc& b) { +template inline +bool operator!=(C* p, const scoped_ptr_malloc& b) { return p != b.get(); } diff --git a/toolkit/crashreporter/google-breakpad/src/tools/windows/dump_syms/testdata/dump_syms_regtest.cc b/toolkit/crashreporter/google-breakpad/src/common/simple_string_dictionary.cc similarity index 72% rename from toolkit/crashreporter/google-breakpad/src/tools/windows/dump_syms/testdata/dump_syms_regtest.cc rename to toolkit/crashreporter/google-breakpad/src/common/simple_string_dictionary.cc index ce53f582f793..e0a74ceeb4ba 100644 --- a/toolkit/crashreporter/google-breakpad/src/tools/windows/dump_syms/testdata/dump_syms_regtest.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/simple_string_dictionary.cc @@ -27,39 +27,19 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// cl /Zi dump_syms_regtest.cc -// dump_syms dump_syms_regtest.pdb | tr -d '\015' > dump_syms_regtest.sym +#include "common/simple_string_dictionary.h" namespace google_breakpad { -class C { - public: - C() : member_(1) {} - virtual ~C() {} +namespace { - void set_member(int value) { member_ = value; } - int member() const { return member_; } - - void f() { member_ = g(); } - virtual int g() { return 2; } - static char* h(const C &that) { return 0; } - - private: - int member_; +// In C++98 (ISO 14882), section 9.5.1 says that a union cannot have a member +// with a non-trivial ctor, copy ctor, dtor, or assignment operator. Use this +// property to ensure that Entry remains POD. +union Compile_Assert { + NonAllocatingMap<1, 1, 1>::Entry Compile_Assert__entry_must_be_pod; }; -static int i() { - return 3; } } // namespace google_breakpad - -int main(int argc, char **argv) { - google_breakpad::C object; - object.set_member(google_breakpad::i()); - object.f(); - int value = object.g(); - char *nothing = object.h(object); - - return 0; -} diff --git a/toolkit/crashreporter/google-breakpad/src/common/simple_string_dictionary.h b/toolkit/crashreporter/google-breakpad/src/common/simple_string_dictionary.h new file mode 100644 index 000000000000..d2ab17fda543 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/common/simple_string_dictionary.h @@ -0,0 +1,260 @@ +// Copyright (c) 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifndef COMMON_SIMPLE_STRING_DICTIONARY_H_ +#define COMMON_SIMPLE_STRING_DICTIONARY_H_ + +#include +#include + +#include "common/basictypes.h" + +namespace google_breakpad { + +// Opaque type for the serialized representation of a NonAllocatingMap. One is +// created in NonAllocatingMap::Serialize and can be deserialized using one of +// the constructors. +struct SerializedNonAllocatingMap; + +// NonAllocatingMap is an implementation of a map/dictionary collection that +// uses a fixed amount of storage, so that it does not perform any dynamic +// allocations for its operations. +// +// The actual map storage (the Entry) is guaranteed to be POD, so that it can +// be transmitted over various IPC mechanisms. +// +// The template parameters control the amount of storage used for the key, +// value, and map. The KeySize and ValueSize are measured in bytes, not glyphs, +// and includes space for a \0 byte. This gives space for KeySize-1 and +// ValueSize-1 characters in an entry. NumEntries is the total number of +// entries that will fit in the map. +template +class NonAllocatingMap { + public: + // Constant and publicly accessible versions of the template parameters. + static const size_t key_size = KeySize; + static const size_t value_size = ValueSize; + static const size_t num_entries = NumEntries; + + // An Entry object is a single entry in the map. If the key is a 0-length + // NUL-terminated string, the entry is empty. + struct Entry { + char key[KeySize]; + char value[ValueSize]; + + bool is_active() const { + return key[0] != '\0'; + } + }; + + // An Iterator can be used to iterate over all the active entries in a + // NonAllocatingMap. + class Iterator { + public: + explicit Iterator(const NonAllocatingMap& map) + : map_(map), + current_(0) { + } + + // Returns the next entry in the map, or NULL if at the end of the + // collection. + const Entry* Next() { + while (current_ < map_.num_entries) { + const Entry* entry = &map_.entries_[current_++]; + if (entry->is_active()) { + return entry; + } + } + return NULL; + } + + private: + const NonAllocatingMap& map_; + size_t current_; + + DISALLOW_COPY_AND_ASSIGN(Iterator); + }; + + NonAllocatingMap() : entries_() { + } + + NonAllocatingMap(const NonAllocatingMap& other) { + *this = other; + } + + NonAllocatingMap& operator=(const NonAllocatingMap& other) { + assert(other.key_size == key_size); + assert(other.value_size == value_size); + assert(other.num_entries == num_entries); + if (other.key_size == key_size && other.value_size == value_size && + other.num_entries == num_entries) { + memcpy(entries_, other.entries_, sizeof(entries_)); + } + return *this; + } + + // Constructs a map from its serialized form. |map| should be the out + // parameter from Serialize() and |size| should be its return value. + NonAllocatingMap(const SerializedNonAllocatingMap* map, size_t size) { + assert(size == sizeof(entries_)); + if (size == sizeof(entries_)) { + memcpy(entries_, map, size); + } + } + + // Returns the number of active key/value pairs. The upper limit for this + // is NumEntries. + size_t GetCount() const { + size_t count = 0; + for (size_t i = 0; i < num_entries; ++i) { + if (entries_[i].is_active()) { + ++count; + } + } + return count; + } + + // Given |key|, returns its corresponding |value|. |key| must not be NULL. If + // the key is not found, NULL is returned. + const char* GetValueForKey(const char* key) const { + assert(key); + if (!key) + return NULL; + + const Entry* entry = GetConstEntryForKey(key); + if (!entry) + return NULL; + + return entry->value; + } + + // Stores |value| into |key|, replacing the existing value if |key| is + // already present. |key| must not be NULL. If |value| is NULL, the key is + // removed from the map. If there is no more space in the map, then the + // operation silently fails. + void SetKeyValue(const char* key, const char* value) { + if (!value) { + RemoveKey(key); + return; + } + + assert(key); + if (!key) + return; + + // Key must not be an empty string. + assert(key[0] != '\0'); + if (key[0] == '\0') + return; + + Entry* entry = GetEntryForKey(key); + + // If it does not yet exist, attempt to insert it. + if (!entry) { + for (size_t i = 0; i < num_entries; ++i) { + if (!entries_[i].is_active()) { + entry = &entries_[i]; + + strncpy(entry->key, key, key_size); + entry->key[key_size - 1] = '\0'; + + break; + } + } + } + + // If the map is out of space, entry will be NULL. + if (!entry) + return; + +#ifndef NDEBUG + // Sanity check that the key only appears once. + int count = 0; + for (size_t i = 0; i < num_entries; ++i) { + if (strncmp(entries_[i].key, key, key_size) == 0) + ++count; + } + assert(count == 1); +#endif + + strncpy(entry->value, value, value_size); + entry->value[value_size - 1] = '\0'; + } + + // Given |key|, removes any associated value. |key| must not be NULL. If + // the key is not found, this is a noop. + void RemoveKey(const char* key) { + assert(key); + if (!key) + return; + + Entry* entry = GetEntryForKey(key); + if (entry) { + entry->key[0] = '\0'; + entry->value[0] = '\0'; + } + +#ifndef NDEBUG + assert(GetEntryForKey(key) == NULL); +#endif + } + + // Places a serialized version of the map into |map| and returns the size. + // Both of these should be passed to the deserializing constructor. Note that + // the serialized |map| is scoped to the lifetime of the non-serialized + // instance of this class. The |map| can be copied across IPC boundaries. + size_t Serialize(const SerializedNonAllocatingMap** map) const { + *map = reinterpret_cast(entries_); + return sizeof(entries_); + } + + private: + const Entry* GetConstEntryForKey(const char* key) const { + for (size_t i = 0; i < num_entries; ++i) { + if (strncmp(key, entries_[i].key, key_size) == 0) { + return &entries_[i]; + } + } + return NULL; + } + + Entry* GetEntryForKey(const char* key) { + return const_cast(GetConstEntryForKey(key)); + } + + Entry entries_[NumEntries]; +}; + +// For historical reasons this specialized version is available with the same +// size factors as a previous implementation. +typedef NonAllocatingMap<256, 256, 64> SimpleStringDictionary; + +} // namespace google_breakpad + +#endif // COMMON_SIMPLE_STRING_DICTIONARY_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/common/simple_string_dictionary_unittest.cc b/toolkit/crashreporter/google-breakpad/src/common/simple_string_dictionary_unittest.cc new file mode 100644 index 000000000000..34f4b9ef5d1b --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/common/simple_string_dictionary_unittest.cc @@ -0,0 +1,308 @@ +// Copyright (c) 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include "breakpad_googletest_includes.h" +#include "common/simple_string_dictionary.h" + +namespace google_breakpad { + +TEST(NonAllocatingMapTest, Entry) { + typedef NonAllocatingMap<5, 9, 15> TestMap; + TestMap map; + + const TestMap::Entry* entry = TestMap::Iterator(map).Next(); + EXPECT_FALSE(entry); + + // Try setting a key/value and then verify. + map.SetKeyValue("key1", "value1"); + entry = TestMap::Iterator(map).Next(); + ASSERT_TRUE(entry); + EXPECT_STREQ(entry->key, "key1"); + EXPECT_STREQ(entry->value, "value1"); + + // Try setting a new value. + map.SetKeyValue("key1", "value3"); + EXPECT_STREQ(entry->value, "value3"); + + // Make sure the key didn't change. + EXPECT_STREQ(entry->key, "key1"); + + // Clear the entry and verify the key and value are empty strings. + map.RemoveKey("key1"); + EXPECT_FALSE(entry->is_active()); + EXPECT_EQ(strlen(entry->key), 0u); + EXPECT_EQ(strlen(entry->value), 0u); +} + +TEST(NonAllocatingMapTest, SimpleStringDictionary) { + // Make a new dictionary + SimpleStringDictionary dict; + + // Set three distinct values on three keys + dict.SetKeyValue("key1", "value1"); + dict.SetKeyValue("key2", "value2"); + dict.SetKeyValue("key3", "value3"); + + EXPECT_NE(dict.GetValueForKey("key1"), "value1"); + EXPECT_NE(dict.GetValueForKey("key2"), "value2"); + EXPECT_NE(dict.GetValueForKey("key3"), "value3"); + EXPECT_EQ(dict.GetCount(), 3u); + // try an unknown key + EXPECT_FALSE(dict.GetValueForKey("key4")); + + // Remove a key + dict.RemoveKey("key3"); + + // Now make sure it's not there anymore + EXPECT_FALSE(dict.GetValueForKey("key3")); + + // Remove by setting value to NULL + dict.SetKeyValue("key2", NULL); + + // Now make sure it's not there anymore + EXPECT_FALSE(dict.GetValueForKey("key2")); +} + +TEST(NonAllocatingMapTest, CopyAndAssign) { + NonAllocatingMap<10, 10, 10> map; + map.SetKeyValue("one", "a"); + map.SetKeyValue("two", "b"); + map.SetKeyValue("three", "c"); + map.RemoveKey("two"); + EXPECT_EQ(2u, map.GetCount()); + + // Test copy. + NonAllocatingMap<10, 10, 10> map_copy(map); + EXPECT_EQ(2u, map_copy.GetCount()); + EXPECT_STREQ("a", map_copy.GetValueForKey("one")); + EXPECT_STREQ("c", map_copy.GetValueForKey("three")); + map_copy.SetKeyValue("four", "d"); + EXPECT_STREQ("d", map_copy.GetValueForKey("four")); + EXPECT_FALSE(map.GetValueForKey("four")); + + // Test assign. + NonAllocatingMap<10, 10, 10> map_assign; + map_assign = map; + EXPECT_EQ(2u, map_assign.GetCount()); + EXPECT_STREQ("a", map_assign.GetValueForKey("one")); + EXPECT_STREQ("c", map_assign.GetValueForKey("three")); + map_assign.SetKeyValue("four", "d"); + EXPECT_STREQ("d", map_assign.GetValueForKey("four")); + EXPECT_FALSE(map.GetValueForKey("four")); + + map.RemoveKey("one"); + EXPECT_FALSE(map.GetValueForKey("one")); + EXPECT_STREQ("a", map_copy.GetValueForKey("one")); + EXPECT_STREQ("a", map_assign.GetValueForKey("one")); +} + +// Add a bunch of values to the dictionary, remove some entries in the middle, +// and then add more. +TEST(NonAllocatingMapTest, Iterator) { + SimpleStringDictionary* dict = new SimpleStringDictionary(); + ASSERT_TRUE(dict); + + char key[SimpleStringDictionary::key_size]; + char value[SimpleStringDictionary::value_size]; + + const int kDictionaryCapacity = SimpleStringDictionary::num_entries; + const int kPartitionIndex = kDictionaryCapacity - 5; + + // We assume at least this size in the tests below + ASSERT_GE(kDictionaryCapacity, 64); + + // We'll keep track of the number of key/value pairs we think should + // be in the dictionary + int expectedDictionarySize = 0; + + // Set a bunch of key/value pairs like key0/value0, key1/value1, ... + for (int i = 0; i < kPartitionIndex; ++i) { + sprintf(key, "key%d", i); + sprintf(value, "value%d", i); + dict->SetKeyValue(key, value); + } + expectedDictionarySize = kPartitionIndex; + + // set a couple of the keys twice (with the same value) - should be nop + dict->SetKeyValue("key2", "value2"); + dict->SetKeyValue("key4", "value4"); + dict->SetKeyValue("key15", "value15"); + + // Remove some random elements in the middle + dict->RemoveKey("key7"); + dict->RemoveKey("key18"); + dict->RemoveKey("key23"); + dict->RemoveKey("key31"); + expectedDictionarySize -= 4; // we just removed four key/value pairs + + // Set some more key/value pairs like key59/value59, key60/value60, ... + for (int i = kPartitionIndex; i < kDictionaryCapacity; ++i) { + sprintf(key, "key%d", i); + sprintf(value, "value%d", i); + dict->SetKeyValue(key, value); + } + expectedDictionarySize += kDictionaryCapacity - kPartitionIndex; + + // Now create an iterator on the dictionary + SimpleStringDictionary::Iterator iter(*dict); + + // We then verify that it iterates through exactly the number of + // key/value pairs we expect, and that they match one-for-one with what we + // would expect. The ordering of the iteration does not matter... + + // used to keep track of number of occurrences found for key/value pairs + int count[kDictionaryCapacity]; + memset(count, 0, sizeof(count)); + + int totalCount = 0; + + const SimpleStringDictionary::Entry* entry; + while ((entry = iter.Next())) { + totalCount++; + + // Extract keyNumber from a string of the form key + int keyNumber; + sscanf(entry->key, "key%d", &keyNumber); + + // Extract valueNumber from a string of the form value + int valueNumber; + sscanf(entry->value, "value%d", &valueNumber); + + // The value number should equal the key number since that's how we set them + EXPECT_EQ(keyNumber, valueNumber); + + // Key and value numbers should be in proper range: + // 0 <= keyNumber < kDictionaryCapacity + bool isKeyInGoodRange = + (keyNumber >= 0 && keyNumber < kDictionaryCapacity); + bool isValueInGoodRange = + (valueNumber >= 0 && valueNumber < kDictionaryCapacity); + EXPECT_TRUE(isKeyInGoodRange); + EXPECT_TRUE(isValueInGoodRange); + + if (isKeyInGoodRange && isValueInGoodRange) { + ++count[keyNumber]; + } + } + + // Make sure each of the key/value pairs showed up exactly one time, except + // for the ones which we removed. + for (size_t i = 0; i < kDictionaryCapacity; ++i) { + // Skip over key7, key18, key23, and key31, since we removed them + if (!(i == 7 || i == 18 || i == 23 || i == 31)) { + EXPECT_EQ(count[i], 1); + } + } + + // Make sure the number of iterations matches the expected dictionary size. + EXPECT_EQ(totalCount, expectedDictionarySize); +} + + +TEST(NonAllocatingMapTest, AddRemove) { + NonAllocatingMap<5, 7, 6> map; + map.SetKeyValue("rob", "ert"); + map.SetKeyValue("mike", "pink"); + map.SetKeyValue("mark", "allays"); + + EXPECT_EQ(3u, map.GetCount()); + EXPECT_STREQ("ert", map.GetValueForKey("rob")); + EXPECT_STREQ("pink", map.GetValueForKey("mike")); + EXPECT_STREQ("allays", map.GetValueForKey("mark")); + + map.RemoveKey("mike"); + + EXPECT_EQ(2u, map.GetCount()); + EXPECT_FALSE(map.GetValueForKey("mike")); + + map.SetKeyValue("mark", "mal"); + EXPECT_EQ(2u, map.GetCount()); + EXPECT_STREQ("mal", map.GetValueForKey("mark")); + + map.RemoveKey("mark"); + EXPECT_EQ(1u, map.GetCount()); + EXPECT_FALSE(map.GetValueForKey("mark")); +} + +TEST(NonAllocatingMapTest, Serialize) { + typedef NonAllocatingMap<4, 5, 7> TestMap; + TestMap map; + map.SetKeyValue("one", "abc"); + map.SetKeyValue("two", "def"); + map.SetKeyValue("tre", "hig"); + + EXPECT_STREQ("abc", map.GetValueForKey("one")); + EXPECT_STREQ("def", map.GetValueForKey("two")); + EXPECT_STREQ("hig", map.GetValueForKey("tre")); + + const SerializedNonAllocatingMap* serialized; + size_t size = map.Serialize(&serialized); + + SerializedNonAllocatingMap* serialized_copy = + reinterpret_cast(malloc(size)); + ASSERT_TRUE(serialized_copy); + memcpy(serialized_copy, serialized, size); + + TestMap deserialized(serialized_copy, size); + free(serialized_copy); + + EXPECT_EQ(3u, deserialized.GetCount()); + EXPECT_STREQ("abc", deserialized.GetValueForKey("one")); + EXPECT_STREQ("def", deserialized.GetValueForKey("two")); + EXPECT_STREQ("hig", deserialized.GetValueForKey("tre")); +} + +// Running out of space shouldn't crash. +TEST(NonAllocatingMapTest, OutOfSpace) { + NonAllocatingMap<3, 2, 2> map; + map.SetKeyValue("a", "1"); + map.SetKeyValue("b", "2"); + map.SetKeyValue("c", "3"); + EXPECT_EQ(2u, map.GetCount()); + EXPECT_FALSE(map.GetValueForKey("c")); +} + +#ifndef NDEBUG + +TEST(NonAllocatingMapTest, NullKey) { + NonAllocatingMap<4, 6, 6> map; + ASSERT_DEATH(map.SetKeyValue(NULL, "hello"), ""); + + map.SetKeyValue("hi", "there"); + ASSERT_DEATH(map.GetValueForKey(NULL), ""); + EXPECT_STREQ("there", map.GetValueForKey("hi")); + + ASSERT_DEATH(map.GetValueForKey(NULL), ""); + map.RemoveKey("hi"); + EXPECT_EQ(0u, map.GetCount()); +} + +#endif // !NDEBUG + +} // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/common/solaris/guid_creator.cc b/toolkit/crashreporter/google-breakpad/src/common/solaris/guid_creator.cc index c4d58e0aaea1..e9e6c6f5d2b0 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/solaris/guid_creator.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/solaris/guid_creator.cc @@ -66,7 +66,7 @@ const GUIDGenerator kGuidGenerator; bool CreateGUID(GUID *guid) { return kGuidGenerator.CreateGUID(guid); -}; +} // Parse guid to string. bool GUIDToString(const GUID *guid, char *buf, int buf_len) { diff --git a/toolkit/crashreporter/google-breakpad/src/common/stabs_reader.h b/toolkit/crashreporter/google-breakpad/src/common/stabs_reader.h index d89afc0013b7..98ee2dd53b40 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/stabs_reader.h +++ b/toolkit/crashreporter/google-breakpad/src/common/stabs_reader.h @@ -53,11 +53,10 @@ #include #endif -#ifdef HAVE_A_OUT_H -#include -#endif #ifdef HAVE_MACH_O_NLIST_H #include +#elif defined(HAVE_A_OUT_H) +#include #endif #include diff --git a/toolkit/crashreporter/google-breakpad/src/common/stabs_to_module.cc b/toolkit/crashreporter/google-breakpad/src/common/stabs_to_module.cc index e59aebdba7af..0a83cf21cb40 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/stabs_to_module.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/stabs_to_module.cc @@ -90,9 +90,7 @@ bool StabsToModule::EndCompilationUnit(uint64_t address) { bool StabsToModule::StartFunction(const string &name, uint64_t address) { assert(!current_function_); - Module::Function *f = new Module::Function; - f->name = Demangle(name); - f->address = address; + Module::Function *f = new Module::Function(Demangle(name), address); f->size = 0; // We compute this in StabsToModule::Finalize(). f->parameter_size = 0; // We don't provide this information. current_function_ = f; @@ -133,7 +131,7 @@ bool StabsToModule::Line(uint64_t address, const char *name, int number) { } bool StabsToModule::Extern(const string &name, uint64_t address) { - Module::Extern *ext = new Module::Extern; + Module::Extern *ext = new Module::Extern(address); // Older libstdc++ demangle implementations can crash on unexpected // input, so be careful about what gets passed in. if (name.compare(0, 3, "__Z") == 0) { @@ -143,7 +141,6 @@ bool StabsToModule::Extern(const string &name, uint64_t address) { } else { ext->name = name; } - ext->address = address; module_->AddExtern(ext); return true; } diff --git a/toolkit/crashreporter/google-breakpad/src/common/string_conversion.cc b/toolkit/crashreporter/google-breakpad/src/common/string_conversion.cc index c4107faf3e7c..9c0d623fc104 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/string_conversion.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/string_conversion.cc @@ -120,7 +120,7 @@ static inline uint16_t Swap(uint16_t value) { string UTF16ToUTF8(const vector &in, bool swap) { const UTF16 *source_ptr = &in[0]; - scoped_ptr source_buffer; + scoped_array source_buffer; // If we're to swap, we need to make a local copy and swap each byte pair if (swap) { @@ -140,7 +140,7 @@ string UTF16ToUTF8(const vector &in, bool swap) { scoped_array target_buffer(new UTF8[target_capacity]); UTF8 *target_ptr = target_buffer.get(); UTF8 *target_end_ptr = target_ptr + target_capacity; - ConversionResult result = ConvertUTF16toUTF8(&source_ptr, source_end_ptr, + ConversionResult result = ConvertUTF16toUTF8(&source_ptr, source_end_ptr, &target_ptr, target_end_ptr, strictConversion); diff --git a/toolkit/crashreporter/google-breakpad/src/common/tests/file_utils.cc b/toolkit/crashreporter/google-breakpad/src/common/tests/file_utils.cc index 80a6b6507357..1c041777cba6 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/tests/file_utils.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/tests/file_utils.cc @@ -51,7 +51,7 @@ bool CopyFile(const char* from_path, const char* to_path) { int outfile = HANDLE_EINTR(creat(to_path, 0666)); if (outfile < 0) { perror("creat"); - if (HANDLE_EINTR(close(infile)) < 0) { + if (IGNORE_EINTR(close(infile)) < 0) { perror("close"); } return false; @@ -84,11 +84,11 @@ bool CopyFile(const char* from_path, const char* to_path) { } while (bytes_written_per_read < bytes_read); } - if (HANDLE_EINTR(close(infile)) == -1) { + if (IGNORE_EINTR(close(infile)) == -1) { perror("close"); result = false; } - if (HANDLE_EINTR(close(outfile)) == -1) { + if (IGNORE_EINTR(close(outfile)) == -1) { perror("close"); result = false; } @@ -112,7 +112,7 @@ bool ReadFile(const char* path, void* buffer, ssize_t* buffer_size) { ok = false; } } - if (HANDLE_EINTR(close(fd)) == -1) { + if (IGNORE_EINTR(close(fd)) == -1) { perror("close"); ok = false; } @@ -143,7 +143,7 @@ bool WriteFile(const char* path, const void* buffer, size_t buffer_size) { bytes_written_total += bytes_written_partial; } } - if (HANDLE_EINTR(close(fd)) == -1) { + if (IGNORE_EINTR(close(fd)) == -1) { perror("close"); ok = false; } diff --git a/toolkit/crashreporter/google-breakpad/src/common/unique_string.cc b/toolkit/crashreporter/google-breakpad/src/common/unique_string.cc deleted file mode 100644 index 2ff60fa285a0..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/common/unique_string.cc +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright (c) 2013 Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#include -#include - -#include -#include - -#include "common/unique_string.h" - -namespace google_breakpad { - -/////////////////////////////////////////////////////////////////// -// UniqueString -// -class UniqueString { - public: - UniqueString(string str) { str_ = strdup(str.c_str()); } - ~UniqueString() { free(reinterpret_cast(const_cast(str_))); } - const char* str_; -}; - -class UniqueStringUniverse { - public: - UniqueStringUniverse() {}; - const UniqueString* FindOrCopy(string str) { - std::map::iterator it = map_.find(str); - if (it == map_.end()) { - UniqueString* ustr = new UniqueString(str); - map_[str] = ustr; - return ustr; - } else { - return it->second; - } - } - private: - std::map map_; -}; - -// -/////////////////////////////////////////////////////////////////// - - -static UniqueStringUniverse* sUSU = NULL; - - -// This isn't threadsafe. -const UniqueString* ToUniqueString(string str) { - if (!sUSU) { - sUSU = new UniqueStringUniverse(); - } - return sUSU->FindOrCopy(str); -} - -// This isn't threadsafe. -const UniqueString* ToUniqueString_n(const char* str, size_t n) { - if (!sUSU) { - sUSU = new UniqueStringUniverse(); - } - string key(str, n); - return sUSU->FindOrCopy(key); -} - -const char Index(const UniqueString* us, int ix) -{ - return us->str_[ix]; -} - -const char* const FromUniqueString(const UniqueString* ustr) -{ - return ustr->str_; -} - -int StrcmpUniqueString(const UniqueString* us1, const UniqueString* us2) { - return strcmp(us1->str_, us2->str_); -} - -bool LessThan_UniqueString(const UniqueString* us1, const UniqueString* us2) { - int r = StrcmpUniqueString(us1, us2); - return r < 0; -} - -} // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/common/unique_string.h b/toolkit/crashreporter/google-breakpad/src/common/unique_string.h deleted file mode 100644 index 9db3d7519621..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/common/unique_string.h +++ /dev/null @@ -1,362 +0,0 @@ -// Copyright (c) 2013 Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef COMMON_UNIQUE_STRING_H_ -#define COMMON_UNIQUE_STRING_H_ - -#include -#include -#include "common/using_std_string.h" - -namespace google_breakpad { - -// Abstract type -class UniqueString; - -// Unique-ify a string. |ToUniqueString| can never return NULL. -const UniqueString* ToUniqueString(string); - -// ditto, starting instead from the first n characters of a C string -const UniqueString* ToUniqueString_n(const char* str, size_t n); - -// Pull chars out of the string. No range checking. -const char Index(const UniqueString*, int); - -// Get the contained C string (debugging only) -const char* const FromUniqueString(const UniqueString*); - -// Do a strcmp-style comparison on the contained C string -int StrcmpUniqueString(const UniqueString*, const UniqueString*); - -// Less-than comparison of two UniqueStrings, usable for std::sort. -bool LessThan_UniqueString(const UniqueString*, const UniqueString*); - -// Some handy pre-uniqified strings. Z is an escape character: -// ZS '$' -// ZD '.' -// Zeq '=' -// Zplus '+' -// Zstar '*' -// Zslash '/' -// Zpercent '%' -// Zat '@' -// Zcaret '^' - -// Note that ustr__empty and (UniqueString*)NULL are considered -// to be different. -// -// Unfortunately these have to be written as functions so as to -// make them safe to use in static initialisers. - -// "" -inline static const UniqueString* ustr__empty() { - static const UniqueString* us = NULL; - if (!us) us = ToUniqueString(""); - return us; -} - -// "$eip" -inline static const UniqueString* ustr__ZSeip() { - static const UniqueString* us = NULL; - if (!us) us = ToUniqueString("$eip"); - return us; -} - -// "$ebp" -inline static const UniqueString* ustr__ZSebp() { - static const UniqueString* us = NULL; - if (!us) us = ToUniqueString("$ebp"); - return us; -} - -// "$esp" -inline static const UniqueString* ustr__ZSesp() { - static const UniqueString* us = NULL; - if (!us) us = ToUniqueString("$esp"); - return us; -} - -// "$ebx" -inline static const UniqueString* ustr__ZSebx() { - static const UniqueString* us = NULL; - if (!us) us = ToUniqueString("$ebx"); - return us; -} - -// "$esi" -inline static const UniqueString* ustr__ZSesi() { - static const UniqueString* us = NULL; - if (!us) us = ToUniqueString("$esi"); - return us; -} - -// "$edi" -inline static const UniqueString* ustr__ZSedi() { - static const UniqueString* us = NULL; - if (!us) us = ToUniqueString("$edi"); - return us; -} - -// ".cbCalleeParams" -inline static const UniqueString* ustr__ZDcbCalleeParams() { - static const UniqueString* us = NULL; - if (!us) us = ToUniqueString(".cbCalleeParams"); - return us; -} - -// ".cbSavedRegs" -inline static const UniqueString* ustr__ZDcbSavedRegs() { - static const UniqueString* us = NULL; - if (!us) us = ToUniqueString(".cbSavedRegs"); - return us; -} - -// ".cbLocals" -inline static const UniqueString* ustr__ZDcbLocals() { - static const UniqueString* us = NULL; - if (!us) us = ToUniqueString(".cbLocals"); - return us; -} - -// ".raSearchStart" -inline static const UniqueString* ustr__ZDraSearchStart() { - static const UniqueString* us = NULL; - if (!us) us = ToUniqueString(".raSearchStart"); - return us; -} - -// ".raSearch" -inline static const UniqueString* ustr__ZDraSearch() { - static const UniqueString* us = NULL; - if (!us) us = ToUniqueString(".raSearch"); - return us; -} - -// ".cbParams" -inline static const UniqueString* ustr__ZDcbParams() { - static const UniqueString* us = NULL; - if (!us) us = ToUniqueString(".cbParams"); - return us; -} - -// "+" -inline static const UniqueString* ustr__Zplus() { - static const UniqueString* us = NULL; - if (!us) us = ToUniqueString("+"); - return us; -} - -// "-" -inline static const UniqueString* ustr__Zminus() { - static const UniqueString* us = NULL; - if (!us) us = ToUniqueString("-"); - return us; -} - -// "*" -inline static const UniqueString* ustr__Zstar() { - static const UniqueString* us = NULL; - if (!us) us = ToUniqueString("*"); - return us; -} - -// "/" -inline static const UniqueString* ustr__Zslash() { - static const UniqueString* us = NULL; - if (!us) us = ToUniqueString("/"); - return us; -} - -// "%" -inline static const UniqueString* ustr__Zpercent() { - static const UniqueString* us = NULL; - if (!us) us = ToUniqueString("%"); - return us; -} - -// "@" -inline static const UniqueString* ustr__Zat() { - static const UniqueString* us = NULL; - if (!us) us = ToUniqueString("@"); - return us; -} - -// "^" -inline static const UniqueString* ustr__Zcaret() { - static const UniqueString* us = NULL; - if (!us) us = ToUniqueString("^"); - return us; -} - -// "=" -inline static const UniqueString* ustr__Zeq() { - static const UniqueString* us = NULL; - if (!us) us = ToUniqueString("="); - return us; -} - -// ".cfa" -inline static const UniqueString* ustr__ZDcfa() { - static const UniqueString* us = NULL; - if (!us) us = ToUniqueString(".cfa"); - return us; -} - -// ".ra" -inline static const UniqueString* ustr__ZDra() { - static const UniqueString* us = NULL; - if (!us) us = ToUniqueString(".ra"); - return us; -} - -// "pc" -inline static const UniqueString* ustr__pc() { - static const UniqueString* us = NULL; - if (!us) us = ToUniqueString("pc"); - return us; -} - -// "lr" -inline static const UniqueString* ustr__lr() { - static const UniqueString* us = NULL; - if (!us) us = ToUniqueString("lr"); - return us; -} - -// "sp" -inline static const UniqueString* ustr__sp() { - static const UniqueString* us = NULL; - if (!us) us = ToUniqueString("sp"); - return us; -} - -template -class UniqueStringMap -{ - private: - static const int N_FIXED = 10; - - public: - UniqueStringMap() : n_fixed_(0), n_sets_(0), n_gets_(0), n_clears_(0) {}; - ~UniqueStringMap() {}; - - // Empty out the map. - void clear() { - ++n_clears_; - map_.clear(); - n_fixed_ = 0; - } - - // Do "map[ix] = v". - void set(const UniqueString* ix, ValueType v) { - ++n_sets_; - int i; - for (i = 0; i < n_fixed_; ++i) { - if (fixed_keys_[i] == ix) { - fixed_vals_[i] = v; - return; - } - } - if (n_fixed_ < N_FIXED) { - i = n_fixed_; - fixed_keys_[i] = ix; - fixed_vals_[i] = v; - ++n_fixed_; - } else { - map_[ix] = v; - } - } - - // Lookup 'ix' in the map, and also return a success/fail boolean. - ValueType get(/*OUT*/bool* have, const UniqueString* ix) const { - ++n_gets_; - int i; - for (i = 0; i < n_fixed_; ++i) { - if (fixed_keys_[i] == ix) { - *have = true; - return fixed_vals_[i]; - } - } - typename std::map::const_iterator it - = map_.find(ix); - if (it == map_.end()) { - *have = false; - return ValueType(); - } else { - *have = true; - return it->second; - } - }; - - // Lookup 'ix' in the map, and return zero if it is not present. - ValueType get(const UniqueString* ix) const { - ++n_gets_; - bool found; - ValueType v = get(&found, ix); - return found ? v : ValueType(); - } - - // Find out whether 'ix' is in the map. - bool have(const UniqueString* ix) const { - ++n_gets_; - bool found; - (void)get(&found, ix); - return found; - } - - // Copy the contents to a std::map, generally for testing. - void copy_to_map(std::map* m) const { - m->clear(); - int i; - for (i = 0; i < n_fixed_; ++i) { - (*m)[fixed_keys_[i]] = fixed_vals_[i]; - } - m->insert(map_.begin(), map_.end()); - } - - // Note that users of this class rely on having also a sane - // assignment operator. The default one is OK, though. - // AFAICT there are no uses of the copy constructor, but if - // there were, the default one would also suffice. - - private: - // Quick (hopefully) cache - const UniqueString* fixed_keys_[N_FIXED]; - ValueType fixed_vals_[N_FIXED]; - int n_fixed_; // 0 .. N_FIXED inclusive - // Fallback storage when the cache is filled - std::map map_; - - // For tracking usage stats. - mutable int n_sets_, n_gets_, n_clears_; -}; - -} // namespace google_breakpad - -#endif // COMMON_UNIQUE_STRING_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/logging_striptest_main.cc b/toolkit/crashreporter/google-breakpad/src/common/unordered.h similarity index 62% rename from toolkit/crashreporter/google-breakpad/src/third_party/glog/src/logging_striptest_main.cc rename to toolkit/crashreporter/google-breakpad/src/common/unordered.h index 17a582f543e1..ec665cc026d7 100644 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/logging_striptest_main.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/unordered.h @@ -1,4 +1,4 @@ -// Copyright (c) 2007, Google Inc. +// Copyright (c) 2010 Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -26,43 +26,37 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: Sergey Ioffe -// The common part of the striplog tests. +// Include this file to use unordered_map and unordered_set. If tr1 +// or C++11 is not available, you can switch to using hash_set and +// hash_map by defining BP_USE_HASH_SET. -#include -#include -#include -#include "glog/logging.h" -#include "base/commandlineflags.h" -#include "config.h" +#ifndef COMMON_UNORDERED_H_ +#define COMMON_UNORDERED_H_ -DECLARE_bool(logtostderr); +#if defined(BP_USE_HASH_SET) +#include +#include -using std::string; -using namespace GOOGLE_NAMESPACE; +// For hash. +#include "util/hash/hash.h" -int CheckNoReturn(bool b) { - string s; - if (b) { - LOG(FATAL) << "Fatal"; - } else { - return 0; - } -} +template > +struct unordered_map : public hash_map {}; +template > +struct unordered_set : public hash_set {}; -struct A { }; -std::ostream &operator<<(std::ostream &str, const A&) {return str;} +#elif defined(_LIBCPP_VERSION) // c++11 +#include +#include +using std::unordered_map; +using std::unordered_set; -int main(int argc, char* argv[]) { - FLAGS_logtostderr = true; - InitGoogleLogging(argv[0]); - LOG(INFO) << "TESTMESSAGE INFO"; - LOG(WARNING) << 2 << "something" << "TESTMESSAGE WARNING" - << 1 << 'c' << A() << std::endl; - LOG(ERROR) << "TESTMESSAGE ERROR"; - bool flag = true; - (flag ? LOG(INFO) : LOG(ERROR)) << "TESTMESSAGE COND"; - LOG(FATAL) << "TESTMESSAGE FATAL"; -} +#else // Fallback to tr1::unordered +#include +#include +using std::tr1::unordered_map; +using std::tr1::unordered_set; +#endif + +#endif // COMMON_UNORDERED_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/common/windows/common_windows.gyp b/toolkit/crashreporter/google-breakpad/src/common/windows/common_windows.gyp new file mode 100644 index 000000000000..c98333a3444a --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/common/windows/common_windows.gyp @@ -0,0 +1,105 @@ +# Copyright 2013 Google Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +{ + 'includes': [ + '../../build/common.gypi', + ], + 'targets': [ + { + 'target_name': 'dia_sdk', + 'type': 'none', + 'all_dependent_settings': { + 'include_dirs': [ + '<(DEPTH)', + '$(VSInstallDir)/DIA SDK/include', + ], + 'msvs_settings': { + 'VCLinkerTool': { + 'AdditionalDependencies': [ + 'diaguids.lib', + 'imagehlp.lib', + ], + }, + }, + 'configurations': { + 'x86_Base': { + 'msvs_settings': { + 'VCLinkerTool': { + 'AdditionalLibraryDirectories': + ['$(VSInstallDir)/DIA SDK/lib'], + }, + }, + }, + 'x64_Base': { + 'msvs_settings': { + 'VCLinkerTool': { + 'AdditionalLibraryDirectories': + ['$(VSInstallDir)/DIA SDK/lib/amd64'], + }, + }, + }, + }, + }, + }, + { + 'target_name': 'common_windows_lib', + 'type': 'static_library', + 'sources': [ + 'dia_util.cc', + 'dia_util.h', + 'guid_string.cc', + 'guid_string.h', + 'http_upload.cc', + 'http_upload.h', + 'omap.cc', + 'omap.h', + 'omap_internal.h', + 'pdb_source_line_writer.cc', + 'pdb_source_line_writer.h', + 'string_utils.cc', + 'string_utils-inl.h', + ], + 'dependencies': [ + 'dia_sdk', + ], + }, + { + 'target_name': 'common_windows_unittests', + 'type': 'executable', + 'sources': [ + 'omap_unittest.cc', + ], + 'dependencies': [ + '<(DEPTH)/client/windows/unittests/testing.gyp:gmock', + '<(DEPTH)/client/windows/unittests/testing.gyp:gtest', + 'common_windows_lib', + ], + }, + ], +} diff --git a/toolkit/crashreporter/google-breakpad/src/common/windows/dia_util.cc b/toolkit/crashreporter/google-breakpad/src/common/windows/dia_util.cc new file mode 100644 index 000000000000..ed8cb5b65811 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/common/windows/dia_util.cc @@ -0,0 +1,92 @@ +// Copyright 2013 Google Inc. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include "common/windows/dia_util.h" + +#include + +namespace google_breakpad { + +bool FindDebugStream(const wchar_t* name, + IDiaSession* session, + IDiaEnumDebugStreamData** debug_stream) { + CComPtr enum_debug_streams; + if (FAILED(session->getEnumDebugStreams(&enum_debug_streams))) { + fprintf(stderr, "IDiaSession::getEnumDebugStreams failed\n"); + return false; + } + + CComPtr temp_debug_stream; + ULONG fetched = 0; + while (SUCCEEDED(enum_debug_streams->Next(1, &temp_debug_stream, &fetched)) && + fetched == 1) { + CComBSTR stream_name; + if (FAILED(temp_debug_stream->get_name(&stream_name))) { + fprintf(stderr, "IDiaEnumDebugStreamData::get_name failed\n"); + return false; + } + + // Found the stream? + if (wcsncmp((LPWSTR)stream_name, name, stream_name.Length()) == 0) { + *debug_stream = temp_debug_stream.Detach(); + return true; + } + + temp_debug_stream.Release(); + } + + // No table was found. + return false; +} + +bool FindTable(REFIID iid, IDiaSession* session, void** table) { + // Get the table enumerator. + CComPtr enum_tables; + if (FAILED(session->getEnumTables(&enum_tables))) { + fprintf(stderr, "IDiaSession::getEnumTables failed\n"); + return false; + } + + // Iterate through the tables. + CComPtr temp_table; + ULONG fetched = 0; + while (SUCCEEDED(enum_tables->Next(1, &temp_table, &fetched)) && + fetched == 1) { + void* temp = NULL; + if (SUCCEEDED(temp_table->QueryInterface(iid, &temp))) { + *table = temp; + return true; + } + temp_table.Release(); + } + + // The table was not found. + return false; +} + +} // namespace google_breakpad \ No newline at end of file diff --git a/toolkit/crashreporter/google-breakpad/src/common/windows/dia_util.h b/toolkit/crashreporter/google-breakpad/src/common/windows/dia_util.h new file mode 100644 index 000000000000..b9e0df2d567d --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/common/windows/dia_util.h @@ -0,0 +1,64 @@ +// Copyright 2013 Google Inc. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Utilities for loading debug streams and tables from a PDB file. + +#ifndef COMMON_WINDOWS_DIA_UTIL_H_ +#define COMMON_WINDOWS_DIA_UTIL_H_ + +#include +#include + +namespace google_breakpad { + +// Find the debug stream of the given |name| in the given |session|. Returns +// true on success, false on error of if the stream does not exist. On success +// the stream will be returned via |debug_stream|. +bool FindDebugStream(const wchar_t* name, + IDiaSession* session, + IDiaEnumDebugStreamData** debug_stream); + +// Finds the first table implementing the COM interface with ID |iid| in the +// given |session|. Returns true on success, false on error or if no such +// table is found. On success the table will be returned via |table|. +bool FindTable(REFIID iid, IDiaSession* session, void** table); + +// A templated version of FindTable. Finds the first table implementing type +// |InterfaceType| in the given |session|. Returns true on success, false on +// error or if no such table is found. On success the table will be returned via +// |table|. +template +bool FindTable(IDiaSession* session, InterfaceType** table) { + return FindTable(__uuidof(InterfaceType), + session, + reinterpret_cast(table)); +} + +} // namespace google_breakpad + +#endif // COMMON_WINDOWS_DIA_UTIL_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/common/windows/guid_string.h b/toolkit/crashreporter/google-breakpad/src/common/windows/guid_string.h index 57716e504a73..48a5c1d3708f 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/windows/guid_string.h +++ b/toolkit/crashreporter/google-breakpad/src/common/windows/guid_string.h @@ -29,8 +29,8 @@ // guid_string.cc: Convert GUIDs to strings. -#ifndef COMMON_WINDOWS_GUID_STRING_H__ -#define COMMON_WINDOWS_GUID_STRING_H__ +#ifndef COMMON_WINDOWS_GUID_STRING_H_ +#define COMMON_WINDOWS_GUID_STRING_H_ #include @@ -55,4 +55,4 @@ class GUIDString { } // namespace google_breakpad -#endif // COMMON_WINDOWS_GUID_STRING_H__ +#endif // COMMON_WINDOWS_GUID_STRING_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/common/windows/http_upload.cc b/toolkit/crashreporter/google-breakpad/src/common/windows/http_upload.cc index a28b21fc60d8..7676bdc5a3c9 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/windows/http_upload.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/windows/http_upload.cc @@ -30,7 +30,7 @@ #include // Disable exception handler warnings. -#pragma warning( disable : 4530 ) +#pragma warning(disable:4530) #include @@ -161,7 +161,7 @@ bool HTTPUpload::SendRequest(const wstring &url, fwprintf(stderr, L"Could not unset receive timeout, continuing...\n"); } } - + if (!HttpSendRequest(request.get(), NULL, 0, const_cast(request_body.data()), static_cast(request_body.size()))) { @@ -213,8 +213,7 @@ bool HTTPUpload::ReadResponse(HINTERNET request, wstring *response) { BOOL return_code; while (((return_code = InternetQueryDataAvailable(request, &bytes_available, - 0, 0)) != 0) && bytes_available > 0) { - + 0, 0)) != 0) && bytes_available > 0) { vector response_buffer(bytes_available); DWORD size_read; @@ -323,6 +322,7 @@ bool HTTPUpload::GenerateRequestBody(const map ¶meters, // static bool HTTPUpload::GetFileContents(const wstring &filename, vector *contents) { + bool rv = false; // The "open" method on pre-MSVC8 ifstream implementations doesn't accept a // wchar_t* filename, so use _wfopen directly in that case. For VC8 and // later, _wfopen has been deprecated in favor of _wfopen_s, which does @@ -338,15 +338,21 @@ bool HTTPUpload::GetFileContents(const wstring &filename, if (file.is_open()) { file.seekg(0, ios::end); std::streamoff length = file.tellg(); - contents->resize(length); - if (length != 0) { - file.seekg(0, ios::beg); - file.read(&((*contents)[0]), length); + // Check for loss of data when converting lenght from std::streamoff into + // std::vector::size_type + std::vector::size_type vector_size = + static_cast::size_type>(length); + if (static_cast(vector_size) == length) { + contents->resize(vector_size); + if (length != 0) { + file.seekg(0, ios::beg); + file.read(&((*contents)[0]), length); + } + rv = true; } file.close(); - return true; } - return false; + return rv; } // static diff --git a/toolkit/crashreporter/google-breakpad/src/common/windows/http_upload.h b/toolkit/crashreporter/google-breakpad/src/common/windows/http_upload.h index 5a98aad35de6..f8d48cb1b547 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/windows/http_upload.h +++ b/toolkit/crashreporter/google-breakpad/src/common/windows/http_upload.h @@ -31,12 +31,12 @@ // request using wininet. It currently supports requests that contain // a set of string parameters (key/value pairs), and a file to upload. -#ifndef COMMON_WINDOWS_HTTP_UPLOAD_H__ -#define COMMON_WINDOWS_HTTP_UPLOAD_H__ +#ifndef COMMON_WINDOWS_HTTP_UPLOAD_H_ +#define COMMON_WINDOWS_HTTP_UPLOAD_H_ -#pragma warning( push ) +#pragma warning(push) // Disable exception handler warnings. -#pragma warning( disable : 4530 ) +#pragma warning(disable : 4530) #include #include @@ -124,6 +124,6 @@ class HTTPUpload { } // namespace google_breakpad -#pragma warning( pop ) +#pragma warning(pop) -#endif // COMMON_WINDOWS_HTTP_UPLOAD_H__ +#endif // COMMON_WINDOWS_HTTP_UPLOAD_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/common/windows/omap.cc b/toolkit/crashreporter/google-breakpad/src/common/windows/omap.cc new file mode 100644 index 000000000000..67b9206559cf --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/common/windows/omap.cc @@ -0,0 +1,694 @@ +// Copyright 2013 Google Inc. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// This contains a suite of tools for transforming symbol information when +// when that information has been extracted from a PDB containing OMAP +// information. + +// OMAP information is a lightweight description of a mapping between two +// address spaces. It consists of two streams, each of them a vector 2-tuples. +// The OMAPTO stream contains tuples of the form +// +// (RVA in transformed image, RVA in original image) +// +// while the OMAPFROM stream contains tuples of the form +// +// (RVA in original image, RVA in transformed image) +// +// The entries in each vector are sorted by the first value of the tuple, and +// the lengths associated with a mapping are implicit as the distance between +// two successive addresses in the vector. + +// Consider a trivial 10-byte function described by the following symbol: +// +// Function: RVA 0x00001000, length 10, "foo" +// +// Now consider the same function, but with 5-bytes of instrumentation injected +// at offset 5. The OMAP streams describing this would look like: +// +// OMAPTO : [ [0x00001000, 0x00001000], +// [0x00001005, 0xFFFFFFFF], +// [0x0000100a, 0x00001005] ] +// OMAPFROM: [ [0x00001000, 0x00001000], +// [0x00001005, 0x0000100a] ] +// +// In this case the injected code has been marked as not originating in the +// source image, and thus it will have no symbol information at all. However, +// the injected code may also be associated with an original address range; +// for example, when prepending instrumentation to a basic block the +// instrumentation can be labelled as originating from the same source BB such +// that symbol resolution will still find the appropriate source code line +// number. In this case the OMAP stream would look like: +// +// OMAPTO : [ [0x00001000, 0x00001000], +// [0x00001005, 0x00001005], +// [0x0000100a, 0x00001005] ] +// OMAPFROM: [ [0x00001000, 0x00001000], +// [0x00001005, 0x0000100a] ] +// +// Suppose we asked DIA to lookup the symbol at location 0x0000100a of the +// instrumented image. It would first run this through the OMAPTO table and +// translate that address to 0x00001005. It would then lookup the symbol +// at that address and return the symbol for the function "foo". This is the +// correct result. +// +// However, if we query DIA for the length and address of the symbol it will +// tell us that it has length 10 and is at RVA 0x00001000. The location is +// correct, but the length doesn't take into account the 5-bytes of injected +// code. Symbol resolution works (starting from an instrumented address, +// mapping to an original address, and looking up a symbol), but the symbol +// metadata is incorrect. +// +// If we dump the symbols using DIA they will have their addresses +// appropriately transformed and reflect positions in the instrumented image. +// However, if we try to do a lookup using those symbols resolution can fail. +// For example, the address 0x0000100a will not map to the symbol for "foo", +// because DIA tells us it is at location 0x00001000 (correct) with length +// 10 (incorrect). The problem is one of order of operations: in this case +// we're attempting symbol resolution by looking up an instrumented address +// in the table of translated symbols. +// +// One way to handle this is to dump the OMAP information as part of the +// breakpad symbols. This requires the rest of the toolchain to be aware of +// OMAP information and to use it when present prior to performing lookup. The +// other option is to properly transform the symbols (updating length as well as +// position) so that resolution will work as expected for translated addresses. +// This is transparent to the rest of the toolchain. + +#include "common/windows/omap.h" + +#include + +#include +#include +#include + +#include "common/windows/dia_util.h" + +namespace google_breakpad { + +namespace { + +static const wchar_t kOmapToDebugStreamName[] = L"OMAPTO"; +static const wchar_t kOmapFromDebugStreamName[] = L"OMAPFROM"; + +// Dependending on where this is used in breakpad we sometimes get min/max from +// windef, and other times from algorithm. To get around this we simply +// define our own min/max functions. +template +const T& Min(const T& t1, const T& t2) { return t1 < t2 ? t1 : t2; } +template +const T& Max(const T& t1, const T& t2) { return t1 > t2 ? t1 : t2; } + +// It makes things more readable to have two different OMAP types. We cast +// normal OMAPs into these. They must be the same size as the OMAP structure +// for this to work, hence the static asserts. +struct OmapOrigToTran { + DWORD rva_original; + DWORD rva_transformed; +}; +struct OmapTranToOrig { + DWORD rva_transformed; + DWORD rva_original; +}; +static_assert(sizeof(OmapOrigToTran) == sizeof(OMAP), + "OmapOrigToTran must have same size as OMAP."); +static_assert(sizeof(OmapTranToOrig) == sizeof(OMAP), + "OmapTranToOrig must have same size as OMAP."); +typedef std::vector OmapFromTable; +typedef std::vector OmapToTable; + +// Used for sorting and searching through a Mapping. +bool MappedRangeOriginalLess(const MappedRange& lhs, const MappedRange& rhs) { + if (lhs.rva_original < rhs.rva_original) + return true; + if (lhs.rva_original > rhs.rva_original) + return false; + return lhs.length < rhs.length; +} +bool MappedRangeMappedLess(const MappedRange& lhs, const MappedRange& rhs) { + if (lhs.rva_transformed < rhs.rva_transformed) + return true; + if (lhs.rva_transformed > rhs.rva_transformed) + return false; + return lhs.length < rhs.length; +} + +// Used for searching through the EndpointIndexMap. +bool EndpointIndexLess(const EndpointIndex& ei1, const EndpointIndex& ei2) { + return ei1.endpoint < ei2.endpoint; +} + +// Finds the debug stream with the given |name| in the given |session|, and +// populates |table| with its contents. Casts the data directly into OMAP +// structs. +bool FindAndLoadOmapTable(const wchar_t* name, + IDiaSession* session, + OmapTable* table) { + assert(name != NULL); + assert(session != NULL); + assert(table != NULL); + + CComPtr stream; + if (!FindDebugStream(name, session, &stream)) + return false; + assert(stream.p != NULL); + + LONG count = 0; + if (FAILED(stream->get_Count(&count))) { + fprintf(stderr, "IDiaEnumDebugStreamData::get_Count failed for stream " + "\"%ws\"\n", name); + return false; + } + + // Get the length of the stream in bytes. + DWORD bytes_read = 0; + ULONG count_read = 0; + if (FAILED(stream->Next(count, 0, &bytes_read, NULL, &count_read))) { + fprintf(stderr, "IDiaEnumDebugStreamData::Next failed while reading " + "length of stream \"%ws\"\n", name); + return false; + } + + // Ensure it's consistent with the OMAP data type. + DWORD bytes_expected = count * sizeof(OmapTable::value_type); + if (count * sizeof(OmapTable::value_type) != bytes_read) { + fprintf(stderr, "DIA debug stream \"%ws\" has an unexpected length", name); + return false; + } + + // Read the table. + table->resize(count); + bytes_read = 0; + count_read = 0; + if (FAILED(stream->Next(count, bytes_expected, &bytes_read, + reinterpret_cast(&table->at(0)), + &count_read))) { + fprintf(stderr, "IDiaEnumDebugStreamData::Next failed while reading " + "data from stream \"%ws\"\n"); + return false; + } + + return true; +} + +// This determines the original image length by looking through the segment +// table. +bool GetOriginalImageLength(IDiaSession* session, DWORD* image_length) { + assert(session != NULL); + assert(image_length != NULL); + + CComPtr enum_segments; + if (!FindTable(session, &enum_segments)) + return false; + assert(enum_segments.p != NULL); + + DWORD temp_image_length = 0; + CComPtr segment; + ULONG fetched = 0; + while (SUCCEEDED(enum_segments->Next(1, &segment, &fetched)) && + fetched == 1) { + assert(segment.p != NULL); + + DWORD rva = 0; + DWORD length = 0; + DWORD frame = 0; + if (FAILED(segment->get_relativeVirtualAddress(&rva)) || + FAILED(segment->get_length(&length)) || + FAILED(segment->get_frame(&frame))) { + fprintf(stderr, "Failed to get basic properties for IDiaSegment\n"); + return false; + } + + if (frame > 0) { + DWORD segment_end = rva + length; + if (segment_end > temp_image_length) + temp_image_length = segment_end; + } + segment.Release(); + } + + *image_length = temp_image_length; + return true; +} + +// Detects regions of the original image that have been removed in the +// transformed image, and sets the 'removed' property on all mapped ranges +// immediately preceding a gap. The mapped ranges must be sorted by +// 'rva_original'. +void FillInRemovedLengths(Mapping* mapping) { + assert(mapping != NULL); + + // Find and fill gaps. We do this with two sweeps. We first sweep forward + // looking for gaps. When we identify a gap we then sweep forward with a + // second scan and set the 'removed' property for any intervals that + // immediately precede the gap. + // + // Gaps are typically between two successive intervals, but not always: + // + // Range 1: --------------- + // Range 2: ------- + // Range 3: ------------- + // Gap : ****** + // + // In the above example the gap is between range 1 and range 3. A forward + // sweep finds the gap, and a second forward sweep identifies that range 1 + // immediately precedes the gap and sets its 'removed' property. + + size_t fill = 0; + DWORD rva_front = 0; + for (size_t find = 0; find < mapping->size(); ++find) { +#ifndef NDEBUG + // We expect the mapped ranges to be sorted by 'rva_original'. + if (find > 0) { + assert(mapping->at(find - 1).rva_original <= + mapping->at(find).rva_original); + } +#endif + + if (rva_front < mapping->at(find).rva_original) { + // We've found a gap. Fill it in by setting the 'removed' property for + // any affected intervals. + DWORD removed = mapping->at(find).rva_original - rva_front; + for (; fill < find; ++fill) { + if (mapping->at(fill).rva_original + mapping->at(fill).length != + rva_front) { + continue; + } + + // This interval ends right where the gap starts. It needs to have its + // 'removed' information filled in. + mapping->at(fill).removed = removed; + } + } + + // Advance the front that indicates the covered portion of the image. + rva_front = mapping->at(find).rva_original + mapping->at(find).length; + } +} + +// Builds a unified view of the mapping between the original and transformed +// image space by merging OMAPTO and OMAPFROM data. +void BuildMapping(const OmapData& omap_data, Mapping* mapping) { + assert(mapping != NULL); + + mapping->clear(); + + if (omap_data.omap_from.empty() || omap_data.omap_to.empty()) + return; + + // The names 'omap_to' and 'omap_from' are awfully confusing, so we make + // ourselves more explicit here. This cast is only safe because the underlying + // types have the exact same size. + const OmapToTable& tran2orig = + reinterpret_cast(omap_data.omap_to); + const OmapFromTable& orig2tran = reinterpret_cast( + omap_data.omap_from); + + // Handle the range of data at the beginning of the image. This is not usually + // specified by the OMAP data. + if (tran2orig[0].rva_transformed > 0 && orig2tran[0].rva_original > 0) { + DWORD header_transformed = tran2orig[0].rva_transformed; + DWORD header_original = orig2tran[0].rva_original; + DWORD header = Min(header_transformed, header_original); + + MappedRange mr = {}; + mr.length = header; + mr.injected = header_transformed - header; + mr.removed = header_original - header; + mapping->push_back(mr); + } + + // Convert the implied lengths to explicit lengths, and infer which content + // has been injected into the transformed image. Injected content is inferred + // as regions of the transformed address space that does not map back to + // known valid content in the original image. + for (size_t i = 0; i < tran2orig.size(); ++i) { + const OmapTranToOrig& o1 = tran2orig[i]; + + // This maps to content that is outside the original image, thus it + // describes injected content. We can skip this entry. + if (o1.rva_original >= omap_data.length_original) + continue; + + // Calculate the length of the current OMAP entry. This is implicit as the + // distance between successive |rva| values, capped at the end of the + // original image. + DWORD length = 0; + if (i + 1 < tran2orig.size()) { + const OmapTranToOrig& o2 = tran2orig[i + 1]; + + // We expect the table to be sorted by rva_transformed. + assert(o1.rva_transformed <= o2.rva_transformed); + + length = o2.rva_transformed - o1.rva_transformed; + if (o1.rva_original + length > omap_data.length_original) { + length = omap_data.length_original - o1.rva_original; + } + } else { + length = omap_data.length_original - o1.rva_original; + } + + // Zero-length entries don't describe anything and can be ignored. + if (length == 0) + continue; + + // Any gaps in the transformed address-space are due to injected content. + if (!mapping->empty()) { + MappedRange& prev_mr = mapping->back(); + prev_mr.injected += o1.rva_transformed - + (prev_mr.rva_transformed + prev_mr.length); + } + + MappedRange mr = {}; + mr.rva_original = o1.rva_original; + mr.rva_transformed = o1.rva_transformed; + mr.length = length; + mapping->push_back(mr); + } + + // Sort based on the original image addresses. + std::sort(mapping->begin(), mapping->end(), MappedRangeOriginalLess); + + // Fill in the 'removed' lengths by looking for gaps in the coverage of the + // original address space. + FillInRemovedLengths(mapping); + + return; +} + +void BuildEndpointIndexMap(ImageMap* image_map) { + assert(image_map != NULL); + + if (image_map->mapping.size() == 0) + return; + + const Mapping& mapping = image_map->mapping; + EndpointIndexMap& eim = image_map->endpoint_index_map; + + // Get the unique set of interval endpoints. + std::set endpoints; + for (size_t i = 0; i < mapping.size(); ++i) { + endpoints.insert(mapping[i].rva_original); + endpoints.insert(mapping[i].rva_original + + mapping[i].length + + mapping[i].removed); + } + + // Use the endpoints to initialize the secondary search structure for the + // mapping. + eim.resize(endpoints.size()); + std::set::const_iterator it = endpoints.begin(); + for (size_t i = 0; it != endpoints.end(); ++it, ++i) { + eim[i].endpoint = *it; + eim[i].index = mapping.size(); + } + + // For each endpoint we want the smallest index of any interval containing + // it. We iterate over the intervals and update the indices associated with + // each interval endpoint contained in the current interval. In the general + // case of an arbitrary set of intervals this is O(n^2), but the structure of + // OMAP data makes this O(n). + for (size_t i = 0; i < mapping.size(); ++i) { + EndpointIndex ei1 = { mapping[i].rva_original, 0 }; + EndpointIndexMap::iterator it1 = std::lower_bound( + eim.begin(), eim.end(), ei1, EndpointIndexLess); + + EndpointIndex ei2 = { mapping[i].rva_original + mapping[i].length + + mapping[i].removed, 0 }; + EndpointIndexMap::iterator it2 = std::lower_bound( + eim.begin(), eim.end(), ei2, EndpointIndexLess); + + for (; it1 != it2; ++it1) + it1->index = Min(i, it1->index); + } +} + +// Clips the given mapped range. +void ClipMappedRangeOriginal(const AddressRange& clip_range, + MappedRange* mapped_range) { + assert(mapped_range != NULL); + + // The clipping range is entirely outside of the mapped range. + if (clip_range.end() <= mapped_range->rva_original || + mapped_range->rva_original + mapped_range->length + + mapped_range->removed <= clip_range.rva) { + mapped_range->length = 0; + mapped_range->injected = 0; + mapped_range->removed = 0; + return; + } + + // Clip the left side. + if (mapped_range->rva_original < clip_range.rva) { + DWORD clip_left = clip_range.rva - mapped_range->rva_original; + mapped_range->rva_original += clip_left; + mapped_range->rva_transformed += clip_left; + + if (clip_left > mapped_range->length) { + // The left clipping boundary entirely erases the content section of the + // range. + DWORD trim = clip_left - mapped_range->length; + mapped_range->length = 0; + mapped_range->injected -= Min(trim, mapped_range->injected); + // We know that trim <= mapped_range->remove. + mapped_range->removed -= trim; + } else { + // The left clipping boundary removes some, but not all, of the content. + // As such it leaves the removed/injected component intact. + mapped_range->length -= clip_left; + } + } + + // Clip the right side. + DWORD end_original = mapped_range->rva_original + mapped_range->length; + if (clip_range.end() < end_original) { + // The right clipping boundary lands in the 'content' section of the range, + // entirely clearing the injected/removed portion. + DWORD clip_right = end_original - clip_range.end(); + mapped_range->length -= clip_right; + mapped_range->injected = 0; + mapped_range->removed = 0; + return; + } else { + // The right clipping boundary is outside of the content, but may affect + // the removed/injected portion of the range. + DWORD end_removed = end_original + mapped_range->removed; + if (clip_range.end() < end_removed) + mapped_range->removed = clip_range.end() - end_original; + + DWORD end_injected = end_original + mapped_range->injected; + if (clip_range.end() < end_injected) + mapped_range->injected = clip_range.end() - end_original; + } + + return; +} + +} // namespace + +int AddressRange::Compare(const AddressRange& rhs) const { + if (end() <= rhs.rva) + return -1; + if (rhs.end() <= rva) + return 1; + return 0; +} + +bool GetOmapDataAndDisableTranslation(IDiaSession* session, + OmapData* omap_data) { + assert(session != NULL); + assert(omap_data != NULL); + + CComPtr address_map; + if (FAILED(session->QueryInterface(&address_map))) { + fprintf(stderr, "IDiaSession::QueryInterface(IDiaAddressMap) failed\n"); + return false; + } + assert(address_map.p != NULL); + + BOOL omap_enabled = FALSE; + if (FAILED(address_map->get_addressMapEnabled(&omap_enabled))) { + fprintf(stderr, "IDiaAddressMap::get_addressMapEnabled failed\n"); + return false; + } + + if (!omap_enabled) { + // We indicate the non-presence of OMAP data by returning empty tables. + omap_data->omap_from.clear(); + omap_data->omap_to.clear(); + omap_data->length_original = 0; + return true; + } + + // OMAP data is present. Disable translation. + if (FAILED(address_map->put_addressMapEnabled(FALSE))) { + fprintf(stderr, "IDiaAddressMap::put_addressMapEnabled failed\n"); + return false; + } + + // Read the OMAP streams. + if (!FindAndLoadOmapTable(kOmapFromDebugStreamName, + session, + &omap_data->omap_from)) { + return false; + } + if (!FindAndLoadOmapTable(kOmapToDebugStreamName, + session, + &omap_data->omap_to)) { + return false; + } + + // Get the lengths of the address spaces. + if (!GetOriginalImageLength(session, &omap_data->length_original)) + return false; + + return true; +} + +void BuildImageMap(const OmapData& omap_data, ImageMap* image_map) { + assert(image_map != NULL); + + BuildMapping(omap_data, &image_map->mapping); + BuildEndpointIndexMap(image_map); +} + +void MapAddressRange(const ImageMap& image_map, + const AddressRange& original_range, + AddressRangeVector* mapped_ranges) { + assert(mapped_ranges != NULL); + + const Mapping& map = image_map.mapping; + + // Handle the trivial case of an empty image_map. This means that there is + // no transformation to be applied, and we can simply return the original + // range. + if (map.empty()) { + mapped_ranges->push_back(original_range); + return; + } + + // If we get a query of length 0 we need to handle it by using a non-zero + // query length. + AddressRange query_range(original_range); + if (query_range.length == 0) + query_range.length = 1; + + // Find the range of intervals that can potentially intersect our query range. + size_t imin = 0; + size_t imax = 0; + { + // The index of the earliest possible range that can affect is us done by + // searching through the secondary indexing structure. + const EndpointIndexMap& eim = image_map.endpoint_index_map; + EndpointIndex q1 = { query_range.rva, 0 }; + EndpointIndexMap::const_iterator it1 = std::lower_bound( + eim.begin(), eim.end(), q1, EndpointIndexLess); + if (it1 == eim.end()) { + imin = map.size(); + } else { + // Backup to find the interval that contains our query point. + if (it1 != eim.begin() && query_range.rva < it1->endpoint) + --it1; + imin = it1->index; + } + + // The first range that can't possibly intersect us is found by searching + // through the image map directly as it is already sorted by interval start + // point. + MappedRange q2 = { query_range.end(), 0 }; + Mapping::const_iterator it2 = std::lower_bound( + map.begin(), map.end(), q2, MappedRangeOriginalLess); + imax = it2 - map.begin(); + } + + // Find all intervals that intersect the query range. + Mapping temp_map; + for (size_t i = imin; i < imax; ++i) { + MappedRange mr = map[i]; + ClipMappedRangeOriginal(query_range, &mr); + if (mr.length + mr.injected > 0) + temp_map.push_back(mr); + } + + // If there are no intersecting ranges then the query range has been removed + // from the image in question. + if (temp_map.empty()) + return; + + // Sort based on transformed addresses. + std::sort(temp_map.begin(), temp_map.end(), MappedRangeMappedLess); + + // Zero-length queries can't actually be merged. We simply output the set of + // unique RVAs that correspond to the query RVA. + if (original_range.length == 0) { + mapped_ranges->push_back(AddressRange(temp_map[0].rva_transformed, 0)); + for (size_t i = 1; i < temp_map.size(); ++i) { + if (temp_map[i].rva_transformed > mapped_ranges->back().rva) + mapped_ranges->push_back(AddressRange(temp_map[i].rva_transformed, 0)); + } + return; + } + + // Merge any ranges that are consecutive in the mapped image. We merge over + // injected content if it makes ranges contiguous, but we ignore any injected + // content at the tail end of a range. This allows us to detect symbols that + // have been lengthened by injecting content in the middle. However, it + // misses the case where content has been injected at the head or the tail. + // The problem is that it doesn't know whether to attribute it to the + // preceding or following symbol. It is up to the author of the transform to + // output explicit OMAP info in these cases to ensure full coverage of the + // transformed address space. + DWORD rva_begin = temp_map[0].rva_transformed; + DWORD rva_cur_content = rva_begin + temp_map[0].length; + DWORD rva_cur_injected = rva_cur_content + temp_map[0].injected; + for (size_t i = 1; i < temp_map.size(); ++i) { + if (rva_cur_injected < temp_map[i].rva_transformed) { + // This marks the end of a continuous range in the image. Output the + // current range and start a new one. + if (rva_begin < rva_cur_content) { + mapped_ranges->push_back( + AddressRange(rva_begin, rva_cur_content - rva_begin)); + } + rva_begin = temp_map[i].rva_transformed; + } + + rva_cur_content = temp_map[i].rva_transformed + temp_map[i].length; + rva_cur_injected = rva_cur_content + temp_map[i].injected; + } + + // Output the range in progress. + if (rva_begin < rva_cur_content) { + mapped_ranges->push_back( + AddressRange(rva_begin, rva_cur_content - rva_begin)); + } + + return; +} + +} // namespace google_breakpad \ No newline at end of file diff --git a/toolkit/crashreporter/google-breakpad/src/common/windows/omap.h b/toolkit/crashreporter/google-breakpad/src/common/windows/omap.h new file mode 100644 index 000000000000..bc293afb51c6 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/common/windows/omap.h @@ -0,0 +1,72 @@ +// Copyright 2013 Google Inc. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Provides an API for mapping symbols through OMAP information, if a PDB file +// is augmented with it. This allows breakpad to work with addresses in +// transformed images by transforming the symbols themselves, rather than +// transforming addresses prior to querying symbols (the way it is typically +// done by Windows-native tools, including the DIA). + +#ifndef COMMON_WINDOWS_OMAP_H_ +#define COMMON_WINDOWS_OMAP_H_ + +#include "common/windows/omap_internal.h" + +namespace google_breakpad { + +// If the given session contains OMAP data this extracts it, populating +// |omap_data|, and then disabling automatic translation for the session. +// OMAP data is present in the PDB if |omap_data| is not empty. This returns +// true on success, false otherwise. +bool GetOmapDataAndDisableTranslation(IDiaSession* dia_session, + OmapData* omap_data); + +// Given raw OMAP data builds an ImageMap. This can be used to query individual +// image ranges using MapAddressRange. +// |omap_data|| is the OMAP data extracted from the PDB. +// |image_map| will be populated with a description of the image mapping. If +// |omap_data| is empty then this will also be empty. +void BuildImageMap(const OmapData& omap_data, ImageMap* image_map); + +// Given an address range in the original image space determines how exactly it +// has been tranformed. +// |omap_data| is the OMAP data extracted from the PDB, which must not be +// empty. +// |original_range| is the address range in the original image being queried. +// |mapped_ranges| will be populated with a full description of the mapping. +// They may be disjoint in the transformed image so a vector is needed to +// fully represent the mapping. This will be appended to if it is not +// empty. If |omap_data| is empty then |mapped_ranges| will simply be +// populated with a copy of |original_range| (the identity transform). +void MapAddressRange(const ImageMap& image_map, + const AddressRange& original_range, + AddressRangeVector* mapped_ranges); + +} // namespace google_breakpad + +#endif // COMMON_WINDOWS_OMAP_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/common/windows/omap_internal.h b/toolkit/crashreporter/google-breakpad/src/common/windows/omap_internal.h new file mode 100644 index 000000000000..3f904d7a7396 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/common/windows/omap_internal.h @@ -0,0 +1,137 @@ +// Copyright 2013 Google Inc. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Declares internal implementation details for functionality in omap.h and +// omap.cc. + +#ifndef COMMON_WINDOWS_OMAP_INTERNAL_H_ +#define COMMON_WINDOWS_OMAP_INTERNAL_H_ + +#include +#include + +#include + +namespace google_breakpad { + +// The OMAP struct is defined by debughlp.h, which doesn't play nicely with +// imagehlp.h. We simply redefine it. +struct OMAP { + DWORD rva; + DWORD rvaTo; +}; +static_assert(sizeof(OMAP) == 8, "Wrong size for OMAP structure."); +typedef std::vector OmapTable; + +// This contains the OMAP data extracted from an image. +struct OmapData { + // The table of OMAP entries describing the transformation from the + // original image to the transformed image. + OmapTable omap_from; + // The table of OMAP entries describing the transformation from the + // instrumented image to the original image. + OmapTable omap_to; + // The length of the original untransformed image. + DWORD length_original; + + OmapData() : length_original(0) { } +}; + +// This represents a range of addresses in an image. +struct AddressRange { + DWORD rva; + DWORD length; + + AddressRange() : rva(0), length(0) { } + AddressRange(DWORD rva, DWORD length) : rva(rva), length(length) { } + + // Returns the end address of this range. + DWORD end() const { return rva + length; } + + // Addreses only compare as less-than or greater-than if they are not + // overlapping. Otherwise, they compare equal. + int Compare(const AddressRange& rhs) const; + bool operator<(const AddressRange& rhs) const { return Compare(rhs) == -1; } + bool operator>(const AddressRange& rhs) const { return Compare(rhs) == 1; } + + // Equality operators compare exact values. + bool operator==(const AddressRange& rhs) const { + return rva == rhs.rva && length == rhs.length; + } + bool operator!=(const AddressRange& rhs) const { return !((*this) == rhs); } +}; + +typedef std::vector AddressRangeVector; + +// This represents an address range in an original image, and its corresponding +// range in the transformed image. +struct MappedRange { + // An address in the original image. + DWORD rva_original; + // The corresponding addresses in the transformed image. + DWORD rva_transformed; + // The length of the address range. + DWORD length; + // It is possible for code to be injected into a transformed image, for which + // there is no corresponding code in the original image. If this range of + // transformed image is immediately followed by such injected code we maintain + // a record of its length here. + DWORD injected; + // It is possible for code to be removed from the original image. This happens + // for things like padding between blocks. There is no actual content lost, + // but the spacing between items may be lost. This keeps track of any removed + // content immediately following the |original| range. + DWORD removed; +}; +// A vector of mapped ranges is used as a more useful representation of +// OMAP data. +typedef std::vector Mapping; + +// Used as a secondary search structure accompanying a Mapping. +struct EndpointIndex { + DWORD endpoint; + size_t index; +}; +typedef std::vector EndpointIndexMap; + +// An ImageMap is vector of mapped ranges, plus a secondary index into it for +// doing interval searches. (An interval tree would also work, but is overkill +// because we don't need insertion and deletion.) +struct ImageMap { + // This is a description of the mapping between original and transformed + // image, sorted by addresses in the original image. + Mapping mapping; + // For all interval endpoints in |mapping| this stores the minimum index of + // an interval in |mapping| that contains the endpoint. Useful for doing + // interval intersection queries. + EndpointIndexMap endpoint_index_map; +}; + +} // namespace google_breakpad + +#endif // COMMON_WINDOWS_OMAP_INTERNAL_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/common/windows/omap_unittest.cc b/toolkit/crashreporter/google-breakpad/src/common/windows/omap_unittest.cc new file mode 100644 index 000000000000..960a33f469c3 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/common/windows/omap_unittest.cc @@ -0,0 +1,330 @@ +// Copyright 2013 Google Inc. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Unittests for OMAP related functions. + +#include "common/windows/omap.h" + +#include "gmock/gmock.h" +#include "gtest/gtest.h" + +namespace google_breakpad { + +// Equality operators for ContainerEq. These must be outside of the anonymous +// namespace in order for them to be found. +bool operator==(const MappedRange& mr1, const MappedRange& mr2) { + return mr1.rva_original == mr2.rva_original && + mr1.rva_transformed == mr2.rva_transformed && + mr1.length == mr2.length && + mr1.injected == mr2.injected && + mr1.removed == mr2.removed; +} +bool operator==(const EndpointIndex& ei1, const EndpointIndex& ei2) { + return ei1.endpoint == ei2.endpoint && ei1.index == ei2.index; +} + +// Pretty printers for more meaningful error messages. Also need to be outside +// the anonymous namespace. +std::ostream& operator<<(std::ostream& os, const MappedRange& mr) { + os << "MappedRange(rva_original=" << mr.rva_original + << ", rva_transformed=" << mr.rva_transformed + << ", length=" << mr.length + << ", injected=" << mr.injected + << ", removed=" << mr.removed << ")"; + return os; +} +std::ostream& operator<<(std::ostream& os, const EndpointIndex& ei) { + os << "EndpointIndex(endpoint=" << ei.endpoint + << ", index=" << ei.index << ")"; + return os; +} +std::ostream& operator<<(std::ostream& os, const AddressRange& ar) { + os << "AddressRange(rva=" << ar.rva << ", length=" << ar.length << ")"; + return os; +} + +namespace { + +OMAP CreateOmap(DWORD rva, DWORD rvaTo) { + OMAP o = { rva, rvaTo }; + return o; +} + +MappedRange CreateMappedRange(DWORD rva_original, + DWORD rva_transformed, + DWORD length, + DWORD injected, + DWORD removed) { + MappedRange mr = { rva_original, rva_transformed, length, injected, removed }; + return mr; +} + +EndpointIndex CreateEndpointIndex(DWORD endpoint, size_t index) { + EndpointIndex ei = { endpoint, index }; + return ei; +} + +// (C is removed) +// Original : A B C D E F G H +// Transformed: A B D F E * H1 G1 G2 H2 +// (* is injected, G is copied, H is split) +// A is implied. + +// Layout of the original image. +const AddressRange B(100, 15); +const AddressRange C(B.end(), 10); +const AddressRange D(C.end(), 25); +const AddressRange E(D.end(), 10); +const AddressRange F(E.end(), 40); +const AddressRange G(F.end(), 3); +const AddressRange H(G.end(), 7); + +// Layout of the transformed image. +const AddressRange Bt(100, 15); +const AddressRange Dt(Bt.end(), 20); // D is shortened. +const AddressRange Ft(Dt.end(), F.length); +const AddressRange Et(Ft.end(), E.length); +const AddressRange injected(Et.end(), 5); +const AddressRange H1t(injected.end(), 4); // H is split. +const AddressRange G1t(H1t.end(), G.length); // G is copied. +const AddressRange G2t(G1t.end(), G.length); // G is copied. +const AddressRange H2t(G2t.end(), 3); // H is split. + +class BuildImageMapTest : public testing::Test { + public: + static const DWORD kInvalidAddress = 0xFFFFFFFF; + + void InitOmapData() { + omap_data.length_original = H.end(); + + // Build the OMAPTO vector (from transformed to original). + omap_data.omap_to.push_back(CreateOmap(Bt.rva, B.rva)); + omap_data.omap_to.push_back(CreateOmap(Dt.rva, D.rva)); + omap_data.omap_to.push_back(CreateOmap(Ft.rva, F.rva)); + omap_data.omap_to.push_back(CreateOmap(Et.rva, E.rva)); + omap_data.omap_to.push_back(CreateOmap(injected.rva, kInvalidAddress)); + omap_data.omap_to.push_back(CreateOmap(H1t.rva, H.rva)); + omap_data.omap_to.push_back(CreateOmap(G1t.rva, G.rva)); + omap_data.omap_to.push_back(CreateOmap(G2t.rva, G.rva)); + omap_data.omap_to.push_back(CreateOmap(H2t.rva, H.rva + H1t.length)); + omap_data.omap_to.push_back(CreateOmap(H2t.end(), kInvalidAddress)); + + // Build the OMAPFROM vector (from original to transformed). + omap_data.omap_from.push_back(CreateOmap(B.rva, Bt.rva)); + omap_data.omap_from.push_back(CreateOmap(C.rva, kInvalidAddress)); + omap_data.omap_from.push_back(CreateOmap(D.rva, Dt.rva)); + omap_data.omap_from.push_back(CreateOmap(E.rva, Et.rva)); + omap_data.omap_from.push_back(CreateOmap(F.rva, Ft.rva)); + omap_data.omap_from.push_back(CreateOmap(G.rva, G1t.rva)); + omap_data.omap_from.push_back(CreateOmap(H.rva, H1t.rva)); + omap_data.omap_from.push_back(CreateOmap(H.rva + H1t.length, H2t.rva)); + omap_data.omap_from.push_back(CreateOmap(H.end(), kInvalidAddress)); + } + + OmapData omap_data; +}; + +} // namespace + +TEST_F(BuildImageMapTest, EmptyImageMapOnEmptyOmapData) { + ASSERT_EQ(0u, omap_data.omap_from.size()); + ASSERT_EQ(0u, omap_data.omap_to.size()); + ASSERT_EQ(0u, omap_data.length_original); + + ImageMap image_map; + BuildImageMap(omap_data, &image_map); + EXPECT_EQ(0u, image_map.mapping.size()); + EXPECT_EQ(0u, image_map.endpoint_index_map.size()); +} + +TEST_F(BuildImageMapTest, ImageMapIsCorrect) { + InitOmapData(); + ASSERT_LE(0u, omap_data.omap_from.size()); + ASSERT_LE(0u, omap_data.omap_to.size()); + ASSERT_LE(0u, omap_data.length_original); + + ImageMap image_map; + BuildImageMap(omap_data, &image_map); + EXPECT_LE(9u, image_map.mapping.size()); + EXPECT_LE(9u, image_map.endpoint_index_map.size()); + + Mapping mapping; + mapping.push_back(CreateMappedRange(0, 0, B.rva, 0, 0)); + // C is removed, and it originally comes immediately after B. + mapping.push_back(CreateMappedRange(B.rva, Bt.rva, B.length, 0, C.length)); + // D is shortened by a length of 5. + mapping.push_back(CreateMappedRange(D.rva, Dt.rva, Dt.length, 0, 5)); + // The injected content comes immediately after E in the transformed image. + mapping.push_back(CreateMappedRange(E.rva, Et.rva, E.length, injected.length, + 0)); + mapping.push_back(CreateMappedRange(F.rva, Ft.rva, F.length, 0, 0)); + // G is copied so creates two entries. + mapping.push_back(CreateMappedRange(G.rva, G1t.rva, G.length, 0, 0)); + mapping.push_back(CreateMappedRange(G.rva, G2t.rva, G.length, 0, 0)); + // H is split, so create two entries. + mapping.push_back(CreateMappedRange(H.rva, H1t.rva, H1t.length, 0, 0)); + mapping.push_back(CreateMappedRange(H.rva + H1t.length, H2t.rva, H2t.length, + 0, 0)); + EXPECT_THAT(mapping, + testing::ContainerEq(image_map.mapping)); + + EndpointIndexMap endpoint_index_map; + endpoint_index_map.push_back(CreateEndpointIndex(0, 0)); + endpoint_index_map.push_back(CreateEndpointIndex(B.rva, 1)); + endpoint_index_map.push_back(CreateEndpointIndex(D.rva, 2)); + endpoint_index_map.push_back(CreateEndpointIndex(E.rva, 3)); + endpoint_index_map.push_back(CreateEndpointIndex(F.rva, 4)); + // G is duplicated so 2 ranges map back to it, hence the skip from 5 to 7. + endpoint_index_map.push_back(CreateEndpointIndex(G.rva, 5)); + // H is split so we expect 2 endpoints to show up attributed to it. + endpoint_index_map.push_back(CreateEndpointIndex(H.rva, 7)); + endpoint_index_map.push_back(CreateEndpointIndex(H.rva + H1t.length, 8)); + endpoint_index_map.push_back(CreateEndpointIndex(H.end(), 9)); + EXPECT_THAT(endpoint_index_map, + testing::ContainerEq(image_map.endpoint_index_map)); +} + +namespace { + +class MapAddressRangeTest : public BuildImageMapTest { + public: + typedef BuildImageMapTest Super; + virtual void SetUp() { + Super::SetUp(); + InitOmapData(); + BuildImageMap(omap_data, &image_map); + } + + ImageMap image_map; + + private: + using BuildImageMapTest::InitOmapData; + using BuildImageMapTest::omap_data; +}; + +} // namespace + +TEST_F(MapAddressRangeTest, EmptyImageMapReturnsIdentity) { + ImageMap im; + AddressRangeVector mapped_ranges; + AddressRange ar(0, 1024); + MapAddressRange(im, ar, &mapped_ranges); + EXPECT_EQ(1u, mapped_ranges.size()); + EXPECT_EQ(ar, mapped_ranges[0]); +} + +TEST_F(MapAddressRangeTest, MapOutOfImage) { + AddressRangeVector mapped_ranges; + MapAddressRange(image_map, AddressRange(H.end() + 10, 10), &mapped_ranges); + EXPECT_EQ(0u, mapped_ranges.size()); +} + +TEST_F(MapAddressRangeTest, MapIdentity) { + AddressRangeVector mapped_ranges; + MapAddressRange(image_map, B, &mapped_ranges); + EXPECT_EQ(1u, mapped_ranges.size()); + EXPECT_THAT(mapped_ranges, testing::ElementsAre(B)); +} + +TEST_F(MapAddressRangeTest, MapReorderedContiguous) { + AddressRangeVector mapped_ranges; + + AddressRange DEF(D.rva, F.end() - D.rva); + MapAddressRange(image_map, DEF, &mapped_ranges); + EXPECT_EQ(1u, mapped_ranges.size()); + + AddressRange DFEt(Dt.rva, Et.end() - Dt.rva); + EXPECT_THAT(mapped_ranges, testing::ElementsAre(DFEt)); +} + +TEST_F(MapAddressRangeTest, MapEmptySingle) { + AddressRangeVector mapped_ranges; + MapAddressRange(image_map, AddressRange(D.rva, 0), &mapped_ranges); + EXPECT_EQ(1u, mapped_ranges.size()); + EXPECT_THAT(mapped_ranges, testing::ElementsAre(AddressRange(Dt.rva, 0))); +} + +TEST_F(MapAddressRangeTest, MapEmptyCopied) { + AddressRangeVector mapped_ranges; + MapAddressRange(image_map, AddressRange(G.rva, 0), &mapped_ranges); + EXPECT_EQ(2u, mapped_ranges.size()); + EXPECT_THAT(mapped_ranges, testing::ElementsAre(AddressRange(G1t.rva, 0), + AddressRange(G2t.rva, 0))); +} + +TEST_F(MapAddressRangeTest, MapCopiedContiguous) { + AddressRangeVector mapped_ranges; + MapAddressRange(image_map, G, &mapped_ranges); + EXPECT_EQ(1u, mapped_ranges.size()); + EXPECT_THAT(mapped_ranges, testing::ElementsAre( + AddressRange(G1t.rva, G2t.end() - G1t.rva))); +} + +TEST_F(MapAddressRangeTest, MapSplitDiscontiguous) { + AddressRangeVector mapped_ranges; + MapAddressRange(image_map, H, &mapped_ranges); + EXPECT_EQ(2u, mapped_ranges.size()); + EXPECT_THAT(mapped_ranges, testing::ElementsAre(H1t, H2t)); +} + +TEST_F(MapAddressRangeTest, MapInjected) { + AddressRangeVector mapped_ranges; + + AddressRange EFGH(E.rva, H.end() - E.rva); + MapAddressRange(image_map, EFGH, &mapped_ranges); + EXPECT_EQ(1u, mapped_ranges.size()); + + AddressRange FEHGGHt(Ft.rva, H2t.end() - Ft.rva); + EXPECT_THAT(mapped_ranges, testing::ElementsAre(FEHGGHt)); +} + +TEST_F(MapAddressRangeTest, MapRemovedEntirely) { + AddressRangeVector mapped_ranges; + MapAddressRange(image_map, C, &mapped_ranges); + EXPECT_EQ(0u, mapped_ranges.size()); +} + +TEST_F(MapAddressRangeTest, MapRemovedPartly) { + AddressRangeVector mapped_ranges; + MapAddressRange(image_map, D, &mapped_ranges); + EXPECT_EQ(1u, mapped_ranges.size()); + EXPECT_THAT(mapped_ranges, testing::ElementsAre(Dt)); +} + +TEST_F(MapAddressRangeTest, MapFull) { + AddressRangeVector mapped_ranges; + + AddressRange AH(0, H.end()); + MapAddressRange(image_map, AH, &mapped_ranges); + EXPECT_EQ(1u, mapped_ranges.size()); + + AddressRange AHt(0, H2t.end()); + EXPECT_THAT(mapped_ranges, testing::ElementsAre(AHt)); +} + +} // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/common/windows/pdb_source_line_writer.cc b/toolkit/crashreporter/google-breakpad/src/common/windows/pdb_source_line_writer.cc index 8d8e55c9402f..3c3401d281ec 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/windows/pdb_source_line_writer.cc +++ b/toolkit/crashreporter/google-breakpad/src/common/windows/pdb_source_line_writer.cc @@ -27,15 +27,21 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#include "common/windows/pdb_source_line_writer.h" + +#include +#include #include #include #include #include -#include "common/windows/string_utils-inl.h" +#include +#include -#include "common/windows/pdb_source_line_writer.h" +#include "common/windows/dia_util.h" #include "common/windows/guid_string.h" +#include "common/windows/string_utils-inl.h" // This constant may be missing from DbgHelp.h. See the documentation for // IDiaSymbol::get_undecoratedNameEx. @@ -43,8 +49,60 @@ #define UNDNAME_NO_ECSU 0x8000 // Suppresses enum/class/struct/union. #endif // UNDNAME_NO_ECSU +/* + * Not defined in WinNT.h for some reason. Definitions taken from: + * http://uninformed.org/index.cgi?v=4&a=1&p=13 + * + */ +typedef unsigned char UBYTE; + +#if !defined(_WIN64) +#define UNW_FLAG_EHANDLER 0x01 +#define UNW_FLAG_UHANDLER 0x02 +#define UNW_FLAG_CHAININFO 0x04 +#endif + +union UnwindCode { + struct { + UBYTE offset_in_prolog; + UBYTE unwind_operation_code : 4; + UBYTE operation_info : 4; + }; + USHORT frame_offset; +}; + +enum UnwindOperationCodes { + UWOP_PUSH_NONVOL = 0, /* info == register number */ + UWOP_ALLOC_LARGE, /* no info, alloc size in next 2 slots */ + UWOP_ALLOC_SMALL, /* info == size of allocation / 8 - 1 */ + UWOP_SET_FPREG, /* no info, FP = RSP + UNWIND_INFO.FPRegOffset*16 */ + UWOP_SAVE_NONVOL, /* info == register number, offset in next slot */ + UWOP_SAVE_NONVOL_FAR, /* info == register number, offset in next 2 slots */ + // XXX: these are missing from MSDN! + // See: http://www.osronline.com/ddkx/kmarch/64bitamd_4rs7.htm + UWOP_SAVE_XMM, + UWOP_SAVE_XMM_FAR, + UWOP_SAVE_XMM128, /* info == XMM reg number, offset in next slot */ + UWOP_SAVE_XMM128_FAR, /* info == XMM reg number, offset in next 2 slots */ + UWOP_PUSH_MACHFRAME /* info == 0: no error-code, 1: error-code */ +}; + +// See: http://msdn.microsoft.com/en-us/library/ddssxxy8.aspx +// Note: some fields removed as we don't use them. +struct UnwindInfo { + UBYTE version : 3; + UBYTE flags : 5; + UBYTE size_of_prolog; + UBYTE count_of_codes; + UBYTE frame_register : 4; + UBYTE frame_offset : 4; + UnwindCode unwind_code[1]; +}; + namespace google_breakpad { +namespace { + using std::vector; // A helper class to scope a PLOADED_IMAGE. @@ -63,14 +121,27 @@ class AutoImage { PLOADED_IMAGE img_; }; +} // namespace + PDBSourceLineWriter::PDBSourceLineWriter() : output_(NULL) { } PDBSourceLineWriter::~PDBSourceLineWriter() { } +bool PDBSourceLineWriter::SetCodeFile(const wstring &exe_file) { + if (code_file_.empty()) { + code_file_ = exe_file; + return true; + } + // Setting a different code file path is an error. It is success only if the + // file paths are the same. + return exe_file == code_file_; +} + bool PDBSourceLineWriter::Open(const wstring &file, FileFormat format) { Close(); + code_file_.clear(); if (FAILED(CoInitialize(NULL))) { fprintf(stderr, "CoInitialize failed\n"); @@ -84,6 +155,7 @@ bool PDBSourceLineWriter::Open(const wstring &file, FileFormat format) { StringFromGUID2(CLSID_DiaSource, classid, kGuidSize); // vc80 uses bce36434-2c24-499e-bf49-8bd99b0eeb68. // vc90 uses 4C41678E-887B-4365-A09E-925D28DB33C2. + // vc100 uses B86AE24D-BF2F-4AC9-B5A2-34B14E4CE11D. fprintf(stderr, "CoCreateInstance CLSID_DiaSource %S failed " "(msdia*.dll unregistered?)\n", classid); return false; @@ -106,10 +178,11 @@ bool PDBSourceLineWriter::Open(const wstring &file, FileFormat format) { case ANY_FILE: if (FAILED(data_source->loadDataFromPdb(file.c_str()))) { if (FAILED(data_source->loadDataForExe(file.c_str(), NULL, NULL))) { - fprintf(stderr, "loadDataForPdb and loadDataFromExe failed for %ws\n", file.c_str()); + fprintf(stderr, "loadDataForPdb and loadDataFromExe failed for %ws\n", + file.c_str()); return false; } - code_file_ = file; + code_file_ = file; } break; default: @@ -157,7 +230,12 @@ bool PDBSourceLineWriter::PrintLines(IDiaEnumLineNumbers *lines) { return false; } - fprintf(output_, "%x %x %d %d\n", rva, length, line_num, source_id); + AddressRangeVector ranges; + MapAddressRange(image_map_, AddressRange(rva, length), &ranges); + for (size_t i = 0; i < ranges.size(); ++i) { + fprintf(output_, "%x %x %d %d\n", ranges[i].rva, ranges[i].length, + line_num, source_id); + } line.Release(); } return true; @@ -196,8 +274,14 @@ bool PDBSourceLineWriter::PrintFunction(IDiaSymbol *function, stack_param_size = GetFunctionStackParamSize(function); } - fprintf(output_, "FUNC %x %" WIN_STRING_FORMAT_LL "x %x %ws\n", - rva, length, stack_param_size, name); + AddressRangeVector ranges; + MapAddressRange(image_map_, AddressRange(rva, static_cast(length)), + &ranges); + for (size_t i = 0; i < ranges.size(); ++i) { + fprintf(output_, "FUNC %x %x %x %ws\n", + ranges[i].rva, ranges[i].length, stack_param_size, + name.m_str); + } CComPtr lines; if (FAILED(session_->findLinesByRVA(rva, DWORD(length), &lines))) { @@ -247,7 +331,7 @@ bool PDBSourceLineWriter::PrintSourceFiles() { if (!FileIDIsCached(file_name_string)) { // this is a new file name, cache it and output a FILE line. CacheFileID(file_name_string, file_id); - fwprintf(output_, L"FILE %d %s\n", file_id, file_name); + fwprintf(output_, L"FILE %d %ws\n", file_id, file_name_string.c_str()); } else { // this file name has already been seen, just save this // ID for later lookup. @@ -261,47 +345,101 @@ bool PDBSourceLineWriter::PrintSourceFiles() { } bool PDBSourceLineWriter::PrintFunctions() { - CComPtr symbols; - if (FAILED(session_->getSymbolsByAddr(&symbols))) { - fprintf(stderr, "failed to get symbol enumerator\n"); + ULONG count = 0; + DWORD rva = 0; + CComPtr global; + HRESULT hr; + + if (FAILED(session_->get_globalScope(&global))) { + fprintf(stderr, "get_globalScope failed\n"); return false; } - CComPtr symbol; - if (FAILED(symbols->symbolByAddr(1, 0, &symbol))) { - fprintf(stderr, "failed to enumerate symbols\n"); - return false; + CComPtr symbols = NULL; + + // Find all function symbols first. + std::set rvas; + hr = global->findChildren(SymTagFunction, NULL, nsNone, &symbols); + + if (SUCCEEDED(hr)) { + CComPtr symbol = NULL; + + while (SUCCEEDED(symbols->Next(1, &symbol, &count)) && count == 1) { + if (SUCCEEDED(symbol->get_relativeVirtualAddress(&rva))) { + // To maintain existing behavior of one symbol per address, place the + // rva onto a set here to uniquify them. + rvas.insert(rva); + } else { + fprintf(stderr, "get_relativeVirtualAddress failed on the symbol\n"); + return false; + } + + symbol.Release(); + } + + symbols.Release(); } - DWORD rva_last = 0; - if (FAILED(symbol->get_relativeVirtualAddress(&rva_last))) { - fprintf(stderr, "failed to get symbol rva\n"); - return false; + // Find all public symbols. Store public symbols that are not also private + // symbols for later. + std::set public_only_rvas; + hr = global->findChildren(SymTagPublicSymbol, NULL, nsNone, &symbols); + + if (SUCCEEDED(hr)) { + CComPtr symbol = NULL; + + while (SUCCEEDED(symbols->Next(1, &symbol, &count)) && count == 1) { + if (SUCCEEDED(symbol->get_relativeVirtualAddress(&rva))) { + if (rvas.count(rva) == 0) { + rvas.insert(rva); // Keep symbols in rva order. + public_only_rvas.insert(rva); + } + } else { + fprintf(stderr, "get_relativeVirtualAddress failed on the symbol\n"); + return false; + } + + symbol.Release(); + } + + symbols.Release(); } - ULONG count; - do { - DWORD tag; - if (FAILED(symbol->get_symTag(&tag))) { - fprintf(stderr, "failed to get symbol tag\n"); + std::set::iterator it; + + // For each rva, dump the first symbol DIA knows about at the address. + for (it = rvas.begin(); it != rvas.end(); ++it) { + CComPtr symbol = NULL; + // If the symbol is not in the public list, look for SymTagFunction. This is + // a workaround to a bug where DIA will hang if searching for a private + // symbol at an address where only a public symbol exists. + // See http://connect.microsoft.com/VisualStudio/feedback/details/722366 + if (public_only_rvas.count(*it) == 0) { + if (SUCCEEDED(session_->findSymbolByRVA(*it, SymTagFunction, &symbol))) { + // Sometimes findSymbolByRVA returns S_OK, but NULL. + if (symbol) { + if (!PrintFunction(symbol, symbol)) + return false; + symbol.Release(); + } + } else { + fprintf(stderr, "findSymbolByRVA SymTagFunction failed\n"); + return false; + } + } else if (SUCCEEDED(session_->findSymbolByRVA(*it, + SymTagPublicSymbol, + &symbol))) { + // Sometimes findSymbolByRVA returns S_OK, but NULL. + if (symbol) { + if (!PrintCodePublicSymbol(symbol)) + return false; + symbol.Release(); + } + } else { + fprintf(stderr, "findSymbolByRVA SymTagPublicSymbol failed\n"); return false; } - - // For a given function, DIA seems to give either a symbol with - // SymTagFunction or SymTagPublicSymbol, but not both. This means - // that PDBSourceLineWriter will output either a FUNC or PUBLIC line, - // but not both. - if (tag == SymTagFunction) { - if (!PrintFunction(symbol, symbol)) { - return false; - } - } else if (tag == SymTagPublicSymbol) { - if (!PrintCodePublicSymbol(symbol)) { - return false; - } - } - symbol.Release(); - } while (SUCCEEDED(symbols->Next(1, &symbol, &count)) && count == 1); + } // When building with PGO, the compiler can split functions into // "hot" and "cold" blocks, and move the "cold" blocks out to separate @@ -310,12 +448,6 @@ bool PDBSourceLineWriter::PrintFunctions() { // that are children of them. We can then find the lexical parents // of those blocks and print out an extra FUNC line for blocks // that are not contained in their parent functions. - CComPtr global; - if (FAILED(session_->get_globalScope(&global))) { - fprintf(stderr, "get_globalScope failed\n"); - return false; - } - CComPtr compilands; if (FAILED(global->findChildren(SymTagCompiland, NULL, nsNone, &compilands))) { @@ -361,38 +493,28 @@ bool PDBSourceLineWriter::PrintFunctions() { compiland.Release(); } + global.Release(); return true; } -bool PDBSourceLineWriter::PrintFrameData() { +#undef max + +bool PDBSourceLineWriter::PrintFrameDataUsingPDB() { // It would be nice if it were possible to output frame data alongside the // associated function, as is done with line numbers, but the DIA API // doesn't make it possible to get the frame data in that way. - CComPtr tables; - if (FAILED(session_->getEnumTables(&tables))) - return false; - - // Pick up the first table that supports IDiaEnumFrameData. CComPtr frame_data_enum; - CComPtr table; - ULONG count; - while (!frame_data_enum && - SUCCEEDED(tables->Next(1, &table, &count)) && - count == 1) { - table->QueryInterface(_uuidof(IDiaEnumFrameData), - reinterpret_cast(&frame_data_enum)); - table.Release(); - } - if (!frame_data_enum) + if (!FindTable(session_, &frame_data_enum)) return false; - DWORD last_type = -1; - DWORD last_rva = -1; + DWORD last_type = std::numeric_limits::max(); + DWORD last_rva = std::numeric_limits::max(); DWORD last_code_size = 0; - DWORD last_prolog_size = -1; + DWORD last_prolog_size = std::numeric_limits::max(); CComPtr frame_data; + ULONG count = 0; while (SUCCEEDED(frame_data_enum->Next(1, &frame_data, &count)) && count == 1) { DWORD type; @@ -411,9 +533,6 @@ bool PDBSourceLineWriter::PrintFrameData() { if (FAILED(frame_data->get_lengthProlog(&prolog_size))) return false; - // epliog_size is always 0. - DWORD epilog_size = 0; - // parameter_size is the size of parameters passed on the stack. If any // parameters are not passed on the stack (such as in registers), their // sizes will not be included in parameter_size. @@ -460,14 +579,67 @@ bool PDBSourceLineWriter::PrintFrameData() { // this check reduces the size of the dumped symbol file by a third. if (type != last_type || rva != last_rva || code_size != last_code_size || prolog_size != last_prolog_size) { - fprintf(output_, "STACK WIN %x %x %x %x %x %x %x %x %x %d ", - type, rva, code_size, prolog_size, epilog_size, - parameter_size, saved_register_size, local_size, max_stack_size, - program_string_result == S_OK); - if (program_string_result == S_OK) { - fprintf(output_, "%ws\n", program_string); + // The prolog and the code portions of the frame have to be treated + // independently as they may have independently changed in size, or may + // even have been split. + // NOTE: If epilog size is ever non-zero, we have to do something + // similar with it. + + // Figure out where the prolog bytes have landed. + AddressRangeVector prolog_ranges; + if (prolog_size > 0) { + MapAddressRange(image_map_, AddressRange(rva, prolog_size), + &prolog_ranges); + } + + // And figure out where the code bytes have landed. + AddressRangeVector code_ranges; + MapAddressRange(image_map_, + AddressRange(rva + prolog_size, + code_size - prolog_size), + &code_ranges); + + struct FrameInfo { + DWORD rva; + DWORD code_size; + DWORD prolog_size; + }; + std::vector frame_infos; + + // Special case: The prolog and the code bytes remain contiguous. This is + // only done for compactness of the symbol file, and we could actually + // be outputting independent frame info for the prolog and code portions. + if (prolog_ranges.size() == 1 && code_ranges.size() == 1 && + prolog_ranges[0].end() == code_ranges[0].rva) { + FrameInfo fi = { prolog_ranges[0].rva, + prolog_ranges[0].length + code_ranges[0].length, + prolog_ranges[0].length }; + frame_infos.push_back(fi); } else { - fprintf(output_, "%d\n", allocates_base_pointer); + // Otherwise we output the prolog and code frame info independently. + for (size_t i = 0; i < prolog_ranges.size(); ++i) { + FrameInfo fi = { prolog_ranges[i].rva, + prolog_ranges[i].length, + prolog_ranges[i].length }; + frame_infos.push_back(fi); + } + for (size_t i = 0; i < code_ranges.size(); ++i) { + FrameInfo fi = { code_ranges[i].rva, code_ranges[i].length, 0 }; + frame_infos.push_back(fi); + } + } + + for (size_t i = 0; i < frame_infos.size(); ++i) { + const FrameInfo& fi(frame_infos[i]); + fprintf(output_, "STACK WIN %x %x %x %x %x %x %x %x %x %d ", + type, fi.rva, fi.code_size, fi.prolog_size, + 0 /* epilog_size */, parameter_size, saved_register_size, + local_size, max_stack_size, program_string_result == S_OK); + if (program_string_result == S_OK) { + fprintf(output_, "%ws\n", program_string.m_str); + } else { + fprintf(output_, "%d\n", allocates_base_pointer); + } } last_type = type; @@ -482,6 +654,149 @@ bool PDBSourceLineWriter::PrintFrameData() { return true; } +bool PDBSourceLineWriter::PrintFrameDataUsingEXE() { + if (code_file_.empty() && !FindPEFile()) { + fprintf(stderr, "Couldn't locate EXE or DLL file.\n"); + return false; + } + + // Convert wchar to native charset because ImageLoad only takes + // a PSTR as input. + string code_file; + if (!WindowsStringUtils::safe_wcstombs(code_file_, &code_file)) { + return false; + } + + AutoImage img(ImageLoad((PSTR)code_file.c_str(), NULL)); + if (!img) { + fprintf(stderr, "Failed to load %s\n", code_file.c_str()); + return false; + } + PIMAGE_OPTIONAL_HEADER64 optional_header = + &(reinterpret_cast(img->FileHeader))->OptionalHeader; + if (optional_header->Magic != IMAGE_NT_OPTIONAL_HDR64_MAGIC) { + fprintf(stderr, "Not a PE32+ image\n"); + return false; + } + + // Read Exception Directory + DWORD exception_rva = optional_header-> + DataDirectory[IMAGE_DIRECTORY_ENTRY_EXCEPTION].VirtualAddress; + DWORD exception_size = optional_header-> + DataDirectory[IMAGE_DIRECTORY_ENTRY_EXCEPTION].Size; + PIMAGE_RUNTIME_FUNCTION_ENTRY funcs = + static_cast( + ImageRvaToVa(img->FileHeader, + img->MappedAddress, + exception_rva, + &img->LastRvaSection)); + for (DWORD i = 0; i < exception_size / sizeof(*funcs); i++) { + DWORD unwind_rva = funcs[i].UnwindInfoAddress; + // handle chaining + while (unwind_rva & 0x1) { + unwind_rva ^= 0x1; + PIMAGE_RUNTIME_FUNCTION_ENTRY chained_func = + static_cast( + ImageRvaToVa(img->FileHeader, + img->MappedAddress, + unwind_rva, + &img->LastRvaSection)); + unwind_rva = chained_func->UnwindInfoAddress; + } + + UnwindInfo *unwind_info = static_cast( + ImageRvaToVa(img->FileHeader, + img->MappedAddress, + unwind_rva, + &img->LastRvaSection)); + + DWORD stack_size = 8; // minimal stack size is 8 for RIP + DWORD rip_offset = 8; + do { + for (UBYTE c = 0; c < unwind_info->count_of_codes; c++) { + UnwindCode *unwind_code = &unwind_info->unwind_code[c]; + switch (unwind_code->unwind_operation_code) { + case UWOP_PUSH_NONVOL: { + stack_size += 8; + break; + } + case UWOP_ALLOC_LARGE: { + if (unwind_code->operation_info == 0) { + c++; + if (c < unwind_info->count_of_codes) + stack_size += (unwind_code + 1)->frame_offset * 8; + } else { + c += 2; + if (c < unwind_info->count_of_codes) + stack_size += (unwind_code + 1)->frame_offset | + ((unwind_code + 2)->frame_offset << 16); + } + break; + } + case UWOP_ALLOC_SMALL: { + stack_size += unwind_code->operation_info * 8 + 8; + break; + } + case UWOP_SET_FPREG: + case UWOP_SAVE_XMM: + case UWOP_SAVE_XMM_FAR: + break; + case UWOP_SAVE_NONVOL: + case UWOP_SAVE_XMM128: { + c++; // skip slot with offset + break; + } + case UWOP_SAVE_NONVOL_FAR: + case UWOP_SAVE_XMM128_FAR: { + c += 2; // skip 2 slots with offset + break; + } + case UWOP_PUSH_MACHFRAME: { + if (unwind_code->operation_info) { + stack_size += 88; + } else { + stack_size += 80; + } + rip_offset += 80; + break; + } + } + } + if (unwind_info->flags & UNW_FLAG_CHAININFO) { + PIMAGE_RUNTIME_FUNCTION_ENTRY chained_func = + reinterpret_cast( + (unwind_info->unwind_code + + ((unwind_info->count_of_codes + 1) & ~1))); + + unwind_info = static_cast( + ImageRvaToVa(img->FileHeader, + img->MappedAddress, + chained_func->UnwindInfoAddress, + &img->LastRvaSection)); + } else { + unwind_info = NULL; + } + } while (unwind_info); + fprintf(output_, "STACK CFI INIT %x %x .cfa: $rsp .ra: .cfa %d - ^\n", + funcs[i].BeginAddress, + funcs[i].EndAddress - funcs[i].BeginAddress, rip_offset); + fprintf(output_, "STACK CFI %x .cfa: $rsp %d +\n", + funcs[i].BeginAddress, stack_size); + } + + return true; +} + +bool PDBSourceLineWriter::PrintFrameData() { + PDBModuleInfo info; + if (GetModuleInfo(&info) && info.cpu == L"x86_64") { + return PrintFrameDataUsingEXE(); + } else { + return PrintFrameDataUsingPDB(); + } + return false; +} + bool PDBSourceLineWriter::PrintCodePublicSymbol(IDiaSymbol *symbol) { BOOL is_code; if (FAILED(symbol->get_code(&is_code))) { @@ -502,8 +817,13 @@ bool PDBSourceLineWriter::PrintCodePublicSymbol(IDiaSymbol *symbol) { return false; } - fprintf(output_, "PUBLIC %x %x %ws\n", rva, - stack_param_size > 0 ? stack_param_size : 0, name); + AddressRangeVector ranges; + MapAddressRange(image_map_, AddressRange(rva, 1), &ranges); + for (size_t i = 0; i < ranges.size(); ++i) { + fprintf(output_, "PUBLIC %x %x %ws\n", ranges[i].rva, + stack_param_size > 0 ? stack_param_size : 0, + name.m_str); + } return true; } @@ -530,8 +850,8 @@ bool PDBSourceLineWriter::PrintPEInfo() { } fprintf(output_, "INFO CODE_ID %ws %ws\n", - info.code_identifier.c_str(), - info.code_file.c_str()); + info.code_identifier.c_str(), + info.code_file.c_str()); return true; } @@ -582,18 +902,18 @@ bool PDBSourceLineWriter::FindPEFile() { CComBSTR symbols_file; if (SUCCEEDED(global->get_symbolsFileName(&symbols_file))) { wstring file(symbols_file); - + // Look for an EXE or DLL file. const wchar_t *extensions[] = { L"exe", L"dll" }; for (int i = 0; i < sizeof(extensions) / sizeof(extensions[0]); i++) { size_t dot_pos = file.find_last_of(L"."); if (dot_pos != wstring::npos) { - file.replace(dot_pos + 1, wstring::npos, extensions[i]); - // Check if this file exists. - if (GetFileAttributesW(file.c_str()) != INVALID_FILE_ATTRIBUTES) { - code_file_ = file; - return true; - } + file.replace(dot_pos + 1, wstring::npos, extensions[i]); + // Check if this file exists. + if (GetFileAttributesW(file.c_str()) != INVALID_FILE_ATTRIBUTES) { + code_file_ = file; + return true; + } } } } @@ -803,13 +1123,20 @@ next_child: bool PDBSourceLineWriter::WriteMap(FILE *map_file) { output_ = map_file; + // Load the OMAP information, and disable auto-translation of addresses in + // preference of doing it ourselves. + OmapData omap_data; + if (!GetOmapDataAndDisableTranslation(session_, &omap_data)) + return false; + BuildImageMap(omap_data, &image_map_); + bool ret = PrintPDBInfo(); // This is not a critical piece of the symbol file. PrintPEInfo(); ret = ret && - PrintSourceFiles() && - PrintFunctions() && - PrintFrameData(); + PrintSourceFiles() && + PrintFunctions() && + PrintFrameData(); output_ = NULL; return ret; @@ -949,15 +1276,14 @@ bool PDBSourceLineWriter::GetPEInfo(PEModuleInfo *info) { if (opt->Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC) { // 64-bit PE file. SizeOfImage = opt->SizeOfImage; - } - else { + } else { // 32-bit PE file. SizeOfImage = img->FileHeader->OptionalHeader.SizeOfImage; } wchar_t code_identifier[32]; swprintf(code_identifier, - sizeof(code_identifier) / sizeof(code_identifier[0]), - L"%08X%X", TimeDateStamp, SizeOfImage); + sizeof(code_identifier) / sizeof(code_identifier[0]), + L"%08X%X", TimeDateStamp, SizeOfImage); info->code_identifier = code_identifier; return true; diff --git a/toolkit/crashreporter/google-breakpad/src/common/windows/pdb_source_line_writer.h b/toolkit/crashreporter/google-breakpad/src/common/windows/pdb_source_line_writer.h index aaef298c83cc..e9e89bb279ed 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/windows/pdb_source_line_writer.h +++ b/toolkit/crashreporter/google-breakpad/src/common/windows/pdb_source_line_writer.h @@ -30,14 +30,16 @@ // PDBSourceLineWriter uses a pdb file produced by Visual C++ to output // a line/address map for use with BasicSourceLineResolver. -#ifndef _PDB_SOURCE_LINE_WRITER_H__ -#define _PDB_SOURCE_LINE_WRITER_H__ +#ifndef COMMON_WINDOWS_PDB_SOURCE_LINE_WRITER_H_ +#define COMMON_WINDOWS_PDB_SOURCE_LINE_WRITER_H_ #include #include #include +#include "common/windows/omap.h" + struct IDiaEnumLineNumbers; struct IDiaSession; struct IDiaSymbol; @@ -99,10 +101,14 @@ class PDBSourceLineWriter { // Returns true on success. bool Open(const wstring &file, FileFormat format); - // Locates the pdb file for the given executable (exe or dll) file, - // and opens it. If there is already a pdb file open, it is automatically - // closed. Returns true on success. - bool OpenExecutable(const wstring &exe_file); + // Sets the code file full path. This is optional for 32-bit modules. It is + // also optional for 64-bit modules when there is an executable file stored + // in the same directory as the PDB file. It is only required for 64-bit + // modules when the executable file is not in the same location as the PDB + // file and it must be called after Open() and before WriteMap(). + // If Open() was called for an executable file, then it is an error to call + // SetCodeFile() with a different file path and it will return false. + bool SetCodeFile(const wstring &exe_file); // Writes a map file from the current pdb file to the given file stream. // Returns true on success. @@ -145,6 +151,16 @@ class PDBSourceLineWriter { // Returns true on success. bool PrintSourceFiles(); + // Outputs all of the frame information necessary to construct stack + // backtraces in the absence of frame pointers. For x86 data stored in + // .pdb files. Returns true on success. + bool PrintFrameDataUsingPDB(); + + // Outputs all of the frame information necessary to construct stack + // backtraces in the absence of frame pointers. For x64 data stored in + // .exe, .dll files. Returns true on success. + bool PrintFrameDataUsingEXE(); + // Outputs all of the frame information necessary to construct stack // backtraces in the absence of frame pointers. Returns true on success. bool PrintFrameData(); @@ -167,12 +183,12 @@ class PDBSourceLineWriter { // and an ID is stored for it, or false if it has not. bool FileIDIsCached(const wstring &file) { return unique_files_.find(file) != unique_files_.end(); - }; + } // Cache this filename and ID for later reuse. void CacheFileID(const wstring &file, DWORD id) { unique_files_[file] = id; - }; + } // Store this ID in the cache as a duplicate for this filename. void StoreDuplicateFileID(const wstring &file, DWORD id) { @@ -181,7 +197,7 @@ class PDBSourceLineWriter { // map this id to the previously seen one file_ids_[id] = iter->second; } - }; + } // Given a file's unique ID, return the ID that should be used to // reference it. There may be multiple files with identical filenames @@ -192,7 +208,7 @@ class PDBSourceLineWriter { if (iter == file_ids_.end()) return id; return iter->second; - }; + } // Find the PE file corresponding to the loaded PDB file, and // set the code_file_ member. Returns false on failure. @@ -228,6 +244,9 @@ class PDBSourceLineWriter { // This maps unique filenames to file IDs. unordered_map unique_files_; + // This is used for calculating post-transform symbol addresses and lengths. + ImageMap image_map_; + // Disallow copy ctor and operator= PDBSourceLineWriter(const PDBSourceLineWriter&); void operator=(const PDBSourceLineWriter&); @@ -235,4 +254,4 @@ class PDBSourceLineWriter { } // namespace google_breakpad -#endif // _PDB_SOURCE_LINE_WRITER_H__ +#endif // COMMON_WINDOWS_PDB_SOURCE_LINE_WRITER_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/common/windows/string_utils-inl.h b/toolkit/crashreporter/google-breakpad/src/common/windows/string_utils-inl.h index d281aaa1fee4..9b636072681a 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/windows/string_utils-inl.h +++ b/toolkit/crashreporter/google-breakpad/src/common/windows/string_utils-inl.h @@ -30,8 +30,8 @@ // string_utils-inl.h: Safer string manipulation on Windows, supporting // pre-MSVC8 environments. -#ifndef COMMON_WINDOWS_STRING_UTILS_INL_H__ -#define COMMON_WINDOWS_STRING_UTILS_INL_H__ +#ifndef COMMON_WINDOWS_STRING_UTILS_INL_H_ +#define COMMON_WINDOWS_STRING_UTILS_INL_H_ #include #include @@ -139,4 +139,4 @@ inline void WindowsStringUtils::safe_wcsncpy(wchar_t *destination, } // namespace google_breakpad -#endif // COMMON_WINDOWS_STRING_UTILS_INL_H__ +#endif // COMMON_WINDOWS_STRING_UTILS_INL_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/config.h.in b/toolkit/crashreporter/google-breakpad/src/config.h.in index dfd0e6adb098..1db015930932 100644 --- a/toolkit/crashreporter/google-breakpad/src/config.h.in +++ b/toolkit/crashreporter/google-breakpad/src/config.h.in @@ -33,9 +33,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H -/* Define to 1 if your C compiler doesn't accept -c and -o together. */ -#undef NO_MINUS_C_MINUS_O - /* Name of package */ #undef PACKAGE @@ -66,3 +63,14 @@ /* Version number of package */ #undef VERSION + +/* Enable large inode numbers on Mac OS X 10.5. */ +#ifndef _DARWIN_USE_64_BIT_INODE +# define _DARWIN_USE_64_BIT_INODE 1 +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +#undef _FILE_OFFSET_BITS + +/* Define for large files, on AIX-style hosts. */ +#undef _LARGE_FILES diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/breakpad_types.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/breakpad_types.h index e92436ff29eb..c936e1e683e3 100644 --- a/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/breakpad_types.h +++ b/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/breakpad_types.h @@ -40,35 +40,11 @@ #ifndef GOOGLE_BREAKPAD_COMMON_BREAKPAD_TYPES_H__ #define GOOGLE_BREAKPAD_COMMON_BREAKPAD_TYPES_H__ -#ifndef _WIN32 - #ifndef __STDC_FORMAT_MACROS #define __STDC_FORMAT_MACROS #endif /* __STDC_FORMAT_MACROS */ #include -#else /* !_WIN32 */ - -#if _MSC_VER >= 1600 -#include -#elif defined(BREAKPAD_CUSTOM_STDINT_H) -/* Visual C++ Pre-2010 did not ship a stdint.h, so allow - * consumers of this library to provide their own because - * there are often subtle type incompatibilities. - */ -#include BREAKPAD_CUSTOM_STDINT_H -#else -#include - -typedef unsigned __int8 uint8_t; -typedef unsigned __int16 uint16_t; -typedef __int32 int32_t; -typedef unsigned __int32 uint32_t; -typedef unsigned __int64 uint64_t; -#endif - -#endif /* !_WIN32 */ - typedef struct { uint64_t high; uint64_t low; diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_arm64.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_arm64.h new file mode 100644 index 000000000000..5ace0d9de470 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_arm64.h @@ -0,0 +1,140 @@ +/* Copyright 2013 Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +/* minidump_format.h: A cross-platform reimplementation of minidump-related + * portions of DbgHelp.h from the Windows Platform SDK. + * + * (This is C99 source, please don't corrupt it with C++.) + * + * This file contains the necessary definitions to read minidump files + * produced on ARM. These files may be read on any platform provided + * that the alignments of these structures on the processing system are + * identical to the alignments of these structures on the producing system. + * For this reason, precise-sized types are used. The structures defined + * by this file have been laid out to minimize alignment problems by + * ensuring that all members are aligned on their natural boundaries. + * In some cases, tail-padding may be significant when different ABIs specify + * different tail-padding behaviors. To avoid problems when reading or + * writing affected structures, MD_*_SIZE macros are provided where needed, + * containing the useful size of the structures without padding. + * + * Structures that are defined by Microsoft to contain a zero-length array + * are instead defined here to contain an array with one element, as + * zero-length arrays are forbidden by standard C and C++. In these cases, + * *_minsize constants are provided to be used in place of sizeof. For a + * cleaner interface to these sizes when using C++, see minidump_size.h. + * + * These structures are also sufficient to populate minidump files. + * + * Because precise data type sizes are crucial for this implementation to + * function properly and portably, a set of primitive types with known sizes + * are used as the basis of each structure defined by this file. + * + * Author: Colin Blundell + */ + +/* + * ARM64 support + */ + +#ifndef GOOGLE_BREAKPAD_COMMON_MINIDUMP_CPU_ARM64_H__ +#define GOOGLE_BREAKPAD_COMMON_MINIDUMP_CPU_ARM64_H__ + +#define MD_FLOATINGSAVEAREA_ARM64_FPR_COUNT 32 + +typedef struct { + uint32_t fpsr; /* FPU status register */ + uint32_t fpcr; /* FPU control register */ + + /* 32 128-bit floating point registers, d0 .. d31. */ + uint128_struct regs[MD_FLOATINGSAVEAREA_ARM64_FPR_COUNT]; +} MDFloatingSaveAreaARM64; + +#define MD_CONTEXT_ARM64_GPR_COUNT 33 + +/* Use the same 32-bit alignment when accessing this structure from 64-bit code + * as is used natively in 32-bit code. */ +#pragma pack(push, 4) + +typedef struct { + /* The next field determines the layout of the structure, and which parts + * of it are populated + */ + uint64_t context_flags; + + /* 33 64-bit integer registers, x0 .. x31 + the PC + * Note the following fixed uses: + * x29 is the frame pointer + * x30 is the link register + * x31 is the stack pointer + * The PC is effectively x32. + */ + uint64_t iregs[MD_CONTEXT_ARM64_GPR_COUNT]; + + /* CPSR (flags, basically): 32 bits: + bit 31 - N (negative) + bit 30 - Z (zero) + bit 29 - C (carry) + bit 28 - V (overflow) + bit 27 - Q (saturation flag, sticky) + All other fields -- ignore */ + uint32_t cpsr; + + /* The next field is included with MD_CONTEXT64_ARM_FLOATING_POINT */ + MDFloatingSaveAreaARM64 float_save; + +} MDRawContextARM64; + +#pragma pack(pop) + +/* Indices into iregs for registers with a dedicated or conventional + * purpose. + */ +enum MDARM64RegisterNumbers { + MD_CONTEXT_ARM64_REG_FP = 29, + MD_CONTEXT_ARM64_REG_LR = 30, + MD_CONTEXT_ARM64_REG_SP = 31, + MD_CONTEXT_ARM64_REG_PC = 32 +}; + +/* For (MDRawContextARM64).context_flags. These values indicate the type of + * context stored in the structure. MD_CONTEXT_ARM64 is Breakpad-defined. + * This value was chosen to avoid likely conflicts with MD_CONTEXT_* + * for other CPUs. */ +#define MD_CONTEXT_ARM64 0x80000000 +#define MD_CONTEXT_ARM64_INTEGER (MD_CONTEXT_ARM64 | 0x00000002) +#define MD_CONTEXT_ARM64_FLOATING_POINT (MD_CONTEXT_ARM64 | 0x00000004) + +#define MD_CONTEXT_ARM64_FULL (MD_CONTEXT_ARM64_INTEGER | \ + MD_CONTEXT_ARM64_FLOATING_POINT) + +#define MD_CONTEXT_ARM64_ALL (MD_CONTEXT_ARM64_INTEGER | \ + MD_CONTEXT_ARM64_FLOATING_POINT) + +#endif /* GOOGLE_BREAKPAD_COMMON_MINIDUMP_CPU_ARM64_H__ */ diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_mips.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_mips.h new file mode 100644 index 000000000000..6cbe3023f9c1 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_mips.h @@ -0,0 +1,160 @@ +/* Copyright (c) 2013, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +/* minidump_format.h: A cross-platform reimplementation of minidump-related + * portions of DbgHelp.h from the Windows Platform SDK. + * + * (This is C99 source, please don't corrupt it with C++.) + * + * This file contains the necessary definitions to read minidump files + * produced on MIPS. These files may be read on any platform provided + * that the alignments of these structures on the processing system are + * identical to the alignments of these structures on the producing system. + * For this reason, precise-sized types are used. The structures defined + * by this file have been laid out to minimize alignment problems by + * ensuring that all members are aligned on their natural boundaries. + * In some cases, tail-padding may be significant when different ABIs specify + * different tail-padding behaviors. To avoid problems when reading or + * writing affected structures, MD_*_SIZE macros are provided where needed, + * containing the useful size of the structures without padding. + * + * Structures that are defined by Microsoft to contain a zero-length array + * are instead defined here to contain an array with one element, as + * zero-length arrays are forbidden by standard C and C++. In these cases, + * *_minsize constants are provided to be used in place of sizeof. For a + * cleaner interface to these sizes when using C++, see minidump_size.h. + * + * These structures are also sufficient to populate minidump files. + * + * Because precise data type sizes are crucial for this implementation to + * function properly and portably, a set of primitive types with known sizes + * are used as the basis of each structure defined by this file. + * + * Author: Chris Dearman + */ + +/* + * MIPS support + */ + +#ifndef GOOGLE_BREAKPAD_COMMON_MINIDUMP_CPU_MIPS_H__ +#define GOOGLE_BREAKPAD_COMMON_MINIDUMP_CPU_MIPS_H__ + +#define MD_CONTEXT_MIPS_GPR_COUNT 32 +#define MD_FLOATINGSAVEAREA_MIPS_FPR_COUNT 32 +#define MD_CONTEXT_MIPS_DSP_COUNT 3 + +/* + * Note that these structures *do not* map directly to the CONTEXT + * structure defined in WinNT.h in the Windows Mobile SDK. That structure + * does not accomodate VFPv3, and I'm unsure if it was ever used in the + * wild anyway, as Windows CE only seems to produce "cedumps" which + * are not exactly minidumps. + */ +typedef struct { + /* 32 64-bit floating point registers, f0..f31 */ + uint64_t regs[MD_FLOATINGSAVEAREA_MIPS_FPR_COUNT]; + + uint32_t fpcsr; /* FPU status register. */ + uint32_t fir; /* FPU implementation register. */ +} MDFloatingSaveAreaMIPS; + +typedef struct { + /* The next field determines the layout of the structure, and which parts + * of it are populated. + */ + uint32_t context_flags; + uint32_t _pad0; + + /* 32 64-bit integer registers, r0..r31. + * Note the following fixed uses: + * r29 is the stack pointer. + * r31 is the return address. + */ + uint64_t iregs[MD_CONTEXT_MIPS_GPR_COUNT]; + + /* multiply/divide result. */ + uint64_t mdhi, mdlo; + + /* DSP accumulators. */ + uint32_t hi[MD_CONTEXT_MIPS_DSP_COUNT]; + uint32_t lo[MD_CONTEXT_MIPS_DSP_COUNT]; + uint32_t dsp_control; + uint32_t _pad1; + + uint64_t epc; + uint64_t badvaddr; + uint32_t status; + uint32_t cause; + + /* The next field is included with MD_CONTEXT_MIPS_FLOATING_POINT. */ + MDFloatingSaveAreaMIPS float_save; + +} MDRawContextMIPS; + +/* Indices into iregs for registers with a dedicated or conventional + * purpose. + */ +enum MDMIPSRegisterNumbers { + MD_CONTEXT_MIPS_REG_S0 = 16, + MD_CONTEXT_MIPS_REG_S1 = 17, + MD_CONTEXT_MIPS_REG_S2 = 18, + MD_CONTEXT_MIPS_REG_S3 = 19, + MD_CONTEXT_MIPS_REG_S4 = 20, + MD_CONTEXT_MIPS_REG_S5 = 21, + MD_CONTEXT_MIPS_REG_S6 = 22, + MD_CONTEXT_MIPS_REG_S7 = 23, + MD_CONTEXT_MIPS_REG_GP = 28, + MD_CONTEXT_MIPS_REG_SP = 29, + MD_CONTEXT_MIPS_REG_FP = 30, + MD_CONTEXT_MIPS_REG_RA = 31, +}; + +/* For (MDRawContextMIPS).context_flags. These values indicate the type of + * context stored in the structure. */ +/* CONTEXT_MIPS from the Windows CE 5.0 SDK. This value isn't correct + * because this bit can be used for flags. Presumably this value was + * never actually used in minidumps, but only in "CEDumps" which + * are a whole parallel minidump file format for Windows CE. + * Therefore, Breakpad defines its own value for MIPS CPUs. + */ +#define MD_CONTEXT_MIPS 0x00040000 +#define MD_CONTEXT_MIPS_INTEGER (MD_CONTEXT_MIPS | 0x00000002) +#define MD_CONTEXT_MIPS_FLOATING_POINT (MD_CONTEXT_MIPS | 0x00000004) +#define MD_CONTEXT_MIPS_DSP (MD_CONTEXT_MIPS | 0x00000008) + +#define MD_CONTEXT_MIPS_FULL (MD_CONTEXT_MIPS_INTEGER | \ + MD_CONTEXT_MIPS_FLOATING_POINT | \ + MD_CONTEXT_MIPS_DSP) + +#define MD_CONTEXT_MIPS_ALL (MD_CONTEXT_MIPS_INTEGER | \ + MD_CONTEXT_MIPS_FLOATING_POINT \ + MD_CONTEXT_MIPS_DSP) + +#endif // GOOGLE_BREAKPAD_COMMON_MINIDUMP_CPU_MIPS_H__ diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_ppc.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_ppc.h index 02ac32202329..b24cc42438e4 100644 --- a/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_ppc.h +++ b/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_ppc.h @@ -140,6 +140,11 @@ typedef struct { MDVectorSaveAreaPPC vector_save; } MDRawContextPPC; /* Based on ppc_thread_state */ +/* Indices into gpr for registers with a dedicated or conventional purpose. */ +enum MDPPCRegisterNumbers { + MD_CONTEXT_PPC_REG_SP = 1 +}; + #if defined(__SUNPRO_C) || defined(__SUNPRO_CC) #pragma pack(0) #else diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_ppc64.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_ppc64.h index da4f8723efc5..61f41938655e 100644 --- a/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_ppc64.h +++ b/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_ppc64.h @@ -112,18 +112,23 @@ typedef struct { MDVectorSaveAreaPPC vector_save; } MDRawContextPPC64; /* Based on ppc_thread_state */ +/* Indices into gpr for registers with a dedicated or conventional purpose. */ +enum MDPPC64RegisterNumbers { + MD_CONTEXT_PPC64_REG_SP = 1 +}; + /* For (MDRawContextPPC).context_flags. These values indicate the type of * context stored in the structure. MD_CONTEXT_PPC is Breakpad-defined. Its * value was chosen to avoid likely conflicts with MD_CONTEXT_* for other * CPUs. */ -#define MD_CONTEXT_PPC 0x20000000 -#define MD_CONTEXT_PPC_BASE (MD_CONTEXT_PPC | 0x00000001) -#define MD_CONTEXT_PPC_FLOATING_POINT (MD_CONTEXT_PPC | 0x00000008) -#define MD_CONTEXT_PPC_VECTOR (MD_CONTEXT_PPC | 0x00000020) +#define MD_CONTEXT_PPC64 0x01000000 +#define MD_CONTEXT_PPC64_BASE (MD_CONTEXT_PPC64 | 0x00000001) +#define MD_CONTEXT_PPC64_FLOATING_POINT (MD_CONTEXT_PPC64 | 0x00000008) +#define MD_CONTEXT_PPC64_VECTOR (MD_CONTEXT_PPC64 | 0x00000020) -#define MD_CONTEXT_PPC_FULL MD_CONTEXT_PPC_BASE -#define MD_CONTEXT_PPC_ALL (MD_CONTEXT_PPC_FULL | \ - MD_CONTEXT_PPC_FLOATING_POINT | \ - MD_CONTEXT_PPC_VECTOR) +#define MD_CONTEXT_PPC64_FULL MD_CONTEXT_PPC64_BASE +#define MD_CONTEXT_PPC64_ALL (MD_CONTEXT_PPC64_FULL | \ + MD_CONTEXT_PPC64_FLOATING_POINT | \ + MD_CONTEXT_PPC64_VECTOR) #endif /* GOOGLE_BREAKPAD_COMMON_MINIDUMP_CPU_PPC64_H__ */ diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_sparc.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_sparc.h index ddc4c7590dd3..95c08b1743e7 100644 --- a/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_sparc.h +++ b/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_sparc.h @@ -138,6 +138,11 @@ typedef struct { } MDRawContextSPARC; /* CONTEXT_SPARC */ +/* Indices into g_r for registers with a dedicated or conventional purpose. */ +enum MDSPARCRegisterNumbers { + MD_CONTEXT_SPARC_REG_SP = 14 +}; + /* For (MDRawContextSPARC).context_flags. These values indicate the type of * context stored in the structure. MD_CONTEXT_SPARC is Breakpad-defined. Its * value was chosen to avoid likely conflicts with MD_CONTEXT_* for other diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/port.cc b/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_exception_ps3.h old mode 100755 new mode 100644 similarity index 51% rename from toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/port.cc rename to toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_exception_ps3.h index bfa6e70afbb0..adff5a6bbc6d --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/port.cc +++ b/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_exception_ps3.h @@ -1,10 +1,10 @@ -/* Copyright (c) 2008, Google Inc. +/* Copyright (c) 2013, Google Inc. * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: - * + * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above @@ -14,7 +14,7 @@ * * Neither the name of Google Inc. nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -25,40 +25,43 @@ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * --- - * Author: Craig Silverstein - * Copied from google-perftools and modified by Shinichiro Hamaji - */ + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef _WIN32 -# error You should only be including windows/port.cc in a windows environment! -#endif +/* minidump_exception_ps3.h: A definition of exception codes for + * PS3 */ -#include "config.h" -#include // for va_list, va_start, va_end -#include // for strstr() -#include -#include -#include -#include "port.h" -using std::string; -using std::vector; +#ifndef GOOGLE_BREAKPAD_COMMON_MINIDUMP_EXCEPTION_PS3_H__ +#define GOOGLE_BREAKPAD_COMMON_MINIDUMP_EXCEPTION_PS3_H__ -// These call the windows _vsnprintf, but always NUL-terminate. -int safe_vsnprintf(char *str, size_t size, const char *format, va_list ap) { - if (size == 0) // not even room for a \0? - return -1; // not what C99 says to do, but what windows does - str[size-1] = '\0'; - return _vsnprintf(str, size-1, format, ap); -} +#include -int snprintf(char *str, size_t size, const char *format, ...) { - va_list ap; - va_start(ap, format); - const int r = vsnprintf(str, size, format, ap); - va_end(ap); - return r; -} +#include "google_breakpad/common/breakpad_types.h" + +typedef enum { + MD_EXCEPTION_CODE_PS3_UNKNOWN = 0, + MD_EXCEPTION_CODE_PS3_TRAP_EXCEP = 1, + MD_EXCEPTION_CODE_PS3_PRIV_INSTR = 2, + MD_EXCEPTION_CODE_PS3_ILLEGAL_INSTR = 3, + MD_EXCEPTION_CODE_PS3_INSTR_STORAGE = 4, + MD_EXCEPTION_CODE_PS3_INSTR_SEGMENT = 5, + MD_EXCEPTION_CODE_PS3_DATA_STORAGE = 6, + MD_EXCEPTION_CODE_PS3_DATA_SEGMENT = 7, + MD_EXCEPTION_CODE_PS3_FLOAT_POINT = 8, + MD_EXCEPTION_CODE_PS3_DABR_MATCH = 9, + MD_EXCEPTION_CODE_PS3_ALIGN_EXCEP = 10, + MD_EXCEPTION_CODE_PS3_MEMORY_ACCESS = 11, + MD_EXCEPTION_CODE_PS3_COPRO_ALIGN = 12, + MD_EXCEPTION_CODE_PS3_COPRO_INVALID_COM = 13, + MD_EXCEPTION_CODE_PS3_COPRO_ERR = 14, + MD_EXCEPTION_CODE_PS3_COPRO_FIR = 15, + MD_EXCEPTION_CODE_PS3_COPRO_DATA_SEGMENT = 16, + MD_EXCEPTION_CODE_PS3_COPRO_DATA_STORAGE = 17, + MD_EXCEPTION_CODE_PS3_COPRO_STOP_INSTR = 18, + MD_EXCEPTION_CODE_PS3_COPRO_HALT_INSTR = 19, + MD_EXCEPTION_CODE_PS3_COPRO_HALTINST_UNKNOWN = 20, + MD_EXCEPTION_CODE_PS3_COPRO_MEMORY_ACCESS = 21, + MD_EXCEPTION_CODE_PS3_GRAPHIC = 22 +} MDExceptionCodePS3; + +#endif /* GOOGLE_BREAKPAD_COMMON_MINIDUMP_EXCEPTION_PS3_H__ */ diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_exception_win32.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_exception_win32.h index 458a70543884..e4cd59edd5f1 100644 --- a/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_exception_win32.h +++ b/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_exception_win32.h @@ -105,6 +105,2143 @@ typedef enum { generated by Visual C++ compiler */ } MDExceptionCodeWin; + +/* For (MDException).exception_information[2], when (MDException).exception_code + * is MD_EXCEPTION_CODE_WIN_IN_PAGE_ERROR. This describes the underlying reason + * for the error. These values come from ntstatus.h. + * + * The content of this enum was created from ntstatus.h in the 8.1 SDK with + * + * egrep '#define [A-Z_0-9]+\s+\(\(NTSTATUS\)0xC[0-9A-F]+L\)' ntstatus.h + * | tr -d '\r' + * | sed -r 's@#define ([A-Z_0-9]+)\s+\(\(NTSTATUS\)(0xC[0-9A-F]+)L\).*@\2 \1@' + * | sort + * | sed -r 's@(0xC[0-9A-F]+) ([A-Z_0-9]+)@ MD_NTSTATUS_WIN_\2 = \1,@' + * + * With easy copy to clipboard with + * | xclip -selection c # on linux + * | clip # on windows + * | pbcopy # on mac + * + * and then the last comma manually removed. */ +typedef enum { + MD_NTSTATUS_WIN_STATUS_UNSUCCESSFUL = 0xC0000001, + MD_NTSTATUS_WIN_STATUS_NOT_IMPLEMENTED = 0xC0000002, + MD_NTSTATUS_WIN_STATUS_INVALID_INFO_CLASS = 0xC0000003, + MD_NTSTATUS_WIN_STATUS_INFO_LENGTH_MISMATCH = 0xC0000004, + MD_NTSTATUS_WIN_STATUS_ACCESS_VIOLATION = 0xC0000005, + MD_NTSTATUS_WIN_STATUS_IN_PAGE_ERROR = 0xC0000006, + MD_NTSTATUS_WIN_STATUS_PAGEFILE_QUOTA = 0xC0000007, + MD_NTSTATUS_WIN_STATUS_INVALID_HANDLE = 0xC0000008, + MD_NTSTATUS_WIN_STATUS_BAD_INITIAL_STACK = 0xC0000009, + MD_NTSTATUS_WIN_STATUS_BAD_INITIAL_PC = 0xC000000A, + MD_NTSTATUS_WIN_STATUS_INVALID_CID = 0xC000000B, + MD_NTSTATUS_WIN_STATUS_TIMER_NOT_CANCELED = 0xC000000C, + MD_NTSTATUS_WIN_STATUS_INVALID_PARAMETER = 0xC000000D, + MD_NTSTATUS_WIN_STATUS_NO_SUCH_DEVICE = 0xC000000E, + MD_NTSTATUS_WIN_STATUS_NO_SUCH_FILE = 0xC000000F, + MD_NTSTATUS_WIN_STATUS_INVALID_DEVICE_REQUEST = 0xC0000010, + MD_NTSTATUS_WIN_STATUS_END_OF_FILE = 0xC0000011, + MD_NTSTATUS_WIN_STATUS_WRONG_VOLUME = 0xC0000012, + MD_NTSTATUS_WIN_STATUS_NO_MEDIA_IN_DEVICE = 0xC0000013, + MD_NTSTATUS_WIN_STATUS_UNRECOGNIZED_MEDIA = 0xC0000014, + MD_NTSTATUS_WIN_STATUS_NONEXISTENT_SECTOR = 0xC0000015, + MD_NTSTATUS_WIN_STATUS_MORE_PROCESSING_REQUIRED = 0xC0000016, + MD_NTSTATUS_WIN_STATUS_NO_MEMORY = 0xC0000017, + MD_NTSTATUS_WIN_STATUS_CONFLICTING_ADDRESSES = 0xC0000018, + MD_NTSTATUS_WIN_STATUS_NOT_MAPPED_VIEW = 0xC0000019, + MD_NTSTATUS_WIN_STATUS_UNABLE_TO_FREE_VM = 0xC000001A, + MD_NTSTATUS_WIN_STATUS_UNABLE_TO_DELETE_SECTION = 0xC000001B, + MD_NTSTATUS_WIN_STATUS_INVALID_SYSTEM_SERVICE = 0xC000001C, + MD_NTSTATUS_WIN_STATUS_ILLEGAL_INSTRUCTION = 0xC000001D, + MD_NTSTATUS_WIN_STATUS_INVALID_LOCK_SEQUENCE = 0xC000001E, + MD_NTSTATUS_WIN_STATUS_INVALID_VIEW_SIZE = 0xC000001F, + MD_NTSTATUS_WIN_STATUS_INVALID_FILE_FOR_SECTION = 0xC0000020, + MD_NTSTATUS_WIN_STATUS_ALREADY_COMMITTED = 0xC0000021, + MD_NTSTATUS_WIN_STATUS_ACCESS_DENIED = 0xC0000022, + MD_NTSTATUS_WIN_STATUS_BUFFER_TOO_SMALL = 0xC0000023, + MD_NTSTATUS_WIN_STATUS_OBJECT_TYPE_MISMATCH = 0xC0000024, + MD_NTSTATUS_WIN_STATUS_NONCONTINUABLE_EXCEPTION = 0xC0000025, + MD_NTSTATUS_WIN_STATUS_INVALID_DISPOSITION = 0xC0000026, + MD_NTSTATUS_WIN_STATUS_UNWIND = 0xC0000027, + MD_NTSTATUS_WIN_STATUS_BAD_STACK = 0xC0000028, + MD_NTSTATUS_WIN_STATUS_INVALID_UNWIND_TARGET = 0xC0000029, + MD_NTSTATUS_WIN_STATUS_NOT_LOCKED = 0xC000002A, + MD_NTSTATUS_WIN_STATUS_PARITY_ERROR = 0xC000002B, + MD_NTSTATUS_WIN_STATUS_UNABLE_TO_DECOMMIT_VM = 0xC000002C, + MD_NTSTATUS_WIN_STATUS_NOT_COMMITTED = 0xC000002D, + MD_NTSTATUS_WIN_STATUS_INVALID_PORT_ATTRIBUTES = 0xC000002E, + MD_NTSTATUS_WIN_STATUS_PORT_MESSAGE_TOO_LONG = 0xC000002F, + MD_NTSTATUS_WIN_STATUS_INVALID_PARAMETER_MIX = 0xC0000030, + MD_NTSTATUS_WIN_STATUS_INVALID_QUOTA_LOWER = 0xC0000031, + MD_NTSTATUS_WIN_STATUS_DISK_CORRUPT_ERROR = 0xC0000032, + MD_NTSTATUS_WIN_STATUS_OBJECT_NAME_INVALID = 0xC0000033, + MD_NTSTATUS_WIN_STATUS_OBJECT_NAME_NOT_FOUND = 0xC0000034, + MD_NTSTATUS_WIN_STATUS_OBJECT_NAME_COLLISION = 0xC0000035, + MD_NTSTATUS_WIN_STATUS_PORT_DISCONNECTED = 0xC0000037, + MD_NTSTATUS_WIN_STATUS_DEVICE_ALREADY_ATTACHED = 0xC0000038, + MD_NTSTATUS_WIN_STATUS_OBJECT_PATH_INVALID = 0xC0000039, + MD_NTSTATUS_WIN_STATUS_OBJECT_PATH_NOT_FOUND = 0xC000003A, + MD_NTSTATUS_WIN_STATUS_OBJECT_PATH_SYNTAX_BAD = 0xC000003B, + MD_NTSTATUS_WIN_STATUS_DATA_OVERRUN = 0xC000003C, + MD_NTSTATUS_WIN_STATUS_DATA_LATE_ERROR = 0xC000003D, + MD_NTSTATUS_WIN_STATUS_DATA_ERROR = 0xC000003E, + MD_NTSTATUS_WIN_STATUS_CRC_ERROR = 0xC000003F, + MD_NTSTATUS_WIN_STATUS_SECTION_TOO_BIG = 0xC0000040, + MD_NTSTATUS_WIN_STATUS_PORT_CONNECTION_REFUSED = 0xC0000041, + MD_NTSTATUS_WIN_STATUS_INVALID_PORT_HANDLE = 0xC0000042, + MD_NTSTATUS_WIN_STATUS_SHARING_VIOLATION = 0xC0000043, + MD_NTSTATUS_WIN_STATUS_QUOTA_EXCEEDED = 0xC0000044, + MD_NTSTATUS_WIN_STATUS_INVALID_PAGE_PROTECTION = 0xC0000045, + MD_NTSTATUS_WIN_STATUS_MUTANT_NOT_OWNED = 0xC0000046, + MD_NTSTATUS_WIN_STATUS_SEMAPHORE_LIMIT_EXCEEDED = 0xC0000047, + MD_NTSTATUS_WIN_STATUS_PORT_ALREADY_SET = 0xC0000048, + MD_NTSTATUS_WIN_STATUS_SECTION_NOT_IMAGE = 0xC0000049, + MD_NTSTATUS_WIN_STATUS_SUSPEND_COUNT_EXCEEDED = 0xC000004A, + MD_NTSTATUS_WIN_STATUS_THREAD_IS_TERMINATING = 0xC000004B, + MD_NTSTATUS_WIN_STATUS_BAD_WORKING_SET_LIMIT = 0xC000004C, + MD_NTSTATUS_WIN_STATUS_INCOMPATIBLE_FILE_MAP = 0xC000004D, + MD_NTSTATUS_WIN_STATUS_SECTION_PROTECTION = 0xC000004E, + MD_NTSTATUS_WIN_STATUS_EAS_NOT_SUPPORTED = 0xC000004F, + MD_NTSTATUS_WIN_STATUS_EA_TOO_LARGE = 0xC0000050, + MD_NTSTATUS_WIN_STATUS_NONEXISTENT_EA_ENTRY = 0xC0000051, + MD_NTSTATUS_WIN_STATUS_NO_EAS_ON_FILE = 0xC0000052, + MD_NTSTATUS_WIN_STATUS_EA_CORRUPT_ERROR = 0xC0000053, + MD_NTSTATUS_WIN_STATUS_FILE_LOCK_CONFLICT = 0xC0000054, + MD_NTSTATUS_WIN_STATUS_LOCK_NOT_GRANTED = 0xC0000055, + MD_NTSTATUS_WIN_STATUS_DELETE_PENDING = 0xC0000056, + MD_NTSTATUS_WIN_STATUS_CTL_FILE_NOT_SUPPORTED = 0xC0000057, + MD_NTSTATUS_WIN_STATUS_UNKNOWN_REVISION = 0xC0000058, + MD_NTSTATUS_WIN_STATUS_REVISION_MISMATCH = 0xC0000059, + MD_NTSTATUS_WIN_STATUS_INVALID_OWNER = 0xC000005A, + MD_NTSTATUS_WIN_STATUS_INVALID_PRIMARY_GROUP = 0xC000005B, + MD_NTSTATUS_WIN_STATUS_NO_IMPERSONATION_TOKEN = 0xC000005C, + MD_NTSTATUS_WIN_STATUS_CANT_DISABLE_MANDATORY = 0xC000005D, + MD_NTSTATUS_WIN_STATUS_NO_LOGON_SERVERS = 0xC000005E, + MD_NTSTATUS_WIN_STATUS_NO_SUCH_LOGON_SESSION = 0xC000005F, + MD_NTSTATUS_WIN_STATUS_NO_SUCH_PRIVILEGE = 0xC0000060, + MD_NTSTATUS_WIN_STATUS_PRIVILEGE_NOT_HELD = 0xC0000061, + MD_NTSTATUS_WIN_STATUS_INVALID_ACCOUNT_NAME = 0xC0000062, + MD_NTSTATUS_WIN_STATUS_USER_EXISTS = 0xC0000063, + MD_NTSTATUS_WIN_STATUS_NO_SUCH_USER = 0xC0000064, + MD_NTSTATUS_WIN_STATUS_GROUP_EXISTS = 0xC0000065, + MD_NTSTATUS_WIN_STATUS_NO_SUCH_GROUP = 0xC0000066, + MD_NTSTATUS_WIN_STATUS_MEMBER_IN_GROUP = 0xC0000067, + MD_NTSTATUS_WIN_STATUS_MEMBER_NOT_IN_GROUP = 0xC0000068, + MD_NTSTATUS_WIN_STATUS_LAST_ADMIN = 0xC0000069, + MD_NTSTATUS_WIN_STATUS_WRONG_PASSWORD = 0xC000006A, + MD_NTSTATUS_WIN_STATUS_ILL_FORMED_PASSWORD = 0xC000006B, + MD_NTSTATUS_WIN_STATUS_PASSWORD_RESTRICTION = 0xC000006C, + MD_NTSTATUS_WIN_STATUS_LOGON_FAILURE = 0xC000006D, + MD_NTSTATUS_WIN_STATUS_ACCOUNT_RESTRICTION = 0xC000006E, + MD_NTSTATUS_WIN_STATUS_INVALID_LOGON_HOURS = 0xC000006F, + MD_NTSTATUS_WIN_STATUS_INVALID_WORKSTATION = 0xC0000070, + MD_NTSTATUS_WIN_STATUS_PASSWORD_EXPIRED = 0xC0000071, + MD_NTSTATUS_WIN_STATUS_ACCOUNT_DISABLED = 0xC0000072, + MD_NTSTATUS_WIN_STATUS_NONE_MAPPED = 0xC0000073, + MD_NTSTATUS_WIN_STATUS_TOO_MANY_LUIDS_REQUESTED = 0xC0000074, + MD_NTSTATUS_WIN_STATUS_LUIDS_EXHAUSTED = 0xC0000075, + MD_NTSTATUS_WIN_STATUS_INVALID_SUB_AUTHORITY = 0xC0000076, + MD_NTSTATUS_WIN_STATUS_INVALID_ACL = 0xC0000077, + MD_NTSTATUS_WIN_STATUS_INVALID_SID = 0xC0000078, + MD_NTSTATUS_WIN_STATUS_INVALID_SECURITY_DESCR = 0xC0000079, + MD_NTSTATUS_WIN_STATUS_PROCEDURE_NOT_FOUND = 0xC000007A, + MD_NTSTATUS_WIN_STATUS_INVALID_IMAGE_FORMAT = 0xC000007B, + MD_NTSTATUS_WIN_STATUS_NO_TOKEN = 0xC000007C, + MD_NTSTATUS_WIN_STATUS_BAD_INHERITANCE_ACL = 0xC000007D, + MD_NTSTATUS_WIN_STATUS_RANGE_NOT_LOCKED = 0xC000007E, + MD_NTSTATUS_WIN_STATUS_DISK_FULL = 0xC000007F, + MD_NTSTATUS_WIN_STATUS_SERVER_DISABLED = 0xC0000080, + MD_NTSTATUS_WIN_STATUS_SERVER_NOT_DISABLED = 0xC0000081, + MD_NTSTATUS_WIN_STATUS_TOO_MANY_GUIDS_REQUESTED = 0xC0000082, + MD_NTSTATUS_WIN_STATUS_GUIDS_EXHAUSTED = 0xC0000083, + MD_NTSTATUS_WIN_STATUS_INVALID_ID_AUTHORITY = 0xC0000084, + MD_NTSTATUS_WIN_STATUS_AGENTS_EXHAUSTED = 0xC0000085, + MD_NTSTATUS_WIN_STATUS_INVALID_VOLUME_LABEL = 0xC0000086, + MD_NTSTATUS_WIN_STATUS_SECTION_NOT_EXTENDED = 0xC0000087, + MD_NTSTATUS_WIN_STATUS_NOT_MAPPED_DATA = 0xC0000088, + MD_NTSTATUS_WIN_STATUS_RESOURCE_DATA_NOT_FOUND = 0xC0000089, + MD_NTSTATUS_WIN_STATUS_RESOURCE_TYPE_NOT_FOUND = 0xC000008A, + MD_NTSTATUS_WIN_STATUS_RESOURCE_NAME_NOT_FOUND = 0xC000008B, + MD_NTSTATUS_WIN_STATUS_ARRAY_BOUNDS_EXCEEDED = 0xC000008C, + MD_NTSTATUS_WIN_STATUS_FLOAT_DENORMAL_OPERAND = 0xC000008D, + MD_NTSTATUS_WIN_STATUS_FLOAT_DIVIDE_BY_ZERO = 0xC000008E, + MD_NTSTATUS_WIN_STATUS_FLOAT_INEXACT_RESULT = 0xC000008F, + MD_NTSTATUS_WIN_STATUS_FLOAT_INVALID_OPERATION = 0xC0000090, + MD_NTSTATUS_WIN_STATUS_FLOAT_OVERFLOW = 0xC0000091, + MD_NTSTATUS_WIN_STATUS_FLOAT_STACK_CHECK = 0xC0000092, + MD_NTSTATUS_WIN_STATUS_FLOAT_UNDERFLOW = 0xC0000093, + MD_NTSTATUS_WIN_STATUS_INTEGER_DIVIDE_BY_ZERO = 0xC0000094, + MD_NTSTATUS_WIN_STATUS_INTEGER_OVERFLOW = 0xC0000095, + MD_NTSTATUS_WIN_STATUS_PRIVILEGED_INSTRUCTION = 0xC0000096, + MD_NTSTATUS_WIN_STATUS_TOO_MANY_PAGING_FILES = 0xC0000097, + MD_NTSTATUS_WIN_STATUS_FILE_INVALID = 0xC0000098, + MD_NTSTATUS_WIN_STATUS_ALLOTTED_SPACE_EXCEEDED = 0xC0000099, + MD_NTSTATUS_WIN_STATUS_INSUFFICIENT_RESOURCES = 0xC000009A, + MD_NTSTATUS_WIN_STATUS_DFS_EXIT_PATH_FOUND = 0xC000009B, + MD_NTSTATUS_WIN_STATUS_DEVICE_DATA_ERROR = 0xC000009C, + MD_NTSTATUS_WIN_STATUS_DEVICE_NOT_CONNECTED = 0xC000009D, + MD_NTSTATUS_WIN_STATUS_DEVICE_POWER_FAILURE = 0xC000009E, + MD_NTSTATUS_WIN_STATUS_FREE_VM_NOT_AT_BASE = 0xC000009F, + MD_NTSTATUS_WIN_STATUS_MEMORY_NOT_ALLOCATED = 0xC00000A0, + MD_NTSTATUS_WIN_STATUS_WORKING_SET_QUOTA = 0xC00000A1, + MD_NTSTATUS_WIN_STATUS_MEDIA_WRITE_PROTECTED = 0xC00000A2, + MD_NTSTATUS_WIN_STATUS_DEVICE_NOT_READY = 0xC00000A3, + MD_NTSTATUS_WIN_STATUS_INVALID_GROUP_ATTRIBUTES = 0xC00000A4, + MD_NTSTATUS_WIN_STATUS_BAD_IMPERSONATION_LEVEL = 0xC00000A5, + MD_NTSTATUS_WIN_STATUS_CANT_OPEN_ANONYMOUS = 0xC00000A6, + MD_NTSTATUS_WIN_STATUS_BAD_VALIDATION_CLASS = 0xC00000A7, + MD_NTSTATUS_WIN_STATUS_BAD_TOKEN_TYPE = 0xC00000A8, + MD_NTSTATUS_WIN_STATUS_BAD_MASTER_BOOT_RECORD = 0xC00000A9, + MD_NTSTATUS_WIN_STATUS_INSTRUCTION_MISALIGNMENT = 0xC00000AA, + MD_NTSTATUS_WIN_STATUS_INSTANCE_NOT_AVAILABLE = 0xC00000AB, + MD_NTSTATUS_WIN_STATUS_PIPE_NOT_AVAILABLE = 0xC00000AC, + MD_NTSTATUS_WIN_STATUS_INVALID_PIPE_STATE = 0xC00000AD, + MD_NTSTATUS_WIN_STATUS_PIPE_BUSY = 0xC00000AE, + MD_NTSTATUS_WIN_STATUS_ILLEGAL_FUNCTION = 0xC00000AF, + MD_NTSTATUS_WIN_STATUS_PIPE_DISCONNECTED = 0xC00000B0, + MD_NTSTATUS_WIN_STATUS_PIPE_CLOSING = 0xC00000B1, + MD_NTSTATUS_WIN_STATUS_PIPE_CONNECTED = 0xC00000B2, + MD_NTSTATUS_WIN_STATUS_PIPE_LISTENING = 0xC00000B3, + MD_NTSTATUS_WIN_STATUS_INVALID_READ_MODE = 0xC00000B4, + MD_NTSTATUS_WIN_STATUS_IO_TIMEOUT = 0xC00000B5, + MD_NTSTATUS_WIN_STATUS_FILE_FORCED_CLOSED = 0xC00000B6, + MD_NTSTATUS_WIN_STATUS_PROFILING_NOT_STARTED = 0xC00000B7, + MD_NTSTATUS_WIN_STATUS_PROFILING_NOT_STOPPED = 0xC00000B8, + MD_NTSTATUS_WIN_STATUS_COULD_NOT_INTERPRET = 0xC00000B9, + MD_NTSTATUS_WIN_STATUS_FILE_IS_A_DIRECTORY = 0xC00000BA, + MD_NTSTATUS_WIN_STATUS_NOT_SUPPORTED = 0xC00000BB, + MD_NTSTATUS_WIN_STATUS_REMOTE_NOT_LISTENING = 0xC00000BC, + MD_NTSTATUS_WIN_STATUS_DUPLICATE_NAME = 0xC00000BD, + MD_NTSTATUS_WIN_STATUS_BAD_NETWORK_PATH = 0xC00000BE, + MD_NTSTATUS_WIN_STATUS_NETWORK_BUSY = 0xC00000BF, + MD_NTSTATUS_WIN_STATUS_DEVICE_DOES_NOT_EXIST = 0xC00000C0, + MD_NTSTATUS_WIN_STATUS_TOO_MANY_COMMANDS = 0xC00000C1, + MD_NTSTATUS_WIN_STATUS_ADAPTER_HARDWARE_ERROR = 0xC00000C2, + MD_NTSTATUS_WIN_STATUS_INVALID_NETWORK_RESPONSE = 0xC00000C3, + MD_NTSTATUS_WIN_STATUS_UNEXPECTED_NETWORK_ERROR = 0xC00000C4, + MD_NTSTATUS_WIN_STATUS_BAD_REMOTE_ADAPTER = 0xC00000C5, + MD_NTSTATUS_WIN_STATUS_PRINT_QUEUE_FULL = 0xC00000C6, + MD_NTSTATUS_WIN_STATUS_NO_SPOOL_SPACE = 0xC00000C7, + MD_NTSTATUS_WIN_STATUS_PRINT_CANCELLED = 0xC00000C8, + MD_NTSTATUS_WIN_STATUS_NETWORK_NAME_DELETED = 0xC00000C9, + MD_NTSTATUS_WIN_STATUS_NETWORK_ACCESS_DENIED = 0xC00000CA, + MD_NTSTATUS_WIN_STATUS_BAD_DEVICE_TYPE = 0xC00000CB, + MD_NTSTATUS_WIN_STATUS_BAD_NETWORK_NAME = 0xC00000CC, + MD_NTSTATUS_WIN_STATUS_TOO_MANY_NAMES = 0xC00000CD, + MD_NTSTATUS_WIN_STATUS_TOO_MANY_SESSIONS = 0xC00000CE, + MD_NTSTATUS_WIN_STATUS_SHARING_PAUSED = 0xC00000CF, + MD_NTSTATUS_WIN_STATUS_REQUEST_NOT_ACCEPTED = 0xC00000D0, + MD_NTSTATUS_WIN_STATUS_REDIRECTOR_PAUSED = 0xC00000D1, + MD_NTSTATUS_WIN_STATUS_NET_WRITE_FAULT = 0xC00000D2, + MD_NTSTATUS_WIN_STATUS_PROFILING_AT_LIMIT = 0xC00000D3, + MD_NTSTATUS_WIN_STATUS_NOT_SAME_DEVICE = 0xC00000D4, + MD_NTSTATUS_WIN_STATUS_FILE_RENAMED = 0xC00000D5, + MD_NTSTATUS_WIN_STATUS_VIRTUAL_CIRCUIT_CLOSED = 0xC00000D6, + MD_NTSTATUS_WIN_STATUS_NO_SECURITY_ON_OBJECT = 0xC00000D7, + MD_NTSTATUS_WIN_STATUS_CANT_WAIT = 0xC00000D8, + MD_NTSTATUS_WIN_STATUS_PIPE_EMPTY = 0xC00000D9, + MD_NTSTATUS_WIN_STATUS_CANT_ACCESS_DOMAIN_INFO = 0xC00000DA, + MD_NTSTATUS_WIN_STATUS_CANT_TERMINATE_SELF = 0xC00000DB, + MD_NTSTATUS_WIN_STATUS_INVALID_SERVER_STATE = 0xC00000DC, + MD_NTSTATUS_WIN_STATUS_INVALID_DOMAIN_STATE = 0xC00000DD, + MD_NTSTATUS_WIN_STATUS_INVALID_DOMAIN_ROLE = 0xC00000DE, + MD_NTSTATUS_WIN_STATUS_NO_SUCH_DOMAIN = 0xC00000DF, + MD_NTSTATUS_WIN_STATUS_DOMAIN_EXISTS = 0xC00000E0, + MD_NTSTATUS_WIN_STATUS_DOMAIN_LIMIT_EXCEEDED = 0xC00000E1, + MD_NTSTATUS_WIN_STATUS_OPLOCK_NOT_GRANTED = 0xC00000E2, + MD_NTSTATUS_WIN_STATUS_INVALID_OPLOCK_PROTOCOL = 0xC00000E3, + MD_NTSTATUS_WIN_STATUS_INTERNAL_DB_CORRUPTION = 0xC00000E4, + MD_NTSTATUS_WIN_STATUS_INTERNAL_ERROR = 0xC00000E5, + MD_NTSTATUS_WIN_STATUS_GENERIC_NOT_MAPPED = 0xC00000E6, + MD_NTSTATUS_WIN_STATUS_BAD_DESCRIPTOR_FORMAT = 0xC00000E7, + MD_NTSTATUS_WIN_STATUS_INVALID_USER_BUFFER = 0xC00000E8, + MD_NTSTATUS_WIN_STATUS_UNEXPECTED_IO_ERROR = 0xC00000E9, + MD_NTSTATUS_WIN_STATUS_UNEXPECTED_MM_CREATE_ERR = 0xC00000EA, + MD_NTSTATUS_WIN_STATUS_UNEXPECTED_MM_MAP_ERROR = 0xC00000EB, + MD_NTSTATUS_WIN_STATUS_UNEXPECTED_MM_EXTEND_ERR = 0xC00000EC, + MD_NTSTATUS_WIN_STATUS_NOT_LOGON_PROCESS = 0xC00000ED, + MD_NTSTATUS_WIN_STATUS_LOGON_SESSION_EXISTS = 0xC00000EE, + MD_NTSTATUS_WIN_STATUS_INVALID_PARAMETER_1 = 0xC00000EF, + MD_NTSTATUS_WIN_STATUS_INVALID_PARAMETER_2 = 0xC00000F0, + MD_NTSTATUS_WIN_STATUS_INVALID_PARAMETER_3 = 0xC00000F1, + MD_NTSTATUS_WIN_STATUS_INVALID_PARAMETER_4 = 0xC00000F2, + MD_NTSTATUS_WIN_STATUS_INVALID_PARAMETER_5 = 0xC00000F3, + MD_NTSTATUS_WIN_STATUS_INVALID_PARAMETER_6 = 0xC00000F4, + MD_NTSTATUS_WIN_STATUS_INVALID_PARAMETER_7 = 0xC00000F5, + MD_NTSTATUS_WIN_STATUS_INVALID_PARAMETER_8 = 0xC00000F6, + MD_NTSTATUS_WIN_STATUS_INVALID_PARAMETER_9 = 0xC00000F7, + MD_NTSTATUS_WIN_STATUS_INVALID_PARAMETER_10 = 0xC00000F8, + MD_NTSTATUS_WIN_STATUS_INVALID_PARAMETER_11 = 0xC00000F9, + MD_NTSTATUS_WIN_STATUS_INVALID_PARAMETER_12 = 0xC00000FA, + MD_NTSTATUS_WIN_STATUS_REDIRECTOR_NOT_STARTED = 0xC00000FB, + MD_NTSTATUS_WIN_STATUS_REDIRECTOR_STARTED = 0xC00000FC, + MD_NTSTATUS_WIN_STATUS_STACK_OVERFLOW = 0xC00000FD, + MD_NTSTATUS_WIN_STATUS_NO_SUCH_PACKAGE = 0xC00000FE, + MD_NTSTATUS_WIN_STATUS_BAD_FUNCTION_TABLE = 0xC00000FF, + MD_NTSTATUS_WIN_STATUS_VARIABLE_NOT_FOUND = 0xC0000100, + MD_NTSTATUS_WIN_STATUS_DIRECTORY_NOT_EMPTY = 0xC0000101, + MD_NTSTATUS_WIN_STATUS_FILE_CORRUPT_ERROR = 0xC0000102, + MD_NTSTATUS_WIN_STATUS_NOT_A_DIRECTORY = 0xC0000103, + MD_NTSTATUS_WIN_STATUS_BAD_LOGON_SESSION_STATE = 0xC0000104, + MD_NTSTATUS_WIN_STATUS_LOGON_SESSION_COLLISION = 0xC0000105, + MD_NTSTATUS_WIN_STATUS_NAME_TOO_LONG = 0xC0000106, + MD_NTSTATUS_WIN_STATUS_FILES_OPEN = 0xC0000107, + MD_NTSTATUS_WIN_STATUS_CONNECTION_IN_USE = 0xC0000108, + MD_NTSTATUS_WIN_STATUS_MESSAGE_NOT_FOUND = 0xC0000109, + MD_NTSTATUS_WIN_STATUS_PROCESS_IS_TERMINATING = 0xC000010A, + MD_NTSTATUS_WIN_STATUS_INVALID_LOGON_TYPE = 0xC000010B, + MD_NTSTATUS_WIN_STATUS_NO_GUID_TRANSLATION = 0xC000010C, + MD_NTSTATUS_WIN_STATUS_CANNOT_IMPERSONATE = 0xC000010D, + MD_NTSTATUS_WIN_STATUS_IMAGE_ALREADY_LOADED = 0xC000010E, + MD_NTSTATUS_WIN_STATUS_ABIOS_NOT_PRESENT = 0xC000010F, + MD_NTSTATUS_WIN_STATUS_ABIOS_LID_NOT_EXIST = 0xC0000110, + MD_NTSTATUS_WIN_STATUS_ABIOS_LID_ALREADY_OWNED = 0xC0000111, + MD_NTSTATUS_WIN_STATUS_ABIOS_NOT_LID_OWNER = 0xC0000112, + MD_NTSTATUS_WIN_STATUS_ABIOS_INVALID_COMMAND = 0xC0000113, + MD_NTSTATUS_WIN_STATUS_ABIOS_INVALID_LID = 0xC0000114, + MD_NTSTATUS_WIN_STATUS_ABIOS_SELECTOR_NOT_AVAILABLE = 0xC0000115, + MD_NTSTATUS_WIN_STATUS_ABIOS_INVALID_SELECTOR = 0xC0000116, + MD_NTSTATUS_WIN_STATUS_NO_LDT = 0xC0000117, + MD_NTSTATUS_WIN_STATUS_INVALID_LDT_SIZE = 0xC0000118, + MD_NTSTATUS_WIN_STATUS_INVALID_LDT_OFFSET = 0xC0000119, + MD_NTSTATUS_WIN_STATUS_INVALID_LDT_DESCRIPTOR = 0xC000011A, + MD_NTSTATUS_WIN_STATUS_INVALID_IMAGE_NE_FORMAT = 0xC000011B, + MD_NTSTATUS_WIN_STATUS_RXACT_INVALID_STATE = 0xC000011C, + MD_NTSTATUS_WIN_STATUS_RXACT_COMMIT_FAILURE = 0xC000011D, + MD_NTSTATUS_WIN_STATUS_MAPPED_FILE_SIZE_ZERO = 0xC000011E, + MD_NTSTATUS_WIN_STATUS_TOO_MANY_OPENED_FILES = 0xC000011F, + MD_NTSTATUS_WIN_STATUS_CANCELLED = 0xC0000120, + MD_NTSTATUS_WIN_STATUS_CANNOT_DELETE = 0xC0000121, + MD_NTSTATUS_WIN_STATUS_INVALID_COMPUTER_NAME = 0xC0000122, + MD_NTSTATUS_WIN_STATUS_FILE_DELETED = 0xC0000123, + MD_NTSTATUS_WIN_STATUS_SPECIAL_ACCOUNT = 0xC0000124, + MD_NTSTATUS_WIN_STATUS_SPECIAL_GROUP = 0xC0000125, + MD_NTSTATUS_WIN_STATUS_SPECIAL_USER = 0xC0000126, + MD_NTSTATUS_WIN_STATUS_MEMBERS_PRIMARY_GROUP = 0xC0000127, + MD_NTSTATUS_WIN_STATUS_FILE_CLOSED = 0xC0000128, + MD_NTSTATUS_WIN_STATUS_TOO_MANY_THREADS = 0xC0000129, + MD_NTSTATUS_WIN_STATUS_THREAD_NOT_IN_PROCESS = 0xC000012A, + MD_NTSTATUS_WIN_STATUS_TOKEN_ALREADY_IN_USE = 0xC000012B, + MD_NTSTATUS_WIN_STATUS_PAGEFILE_QUOTA_EXCEEDED = 0xC000012C, + MD_NTSTATUS_WIN_STATUS_COMMITMENT_LIMIT = 0xC000012D, + MD_NTSTATUS_WIN_STATUS_INVALID_IMAGE_LE_FORMAT = 0xC000012E, + MD_NTSTATUS_WIN_STATUS_INVALID_IMAGE_NOT_MZ = 0xC000012F, + MD_NTSTATUS_WIN_STATUS_INVALID_IMAGE_PROTECT = 0xC0000130, + MD_NTSTATUS_WIN_STATUS_INVALID_IMAGE_WIN_16 = 0xC0000131, + MD_NTSTATUS_WIN_STATUS_LOGON_SERVER_CONFLICT = 0xC0000132, + MD_NTSTATUS_WIN_STATUS_TIME_DIFFERENCE_AT_DC = 0xC0000133, + MD_NTSTATUS_WIN_STATUS_SYNCHRONIZATION_REQUIRED = 0xC0000134, + MD_NTSTATUS_WIN_STATUS_DLL_NOT_FOUND = 0xC0000135, + MD_NTSTATUS_WIN_STATUS_OPEN_FAILED = 0xC0000136, + MD_NTSTATUS_WIN_STATUS_IO_PRIVILEGE_FAILED = 0xC0000137, + MD_NTSTATUS_WIN_STATUS_ORDINAL_NOT_FOUND = 0xC0000138, + MD_NTSTATUS_WIN_STATUS_ENTRYPOINT_NOT_FOUND = 0xC0000139, + MD_NTSTATUS_WIN_STATUS_CONTROL_C_EXIT = 0xC000013A, + MD_NTSTATUS_WIN_STATUS_LOCAL_DISCONNECT = 0xC000013B, + MD_NTSTATUS_WIN_STATUS_REMOTE_DISCONNECT = 0xC000013C, + MD_NTSTATUS_WIN_STATUS_REMOTE_RESOURCES = 0xC000013D, + MD_NTSTATUS_WIN_STATUS_LINK_FAILED = 0xC000013E, + MD_NTSTATUS_WIN_STATUS_LINK_TIMEOUT = 0xC000013F, + MD_NTSTATUS_WIN_STATUS_INVALID_CONNECTION = 0xC0000140, + MD_NTSTATUS_WIN_STATUS_INVALID_ADDRESS = 0xC0000141, + MD_NTSTATUS_WIN_STATUS_DLL_INIT_FAILED = 0xC0000142, + MD_NTSTATUS_WIN_STATUS_MISSING_SYSTEMFILE = 0xC0000143, + MD_NTSTATUS_WIN_STATUS_UNHANDLED_EXCEPTION = 0xC0000144, + MD_NTSTATUS_WIN_STATUS_APP_INIT_FAILURE = 0xC0000145, + MD_NTSTATUS_WIN_STATUS_PAGEFILE_CREATE_FAILED = 0xC0000146, + MD_NTSTATUS_WIN_STATUS_NO_PAGEFILE = 0xC0000147, + MD_NTSTATUS_WIN_STATUS_INVALID_LEVEL = 0xC0000148, + MD_NTSTATUS_WIN_STATUS_WRONG_PASSWORD_CORE = 0xC0000149, + MD_NTSTATUS_WIN_STATUS_ILLEGAL_FLOAT_CONTEXT = 0xC000014A, + MD_NTSTATUS_WIN_STATUS_PIPE_BROKEN = 0xC000014B, + MD_NTSTATUS_WIN_STATUS_REGISTRY_CORRUPT = 0xC000014C, + MD_NTSTATUS_WIN_STATUS_REGISTRY_IO_FAILED = 0xC000014D, + MD_NTSTATUS_WIN_STATUS_NO_EVENT_PAIR = 0xC000014E, + MD_NTSTATUS_WIN_STATUS_UNRECOGNIZED_VOLUME = 0xC000014F, + MD_NTSTATUS_WIN_STATUS_SERIAL_NO_DEVICE_INITED = 0xC0000150, + MD_NTSTATUS_WIN_STATUS_NO_SUCH_ALIAS = 0xC0000151, + MD_NTSTATUS_WIN_STATUS_MEMBER_NOT_IN_ALIAS = 0xC0000152, + MD_NTSTATUS_WIN_STATUS_MEMBER_IN_ALIAS = 0xC0000153, + MD_NTSTATUS_WIN_STATUS_ALIAS_EXISTS = 0xC0000154, + MD_NTSTATUS_WIN_STATUS_LOGON_NOT_GRANTED = 0xC0000155, + MD_NTSTATUS_WIN_STATUS_TOO_MANY_SECRETS = 0xC0000156, + MD_NTSTATUS_WIN_STATUS_SECRET_TOO_LONG = 0xC0000157, + MD_NTSTATUS_WIN_STATUS_INTERNAL_DB_ERROR = 0xC0000158, + MD_NTSTATUS_WIN_STATUS_FULLSCREEN_MODE = 0xC0000159, + MD_NTSTATUS_WIN_STATUS_TOO_MANY_CONTEXT_IDS = 0xC000015A, + MD_NTSTATUS_WIN_STATUS_LOGON_TYPE_NOT_GRANTED = 0xC000015B, + MD_NTSTATUS_WIN_STATUS_NOT_REGISTRY_FILE = 0xC000015C, + MD_NTSTATUS_WIN_STATUS_NT_CROSS_ENCRYPTION_REQUIRED = 0xC000015D, + MD_NTSTATUS_WIN_STATUS_DOMAIN_CTRLR_CONFIG_ERROR = 0xC000015E, + MD_NTSTATUS_WIN_STATUS_FT_MISSING_MEMBER = 0xC000015F, + MD_NTSTATUS_WIN_STATUS_ILL_FORMED_SERVICE_ENTRY = 0xC0000160, + MD_NTSTATUS_WIN_STATUS_ILLEGAL_CHARACTER = 0xC0000161, + MD_NTSTATUS_WIN_STATUS_UNMAPPABLE_CHARACTER = 0xC0000162, + MD_NTSTATUS_WIN_STATUS_UNDEFINED_CHARACTER = 0xC0000163, + MD_NTSTATUS_WIN_STATUS_FLOPPY_VOLUME = 0xC0000164, + MD_NTSTATUS_WIN_STATUS_FLOPPY_ID_MARK_NOT_FOUND = 0xC0000165, + MD_NTSTATUS_WIN_STATUS_FLOPPY_WRONG_CYLINDER = 0xC0000166, + MD_NTSTATUS_WIN_STATUS_FLOPPY_UNKNOWN_ERROR = 0xC0000167, + MD_NTSTATUS_WIN_STATUS_FLOPPY_BAD_REGISTERS = 0xC0000168, + MD_NTSTATUS_WIN_STATUS_DISK_RECALIBRATE_FAILED = 0xC0000169, + MD_NTSTATUS_WIN_STATUS_DISK_OPERATION_FAILED = 0xC000016A, + MD_NTSTATUS_WIN_STATUS_DISK_RESET_FAILED = 0xC000016B, + MD_NTSTATUS_WIN_STATUS_SHARED_IRQ_BUSY = 0xC000016C, + MD_NTSTATUS_WIN_STATUS_FT_ORPHANING = 0xC000016D, + MD_NTSTATUS_WIN_STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT = 0xC000016E, + MD_NTSTATUS_WIN_STATUS_PARTITION_FAILURE = 0xC0000172, + MD_NTSTATUS_WIN_STATUS_INVALID_BLOCK_LENGTH = 0xC0000173, + MD_NTSTATUS_WIN_STATUS_DEVICE_NOT_PARTITIONED = 0xC0000174, + MD_NTSTATUS_WIN_STATUS_UNABLE_TO_LOCK_MEDIA = 0xC0000175, + MD_NTSTATUS_WIN_STATUS_UNABLE_TO_UNLOAD_MEDIA = 0xC0000176, + MD_NTSTATUS_WIN_STATUS_EOM_OVERFLOW = 0xC0000177, + MD_NTSTATUS_WIN_STATUS_NO_MEDIA = 0xC0000178, + MD_NTSTATUS_WIN_STATUS_NO_SUCH_MEMBER = 0xC000017A, + MD_NTSTATUS_WIN_STATUS_INVALID_MEMBER = 0xC000017B, + MD_NTSTATUS_WIN_STATUS_KEY_DELETED = 0xC000017C, + MD_NTSTATUS_WIN_STATUS_NO_LOG_SPACE = 0xC000017D, + MD_NTSTATUS_WIN_STATUS_TOO_MANY_SIDS = 0xC000017E, + MD_NTSTATUS_WIN_STATUS_LM_CROSS_ENCRYPTION_REQUIRED = 0xC000017F, + MD_NTSTATUS_WIN_STATUS_KEY_HAS_CHILDREN = 0xC0000180, + MD_NTSTATUS_WIN_STATUS_CHILD_MUST_BE_VOLATILE = 0xC0000181, + MD_NTSTATUS_WIN_STATUS_DEVICE_CONFIGURATION_ERROR = 0xC0000182, + MD_NTSTATUS_WIN_STATUS_DRIVER_INTERNAL_ERROR = 0xC0000183, + MD_NTSTATUS_WIN_STATUS_INVALID_DEVICE_STATE = 0xC0000184, + MD_NTSTATUS_WIN_STATUS_IO_DEVICE_ERROR = 0xC0000185, + MD_NTSTATUS_WIN_STATUS_DEVICE_PROTOCOL_ERROR = 0xC0000186, + MD_NTSTATUS_WIN_STATUS_BACKUP_CONTROLLER = 0xC0000187, + MD_NTSTATUS_WIN_STATUS_LOG_FILE_FULL = 0xC0000188, + MD_NTSTATUS_WIN_STATUS_TOO_LATE = 0xC0000189, + MD_NTSTATUS_WIN_STATUS_NO_TRUST_LSA_SECRET = 0xC000018A, + MD_NTSTATUS_WIN_STATUS_NO_TRUST_SAM_ACCOUNT = 0xC000018B, + MD_NTSTATUS_WIN_STATUS_TRUSTED_DOMAIN_FAILURE = 0xC000018C, + MD_NTSTATUS_WIN_STATUS_TRUSTED_RELATIONSHIP_FAILURE = 0xC000018D, + MD_NTSTATUS_WIN_STATUS_EVENTLOG_FILE_CORRUPT = 0xC000018E, + MD_NTSTATUS_WIN_STATUS_EVENTLOG_CANT_START = 0xC000018F, + MD_NTSTATUS_WIN_STATUS_TRUST_FAILURE = 0xC0000190, + MD_NTSTATUS_WIN_STATUS_MUTANT_LIMIT_EXCEEDED = 0xC0000191, + MD_NTSTATUS_WIN_STATUS_NETLOGON_NOT_STARTED = 0xC0000192, + MD_NTSTATUS_WIN_STATUS_ACCOUNT_EXPIRED = 0xC0000193, + MD_NTSTATUS_WIN_STATUS_POSSIBLE_DEADLOCK = 0xC0000194, + MD_NTSTATUS_WIN_STATUS_NETWORK_CREDENTIAL_CONFLICT = 0xC0000195, + MD_NTSTATUS_WIN_STATUS_REMOTE_SESSION_LIMIT = 0xC0000196, + MD_NTSTATUS_WIN_STATUS_EVENTLOG_FILE_CHANGED = 0xC0000197, + MD_NTSTATUS_WIN_STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT = 0xC0000198, + MD_NTSTATUS_WIN_STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT = 0xC0000199, + MD_NTSTATUS_WIN_STATUS_NOLOGON_SERVER_TRUST_ACCOUNT = 0xC000019A, + MD_NTSTATUS_WIN_STATUS_DOMAIN_TRUST_INCONSISTENT = 0xC000019B, + MD_NTSTATUS_WIN_STATUS_FS_DRIVER_REQUIRED = 0xC000019C, + MD_NTSTATUS_WIN_STATUS_IMAGE_ALREADY_LOADED_AS_DLL = 0xC000019D, + MD_NTSTATUS_WIN_STATUS_INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING = 0xC000019E, + MD_NTSTATUS_WIN_STATUS_SHORT_NAMES_NOT_ENABLED_ON_VOLUME = 0xC000019F, + MD_NTSTATUS_WIN_STATUS_SECURITY_STREAM_IS_INCONSISTENT = 0xC00001A0, + MD_NTSTATUS_WIN_STATUS_INVALID_LOCK_RANGE = 0xC00001A1, + MD_NTSTATUS_WIN_STATUS_INVALID_ACE_CONDITION = 0xC00001A2, + MD_NTSTATUS_WIN_STATUS_IMAGE_SUBSYSTEM_NOT_PRESENT = 0xC00001A3, + MD_NTSTATUS_WIN_STATUS_NOTIFICATION_GUID_ALREADY_DEFINED = 0xC00001A4, + MD_NTSTATUS_WIN_STATUS_INVALID_EXCEPTION_HANDLER = 0xC00001A5, + MD_NTSTATUS_WIN_STATUS_DUPLICATE_PRIVILEGES = 0xC00001A6, + MD_NTSTATUS_WIN_STATUS_NOT_ALLOWED_ON_SYSTEM_FILE = 0xC00001A7, + MD_NTSTATUS_WIN_STATUS_REPAIR_NEEDED = 0xC00001A8, + MD_NTSTATUS_WIN_STATUS_QUOTA_NOT_ENABLED = 0xC00001A9, + MD_NTSTATUS_WIN_STATUS_NO_APPLICATION_PACKAGE = 0xC00001AA, + MD_NTSTATUS_WIN_STATUS_NETWORK_OPEN_RESTRICTION = 0xC0000201, + MD_NTSTATUS_WIN_STATUS_NO_USER_SESSION_KEY = 0xC0000202, + MD_NTSTATUS_WIN_STATUS_USER_SESSION_DELETED = 0xC0000203, + MD_NTSTATUS_WIN_STATUS_RESOURCE_LANG_NOT_FOUND = 0xC0000204, + MD_NTSTATUS_WIN_STATUS_INSUFF_SERVER_RESOURCES = 0xC0000205, + MD_NTSTATUS_WIN_STATUS_INVALID_BUFFER_SIZE = 0xC0000206, + MD_NTSTATUS_WIN_STATUS_INVALID_ADDRESS_COMPONENT = 0xC0000207, + MD_NTSTATUS_WIN_STATUS_INVALID_ADDRESS_WILDCARD = 0xC0000208, + MD_NTSTATUS_WIN_STATUS_TOO_MANY_ADDRESSES = 0xC0000209, + MD_NTSTATUS_WIN_STATUS_ADDRESS_ALREADY_EXISTS = 0xC000020A, + MD_NTSTATUS_WIN_STATUS_ADDRESS_CLOSED = 0xC000020B, + MD_NTSTATUS_WIN_STATUS_CONNECTION_DISCONNECTED = 0xC000020C, + MD_NTSTATUS_WIN_STATUS_CONNECTION_RESET = 0xC000020D, + MD_NTSTATUS_WIN_STATUS_TOO_MANY_NODES = 0xC000020E, + MD_NTSTATUS_WIN_STATUS_TRANSACTION_ABORTED = 0xC000020F, + MD_NTSTATUS_WIN_STATUS_TRANSACTION_TIMED_OUT = 0xC0000210, + MD_NTSTATUS_WIN_STATUS_TRANSACTION_NO_RELEASE = 0xC0000211, + MD_NTSTATUS_WIN_STATUS_TRANSACTION_NO_MATCH = 0xC0000212, + MD_NTSTATUS_WIN_STATUS_TRANSACTION_RESPONDED = 0xC0000213, + MD_NTSTATUS_WIN_STATUS_TRANSACTION_INVALID_ID = 0xC0000214, + MD_NTSTATUS_WIN_STATUS_TRANSACTION_INVALID_TYPE = 0xC0000215, + MD_NTSTATUS_WIN_STATUS_NOT_SERVER_SESSION = 0xC0000216, + MD_NTSTATUS_WIN_STATUS_NOT_CLIENT_SESSION = 0xC0000217, + MD_NTSTATUS_WIN_STATUS_CANNOT_LOAD_REGISTRY_FILE = 0xC0000218, + MD_NTSTATUS_WIN_STATUS_DEBUG_ATTACH_FAILED = 0xC0000219, + MD_NTSTATUS_WIN_STATUS_SYSTEM_PROCESS_TERMINATED = 0xC000021A, + MD_NTSTATUS_WIN_STATUS_DATA_NOT_ACCEPTED = 0xC000021B, + MD_NTSTATUS_WIN_STATUS_NO_BROWSER_SERVERS_FOUND = 0xC000021C, + MD_NTSTATUS_WIN_STATUS_VDM_HARD_ERROR = 0xC000021D, + MD_NTSTATUS_WIN_STATUS_DRIVER_CANCEL_TIMEOUT = 0xC000021E, + MD_NTSTATUS_WIN_STATUS_REPLY_MESSAGE_MISMATCH = 0xC000021F, + MD_NTSTATUS_WIN_STATUS_MAPPED_ALIGNMENT = 0xC0000220, + MD_NTSTATUS_WIN_STATUS_IMAGE_CHECKSUM_MISMATCH = 0xC0000221, + MD_NTSTATUS_WIN_STATUS_LOST_WRITEBEHIND_DATA = 0xC0000222, + MD_NTSTATUS_WIN_STATUS_CLIENT_SERVER_PARAMETERS_INVALID = 0xC0000223, + MD_NTSTATUS_WIN_STATUS_PASSWORD_MUST_CHANGE = 0xC0000224, + MD_NTSTATUS_WIN_STATUS_NOT_FOUND = 0xC0000225, + MD_NTSTATUS_WIN_STATUS_NOT_TINY_STREAM = 0xC0000226, + MD_NTSTATUS_WIN_STATUS_RECOVERY_FAILURE = 0xC0000227, + MD_NTSTATUS_WIN_STATUS_STACK_OVERFLOW_READ = 0xC0000228, + MD_NTSTATUS_WIN_STATUS_FAIL_CHECK = 0xC0000229, + MD_NTSTATUS_WIN_STATUS_DUPLICATE_OBJECTID = 0xC000022A, + MD_NTSTATUS_WIN_STATUS_OBJECTID_EXISTS = 0xC000022B, + MD_NTSTATUS_WIN_STATUS_CONVERT_TO_LARGE = 0xC000022C, + MD_NTSTATUS_WIN_STATUS_RETRY = 0xC000022D, + MD_NTSTATUS_WIN_STATUS_FOUND_OUT_OF_SCOPE = 0xC000022E, + MD_NTSTATUS_WIN_STATUS_ALLOCATE_BUCKET = 0xC000022F, + MD_NTSTATUS_WIN_STATUS_PROPSET_NOT_FOUND = 0xC0000230, + MD_NTSTATUS_WIN_STATUS_MARSHALL_OVERFLOW = 0xC0000231, + MD_NTSTATUS_WIN_STATUS_INVALID_VARIANT = 0xC0000232, + MD_NTSTATUS_WIN_STATUS_DOMAIN_CONTROLLER_NOT_FOUND = 0xC0000233, + MD_NTSTATUS_WIN_STATUS_ACCOUNT_LOCKED_OUT = 0xC0000234, + MD_NTSTATUS_WIN_STATUS_HANDLE_NOT_CLOSABLE = 0xC0000235, + MD_NTSTATUS_WIN_STATUS_CONNECTION_REFUSED = 0xC0000236, + MD_NTSTATUS_WIN_STATUS_GRACEFUL_DISCONNECT = 0xC0000237, + MD_NTSTATUS_WIN_STATUS_ADDRESS_ALREADY_ASSOCIATED = 0xC0000238, + MD_NTSTATUS_WIN_STATUS_ADDRESS_NOT_ASSOCIATED = 0xC0000239, + MD_NTSTATUS_WIN_STATUS_CONNECTION_INVALID = 0xC000023A, + MD_NTSTATUS_WIN_STATUS_CONNECTION_ACTIVE = 0xC000023B, + MD_NTSTATUS_WIN_STATUS_NETWORK_UNREACHABLE = 0xC000023C, + MD_NTSTATUS_WIN_STATUS_HOST_UNREACHABLE = 0xC000023D, + MD_NTSTATUS_WIN_STATUS_PROTOCOL_UNREACHABLE = 0xC000023E, + MD_NTSTATUS_WIN_STATUS_PORT_UNREACHABLE = 0xC000023F, + MD_NTSTATUS_WIN_STATUS_REQUEST_ABORTED = 0xC0000240, + MD_NTSTATUS_WIN_STATUS_CONNECTION_ABORTED = 0xC0000241, + MD_NTSTATUS_WIN_STATUS_BAD_COMPRESSION_BUFFER = 0xC0000242, + MD_NTSTATUS_WIN_STATUS_USER_MAPPED_FILE = 0xC0000243, + MD_NTSTATUS_WIN_STATUS_AUDIT_FAILED = 0xC0000244, + MD_NTSTATUS_WIN_STATUS_TIMER_RESOLUTION_NOT_SET = 0xC0000245, + MD_NTSTATUS_WIN_STATUS_CONNECTION_COUNT_LIMIT = 0xC0000246, + MD_NTSTATUS_WIN_STATUS_LOGIN_TIME_RESTRICTION = 0xC0000247, + MD_NTSTATUS_WIN_STATUS_LOGIN_WKSTA_RESTRICTION = 0xC0000248, + MD_NTSTATUS_WIN_STATUS_IMAGE_MP_UP_MISMATCH = 0xC0000249, + MD_NTSTATUS_WIN_STATUS_INSUFFICIENT_LOGON_INFO = 0xC0000250, + MD_NTSTATUS_WIN_STATUS_BAD_DLL_ENTRYPOINT = 0xC0000251, + MD_NTSTATUS_WIN_STATUS_BAD_SERVICE_ENTRYPOINT = 0xC0000252, + MD_NTSTATUS_WIN_STATUS_LPC_REPLY_LOST = 0xC0000253, + MD_NTSTATUS_WIN_STATUS_IP_ADDRESS_CONFLICT1 = 0xC0000254, + MD_NTSTATUS_WIN_STATUS_IP_ADDRESS_CONFLICT2 = 0xC0000255, + MD_NTSTATUS_WIN_STATUS_REGISTRY_QUOTA_LIMIT = 0xC0000256, + MD_NTSTATUS_WIN_STATUS_PATH_NOT_COVERED = 0xC0000257, + MD_NTSTATUS_WIN_STATUS_NO_CALLBACK_ACTIVE = 0xC0000258, + MD_NTSTATUS_WIN_STATUS_LICENSE_QUOTA_EXCEEDED = 0xC0000259, + MD_NTSTATUS_WIN_STATUS_PWD_TOO_SHORT = 0xC000025A, + MD_NTSTATUS_WIN_STATUS_PWD_TOO_RECENT = 0xC000025B, + MD_NTSTATUS_WIN_STATUS_PWD_HISTORY_CONFLICT = 0xC000025C, + MD_NTSTATUS_WIN_STATUS_PLUGPLAY_NO_DEVICE = 0xC000025E, + MD_NTSTATUS_WIN_STATUS_UNSUPPORTED_COMPRESSION = 0xC000025F, + MD_NTSTATUS_WIN_STATUS_INVALID_HW_PROFILE = 0xC0000260, + MD_NTSTATUS_WIN_STATUS_INVALID_PLUGPLAY_DEVICE_PATH = 0xC0000261, + MD_NTSTATUS_WIN_STATUS_DRIVER_ORDINAL_NOT_FOUND = 0xC0000262, + MD_NTSTATUS_WIN_STATUS_DRIVER_ENTRYPOINT_NOT_FOUND = 0xC0000263, + MD_NTSTATUS_WIN_STATUS_RESOURCE_NOT_OWNED = 0xC0000264, + MD_NTSTATUS_WIN_STATUS_TOO_MANY_LINKS = 0xC0000265, + MD_NTSTATUS_WIN_STATUS_QUOTA_LIST_INCONSISTENT = 0xC0000266, + MD_NTSTATUS_WIN_STATUS_FILE_IS_OFFLINE = 0xC0000267, + MD_NTSTATUS_WIN_STATUS_EVALUATION_EXPIRATION = 0xC0000268, + MD_NTSTATUS_WIN_STATUS_ILLEGAL_DLL_RELOCATION = 0xC0000269, + MD_NTSTATUS_WIN_STATUS_LICENSE_VIOLATION = 0xC000026A, + MD_NTSTATUS_WIN_STATUS_DLL_INIT_FAILED_LOGOFF = 0xC000026B, + MD_NTSTATUS_WIN_STATUS_DRIVER_UNABLE_TO_LOAD = 0xC000026C, + MD_NTSTATUS_WIN_STATUS_DFS_UNAVAILABLE = 0xC000026D, + MD_NTSTATUS_WIN_STATUS_VOLUME_DISMOUNTED = 0xC000026E, + MD_NTSTATUS_WIN_STATUS_WX86_INTERNAL_ERROR = 0xC000026F, + MD_NTSTATUS_WIN_STATUS_WX86_FLOAT_STACK_CHECK = 0xC0000270, + MD_NTSTATUS_WIN_STATUS_VALIDATE_CONTINUE = 0xC0000271, + MD_NTSTATUS_WIN_STATUS_NO_MATCH = 0xC0000272, + MD_NTSTATUS_WIN_STATUS_NO_MORE_MATCHES = 0xC0000273, + MD_NTSTATUS_WIN_STATUS_NOT_A_REPARSE_POINT = 0xC0000275, + MD_NTSTATUS_WIN_STATUS_IO_REPARSE_TAG_INVALID = 0xC0000276, + MD_NTSTATUS_WIN_STATUS_IO_REPARSE_TAG_MISMATCH = 0xC0000277, + MD_NTSTATUS_WIN_STATUS_IO_REPARSE_DATA_INVALID = 0xC0000278, + MD_NTSTATUS_WIN_STATUS_IO_REPARSE_TAG_NOT_HANDLED = 0xC0000279, + MD_NTSTATUS_WIN_STATUS_PWD_TOO_LONG = 0xC000027A, + MD_NTSTATUS_WIN_STATUS_STOWED_EXCEPTION = 0xC000027B, + MD_NTSTATUS_WIN_STATUS_REPARSE_POINT_NOT_RESOLVED = 0xC0000280, + MD_NTSTATUS_WIN_STATUS_DIRECTORY_IS_A_REPARSE_POINT = 0xC0000281, + MD_NTSTATUS_WIN_STATUS_RANGE_LIST_CONFLICT = 0xC0000282, + MD_NTSTATUS_WIN_STATUS_SOURCE_ELEMENT_EMPTY = 0xC0000283, + MD_NTSTATUS_WIN_STATUS_DESTINATION_ELEMENT_FULL = 0xC0000284, + MD_NTSTATUS_WIN_STATUS_ILLEGAL_ELEMENT_ADDRESS = 0xC0000285, + MD_NTSTATUS_WIN_STATUS_MAGAZINE_NOT_PRESENT = 0xC0000286, + MD_NTSTATUS_WIN_STATUS_REINITIALIZATION_NEEDED = 0xC0000287, + MD_NTSTATUS_WIN_STATUS_ENCRYPTION_FAILED = 0xC000028A, + MD_NTSTATUS_WIN_STATUS_DECRYPTION_FAILED = 0xC000028B, + MD_NTSTATUS_WIN_STATUS_RANGE_NOT_FOUND = 0xC000028C, + MD_NTSTATUS_WIN_STATUS_NO_RECOVERY_POLICY = 0xC000028D, + MD_NTSTATUS_WIN_STATUS_NO_EFS = 0xC000028E, + MD_NTSTATUS_WIN_STATUS_WRONG_EFS = 0xC000028F, + MD_NTSTATUS_WIN_STATUS_NO_USER_KEYS = 0xC0000290, + MD_NTSTATUS_WIN_STATUS_FILE_NOT_ENCRYPTED = 0xC0000291, + MD_NTSTATUS_WIN_STATUS_NOT_EXPORT_FORMAT = 0xC0000292, + MD_NTSTATUS_WIN_STATUS_FILE_ENCRYPTED = 0xC0000293, + MD_NTSTATUS_WIN_STATUS_WMI_GUID_NOT_FOUND = 0xC0000295, + MD_NTSTATUS_WIN_STATUS_WMI_INSTANCE_NOT_FOUND = 0xC0000296, + MD_NTSTATUS_WIN_STATUS_WMI_ITEMID_NOT_FOUND = 0xC0000297, + MD_NTSTATUS_WIN_STATUS_WMI_TRY_AGAIN = 0xC0000298, + MD_NTSTATUS_WIN_STATUS_SHARED_POLICY = 0xC0000299, + MD_NTSTATUS_WIN_STATUS_POLICY_OBJECT_NOT_FOUND = 0xC000029A, + MD_NTSTATUS_WIN_STATUS_POLICY_ONLY_IN_DS = 0xC000029B, + MD_NTSTATUS_WIN_STATUS_VOLUME_NOT_UPGRADED = 0xC000029C, + MD_NTSTATUS_WIN_STATUS_REMOTE_STORAGE_NOT_ACTIVE = 0xC000029D, + MD_NTSTATUS_WIN_STATUS_REMOTE_STORAGE_MEDIA_ERROR = 0xC000029E, + MD_NTSTATUS_WIN_STATUS_NO_TRACKING_SERVICE = 0xC000029F, + MD_NTSTATUS_WIN_STATUS_SERVER_SID_MISMATCH = 0xC00002A0, + MD_NTSTATUS_WIN_STATUS_DS_NO_ATTRIBUTE_OR_VALUE = 0xC00002A1, + MD_NTSTATUS_WIN_STATUS_DS_INVALID_ATTRIBUTE_SYNTAX = 0xC00002A2, + MD_NTSTATUS_WIN_STATUS_DS_ATTRIBUTE_TYPE_UNDEFINED = 0xC00002A3, + MD_NTSTATUS_WIN_STATUS_DS_ATTRIBUTE_OR_VALUE_EXISTS = 0xC00002A4, + MD_NTSTATUS_WIN_STATUS_DS_BUSY = 0xC00002A5, + MD_NTSTATUS_WIN_STATUS_DS_UNAVAILABLE = 0xC00002A6, + MD_NTSTATUS_WIN_STATUS_DS_NO_RIDS_ALLOCATED = 0xC00002A7, + MD_NTSTATUS_WIN_STATUS_DS_NO_MORE_RIDS = 0xC00002A8, + MD_NTSTATUS_WIN_STATUS_DS_INCORRECT_ROLE_OWNER = 0xC00002A9, + MD_NTSTATUS_WIN_STATUS_DS_RIDMGR_INIT_ERROR = 0xC00002AA, + MD_NTSTATUS_WIN_STATUS_DS_OBJ_CLASS_VIOLATION = 0xC00002AB, + MD_NTSTATUS_WIN_STATUS_DS_CANT_ON_NON_LEAF = 0xC00002AC, + MD_NTSTATUS_WIN_STATUS_DS_CANT_ON_RDN = 0xC00002AD, + MD_NTSTATUS_WIN_STATUS_DS_CANT_MOD_OBJ_CLASS = 0xC00002AE, + MD_NTSTATUS_WIN_STATUS_DS_CROSS_DOM_MOVE_FAILED = 0xC00002AF, + MD_NTSTATUS_WIN_STATUS_DS_GC_NOT_AVAILABLE = 0xC00002B0, + MD_NTSTATUS_WIN_STATUS_DIRECTORY_SERVICE_REQUIRED = 0xC00002B1, + MD_NTSTATUS_WIN_STATUS_REPARSE_ATTRIBUTE_CONFLICT = 0xC00002B2, + MD_NTSTATUS_WIN_STATUS_CANT_ENABLE_DENY_ONLY = 0xC00002B3, + MD_NTSTATUS_WIN_STATUS_FLOAT_MULTIPLE_FAULTS = 0xC00002B4, + MD_NTSTATUS_WIN_STATUS_FLOAT_MULTIPLE_TRAPS = 0xC00002B5, + MD_NTSTATUS_WIN_STATUS_DEVICE_REMOVED = 0xC00002B6, + MD_NTSTATUS_WIN_STATUS_JOURNAL_DELETE_IN_PROGRESS = 0xC00002B7, + MD_NTSTATUS_WIN_STATUS_JOURNAL_NOT_ACTIVE = 0xC00002B8, + MD_NTSTATUS_WIN_STATUS_NOINTERFACE = 0xC00002B9, + MD_NTSTATUS_WIN_STATUS_DS_RIDMGR_DISABLED = 0xC00002BA, + MD_NTSTATUS_WIN_STATUS_DS_ADMIN_LIMIT_EXCEEDED = 0xC00002C1, + MD_NTSTATUS_WIN_STATUS_DRIVER_FAILED_SLEEP = 0xC00002C2, + MD_NTSTATUS_WIN_STATUS_MUTUAL_AUTHENTICATION_FAILED = 0xC00002C3, + MD_NTSTATUS_WIN_STATUS_CORRUPT_SYSTEM_FILE = 0xC00002C4, + MD_NTSTATUS_WIN_STATUS_DATATYPE_MISALIGNMENT_ERROR = 0xC00002C5, + MD_NTSTATUS_WIN_STATUS_WMI_READ_ONLY = 0xC00002C6, + MD_NTSTATUS_WIN_STATUS_WMI_SET_FAILURE = 0xC00002C7, + MD_NTSTATUS_WIN_STATUS_COMMITMENT_MINIMUM = 0xC00002C8, + MD_NTSTATUS_WIN_STATUS_REG_NAT_CONSUMPTION = 0xC00002C9, + MD_NTSTATUS_WIN_STATUS_TRANSPORT_FULL = 0xC00002CA, + MD_NTSTATUS_WIN_STATUS_DS_SAM_INIT_FAILURE = 0xC00002CB, + MD_NTSTATUS_WIN_STATUS_ONLY_IF_CONNECTED = 0xC00002CC, + MD_NTSTATUS_WIN_STATUS_DS_SENSITIVE_GROUP_VIOLATION = 0xC00002CD, + MD_NTSTATUS_WIN_STATUS_PNP_RESTART_ENUMERATION = 0xC00002CE, + MD_NTSTATUS_WIN_STATUS_JOURNAL_ENTRY_DELETED = 0xC00002CF, + MD_NTSTATUS_WIN_STATUS_DS_CANT_MOD_PRIMARYGROUPID = 0xC00002D0, + MD_NTSTATUS_WIN_STATUS_SYSTEM_IMAGE_BAD_SIGNATURE = 0xC00002D1, + MD_NTSTATUS_WIN_STATUS_PNP_REBOOT_REQUIRED = 0xC00002D2, + MD_NTSTATUS_WIN_STATUS_POWER_STATE_INVALID = 0xC00002D3, + MD_NTSTATUS_WIN_STATUS_DS_INVALID_GROUP_TYPE = 0xC00002D4, + MD_NTSTATUS_WIN_STATUS_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN = 0xC00002D5, + MD_NTSTATUS_WIN_STATUS_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN = 0xC00002D6, + MD_NTSTATUS_WIN_STATUS_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER = 0xC00002D7, + MD_NTSTATUS_WIN_STATUS_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER = 0xC00002D8, + MD_NTSTATUS_WIN_STATUS_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER = 0xC00002D9, + MD_NTSTATUS_WIN_STATUS_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER = 0xC00002DA, + MD_NTSTATUS_WIN_STATUS_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER = 0xC00002DB, + MD_NTSTATUS_WIN_STATUS_DS_HAVE_PRIMARY_MEMBERS = 0xC00002DC, + MD_NTSTATUS_WIN_STATUS_WMI_NOT_SUPPORTED = 0xC00002DD, + MD_NTSTATUS_WIN_STATUS_INSUFFICIENT_POWER = 0xC00002DE, + MD_NTSTATUS_WIN_STATUS_SAM_NEED_BOOTKEY_PASSWORD = 0xC00002DF, + MD_NTSTATUS_WIN_STATUS_SAM_NEED_BOOTKEY_FLOPPY = 0xC00002E0, + MD_NTSTATUS_WIN_STATUS_DS_CANT_START = 0xC00002E1, + MD_NTSTATUS_WIN_STATUS_DS_INIT_FAILURE = 0xC00002E2, + MD_NTSTATUS_WIN_STATUS_SAM_INIT_FAILURE = 0xC00002E3, + MD_NTSTATUS_WIN_STATUS_DS_GC_REQUIRED = 0xC00002E4, + MD_NTSTATUS_WIN_STATUS_DS_LOCAL_MEMBER_OF_LOCAL_ONLY = 0xC00002E5, + MD_NTSTATUS_WIN_STATUS_DS_NO_FPO_IN_UNIVERSAL_GROUPS = 0xC00002E6, + MD_NTSTATUS_WIN_STATUS_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED = 0xC00002E7, + MD_NTSTATUS_WIN_STATUS_MULTIPLE_FAULT_VIOLATION = 0xC00002E8, + MD_NTSTATUS_WIN_STATUS_CURRENT_DOMAIN_NOT_ALLOWED = 0xC00002E9, + MD_NTSTATUS_WIN_STATUS_CANNOT_MAKE = 0xC00002EA, + MD_NTSTATUS_WIN_STATUS_SYSTEM_SHUTDOWN = 0xC00002EB, + MD_NTSTATUS_WIN_STATUS_DS_INIT_FAILURE_CONSOLE = 0xC00002EC, + MD_NTSTATUS_WIN_STATUS_DS_SAM_INIT_FAILURE_CONSOLE = 0xC00002ED, + MD_NTSTATUS_WIN_STATUS_UNFINISHED_CONTEXT_DELETED = 0xC00002EE, + MD_NTSTATUS_WIN_STATUS_NO_TGT_REPLY = 0xC00002EF, + MD_NTSTATUS_WIN_STATUS_OBJECTID_NOT_FOUND = 0xC00002F0, + MD_NTSTATUS_WIN_STATUS_NO_IP_ADDRESSES = 0xC00002F1, + MD_NTSTATUS_WIN_STATUS_WRONG_CREDENTIAL_HANDLE = 0xC00002F2, + MD_NTSTATUS_WIN_STATUS_CRYPTO_SYSTEM_INVALID = 0xC00002F3, + MD_NTSTATUS_WIN_STATUS_MAX_REFERRALS_EXCEEDED = 0xC00002F4, + MD_NTSTATUS_WIN_STATUS_MUST_BE_KDC = 0xC00002F5, + MD_NTSTATUS_WIN_STATUS_STRONG_CRYPTO_NOT_SUPPORTED = 0xC00002F6, + MD_NTSTATUS_WIN_STATUS_TOO_MANY_PRINCIPALS = 0xC00002F7, + MD_NTSTATUS_WIN_STATUS_NO_PA_DATA = 0xC00002F8, + MD_NTSTATUS_WIN_STATUS_PKINIT_NAME_MISMATCH = 0xC00002F9, + MD_NTSTATUS_WIN_STATUS_SMARTCARD_LOGON_REQUIRED = 0xC00002FA, + MD_NTSTATUS_WIN_STATUS_KDC_INVALID_REQUEST = 0xC00002FB, + MD_NTSTATUS_WIN_STATUS_KDC_UNABLE_TO_REFER = 0xC00002FC, + MD_NTSTATUS_WIN_STATUS_KDC_UNKNOWN_ETYPE = 0xC00002FD, + MD_NTSTATUS_WIN_STATUS_SHUTDOWN_IN_PROGRESS = 0xC00002FE, + MD_NTSTATUS_WIN_STATUS_SERVER_SHUTDOWN_IN_PROGRESS = 0xC00002FF, + MD_NTSTATUS_WIN_STATUS_NOT_SUPPORTED_ON_SBS = 0xC0000300, + MD_NTSTATUS_WIN_STATUS_WMI_GUID_DISCONNECTED = 0xC0000301, + MD_NTSTATUS_WIN_STATUS_WMI_ALREADY_DISABLED = 0xC0000302, + MD_NTSTATUS_WIN_STATUS_WMI_ALREADY_ENABLED = 0xC0000303, + MD_NTSTATUS_WIN_STATUS_MFT_TOO_FRAGMENTED = 0xC0000304, + MD_NTSTATUS_WIN_STATUS_COPY_PROTECTION_FAILURE = 0xC0000305, + MD_NTSTATUS_WIN_STATUS_CSS_AUTHENTICATION_FAILURE = 0xC0000306, + MD_NTSTATUS_WIN_STATUS_CSS_KEY_NOT_PRESENT = 0xC0000307, + MD_NTSTATUS_WIN_STATUS_CSS_KEY_NOT_ESTABLISHED = 0xC0000308, + MD_NTSTATUS_WIN_STATUS_CSS_SCRAMBLED_SECTOR = 0xC0000309, + MD_NTSTATUS_WIN_STATUS_CSS_REGION_MISMATCH = 0xC000030A, + MD_NTSTATUS_WIN_STATUS_CSS_RESETS_EXHAUSTED = 0xC000030B, + MD_NTSTATUS_WIN_STATUS_PASSWORD_CHANGE_REQUIRED = 0xC000030C, + MD_NTSTATUS_WIN_STATUS_PKINIT_FAILURE = 0xC0000320, + MD_NTSTATUS_WIN_STATUS_SMARTCARD_SUBSYSTEM_FAILURE = 0xC0000321, + MD_NTSTATUS_WIN_STATUS_NO_KERB_KEY = 0xC0000322, + MD_NTSTATUS_WIN_STATUS_HOST_DOWN = 0xC0000350, + MD_NTSTATUS_WIN_STATUS_UNSUPPORTED_PREAUTH = 0xC0000351, + MD_NTSTATUS_WIN_STATUS_EFS_ALG_BLOB_TOO_BIG = 0xC0000352, + MD_NTSTATUS_WIN_STATUS_PORT_NOT_SET = 0xC0000353, + MD_NTSTATUS_WIN_STATUS_DEBUGGER_INACTIVE = 0xC0000354, + MD_NTSTATUS_WIN_STATUS_DS_VERSION_CHECK_FAILURE = 0xC0000355, + MD_NTSTATUS_WIN_STATUS_AUDITING_DISABLED = 0xC0000356, + MD_NTSTATUS_WIN_STATUS_PRENT4_MACHINE_ACCOUNT = 0xC0000357, + MD_NTSTATUS_WIN_STATUS_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER = 0xC0000358, + MD_NTSTATUS_WIN_STATUS_INVALID_IMAGE_WIN_32 = 0xC0000359, + MD_NTSTATUS_WIN_STATUS_INVALID_IMAGE_WIN_64 = 0xC000035A, + MD_NTSTATUS_WIN_STATUS_BAD_BINDINGS = 0xC000035B, + MD_NTSTATUS_WIN_STATUS_NETWORK_SESSION_EXPIRED = 0xC000035C, + MD_NTSTATUS_WIN_STATUS_APPHELP_BLOCK = 0xC000035D, + MD_NTSTATUS_WIN_STATUS_ALL_SIDS_FILTERED = 0xC000035E, + MD_NTSTATUS_WIN_STATUS_NOT_SAFE_MODE_DRIVER = 0xC000035F, + MD_NTSTATUS_WIN_STATUS_ACCESS_DISABLED_BY_POLICY_DEFAULT = 0xC0000361, + MD_NTSTATUS_WIN_STATUS_ACCESS_DISABLED_BY_POLICY_PATH = 0xC0000362, + MD_NTSTATUS_WIN_STATUS_ACCESS_DISABLED_BY_POLICY_PUBLISHER = 0xC0000363, + MD_NTSTATUS_WIN_STATUS_ACCESS_DISABLED_BY_POLICY_OTHER = 0xC0000364, + MD_NTSTATUS_WIN_STATUS_FAILED_DRIVER_ENTRY = 0xC0000365, + MD_NTSTATUS_WIN_STATUS_DEVICE_ENUMERATION_ERROR = 0xC0000366, + MD_NTSTATUS_WIN_STATUS_MOUNT_POINT_NOT_RESOLVED = 0xC0000368, + MD_NTSTATUS_WIN_STATUS_INVALID_DEVICE_OBJECT_PARAMETER = 0xC0000369, + MD_NTSTATUS_WIN_STATUS_MCA_OCCURED = 0xC000036A, + MD_NTSTATUS_WIN_STATUS_DRIVER_BLOCKED_CRITICAL = 0xC000036B, + MD_NTSTATUS_WIN_STATUS_DRIVER_BLOCKED = 0xC000036C, + MD_NTSTATUS_WIN_STATUS_DRIVER_DATABASE_ERROR = 0xC000036D, + MD_NTSTATUS_WIN_STATUS_SYSTEM_HIVE_TOO_LARGE = 0xC000036E, + MD_NTSTATUS_WIN_STATUS_INVALID_IMPORT_OF_NON_DLL = 0xC000036F, + MD_NTSTATUS_WIN_STATUS_NO_SECRETS = 0xC0000371, + MD_NTSTATUS_WIN_STATUS_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY = 0xC0000372, + MD_NTSTATUS_WIN_STATUS_FAILED_STACK_SWITCH = 0xC0000373, + MD_NTSTATUS_WIN_STATUS_HEAP_CORRUPTION = 0xC0000374, + MD_NTSTATUS_WIN_STATUS_SMARTCARD_WRONG_PIN = 0xC0000380, + MD_NTSTATUS_WIN_STATUS_SMARTCARD_CARD_BLOCKED = 0xC0000381, + MD_NTSTATUS_WIN_STATUS_SMARTCARD_CARD_NOT_AUTHENTICATED = 0xC0000382, + MD_NTSTATUS_WIN_STATUS_SMARTCARD_NO_CARD = 0xC0000383, + MD_NTSTATUS_WIN_STATUS_SMARTCARD_NO_KEY_CONTAINER = 0xC0000384, + MD_NTSTATUS_WIN_STATUS_SMARTCARD_NO_CERTIFICATE = 0xC0000385, + MD_NTSTATUS_WIN_STATUS_SMARTCARD_NO_KEYSET = 0xC0000386, + MD_NTSTATUS_WIN_STATUS_SMARTCARD_IO_ERROR = 0xC0000387, + MD_NTSTATUS_WIN_STATUS_DOWNGRADE_DETECTED = 0xC0000388, + MD_NTSTATUS_WIN_STATUS_SMARTCARD_CERT_REVOKED = 0xC0000389, + MD_NTSTATUS_WIN_STATUS_ISSUING_CA_UNTRUSTED = 0xC000038A, + MD_NTSTATUS_WIN_STATUS_REVOCATION_OFFLINE_C = 0xC000038B, + MD_NTSTATUS_WIN_STATUS_PKINIT_CLIENT_FAILURE = 0xC000038C, + MD_NTSTATUS_WIN_STATUS_SMARTCARD_CERT_EXPIRED = 0xC000038D, + MD_NTSTATUS_WIN_STATUS_DRIVER_FAILED_PRIOR_UNLOAD = 0xC000038E, + MD_NTSTATUS_WIN_STATUS_SMARTCARD_SILENT_CONTEXT = 0xC000038F, + MD_NTSTATUS_WIN_STATUS_PER_USER_TRUST_QUOTA_EXCEEDED = 0xC0000401, + MD_NTSTATUS_WIN_STATUS_ALL_USER_TRUST_QUOTA_EXCEEDED = 0xC0000402, + MD_NTSTATUS_WIN_STATUS_USER_DELETE_TRUST_QUOTA_EXCEEDED = 0xC0000403, + MD_NTSTATUS_WIN_STATUS_DS_NAME_NOT_UNIQUE = 0xC0000404, + MD_NTSTATUS_WIN_STATUS_DS_DUPLICATE_ID_FOUND = 0xC0000405, + MD_NTSTATUS_WIN_STATUS_DS_GROUP_CONVERSION_ERROR = 0xC0000406, + MD_NTSTATUS_WIN_STATUS_VOLSNAP_PREPARE_HIBERNATE = 0xC0000407, + MD_NTSTATUS_WIN_STATUS_USER2USER_REQUIRED = 0xC0000408, + MD_NTSTATUS_WIN_STATUS_STACK_BUFFER_OVERRUN = 0xC0000409, + MD_NTSTATUS_WIN_STATUS_NO_S4U_PROT_SUPPORT = 0xC000040A, + MD_NTSTATUS_WIN_STATUS_CROSSREALM_DELEGATION_FAILURE = 0xC000040B, + MD_NTSTATUS_WIN_STATUS_REVOCATION_OFFLINE_KDC = 0xC000040C, + MD_NTSTATUS_WIN_STATUS_ISSUING_CA_UNTRUSTED_KDC = 0xC000040D, + MD_NTSTATUS_WIN_STATUS_KDC_CERT_EXPIRED = 0xC000040E, + MD_NTSTATUS_WIN_STATUS_KDC_CERT_REVOKED = 0xC000040F, + MD_NTSTATUS_WIN_STATUS_PARAMETER_QUOTA_EXCEEDED = 0xC0000410, + MD_NTSTATUS_WIN_STATUS_HIBERNATION_FAILURE = 0xC0000411, + MD_NTSTATUS_WIN_STATUS_DELAY_LOAD_FAILED = 0xC0000412, + MD_NTSTATUS_WIN_STATUS_AUTHENTICATION_FIREWALL_FAILED = 0xC0000413, + MD_NTSTATUS_WIN_STATUS_VDM_DISALLOWED = 0xC0000414, + MD_NTSTATUS_WIN_STATUS_HUNG_DISPLAY_DRIVER_THREAD = 0xC0000415, + MD_NTSTATUS_WIN_STATUS_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE = 0xC0000416, + MD_NTSTATUS_WIN_STATUS_INVALID_CRUNTIME_PARAMETER = 0xC0000417, + MD_NTSTATUS_WIN_STATUS_NTLM_BLOCKED = 0xC0000418, + MD_NTSTATUS_WIN_STATUS_DS_SRC_SID_EXISTS_IN_FOREST = 0xC0000419, + MD_NTSTATUS_WIN_STATUS_DS_DOMAIN_NAME_EXISTS_IN_FOREST = 0xC000041A, + MD_NTSTATUS_WIN_STATUS_DS_FLAT_NAME_EXISTS_IN_FOREST = 0xC000041B, + MD_NTSTATUS_WIN_STATUS_INVALID_USER_PRINCIPAL_NAME = 0xC000041C, + MD_NTSTATUS_WIN_STATUS_FATAL_USER_CALLBACK_EXCEPTION = 0xC000041D, + MD_NTSTATUS_WIN_STATUS_ASSERTION_FAILURE = 0xC0000420, + MD_NTSTATUS_WIN_STATUS_VERIFIER_STOP = 0xC0000421, + MD_NTSTATUS_WIN_STATUS_CALLBACK_POP_STACK = 0xC0000423, + MD_NTSTATUS_WIN_STATUS_INCOMPATIBLE_DRIVER_BLOCKED = 0xC0000424, + MD_NTSTATUS_WIN_STATUS_HIVE_UNLOADED = 0xC0000425, + MD_NTSTATUS_WIN_STATUS_COMPRESSION_DISABLED = 0xC0000426, + MD_NTSTATUS_WIN_STATUS_FILE_SYSTEM_LIMITATION = 0xC0000427, + MD_NTSTATUS_WIN_STATUS_INVALID_IMAGE_HASH = 0xC0000428, + MD_NTSTATUS_WIN_STATUS_NOT_CAPABLE = 0xC0000429, + MD_NTSTATUS_WIN_STATUS_REQUEST_OUT_OF_SEQUENCE = 0xC000042A, + MD_NTSTATUS_WIN_STATUS_IMPLEMENTATION_LIMIT = 0xC000042B, + MD_NTSTATUS_WIN_STATUS_ELEVATION_REQUIRED = 0xC000042C, + MD_NTSTATUS_WIN_STATUS_NO_SECURITY_CONTEXT = 0xC000042D, + MD_NTSTATUS_WIN_STATUS_PKU2U_CERT_FAILURE = 0xC000042F, + MD_NTSTATUS_WIN_STATUS_BEYOND_VDL = 0xC0000432, + MD_NTSTATUS_WIN_STATUS_ENCOUNTERED_WRITE_IN_PROGRESS = 0xC0000433, + MD_NTSTATUS_WIN_STATUS_PTE_CHANGED = 0xC0000434, + MD_NTSTATUS_WIN_STATUS_PURGE_FAILED = 0xC0000435, + MD_NTSTATUS_WIN_STATUS_CRED_REQUIRES_CONFIRMATION = 0xC0000440, + MD_NTSTATUS_WIN_STATUS_CS_ENCRYPTION_INVALID_SERVER_RESPONSE = 0xC0000441, + MD_NTSTATUS_WIN_STATUS_CS_ENCRYPTION_UNSUPPORTED_SERVER = 0xC0000442, + MD_NTSTATUS_WIN_STATUS_CS_ENCRYPTION_EXISTING_ENCRYPTED_FILE = 0xC0000443, + MD_NTSTATUS_WIN_STATUS_CS_ENCRYPTION_NEW_ENCRYPTED_FILE = 0xC0000444, + MD_NTSTATUS_WIN_STATUS_CS_ENCRYPTION_FILE_NOT_CSE = 0xC0000445, + MD_NTSTATUS_WIN_STATUS_INVALID_LABEL = 0xC0000446, + MD_NTSTATUS_WIN_STATUS_DRIVER_PROCESS_TERMINATED = 0xC0000450, + MD_NTSTATUS_WIN_STATUS_AMBIGUOUS_SYSTEM_DEVICE = 0xC0000451, + MD_NTSTATUS_WIN_STATUS_SYSTEM_DEVICE_NOT_FOUND = 0xC0000452, + MD_NTSTATUS_WIN_STATUS_RESTART_BOOT_APPLICATION = 0xC0000453, + MD_NTSTATUS_WIN_STATUS_INSUFFICIENT_NVRAM_RESOURCES = 0xC0000454, + MD_NTSTATUS_WIN_STATUS_INVALID_SESSION = 0xC0000455, + MD_NTSTATUS_WIN_STATUS_THREAD_ALREADY_IN_SESSION = 0xC0000456, + MD_NTSTATUS_WIN_STATUS_THREAD_NOT_IN_SESSION = 0xC0000457, + MD_NTSTATUS_WIN_STATUS_INVALID_WEIGHT = 0xC0000458, + MD_NTSTATUS_WIN_STATUS_REQUEST_PAUSED = 0xC0000459, + MD_NTSTATUS_WIN_STATUS_NO_RANGES_PROCESSED = 0xC0000460, + MD_NTSTATUS_WIN_STATUS_DISK_RESOURCES_EXHAUSTED = 0xC0000461, + MD_NTSTATUS_WIN_STATUS_NEEDS_REMEDIATION = 0xC0000462, + MD_NTSTATUS_WIN_STATUS_DEVICE_FEATURE_NOT_SUPPORTED = 0xC0000463, + MD_NTSTATUS_WIN_STATUS_DEVICE_UNREACHABLE = 0xC0000464, + MD_NTSTATUS_WIN_STATUS_INVALID_TOKEN = 0xC0000465, + MD_NTSTATUS_WIN_STATUS_SERVER_UNAVAILABLE = 0xC0000466, + MD_NTSTATUS_WIN_STATUS_FILE_NOT_AVAILABLE = 0xC0000467, + MD_NTSTATUS_WIN_STATUS_DEVICE_INSUFFICIENT_RESOURCES = 0xC0000468, + MD_NTSTATUS_WIN_STATUS_PACKAGE_UPDATING = 0xC0000469, + MD_NTSTATUS_WIN_STATUS_NOT_READ_FROM_COPY = 0xC000046A, + MD_NTSTATUS_WIN_STATUS_FT_WRITE_FAILURE = 0xC000046B, + MD_NTSTATUS_WIN_STATUS_FT_DI_SCAN_REQUIRED = 0xC000046C, + MD_NTSTATUS_WIN_STATUS_OBJECT_NOT_EXTERNALLY_BACKED = 0xC000046D, + MD_NTSTATUS_WIN_STATUS_EXTERNAL_BACKING_PROVIDER_UNKNOWN = 0xC000046E, + MD_NTSTATUS_WIN_STATUS_DATA_CHECKSUM_ERROR = 0xC0000470, + MD_NTSTATUS_WIN_STATUS_INTERMIXED_KERNEL_EA_OPERATION = 0xC0000471, + MD_NTSTATUS_WIN_STATUS_TRIM_READ_ZERO_NOT_SUPPORTED = 0xC0000472, + MD_NTSTATUS_WIN_STATUS_TOO_MANY_SEGMENT_DESCRIPTORS = 0xC0000473, + MD_NTSTATUS_WIN_STATUS_INVALID_OFFSET_ALIGNMENT = 0xC0000474, + MD_NTSTATUS_WIN_STATUS_INVALID_FIELD_IN_PARAMETER_LIST = 0xC0000475, + MD_NTSTATUS_WIN_STATUS_OPERATION_IN_PROGRESS = 0xC0000476, + MD_NTSTATUS_WIN_STATUS_INVALID_INITIATOR_TARGET_PATH = 0xC0000477, + MD_NTSTATUS_WIN_STATUS_SCRUB_DATA_DISABLED = 0xC0000478, + MD_NTSTATUS_WIN_STATUS_NOT_REDUNDANT_STORAGE = 0xC0000479, + MD_NTSTATUS_WIN_STATUS_RESIDENT_FILE_NOT_SUPPORTED = 0xC000047A, + MD_NTSTATUS_WIN_STATUS_COMPRESSED_FILE_NOT_SUPPORTED = 0xC000047B, + MD_NTSTATUS_WIN_STATUS_DIRECTORY_NOT_SUPPORTED = 0xC000047C, + MD_NTSTATUS_WIN_STATUS_IO_OPERATION_TIMEOUT = 0xC000047D, + MD_NTSTATUS_WIN_STATUS_SYSTEM_NEEDS_REMEDIATION = 0xC000047E, + MD_NTSTATUS_WIN_STATUS_APPX_INTEGRITY_FAILURE_CLR_NGEN = 0xC000047F, + MD_NTSTATUS_WIN_STATUS_SHARE_UNAVAILABLE = 0xC0000480, + MD_NTSTATUS_WIN_STATUS_APISET_NOT_HOSTED = 0xC0000481, + MD_NTSTATUS_WIN_STATUS_APISET_NOT_PRESENT = 0xC0000482, + MD_NTSTATUS_WIN_STATUS_DEVICE_HARDWARE_ERROR = 0xC0000483, + MD_NTSTATUS_WIN_STATUS_INVALID_TASK_NAME = 0xC0000500, + MD_NTSTATUS_WIN_STATUS_INVALID_TASK_INDEX = 0xC0000501, + MD_NTSTATUS_WIN_STATUS_THREAD_ALREADY_IN_TASK = 0xC0000502, + MD_NTSTATUS_WIN_STATUS_CALLBACK_BYPASS = 0xC0000503, + MD_NTSTATUS_WIN_STATUS_UNDEFINED_SCOPE = 0xC0000504, + MD_NTSTATUS_WIN_STATUS_INVALID_CAP = 0xC0000505, + MD_NTSTATUS_WIN_STATUS_NOT_GUI_PROCESS = 0xC0000506, + MD_NTSTATUS_WIN_STATUS_FAIL_FAST_EXCEPTION = 0xC0000602, + MD_NTSTATUS_WIN_STATUS_IMAGE_CERT_REVOKED = 0xC0000603, + MD_NTSTATUS_WIN_STATUS_DYNAMIC_CODE_BLOCKED = 0xC0000604, + MD_NTSTATUS_WIN_STATUS_PORT_CLOSED = 0xC0000700, + MD_NTSTATUS_WIN_STATUS_MESSAGE_LOST = 0xC0000701, + MD_NTSTATUS_WIN_STATUS_INVALID_MESSAGE = 0xC0000702, + MD_NTSTATUS_WIN_STATUS_REQUEST_CANCELED = 0xC0000703, + MD_NTSTATUS_WIN_STATUS_RECURSIVE_DISPATCH = 0xC0000704, + MD_NTSTATUS_WIN_STATUS_LPC_RECEIVE_BUFFER_EXPECTED = 0xC0000705, + MD_NTSTATUS_WIN_STATUS_LPC_INVALID_CONNECTION_USAGE = 0xC0000706, + MD_NTSTATUS_WIN_STATUS_LPC_REQUESTS_NOT_ALLOWED = 0xC0000707, + MD_NTSTATUS_WIN_STATUS_RESOURCE_IN_USE = 0xC0000708, + MD_NTSTATUS_WIN_STATUS_HARDWARE_MEMORY_ERROR = 0xC0000709, + MD_NTSTATUS_WIN_STATUS_THREADPOOL_HANDLE_EXCEPTION = 0xC000070A, + MD_NTSTATUS_WIN_STATUS_THREADPOOL_SET_EVENT_ON_COMPLETION_FAILED = 0xC000070B, + MD_NTSTATUS_WIN_STATUS_THREADPOOL_RELEASE_SEMAPHORE_ON_COMPLETION_FAILED = 0xC000070C, + MD_NTSTATUS_WIN_STATUS_THREADPOOL_RELEASE_MUTEX_ON_COMPLETION_FAILED = 0xC000070D, + MD_NTSTATUS_WIN_STATUS_THREADPOOL_FREE_LIBRARY_ON_COMPLETION_FAILED = 0xC000070E, + MD_NTSTATUS_WIN_STATUS_THREADPOOL_RELEASED_DURING_OPERATION = 0xC000070F, + MD_NTSTATUS_WIN_STATUS_CALLBACK_RETURNED_WHILE_IMPERSONATING = 0xC0000710, + MD_NTSTATUS_WIN_STATUS_APC_RETURNED_WHILE_IMPERSONATING = 0xC0000711, + MD_NTSTATUS_WIN_STATUS_PROCESS_IS_PROTECTED = 0xC0000712, + MD_NTSTATUS_WIN_STATUS_MCA_EXCEPTION = 0xC0000713, + MD_NTSTATUS_WIN_STATUS_CERTIFICATE_MAPPING_NOT_UNIQUE = 0xC0000714, + MD_NTSTATUS_WIN_STATUS_SYMLINK_CLASS_DISABLED = 0xC0000715, + MD_NTSTATUS_WIN_STATUS_INVALID_IDN_NORMALIZATION = 0xC0000716, + MD_NTSTATUS_WIN_STATUS_NO_UNICODE_TRANSLATION = 0xC0000717, + MD_NTSTATUS_WIN_STATUS_ALREADY_REGISTERED = 0xC0000718, + MD_NTSTATUS_WIN_STATUS_CONTEXT_MISMATCH = 0xC0000719, + MD_NTSTATUS_WIN_STATUS_PORT_ALREADY_HAS_COMPLETION_LIST = 0xC000071A, + MD_NTSTATUS_WIN_STATUS_CALLBACK_RETURNED_THREAD_PRIORITY = 0xC000071B, + MD_NTSTATUS_WIN_STATUS_INVALID_THREAD = 0xC000071C, + MD_NTSTATUS_WIN_STATUS_CALLBACK_RETURNED_TRANSACTION = 0xC000071D, + MD_NTSTATUS_WIN_STATUS_CALLBACK_RETURNED_LDR_LOCK = 0xC000071E, + MD_NTSTATUS_WIN_STATUS_CALLBACK_RETURNED_LANG = 0xC000071F, + MD_NTSTATUS_WIN_STATUS_CALLBACK_RETURNED_PRI_BACK = 0xC0000720, + MD_NTSTATUS_WIN_STATUS_CALLBACK_RETURNED_THREAD_AFFINITY = 0xC0000721, + MD_NTSTATUS_WIN_STATUS_DISK_REPAIR_DISABLED = 0xC0000800, + MD_NTSTATUS_WIN_STATUS_DS_DOMAIN_RENAME_IN_PROGRESS = 0xC0000801, + MD_NTSTATUS_WIN_STATUS_DISK_QUOTA_EXCEEDED = 0xC0000802, + MD_NTSTATUS_WIN_STATUS_CONTENT_BLOCKED = 0xC0000804, + MD_NTSTATUS_WIN_STATUS_BAD_CLUSTERS = 0xC0000805, + MD_NTSTATUS_WIN_STATUS_VOLUME_DIRTY = 0xC0000806, + MD_NTSTATUS_WIN_STATUS_DISK_REPAIR_UNSUCCESSFUL = 0xC0000808, + MD_NTSTATUS_WIN_STATUS_CORRUPT_LOG_OVERFULL = 0xC0000809, + MD_NTSTATUS_WIN_STATUS_CORRUPT_LOG_CORRUPTED = 0xC000080A, + MD_NTSTATUS_WIN_STATUS_CORRUPT_LOG_UNAVAILABLE = 0xC000080B, + MD_NTSTATUS_WIN_STATUS_CORRUPT_LOG_DELETED_FULL = 0xC000080C, + MD_NTSTATUS_WIN_STATUS_CORRUPT_LOG_CLEARED = 0xC000080D, + MD_NTSTATUS_WIN_STATUS_ORPHAN_NAME_EXHAUSTED = 0xC000080E, + MD_NTSTATUS_WIN_STATUS_PROACTIVE_SCAN_IN_PROGRESS = 0xC000080F, + MD_NTSTATUS_WIN_STATUS_ENCRYPTED_IO_NOT_POSSIBLE = 0xC0000810, + MD_NTSTATUS_WIN_STATUS_CORRUPT_LOG_UPLEVEL_RECORDS = 0xC0000811, + MD_NTSTATUS_WIN_STATUS_FILE_CHECKED_OUT = 0xC0000901, + MD_NTSTATUS_WIN_STATUS_CHECKOUT_REQUIRED = 0xC0000902, + MD_NTSTATUS_WIN_STATUS_BAD_FILE_TYPE = 0xC0000903, + MD_NTSTATUS_WIN_STATUS_FILE_TOO_LARGE = 0xC0000904, + MD_NTSTATUS_WIN_STATUS_FORMS_AUTH_REQUIRED = 0xC0000905, + MD_NTSTATUS_WIN_STATUS_VIRUS_INFECTED = 0xC0000906, + MD_NTSTATUS_WIN_STATUS_VIRUS_DELETED = 0xC0000907, + MD_NTSTATUS_WIN_STATUS_BAD_MCFG_TABLE = 0xC0000908, + MD_NTSTATUS_WIN_STATUS_CANNOT_BREAK_OPLOCK = 0xC0000909, + MD_NTSTATUS_WIN_STATUS_BAD_KEY = 0xC000090A, + MD_NTSTATUS_WIN_STATUS_BAD_DATA = 0xC000090B, + MD_NTSTATUS_WIN_STATUS_NO_KEY = 0xC000090C, + MD_NTSTATUS_WIN_STATUS_FILE_HANDLE_REVOKED = 0xC0000910, + MD_NTSTATUS_WIN_STATUS_WOW_ASSERTION = 0xC0009898, + MD_NTSTATUS_WIN_STATUS_INVALID_SIGNATURE = 0xC000A000, + MD_NTSTATUS_WIN_STATUS_HMAC_NOT_SUPPORTED = 0xC000A001, + MD_NTSTATUS_WIN_STATUS_AUTH_TAG_MISMATCH = 0xC000A002, + MD_NTSTATUS_WIN_STATUS_INVALID_STATE_TRANSITION = 0xC000A003, + MD_NTSTATUS_WIN_STATUS_INVALID_KERNEL_INFO_VERSION = 0xC000A004, + MD_NTSTATUS_WIN_STATUS_INVALID_PEP_INFO_VERSION = 0xC000A005, + MD_NTSTATUS_WIN_STATUS_IPSEC_QUEUE_OVERFLOW = 0xC000A010, + MD_NTSTATUS_WIN_STATUS_ND_QUEUE_OVERFLOW = 0xC000A011, + MD_NTSTATUS_WIN_STATUS_HOPLIMIT_EXCEEDED = 0xC000A012, + MD_NTSTATUS_WIN_STATUS_PROTOCOL_NOT_SUPPORTED = 0xC000A013, + MD_NTSTATUS_WIN_STATUS_FASTPATH_REJECTED = 0xC000A014, + MD_NTSTATUS_WIN_STATUS_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED = 0xC000A080, + MD_NTSTATUS_WIN_STATUS_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR = 0xC000A081, + MD_NTSTATUS_WIN_STATUS_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR = 0xC000A082, + MD_NTSTATUS_WIN_STATUS_XML_PARSE_ERROR = 0xC000A083, + MD_NTSTATUS_WIN_STATUS_XMLDSIG_ERROR = 0xC000A084, + MD_NTSTATUS_WIN_STATUS_WRONG_COMPARTMENT = 0xC000A085, + MD_NTSTATUS_WIN_STATUS_AUTHIP_FAILURE = 0xC000A086, + MD_NTSTATUS_WIN_STATUS_DS_OID_MAPPED_GROUP_CANT_HAVE_MEMBERS = 0xC000A087, + MD_NTSTATUS_WIN_STATUS_DS_OID_NOT_FOUND = 0xC000A088, + MD_NTSTATUS_WIN_STATUS_INCORRECT_ACCOUNT_TYPE = 0xC000A089, + MD_NTSTATUS_WIN_STATUS_HASH_NOT_SUPPORTED = 0xC000A100, + MD_NTSTATUS_WIN_STATUS_HASH_NOT_PRESENT = 0xC000A101, + MD_NTSTATUS_WIN_STATUS_SECONDARY_IC_PROVIDER_NOT_REGISTERED = 0xC000A121, + MD_NTSTATUS_WIN_STATUS_GPIO_CLIENT_INFORMATION_INVALID = 0xC000A122, + MD_NTSTATUS_WIN_STATUS_GPIO_VERSION_NOT_SUPPORTED = 0xC000A123, + MD_NTSTATUS_WIN_STATUS_GPIO_INVALID_REGISTRATION_PACKET = 0xC000A124, + MD_NTSTATUS_WIN_STATUS_GPIO_OPERATION_DENIED = 0xC000A125, + MD_NTSTATUS_WIN_STATUS_GPIO_INCOMPATIBLE_CONNECT_MODE = 0xC000A126, + MD_NTSTATUS_WIN_STATUS_CANNOT_SWITCH_RUNLEVEL = 0xC000A141, + MD_NTSTATUS_WIN_STATUS_INVALID_RUNLEVEL_SETTING = 0xC000A142, + MD_NTSTATUS_WIN_STATUS_RUNLEVEL_SWITCH_TIMEOUT = 0xC000A143, + MD_NTSTATUS_WIN_STATUS_RUNLEVEL_SWITCH_AGENT_TIMEOUT = 0xC000A145, + MD_NTSTATUS_WIN_STATUS_RUNLEVEL_SWITCH_IN_PROGRESS = 0xC000A146, + MD_NTSTATUS_WIN_STATUS_NOT_APPCONTAINER = 0xC000A200, + MD_NTSTATUS_WIN_STATUS_NOT_SUPPORTED_IN_APPCONTAINER = 0xC000A201, + MD_NTSTATUS_WIN_STATUS_INVALID_PACKAGE_SID_LENGTH = 0xC000A202, + MD_NTSTATUS_WIN_STATUS_APP_DATA_NOT_FOUND = 0xC000A281, + MD_NTSTATUS_WIN_STATUS_APP_DATA_EXPIRED = 0xC000A282, + MD_NTSTATUS_WIN_STATUS_APP_DATA_CORRUPT = 0xC000A283, + MD_NTSTATUS_WIN_STATUS_APP_DATA_LIMIT_EXCEEDED = 0xC000A284, + MD_NTSTATUS_WIN_STATUS_APP_DATA_REBOOT_REQUIRED = 0xC000A285, + MD_NTSTATUS_WIN_STATUS_OFFLOAD_READ_FLT_NOT_SUPPORTED = 0xC000A2A1, + MD_NTSTATUS_WIN_STATUS_OFFLOAD_WRITE_FLT_NOT_SUPPORTED = 0xC000A2A2, + MD_NTSTATUS_WIN_STATUS_OFFLOAD_READ_FILE_NOT_SUPPORTED = 0xC000A2A3, + MD_NTSTATUS_WIN_STATUS_OFFLOAD_WRITE_FILE_NOT_SUPPORTED = 0xC000A2A4, + MD_NTSTATUS_WIN_DBG_NO_STATE_CHANGE = 0xC0010001, + MD_NTSTATUS_WIN_DBG_APP_NOT_IDLE = 0xC0010002, + MD_NTSTATUS_WIN_RPC_NT_INVALID_STRING_BINDING = 0xC0020001, + MD_NTSTATUS_WIN_RPC_NT_WRONG_KIND_OF_BINDING = 0xC0020002, + MD_NTSTATUS_WIN_RPC_NT_INVALID_BINDING = 0xC0020003, + MD_NTSTATUS_WIN_RPC_NT_PROTSEQ_NOT_SUPPORTED = 0xC0020004, + MD_NTSTATUS_WIN_RPC_NT_INVALID_RPC_PROTSEQ = 0xC0020005, + MD_NTSTATUS_WIN_RPC_NT_INVALID_STRING_UUID = 0xC0020006, + MD_NTSTATUS_WIN_RPC_NT_INVALID_ENDPOINT_FORMAT = 0xC0020007, + MD_NTSTATUS_WIN_RPC_NT_INVALID_NET_ADDR = 0xC0020008, + MD_NTSTATUS_WIN_RPC_NT_NO_ENDPOINT_FOUND = 0xC0020009, + MD_NTSTATUS_WIN_RPC_NT_INVALID_TIMEOUT = 0xC002000A, + MD_NTSTATUS_WIN_RPC_NT_OBJECT_NOT_FOUND = 0xC002000B, + MD_NTSTATUS_WIN_RPC_NT_ALREADY_REGISTERED = 0xC002000C, + MD_NTSTATUS_WIN_RPC_NT_TYPE_ALREADY_REGISTERED = 0xC002000D, + MD_NTSTATUS_WIN_RPC_NT_ALREADY_LISTENING = 0xC002000E, + MD_NTSTATUS_WIN_RPC_NT_NO_PROTSEQS_REGISTERED = 0xC002000F, + MD_NTSTATUS_WIN_RPC_NT_NOT_LISTENING = 0xC0020010, + MD_NTSTATUS_WIN_RPC_NT_UNKNOWN_MGR_TYPE = 0xC0020011, + MD_NTSTATUS_WIN_RPC_NT_UNKNOWN_IF = 0xC0020012, + MD_NTSTATUS_WIN_RPC_NT_NO_BINDINGS = 0xC0020013, + MD_NTSTATUS_WIN_RPC_NT_NO_PROTSEQS = 0xC0020014, + MD_NTSTATUS_WIN_RPC_NT_CANT_CREATE_ENDPOINT = 0xC0020015, + MD_NTSTATUS_WIN_RPC_NT_OUT_OF_RESOURCES = 0xC0020016, + MD_NTSTATUS_WIN_RPC_NT_SERVER_UNAVAILABLE = 0xC0020017, + MD_NTSTATUS_WIN_RPC_NT_SERVER_TOO_BUSY = 0xC0020018, + MD_NTSTATUS_WIN_RPC_NT_INVALID_NETWORK_OPTIONS = 0xC0020019, + MD_NTSTATUS_WIN_RPC_NT_NO_CALL_ACTIVE = 0xC002001A, + MD_NTSTATUS_WIN_RPC_NT_CALL_FAILED = 0xC002001B, + MD_NTSTATUS_WIN_RPC_NT_CALL_FAILED_DNE = 0xC002001C, + MD_NTSTATUS_WIN_RPC_NT_PROTOCOL_ERROR = 0xC002001D, + MD_NTSTATUS_WIN_RPC_NT_UNSUPPORTED_TRANS_SYN = 0xC002001F, + MD_NTSTATUS_WIN_RPC_NT_UNSUPPORTED_TYPE = 0xC0020021, + MD_NTSTATUS_WIN_RPC_NT_INVALID_TAG = 0xC0020022, + MD_NTSTATUS_WIN_RPC_NT_INVALID_BOUND = 0xC0020023, + MD_NTSTATUS_WIN_RPC_NT_NO_ENTRY_NAME = 0xC0020024, + MD_NTSTATUS_WIN_RPC_NT_INVALID_NAME_SYNTAX = 0xC0020025, + MD_NTSTATUS_WIN_RPC_NT_UNSUPPORTED_NAME_SYNTAX = 0xC0020026, + MD_NTSTATUS_WIN_RPC_NT_UUID_NO_ADDRESS = 0xC0020028, + MD_NTSTATUS_WIN_RPC_NT_DUPLICATE_ENDPOINT = 0xC0020029, + MD_NTSTATUS_WIN_RPC_NT_UNKNOWN_AUTHN_TYPE = 0xC002002A, + MD_NTSTATUS_WIN_RPC_NT_MAX_CALLS_TOO_SMALL = 0xC002002B, + MD_NTSTATUS_WIN_RPC_NT_STRING_TOO_LONG = 0xC002002C, + MD_NTSTATUS_WIN_RPC_NT_PROTSEQ_NOT_FOUND = 0xC002002D, + MD_NTSTATUS_WIN_RPC_NT_PROCNUM_OUT_OF_RANGE = 0xC002002E, + MD_NTSTATUS_WIN_RPC_NT_BINDING_HAS_NO_AUTH = 0xC002002F, + MD_NTSTATUS_WIN_RPC_NT_UNKNOWN_AUTHN_SERVICE = 0xC0020030, + MD_NTSTATUS_WIN_RPC_NT_UNKNOWN_AUTHN_LEVEL = 0xC0020031, + MD_NTSTATUS_WIN_RPC_NT_INVALID_AUTH_IDENTITY = 0xC0020032, + MD_NTSTATUS_WIN_RPC_NT_UNKNOWN_AUTHZ_SERVICE = 0xC0020033, + MD_NTSTATUS_WIN_EPT_NT_INVALID_ENTRY = 0xC0020034, + MD_NTSTATUS_WIN_EPT_NT_CANT_PERFORM_OP = 0xC0020035, + MD_NTSTATUS_WIN_EPT_NT_NOT_REGISTERED = 0xC0020036, + MD_NTSTATUS_WIN_RPC_NT_NOTHING_TO_EXPORT = 0xC0020037, + MD_NTSTATUS_WIN_RPC_NT_INCOMPLETE_NAME = 0xC0020038, + MD_NTSTATUS_WIN_RPC_NT_INVALID_VERS_OPTION = 0xC0020039, + MD_NTSTATUS_WIN_RPC_NT_NO_MORE_MEMBERS = 0xC002003A, + MD_NTSTATUS_WIN_RPC_NT_NOT_ALL_OBJS_UNEXPORTED = 0xC002003B, + MD_NTSTATUS_WIN_RPC_NT_INTERFACE_NOT_FOUND = 0xC002003C, + MD_NTSTATUS_WIN_RPC_NT_ENTRY_ALREADY_EXISTS = 0xC002003D, + MD_NTSTATUS_WIN_RPC_NT_ENTRY_NOT_FOUND = 0xC002003E, + MD_NTSTATUS_WIN_RPC_NT_NAME_SERVICE_UNAVAILABLE = 0xC002003F, + MD_NTSTATUS_WIN_RPC_NT_INVALID_NAF_ID = 0xC0020040, + MD_NTSTATUS_WIN_RPC_NT_CANNOT_SUPPORT = 0xC0020041, + MD_NTSTATUS_WIN_RPC_NT_NO_CONTEXT_AVAILABLE = 0xC0020042, + MD_NTSTATUS_WIN_RPC_NT_INTERNAL_ERROR = 0xC0020043, + MD_NTSTATUS_WIN_RPC_NT_ZERO_DIVIDE = 0xC0020044, + MD_NTSTATUS_WIN_RPC_NT_ADDRESS_ERROR = 0xC0020045, + MD_NTSTATUS_WIN_RPC_NT_FP_DIV_ZERO = 0xC0020046, + MD_NTSTATUS_WIN_RPC_NT_FP_UNDERFLOW = 0xC0020047, + MD_NTSTATUS_WIN_RPC_NT_FP_OVERFLOW = 0xC0020048, + MD_NTSTATUS_WIN_RPC_NT_CALL_IN_PROGRESS = 0xC0020049, + MD_NTSTATUS_WIN_RPC_NT_NO_MORE_BINDINGS = 0xC002004A, + MD_NTSTATUS_WIN_RPC_NT_GROUP_MEMBER_NOT_FOUND = 0xC002004B, + MD_NTSTATUS_WIN_EPT_NT_CANT_CREATE = 0xC002004C, + MD_NTSTATUS_WIN_RPC_NT_INVALID_OBJECT = 0xC002004D, + MD_NTSTATUS_WIN_RPC_NT_NO_INTERFACES = 0xC002004F, + MD_NTSTATUS_WIN_RPC_NT_CALL_CANCELLED = 0xC0020050, + MD_NTSTATUS_WIN_RPC_NT_BINDING_INCOMPLETE = 0xC0020051, + MD_NTSTATUS_WIN_RPC_NT_COMM_FAILURE = 0xC0020052, + MD_NTSTATUS_WIN_RPC_NT_UNSUPPORTED_AUTHN_LEVEL = 0xC0020053, + MD_NTSTATUS_WIN_RPC_NT_NO_PRINC_NAME = 0xC0020054, + MD_NTSTATUS_WIN_RPC_NT_NOT_RPC_ERROR = 0xC0020055, + MD_NTSTATUS_WIN_RPC_NT_SEC_PKG_ERROR = 0xC0020057, + MD_NTSTATUS_WIN_RPC_NT_NOT_CANCELLED = 0xC0020058, + MD_NTSTATUS_WIN_RPC_NT_INVALID_ASYNC_HANDLE = 0xC0020062, + MD_NTSTATUS_WIN_RPC_NT_INVALID_ASYNC_CALL = 0xC0020063, + MD_NTSTATUS_WIN_RPC_NT_PROXY_ACCESS_DENIED = 0xC0020064, + MD_NTSTATUS_WIN_RPC_NT_COOKIE_AUTH_FAILED = 0xC0020065, + MD_NTSTATUS_WIN_RPC_NT_NO_MORE_ENTRIES = 0xC0030001, + MD_NTSTATUS_WIN_RPC_NT_SS_CHAR_TRANS_OPEN_FAIL = 0xC0030002, + MD_NTSTATUS_WIN_RPC_NT_SS_CHAR_TRANS_SHORT_FILE = 0xC0030003, + MD_NTSTATUS_WIN_RPC_NT_SS_IN_NULL_CONTEXT = 0xC0030004, + MD_NTSTATUS_WIN_RPC_NT_SS_CONTEXT_MISMATCH = 0xC0030005, + MD_NTSTATUS_WIN_RPC_NT_SS_CONTEXT_DAMAGED = 0xC0030006, + MD_NTSTATUS_WIN_RPC_NT_SS_HANDLES_MISMATCH = 0xC0030007, + MD_NTSTATUS_WIN_RPC_NT_SS_CANNOT_GET_CALL_HANDLE = 0xC0030008, + MD_NTSTATUS_WIN_RPC_NT_NULL_REF_POINTER = 0xC0030009, + MD_NTSTATUS_WIN_RPC_NT_ENUM_VALUE_OUT_OF_RANGE = 0xC003000A, + MD_NTSTATUS_WIN_RPC_NT_BYTE_COUNT_TOO_SMALL = 0xC003000B, + MD_NTSTATUS_WIN_RPC_NT_BAD_STUB_DATA = 0xC003000C, + MD_NTSTATUS_WIN_RPC_NT_INVALID_ES_ACTION = 0xC0030059, + MD_NTSTATUS_WIN_RPC_NT_WRONG_ES_VERSION = 0xC003005A, + MD_NTSTATUS_WIN_RPC_NT_WRONG_STUB_VERSION = 0xC003005B, + MD_NTSTATUS_WIN_RPC_NT_INVALID_PIPE_OBJECT = 0xC003005C, + MD_NTSTATUS_WIN_RPC_NT_INVALID_PIPE_OPERATION = 0xC003005D, + MD_NTSTATUS_WIN_RPC_NT_WRONG_PIPE_VERSION = 0xC003005E, + MD_NTSTATUS_WIN_RPC_NT_PIPE_CLOSED = 0xC003005F, + MD_NTSTATUS_WIN_RPC_NT_PIPE_DISCIPLINE_ERROR = 0xC0030060, + MD_NTSTATUS_WIN_RPC_NT_PIPE_EMPTY = 0xC0030061, + MD_NTSTATUS_WIN_STATUS_PNP_BAD_MPS_TABLE = 0xC0040035, + MD_NTSTATUS_WIN_STATUS_PNP_TRANSLATION_FAILED = 0xC0040036, + MD_NTSTATUS_WIN_STATUS_PNP_IRQ_TRANSLATION_FAILED = 0xC0040037, + MD_NTSTATUS_WIN_STATUS_PNP_INVALID_ID = 0xC0040038, + MD_NTSTATUS_WIN_STATUS_IO_REISSUE_AS_CACHED = 0xC0040039, + MD_NTSTATUS_WIN_STATUS_CTX_WINSTATION_NAME_INVALID = 0xC00A0001, + MD_NTSTATUS_WIN_STATUS_CTX_INVALID_PD = 0xC00A0002, + MD_NTSTATUS_WIN_STATUS_CTX_PD_NOT_FOUND = 0xC00A0003, + MD_NTSTATUS_WIN_STATUS_CTX_CLOSE_PENDING = 0xC00A0006, + MD_NTSTATUS_WIN_STATUS_CTX_NO_OUTBUF = 0xC00A0007, + MD_NTSTATUS_WIN_STATUS_CTX_MODEM_INF_NOT_FOUND = 0xC00A0008, + MD_NTSTATUS_WIN_STATUS_CTX_INVALID_MODEMNAME = 0xC00A0009, + MD_NTSTATUS_WIN_STATUS_CTX_RESPONSE_ERROR = 0xC00A000A, + MD_NTSTATUS_WIN_STATUS_CTX_MODEM_RESPONSE_TIMEOUT = 0xC00A000B, + MD_NTSTATUS_WIN_STATUS_CTX_MODEM_RESPONSE_NO_CARRIER = 0xC00A000C, + MD_NTSTATUS_WIN_STATUS_CTX_MODEM_RESPONSE_NO_DIALTONE = 0xC00A000D, + MD_NTSTATUS_WIN_STATUS_CTX_MODEM_RESPONSE_BUSY = 0xC00A000E, + MD_NTSTATUS_WIN_STATUS_CTX_MODEM_RESPONSE_VOICE = 0xC00A000F, + MD_NTSTATUS_WIN_STATUS_CTX_TD_ERROR = 0xC00A0010, + MD_NTSTATUS_WIN_STATUS_CTX_LICENSE_CLIENT_INVALID = 0xC00A0012, + MD_NTSTATUS_WIN_STATUS_CTX_LICENSE_NOT_AVAILABLE = 0xC00A0013, + MD_NTSTATUS_WIN_STATUS_CTX_LICENSE_EXPIRED = 0xC00A0014, + MD_NTSTATUS_WIN_STATUS_CTX_WINSTATION_NOT_FOUND = 0xC00A0015, + MD_NTSTATUS_WIN_STATUS_CTX_WINSTATION_NAME_COLLISION = 0xC00A0016, + MD_NTSTATUS_WIN_STATUS_CTX_WINSTATION_BUSY = 0xC00A0017, + MD_NTSTATUS_WIN_STATUS_CTX_BAD_VIDEO_MODE = 0xC00A0018, + MD_NTSTATUS_WIN_STATUS_CTX_GRAPHICS_INVALID = 0xC00A0022, + MD_NTSTATUS_WIN_STATUS_CTX_NOT_CONSOLE = 0xC00A0024, + MD_NTSTATUS_WIN_STATUS_CTX_CLIENT_QUERY_TIMEOUT = 0xC00A0026, + MD_NTSTATUS_WIN_STATUS_CTX_CONSOLE_DISCONNECT = 0xC00A0027, + MD_NTSTATUS_WIN_STATUS_CTX_CONSOLE_CONNECT = 0xC00A0028, + MD_NTSTATUS_WIN_STATUS_CTX_SHADOW_DENIED = 0xC00A002A, + MD_NTSTATUS_WIN_STATUS_CTX_WINSTATION_ACCESS_DENIED = 0xC00A002B, + MD_NTSTATUS_WIN_STATUS_CTX_INVALID_WD = 0xC00A002E, + MD_NTSTATUS_WIN_STATUS_CTX_WD_NOT_FOUND = 0xC00A002F, + MD_NTSTATUS_WIN_STATUS_CTX_SHADOW_INVALID = 0xC00A0030, + MD_NTSTATUS_WIN_STATUS_CTX_SHADOW_DISABLED = 0xC00A0031, + MD_NTSTATUS_WIN_STATUS_RDP_PROTOCOL_ERROR = 0xC00A0032, + MD_NTSTATUS_WIN_STATUS_CTX_CLIENT_LICENSE_NOT_SET = 0xC00A0033, + MD_NTSTATUS_WIN_STATUS_CTX_CLIENT_LICENSE_IN_USE = 0xC00A0034, + MD_NTSTATUS_WIN_STATUS_CTX_SHADOW_ENDED_BY_MODE_CHANGE = 0xC00A0035, + MD_NTSTATUS_WIN_STATUS_CTX_SHADOW_NOT_RUNNING = 0xC00A0036, + MD_NTSTATUS_WIN_STATUS_CTX_LOGON_DISABLED = 0xC00A0037, + MD_NTSTATUS_WIN_STATUS_CTX_SECURITY_LAYER_ERROR = 0xC00A0038, + MD_NTSTATUS_WIN_STATUS_TS_INCOMPATIBLE_SESSIONS = 0xC00A0039, + MD_NTSTATUS_WIN_STATUS_TS_VIDEO_SUBSYSTEM_ERROR = 0xC00A003A, + MD_NTSTATUS_WIN_STATUS_MUI_FILE_NOT_FOUND = 0xC00B0001, + MD_NTSTATUS_WIN_STATUS_MUI_INVALID_FILE = 0xC00B0002, + MD_NTSTATUS_WIN_STATUS_MUI_INVALID_RC_CONFIG = 0xC00B0003, + MD_NTSTATUS_WIN_STATUS_MUI_INVALID_LOCALE_NAME = 0xC00B0004, + MD_NTSTATUS_WIN_STATUS_MUI_INVALID_ULTIMATEFALLBACK_NAME = 0xC00B0005, + MD_NTSTATUS_WIN_STATUS_MUI_FILE_NOT_LOADED = 0xC00B0006, + MD_NTSTATUS_WIN_STATUS_RESOURCE_ENUM_USER_STOP = 0xC00B0007, + MD_NTSTATUS_WIN_STATUS_CLUSTER_INVALID_NODE = 0xC0130001, + MD_NTSTATUS_WIN_STATUS_CLUSTER_NODE_EXISTS = 0xC0130002, + MD_NTSTATUS_WIN_STATUS_CLUSTER_JOIN_IN_PROGRESS = 0xC0130003, + MD_NTSTATUS_WIN_STATUS_CLUSTER_NODE_NOT_FOUND = 0xC0130004, + MD_NTSTATUS_WIN_STATUS_CLUSTER_LOCAL_NODE_NOT_FOUND = 0xC0130005, + MD_NTSTATUS_WIN_STATUS_CLUSTER_NETWORK_EXISTS = 0xC0130006, + MD_NTSTATUS_WIN_STATUS_CLUSTER_NETWORK_NOT_FOUND = 0xC0130007, + MD_NTSTATUS_WIN_STATUS_CLUSTER_NETINTERFACE_EXISTS = 0xC0130008, + MD_NTSTATUS_WIN_STATUS_CLUSTER_NETINTERFACE_NOT_FOUND = 0xC0130009, + MD_NTSTATUS_WIN_STATUS_CLUSTER_INVALID_REQUEST = 0xC013000A, + MD_NTSTATUS_WIN_STATUS_CLUSTER_INVALID_NETWORK_PROVIDER = 0xC013000B, + MD_NTSTATUS_WIN_STATUS_CLUSTER_NODE_DOWN = 0xC013000C, + MD_NTSTATUS_WIN_STATUS_CLUSTER_NODE_UNREACHABLE = 0xC013000D, + MD_NTSTATUS_WIN_STATUS_CLUSTER_NODE_NOT_MEMBER = 0xC013000E, + MD_NTSTATUS_WIN_STATUS_CLUSTER_JOIN_NOT_IN_PROGRESS = 0xC013000F, + MD_NTSTATUS_WIN_STATUS_CLUSTER_INVALID_NETWORK = 0xC0130010, + MD_NTSTATUS_WIN_STATUS_CLUSTER_NO_NET_ADAPTERS = 0xC0130011, + MD_NTSTATUS_WIN_STATUS_CLUSTER_NODE_UP = 0xC0130012, + MD_NTSTATUS_WIN_STATUS_CLUSTER_NODE_PAUSED = 0xC0130013, + MD_NTSTATUS_WIN_STATUS_CLUSTER_NODE_NOT_PAUSED = 0xC0130014, + MD_NTSTATUS_WIN_STATUS_CLUSTER_NO_SECURITY_CONTEXT = 0xC0130015, + MD_NTSTATUS_WIN_STATUS_CLUSTER_NETWORK_NOT_INTERNAL = 0xC0130016, + MD_NTSTATUS_WIN_STATUS_CLUSTER_POISONED = 0xC0130017, + MD_NTSTATUS_WIN_STATUS_CLUSTER_NON_CSV_PATH = 0xC0130018, + MD_NTSTATUS_WIN_STATUS_CLUSTER_CSV_VOLUME_NOT_LOCAL = 0xC0130019, + MD_NTSTATUS_WIN_STATUS_CLUSTER_CSV_READ_OPLOCK_BREAK_IN_PROGRESS = 0xC0130020, + MD_NTSTATUS_WIN_STATUS_CLUSTER_CSV_AUTO_PAUSE_ERROR = 0xC0130021, + MD_NTSTATUS_WIN_STATUS_CLUSTER_CSV_REDIRECTED = 0xC0130022, + MD_NTSTATUS_WIN_STATUS_CLUSTER_CSV_NOT_REDIRECTED = 0xC0130023, + MD_NTSTATUS_WIN_STATUS_CLUSTER_CSV_VOLUME_DRAINING = 0xC0130024, + MD_NTSTATUS_WIN_STATUS_CLUSTER_CSV_SNAPSHOT_CREATION_IN_PROGRESS = 0xC0130025, + MD_NTSTATUS_WIN_STATUS_CLUSTER_CSV_VOLUME_DRAINING_SUCCEEDED_DOWNLEVEL = 0xC0130026, + MD_NTSTATUS_WIN_STATUS_ACPI_INVALID_OPCODE = 0xC0140001, + MD_NTSTATUS_WIN_STATUS_ACPI_STACK_OVERFLOW = 0xC0140002, + MD_NTSTATUS_WIN_STATUS_ACPI_ASSERT_FAILED = 0xC0140003, + MD_NTSTATUS_WIN_STATUS_ACPI_INVALID_INDEX = 0xC0140004, + MD_NTSTATUS_WIN_STATUS_ACPI_INVALID_ARGUMENT = 0xC0140005, + MD_NTSTATUS_WIN_STATUS_ACPI_FATAL = 0xC0140006, + MD_NTSTATUS_WIN_STATUS_ACPI_INVALID_SUPERNAME = 0xC0140007, + MD_NTSTATUS_WIN_STATUS_ACPI_INVALID_ARGTYPE = 0xC0140008, + MD_NTSTATUS_WIN_STATUS_ACPI_INVALID_OBJTYPE = 0xC0140009, + MD_NTSTATUS_WIN_STATUS_ACPI_INVALID_TARGETTYPE = 0xC014000A, + MD_NTSTATUS_WIN_STATUS_ACPI_INCORRECT_ARGUMENT_COUNT = 0xC014000B, + MD_NTSTATUS_WIN_STATUS_ACPI_ADDRESS_NOT_MAPPED = 0xC014000C, + MD_NTSTATUS_WIN_STATUS_ACPI_INVALID_EVENTTYPE = 0xC014000D, + MD_NTSTATUS_WIN_STATUS_ACPI_HANDLER_COLLISION = 0xC014000E, + MD_NTSTATUS_WIN_STATUS_ACPI_INVALID_DATA = 0xC014000F, + MD_NTSTATUS_WIN_STATUS_ACPI_INVALID_REGION = 0xC0140010, + MD_NTSTATUS_WIN_STATUS_ACPI_INVALID_ACCESS_SIZE = 0xC0140011, + MD_NTSTATUS_WIN_STATUS_ACPI_ACQUIRE_GLOBAL_LOCK = 0xC0140012, + MD_NTSTATUS_WIN_STATUS_ACPI_ALREADY_INITIALIZED = 0xC0140013, + MD_NTSTATUS_WIN_STATUS_ACPI_NOT_INITIALIZED = 0xC0140014, + MD_NTSTATUS_WIN_STATUS_ACPI_INVALID_MUTEX_LEVEL = 0xC0140015, + MD_NTSTATUS_WIN_STATUS_ACPI_MUTEX_NOT_OWNED = 0xC0140016, + MD_NTSTATUS_WIN_STATUS_ACPI_MUTEX_NOT_OWNER = 0xC0140017, + MD_NTSTATUS_WIN_STATUS_ACPI_RS_ACCESS = 0xC0140018, + MD_NTSTATUS_WIN_STATUS_ACPI_INVALID_TABLE = 0xC0140019, + MD_NTSTATUS_WIN_STATUS_ACPI_REG_HANDLER_FAILED = 0xC0140020, + MD_NTSTATUS_WIN_STATUS_ACPI_POWER_REQUEST_FAILED = 0xC0140021, + MD_NTSTATUS_WIN_STATUS_SXS_SECTION_NOT_FOUND = 0xC0150001, + MD_NTSTATUS_WIN_STATUS_SXS_CANT_GEN_ACTCTX = 0xC0150002, + MD_NTSTATUS_WIN_STATUS_SXS_INVALID_ACTCTXDATA_FORMAT = 0xC0150003, + MD_NTSTATUS_WIN_STATUS_SXS_ASSEMBLY_NOT_FOUND = 0xC0150004, + MD_NTSTATUS_WIN_STATUS_SXS_MANIFEST_FORMAT_ERROR = 0xC0150005, + MD_NTSTATUS_WIN_STATUS_SXS_MANIFEST_PARSE_ERROR = 0xC0150006, + MD_NTSTATUS_WIN_STATUS_SXS_ACTIVATION_CONTEXT_DISABLED = 0xC0150007, + MD_NTSTATUS_WIN_STATUS_SXS_KEY_NOT_FOUND = 0xC0150008, + MD_NTSTATUS_WIN_STATUS_SXS_VERSION_CONFLICT = 0xC0150009, + MD_NTSTATUS_WIN_STATUS_SXS_WRONG_SECTION_TYPE = 0xC015000A, + MD_NTSTATUS_WIN_STATUS_SXS_THREAD_QUERIES_DISABLED = 0xC015000B, + MD_NTSTATUS_WIN_STATUS_SXS_ASSEMBLY_MISSING = 0xC015000C, + MD_NTSTATUS_WIN_STATUS_SXS_PROCESS_DEFAULT_ALREADY_SET = 0xC015000E, + MD_NTSTATUS_WIN_STATUS_SXS_EARLY_DEACTIVATION = 0xC015000F, + MD_NTSTATUS_WIN_STATUS_SXS_INVALID_DEACTIVATION = 0xC0150010, + MD_NTSTATUS_WIN_STATUS_SXS_MULTIPLE_DEACTIVATION = 0xC0150011, + MD_NTSTATUS_WIN_STATUS_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY = 0xC0150012, + MD_NTSTATUS_WIN_STATUS_SXS_PROCESS_TERMINATION_REQUESTED = 0xC0150013, + MD_NTSTATUS_WIN_STATUS_SXS_CORRUPT_ACTIVATION_STACK = 0xC0150014, + MD_NTSTATUS_WIN_STATUS_SXS_CORRUPTION = 0xC0150015, + MD_NTSTATUS_WIN_STATUS_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE = 0xC0150016, + MD_NTSTATUS_WIN_STATUS_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME = 0xC0150017, + MD_NTSTATUS_WIN_STATUS_SXS_IDENTITY_DUPLICATE_ATTRIBUTE = 0xC0150018, + MD_NTSTATUS_WIN_STATUS_SXS_IDENTITY_PARSE_ERROR = 0xC0150019, + MD_NTSTATUS_WIN_STATUS_SXS_COMPONENT_STORE_CORRUPT = 0xC015001A, + MD_NTSTATUS_WIN_STATUS_SXS_FILE_HASH_MISMATCH = 0xC015001B, + MD_NTSTATUS_WIN_STATUS_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT = 0xC015001C, + MD_NTSTATUS_WIN_STATUS_SXS_IDENTITIES_DIFFERENT = 0xC015001D, + MD_NTSTATUS_WIN_STATUS_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT = 0xC015001E, + MD_NTSTATUS_WIN_STATUS_SXS_FILE_NOT_PART_OF_ASSEMBLY = 0xC015001F, + MD_NTSTATUS_WIN_STATUS_ADVANCED_INSTALLER_FAILED = 0xC0150020, + MD_NTSTATUS_WIN_STATUS_XML_ENCODING_MISMATCH = 0xC0150021, + MD_NTSTATUS_WIN_STATUS_SXS_MANIFEST_TOO_BIG = 0xC0150022, + MD_NTSTATUS_WIN_STATUS_SXS_SETTING_NOT_REGISTERED = 0xC0150023, + MD_NTSTATUS_WIN_STATUS_SXS_TRANSACTION_CLOSURE_INCOMPLETE = 0xC0150024, + MD_NTSTATUS_WIN_STATUS_SMI_PRIMITIVE_INSTALLER_FAILED = 0xC0150025, + MD_NTSTATUS_WIN_STATUS_GENERIC_COMMAND_FAILED = 0xC0150026, + MD_NTSTATUS_WIN_STATUS_SXS_FILE_HASH_MISSING = 0xC0150027, + MD_NTSTATUS_WIN_STATUS_TRANSACTIONAL_CONFLICT = 0xC0190001, + MD_NTSTATUS_WIN_STATUS_INVALID_TRANSACTION = 0xC0190002, + MD_NTSTATUS_WIN_STATUS_TRANSACTION_NOT_ACTIVE = 0xC0190003, + MD_NTSTATUS_WIN_STATUS_TM_INITIALIZATION_FAILED = 0xC0190004, + MD_NTSTATUS_WIN_STATUS_RM_NOT_ACTIVE = 0xC0190005, + MD_NTSTATUS_WIN_STATUS_RM_METADATA_CORRUPT = 0xC0190006, + MD_NTSTATUS_WIN_STATUS_TRANSACTION_NOT_JOINED = 0xC0190007, + MD_NTSTATUS_WIN_STATUS_DIRECTORY_NOT_RM = 0xC0190008, + MD_NTSTATUS_WIN_STATUS_TRANSACTIONS_UNSUPPORTED_REMOTE = 0xC019000A, + MD_NTSTATUS_WIN_STATUS_LOG_RESIZE_INVALID_SIZE = 0xC019000B, + MD_NTSTATUS_WIN_STATUS_REMOTE_FILE_VERSION_MISMATCH = 0xC019000C, + MD_NTSTATUS_WIN_STATUS_CRM_PROTOCOL_ALREADY_EXISTS = 0xC019000F, + MD_NTSTATUS_WIN_STATUS_TRANSACTION_PROPAGATION_FAILED = 0xC0190010, + MD_NTSTATUS_WIN_STATUS_CRM_PROTOCOL_NOT_FOUND = 0xC0190011, + MD_NTSTATUS_WIN_STATUS_TRANSACTION_SUPERIOR_EXISTS = 0xC0190012, + MD_NTSTATUS_WIN_STATUS_TRANSACTION_REQUEST_NOT_VALID = 0xC0190013, + MD_NTSTATUS_WIN_STATUS_TRANSACTION_NOT_REQUESTED = 0xC0190014, + MD_NTSTATUS_WIN_STATUS_TRANSACTION_ALREADY_ABORTED = 0xC0190015, + MD_NTSTATUS_WIN_STATUS_TRANSACTION_ALREADY_COMMITTED = 0xC0190016, + MD_NTSTATUS_WIN_STATUS_TRANSACTION_INVALID_MARSHALL_BUFFER = 0xC0190017, + MD_NTSTATUS_WIN_STATUS_CURRENT_TRANSACTION_NOT_VALID = 0xC0190018, + MD_NTSTATUS_WIN_STATUS_LOG_GROWTH_FAILED = 0xC0190019, + MD_NTSTATUS_WIN_STATUS_OBJECT_NO_LONGER_EXISTS = 0xC0190021, + MD_NTSTATUS_WIN_STATUS_STREAM_MINIVERSION_NOT_FOUND = 0xC0190022, + MD_NTSTATUS_WIN_STATUS_STREAM_MINIVERSION_NOT_VALID = 0xC0190023, + MD_NTSTATUS_WIN_STATUS_MINIVERSION_INACCESSIBLE_FROM_SPECIFIED_TRANSACTION = 0xC0190024, + MD_NTSTATUS_WIN_STATUS_CANT_OPEN_MINIVERSION_WITH_MODIFY_INTENT = 0xC0190025, + MD_NTSTATUS_WIN_STATUS_CANT_CREATE_MORE_STREAM_MINIVERSIONS = 0xC0190026, + MD_NTSTATUS_WIN_STATUS_HANDLE_NO_LONGER_VALID = 0xC0190028, + MD_NTSTATUS_WIN_STATUS_LOG_CORRUPTION_DETECTED = 0xC0190030, + MD_NTSTATUS_WIN_STATUS_RM_DISCONNECTED = 0xC0190032, + MD_NTSTATUS_WIN_STATUS_ENLISTMENT_NOT_SUPERIOR = 0xC0190033, + MD_NTSTATUS_WIN_STATUS_FILE_IDENTITY_NOT_PERSISTENT = 0xC0190036, + MD_NTSTATUS_WIN_STATUS_CANT_BREAK_TRANSACTIONAL_DEPENDENCY = 0xC0190037, + MD_NTSTATUS_WIN_STATUS_CANT_CROSS_RM_BOUNDARY = 0xC0190038, + MD_NTSTATUS_WIN_STATUS_TXF_DIR_NOT_EMPTY = 0xC0190039, + MD_NTSTATUS_WIN_STATUS_INDOUBT_TRANSACTIONS_EXIST = 0xC019003A, + MD_NTSTATUS_WIN_STATUS_TM_VOLATILE = 0xC019003B, + MD_NTSTATUS_WIN_STATUS_ROLLBACK_TIMER_EXPIRED = 0xC019003C, + MD_NTSTATUS_WIN_STATUS_TXF_ATTRIBUTE_CORRUPT = 0xC019003D, + MD_NTSTATUS_WIN_STATUS_EFS_NOT_ALLOWED_IN_TRANSACTION = 0xC019003E, + MD_NTSTATUS_WIN_STATUS_TRANSACTIONAL_OPEN_NOT_ALLOWED = 0xC019003F, + MD_NTSTATUS_WIN_STATUS_TRANSACTED_MAPPING_UNSUPPORTED_REMOTE = 0xC0190040, + MD_NTSTATUS_WIN_STATUS_TRANSACTION_REQUIRED_PROMOTION = 0xC0190043, + MD_NTSTATUS_WIN_STATUS_CANNOT_EXECUTE_FILE_IN_TRANSACTION = 0xC0190044, + MD_NTSTATUS_WIN_STATUS_TRANSACTIONS_NOT_FROZEN = 0xC0190045, + MD_NTSTATUS_WIN_STATUS_TRANSACTION_FREEZE_IN_PROGRESS = 0xC0190046, + MD_NTSTATUS_WIN_STATUS_NOT_SNAPSHOT_VOLUME = 0xC0190047, + MD_NTSTATUS_WIN_STATUS_NO_SAVEPOINT_WITH_OPEN_FILES = 0xC0190048, + MD_NTSTATUS_WIN_STATUS_SPARSE_NOT_ALLOWED_IN_TRANSACTION = 0xC0190049, + MD_NTSTATUS_WIN_STATUS_TM_IDENTITY_MISMATCH = 0xC019004A, + MD_NTSTATUS_WIN_STATUS_FLOATED_SECTION = 0xC019004B, + MD_NTSTATUS_WIN_STATUS_CANNOT_ACCEPT_TRANSACTED_WORK = 0xC019004C, + MD_NTSTATUS_WIN_STATUS_CANNOT_ABORT_TRANSACTIONS = 0xC019004D, + MD_NTSTATUS_WIN_STATUS_TRANSACTION_NOT_FOUND = 0xC019004E, + MD_NTSTATUS_WIN_STATUS_RESOURCEMANAGER_NOT_FOUND = 0xC019004F, + MD_NTSTATUS_WIN_STATUS_ENLISTMENT_NOT_FOUND = 0xC0190050, + MD_NTSTATUS_WIN_STATUS_TRANSACTIONMANAGER_NOT_FOUND = 0xC0190051, + MD_NTSTATUS_WIN_STATUS_TRANSACTIONMANAGER_NOT_ONLINE = 0xC0190052, + MD_NTSTATUS_WIN_STATUS_TRANSACTIONMANAGER_RECOVERY_NAME_COLLISION = 0xC0190053, + MD_NTSTATUS_WIN_STATUS_TRANSACTION_NOT_ROOT = 0xC0190054, + MD_NTSTATUS_WIN_STATUS_TRANSACTION_OBJECT_EXPIRED = 0xC0190055, + MD_NTSTATUS_WIN_STATUS_COMPRESSION_NOT_ALLOWED_IN_TRANSACTION = 0xC0190056, + MD_NTSTATUS_WIN_STATUS_TRANSACTION_RESPONSE_NOT_ENLISTED = 0xC0190057, + MD_NTSTATUS_WIN_STATUS_TRANSACTION_RECORD_TOO_LONG = 0xC0190058, + MD_NTSTATUS_WIN_STATUS_NO_LINK_TRACKING_IN_TRANSACTION = 0xC0190059, + MD_NTSTATUS_WIN_STATUS_OPERATION_NOT_SUPPORTED_IN_TRANSACTION = 0xC019005A, + MD_NTSTATUS_WIN_STATUS_TRANSACTION_INTEGRITY_VIOLATED = 0xC019005B, + MD_NTSTATUS_WIN_STATUS_TRANSACTIONMANAGER_IDENTITY_MISMATCH = 0xC019005C, + MD_NTSTATUS_WIN_STATUS_RM_CANNOT_BE_FROZEN_FOR_SNAPSHOT = 0xC019005D, + MD_NTSTATUS_WIN_STATUS_TRANSACTION_MUST_WRITETHROUGH = 0xC019005E, + MD_NTSTATUS_WIN_STATUS_TRANSACTION_NO_SUPERIOR = 0xC019005F, + MD_NTSTATUS_WIN_STATUS_EXPIRED_HANDLE = 0xC0190060, + MD_NTSTATUS_WIN_STATUS_TRANSACTION_NOT_ENLISTED = 0xC0190061, + MD_NTSTATUS_WIN_STATUS_LOG_SECTOR_INVALID = 0xC01A0001, + MD_NTSTATUS_WIN_STATUS_LOG_SECTOR_PARITY_INVALID = 0xC01A0002, + MD_NTSTATUS_WIN_STATUS_LOG_SECTOR_REMAPPED = 0xC01A0003, + MD_NTSTATUS_WIN_STATUS_LOG_BLOCK_INCOMPLETE = 0xC01A0004, + MD_NTSTATUS_WIN_STATUS_LOG_INVALID_RANGE = 0xC01A0005, + MD_NTSTATUS_WIN_STATUS_LOG_BLOCKS_EXHAUSTED = 0xC01A0006, + MD_NTSTATUS_WIN_STATUS_LOG_READ_CONTEXT_INVALID = 0xC01A0007, + MD_NTSTATUS_WIN_STATUS_LOG_RESTART_INVALID = 0xC01A0008, + MD_NTSTATUS_WIN_STATUS_LOG_BLOCK_VERSION = 0xC01A0009, + MD_NTSTATUS_WIN_STATUS_LOG_BLOCK_INVALID = 0xC01A000A, + MD_NTSTATUS_WIN_STATUS_LOG_READ_MODE_INVALID = 0xC01A000B, + MD_NTSTATUS_WIN_STATUS_LOG_METADATA_CORRUPT = 0xC01A000D, + MD_NTSTATUS_WIN_STATUS_LOG_METADATA_INVALID = 0xC01A000E, + MD_NTSTATUS_WIN_STATUS_LOG_METADATA_INCONSISTENT = 0xC01A000F, + MD_NTSTATUS_WIN_STATUS_LOG_RESERVATION_INVALID = 0xC01A0010, + MD_NTSTATUS_WIN_STATUS_LOG_CANT_DELETE = 0xC01A0011, + MD_NTSTATUS_WIN_STATUS_LOG_CONTAINER_LIMIT_EXCEEDED = 0xC01A0012, + MD_NTSTATUS_WIN_STATUS_LOG_START_OF_LOG = 0xC01A0013, + MD_NTSTATUS_WIN_STATUS_LOG_POLICY_ALREADY_INSTALLED = 0xC01A0014, + MD_NTSTATUS_WIN_STATUS_LOG_POLICY_NOT_INSTALLED = 0xC01A0015, + MD_NTSTATUS_WIN_STATUS_LOG_POLICY_INVALID = 0xC01A0016, + MD_NTSTATUS_WIN_STATUS_LOG_POLICY_CONFLICT = 0xC01A0017, + MD_NTSTATUS_WIN_STATUS_LOG_PINNED_ARCHIVE_TAIL = 0xC01A0018, + MD_NTSTATUS_WIN_STATUS_LOG_RECORD_NONEXISTENT = 0xC01A0019, + MD_NTSTATUS_WIN_STATUS_LOG_RECORDS_RESERVED_INVALID = 0xC01A001A, + MD_NTSTATUS_WIN_STATUS_LOG_SPACE_RESERVED_INVALID = 0xC01A001B, + MD_NTSTATUS_WIN_STATUS_LOG_TAIL_INVALID = 0xC01A001C, + MD_NTSTATUS_WIN_STATUS_LOG_FULL = 0xC01A001D, + MD_NTSTATUS_WIN_STATUS_LOG_MULTIPLEXED = 0xC01A001E, + MD_NTSTATUS_WIN_STATUS_LOG_DEDICATED = 0xC01A001F, + MD_NTSTATUS_WIN_STATUS_LOG_ARCHIVE_NOT_IN_PROGRESS = 0xC01A0020, + MD_NTSTATUS_WIN_STATUS_LOG_ARCHIVE_IN_PROGRESS = 0xC01A0021, + MD_NTSTATUS_WIN_STATUS_LOG_EPHEMERAL = 0xC01A0022, + MD_NTSTATUS_WIN_STATUS_LOG_NOT_ENOUGH_CONTAINERS = 0xC01A0023, + MD_NTSTATUS_WIN_STATUS_LOG_CLIENT_ALREADY_REGISTERED = 0xC01A0024, + MD_NTSTATUS_WIN_STATUS_LOG_CLIENT_NOT_REGISTERED = 0xC01A0025, + MD_NTSTATUS_WIN_STATUS_LOG_FULL_HANDLER_IN_PROGRESS = 0xC01A0026, + MD_NTSTATUS_WIN_STATUS_LOG_CONTAINER_READ_FAILED = 0xC01A0027, + MD_NTSTATUS_WIN_STATUS_LOG_CONTAINER_WRITE_FAILED = 0xC01A0028, + MD_NTSTATUS_WIN_STATUS_LOG_CONTAINER_OPEN_FAILED = 0xC01A0029, + MD_NTSTATUS_WIN_STATUS_LOG_CONTAINER_STATE_INVALID = 0xC01A002A, + MD_NTSTATUS_WIN_STATUS_LOG_STATE_INVALID = 0xC01A002B, + MD_NTSTATUS_WIN_STATUS_LOG_PINNED = 0xC01A002C, + MD_NTSTATUS_WIN_STATUS_LOG_METADATA_FLUSH_FAILED = 0xC01A002D, + MD_NTSTATUS_WIN_STATUS_LOG_INCONSISTENT_SECURITY = 0xC01A002E, + MD_NTSTATUS_WIN_STATUS_LOG_APPENDED_FLUSH_FAILED = 0xC01A002F, + MD_NTSTATUS_WIN_STATUS_LOG_PINNED_RESERVATION = 0xC01A0030, + MD_NTSTATUS_WIN_STATUS_VIDEO_HUNG_DISPLAY_DRIVER_THREAD = 0xC01B00EA, + MD_NTSTATUS_WIN_STATUS_FLT_NO_HANDLER_DEFINED = 0xC01C0001, + MD_NTSTATUS_WIN_STATUS_FLT_CONTEXT_ALREADY_DEFINED = 0xC01C0002, + MD_NTSTATUS_WIN_STATUS_FLT_INVALID_ASYNCHRONOUS_REQUEST = 0xC01C0003, + MD_NTSTATUS_WIN_STATUS_FLT_DISALLOW_FAST_IO = 0xC01C0004, + MD_NTSTATUS_WIN_STATUS_FLT_INVALID_NAME_REQUEST = 0xC01C0005, + MD_NTSTATUS_WIN_STATUS_FLT_NOT_SAFE_TO_POST_OPERATION = 0xC01C0006, + MD_NTSTATUS_WIN_STATUS_FLT_NOT_INITIALIZED = 0xC01C0007, + MD_NTSTATUS_WIN_STATUS_FLT_FILTER_NOT_READY = 0xC01C0008, + MD_NTSTATUS_WIN_STATUS_FLT_POST_OPERATION_CLEANUP = 0xC01C0009, + MD_NTSTATUS_WIN_STATUS_FLT_INTERNAL_ERROR = 0xC01C000A, + MD_NTSTATUS_WIN_STATUS_FLT_DELETING_OBJECT = 0xC01C000B, + MD_NTSTATUS_WIN_STATUS_FLT_MUST_BE_NONPAGED_POOL = 0xC01C000C, + MD_NTSTATUS_WIN_STATUS_FLT_DUPLICATE_ENTRY = 0xC01C000D, + MD_NTSTATUS_WIN_STATUS_FLT_CBDQ_DISABLED = 0xC01C000E, + MD_NTSTATUS_WIN_STATUS_FLT_DO_NOT_ATTACH = 0xC01C000F, + MD_NTSTATUS_WIN_STATUS_FLT_DO_NOT_DETACH = 0xC01C0010, + MD_NTSTATUS_WIN_STATUS_FLT_INSTANCE_ALTITUDE_COLLISION = 0xC01C0011, + MD_NTSTATUS_WIN_STATUS_FLT_INSTANCE_NAME_COLLISION = 0xC01C0012, + MD_NTSTATUS_WIN_STATUS_FLT_FILTER_NOT_FOUND = 0xC01C0013, + MD_NTSTATUS_WIN_STATUS_FLT_VOLUME_NOT_FOUND = 0xC01C0014, + MD_NTSTATUS_WIN_STATUS_FLT_INSTANCE_NOT_FOUND = 0xC01C0015, + MD_NTSTATUS_WIN_STATUS_FLT_CONTEXT_ALLOCATION_NOT_FOUND = 0xC01C0016, + MD_NTSTATUS_WIN_STATUS_FLT_INVALID_CONTEXT_REGISTRATION = 0xC01C0017, + MD_NTSTATUS_WIN_STATUS_FLT_NAME_CACHE_MISS = 0xC01C0018, + MD_NTSTATUS_WIN_STATUS_FLT_NO_DEVICE_OBJECT = 0xC01C0019, + MD_NTSTATUS_WIN_STATUS_FLT_VOLUME_ALREADY_MOUNTED = 0xC01C001A, + MD_NTSTATUS_WIN_STATUS_FLT_ALREADY_ENLISTED = 0xC01C001B, + MD_NTSTATUS_WIN_STATUS_FLT_CONTEXT_ALREADY_LINKED = 0xC01C001C, + MD_NTSTATUS_WIN_STATUS_FLT_NO_WAITER_FOR_REPLY = 0xC01C0020, + MD_NTSTATUS_WIN_STATUS_FLT_REGISTRATION_BUSY = 0xC01C0023, + MD_NTSTATUS_WIN_STATUS_MONITOR_NO_DESCRIPTOR = 0xC01D0001, + MD_NTSTATUS_WIN_STATUS_MONITOR_UNKNOWN_DESCRIPTOR_FORMAT = 0xC01D0002, + MD_NTSTATUS_WIN_STATUS_MONITOR_INVALID_DESCRIPTOR_CHECKSUM = 0xC01D0003, + MD_NTSTATUS_WIN_STATUS_MONITOR_INVALID_STANDARD_TIMING_BLOCK = 0xC01D0004, + MD_NTSTATUS_WIN_STATUS_MONITOR_WMI_DATABLOCK_REGISTRATION_FAILED = 0xC01D0005, + MD_NTSTATUS_WIN_STATUS_MONITOR_INVALID_SERIAL_NUMBER_MONDSC_BLOCK = 0xC01D0006, + MD_NTSTATUS_WIN_STATUS_MONITOR_INVALID_USER_FRIENDLY_MONDSC_BLOCK = 0xC01D0007, + MD_NTSTATUS_WIN_STATUS_MONITOR_NO_MORE_DESCRIPTOR_DATA = 0xC01D0008, + MD_NTSTATUS_WIN_STATUS_MONITOR_INVALID_DETAILED_TIMING_BLOCK = 0xC01D0009, + MD_NTSTATUS_WIN_STATUS_MONITOR_INVALID_MANUFACTURE_DATE = 0xC01D000A, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_NOT_EXCLUSIVE_MODE_OWNER = 0xC01E0000, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INSUFFICIENT_DMA_BUFFER = 0xC01E0001, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_DISPLAY_ADAPTER = 0xC01E0002, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_ADAPTER_WAS_RESET = 0xC01E0003, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_DRIVER_MODEL = 0xC01E0004, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_PRESENT_MODE_CHANGED = 0xC01E0005, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_PRESENT_OCCLUDED = 0xC01E0006, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_PRESENT_DENIED = 0xC01E0007, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_CANNOTCOLORCONVERT = 0xC01E0008, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_DRIVER_MISMATCH = 0xC01E0009, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_PRESENT_REDIRECTION_DISABLED = 0xC01E000B, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_PRESENT_UNOCCLUDED = 0xC01E000C, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_WINDOWDC_NOT_AVAILABLE = 0xC01E000D, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_WINDOWLESS_PRESENT_DISABLED = 0xC01E000E, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_NO_VIDEO_MEMORY = 0xC01E0100, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_CANT_LOCK_MEMORY = 0xC01E0101, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_ALLOCATION_BUSY = 0xC01E0102, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_TOO_MANY_REFERENCES = 0xC01E0103, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_TRY_AGAIN_LATER = 0xC01E0104, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_TRY_AGAIN_NOW = 0xC01E0105, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_ALLOCATION_INVALID = 0xC01E0106, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE = 0xC01E0107, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNSUPPORTED = 0xC01E0108, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_CANT_EVICT_PINNED_ALLOCATION = 0xC01E0109, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_ALLOCATION_USAGE = 0xC01E0110, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_CANT_RENDER_LOCKED_ALLOCATION = 0xC01E0111, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_ALLOCATION_CLOSED = 0xC01E0112, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_ALLOCATION_INSTANCE = 0xC01E0113, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_ALLOCATION_HANDLE = 0xC01E0114, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_WRONG_ALLOCATION_DEVICE = 0xC01E0115, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_ALLOCATION_CONTENT_LOST = 0xC01E0116, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_GPU_EXCEPTION_ON_DEVICE = 0xC01E0200, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_VIDPN_TOPOLOGY = 0xC01E0300, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_VIDPN_TOPOLOGY_NOT_SUPPORTED = 0xC01E0301, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_VIDPN_TOPOLOGY_CURRENTLY_NOT_SUPPORTED = 0xC01E0302, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_VIDPN = 0xC01E0303, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE = 0xC01E0304, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET = 0xC01E0305, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_VIDPN_MODALITY_NOT_SUPPORTED = 0xC01E0306, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_VIDPN_SOURCEMODESET = 0xC01E0308, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_VIDPN_TARGETMODESET = 0xC01E0309, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_FREQUENCY = 0xC01E030A, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_ACTIVE_REGION = 0xC01E030B, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_TOTAL_REGION = 0xC01E030C, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE_MODE = 0xC01E0310, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET_MODE = 0xC01E0311, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_PINNED_MODE_MUST_REMAIN_IN_SET = 0xC01E0312, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_PATH_ALREADY_IN_TOPOLOGY = 0xC01E0313, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_MODE_ALREADY_IN_MODESET = 0xC01E0314, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_VIDEOPRESENTSOURCESET = 0xC01E0315, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_VIDEOPRESENTTARGETSET = 0xC01E0316, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_SOURCE_ALREADY_IN_SET = 0xC01E0317, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_TARGET_ALREADY_IN_SET = 0xC01E0318, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_VIDPN_PRESENT_PATH = 0xC01E0319, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_NO_RECOMMENDED_VIDPN_TOPOLOGY = 0xC01E031A, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGESET = 0xC01E031B, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE = 0xC01E031C, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_FREQUENCYRANGE_NOT_IN_SET = 0xC01E031D, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_FREQUENCYRANGE_ALREADY_IN_SET = 0xC01E031F, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_STALE_MODESET = 0xC01E0320, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_MONITOR_SOURCEMODESET = 0xC01E0321, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_MONITOR_SOURCE_MODE = 0xC01E0322, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_NO_RECOMMENDED_FUNCTIONAL_VIDPN = 0xC01E0323, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_MODE_ID_MUST_BE_UNIQUE = 0xC01E0324, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_EMPTY_ADAPTER_MONITOR_MODE_SUPPORT_INTERSECTION = 0xC01E0325, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_VIDEO_PRESENT_TARGETS_LESS_THAN_SOURCES = 0xC01E0326, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_PATH_NOT_IN_TOPOLOGY = 0xC01E0327, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_SOURCE = 0xC01E0328, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_TARGET = 0xC01E0329, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_MONITORDESCRIPTORSET = 0xC01E032A, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_MONITORDESCRIPTOR = 0xC01E032B, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_MONITORDESCRIPTOR_NOT_IN_SET = 0xC01E032C, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_MONITORDESCRIPTOR_ALREADY_IN_SET = 0xC01E032D, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_MONITORDESCRIPTOR_ID_MUST_BE_UNIQUE = 0xC01E032E, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_VIDPN_TARGET_SUBSET_TYPE = 0xC01E032F, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_RESOURCES_NOT_RELATED = 0xC01E0330, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_SOURCE_ID_MUST_BE_UNIQUE = 0xC01E0331, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_TARGET_ID_MUST_BE_UNIQUE = 0xC01E0332, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_NO_AVAILABLE_VIDPN_TARGET = 0xC01E0333, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_MONITOR_COULD_NOT_BE_ASSOCIATED_WITH_ADAPTER = 0xC01E0334, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_NO_VIDPNMGR = 0xC01E0335, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_NO_ACTIVE_VIDPN = 0xC01E0336, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_STALE_VIDPN_TOPOLOGY = 0xC01E0337, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_MONITOR_NOT_CONNECTED = 0xC01E0338, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_SOURCE_NOT_IN_TOPOLOGY = 0xC01E0339, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_PRIMARYSURFACE_SIZE = 0xC01E033A, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_VISIBLEREGION_SIZE = 0xC01E033B, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_STRIDE = 0xC01E033C, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_PIXELFORMAT = 0xC01E033D, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_COLORBASIS = 0xC01E033E, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_PIXELVALUEACCESSMODE = 0xC01E033F, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_TARGET_NOT_IN_TOPOLOGY = 0xC01E0340, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_NO_DISPLAY_MODE_MANAGEMENT_SUPPORT = 0xC01E0341, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE = 0xC01E0342, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_CANT_ACCESS_ACTIVE_VIDPN = 0xC01E0343, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_PATH_IMPORTANCE_ORDINAL = 0xC01E0344, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_PATH_CONTENT_GEOMETRY_TRANSFORMATION = 0xC01E0345, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_PATH_CONTENT_GEOMETRY_TRANSFORMATION_NOT_SUPPORTED = 0xC01E0346, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_GAMMA_RAMP = 0xC01E0347, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_GAMMA_RAMP_NOT_SUPPORTED = 0xC01E0348, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_MULTISAMPLING_NOT_SUPPORTED = 0xC01E0349, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_MODE_NOT_IN_MODESET = 0xC01E034A, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_VIDPN_TOPOLOGY_RECOMMENDATION_REASON = 0xC01E034D, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_PATH_CONTENT_TYPE = 0xC01E034E, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_COPYPROTECTION_TYPE = 0xC01E034F, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_UNASSIGNED_MODESET_ALREADY_EXISTS = 0xC01E0350, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_SCANLINE_ORDERING = 0xC01E0352, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_TOPOLOGY_CHANGES_NOT_ALLOWED = 0xC01E0353, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_NO_AVAILABLE_IMPORTANCE_ORDINALS = 0xC01E0354, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INCOMPATIBLE_PRIVATE_FORMAT = 0xC01E0355, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_MODE_PRUNING_ALGORITHM = 0xC01E0356, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_MONITOR_CAPABILITY_ORIGIN = 0xC01E0357, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE_CONSTRAINT = 0xC01E0358, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_MAX_NUM_PATHS_REACHED = 0xC01E0359, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_CANCEL_VIDPN_TOPOLOGY_AUGMENTATION = 0xC01E035A, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_CLIENT_TYPE = 0xC01E035B, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_CLIENTVIDPN_NOT_SET = 0xC01E035C, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_SPECIFIED_CHILD_ALREADY_CONNECTED = 0xC01E0400, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_CHILD_DESCRIPTOR_NOT_SUPPORTED = 0xC01E0401, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_NOT_A_LINKED_ADAPTER = 0xC01E0430, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_LEADLINK_NOT_ENUMERATED = 0xC01E0431, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_CHAINLINKS_NOT_ENUMERATED = 0xC01E0432, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_ADAPTER_CHAIN_NOT_READY = 0xC01E0433, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_CHAINLINKS_NOT_STARTED = 0xC01E0434, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_CHAINLINKS_NOT_POWERED_ON = 0xC01E0435, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INCONSISTENT_DEVICE_LINK_STATE = 0xC01E0436, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_NOT_POST_DEVICE_DRIVER = 0xC01E0438, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_ADAPTER_ACCESS_NOT_EXCLUDED = 0xC01E043B, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_NOT_SUPPORTED = 0xC01E0500, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_COPP_NOT_SUPPORTED = 0xC01E0501, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_UAB_NOT_SUPPORTED = 0xC01E0502, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_INVALID_ENCRYPTED_PARAMETERS = 0xC01E0503, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_NO_PROTECTED_OUTPUTS_EXIST = 0xC01E0505, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_INTERNAL_ERROR = 0xC01E050B, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_INVALID_HANDLE = 0xC01E050C, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_PVP_INVALID_CERTIFICATE_LENGTH = 0xC01E050E, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_SPANNING_MODE_ENABLED = 0xC01E050F, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_THEATER_MODE_ENABLED = 0xC01E0510, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_PVP_HFS_FAILED = 0xC01E0511, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_INVALID_SRM = 0xC01E0512, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_HDCP = 0xC01E0513, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_ACP = 0xC01E0514, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_CGMSA = 0xC01E0515, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_HDCP_SRM_NEVER_SET = 0xC01E0516, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_RESOLUTION_TOO_HIGH = 0xC01E0517, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_ALL_HDCP_HARDWARE_ALREADY_IN_USE = 0xC01E0518, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_PROTECTED_OUTPUT_NO_LONGER_EXISTS = 0xC01E051A, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_PROTECTED_OUTPUT_DOES_NOT_HAVE_COPP_SEMANTICS = 0xC01E051C, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_INVALID_INFORMATION_REQUEST = 0xC01E051D, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_DRIVER_INTERNAL_ERROR = 0xC01E051E, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_PROTECTED_OUTPUT_DOES_NOT_HAVE_OPM_SEMANTICS = 0xC01E051F, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_SIGNALING_NOT_SUPPORTED = 0xC01E0520, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_INVALID_CONFIGURATION_REQUEST = 0xC01E0521, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_I2C_NOT_SUPPORTED = 0xC01E0580, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_I2C_DEVICE_DOES_NOT_EXIST = 0xC01E0581, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_I2C_ERROR_TRANSMITTING_DATA = 0xC01E0582, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_I2C_ERROR_RECEIVING_DATA = 0xC01E0583, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_DDCCI_VCP_NOT_SUPPORTED = 0xC01E0584, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_DDCCI_INVALID_DATA = 0xC01E0585, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_DDCCI_MONITOR_RETURNED_INVALID_TIMING_STATUS_BYTE = 0xC01E0586, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_DDCCI_INVALID_CAPABILITIES_STRING = 0xC01E0587, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_MCA_INTERNAL_ERROR = 0xC01E0588, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_DDCCI_INVALID_MESSAGE_COMMAND = 0xC01E0589, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_DDCCI_INVALID_MESSAGE_LENGTH = 0xC01E058A, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_DDCCI_INVALID_MESSAGE_CHECKSUM = 0xC01E058B, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_PHYSICAL_MONITOR_HANDLE = 0xC01E058C, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_MONITOR_NO_LONGER_EXISTS = 0xC01E058D, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_ONLY_CONSOLE_SESSION_SUPPORTED = 0xC01E05E0, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_NO_DISPLAY_DEVICE_CORRESPONDS_TO_NAME = 0xC01E05E1, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_DISPLAY_DEVICE_NOT_ATTACHED_TO_DESKTOP = 0xC01E05E2, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_MIRRORING_DEVICES_NOT_SUPPORTED = 0xC01E05E3, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_POINTER = 0xC01E05E4, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_NO_MONITORS_CORRESPOND_TO_DISPLAY_DEVICE = 0xC01E05E5, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_PARAMETER_ARRAY_TOO_SMALL = 0xC01E05E6, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_INTERNAL_ERROR = 0xC01E05E7, + MD_NTSTATUS_WIN_STATUS_GRAPHICS_SESSION_TYPE_CHANGE_IN_PROGRESS = 0xC01E05E8, + MD_NTSTATUS_WIN_STATUS_FVE_LOCKED_VOLUME = 0xC0210000, + MD_NTSTATUS_WIN_STATUS_FVE_NOT_ENCRYPTED = 0xC0210001, + MD_NTSTATUS_WIN_STATUS_FVE_BAD_INFORMATION = 0xC0210002, + MD_NTSTATUS_WIN_STATUS_FVE_TOO_SMALL = 0xC0210003, + MD_NTSTATUS_WIN_STATUS_FVE_FAILED_WRONG_FS = 0xC0210004, + MD_NTSTATUS_WIN_STATUS_FVE_BAD_PARTITION_SIZE = 0xC0210005, + MD_NTSTATUS_WIN_STATUS_FVE_FS_NOT_EXTENDED = 0xC0210006, + MD_NTSTATUS_WIN_STATUS_FVE_FS_MOUNTED = 0xC0210007, + MD_NTSTATUS_WIN_STATUS_FVE_NO_LICENSE = 0xC0210008, + MD_NTSTATUS_WIN_STATUS_FVE_ACTION_NOT_ALLOWED = 0xC0210009, + MD_NTSTATUS_WIN_STATUS_FVE_BAD_DATA = 0xC021000A, + MD_NTSTATUS_WIN_STATUS_FVE_VOLUME_NOT_BOUND = 0xC021000B, + MD_NTSTATUS_WIN_STATUS_FVE_NOT_DATA_VOLUME = 0xC021000C, + MD_NTSTATUS_WIN_STATUS_FVE_CONV_READ_ERROR = 0xC021000D, + MD_NTSTATUS_WIN_STATUS_FVE_CONV_WRITE_ERROR = 0xC021000E, + MD_NTSTATUS_WIN_STATUS_FVE_OVERLAPPED_UPDATE = 0xC021000F, + MD_NTSTATUS_WIN_STATUS_FVE_FAILED_SECTOR_SIZE = 0xC0210010, + MD_NTSTATUS_WIN_STATUS_FVE_FAILED_AUTHENTICATION = 0xC0210011, + MD_NTSTATUS_WIN_STATUS_FVE_NOT_OS_VOLUME = 0xC0210012, + MD_NTSTATUS_WIN_STATUS_FVE_KEYFILE_NOT_FOUND = 0xC0210013, + MD_NTSTATUS_WIN_STATUS_FVE_KEYFILE_INVALID = 0xC0210014, + MD_NTSTATUS_WIN_STATUS_FVE_KEYFILE_NO_VMK = 0xC0210015, + MD_NTSTATUS_WIN_STATUS_FVE_TPM_DISABLED = 0xC0210016, + MD_NTSTATUS_WIN_STATUS_FVE_TPM_SRK_AUTH_NOT_ZERO = 0xC0210017, + MD_NTSTATUS_WIN_STATUS_FVE_TPM_INVALID_PCR = 0xC0210018, + MD_NTSTATUS_WIN_STATUS_FVE_TPM_NO_VMK = 0xC0210019, + MD_NTSTATUS_WIN_STATUS_FVE_PIN_INVALID = 0xC021001A, + MD_NTSTATUS_WIN_STATUS_FVE_AUTH_INVALID_APPLICATION = 0xC021001B, + MD_NTSTATUS_WIN_STATUS_FVE_AUTH_INVALID_CONFIG = 0xC021001C, + MD_NTSTATUS_WIN_STATUS_FVE_DEBUGGER_ENABLED = 0xC021001D, + MD_NTSTATUS_WIN_STATUS_FVE_DRY_RUN_FAILED = 0xC021001E, + MD_NTSTATUS_WIN_STATUS_FVE_BAD_METADATA_POINTER = 0xC021001F, + MD_NTSTATUS_WIN_STATUS_FVE_OLD_METADATA_COPY = 0xC0210020, + MD_NTSTATUS_WIN_STATUS_FVE_REBOOT_REQUIRED = 0xC0210021, + MD_NTSTATUS_WIN_STATUS_FVE_RAW_ACCESS = 0xC0210022, + MD_NTSTATUS_WIN_STATUS_FVE_RAW_BLOCKED = 0xC0210023, + MD_NTSTATUS_WIN_STATUS_FVE_NO_AUTOUNLOCK_MASTER_KEY = 0xC0210024, + MD_NTSTATUS_WIN_STATUS_FVE_MOR_FAILED = 0xC0210025, + MD_NTSTATUS_WIN_STATUS_FVE_NO_FEATURE_LICENSE = 0xC0210026, + MD_NTSTATUS_WIN_STATUS_FVE_POLICY_USER_DISABLE_RDV_NOT_ALLOWED = 0xC0210027, + MD_NTSTATUS_WIN_STATUS_FVE_CONV_RECOVERY_FAILED = 0xC0210028, + MD_NTSTATUS_WIN_STATUS_FVE_VIRTUALIZED_SPACE_TOO_BIG = 0xC0210029, + MD_NTSTATUS_WIN_STATUS_FVE_INVALID_DATUM_TYPE = 0xC021002A, + MD_NTSTATUS_WIN_STATUS_FVE_VOLUME_TOO_SMALL = 0xC0210030, + MD_NTSTATUS_WIN_STATUS_FVE_ENH_PIN_INVALID = 0xC0210031, + MD_NTSTATUS_WIN_STATUS_FVE_FULL_ENCRYPTION_NOT_ALLOWED_ON_TP_STORAGE = 0xC0210032, + MD_NTSTATUS_WIN_STATUS_FVE_WIPE_NOT_ALLOWED_ON_TP_STORAGE = 0xC0210033, + MD_NTSTATUS_WIN_STATUS_FVE_NOT_ALLOWED_ON_CSV_STACK = 0xC0210034, + MD_NTSTATUS_WIN_STATUS_FVE_NOT_ALLOWED_ON_CLUSTER = 0xC0210035, + MD_NTSTATUS_WIN_STATUS_FVE_NOT_ALLOWED_TO_UPGRADE_WHILE_CONVERTING = 0xC0210036, + MD_NTSTATUS_WIN_STATUS_FVE_WIPE_CANCEL_NOT_APPLICABLE = 0xC0210037, + MD_NTSTATUS_WIN_STATUS_FVE_EDRIVE_DRY_RUN_FAILED = 0xC0210038, + MD_NTSTATUS_WIN_STATUS_FVE_SECUREBOOT_DISABLED = 0xC0210039, + MD_NTSTATUS_WIN_STATUS_FVE_SECUREBOOT_CONFIG_CHANGE = 0xC021003A, + MD_NTSTATUS_WIN_STATUS_FVE_DEVICE_LOCKEDOUT = 0xC021003B, + MD_NTSTATUS_WIN_STATUS_FVE_VOLUME_EXTEND_PREVENTS_EOW_DECRYPT = 0xC021003C, + MD_NTSTATUS_WIN_STATUS_FVE_NOT_DE_VOLUME = 0xC021003D, + MD_NTSTATUS_WIN_STATUS_FVE_PROTECTION_DISABLED = 0xC021003E, + MD_NTSTATUS_WIN_STATUS_FVE_PROTECTION_CANNOT_BE_DISABLED = 0xC021003F, + MD_NTSTATUS_WIN_STATUS_FWP_CALLOUT_NOT_FOUND = 0xC0220001, + MD_NTSTATUS_WIN_STATUS_FWP_CONDITION_NOT_FOUND = 0xC0220002, + MD_NTSTATUS_WIN_STATUS_FWP_FILTER_NOT_FOUND = 0xC0220003, + MD_NTSTATUS_WIN_STATUS_FWP_LAYER_NOT_FOUND = 0xC0220004, + MD_NTSTATUS_WIN_STATUS_FWP_PROVIDER_NOT_FOUND = 0xC0220005, + MD_NTSTATUS_WIN_STATUS_FWP_PROVIDER_CONTEXT_NOT_FOUND = 0xC0220006, + MD_NTSTATUS_WIN_STATUS_FWP_SUBLAYER_NOT_FOUND = 0xC0220007, + MD_NTSTATUS_WIN_STATUS_FWP_NOT_FOUND = 0xC0220008, + MD_NTSTATUS_WIN_STATUS_FWP_ALREADY_EXISTS = 0xC0220009, + MD_NTSTATUS_WIN_STATUS_FWP_IN_USE = 0xC022000A, + MD_NTSTATUS_WIN_STATUS_FWP_DYNAMIC_SESSION_IN_PROGRESS = 0xC022000B, + MD_NTSTATUS_WIN_STATUS_FWP_WRONG_SESSION = 0xC022000C, + MD_NTSTATUS_WIN_STATUS_FWP_NO_TXN_IN_PROGRESS = 0xC022000D, + MD_NTSTATUS_WIN_STATUS_FWP_TXN_IN_PROGRESS = 0xC022000E, + MD_NTSTATUS_WIN_STATUS_FWP_TXN_ABORTED = 0xC022000F, + MD_NTSTATUS_WIN_STATUS_FWP_SESSION_ABORTED = 0xC0220010, + MD_NTSTATUS_WIN_STATUS_FWP_INCOMPATIBLE_TXN = 0xC0220011, + MD_NTSTATUS_WIN_STATUS_FWP_TIMEOUT = 0xC0220012, + MD_NTSTATUS_WIN_STATUS_FWP_NET_EVENTS_DISABLED = 0xC0220013, + MD_NTSTATUS_WIN_STATUS_FWP_INCOMPATIBLE_LAYER = 0xC0220014, + MD_NTSTATUS_WIN_STATUS_FWP_KM_CLIENTS_ONLY = 0xC0220015, + MD_NTSTATUS_WIN_STATUS_FWP_LIFETIME_MISMATCH = 0xC0220016, + MD_NTSTATUS_WIN_STATUS_FWP_BUILTIN_OBJECT = 0xC0220017, + MD_NTSTATUS_WIN_STATUS_FWP_TOO_MANY_CALLOUTS = 0xC0220018, + MD_NTSTATUS_WIN_STATUS_FWP_NOTIFICATION_DROPPED = 0xC0220019, + MD_NTSTATUS_WIN_STATUS_FWP_TRAFFIC_MISMATCH = 0xC022001A, + MD_NTSTATUS_WIN_STATUS_FWP_INCOMPATIBLE_SA_STATE = 0xC022001B, + MD_NTSTATUS_WIN_STATUS_FWP_NULL_POINTER = 0xC022001C, + MD_NTSTATUS_WIN_STATUS_FWP_INVALID_ENUMERATOR = 0xC022001D, + MD_NTSTATUS_WIN_STATUS_FWP_INVALID_FLAGS = 0xC022001E, + MD_NTSTATUS_WIN_STATUS_FWP_INVALID_NET_MASK = 0xC022001F, + MD_NTSTATUS_WIN_STATUS_FWP_INVALID_RANGE = 0xC0220020, + MD_NTSTATUS_WIN_STATUS_FWP_INVALID_INTERVAL = 0xC0220021, + MD_NTSTATUS_WIN_STATUS_FWP_ZERO_LENGTH_ARRAY = 0xC0220022, + MD_NTSTATUS_WIN_STATUS_FWP_NULL_DISPLAY_NAME = 0xC0220023, + MD_NTSTATUS_WIN_STATUS_FWP_INVALID_ACTION_TYPE = 0xC0220024, + MD_NTSTATUS_WIN_STATUS_FWP_INVALID_WEIGHT = 0xC0220025, + MD_NTSTATUS_WIN_STATUS_FWP_MATCH_TYPE_MISMATCH = 0xC0220026, + MD_NTSTATUS_WIN_STATUS_FWP_TYPE_MISMATCH = 0xC0220027, + MD_NTSTATUS_WIN_STATUS_FWP_OUT_OF_BOUNDS = 0xC0220028, + MD_NTSTATUS_WIN_STATUS_FWP_RESERVED = 0xC0220029, + MD_NTSTATUS_WIN_STATUS_FWP_DUPLICATE_CONDITION = 0xC022002A, + MD_NTSTATUS_WIN_STATUS_FWP_DUPLICATE_KEYMOD = 0xC022002B, + MD_NTSTATUS_WIN_STATUS_FWP_ACTION_INCOMPATIBLE_WITH_LAYER = 0xC022002C, + MD_NTSTATUS_WIN_STATUS_FWP_ACTION_INCOMPATIBLE_WITH_SUBLAYER = 0xC022002D, + MD_NTSTATUS_WIN_STATUS_FWP_CONTEXT_INCOMPATIBLE_WITH_LAYER = 0xC022002E, + MD_NTSTATUS_WIN_STATUS_FWP_CONTEXT_INCOMPATIBLE_WITH_CALLOUT = 0xC022002F, + MD_NTSTATUS_WIN_STATUS_FWP_INCOMPATIBLE_AUTH_METHOD = 0xC0220030, + MD_NTSTATUS_WIN_STATUS_FWP_INCOMPATIBLE_DH_GROUP = 0xC0220031, + MD_NTSTATUS_WIN_STATUS_FWP_EM_NOT_SUPPORTED = 0xC0220032, + MD_NTSTATUS_WIN_STATUS_FWP_NEVER_MATCH = 0xC0220033, + MD_NTSTATUS_WIN_STATUS_FWP_PROVIDER_CONTEXT_MISMATCH = 0xC0220034, + MD_NTSTATUS_WIN_STATUS_FWP_INVALID_PARAMETER = 0xC0220035, + MD_NTSTATUS_WIN_STATUS_FWP_TOO_MANY_SUBLAYERS = 0xC0220036, + MD_NTSTATUS_WIN_STATUS_FWP_CALLOUT_NOTIFICATION_FAILED = 0xC0220037, + MD_NTSTATUS_WIN_STATUS_FWP_INVALID_AUTH_TRANSFORM = 0xC0220038, + MD_NTSTATUS_WIN_STATUS_FWP_INVALID_CIPHER_TRANSFORM = 0xC0220039, + MD_NTSTATUS_WIN_STATUS_FWP_INCOMPATIBLE_CIPHER_TRANSFORM = 0xC022003A, + MD_NTSTATUS_WIN_STATUS_FWP_INVALID_TRANSFORM_COMBINATION = 0xC022003B, + MD_NTSTATUS_WIN_STATUS_FWP_DUPLICATE_AUTH_METHOD = 0xC022003C, + MD_NTSTATUS_WIN_STATUS_FWP_INVALID_TUNNEL_ENDPOINT = 0xC022003D, + MD_NTSTATUS_WIN_STATUS_FWP_L2_DRIVER_NOT_READY = 0xC022003E, + MD_NTSTATUS_WIN_STATUS_FWP_KEY_DICTATOR_ALREADY_REGISTERED = 0xC022003F, + MD_NTSTATUS_WIN_STATUS_FWP_KEY_DICTATION_INVALID_KEYING_MATERIAL = 0xC0220040, + MD_NTSTATUS_WIN_STATUS_FWP_CONNECTIONS_DISABLED = 0xC0220041, + MD_NTSTATUS_WIN_STATUS_FWP_INVALID_DNS_NAME = 0xC0220042, + MD_NTSTATUS_WIN_STATUS_FWP_STILL_ON = 0xC0220043, + MD_NTSTATUS_WIN_STATUS_FWP_IKEEXT_NOT_RUNNING = 0xC0220044, + MD_NTSTATUS_WIN_STATUS_FWP_TCPIP_NOT_READY = 0xC0220100, + MD_NTSTATUS_WIN_STATUS_FWP_INJECT_HANDLE_CLOSING = 0xC0220101, + MD_NTSTATUS_WIN_STATUS_FWP_INJECT_HANDLE_STALE = 0xC0220102, + MD_NTSTATUS_WIN_STATUS_FWP_CANNOT_PEND = 0xC0220103, + MD_NTSTATUS_WIN_STATUS_FWP_DROP_NOICMP = 0xC0220104, + MD_NTSTATUS_WIN_STATUS_NDIS_CLOSING = 0xC0230002, + MD_NTSTATUS_WIN_STATUS_NDIS_BAD_VERSION = 0xC0230004, + MD_NTSTATUS_WIN_STATUS_NDIS_BAD_CHARACTERISTICS = 0xC0230005, + MD_NTSTATUS_WIN_STATUS_NDIS_ADAPTER_NOT_FOUND = 0xC0230006, + MD_NTSTATUS_WIN_STATUS_NDIS_OPEN_FAILED = 0xC0230007, + MD_NTSTATUS_WIN_STATUS_NDIS_DEVICE_FAILED = 0xC0230008, + MD_NTSTATUS_WIN_STATUS_NDIS_MULTICAST_FULL = 0xC0230009, + MD_NTSTATUS_WIN_STATUS_NDIS_MULTICAST_EXISTS = 0xC023000A, + MD_NTSTATUS_WIN_STATUS_NDIS_MULTICAST_NOT_FOUND = 0xC023000B, + MD_NTSTATUS_WIN_STATUS_NDIS_REQUEST_ABORTED = 0xC023000C, + MD_NTSTATUS_WIN_STATUS_NDIS_RESET_IN_PROGRESS = 0xC023000D, + MD_NTSTATUS_WIN_STATUS_NDIS_INVALID_PACKET = 0xC023000F, + MD_NTSTATUS_WIN_STATUS_NDIS_INVALID_DEVICE_REQUEST = 0xC0230010, + MD_NTSTATUS_WIN_STATUS_NDIS_ADAPTER_NOT_READY = 0xC0230011, + MD_NTSTATUS_WIN_STATUS_NDIS_INVALID_LENGTH = 0xC0230014, + MD_NTSTATUS_WIN_STATUS_NDIS_INVALID_DATA = 0xC0230015, + MD_NTSTATUS_WIN_STATUS_NDIS_BUFFER_TOO_SHORT = 0xC0230016, + MD_NTSTATUS_WIN_STATUS_NDIS_INVALID_OID = 0xC0230017, + MD_NTSTATUS_WIN_STATUS_NDIS_ADAPTER_REMOVED = 0xC0230018, + MD_NTSTATUS_WIN_STATUS_NDIS_UNSUPPORTED_MEDIA = 0xC0230019, + MD_NTSTATUS_WIN_STATUS_NDIS_GROUP_ADDRESS_IN_USE = 0xC023001A, + MD_NTSTATUS_WIN_STATUS_NDIS_FILE_NOT_FOUND = 0xC023001B, + MD_NTSTATUS_WIN_STATUS_NDIS_ERROR_READING_FILE = 0xC023001C, + MD_NTSTATUS_WIN_STATUS_NDIS_ALREADY_MAPPED = 0xC023001D, + MD_NTSTATUS_WIN_STATUS_NDIS_RESOURCE_CONFLICT = 0xC023001E, + MD_NTSTATUS_WIN_STATUS_NDIS_MEDIA_DISCONNECTED = 0xC023001F, + MD_NTSTATUS_WIN_STATUS_NDIS_INVALID_ADDRESS = 0xC0230022, + MD_NTSTATUS_WIN_STATUS_NDIS_PAUSED = 0xC023002A, + MD_NTSTATUS_WIN_STATUS_NDIS_INTERFACE_NOT_FOUND = 0xC023002B, + MD_NTSTATUS_WIN_STATUS_NDIS_UNSUPPORTED_REVISION = 0xC023002C, + MD_NTSTATUS_WIN_STATUS_NDIS_INVALID_PORT = 0xC023002D, + MD_NTSTATUS_WIN_STATUS_NDIS_INVALID_PORT_STATE = 0xC023002E, + MD_NTSTATUS_WIN_STATUS_NDIS_LOW_POWER_STATE = 0xC023002F, + MD_NTSTATUS_WIN_STATUS_NDIS_REINIT_REQUIRED = 0xC0230030, + MD_NTSTATUS_WIN_STATUS_NDIS_NOT_SUPPORTED = 0xC02300BB, + MD_NTSTATUS_WIN_STATUS_NDIS_OFFLOAD_POLICY = 0xC023100F, + MD_NTSTATUS_WIN_STATUS_NDIS_OFFLOAD_CONNECTION_REJECTED = 0xC0231012, + MD_NTSTATUS_WIN_STATUS_NDIS_OFFLOAD_PATH_REJECTED = 0xC0231013, + MD_NTSTATUS_WIN_STATUS_NDIS_DOT11_AUTO_CONFIG_ENABLED = 0xC0232000, + MD_NTSTATUS_WIN_STATUS_NDIS_DOT11_MEDIA_IN_USE = 0xC0232001, + MD_NTSTATUS_WIN_STATUS_NDIS_DOT11_POWER_STATE_INVALID = 0xC0232002, + MD_NTSTATUS_WIN_STATUS_NDIS_PM_WOL_PATTERN_LIST_FULL = 0xC0232003, + MD_NTSTATUS_WIN_STATUS_NDIS_PM_PROTOCOL_OFFLOAD_LIST_FULL = 0xC0232004, + MD_NTSTATUS_WIN_STATUS_TPM_ERROR_MASK = 0xC0290000, + MD_NTSTATUS_WIN_STATUS_TPM_AUTHFAIL = 0xC0290001, + MD_NTSTATUS_WIN_STATUS_TPM_BADINDEX = 0xC0290002, + MD_NTSTATUS_WIN_STATUS_TPM_BAD_PARAMETER = 0xC0290003, + MD_NTSTATUS_WIN_STATUS_TPM_AUDITFAILURE = 0xC0290004, + MD_NTSTATUS_WIN_STATUS_TPM_CLEAR_DISABLED = 0xC0290005, + MD_NTSTATUS_WIN_STATUS_TPM_DEACTIVATED = 0xC0290006, + MD_NTSTATUS_WIN_STATUS_TPM_DISABLED = 0xC0290007, + MD_NTSTATUS_WIN_STATUS_TPM_DISABLED_CMD = 0xC0290008, + MD_NTSTATUS_WIN_STATUS_TPM_FAIL = 0xC0290009, + MD_NTSTATUS_WIN_STATUS_TPM_BAD_ORDINAL = 0xC029000A, + MD_NTSTATUS_WIN_STATUS_TPM_INSTALL_DISABLED = 0xC029000B, + MD_NTSTATUS_WIN_STATUS_TPM_INVALID_KEYHANDLE = 0xC029000C, + MD_NTSTATUS_WIN_STATUS_TPM_KEYNOTFOUND = 0xC029000D, + MD_NTSTATUS_WIN_STATUS_TPM_INAPPROPRIATE_ENC = 0xC029000E, + MD_NTSTATUS_WIN_STATUS_TPM_MIGRATEFAIL = 0xC029000F, + MD_NTSTATUS_WIN_STATUS_TPM_INVALID_PCR_INFO = 0xC0290010, + MD_NTSTATUS_WIN_STATUS_TPM_NOSPACE = 0xC0290011, + MD_NTSTATUS_WIN_STATUS_TPM_NOSRK = 0xC0290012, + MD_NTSTATUS_WIN_STATUS_TPM_NOTSEALED_BLOB = 0xC0290013, + MD_NTSTATUS_WIN_STATUS_TPM_OWNER_SET = 0xC0290014, + MD_NTSTATUS_WIN_STATUS_TPM_RESOURCES = 0xC0290015, + MD_NTSTATUS_WIN_STATUS_TPM_SHORTRANDOM = 0xC0290016, + MD_NTSTATUS_WIN_STATUS_TPM_SIZE = 0xC0290017, + MD_NTSTATUS_WIN_STATUS_TPM_WRONGPCRVAL = 0xC0290018, + MD_NTSTATUS_WIN_STATUS_TPM_BAD_PARAM_SIZE = 0xC0290019, + MD_NTSTATUS_WIN_STATUS_TPM_SHA_THREAD = 0xC029001A, + MD_NTSTATUS_WIN_STATUS_TPM_SHA_ERROR = 0xC029001B, + MD_NTSTATUS_WIN_STATUS_TPM_FAILEDSELFTEST = 0xC029001C, + MD_NTSTATUS_WIN_STATUS_TPM_AUTH2FAIL = 0xC029001D, + MD_NTSTATUS_WIN_STATUS_TPM_BADTAG = 0xC029001E, + MD_NTSTATUS_WIN_STATUS_TPM_IOERROR = 0xC029001F, + MD_NTSTATUS_WIN_STATUS_TPM_ENCRYPT_ERROR = 0xC0290020, + MD_NTSTATUS_WIN_STATUS_TPM_DECRYPT_ERROR = 0xC0290021, + MD_NTSTATUS_WIN_STATUS_TPM_INVALID_AUTHHANDLE = 0xC0290022, + MD_NTSTATUS_WIN_STATUS_TPM_NO_ENDORSEMENT = 0xC0290023, + MD_NTSTATUS_WIN_STATUS_TPM_INVALID_KEYUSAGE = 0xC0290024, + MD_NTSTATUS_WIN_STATUS_TPM_WRONG_ENTITYTYPE = 0xC0290025, + MD_NTSTATUS_WIN_STATUS_TPM_INVALID_POSTINIT = 0xC0290026, + MD_NTSTATUS_WIN_STATUS_TPM_INAPPROPRIATE_SIG = 0xC0290027, + MD_NTSTATUS_WIN_STATUS_TPM_BAD_KEY_PROPERTY = 0xC0290028, + MD_NTSTATUS_WIN_STATUS_TPM_BAD_MIGRATION = 0xC0290029, + MD_NTSTATUS_WIN_STATUS_TPM_BAD_SCHEME = 0xC029002A, + MD_NTSTATUS_WIN_STATUS_TPM_BAD_DATASIZE = 0xC029002B, + MD_NTSTATUS_WIN_STATUS_TPM_BAD_MODE = 0xC029002C, + MD_NTSTATUS_WIN_STATUS_TPM_BAD_PRESENCE = 0xC029002D, + MD_NTSTATUS_WIN_STATUS_TPM_BAD_VERSION = 0xC029002E, + MD_NTSTATUS_WIN_STATUS_TPM_NO_WRAP_TRANSPORT = 0xC029002F, + MD_NTSTATUS_WIN_STATUS_TPM_AUDITFAIL_UNSUCCESSFUL = 0xC0290030, + MD_NTSTATUS_WIN_STATUS_TPM_AUDITFAIL_SUCCESSFUL = 0xC0290031, + MD_NTSTATUS_WIN_STATUS_TPM_NOTRESETABLE = 0xC0290032, + MD_NTSTATUS_WIN_STATUS_TPM_NOTLOCAL = 0xC0290033, + MD_NTSTATUS_WIN_STATUS_TPM_BAD_TYPE = 0xC0290034, + MD_NTSTATUS_WIN_STATUS_TPM_INVALID_RESOURCE = 0xC0290035, + MD_NTSTATUS_WIN_STATUS_TPM_NOTFIPS = 0xC0290036, + MD_NTSTATUS_WIN_STATUS_TPM_INVALID_FAMILY = 0xC0290037, + MD_NTSTATUS_WIN_STATUS_TPM_NO_NV_PERMISSION = 0xC0290038, + MD_NTSTATUS_WIN_STATUS_TPM_REQUIRES_SIGN = 0xC0290039, + MD_NTSTATUS_WIN_STATUS_TPM_KEY_NOTSUPPORTED = 0xC029003A, + MD_NTSTATUS_WIN_STATUS_TPM_AUTH_CONFLICT = 0xC029003B, + MD_NTSTATUS_WIN_STATUS_TPM_AREA_LOCKED = 0xC029003C, + MD_NTSTATUS_WIN_STATUS_TPM_BAD_LOCALITY = 0xC029003D, + MD_NTSTATUS_WIN_STATUS_TPM_READ_ONLY = 0xC029003E, + MD_NTSTATUS_WIN_STATUS_TPM_PER_NOWRITE = 0xC029003F, + MD_NTSTATUS_WIN_STATUS_TPM_FAMILYCOUNT = 0xC0290040, + MD_NTSTATUS_WIN_STATUS_TPM_WRITE_LOCKED = 0xC0290041, + MD_NTSTATUS_WIN_STATUS_TPM_BAD_ATTRIBUTES = 0xC0290042, + MD_NTSTATUS_WIN_STATUS_TPM_INVALID_STRUCTURE = 0xC0290043, + MD_NTSTATUS_WIN_STATUS_TPM_KEY_OWNER_CONTROL = 0xC0290044, + MD_NTSTATUS_WIN_STATUS_TPM_BAD_COUNTER = 0xC0290045, + MD_NTSTATUS_WIN_STATUS_TPM_NOT_FULLWRITE = 0xC0290046, + MD_NTSTATUS_WIN_STATUS_TPM_CONTEXT_GAP = 0xC0290047, + MD_NTSTATUS_WIN_STATUS_TPM_MAXNVWRITES = 0xC0290048, + MD_NTSTATUS_WIN_STATUS_TPM_NOOPERATOR = 0xC0290049, + MD_NTSTATUS_WIN_STATUS_TPM_RESOURCEMISSING = 0xC029004A, + MD_NTSTATUS_WIN_STATUS_TPM_DELEGATE_LOCK = 0xC029004B, + MD_NTSTATUS_WIN_STATUS_TPM_DELEGATE_FAMILY = 0xC029004C, + MD_NTSTATUS_WIN_STATUS_TPM_DELEGATE_ADMIN = 0xC029004D, + MD_NTSTATUS_WIN_STATUS_TPM_TRANSPORT_NOTEXCLUSIVE = 0xC029004E, + MD_NTSTATUS_WIN_STATUS_TPM_OWNER_CONTROL = 0xC029004F, + MD_NTSTATUS_WIN_STATUS_TPM_DAA_RESOURCES = 0xC0290050, + MD_NTSTATUS_WIN_STATUS_TPM_DAA_INPUT_DATA0 = 0xC0290051, + MD_NTSTATUS_WIN_STATUS_TPM_DAA_INPUT_DATA1 = 0xC0290052, + MD_NTSTATUS_WIN_STATUS_TPM_DAA_ISSUER_SETTINGS = 0xC0290053, + MD_NTSTATUS_WIN_STATUS_TPM_DAA_TPM_SETTINGS = 0xC0290054, + MD_NTSTATUS_WIN_STATUS_TPM_DAA_STAGE = 0xC0290055, + MD_NTSTATUS_WIN_STATUS_TPM_DAA_ISSUER_VALIDITY = 0xC0290056, + MD_NTSTATUS_WIN_STATUS_TPM_DAA_WRONG_W = 0xC0290057, + MD_NTSTATUS_WIN_STATUS_TPM_BAD_HANDLE = 0xC0290058, + MD_NTSTATUS_WIN_STATUS_TPM_BAD_DELEGATE = 0xC0290059, + MD_NTSTATUS_WIN_STATUS_TPM_BADCONTEXT = 0xC029005A, + MD_NTSTATUS_WIN_STATUS_TPM_TOOMANYCONTEXTS = 0xC029005B, + MD_NTSTATUS_WIN_STATUS_TPM_MA_TICKET_SIGNATURE = 0xC029005C, + MD_NTSTATUS_WIN_STATUS_TPM_MA_DESTINATION = 0xC029005D, + MD_NTSTATUS_WIN_STATUS_TPM_MA_SOURCE = 0xC029005E, + MD_NTSTATUS_WIN_STATUS_TPM_MA_AUTHORITY = 0xC029005F, + MD_NTSTATUS_WIN_STATUS_TPM_PERMANENTEK = 0xC0290061, + MD_NTSTATUS_WIN_STATUS_TPM_BAD_SIGNATURE = 0xC0290062, + MD_NTSTATUS_WIN_STATUS_TPM_NOCONTEXTSPACE = 0xC0290063, + MD_NTSTATUS_WIN_STATUS_TPM_COMMAND_BLOCKED = 0xC0290400, + MD_NTSTATUS_WIN_STATUS_TPM_INVALID_HANDLE = 0xC0290401, + MD_NTSTATUS_WIN_STATUS_TPM_DUPLICATE_VHANDLE = 0xC0290402, + MD_NTSTATUS_WIN_STATUS_TPM_EMBEDDED_COMMAND_BLOCKED = 0xC0290403, + MD_NTSTATUS_WIN_STATUS_TPM_EMBEDDED_COMMAND_UNSUPPORTED = 0xC0290404, + MD_NTSTATUS_WIN_STATUS_TPM_RETRY = 0xC0290800, + MD_NTSTATUS_WIN_STATUS_TPM_NEEDS_SELFTEST = 0xC0290801, + MD_NTSTATUS_WIN_STATUS_TPM_DOING_SELFTEST = 0xC0290802, + MD_NTSTATUS_WIN_STATUS_TPM_DEFEND_LOCK_RUNNING = 0xC0290803, + MD_NTSTATUS_WIN_STATUS_TPM_COMMAND_CANCELED = 0xC0291001, + MD_NTSTATUS_WIN_STATUS_TPM_TOO_MANY_CONTEXTS = 0xC0291002, + MD_NTSTATUS_WIN_STATUS_TPM_NOT_FOUND = 0xC0291003, + MD_NTSTATUS_WIN_STATUS_TPM_ACCESS_DENIED = 0xC0291004, + MD_NTSTATUS_WIN_STATUS_TPM_INSUFFICIENT_BUFFER = 0xC0291005, + MD_NTSTATUS_WIN_STATUS_TPM_PPI_FUNCTION_UNSUPPORTED = 0xC0291006, + MD_NTSTATUS_WIN_STATUS_PCP_ERROR_MASK = 0xC0292000, + MD_NTSTATUS_WIN_STATUS_PCP_DEVICE_NOT_READY = 0xC0292001, + MD_NTSTATUS_WIN_STATUS_PCP_INVALID_HANDLE = 0xC0292002, + MD_NTSTATUS_WIN_STATUS_PCP_INVALID_PARAMETER = 0xC0292003, + MD_NTSTATUS_WIN_STATUS_PCP_FLAG_NOT_SUPPORTED = 0xC0292004, + MD_NTSTATUS_WIN_STATUS_PCP_NOT_SUPPORTED = 0xC0292005, + MD_NTSTATUS_WIN_STATUS_PCP_BUFFER_TOO_SMALL = 0xC0292006, + MD_NTSTATUS_WIN_STATUS_PCP_INTERNAL_ERROR = 0xC0292007, + MD_NTSTATUS_WIN_STATUS_PCP_AUTHENTICATION_FAILED = 0xC0292008, + MD_NTSTATUS_WIN_STATUS_PCP_AUTHENTICATION_IGNORED = 0xC0292009, + MD_NTSTATUS_WIN_STATUS_PCP_POLICY_NOT_FOUND = 0xC029200A, + MD_NTSTATUS_WIN_STATUS_PCP_PROFILE_NOT_FOUND = 0xC029200B, + MD_NTSTATUS_WIN_STATUS_PCP_VALIDATION_FAILED = 0xC029200C, + MD_NTSTATUS_WIN_STATUS_PCP_DEVICE_NOT_FOUND = 0xC029200D, + MD_NTSTATUS_WIN_STATUS_HV_INVALID_HYPERCALL_CODE = 0xC0350002, + MD_NTSTATUS_WIN_STATUS_HV_INVALID_HYPERCALL_INPUT = 0xC0350003, + MD_NTSTATUS_WIN_STATUS_HV_INVALID_ALIGNMENT = 0xC0350004, + MD_NTSTATUS_WIN_STATUS_HV_INVALID_PARAMETER = 0xC0350005, + MD_NTSTATUS_WIN_STATUS_HV_ACCESS_DENIED = 0xC0350006, + MD_NTSTATUS_WIN_STATUS_HV_INVALID_PARTITION_STATE = 0xC0350007, + MD_NTSTATUS_WIN_STATUS_HV_OPERATION_DENIED = 0xC0350008, + MD_NTSTATUS_WIN_STATUS_HV_UNKNOWN_PROPERTY = 0xC0350009, + MD_NTSTATUS_WIN_STATUS_HV_PROPERTY_VALUE_OUT_OF_RANGE = 0xC035000A, + MD_NTSTATUS_WIN_STATUS_HV_INSUFFICIENT_MEMORY = 0xC035000B, + MD_NTSTATUS_WIN_STATUS_HV_PARTITION_TOO_DEEP = 0xC035000C, + MD_NTSTATUS_WIN_STATUS_HV_INVALID_PARTITION_ID = 0xC035000D, + MD_NTSTATUS_WIN_STATUS_HV_INVALID_VP_INDEX = 0xC035000E, + MD_NTSTATUS_WIN_STATUS_HV_INVALID_PORT_ID = 0xC0350011, + MD_NTSTATUS_WIN_STATUS_HV_INVALID_CONNECTION_ID = 0xC0350012, + MD_NTSTATUS_WIN_STATUS_HV_INSUFFICIENT_BUFFERS = 0xC0350013, + MD_NTSTATUS_WIN_STATUS_HV_NOT_ACKNOWLEDGED = 0xC0350014, + MD_NTSTATUS_WIN_STATUS_HV_ACKNOWLEDGED = 0xC0350016, + MD_NTSTATUS_WIN_STATUS_HV_INVALID_SAVE_RESTORE_STATE = 0xC0350017, + MD_NTSTATUS_WIN_STATUS_HV_INVALID_SYNIC_STATE = 0xC0350018, + MD_NTSTATUS_WIN_STATUS_HV_OBJECT_IN_USE = 0xC0350019, + MD_NTSTATUS_WIN_STATUS_HV_INVALID_PROXIMITY_DOMAIN_INFO = 0xC035001A, + MD_NTSTATUS_WIN_STATUS_HV_NO_DATA = 0xC035001B, + MD_NTSTATUS_WIN_STATUS_HV_INACTIVE = 0xC035001C, + MD_NTSTATUS_WIN_STATUS_HV_NO_RESOURCES = 0xC035001D, + MD_NTSTATUS_WIN_STATUS_HV_FEATURE_UNAVAILABLE = 0xC035001E, + MD_NTSTATUS_WIN_STATUS_HV_INSUFFICIENT_BUFFER = 0xC0350033, + MD_NTSTATUS_WIN_STATUS_HV_INSUFFICIENT_DEVICE_DOMAINS = 0xC0350038, + MD_NTSTATUS_WIN_STATUS_HV_INVALID_LP_INDEX = 0xC0350041, + MD_NTSTATUS_WIN_STATUS_HV_NOT_PRESENT = 0xC0351000, + MD_NTSTATUS_WIN_STATUS_IPSEC_BAD_SPI = 0xC0360001, + MD_NTSTATUS_WIN_STATUS_IPSEC_SA_LIFETIME_EXPIRED = 0xC0360002, + MD_NTSTATUS_WIN_STATUS_IPSEC_WRONG_SA = 0xC0360003, + MD_NTSTATUS_WIN_STATUS_IPSEC_REPLAY_CHECK_FAILED = 0xC0360004, + MD_NTSTATUS_WIN_STATUS_IPSEC_INVALID_PACKET = 0xC0360005, + MD_NTSTATUS_WIN_STATUS_IPSEC_INTEGRITY_CHECK_FAILED = 0xC0360006, + MD_NTSTATUS_WIN_STATUS_IPSEC_CLEAR_TEXT_DROP = 0xC0360007, + MD_NTSTATUS_WIN_STATUS_IPSEC_AUTH_FIREWALL_DROP = 0xC0360008, + MD_NTSTATUS_WIN_STATUS_IPSEC_THROTTLE_DROP = 0xC0360009, + MD_NTSTATUS_WIN_STATUS_IPSEC_DOSP_BLOCK = 0xC0368000, + MD_NTSTATUS_WIN_STATUS_IPSEC_DOSP_RECEIVED_MULTICAST = 0xC0368001, + MD_NTSTATUS_WIN_STATUS_IPSEC_DOSP_INVALID_PACKET = 0xC0368002, + MD_NTSTATUS_WIN_STATUS_IPSEC_DOSP_STATE_LOOKUP_FAILED = 0xC0368003, + MD_NTSTATUS_WIN_STATUS_IPSEC_DOSP_MAX_ENTRIES = 0xC0368004, + MD_NTSTATUS_WIN_STATUS_IPSEC_DOSP_KEYMOD_NOT_ALLOWED = 0xC0368005, + MD_NTSTATUS_WIN_STATUS_IPSEC_DOSP_MAX_PER_IP_RATELIMIT_QUEUES = 0xC0368006, + MD_NTSTATUS_WIN_STATUS_VID_DUPLICATE_HANDLER = 0xC0370001, + MD_NTSTATUS_WIN_STATUS_VID_TOO_MANY_HANDLERS = 0xC0370002, + MD_NTSTATUS_WIN_STATUS_VID_QUEUE_FULL = 0xC0370003, + MD_NTSTATUS_WIN_STATUS_VID_HANDLER_NOT_PRESENT = 0xC0370004, + MD_NTSTATUS_WIN_STATUS_VID_INVALID_OBJECT_NAME = 0xC0370005, + MD_NTSTATUS_WIN_STATUS_VID_PARTITION_NAME_TOO_LONG = 0xC0370006, + MD_NTSTATUS_WIN_STATUS_VID_MESSAGE_QUEUE_NAME_TOO_LONG = 0xC0370007, + MD_NTSTATUS_WIN_STATUS_VID_PARTITION_ALREADY_EXISTS = 0xC0370008, + MD_NTSTATUS_WIN_STATUS_VID_PARTITION_DOES_NOT_EXIST = 0xC0370009, + MD_NTSTATUS_WIN_STATUS_VID_PARTITION_NAME_NOT_FOUND = 0xC037000A, + MD_NTSTATUS_WIN_STATUS_VID_MESSAGE_QUEUE_ALREADY_EXISTS = 0xC037000B, + MD_NTSTATUS_WIN_STATUS_VID_EXCEEDED_MBP_ENTRY_MAP_LIMIT = 0xC037000C, + MD_NTSTATUS_WIN_STATUS_VID_MB_STILL_REFERENCED = 0xC037000D, + MD_NTSTATUS_WIN_STATUS_VID_CHILD_GPA_PAGE_SET_CORRUPTED = 0xC037000E, + MD_NTSTATUS_WIN_STATUS_VID_INVALID_NUMA_SETTINGS = 0xC037000F, + MD_NTSTATUS_WIN_STATUS_VID_INVALID_NUMA_NODE_INDEX = 0xC0370010, + MD_NTSTATUS_WIN_STATUS_VID_NOTIFICATION_QUEUE_ALREADY_ASSOCIATED = 0xC0370011, + MD_NTSTATUS_WIN_STATUS_VID_INVALID_MEMORY_BLOCK_HANDLE = 0xC0370012, + MD_NTSTATUS_WIN_STATUS_VID_PAGE_RANGE_OVERFLOW = 0xC0370013, + MD_NTSTATUS_WIN_STATUS_VID_INVALID_MESSAGE_QUEUE_HANDLE = 0xC0370014, + MD_NTSTATUS_WIN_STATUS_VID_INVALID_GPA_RANGE_HANDLE = 0xC0370015, + MD_NTSTATUS_WIN_STATUS_VID_NO_MEMORY_BLOCK_NOTIFICATION_QUEUE = 0xC0370016, + MD_NTSTATUS_WIN_STATUS_VID_MEMORY_BLOCK_LOCK_COUNT_EXCEEDED = 0xC0370017, + MD_NTSTATUS_WIN_STATUS_VID_INVALID_PPM_HANDLE = 0xC0370018, + MD_NTSTATUS_WIN_STATUS_VID_MBPS_ARE_LOCKED = 0xC0370019, + MD_NTSTATUS_WIN_STATUS_VID_MESSAGE_QUEUE_CLOSED = 0xC037001A, + MD_NTSTATUS_WIN_STATUS_VID_VIRTUAL_PROCESSOR_LIMIT_EXCEEDED = 0xC037001B, + MD_NTSTATUS_WIN_STATUS_VID_STOP_PENDING = 0xC037001C, + MD_NTSTATUS_WIN_STATUS_VID_INVALID_PROCESSOR_STATE = 0xC037001D, + MD_NTSTATUS_WIN_STATUS_VID_EXCEEDED_KM_CONTEXT_COUNT_LIMIT = 0xC037001E, + MD_NTSTATUS_WIN_STATUS_VID_KM_INTERFACE_ALREADY_INITIALIZED = 0xC037001F, + MD_NTSTATUS_WIN_STATUS_VID_MB_PROPERTY_ALREADY_SET_RESET = 0xC0370020, + MD_NTSTATUS_WIN_STATUS_VID_MMIO_RANGE_DESTROYED = 0xC0370021, + MD_NTSTATUS_WIN_STATUS_VID_INVALID_CHILD_GPA_PAGE_SET = 0xC0370022, + MD_NTSTATUS_WIN_STATUS_VID_RESERVE_PAGE_SET_IS_BEING_USED = 0xC0370023, + MD_NTSTATUS_WIN_STATUS_VID_RESERVE_PAGE_SET_TOO_SMALL = 0xC0370024, + MD_NTSTATUS_WIN_STATUS_VID_MBP_ALREADY_LOCKED_USING_RESERVED_PAGE = 0xC0370025, + MD_NTSTATUS_WIN_STATUS_VID_MBP_COUNT_EXCEEDED_LIMIT = 0xC0370026, + MD_NTSTATUS_WIN_STATUS_VID_SAVED_STATE_CORRUPT = 0xC0370027, + MD_NTSTATUS_WIN_STATUS_VID_SAVED_STATE_UNRECOGNIZED_ITEM = 0xC0370028, + MD_NTSTATUS_WIN_STATUS_VID_SAVED_STATE_INCOMPATIBLE = 0xC0370029, + MD_NTSTATUS_WIN_STATUS_VOLMGR_DATABASE_FULL = 0xC0380001, + MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_CONFIGURATION_CORRUPTED = 0xC0380002, + MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_CONFIGURATION_NOT_IN_SYNC = 0xC0380003, + MD_NTSTATUS_WIN_STATUS_VOLMGR_PACK_CONFIG_UPDATE_FAILED = 0xC0380004, + MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_CONTAINS_NON_SIMPLE_VOLUME = 0xC0380005, + MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_DUPLICATE = 0xC0380006, + MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_DYNAMIC = 0xC0380007, + MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_ID_INVALID = 0xC0380008, + MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_INVALID = 0xC0380009, + MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_LAST_VOTER = 0xC038000A, + MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_LAYOUT_INVALID = 0xC038000B, + MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_LAYOUT_NON_BASIC_BETWEEN_BASIC_PARTITIONS = 0xC038000C, + MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_LAYOUT_NOT_CYLINDER_ALIGNED = 0xC038000D, + MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_LAYOUT_PARTITIONS_TOO_SMALL = 0xC038000E, + MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_LAYOUT_PRIMARY_BETWEEN_LOGICAL_PARTITIONS = 0xC038000F, + MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_LAYOUT_TOO_MANY_PARTITIONS = 0xC0380010, + MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_MISSING = 0xC0380011, + MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_NOT_EMPTY = 0xC0380012, + MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_NOT_ENOUGH_SPACE = 0xC0380013, + MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_REVECTORING_FAILED = 0xC0380014, + MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_SECTOR_SIZE_INVALID = 0xC0380015, + MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_SET_NOT_CONTAINED = 0xC0380016, + MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_USED_BY_MULTIPLE_MEMBERS = 0xC0380017, + MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_USED_BY_MULTIPLE_PLEXES = 0xC0380018, + MD_NTSTATUS_WIN_STATUS_VOLMGR_DYNAMIC_DISK_NOT_SUPPORTED = 0xC0380019, + MD_NTSTATUS_WIN_STATUS_VOLMGR_EXTENT_ALREADY_USED = 0xC038001A, + MD_NTSTATUS_WIN_STATUS_VOLMGR_EXTENT_NOT_CONTIGUOUS = 0xC038001B, + MD_NTSTATUS_WIN_STATUS_VOLMGR_EXTENT_NOT_IN_PUBLIC_REGION = 0xC038001C, + MD_NTSTATUS_WIN_STATUS_VOLMGR_EXTENT_NOT_SECTOR_ALIGNED = 0xC038001D, + MD_NTSTATUS_WIN_STATUS_VOLMGR_EXTENT_OVERLAPS_EBR_PARTITION = 0xC038001E, + MD_NTSTATUS_WIN_STATUS_VOLMGR_EXTENT_VOLUME_LENGTHS_DO_NOT_MATCH = 0xC038001F, + MD_NTSTATUS_WIN_STATUS_VOLMGR_FAULT_TOLERANT_NOT_SUPPORTED = 0xC0380020, + MD_NTSTATUS_WIN_STATUS_VOLMGR_INTERLEAVE_LENGTH_INVALID = 0xC0380021, + MD_NTSTATUS_WIN_STATUS_VOLMGR_MAXIMUM_REGISTERED_USERS = 0xC0380022, + MD_NTSTATUS_WIN_STATUS_VOLMGR_MEMBER_IN_SYNC = 0xC0380023, + MD_NTSTATUS_WIN_STATUS_VOLMGR_MEMBER_INDEX_DUPLICATE = 0xC0380024, + MD_NTSTATUS_WIN_STATUS_VOLMGR_MEMBER_INDEX_INVALID = 0xC0380025, + MD_NTSTATUS_WIN_STATUS_VOLMGR_MEMBER_MISSING = 0xC0380026, + MD_NTSTATUS_WIN_STATUS_VOLMGR_MEMBER_NOT_DETACHED = 0xC0380027, + MD_NTSTATUS_WIN_STATUS_VOLMGR_MEMBER_REGENERATING = 0xC0380028, + MD_NTSTATUS_WIN_STATUS_VOLMGR_ALL_DISKS_FAILED = 0xC0380029, + MD_NTSTATUS_WIN_STATUS_VOLMGR_NO_REGISTERED_USERS = 0xC038002A, + MD_NTSTATUS_WIN_STATUS_VOLMGR_NO_SUCH_USER = 0xC038002B, + MD_NTSTATUS_WIN_STATUS_VOLMGR_NOTIFICATION_RESET = 0xC038002C, + MD_NTSTATUS_WIN_STATUS_VOLMGR_NUMBER_OF_MEMBERS_INVALID = 0xC038002D, + MD_NTSTATUS_WIN_STATUS_VOLMGR_NUMBER_OF_PLEXES_INVALID = 0xC038002E, + MD_NTSTATUS_WIN_STATUS_VOLMGR_PACK_DUPLICATE = 0xC038002F, + MD_NTSTATUS_WIN_STATUS_VOLMGR_PACK_ID_INVALID = 0xC0380030, + MD_NTSTATUS_WIN_STATUS_VOLMGR_PACK_INVALID = 0xC0380031, + MD_NTSTATUS_WIN_STATUS_VOLMGR_PACK_NAME_INVALID = 0xC0380032, + MD_NTSTATUS_WIN_STATUS_VOLMGR_PACK_OFFLINE = 0xC0380033, + MD_NTSTATUS_WIN_STATUS_VOLMGR_PACK_HAS_QUORUM = 0xC0380034, + MD_NTSTATUS_WIN_STATUS_VOLMGR_PACK_WITHOUT_QUORUM = 0xC0380035, + MD_NTSTATUS_WIN_STATUS_VOLMGR_PARTITION_STYLE_INVALID = 0xC0380036, + MD_NTSTATUS_WIN_STATUS_VOLMGR_PARTITION_UPDATE_FAILED = 0xC0380037, + MD_NTSTATUS_WIN_STATUS_VOLMGR_PLEX_IN_SYNC = 0xC0380038, + MD_NTSTATUS_WIN_STATUS_VOLMGR_PLEX_INDEX_DUPLICATE = 0xC0380039, + MD_NTSTATUS_WIN_STATUS_VOLMGR_PLEX_INDEX_INVALID = 0xC038003A, + MD_NTSTATUS_WIN_STATUS_VOLMGR_PLEX_LAST_ACTIVE = 0xC038003B, + MD_NTSTATUS_WIN_STATUS_VOLMGR_PLEX_MISSING = 0xC038003C, + MD_NTSTATUS_WIN_STATUS_VOLMGR_PLEX_REGENERATING = 0xC038003D, + MD_NTSTATUS_WIN_STATUS_VOLMGR_PLEX_TYPE_INVALID = 0xC038003E, + MD_NTSTATUS_WIN_STATUS_VOLMGR_PLEX_NOT_RAID5 = 0xC038003F, + MD_NTSTATUS_WIN_STATUS_VOLMGR_PLEX_NOT_SIMPLE = 0xC0380040, + MD_NTSTATUS_WIN_STATUS_VOLMGR_STRUCTURE_SIZE_INVALID = 0xC0380041, + MD_NTSTATUS_WIN_STATUS_VOLMGR_TOO_MANY_NOTIFICATION_REQUESTS = 0xC0380042, + MD_NTSTATUS_WIN_STATUS_VOLMGR_TRANSACTION_IN_PROGRESS = 0xC0380043, + MD_NTSTATUS_WIN_STATUS_VOLMGR_UNEXPECTED_DISK_LAYOUT_CHANGE = 0xC0380044, + MD_NTSTATUS_WIN_STATUS_VOLMGR_VOLUME_CONTAINS_MISSING_DISK = 0xC0380045, + MD_NTSTATUS_WIN_STATUS_VOLMGR_VOLUME_ID_INVALID = 0xC0380046, + MD_NTSTATUS_WIN_STATUS_VOLMGR_VOLUME_LENGTH_INVALID = 0xC0380047, + MD_NTSTATUS_WIN_STATUS_VOLMGR_VOLUME_LENGTH_NOT_SECTOR_SIZE_MULTIPLE = 0xC0380048, + MD_NTSTATUS_WIN_STATUS_VOLMGR_VOLUME_NOT_MIRRORED = 0xC0380049, + MD_NTSTATUS_WIN_STATUS_VOLMGR_VOLUME_NOT_RETAINED = 0xC038004A, + MD_NTSTATUS_WIN_STATUS_VOLMGR_VOLUME_OFFLINE = 0xC038004B, + MD_NTSTATUS_WIN_STATUS_VOLMGR_VOLUME_RETAINED = 0xC038004C, + MD_NTSTATUS_WIN_STATUS_VOLMGR_NUMBER_OF_EXTENTS_INVALID = 0xC038004D, + MD_NTSTATUS_WIN_STATUS_VOLMGR_DIFFERENT_SECTOR_SIZE = 0xC038004E, + MD_NTSTATUS_WIN_STATUS_VOLMGR_BAD_BOOT_DISK = 0xC038004F, + MD_NTSTATUS_WIN_STATUS_VOLMGR_PACK_CONFIG_OFFLINE = 0xC0380050, + MD_NTSTATUS_WIN_STATUS_VOLMGR_PACK_CONFIG_ONLINE = 0xC0380051, + MD_NTSTATUS_WIN_STATUS_VOLMGR_NOT_PRIMARY_PACK = 0xC0380052, + MD_NTSTATUS_WIN_STATUS_VOLMGR_PACK_LOG_UPDATE_FAILED = 0xC0380053, + MD_NTSTATUS_WIN_STATUS_VOLMGR_NUMBER_OF_DISKS_IN_PLEX_INVALID = 0xC0380054, + MD_NTSTATUS_WIN_STATUS_VOLMGR_NUMBER_OF_DISKS_IN_MEMBER_INVALID = 0xC0380055, + MD_NTSTATUS_WIN_STATUS_VOLMGR_VOLUME_MIRRORED = 0xC0380056, + MD_NTSTATUS_WIN_STATUS_VOLMGR_PLEX_NOT_SIMPLE_SPANNED = 0xC0380057, + MD_NTSTATUS_WIN_STATUS_VOLMGR_NO_VALID_LOG_COPIES = 0xC0380058, + MD_NTSTATUS_WIN_STATUS_VOLMGR_PRIMARY_PACK_PRESENT = 0xC0380059, + MD_NTSTATUS_WIN_STATUS_VOLMGR_NUMBER_OF_DISKS_INVALID = 0xC038005A, + MD_NTSTATUS_WIN_STATUS_VOLMGR_MIRROR_NOT_SUPPORTED = 0xC038005B, + MD_NTSTATUS_WIN_STATUS_VOLMGR_RAID5_NOT_SUPPORTED = 0xC038005C, + MD_NTSTATUS_WIN_STATUS_BCD_TOO_MANY_ELEMENTS = 0xC0390002, + MD_NTSTATUS_WIN_STATUS_VHD_DRIVE_FOOTER_MISSING = 0xC03A0001, + MD_NTSTATUS_WIN_STATUS_VHD_DRIVE_FOOTER_CHECKSUM_MISMATCH = 0xC03A0002, + MD_NTSTATUS_WIN_STATUS_VHD_DRIVE_FOOTER_CORRUPT = 0xC03A0003, + MD_NTSTATUS_WIN_STATUS_VHD_FORMAT_UNKNOWN = 0xC03A0004, + MD_NTSTATUS_WIN_STATUS_VHD_FORMAT_UNSUPPORTED_VERSION = 0xC03A0005, + MD_NTSTATUS_WIN_STATUS_VHD_SPARSE_HEADER_CHECKSUM_MISMATCH = 0xC03A0006, + MD_NTSTATUS_WIN_STATUS_VHD_SPARSE_HEADER_UNSUPPORTED_VERSION = 0xC03A0007, + MD_NTSTATUS_WIN_STATUS_VHD_SPARSE_HEADER_CORRUPT = 0xC03A0008, + MD_NTSTATUS_WIN_STATUS_VHD_BLOCK_ALLOCATION_FAILURE = 0xC03A0009, + MD_NTSTATUS_WIN_STATUS_VHD_BLOCK_ALLOCATION_TABLE_CORRUPT = 0xC03A000A, + MD_NTSTATUS_WIN_STATUS_VHD_INVALID_BLOCK_SIZE = 0xC03A000B, + MD_NTSTATUS_WIN_STATUS_VHD_BITMAP_MISMATCH = 0xC03A000C, + MD_NTSTATUS_WIN_STATUS_VHD_PARENT_VHD_NOT_FOUND = 0xC03A000D, + MD_NTSTATUS_WIN_STATUS_VHD_CHILD_PARENT_ID_MISMATCH = 0xC03A000E, + MD_NTSTATUS_WIN_STATUS_VHD_CHILD_PARENT_TIMESTAMP_MISMATCH = 0xC03A000F, + MD_NTSTATUS_WIN_STATUS_VHD_METADATA_READ_FAILURE = 0xC03A0010, + MD_NTSTATUS_WIN_STATUS_VHD_METADATA_WRITE_FAILURE = 0xC03A0011, + MD_NTSTATUS_WIN_STATUS_VHD_INVALID_SIZE = 0xC03A0012, + MD_NTSTATUS_WIN_STATUS_VHD_INVALID_FILE_SIZE = 0xC03A0013, + MD_NTSTATUS_WIN_STATUS_VIRTDISK_PROVIDER_NOT_FOUND = 0xC03A0014, + MD_NTSTATUS_WIN_STATUS_VIRTDISK_NOT_VIRTUAL_DISK = 0xC03A0015, + MD_NTSTATUS_WIN_STATUS_VHD_PARENT_VHD_ACCESS_DENIED = 0xC03A0016, + MD_NTSTATUS_WIN_STATUS_VHD_CHILD_PARENT_SIZE_MISMATCH = 0xC03A0017, + MD_NTSTATUS_WIN_STATUS_VHD_DIFFERENCING_CHAIN_CYCLE_DETECTED = 0xC03A0018, + MD_NTSTATUS_WIN_STATUS_VHD_DIFFERENCING_CHAIN_ERROR_IN_PARENT = 0xC03A0019, + MD_NTSTATUS_WIN_STATUS_VIRTUAL_DISK_LIMITATION = 0xC03A001A, + MD_NTSTATUS_WIN_STATUS_VHD_INVALID_TYPE = 0xC03A001B, + MD_NTSTATUS_WIN_STATUS_VHD_INVALID_STATE = 0xC03A001C, + MD_NTSTATUS_WIN_STATUS_VIRTDISK_UNSUPPORTED_DISK_SECTOR_SIZE = 0xC03A001D, + MD_NTSTATUS_WIN_STATUS_VIRTDISK_DISK_ALREADY_OWNED = 0xC03A001E, + MD_NTSTATUS_WIN_STATUS_VIRTDISK_DISK_ONLINE_AND_WRITABLE = 0xC03A001F, + MD_NTSTATUS_WIN_STATUS_CTLOG_TRACKING_NOT_INITIALIZED = 0xC03A0020, + MD_NTSTATUS_WIN_STATUS_CTLOG_LOGFILE_SIZE_EXCEEDED_MAXSIZE = 0xC03A0021, + MD_NTSTATUS_WIN_STATUS_CTLOG_VHD_CHANGED_OFFLINE = 0xC03A0022, + MD_NTSTATUS_WIN_STATUS_CTLOG_INVALID_TRACKING_STATE = 0xC03A0023, + MD_NTSTATUS_WIN_STATUS_CTLOG_INCONSISTENT_TRACKING_FILE = 0xC03A0024, + MD_NTSTATUS_WIN_STATUS_VHD_METADATA_FULL = 0xC03A0028, + MD_NTSTATUS_WIN_STATUS_RKF_KEY_NOT_FOUND = 0xC0400001, + MD_NTSTATUS_WIN_STATUS_RKF_DUPLICATE_KEY = 0xC0400002, + MD_NTSTATUS_WIN_STATUS_RKF_BLOB_FULL = 0xC0400003, + MD_NTSTATUS_WIN_STATUS_RKF_STORE_FULL = 0xC0400004, + MD_NTSTATUS_WIN_STATUS_RKF_FILE_BLOCKED = 0xC0400005, + MD_NTSTATUS_WIN_STATUS_RKF_ACTIVE_KEY = 0xC0400006, + MD_NTSTATUS_WIN_STATUS_RDBSS_RESTART_OPERATION = 0xC0410001, + MD_NTSTATUS_WIN_STATUS_RDBSS_CONTINUE_OPERATION = 0xC0410002, + MD_NTSTATUS_WIN_STATUS_RDBSS_POST_OPERATION = 0xC0410003, + MD_NTSTATUS_WIN_STATUS_BTH_ATT_INVALID_HANDLE = 0xC0420001, + MD_NTSTATUS_WIN_STATUS_BTH_ATT_READ_NOT_PERMITTED = 0xC0420002, + MD_NTSTATUS_WIN_STATUS_BTH_ATT_WRITE_NOT_PERMITTED = 0xC0420003, + MD_NTSTATUS_WIN_STATUS_BTH_ATT_INVALID_PDU = 0xC0420004, + MD_NTSTATUS_WIN_STATUS_BTH_ATT_INSUFFICIENT_AUTHENTICATION = 0xC0420005, + MD_NTSTATUS_WIN_STATUS_BTH_ATT_REQUEST_NOT_SUPPORTED = 0xC0420006, + MD_NTSTATUS_WIN_STATUS_BTH_ATT_INVALID_OFFSET = 0xC0420007, + MD_NTSTATUS_WIN_STATUS_BTH_ATT_INSUFFICIENT_AUTHORIZATION = 0xC0420008, + MD_NTSTATUS_WIN_STATUS_BTH_ATT_PREPARE_QUEUE_FULL = 0xC0420009, + MD_NTSTATUS_WIN_STATUS_BTH_ATT_ATTRIBUTE_NOT_FOUND = 0xC042000A, + MD_NTSTATUS_WIN_STATUS_BTH_ATT_ATTRIBUTE_NOT_LONG = 0xC042000B, + MD_NTSTATUS_WIN_STATUS_BTH_ATT_INSUFFICIENT_ENCRYPTION_KEY_SIZE = 0xC042000C, + MD_NTSTATUS_WIN_STATUS_BTH_ATT_INVALID_ATTRIBUTE_VALUE_LENGTH = 0xC042000D, + MD_NTSTATUS_WIN_STATUS_BTH_ATT_UNLIKELY = 0xC042000E, + MD_NTSTATUS_WIN_STATUS_BTH_ATT_INSUFFICIENT_ENCRYPTION = 0xC042000F, + MD_NTSTATUS_WIN_STATUS_BTH_ATT_UNSUPPORTED_GROUP_TYPE = 0xC0420010, + MD_NTSTATUS_WIN_STATUS_BTH_ATT_INSUFFICIENT_RESOURCES = 0xC0420011, + MD_NTSTATUS_WIN_STATUS_BTH_ATT_UNKNOWN_ERROR = 0xC0421000, + MD_NTSTATUS_WIN_STATUS_SECUREBOOT_ROLLBACK_DETECTED = 0xC0430001, + MD_NTSTATUS_WIN_STATUS_SECUREBOOT_POLICY_VIOLATION = 0xC0430002, + MD_NTSTATUS_WIN_STATUS_SECUREBOOT_INVALID_POLICY = 0xC0430003, + MD_NTSTATUS_WIN_STATUS_SECUREBOOT_POLICY_PUBLISHER_NOT_FOUND = 0xC0430004, + MD_NTSTATUS_WIN_STATUS_SECUREBOOT_POLICY_NOT_SIGNED = 0xC0430005, + MD_NTSTATUS_WIN_STATUS_SECUREBOOT_FILE_REPLACED = 0xC0430007, + MD_NTSTATUS_WIN_STATUS_AUDIO_ENGINE_NODE_NOT_FOUND = 0xC0440001, + MD_NTSTATUS_WIN_STATUS_HDAUDIO_EMPTY_CONNECTION_LIST = 0xC0440002, + MD_NTSTATUS_WIN_STATUS_HDAUDIO_CONNECTION_LIST_NOT_SUPPORTED = 0xC0440003, + MD_NTSTATUS_WIN_STATUS_HDAUDIO_NO_LOGICAL_DEVICES_CREATED = 0xC0440004, + MD_NTSTATUS_WIN_STATUS_HDAUDIO_NULL_LINKED_LIST_ENTRY = 0xC0440005, + MD_NTSTATUS_WIN_STATUS_VOLSNAP_BOOTFILE_NOT_VALID = 0xC0500003, + MD_NTSTATUS_WIN_STATUS_IO_PREEMPTED = 0xC0510001, + MD_NTSTATUS_WIN_STATUS_SVHDX_ERROR_STORED = 0xC05C0000, + MD_NTSTATUS_WIN_STATUS_SVHDX_ERROR_NOT_AVAILABLE = 0xC05CFF00, + MD_NTSTATUS_WIN_STATUS_SVHDX_UNIT_ATTENTION_AVAILABLE = 0xC05CFF01, + MD_NTSTATUS_WIN_STATUS_SVHDX_UNIT_ATTENTION_CAPACITY_DATA_CHANGED = 0xC05CFF02, + MD_NTSTATUS_WIN_STATUS_SVHDX_UNIT_ATTENTION_RESERVATIONS_PREEMPTED = 0xC05CFF03, + MD_NTSTATUS_WIN_STATUS_SVHDX_UNIT_ATTENTION_RESERVATIONS_RELEASED = 0xC05CFF04, + MD_NTSTATUS_WIN_STATUS_SVHDX_UNIT_ATTENTION_REGISTRATIONS_PREEMPTED = 0xC05CFF05, + MD_NTSTATUS_WIN_STATUS_SVHDX_UNIT_ATTENTION_OPERATING_DEFINITION_CHANGED = 0xC05CFF06, + MD_NTSTATUS_WIN_STATUS_SVHDX_RESERVATION_CONFLICT = 0xC05CFF07, + MD_NTSTATUS_WIN_STATUS_SVHDX_WRONG_FILE_TYPE = 0xC05CFF08, + MD_NTSTATUS_WIN_STATUS_SVHDX_VERSION_MISMATCH = 0xC05CFF09, + MD_NTSTATUS_WIN_STATUS_VHD_SHARED = 0xC05CFF0A, + MD_NTSTATUS_WIN_STATUS_SPACES_RESILIENCY_TYPE_INVALID = 0xC0E70003, + MD_NTSTATUS_WIN_STATUS_SPACES_DRIVE_SECTOR_SIZE_INVALID = 0xC0E70004, + MD_NTSTATUS_WIN_STATUS_SPACES_INTERLEAVE_LENGTH_INVALID = 0xC0E70009, + MD_NTSTATUS_WIN_STATUS_SPACES_NUMBER_OF_COLUMNS_INVALID = 0xC0E7000A, + MD_NTSTATUS_WIN_STATUS_SPACES_NOT_ENOUGH_DRIVES = 0xC0E7000B +} MDNTStatusCodeWin; + // These constants are defined in the MSDN documentation of // the EXCEPTION_RECORD structure. typedef enum { @@ -113,4 +2250,12 @@ typedef enum { MD_ACCESS_VIOLATION_WIN_EXEC = 8 } MDAccessViolationTypeWin; +// These constants are defined in the MSDN documentation of +// the EXCEPTION_RECORD structure. +typedef enum { + MD_IN_PAGE_ERROR_WIN_READ = 0, + MD_IN_PAGE_ERROR_WIN_WRITE = 1, + MD_IN_PAGE_ERROR_WIN_EXEC = 8 +} MDInPageErrorTypeWin; + #endif /* GOOGLE_BREAKPAD_COMMON_MINIDUMP_EXCEPTION_WIN32_H__ */ diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_format.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_format.h index af8cab0ae863..17a5abba33f4 100644 --- a/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_format.h +++ b/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_format.h @@ -97,7 +97,6 @@ typedef struct { #define MD_CONTEXT_IA64 0x00080000 /* CONTEXT_IA64 */ /* Additional values from winnt.h in the Windows CE 5.0 SDK: */ #define MD_CONTEXT_SHX 0x000000c0 /* CONTEXT_SH4 (Super-H, includes SH3) */ -#define MD_CONTEXT_MIPS 0x00010000 /* CONTEXT_R4000 (same value as x86?) */ #define MD_CONTEXT_ALPHA 0x00020000 /* CONTEXT_ALPHA */ /* As of Windows 7 SP1, the number of flag bits has increased to @@ -115,6 +114,8 @@ typedef struct { #include "minidump_cpu_amd64.h" #include "minidump_cpu_arm.h" +#include "minidump_cpu_arm64.h" +#include "minidump_cpu_mips.h" #include "minidump_cpu_ppc.h" #include "minidump_cpu_ppc64.h" #include "minidump_cpu_sparc.h" @@ -341,13 +342,13 @@ typedef enum { MD_LINUX_ENVIRON = 0x47670007, /* /proc/$x/environ */ MD_LINUX_AUXV = 0x47670008, /* /proc/$x/auxv */ MD_LINUX_MAPS = 0x47670009, /* /proc/$x/maps */ - MD_LINUX_DSO_DEBUG = 0x4767000A /* MDRawDebug */ + MD_LINUX_DSO_DEBUG = 0x4767000A /* MDRawDebug{32,64} */ } MDStreamType; /* MINIDUMP_STREAM_TYPE */ typedef struct { uint32_t length; /* Length of buffer in bytes (not characters), - * excluding 0-terminator */ + * excluding 0-terminator */ uint16_t buffer[1]; /* UTF-16-encoded, 0-terminated */ } MDString; /* MINIDUMP_STRING */ @@ -529,10 +530,11 @@ typedef struct { uint64_t exception_information[MD_EXCEPTION_MAXIMUM_PARAMETERS]; } MDException; /* MINIDUMP_EXCEPTION */ -#include "minidump_exception_win32.h" -#include "minidump_exception_mac.h" #include "minidump_exception_linux.h" +#include "minidump_exception_mac.h" +#include "minidump_exception_ps3.h" #include "minidump_exception_solaris.h" +#include "minidump_exception_win32.h" typedef struct { uint32_t thread_id; /* Thread in which the exception @@ -551,19 +553,48 @@ typedef union { uint32_t feature_information; /* cpuid 1: edx */ uint32_t amd_extended_cpu_features; /* cpuid 0x80000001, ebx */ } x86_cpu_info; + struct { + uint32_t cpuid; + uint32_t elf_hwcaps; /* linux specific, 0 otherwise */ + } arm_cpu_info; struct { uint64_t processor_features[2]; } other_cpu_info; } MDCPUInformation; /* CPU_INFORMATION */ +/* For (MDCPUInformation).arm_cpu_info.elf_hwcaps. + * This matches the Linux kernel definitions from */ +typedef enum { + MD_CPU_ARM_ELF_HWCAP_SWP = (1 << 0), + MD_CPU_ARM_ELF_HWCAP_HALF = (1 << 1), + MD_CPU_ARM_ELF_HWCAP_THUMB = (1 << 2), + MD_CPU_ARM_ELF_HWCAP_26BIT = (1 << 3), + MD_CPU_ARM_ELF_HWCAP_FAST_MULT = (1 << 4), + MD_CPU_ARM_ELF_HWCAP_FPA = (1 << 5), + MD_CPU_ARM_ELF_HWCAP_VFP = (1 << 6), + MD_CPU_ARM_ELF_HWCAP_EDSP = (1 << 7), + MD_CPU_ARM_ELF_HWCAP_JAVA = (1 << 8), + MD_CPU_ARM_ELF_HWCAP_IWMMXT = (1 << 9), + MD_CPU_ARM_ELF_HWCAP_CRUNCH = (1 << 10), + MD_CPU_ARM_ELF_HWCAP_THUMBEE = (1 << 11), + MD_CPU_ARM_ELF_HWCAP_NEON = (1 << 12), + MD_CPU_ARM_ELF_HWCAP_VFPv3 = (1 << 13), + MD_CPU_ARM_ELF_HWCAP_VFPv3D16 = (1 << 14), + MD_CPU_ARM_ELF_HWCAP_TLS = (1 << 15), + MD_CPU_ARM_ELF_HWCAP_VFPv4 = (1 << 16), + MD_CPU_ARM_ELF_HWCAP_IDIVA = (1 << 17), + MD_CPU_ARM_ELF_HWCAP_IDIVT = (1 << 18), +} MDCPUInformationARMElfHwCaps; typedef struct { /* The next 3 fields and numberOfProcessors are from the SYSTEM_INFO * structure as returned by GetSystemInfo */ uint16_t processor_architecture; uint16_t processor_level; /* x86: 5 = 586, 6 = 686, ... */ + /* ARM: 6 = ARMv6, 7 = ARMv7 ... */ uint16_t processor_revision; /* x86: 0xMMSS, where MM=model, * SS=stepping */ + /* ARM: 0 */ uint8_t number_of_processors; uint8_t product_type; /* Windows: VER_NT_* from WinNT.h */ @@ -605,6 +636,8 @@ typedef enum { MD_CPU_ARCHITECTURE_X86_WIN64 = 10, /* PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 (WoW64) */ MD_CPU_ARCHITECTURE_SPARC = 0x8001, /* Breakpad-defined value for SPARC */ + MD_CPU_ARCHITECTURE_PPC64 = 0x8002, /* Breakpad-defined value for PPC64 */ + MD_CPU_ARCHITECTURE_ARM64 = 0x8003, /* Breakpad-defined value for ARM64 */ MD_CPU_ARCHITECTURE_UNKNOWN = 0xffff /* PROCESSOR_ARCHITECTURE_UNKNOWN */ } MDCPUArchitecture; @@ -622,10 +655,60 @@ typedef enum { MD_OS_IOS = 0x8102, /* iOS */ MD_OS_LINUX = 0x8201, /* Linux */ MD_OS_SOLARIS = 0x8202, /* Solaris */ - MD_OS_ANDROID = 0x8203 /* Android */ + MD_OS_ANDROID = 0x8203, /* Android */ + MD_OS_PS3 = 0x8204, /* PS3 */ + MD_OS_NACL = 0x8205 /* Native Client (NaCl) */ } MDOSPlatform; +typedef struct { + uint16_t year; + uint16_t month; + uint16_t day_of_week; + uint16_t day; + uint16_t hour; + uint16_t minute; + uint16_t second; + uint16_t milliseconds; +} MDSystemTime; /* SYSTEMTIME */ +typedef struct { + /* Required field. The bias is the difference, in minutes, between + * Coordinated Universal Time (UTC) and local time. + * Formula: UTC = local time + bias */ + int32_t bias; + /* A description for standard time. For example, "EST" could indicate Eastern + * Standard Time. In practice this contains the full time zone names. This + * string can be empty. */ + uint16_t standard_name[32]; /* UTF-16-encoded, 0-terminated */ + /* A MDSystemTime structure that contains a date and local time when the + * transition from daylight saving time to standard time occurs on this + * operating system. If the time zone does not support daylight saving time, + * the month member in the MDSystemTime structure is zero. */ + MDSystemTime standard_date; + /* The bias value to be used during local time translations that occur during + * standard time. */ + int32_t standard_bias; + /* A description for daylight saving time. For example, "PDT" could indicate + * Pacific Daylight Time. In practice this contains the full time zone names. + * This string can be empty. */ + uint16_t daylight_name[32]; /* UTF-16-encoded, 0-terminated */ + /* A MDSystemTime structure that contains a date and local time when the + * transition from standard time to daylight saving time occurs on this + * operating system. If the time zone does not support daylight saving time, + * the month member in the MDSystemTime structure is zero.*/ + MDSystemTime daylight_date; + /* The bias value to be used during local time translations that occur during + * daylight saving time. */ + int32_t daylight_bias; +} MDTimeZoneInformation; /* TIME_ZONE_INFORMATION */ + +/* MAX_PATH from windef.h */ +#define MD_MAX_PATH 260 + +/* The miscellaneous information stream contains a variety + * of small pieces of information. A member is valid if + * it's within the available size and its corresponding + * bit is set. */ typedef struct { uint32_t size_of_info; /* Length of entire MDRawMiscInfo structure. */ uint32_t flags1; @@ -642,7 +725,7 @@ typedef struct { /* The following fields are not present in MINIDUMP_MISC_INFO but are * in MINIDUMP_MISC_INFO_2. When this struct is populated, these values - * may not be set. Use flags1 or sizeOfInfo to determine whether these + * may not be set. Use flags1 and size_of_info to determine whether these * values are present. These are only valid when flags1 contains * MD_MISCINFO_FLAGS1_PROCESSOR_POWER_INFO. */ uint32_t processor_max_mhz; @@ -650,20 +733,69 @@ typedef struct { uint32_t processor_mhz_limit; uint32_t processor_max_idle_state; uint32_t processor_current_idle_state; -} MDRawMiscInfo; /* MINIDUMP_MISC_INFO, MINIDUMP_MISC_INFO2 */ -#define MD_MISCINFO_SIZE 24 -#define MD_MISCINFO2_SIZE 44 + /* The following fields are not present in MINIDUMP_MISC_INFO_2 but are + * in MINIDUMP_MISC_INFO_3. When this struct is populated, these values + * may not be set. Use flags1 and size_of_info to determine whether these + * values are present. */ + + /* The following field is only valid if flags1 contains + * MD_MISCINFO_FLAGS1_PROCESS_INTEGRITY. */ + uint32_t process_integrity_level; + + /* The following field is only valid if flags1 contains + * MD_MISCINFO_FLAGS1_PROCESS_EXECUTE_FLAGS. */ + uint32_t process_execute_flags; + + /* The following field is only valid if flags1 contains + * MD_MISCINFO_FLAGS1_PROTECTED_PROCESS. */ + uint32_t protected_process; + + /* The following 2 fields are only valid if flags1 contains + * MD_MISCINFO_FLAGS1_TIMEZONE. */ + uint32_t time_zone_id; + MDTimeZoneInformation time_zone; + + /* The following fields are not present in MINIDUMP_MISC_INFO_3 but are + * in MINIDUMP_MISC_INFO_4. When this struct is populated, these values + * may not be set. Use flags1 and size_of_info to determine whether these + * values are present. */ + + /* The following 2 fields are only valid if flags1 contains + * MD_MISCINFO_FLAGS1_BUILDSTRING. */ + uint16_t build_string[MD_MAX_PATH]; /* UTF-16-encoded, 0-terminated */ + uint16_t dbg_bld_str[40]; /* UTF-16-encoded, 0-terminated */ +} MDRawMiscInfo; /* MINIDUMP_MISC_INFO, MINIDUMP_MISC_INFO_2, + * MINIDUMP_MISC_INFO_3, MINIDUMP_MISC_INFO_4, + * MINIDUMP_MISC_INFO_N */ + +static const size_t MD_MISCINFO_SIZE = + offsetof(MDRawMiscInfo, processor_max_mhz); +static const size_t MD_MISCINFO2_SIZE = + offsetof(MDRawMiscInfo, process_integrity_level); +static const size_t MD_MISCINFO3_SIZE = + offsetof(MDRawMiscInfo, build_string[0]); +static const size_t MD_MISCINFO4_SIZE = sizeof(MDRawMiscInfo); /* For (MDRawMiscInfo).flags1. These values indicate which fields in the * MDRawMiscInfoStructure are valid. */ typedef enum { - MD_MISCINFO_FLAGS1_PROCESS_ID = 0x00000001, + MD_MISCINFO_FLAGS1_PROCESS_ID = 0x00000001, /* MINIDUMP_MISC1_PROCESS_ID */ - MD_MISCINFO_FLAGS1_PROCESS_TIMES = 0x00000002, + MD_MISCINFO_FLAGS1_PROCESS_TIMES = 0x00000002, /* MINIDUMP_MISC1_PROCESS_TIMES */ - MD_MISCINFO_FLAGS1_PROCESSOR_POWER_INFO = 0x00000004 + MD_MISCINFO_FLAGS1_PROCESSOR_POWER_INFO = 0x00000004, /* MINIDUMP_MISC1_PROCESSOR_POWER_INFO */ + MD_MISCINFO_FLAGS1_PROCESS_INTEGRITY = 0x00000010, + /* MINIDUMP_MISC3_PROCESS_INTEGRITY */ + MD_MISCINFO_FLAGS1_PROCESS_EXECUTE_FLAGS = 0x00000020, + /* MINIDUMP_MISC3_PROCESS_EXECUTE_FLAGS */ + MD_MISCINFO_FLAGS1_TIMEZONE = 0x00000040, + /* MINIDUMP_MISC3_TIMEZONE */ + MD_MISCINFO_FLAGS1_PROTECTED_PROCESS = 0x00000080, + /* MINIDUMP_MISC3_PROTECTED_PROCESS */ + MD_MISCINFO_FLAGS1_BUILDSTRING = 0x00000100, + /* MINIDUMP_MISC4_BUILDSTRING */ } MDMiscInfoFlags1; /* @@ -798,21 +930,39 @@ typedef enum { } MDAssertionInfoData; /* These structs are used to store the DSO debug data in Linux minidumps, - * which is necessary for converting minidumps to usable coredumps. */ + * which is necessary for converting minidumps to usable coredumps. + * Because of a historical accident, several fields are variably encoded + * according to client word size, so tools potentially need to support both. */ + typedef struct { - void* addr; + uint32_t addr; MDRVA name; - void* ld; -} MDRawLinkMap; + uint32_t ld; +} MDRawLinkMap32; typedef struct { uint32_t version; - MDRVA map; + MDRVA map; /* array of MDRawLinkMap32 */ uint32_t dso_count; - void* brk; - void* ldbase; - void* dynamic; -} MDRawDebug; + uint32_t brk; + uint32_t ldbase; + uint32_t dynamic; +} MDRawDebug32; + +typedef struct { + uint64_t addr; + MDRVA name; + uint64_t ld; +} MDRawLinkMap64; + +typedef struct { + uint32_t version; + MDRVA map; /* array of MDRawLinkMap64 */ + uint32_t dso_count; + uint64_t brk; + uint64_t ldbase; + uint64_t dynamic; +} MDRawDebug64; #if defined(_MSC_VER) #pragma warning(pop) diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/basic_source_line_resolver.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/basic_source_line_resolver.h index 8bda57842f49..6bb6d8639a30 100644 --- a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/basic_source_line_resolver.h +++ b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/basic_source_line_resolver.h @@ -59,6 +59,7 @@ class BasicSourceLineResolver : public SourceLineResolverBase { using SourceLineResolverBase::ShouldDeleteMemoryBufferAfterLoadModule; using SourceLineResolverBase::UnloadModule; using SourceLineResolverBase::HasModule; + using SourceLineResolverBase::IsModuleCorrupt; using SourceLineResolverBase::FillSourceLineInfo; using SourceLineResolverBase::FindWindowsFrameInfo; using SourceLineResolverBase::FindCFIFrameInfo; @@ -80,6 +81,64 @@ class BasicSourceLineResolver : public SourceLineResolverBase { void operator=(const BasicSourceLineResolver&); }; +// Helper class, containing useful methods for parsing of Breakpad symbol files. +class SymbolParseHelper { + public: + // Parses a |file_line| declaration. Returns true on success. + // Format: FILE . + // Notice, that this method modifies the input |file_line| which is why it + // can't be const. On success, , and are stored in |*index|, + // and |*filename|. No allocation is done, |*filename| simply points inside + // |file_line|. + static bool ParseFile(char *file_line, // in + long *index, // out + char **filename); // out + + // Parses a |function_line| declaration. Returns true on success. + // Format: FUNC
. + // Notice, that this method modifies the input |function_line| which is why it + // can't be const. On success,
, , , and + // are stored in |*address|, |*size|, |*stack_param_size|, and |*name|. + // No allocation is done, |*name| simply points inside |function_line|. + static bool ParseFunction(char *function_line, // in + uint64_t *address, // out + uint64_t *size, // out + long *stack_param_size, // out + char **name); // out + + // Parses a |line| declaration. Returns true on success. + // Format:
+ // Notice, that this method modifies the input |function_line| which is why + // it can't be const. On success,
, , , and + // are stored in |*address|, |*size|, |*line_number|, and + // |*source_file|. + static bool ParseLine(char *line_line, // in + uint64_t *address, // out + uint64_t *size, // out + long *line_number, // out + long *source_file); // out + + // Parses a |public_line| declaration. Returns true on success. + // Format: PUBLIC
+ // Notice, that this method modifies the input |function_line| which is why + // it can't be const. On success,
, , + // are stored in |*address|, |*stack_param_size|, and |*name|. + // No allocation is done, |*name| simply points inside |public_line|. + static bool ParsePublicSymbol(char *public_line, // in + uint64_t *address, // out + long *stack_param_size, // out + char **name); // out + + private: + // Used for success checks after strtoull and strtol. + static bool IsValidAfterNumber(char *after_number); + + // Only allow static methods. + SymbolParseHelper(); + SymbolParseHelper(const SymbolParseHelper&); + void operator=(const SymbolParseHelper&); +}; + } // namespace google_breakpad #endif // GOOGLE_BREAKPAD_PROCESSOR_BASIC_SOURCE_LINE_RESOLVER_H__ diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/dump_context.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/dump_context.h new file mode 100644 index 000000000000..df80bf7ef75f --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/dump_context.h @@ -0,0 +1,116 @@ +// Copyright (c) 2014 Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// dump_context.h: A (mini/micro) dump CPU-specific context. + +#ifndef GOOGLE_BREAKPAD_PROCESSOR_DUMP_CONTEXT_H__ +#define GOOGLE_BREAKPAD_PROCESSOR_DUMP_CONTEXT_H__ + +#include "google_breakpad/common/minidump_format.h" +#include "google_breakpad/processor/dump_object.h" + +namespace google_breakpad { + +// DumpContext carries a CPU-specific MDRawContext structure, which contains CPU +// context such as register states. +class DumpContext : public DumpObject { + public: + virtual ~DumpContext(); + + // Returns an MD_CONTEXT_* value such as MD_CONTEXT_X86 or MD_CONTEXT_PPC + // identifying the CPU type that the context was collected from. The + // returned value will identify the CPU only, and will have any other + // MD_CONTEXT_* bits masked out. Returns 0 on failure. + uint32_t GetContextCPU() const; + + // Return the raw value of |context_flags_| + uint32_t GetContextFlags() const; + + // Returns raw CPU-specific context data for the named CPU type. If the + // context data does not match the CPU type or does not exist, returns NULL. + const MDRawContextAMD64* GetContextAMD64() const; + const MDRawContextARM* GetContextARM() const; + const MDRawContextARM64* GetContextARM64() const; + const MDRawContextMIPS* GetContextMIPS() const; + const MDRawContextPPC* GetContextPPC() const; + const MDRawContextPPC64* GetContextPPC64() const; + const MDRawContextSPARC* GetContextSPARC() const; + const MDRawContextX86* GetContextX86() const; + + // A convenience method to get the instruction pointer out of the + // MDRawContext, since it varies per-CPU architecture. + bool GetInstructionPointer(uint64_t* ip) const; + + // Similar to the GetInstructionPointer method, this method gets the stack + // pointer for all CPU architectures. + bool GetStackPointer(uint64_t* sp) const; + + // Print a human-readable representation of the object to stdout. + void Print(); + + protected: + DumpContext(); + + // Sets row CPU-specific context data for the names CPU type. + void SetContextFlags(uint32_t context_flags); + void SetContextX86(MDRawContextX86* x86); + void SetContextPPC(MDRawContextPPC* ppc); + void SetContextPPC64(MDRawContextPPC64* ppc64); + void SetContextAMD64(MDRawContextAMD64* amd64); + void SetContextSPARC(MDRawContextSPARC* ctx_sparc); + void SetContextARM(MDRawContextARM* arm); + void SetContextARM64(MDRawContextARM64* arm64); + void SetContextMIPS(MDRawContextMIPS* ctx_mips); + + // Free the CPU-specific context structure. + void FreeContext(); + + private: + // The CPU-specific context structure. + union { + MDRawContextBase* base; + MDRawContextX86* x86; + MDRawContextPPC* ppc; + MDRawContextPPC64* ppc64; + MDRawContextAMD64* amd64; + // on Solaris SPARC, sparc is defined as a numeric constant, + // so variables can NOT be named as sparc + MDRawContextSPARC* ctx_sparc; + MDRawContextARM* arm; + MDRawContextARM64* arm64; + MDRawContextMIPS* ctx_mips; + } context_; + + // Store this separately because of the weirdo AMD64 context + uint32_t context_flags_; +}; + +} // namespace google_breakpad + +#endif // GOOGLE_BREAKPAD_PROCESSOR_DUMP_CONTEXT_H__ diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/dump_object.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/dump_object.h new file mode 100644 index 000000000000..112f687f4c7c --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/dump_object.h @@ -0,0 +1,53 @@ +// Copyright (c) 2014 Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// dump_object.h: A base class for all mini/micro dump object. + +#ifndef GOOGLE_BREAKPAD_PROCESSOR_DUMP_OBJECT_H__ +#define GOOGLE_BREAKPAD_PROCESSOR_DUMP_OBJECT_H__ + +namespace google_breakpad { + +// DumpObject is the base of various mini/micro dump's objects. +class DumpObject { + public: + DumpObject(); + + bool valid() const { return valid_; } + + protected: + // DumpObjects are not valid when created. When a subclass populates its own + // fields, it can set valid_ to true. Accessors and mutators may wish to + // consider or alter the valid_ state as they interact with objects. + bool valid_; +}; + +} // namespace google_breakpad + +#endif // GOOGLE_BREAKPAD_PROCESSOR_DUMP_OBJECT_H__ diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/exploitability.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/exploitability.h index 67255a3ac34d..014413c9448c 100644 --- a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/exploitability.h +++ b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/exploitability.h @@ -53,6 +53,15 @@ class Exploitability { static Exploitability *ExploitabilityForPlatform(Minidump *dump, ProcessState *process_state); + // The boolean parameter signals whether the exploitability engine is + // enabled to call out to objdump for disassembly. This is disabled by + // default. It is used to check the identity of the instruction that + // caused the program to crash. This should not be enabled if there are + // portability concerns. + static Exploitability *ExploitabilityForPlatform(Minidump *dump, + ProcessState *process_state, + bool enable_objdump); + ExploitabilityRating CheckExploitability(); bool AddressIsAscii(uint64_t); diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/fast_source_line_resolver.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/fast_source_line_resolver.h index 60f6dfcef16f..fdf9107766be 100644 --- a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/fast_source_line_resolver.h +++ b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/fast_source_line_resolver.h @@ -63,6 +63,7 @@ class FastSourceLineResolver : public SourceLineResolverBase { using SourceLineResolverBase::FindCFIFrameInfo; using SourceLineResolverBase::FindWindowsFrameInfo; using SourceLineResolverBase::HasModule; + using SourceLineResolverBase::IsModuleCorrupt; using SourceLineResolverBase::LoadModule; using SourceLineResolverBase::LoadModuleUsingMapBuffer; using SourceLineResolverBase::LoadModuleUsingMemoryBuffer; diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/memory_region.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/memory_region.h index bd9755f507ca..30f88df4902e 100644 --- a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/memory_region.h +++ b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/memory_region.h @@ -67,6 +67,9 @@ class MemoryRegion { virtual bool GetMemoryAtAddress(uint64_t address, uint16_t* value) const = 0; virtual bool GetMemoryAtAddress(uint64_t address, uint32_t* value) const = 0; virtual bool GetMemoryAtAddress(uint64_t address, uint64_t* value) const = 0; + + // Print a human-readable representation of the object to stdout. + virtual void Print() const = 0; }; diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/microdump.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/microdump.h new file mode 100644 index 000000000000..abdaecb19ab4 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/microdump.h @@ -0,0 +1,126 @@ +// Copyright (c) 2014 Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// microdump.h: A microdump reader. Microdump is a minified variant of a +// minidump (see minidump.h for documentation) which contains the minimum +// amount of information required to get a stack trace for the crashing thread. +// The information contained in a microdump is: +// - the crashing thread stack +// - system information (os type / version) +// - cpu context (state of the registers) +// - list of mmaps + +#ifndef GOOGLE_BREAKPAD_PROCESSOR_MICRODUMP_H__ +#define GOOGLE_BREAKPAD_PROCESSOR_MICRODUMP_H__ + +#include +#include + +#include "common/scoped_ptr.h" +#include "common/using_std_string.h" +#include "google_breakpad/processor/dump_context.h" +#include "google_breakpad/processor/memory_region.h" +#include "google_breakpad/processor/system_info.h" +#include "processor/basic_code_modules.h" + +namespace google_breakpad { + +// MicrodumpModuleList contains all of the loaded code modules for a process +// in the form of MicrodumpModules. It maintains a vector of these modules +// and provides access to a code module corresponding to a specific address. +class MicrodumpModules : public BasicCodeModules { + public: + // Takes over ownership of |module|. + void Add(const CodeModule* module); +}; + +// MicrodumpContext carries a CPU-specific context. +// See dump_context.h for documentation. +class MicrodumpContext : public DumpContext { + public: + virtual void SetContextARM(MDRawContextARM* arm); + virtual void SetContextARM64(MDRawContextARM64* arm64); +}; + +// This class provides access to microdump memory regions. +// See memory_region.h for documentation. +class MicrodumpMemoryRegion : public MemoryRegion { + public: + MicrodumpMemoryRegion(); + virtual ~MicrodumpMemoryRegion() {} + + // Set this region's address and contents. If we have placed an + // instance of this class in a test fixture class, individual tests + // can use this to provide the region's contents. + void Init(uint64_t base_address, const std::vector& contents); + + virtual uint64_t GetBase() const; + virtual uint32_t GetSize() const; + + virtual bool GetMemoryAtAddress(uint64_t address, uint8_t* value) const; + virtual bool GetMemoryAtAddress(uint64_t address, uint16_t* value) const; + virtual bool GetMemoryAtAddress(uint64_t address, uint32_t* value) const; + virtual bool GetMemoryAtAddress(uint64_t address, uint64_t* value) const; + + // Print a human-readable representation of the object to stdout. + virtual void Print() const; + + private: + // Fetch a little-endian value from ADDRESS in contents_ whose size + // is BYTES, and store it in *VALUE. Returns true on success. + template + bool GetMemoryLittleEndian(uint64_t address, ValueType* value) const; + + uint64_t base_address_; + std::vector contents_; +}; + +// Microdump is the user's interface to a microdump file. It provides access to +// the microdump's context, memory regions and modules. +class Microdump { + public: + explicit Microdump(const string& contents); + virtual ~Microdump() {} + + DumpContext* GetContext() { return context_.get(); } + MicrodumpMemoryRegion* GetMemory() { return stack_region_.get(); } + MicrodumpModules* GetModules() { return modules_.get(); } + SystemInfo* GetSystemInfo() { return system_info_.get(); } + + private: + scoped_ptr context_; + scoped_ptr stack_region_; + scoped_ptr modules_; + scoped_ptr system_info_; +}; + +} // namespace google_breakpad + +#endif // GOOGLE_BREAKPAD_PROCESSOR_MICRODUMP_H__ + diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/microdump_processor.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/microdump_processor.h new file mode 100644 index 000000000000..1322a01c76ea --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/microdump_processor.h @@ -0,0 +1,63 @@ +// Copyright (c) 2014, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// The processor for microdump (a reduced dump containing only the state of the +// crashing thread). See crbug.com/410294 for more info and design docs. + +#ifndef GOOGLE_BREAKPAD_PROCESSOR_MICRODUMP_PROCESSOR_H__ +#define GOOGLE_BREAKPAD_PROCESSOR_MICRODUMP_PROCESSOR_H__ + +#include + +#include "common/using_std_string.h" +#include "google_breakpad/processor/process_result.h" + +namespace google_breakpad { + +class ProcessState; +class StackFrameSymbolizer; + +class MicrodumpProcessor { + public: + // Initializes the MicrodumpProcessor with a stack frame symbolizer. + // Does not take ownership of frame_symbolizer, which must NOT be NULL. + explicit MicrodumpProcessor(StackFrameSymbolizer* frame_symbolizer); + + virtual ~MicrodumpProcessor(); + + // Processes the microdump contents and fills process_state with the result. + google_breakpad::ProcessResult Process(const string& microdump_contents, + ProcessState* process_state); + private: + StackFrameSymbolizer* frame_symbolizer_; +}; + +} // namespace google_breakpad + +#endif // GOOGLE_BREAKPAD_PROCESSOR_MICRODUMP_PROCESSOR_H__ diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/minidump.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/minidump.h index 18097714da25..2b5025e4ff55 100644 --- a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/minidump.h +++ b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/minidump.h @@ -79,6 +79,8 @@ #ifndef GOOGLE_BREAKPAD_PROCESSOR_MINIDUMP_H__ #define GOOGLE_BREAKPAD_PROCESSOR_MINIDUMP_H__ +#include + #ifndef _WIN32 #include #endif @@ -88,11 +90,14 @@ #include #include +#include "common/basictypes.h" #include "common/using_std_string.h" -#include "google_breakpad/common/minidump_format.h" #include "google_breakpad/processor/code_module.h" #include "google_breakpad/processor/code_modules.h" +#include "google_breakpad/processor/dump_context.h" +#include "google_breakpad/processor/dump_object.h" #include "google_breakpad/processor/memory_region.h" +#include "google_breakpad/processor/proc_maps_linux.h" namespace google_breakpad { @@ -108,12 +113,10 @@ template class RangeMap; // MinidumpObject is the base of all Minidump* objects except for Minidump // itself. -class MinidumpObject { +class MinidumpObject : public DumpObject { public: virtual ~MinidumpObject() {} - bool valid() const { return valid_; } - protected: explicit MinidumpObject(Minidump* minidump); @@ -124,21 +127,14 @@ class MinidumpObject { // for access to data about the minidump file itself, such as whether // it should be byte-swapped. Minidump* minidump_; - - // MinidumpObjects are not valid when created. When a subclass populates - // its own fields, it can set valid_ to true. Accessors and mutators may - // wish to consider or alter the valid_ state as they interact with - // objects. - bool valid_; }; // This class exists primarily to provide a virtual destructor in a base // class common to all objects that might be stored in -// Minidump::mStreamObjects. Some object types (MinidumpContext) will -// never be stored in Minidump::mStreamObjects, but are represented as -// streams and adhere to the same interface, and may be derived from -// this class. +// Minidump::mStreamObjects. Some object types will never be stored in +// Minidump::mStreamObjects, but are represented as streams and adhere to the +// same interface, and may be derived from this class. class MinidumpStream : public MinidumpObject { public: virtual ~MinidumpStream() {} @@ -168,65 +164,33 @@ class MinidumpStream : public MinidumpObject { // context for the exception handler (which performs minidump generation), // and not the context that caused the exception (which is probably what the // user wants). -class MinidumpContext : public MinidumpStream { +class MinidumpContext : public DumpContext { public: virtual ~MinidumpContext(); - // Returns an MD_CONTEXT_* value such as MD_CONTEXT_X86 or MD_CONTEXT_PPC - // identifying the CPU type that the context was collected from. The - // returned value will identify the CPU only, and will have any other - // MD_CONTEXT_* bits masked out. Returns 0 on failure. - uint32_t GetContextCPU() const; - - // A convenience method to get the instruction pointer out of the - // MDRawContext, since it varies per-CPU architecture. - bool GetInstructionPointer(uint64_t* ip) const; - - // Returns raw CPU-specific context data for the named CPU type. If the - // context data does not match the CPU type or does not exist, returns - // NULL. - const MDRawContextAMD64* GetContextAMD64() const; - const MDRawContextARM* GetContextARM() const; - const MDRawContextPPC* GetContextPPC() const; - const MDRawContextSPARC* GetContextSPARC() const; - const MDRawContextX86* GetContextX86() const; - - // Print a human-readable representation of the object to stdout. - void Print(); - protected: explicit MinidumpContext(Minidump* minidump); - // The CPU-specific context structure. - union { - MDRawContextBase* base; - MDRawContextX86* x86; - MDRawContextPPC* ppc; - MDRawContextAMD64* amd64; - // on Solaris SPARC, sparc is defined as a numeric constant, - // so variables can NOT be named as sparc - MDRawContextSPARC* ctx_sparc; - MDRawContextARM* arm; - } context_; - - // Store this separately because of the weirdo AMD64 context - uint32_t context_flags_; - private: friend class MinidumpThread; friend class MinidumpException; bool Read(uint32_t expected_size); - // Free the CPU-specific context structure. - void FreeContext(); - // If the minidump contains a SYSTEM_INFO_STREAM, makes sure that the // system info stream gives an appropriate CPU type matching the context // CPU type in context_cpu_type. Returns false if the CPU type does not // match. Returns true if the CPU type matches or if the minidump does // not contain a system info stream. bool CheckAgainstSystemInfo(uint32_t context_cpu_type); + + // Refers to the Minidump object that is the ultimate parent of this + // Some MinidumpObjects are owned by other MinidumpObjects, but at the + // root of the ownership tree is always a Minidump. The Minidump object + // is kept here for access to its seeking and reading facilities, and + // for access to data about the minidump file itself, such as whether + // it should be byte-swapped. + Minidump* minidump_; }; @@ -267,7 +231,7 @@ class MinidumpMemoryRegion : public MinidumpObject, bool GetMemoryAtAddress(uint64_t address, uint64_t* value) const; // Print a human-readable representation of the object to stdout. - void Print(); + void Print() const; protected: explicit MinidumpMemoryRegion(Minidump* minidump); @@ -324,6 +288,11 @@ class MinidumpThread : public MinidumpObject { // Print a human-readable representation of the object to stdout. void Print(); + // Returns the start address of the thread stack memory region. Returns 0 if + // MinidumpThread is invalid. Note that this method can be called even when + // the thread memory cannot be read and GetMemory returns NULL. + virtual uint64_t GetStartOfStackMemoryRange() const; + protected: explicit MinidumpThread(Minidump* minidump); @@ -475,7 +444,7 @@ class MinidumpModule : public MinidumpObject, // True after a successful Read. This is different from valid_, which is // not set true until ReadAuxiliaryData also completes successfully. // module_valid_ is only used by ReadAuxiliaryData and the functions it - // calls to determine whether the object is ready for auxiliary data to + // calls to determine whether the object is ready for auxiliary data to // be read. bool module_valid_; @@ -584,13 +553,14 @@ class MinidumpMemoryList : public MinidumpStream { // Random access to memory regions. Returns the region encompassing // the address identified by address. - MinidumpMemoryRegion* GetMemoryRegionForAddress(uint64_t address); + virtual MinidumpMemoryRegion* GetMemoryRegionForAddress(uint64_t address); // Print a human-readable representation of the object to stdout. void Print(); private: friend class Minidump; + friend class MockMinidumpMemoryList; typedef vector MemoryDescriptors; typedef vector MemoryRegions; @@ -622,10 +592,10 @@ class MinidumpMemoryList : public MinidumpStream { // MinidumpException wraps MDRawExceptionStream, which contains information // about the exception that caused the minidump to be generated, if the -// minidump was generated in an exception handler called as a result of -// an exception. It also provides access to a MinidumpContext object, -// which contains the CPU context for the exception thread at the time -// the exception occurred. +// minidump was generated in an exception handler called as a result of an +// exception. It also provides access to a MinidumpContext object, which +// contains the CPU context for the exception thread at the time the exception +// occurred. class MinidumpException : public MinidumpStream { public: virtual ~MinidumpException(); @@ -766,6 +736,7 @@ class MinidumpMiscInfo : public MinidumpStream { private: friend class Minidump; + friend class TestMinidumpMiscInfo; static const uint32_t kStreamType = MD_MISC_INFO_STREAM; @@ -774,6 +745,13 @@ class MinidumpMiscInfo : public MinidumpStream { bool Read(uint32_t expected_size_); MDRawMiscInfo misc_info_; + + // Populated by Read. Contains the converted strings from the corresponding + // UTF-16 fields in misc_info_ + string standard_name_; + string daylight_name_; + string build_string_; + string dbg_bld_str_; }; @@ -819,7 +797,7 @@ class MinidumpMemoryInfo : public MinidumpObject { uint64_t GetBase() const { return valid_ ? memory_info_.base_address : 0; } // The size, in bytes, of the memory region. - uint32_t GetSize() const { return valid_ ? memory_info_.region_size : 0; } + uint64_t GetSize() const { return valid_ ? memory_info_.region_size : 0; } // Return true if the memory protection allows execution. bool IsExecutable() const; @@ -834,7 +812,7 @@ class MinidumpMemoryInfo : public MinidumpObject { // These objects are managed by MinidumpMemoryInfoList. friend class MinidumpMemoryInfoList; - explicit MinidumpMemoryInfo(Minidump* minidump); + explicit MinidumpMemoryInfo(Minidump* minidump_); // This works like MinidumpStream::Read, but is driven by // MinidumpMemoryInfoList. No size checking is done, because @@ -867,7 +845,7 @@ class MinidumpMemoryInfoList : public MinidumpStream { static const uint32_t kStreamType = MD_MEMORY_INFO_LIST_STREAM; - explicit MinidumpMemoryInfoList(Minidump* minidump); + explicit MinidumpMemoryInfoList(Minidump* minidump_); bool Read(uint32_t expected_size); @@ -878,6 +856,99 @@ class MinidumpMemoryInfoList : public MinidumpStream { uint32_t info_count_; }; +// MinidumpLinuxMaps wraps information about a single mapped memory region +// from /proc/self/maps. +class MinidumpLinuxMaps : public MinidumpObject { + public: + // The memory address of the base of the mapped region. + uint64_t GetBase() const { return valid_ ? region_.start : 0; } + // The size of the mapped region. + uint64_t GetSize() const { return valid_ ? region_.end - region_.start : 0; } + + // The permissions of the mapped region. + bool IsReadable() const { + return valid_ ? region_.permissions & MappedMemoryRegion::READ : false; + } + bool IsWriteable() const { + return valid_ ? region_.permissions & MappedMemoryRegion::WRITE : false; + } + bool IsExecutable() const { + return valid_ ? region_.permissions & MappedMemoryRegion::EXECUTE : false; + } + bool IsPrivate() const { + return valid_ ? region_.permissions & MappedMemoryRegion::PRIVATE : false; + } + + // The offset of the mapped region. + uint64_t GetOffset() const { return valid_ ? region_.offset : 0; } + + // The major device number. + uint8_t GetMajorDevice() const { return valid_ ? region_.major_device : 0; } + // The minor device number. + uint8_t GetMinorDevice() const { return valid_ ? region_.minor_device : 0; } + + // The inode of the mapped region. + uint64_t GetInode() const { return valid_ ? region_.inode : 0; } + + // The pathname of the mapped region. + const string GetPathname() const { return valid_ ? region_.path : ""; } + + // Print the contents of this mapping. + void Print() const; + + private: + // These objects are managed by MinidumpLinuxMapsList. + friend class MinidumpLinuxMapsList; + + // This caller owns the pointer. + explicit MinidumpLinuxMaps(Minidump *minidump); + + // The memory region struct that this class wraps. + MappedMemoryRegion region_; + + DISALLOW_COPY_AND_ASSIGN(MinidumpLinuxMaps); +}; + +// MinidumpLinuxMapsList corresponds to the Linux-exclusive MD_LINUX_MAPS +// stream, which contains the contents of /prod/self/maps, which contains +// the mapped memory regions and their access permissions. +class MinidumpLinuxMapsList : public MinidumpStream { + public: + virtual ~MinidumpLinuxMapsList(); + + // Get number of mappings. + unsigned int get_maps_count() const { return valid_ ? maps_count_ : 0; } + + // Get mapping at the given memory address. The caller owns the pointer. + const MinidumpLinuxMaps *GetLinuxMapsForAddress(uint64_t address) const; + // Get mapping at the given index. The caller owns the pointer. + const MinidumpLinuxMaps *GetLinuxMapsAtIndex(unsigned int index) const; + + // Print the contents of /proc/self/maps to stdout. + void Print() const; + + private: + friend class Minidump; + + typedef vector MinidumpLinuxMappings; + + static const uint32_t kStreamType = MD_LINUX_MAPS; + + // The caller owns the pointer. + explicit MinidumpLinuxMapsList(Minidump *minidump); + + // Read and load the contents of the process mapping data. + // The stream should have data in the form of /proc/self/maps. + // This method returns whether the stream was read successfully. + bool Read(uint32_t expected_size); + + // The list of individual mappings. + MinidumpLinuxMappings *maps_; + // The number of mappings. + uint32_t maps_count_; + + DISALLOW_COPY_AND_ASSIGN(MinidumpLinuxMapsList); +}; // Minidump is the user's interface to a minidump file. It wraps MDRawHeader // and provides access to the minidump's top-level stream directory. @@ -929,14 +1000,17 @@ class Minidump { // to avoid exposing an ugly API (GetStream needs to accept a garbage // parameter). virtual MinidumpThreadList* GetThreadList(); - MinidumpModuleList* GetModuleList(); - MinidumpMemoryList* GetMemoryList(); - MinidumpException* GetException(); - MinidumpAssertion* GetAssertion(); + virtual MinidumpModuleList* GetModuleList(); + virtual MinidumpMemoryList* GetMemoryList(); + virtual MinidumpException* GetException(); + virtual MinidumpAssertion* GetAssertion(); virtual MinidumpSystemInfo* GetSystemInfo(); - MinidumpMiscInfo* GetMiscInfo(); - MinidumpBreakpadInfo* GetBreakpadInfo(); - MinidumpMemoryInfoList* GetMemoryInfoList(); + virtual MinidumpMiscInfo* GetMiscInfo(); + virtual MinidumpBreakpadInfo* GetBreakpadInfo(); + virtual MinidumpMemoryInfoList* GetMemoryInfoList(); + + // The next method also calls GetStream, but is exclusive for Linux dumps. + virtual MinidumpLinuxMapsList *GetLinuxMapsList(); // The next set of methods are provided for users who wish to access // data in minidump files directly, while leveraging the rest of diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/minidump_processor.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/minidump_processor.h index 33cd0206fd05..387115ef71fd 100644 --- a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/minidump_processor.h +++ b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/minidump_processor.h @@ -35,6 +35,7 @@ #include "common/using_std_string.h" #include "google_breakpad/common/breakpad_types.h" +#include "google_breakpad/processor/process_result.h" namespace google_breakpad { @@ -44,41 +45,6 @@ class StackFrameSymbolizer; class SourceLineResolverInterface; class SymbolSupplier; struct SystemInfo; -// Return type for Process() -enum ProcessResult { - PROCESS_OK, // The minidump was - // processed - // successfully. - - PROCESS_ERROR_MINIDUMP_NOT_FOUND, // The minidump file - // was not found. - - PROCESS_ERROR_NO_MINIDUMP_HEADER, // The minidump file - // had no header - - PROCESS_ERROR_NO_THREAD_LIST, // The minidump file - // had no thread list. - - PROCESS_ERROR_GETTING_THREAD, // There was an error - // getting one - // thread's data from - // the minidump. - - PROCESS_ERROR_GETTING_THREAD_ID, // There was an error - // getting a thread id - // from the thread's - // data. - - PROCESS_ERROR_DUPLICATE_REQUESTING_THREADS, // There was more than - // one requesting - // thread. - - PROCESS_SYMBOL_SUPPLIER_INTERRUPTED // The minidump - // processing was - // interrupted by the - // SymbolSupplier(not - // fatal) -}; class MinidumpProcessor { public: @@ -123,6 +89,12 @@ class MinidumpProcessor { // the minidump. static bool GetOSInfo(Minidump* dump, SystemInfo* info); + // Populates the |process_create_time| parameter with the create time of the + // crashed process. Returns false if this information is not available in + // the minidump |dump|. + static bool GetProcessCreateTime(Minidump* dump, + uint32_t* process_create_time); + // Returns a textual representation of the reason that a crash occurred, // if the minidump in dump was produced as a result of a crash. Returns // an empty string if this information cannot be determined. If address @@ -153,6 +125,8 @@ class MinidumpProcessor { // does not exist or cannot be determined. static string GetAssertion(Minidump* dump); + void set_enable_objdump(bool enabled) { enable_objdump_ = enabled; } + private: StackFrameSymbolizer* frame_symbolizer_; // Indicate whether resolver_helper_ is owned by this instance. @@ -162,6 +136,10 @@ class MinidumpProcessor { // guess how likely it is that the crash represents an exploitable // memory corruption issue. bool enable_exploitability_; + + // This flag permits the exploitability scanner to shell out to objdump + // for purposes of disassembly. + bool enable_objdump_; }; } // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/proc_maps_linux.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/proc_maps_linux.h new file mode 100644 index 000000000000..b8e6eb926ace --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/proc_maps_linux.h @@ -0,0 +1,60 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef BASE_DEBUG_PROC_MAPS_LINUX_H_ +#define BASE_DEBUG_PROC_MAPS_LINUX_H_ + +#include +#include + +#include "common/using_std_string.h" +#include "google_breakpad/common/breakpad_types.h" + +namespace google_breakpad { + +// Describes a region of mapped memory and the path of the file mapped. +struct MappedMemoryRegion { + enum Permission { + READ = 1 << 0, + WRITE = 1 << 1, + EXECUTE = 1 << 2, + PRIVATE = 1 << 3, // If set, region is private, otherwise it is shared. + }; + + // The address range [start,end) of mapped memory. + uint64_t start; + uint64_t end; + + // Byte offset into |path| of the range mapped into memory. + uint64_t offset; + + // Bitmask of read/write/execute/private/shared permissions. + uint8_t permissions; + + // Major and minor devices. + uint8_t major_device; + uint8_t minor_device; + + // Value of the inode. + uint64_t inode; + + // Name of the file mapped into memory. + // + // NOTE: path names aren't guaranteed to point at valid files. For example, + // "[heap]" and "[stack]" are used to represent the location of the process' + // heap and stack, respectively. + string path; + + // The line from /proc//maps that this struct represents. + string line; +}; + +// Parses /proc//maps input data and stores in |regions|. Returns true +// and updates |regions| if and only if all of |input| was successfully parsed. +bool ParseProcMaps(const std::string& input, + std::vector* regions); + +} // namespace google_breakpad + +#endif // BASE_DEBUG_PROC_MAPS_LINUX_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/process_result.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/process_result.h new file mode 100644 index 000000000000..15c7213e9ba4 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/process_result.h @@ -0,0 +1,66 @@ +// Copyright (c) 2014, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifndef GOOGLE_BREAKPAD_PROCESSOR_PROCESS_RESULT_H__ +#define GOOGLE_BREAKPAD_PROCESSOR_PROCESS_RESULT_H__ + +namespace google_breakpad { + +// Return type for MinidumpProcessor or MicrodumpProcessor's Process() +enum ProcessResult { + PROCESS_OK, // The dump was processed + // successfully. + + PROCESS_ERROR_MINIDUMP_NOT_FOUND, // The minidump file was not + // found. + + PROCESS_ERROR_NO_MINIDUMP_HEADER, // The minidump file had no + // header. + + PROCESS_ERROR_NO_THREAD_LIST, // The minidump file has no + // thread list. + + PROCESS_ERROR_GETTING_THREAD, // There was an error getting one + // thread's data from th dump. + + PROCESS_ERROR_GETTING_THREAD_ID, // There was an error getting a + // thread id from the thread's + // data. + + PROCESS_ERROR_DUPLICATE_REQUESTING_THREADS, // There was more than one + // requesting thread. + + PROCESS_SYMBOL_SUPPLIER_INTERRUPTED // The dump processing was + // interrupted by the + // SymbolSupplier(not fatal). +}; + +} // namespace google_breakpad + +#endif // GOOGLE_BREAKPAD_PROCESSOR_PROCESS_RESULT_H__ diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/process_state.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/process_state.h index d234ebbfd66e..728656f2bd7c 100644 --- a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/process_state.h +++ b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/process_state.h @@ -50,39 +50,41 @@ class CallStack; class CodeModules; enum ExploitabilityRating { - EXPLOITABILITY_HIGH, // The crash likely represents - // a exploitable memory corruption - // vulnerability. + EXPLOITABILITY_HIGH, // The crash likely represents + // a exploitable memory corruption + // vulnerability. - EXPLOITABLITY_MEDIUM, // The crash appears to corrupt - // memory in a way which may be - // exploitable in some situations. + EXPLOITABILITY_MEDIUM, // The crash appears to corrupt + // memory in a way which may be + // exploitable in some situations. - EXPLOITABILITY_LOW, // The crash either does not corrupt - // memory directly or control over - // the effected data is limited. The - // issue may still be exploitable - // on certain platforms or situations. + EXPLOITABLITY_MEDIUM = EXPLOITABILITY_MEDIUM, // an old misspelling - EXPLOITABILITY_INTERESTING, // The crash does not appear to be - // directly exploitable. However it - // represents a condition which should - // be furthur analyzed. + EXPLOITABILITY_LOW, // The crash either does not corrupt + // memory directly or control over + // the affected data is limited. The + // issue may still be exploitable + // on certain platforms or situations. - EXPLOITABILITY_NONE, // The crash does not appear to represent - // an exploitable condition. + EXPLOITABILITY_INTERESTING, // The crash does not appear to be + // directly exploitable. However it + // represents a condition which should + // be further analyzed. - EXPLOITABILITY_NOT_ANALYZED, // The crash was not analyzed for - // exploitability because the engine - // was disabled. + EXPLOITABILITY_NONE, // The crash does not appear to represent + // an exploitable condition. - EXPLOITABILITY_ERR_NOENGINE, // The supplied minidump's platform does - // not have a exploitability engine - // associated with it. + EXPLOITABILITY_NOT_ANALYZED, // The crash was not analyzed for + // exploitability because the engine + // was disabled. - EXPLOITABILITY_ERR_PROCESSING // An error occured within the - // exploitability engine and no rating - // was calculated. + EXPLOITABILITY_ERR_NOENGINE, // The supplied minidump's platform does + // not have a exploitability engine + // associated with it. + + EXPLOITABILITY_ERR_PROCESSING // An error occured within the + // exploitability engine and no rating + // was calculated. }; class ProcessState { @@ -95,13 +97,14 @@ class ProcessState { // Accessors. See the data declarations below. uint32_t time_date_stamp() const { return time_date_stamp_; } + uint32_t process_create_time() const { return process_create_time_; } bool crashed() const { return crashed_; } string crash_reason() const { return crash_reason_; } uint64_t crash_address() const { return crash_address_; } string assertion() const { return assertion_; } int requesting_thread() const { return requesting_thread_; } const vector* threads() const { return &threads_; } - const vector* thread_memory_regions() const { + const vector* thread_memory_regions() const { return &thread_memory_regions_; } const SystemInfo* system_info() const { return &system_info_; } @@ -109,15 +112,23 @@ class ProcessState { const vector* modules_without_symbols() const { return &modules_without_symbols_; } + const vector* modules_with_corrupt_symbols() const { + return &modules_with_corrupt_symbols_; + } ExploitabilityRating exploitability() const { return exploitability_; } private: - // MinidumpProcessor is responsible for building ProcessState objects. + // MinidumpProcessor and MicrodumpProcessor are responsible for building + // ProcessState objects. friend class MinidumpProcessor; + friend class MicrodumpProcessor; // The time-date stamp of the minidump (time_t format) uint32_t time_date_stamp_; + // The time-date stamp when the process was created (time_t format) + uint32_t process_create_time_; + // True if the process crashed, false if the dump was produced outside // of an exception handler. bool crashed_; @@ -152,7 +163,7 @@ class ProcessState { // Stacks for each thread (except possibly the exception handler // thread) at the time of the crash. vector threads_; - vector thread_memory_regions_; + vector thread_memory_regions_; // OS and CPU information. SystemInfo system_info_; @@ -164,9 +175,12 @@ class ProcessState { // The modules that didn't have symbols when the report was processed. vector modules_without_symbols_; + // The modules that had corrupt symbols when the report was processed. + vector modules_with_corrupt_symbols_; + // The exploitability rating as determined by the exploitability // engine. When the exploitability engine is not enabled this - // defaults to EXPLOITABILITY_NONE. + // defaults to EXPLOITABILITY_NOT_ANALYZED. ExploitabilityRating exploitability_; }; diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/source_line_resolver_base.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/source_line_resolver_base.h index efa76e7e957a..c720b0c32549 100644 --- a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/source_line_resolver_base.h +++ b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/source_line_resolver_base.h @@ -42,6 +42,7 @@ #define GOOGLE_BREAKPAD_PROCESSOR_SOURCE_LINE_RESOLVER_BASE_H__ #include +#include #include #include "google_breakpad/processor/source_line_resolver_interface.h" @@ -49,6 +50,7 @@ namespace google_breakpad { using std::map; +using std::set; // Forward declaration. // ModuleFactory is a simple factory interface for creating a Module instance @@ -62,7 +64,9 @@ class SourceLineResolverBase : public SourceLineResolverInterface { // LoadMap() method. // Place dynamically allocated heap buffer in symbol_data. Caller has the // ownership of the buffer, and should call delete [] to free the buffer. - static bool ReadSymbolFile(char **symbol_data, const string &file_name); + static bool ReadSymbolFile(const string &file_name, + char **symbol_data, + size_t *symbol_data_size); protected: // Users are not allowed create SourceLineResolverBase instance directly. @@ -74,10 +78,12 @@ class SourceLineResolverBase : public SourceLineResolverInterface { virtual bool LoadModuleUsingMapBuffer(const CodeModule *module, const string &map_buffer); virtual bool LoadModuleUsingMemoryBuffer(const CodeModule *module, - char *memory_buffer); + char *memory_buffer, + size_t memory_buffer_size); virtual bool ShouldDeleteMemoryBufferAfterLoadModule(); virtual void UnloadModule(const CodeModule *module); virtual bool HasModule(const CodeModule *module); + virtual bool IsModuleCorrupt(const CodeModule *module); virtual void FillSourceLineInfo(StackFrame *frame); virtual WindowsFrameInfo *FindWindowsFrameInfo(const StackFrame *frame); virtual CFIFrameInfo *FindCFIFrameInfo(const StackFrame *frame); @@ -97,6 +103,10 @@ class SourceLineResolverBase : public SourceLineResolverInterface { typedef map ModuleMap; ModuleMap *modules_; + // The loaded modules that were detecting to be corrupt during load. + typedef set ModuleSet; + ModuleSet *corrupt_modules_; + // All of heap-allocated buffers that are owned locally by resolver. typedef std::map MemoryMap; MemoryMap *memory_buffers_; diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/source_line_resolver_interface.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/source_line_resolver_interface.h index 7b69b0d3af24..a694bf2ea113 100644 --- a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/source_line_resolver_interface.h +++ b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/source_line_resolver_interface.h @@ -64,12 +64,15 @@ class SourceLineResolverInterface { virtual bool LoadModuleUsingMapBuffer(const CodeModule *module, const string &map_buffer) = 0; - // Add an interface to load symbol using C-String data insteading string. + // Add an interface to load symbol using C-String data instead of string. // This is useful in the optimization design for avoiding unnecessary copying // of symbol data, in order to improve memory efficiency. // LoadModuleUsingMemoryBuffer() does NOT take ownership of memory_buffer. + // LoadModuleUsingMemoryBuffer() null terminates the passed in buffer, if + // the last character is not a null terminator. virtual bool LoadModuleUsingMemoryBuffer(const CodeModule *module, - char *memory_buffer) = 0; + char *memory_buffer, + size_t memory_buffer_size) = 0; // Return true if the memory buffer should be deleted immediately after // LoadModuleUsingMemoryBuffer(). Return false if the memory buffer has to be @@ -83,6 +86,9 @@ class SourceLineResolverInterface { // Returns true if the module has been loaded. virtual bool HasModule(const CodeModule *module) = 0; + // Returns true if the module has been loaded and it is corrupt. + virtual bool IsModuleCorrupt(const CodeModule *module) = 0; + // Fills in the function_base, function_name, source_file_name, // and source_line fields of the StackFrame. The instruction and // module_name fields must already be filled in. diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stack_frame.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stack_frame.h index 23e69bb4ec25..b55eb9c75644 100644 --- a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stack_frame.h +++ b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stack_frame.h @@ -45,12 +45,13 @@ struct StackFrame { // stack scanning, it can wind up with dubious frames. // In rough order of "trust metric". enum FrameTrust { - FRAME_TRUST_NONE, // Unknown - FRAME_TRUST_SCAN, // Scanned the stack, found this - FRAME_TRUST_CFI_SCAN, // Scanned the stack using call frame info, found this - FRAME_TRUST_FP, // Derived from frame pointer - FRAME_TRUST_CFI, // Derived from call frame info - FRAME_TRUST_CONTEXT // Given as instruction pointer in a context + FRAME_TRUST_NONE, // Unknown + FRAME_TRUST_SCAN, // Scanned the stack, found this + FRAME_TRUST_CFI_SCAN, // Found while scanning stack using call frame info + FRAME_TRUST_FP, // Derived from frame pointer + FRAME_TRUST_CFI, // Derived from call frame info + FRAME_TRUST_PREWALKED, // Explicitly provided by some external stack walker. + FRAME_TRUST_CONTEXT // Given as instruction pointer in a context }; StackFrame() @@ -70,6 +71,8 @@ struct StackFrame { switch (trust) { case StackFrame::FRAME_TRUST_CONTEXT: return "given as instruction pointer in context"; + case StackFrame::FRAME_TRUST_PREWALKED: + return "recovered by external stack walker"; case StackFrame::FRAME_TRUST_CFI: return "call frame info"; case StackFrame::FRAME_TRUST_CFI_SCAN: diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stack_frame_cpu.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stack_frame_cpu.h index a9cf99b73759..dc5d8ae67391 100644 --- a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stack_frame_cpu.h +++ b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stack_frame_cpu.h @@ -123,6 +123,32 @@ struct StackFramePPC : public StackFrame { int context_validity; }; +struct StackFramePPC64 : public StackFrame { + // ContextValidity should eventually contain entries for the validity of + // other nonvolatile (callee-save) registers as in + // StackFrameX86::ContextValidity, but the ppc stackwalker doesn't currently + // locate registers other than the ones listed here. + enum ContextValidity { + CONTEXT_VALID_NONE = 0, + CONTEXT_VALID_SRR0 = 1 << 0, + CONTEXT_VALID_GPR1 = 1 << 1, + CONTEXT_VALID_ALL = -1 + }; + + StackFramePPC64() : context(), context_validity(CONTEXT_VALID_NONE) {} + + // Register state. This is only fully valid for the topmost frame in a + // stack. In other frames, the values of nonvolatile registers may be + // present, given sufficient debugging information. Refer to + // context_validity. + MDRawContextPPC64 context; + + // context_validity is actually ContextValidity, but int is used because + // the OR operator doesn't work well with enumerated types. This indicates + // which fields in context are valid. + int context_validity; +}; + struct StackFrameAMD64 : public StackFrame { // ContextValidity has one entry for each register that we might be able // to recover. @@ -244,6 +270,136 @@ struct StackFrameARM : public StackFrame { int context_validity; }; +struct StackFrameARM64 : public StackFrame { + // A flag for each register we might know. Note that we can't use an enum + // here as there are 33 values to represent. + static const uint64_t CONTEXT_VALID_NONE = 0; + static const uint64_t CONTEXT_VALID_X0 = 1ULL << 0; + static const uint64_t CONTEXT_VALID_X1 = 1ULL << 1; + static const uint64_t CONTEXT_VALID_X2 = 1ULL << 2; + static const uint64_t CONTEXT_VALID_X3 = 1ULL << 3; + static const uint64_t CONTEXT_VALID_X4 = 1ULL << 4; + static const uint64_t CONTEXT_VALID_X5 = 1ULL << 5; + static const uint64_t CONTEXT_VALID_X6 = 1ULL << 6; + static const uint64_t CONTEXT_VALID_X7 = 1ULL << 7; + static const uint64_t CONTEXT_VALID_X8 = 1ULL << 8; + static const uint64_t CONTEXT_VALID_X9 = 1ULL << 9; + static const uint64_t CONTEXT_VALID_X10 = 1ULL << 10; + static const uint64_t CONTEXT_VALID_X11 = 1ULL << 11; + static const uint64_t CONTEXT_VALID_X12 = 1ULL << 12; + static const uint64_t CONTEXT_VALID_X13 = 1ULL << 13; + static const uint64_t CONTEXT_VALID_X14 = 1ULL << 14; + static const uint64_t CONTEXT_VALID_X15 = 1ULL << 15; + static const uint64_t CONTEXT_VALID_X16 = 1ULL << 16; + static const uint64_t CONTEXT_VALID_X17 = 1ULL << 17; + static const uint64_t CONTEXT_VALID_X18 = 1ULL << 18; + static const uint64_t CONTEXT_VALID_X19 = 1ULL << 19; + static const uint64_t CONTEXT_VALID_X20 = 1ULL << 20; + static const uint64_t CONTEXT_VALID_X21 = 1ULL << 21; + static const uint64_t CONTEXT_VALID_X22 = 1ULL << 22; + static const uint64_t CONTEXT_VALID_X23 = 1ULL << 23; + static const uint64_t CONTEXT_VALID_X24 = 1ULL << 24; + static const uint64_t CONTEXT_VALID_X25 = 1ULL << 25; + static const uint64_t CONTEXT_VALID_X26 = 1ULL << 26; + static const uint64_t CONTEXT_VALID_X27 = 1ULL << 27; + static const uint64_t CONTEXT_VALID_X28 = 1ULL << 28; + static const uint64_t CONTEXT_VALID_X29 = 1ULL << 29; + static const uint64_t CONTEXT_VALID_X30 = 1ULL << 30; + static const uint64_t CONTEXT_VALID_X31 = 1ULL << 31; + static const uint64_t CONTEXT_VALID_X32 = 1ULL << 32; + static const uint64_t CONTEXT_VALID_ALL = ~CONTEXT_VALID_NONE; + + // Aliases for registers with dedicated or conventional roles. + static const uint64_t CONTEXT_VALID_FP = CONTEXT_VALID_X29; + static const uint64_t CONTEXT_VALID_LR = CONTEXT_VALID_X30; + static const uint64_t CONTEXT_VALID_SP = CONTEXT_VALID_X31; + static const uint64_t CONTEXT_VALID_PC = CONTEXT_VALID_X32; + + StackFrameARM64() : context(), + context_validity(CONTEXT_VALID_NONE) {} + + // Return the validity flag for register xN. + static uint64_t RegisterValidFlag(int n) { + return 1ULL << n; + } + + // Register state. This is only fully valid for the topmost frame in a + // stack. In other frames, the values of nonvolatile registers may be + // present, given sufficient debugging information. Refer to + // context_validity. + MDRawContextARM64 context; + + // For each register in context whose value has been recovered, we set + // the corresponding CONTEXT_VALID_ bit in context_validity. + uint64_t context_validity; +}; + +struct StackFrameMIPS : public StackFrame { + // MIPS callee save registers for o32 ABI (32bit registers) are: + // 1. $s0-$s7, + // 2. $sp, $fp + // 3. $f20-$f31 + // + // The register structure is available at + // http://en.wikipedia.org/wiki/MIPS_architecture#Compiler_register_usage + +#define INDEX_MIPS_REG_S0 MD_CONTEXT_MIPS_REG_S0 // 16 +#define INDEX_MIPS_REG_S7 MD_CONTEXT_MIPS_REG_S7 // 23 +#define INDEX_MIPS_REG_GP MD_CONTEXT_MIPS_REG_GP // 28 +#define INDEX_MIPS_REG_RA MD_CONTEXT_MIPS_REG_RA // 31 +#define INDEX_MIPS_REG_PC 34 +#define SHIFT_MIPS_REG_S0 0 +#define SHIFT_MIPS_REG_GP 8 +#define SHIFT_MIPS_REG_PC 12 + + enum ContextValidity { + CONTEXT_VALID_NONE = 0, + CONTEXT_VALID_S0 = 1 << 0, // $16 + CONTEXT_VALID_S1 = 1 << 1, // $17 + CONTEXT_VALID_S2 = 1 << 2, // $18 + CONTEXT_VALID_S3 = 1 << 3, // $19 + CONTEXT_VALID_S4 = 1 << 4, // $20 + CONTEXT_VALID_S5 = 1 << 5, // $21 + CONTEXT_VALID_S6 = 1 << 6, // $22 + CONTEXT_VALID_S7 = 1 << 7, // $23 + // GP is not calee-save for o32 abi. + CONTEXT_VALID_GP = 1 << 8, // $28 + CONTEXT_VALID_SP = 1 << 9, // $29 + CONTEXT_VALID_FP = 1 << 10, // $30 + CONTEXT_VALID_RA = 1 << 11, // $31 + CONTEXT_VALID_PC = 1 << 12, // $34 + CONTEXT_VALID_ALL = ~CONTEXT_VALID_NONE + }; + + // Return the ContextValidity flag for register rN. + static ContextValidity RegisterValidFlag(int n) { + if (n >= INDEX_MIPS_REG_S0 && n <= INDEX_MIPS_REG_S7) + return ContextValidity(1 << (n - INDEX_MIPS_REG_S0 + SHIFT_MIPS_REG_S0)); + else if (n >= INDEX_MIPS_REG_GP && n <= INDEX_MIPS_REG_RA) + return ContextValidity(1 << (n - INDEX_MIPS_REG_GP + SHIFT_MIPS_REG_GP)); + else if (n == INDEX_MIPS_REG_PC) + return ContextValidity(1 << SHIFT_MIPS_REG_PC); + + return CONTEXT_VALID_NONE; + } + + StackFrameMIPS() : context(), context_validity(CONTEXT_VALID_NONE) {} + + // Register state. This is only fully valid for the topmost frame in a + // stack. In other frames, which registers are present depends on what + // debugging information were available. Refer to 'context_validity' below. + MDRawContextMIPS context; + + // For each register in context whose value has been recovered, + // the corresponding CONTEXT_VALID_ bit in 'context_validity' is set. + // + // context_validity's type should actually be ContextValidity, but + // type int is used instead because the bitwise inclusive or operator + // yields an int when applied to enum values, and C++ doesn't + // silently convert from ints to enums. + int context_validity; +}; + } // namespace google_breakpad #endif // GOOGLE_BREAKPAD_PROCESSOR_STACK_FRAME_CPU_H__ diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stack_frame_symbolizer.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stack_frame_symbolizer.h index 6f89167ea27e..074907cb1462 100644 --- a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stack_frame_symbolizer.h +++ b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stack_frame_symbolizer.h @@ -62,7 +62,10 @@ class StackFrameSymbolizer { kError, // This indicates error for which stack walk should be interrupted // and retried in future. - kInterrupt + kInterrupt, + // Symbol data was found and loaded in resolver however some corruptions + // were detected. + kWarningCorruptSymbols, }; StackFrameSymbolizer(SymbolSupplier* supplier, diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stackwalker.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stackwalker.h index e0afdc4269d8..a1bd3e7fe8e7 100644 --- a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stackwalker.h +++ b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stackwalker.h @@ -54,7 +54,7 @@ namespace google_breakpad { class CallStack; -class MinidumpContext; +class DumpContext; class StackFrameSymbolizer; using std::set; @@ -68,22 +68,25 @@ class Stackwalker { // GetCallerFrame. The frames are further processed to fill all available // data. Returns true if the stackwalk completed, or false if it was // interrupted by SymbolSupplier::GetSymbolFile(). - // Upon return, modules_without_symbols will be populated with pointers to + // Upon return, |modules_without_symbols| will be populated with pointers to // the code modules (CodeModule*) that DON'T have symbols. - // modules_without_symbols DOES NOT take ownership of the code modules. + // |modules_with_corrupt_symbols| will be populated with pointers to the + // modules which have corrupt symbols. |modules_without_symbols| and + // |modules_with_corrupt_symbols| DO NOT take ownership of the code modules. // The lifetime of these code modules is the same as the lifetime of the // CodeModules passed to the StackWalker constructor (which currently // happens to be the lifetime of the Breakpad's ProcessingState object). // There is a check for duplicate modules so no duplicates are expected. bool Walk(CallStack* stack, - vector* modules_without_symbols); + vector* modules_without_symbols, + vector* modules_with_corrupt_symbols); // Returns a new concrete subclass suitable for the CPU that a stack was // generated on, according to the CPU type indicated by the context // argument. If no suitable concrete subclass exists, returns NULL. static Stackwalker* StackwalkerForCPU( const SystemInfo* system_info, - MinidumpContext* context, + DumpContext* context, MemoryRegion* memory, const CodeModules* modules, StackFrameSymbolizer* resolver_helper); @@ -130,9 +133,16 @@ class Stackwalker { template bool ScanForReturnAddress(InstructionType location_start, InstructionType* location_found, - InstructionType* ip_found) { + InstructionType* ip_found, + bool is_context_frame) { + // When searching for the caller of the context frame, + // allow the scanner to look farther down the stack. + const int search_words = is_context_frame ? + kRASearchWords * 4 : + kRASearchWords; + return ScanForReturnAddress(location_start, location_found, ip_found, - kRASearchWords); + search_words); } // Scan the stack starting at location_start, looking for an address diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/symbol_supplier.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/symbol_supplier.h index dccab5094de1..a042081f3b13 100644 --- a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/symbol_supplier.h +++ b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/symbol_supplier.h @@ -87,7 +87,8 @@ class SymbolSupplier { virtual SymbolResult GetCStringSymbolData(const CodeModule *module, const SystemInfo *system_info, string *symbol_file, - char **symbol_data) = 0; + char **symbol_data, + size_t *symbol_data_size) = 0; // Frees the data buffer allocated for the module in GetCStringSymbolData. virtual void FreeSymbolData(const CodeModule *module) = 0; diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/system_info.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/system_info.h index 4a25048207f4..9583d9e89c73 100644 --- a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/system_info.h +++ b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/system_info.h @@ -63,10 +63,11 @@ struct SystemInfo { string os; // A short form of the os string, using lowercase letters and no spaces, - // suitable for use in a filesystem. Possible values are "windows", - // "mac", and "linux". Empty if the information is not present in the dump - // or if the OS given by the dump is unknown. The values stored in this - // field should match those used by MinidumpSystemInfo::GetOS. + // suitable for use in a filesystem. Possible values include "windows", + // "mac", "linux" and "nacl". Empty if the information is not present + // in the dump or if the OS given by the dump is unknown. The values + // stored in this field should match those used by + // MinidumpSystemInfo::GetOS. string os_short; // A string identifying the version of the operating system, such as diff --git a/toolkit/crashreporter/google-breakpad/src/processor/address_map-inl.h b/toolkit/crashreporter/google-breakpad/src/processor/address_map-inl.h index 073e539cd2c1..251c44781a7c 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/address_map-inl.h +++ b/toolkit/crashreporter/google-breakpad/src/processor/address_map-inl.h @@ -40,7 +40,7 @@ #include -#include "common/logging.h" +#include "processor/logging.h" namespace google_breakpad { diff --git a/toolkit/crashreporter/google-breakpad/src/processor/basic_code_modules.cc b/toolkit/crashreporter/google-breakpad/src/processor/basic_code_modules.cc index fbed5c8f66a0..40b45a8bf887 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/basic_code_modules.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/basic_code_modules.cc @@ -40,7 +40,7 @@ #include "google_breakpad/processor/code_module.h" #include "processor/linked_ptr.h" -#include "common/logging.h" +#include "processor/logging.h" #include "processor/range_map-inl.h" namespace google_breakpad { @@ -73,6 +73,11 @@ BasicCodeModules::BasicCodeModules(const CodeModules *that) } } +BasicCodeModules::BasicCodeModules() + : main_address_(0), + map_(new RangeMap >()) { +} + BasicCodeModules::~BasicCodeModules() { delete map_; } diff --git a/toolkit/crashreporter/google-breakpad/src/processor/basic_code_modules.h b/toolkit/crashreporter/google-breakpad/src/processor/basic_code_modules.h index d302287e6ef9..ace569b8a7ad 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/basic_code_modules.h +++ b/toolkit/crashreporter/google-breakpad/src/processor/basic_code_modules.h @@ -67,7 +67,9 @@ class BasicCodeModules : public CodeModules { virtual const CodeModule* GetModuleAtIndex(unsigned int index) const; virtual const CodeModules* Copy() const; - private: + protected: + BasicCodeModules(); + // The base address of the main module. uint64_t main_address_; @@ -75,6 +77,7 @@ class BasicCodeModules : public CodeModules { // address range. RangeMap > *map_; + private: // Disallow copy constructor and assignment operator. BasicCodeModules(const BasicCodeModules &that); void operator=(const BasicCodeModules &that); diff --git a/toolkit/crashreporter/google-breakpad/src/processor/basic_source_line_resolver.cc b/toolkit/crashreporter/google-breakpad/src/processor/basic_source_line_resolver.cc index 55f8f9a1e8be..10dcb2763e89 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/basic_source_line_resolver.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/basic_source_line_resolver.cc @@ -32,12 +32,13 @@ // See basic_source_line_resolver.h and basic_source_line_resolver_types.h // for documentation. - +#include #include #include #include #include +#include #include #include #include @@ -55,30 +56,72 @@ using std::make_pair; namespace google_breakpad { #ifdef _WIN32 +#ifdef _MSC_VER #define strtok_r strtok_s +#endif #define strtoull _strtoui64 #endif static const char *kWhitespace = " \r\n"; +static const int kMaxErrorsPrinted = 5; +static const int kMaxErrorsBeforeBailing = 100; BasicSourceLineResolver::BasicSourceLineResolver() : SourceLineResolverBase(new BasicModuleFactory) { } -bool BasicSourceLineResolver::Module::LoadMapFromMemory(char *memory_buffer) { +// static +void BasicSourceLineResolver::Module::LogParseError( + const string &message, + int line_number, + int *num_errors) { + if (++(*num_errors) <= kMaxErrorsPrinted) { + if (line_number > 0) { + BPLOG(ERROR) << "Line " << line_number << ": " << message; + } else { + BPLOG(ERROR) << message; + } + } +} + +bool BasicSourceLineResolver::Module::LoadMapFromMemory( + char *memory_buffer, + size_t memory_buffer_size) { linked_ptr cur_func; int line_number = 0; + int num_errors = 0; char *save_ptr; - size_t map_buffer_length = strlen(memory_buffer); // If the length is 0, we can still pretend we have a symbol file. This is // for scenarios that want to test symbol lookup, but don't necessarily care // if certain modules do not have any information, like system libraries. - if (map_buffer_length == 0) { + if (memory_buffer_size == 0) { return true; } - if (memory_buffer[map_buffer_length - 1] == '\n') { - memory_buffer[map_buffer_length - 1] = '\0'; + // Make sure the last character is null terminator. + size_t last_null_terminator = memory_buffer_size - 1; + if (memory_buffer[last_null_terminator] != '\0') { + memory_buffer[last_null_terminator] = '\0'; + } + + // Skip any null terminators at the end of the memory buffer, and make sure + // there are no other null terminators in the middle of the memory buffer. + bool has_null_terminator_in_the_middle = false; + while (last_null_terminator > 0 && + memory_buffer[last_null_terminator - 1] == '\0') { + last_null_terminator--; + } + for (size_t i = 0; i < last_null_terminator; i++) { + if (memory_buffer[i] == '\0') { + memory_buffer[i] = '_'; + has_null_terminator_in_the_middle = true; + } + } + if (has_null_terminator_in_the_middle) { + LogParseError( + "Null terminator is not expected in the middle of the symbol data", + line_number, + &num_errors); } char *buffer; @@ -89,35 +132,28 @@ bool BasicSourceLineResolver::Module::LoadMapFromMemory(char *memory_buffer) { if (strncmp(buffer, "FILE ", 5) == 0) { if (!ParseFile(buffer)) { - BPLOG(ERROR) << "ParseFile on buffer failed at " << - ":" << line_number; - return false; + LogParseError("ParseFile on buffer failed", line_number, &num_errors); } } else if (strncmp(buffer, "STACK ", 6) == 0) { if (!ParseStackInfo(buffer)) { - BPLOG(ERROR) << "ParseStackInfo failed at " << - ":" << line_number; - return false; + LogParseError("ParseStackInfo failed", line_number, &num_errors); } } else if (strncmp(buffer, "FUNC ", 5) == 0) { cur_func.reset(ParseFunction(buffer)); if (!cur_func.get()) { - BPLOG(ERROR) << "ParseFunction failed at " << - ":" << line_number; - return false; + LogParseError("ParseFunction failed", line_number, &num_errors); + } else { + // StoreRange will fail if the function has an invalid address or size. + // We'll silently ignore this, the function and any corresponding lines + // will be destroyed when cur_func is released. + functions_.StoreRange(cur_func->address, cur_func->size, cur_func); } - // StoreRange will fail if the function has an invalid address or size. - // We'll silently ignore this, the function and any corresponding lines - // will be destroyed when cur_func is released. - functions_.StoreRange(cur_func->address, cur_func->size, cur_func); } else if (strncmp(buffer, "PUBLIC ", 7) == 0) { // Clear cur_func: public symbols don't contain line number information. cur_func.reset(); if (!ParsePublicSymbol(buffer)) { - BPLOG(ERROR) << "ParsePublicSymbol failed at " << - ":" << line_number; - return false; + LogParseError("ParsePublicSymbol failed", line_number, &num_errors); } } else if (strncmp(buffer, "MODULE ", 7) == 0) { // Ignore these. They're not of any use to BasicSourceLineResolver, @@ -132,21 +168,24 @@ bool BasicSourceLineResolver::Module::LoadMapFromMemory(char *memory_buffer) { // INFO CODE_ID } else { if (!cur_func.get()) { - BPLOG(ERROR) << "Found source line data without a function at " << - ":" << line_number; - return false; + LogParseError("Found source line data without a function", + line_number, &num_errors); + } else { + Line *line = ParseLine(buffer); + if (!line) { + LogParseError("ParseLine failed", line_number, &num_errors); + } else { + cur_func->lines.StoreRange(line->address, line->size, + linked_ptr(line)); + } } - Line *line = ParseLine(buffer); - if (!line) { - BPLOG(ERROR) << "ParseLine failed at " << line_number << " for " << - buffer; - return false; - } - cur_func->lines.StoreRange(line->address, line->size, - linked_ptr(line)); + } + if (num_errors > kMaxErrorsBeforeBailing) { + break; } buffer = strtok_r(NULL, "\r\n", &save_ptr); } + is_corrupt_ = num_errors > 0; return true; } @@ -272,93 +311,64 @@ CFIFrameInfo *BasicSourceLineResolver::Module::FindCFIFrameInfo( } bool BasicSourceLineResolver::Module::ParseFile(char *file_line) { - // FILE - file_line += 5; // skip prefix - - vector tokens; - if (!Tokenize(file_line, kWhitespace, 2, &tokens)) { - return false; + long index; + char *filename; + if (SymbolParseHelper::ParseFile(file_line, &index, &filename)) { + files_.insert(make_pair(index, string(filename))); + return true; } - - int index = atoi(tokens[0]); - if (index < 0) { - return false; - } - - char *filename = tokens[1]; - if (!filename) { - return false; - } - - files_.insert(make_pair(index, string(filename))); - return true; + return false; } BasicSourceLineResolver::Function* BasicSourceLineResolver::Module::ParseFunction(char *function_line) { - // FUNC
- function_line += 5; // skip prefix - - vector tokens; - if (!Tokenize(function_line, kWhitespace, 4, &tokens)) { - return NULL; + uint64_t address; + uint64_t size; + long stack_param_size; + char *name; + if (SymbolParseHelper::ParseFunction(function_line, &address, &size, + &stack_param_size, &name)) { + return new Function(name, address, size, stack_param_size); } - - uint64_t address = strtoull(tokens[0], NULL, 16); - uint64_t size = strtoull(tokens[1], NULL, 16); - int stack_param_size = strtoull(tokens[2], NULL, 16); - char *name = tokens[3]; - - return new Function(name, address, size, stack_param_size); + return NULL; } BasicSourceLineResolver::Line* BasicSourceLineResolver::Module::ParseLine( char *line_line) { - //
- vector tokens; - if (!Tokenize(line_line, kWhitespace, 4, &tokens)) { - return NULL; - } + uint64_t address; + uint64_t size; + long line_number; + long source_file; - uint64_t address = strtoull(tokens[0], NULL, 16); - uint64_t size = strtoull(tokens[1], NULL, 16); - int line_number = atoi(tokens[2]); - int source_file = atoi(tokens[3]); - if (line_number <= 0) { - return NULL; + if (SymbolParseHelper::ParseLine(line_line, &address, &size, &line_number, + &source_file)) { + return new Line(address, size, source_file, line_number); } - - return new Line(address, size, source_file, line_number); + return NULL; } bool BasicSourceLineResolver::Module::ParsePublicSymbol(char *public_line) { - // PUBLIC
+ uint64_t address; + long stack_param_size; + char *name; - // Skip "PUBLIC " prefix. - public_line += 7; + if (SymbolParseHelper::ParsePublicSymbol(public_line, &address, + &stack_param_size, &name)) { + // A few public symbols show up with an address of 0. This has been seen + // in the dumped output of ntdll.pdb for symbols such as _CIlog, _CIpow, + // RtlDescribeChunkLZNT1, and RtlReserveChunkLZNT1. They would conflict + // with one another if they were allowed into the public_symbols_ map, + // but since the address is obviously invalid, gracefully accept them + // as input without putting them into the map. + if (address == 0) { + return true; + } - vector tokens; - if (!Tokenize(public_line, kWhitespace, 3, &tokens)) { - return false; + linked_ptr symbol(new PublicSymbol(name, address, + stack_param_size)); + return public_symbols_.Store(address, symbol); } - - uint64_t address = strtoull(tokens[0], NULL, 16); - int stack_param_size = strtoull(tokens[1], NULL, 16); - char *name = tokens[2]; - - // A few public symbols show up with an address of 0. This has been seen - // in the dumped output of ntdll.pdb for symbols such as _CIlog, _CIpow, - // RtlDescribeChunkLZNT1, and RtlReserveChunkLZNT1. They would conflict - // with one another if they were allowed into the public_symbols_ map, - // but since the address is obviously invalid, gracefully accept them - // as input without putting them into the map. - if (address == 0) { - return true; - } - - linked_ptr symbol(new PublicSymbol(name, address, - stack_param_size)); - return public_symbols_.Store(address, symbol); + return false; } bool BasicSourceLineResolver::Module::ParseStackInfo(char *stack_info_line) { @@ -452,4 +462,150 @@ bool BasicSourceLineResolver::Module::ParseCFIFrameInfo( return true; } +// static +bool SymbolParseHelper::ParseFile(char *file_line, long *index, + char **filename) { + // FILE + assert(strncmp(file_line, "FILE ", 5) == 0); + file_line += 5; // skip prefix + + vector tokens; + if (!Tokenize(file_line, kWhitespace, 2, &tokens)) { + return false; + } + + char *after_number; + *index = strtol(tokens[0], &after_number, 10); + if (!IsValidAfterNumber(after_number) || *index < 0 || + *index == std::numeric_limits::max()) { + return false; + } + + *filename = tokens[1]; + if (!filename) { + return false; + } + + return true; +} + +// static +bool SymbolParseHelper::ParseFunction(char *function_line, uint64_t *address, + uint64_t *size, long *stack_param_size, + char **name) { + // FUNC
+ assert(strncmp(function_line, "FUNC ", 5) == 0); + function_line += 5; // skip prefix + + vector tokens; + if (!Tokenize(function_line, kWhitespace, 4, &tokens)) { + return false; + } + + char *after_number; + *address = strtoull(tokens[0], &after_number, 16); + if (!IsValidAfterNumber(after_number) || + *address == std::numeric_limits::max()) { + return false; + } + *size = strtoull(tokens[1], &after_number, 16); + if (!IsValidAfterNumber(after_number) || + *size == std::numeric_limits::max()) { + return false; + } + *stack_param_size = strtol(tokens[2], &after_number, 16); + if (!IsValidAfterNumber(after_number) || + *stack_param_size == std::numeric_limits::max() || + *stack_param_size < 0) { + return false; + } + *name = tokens[3]; + + return true; +} + +// static +bool SymbolParseHelper::ParseLine(char *line_line, uint64_t *address, + uint64_t *size, long *line_number, + long *source_file) { + //
+ vector tokens; + if (!Tokenize(line_line, kWhitespace, 4, &tokens)) { + return false; + } + + char *after_number; + *address = strtoull(tokens[0], &after_number, 16); + if (!IsValidAfterNumber(after_number) || + *address == std::numeric_limits::max()) { + return false; + } + *size = strtoull(tokens[1], &after_number, 16); + if (!IsValidAfterNumber(after_number) || + *size == std::numeric_limits::max()) { + return false; + } + *line_number = strtol(tokens[2], &after_number, 10); + if (!IsValidAfterNumber(after_number) || + *line_number == std::numeric_limits::max()) { + return false; + } + *source_file = strtol(tokens[3], &after_number, 10); + if (!IsValidAfterNumber(after_number) || *source_file < 0 || + *source_file == std::numeric_limits::max()) { + return false; + } + + // Valid line numbers normally start from 1, however there are functions that + // are associated with a source file but not associated with any line number + // (block helper function) and for such functions the symbol file contains 0 + // for the line numbers. Hence, 0 should be treated as a valid line number. + // For more information on block helper functions, please, take a look at: + // http://clang.llvm.org/docs/Block-ABI-Apple.html + if (*line_number < 0) { + return false; + } + + return true; +} + +// static +bool SymbolParseHelper::ParsePublicSymbol(char *public_line, + uint64_t *address, + long *stack_param_size, + char **name) { + // PUBLIC
+ assert(strncmp(public_line, "PUBLIC ", 7) == 0); + public_line += 7; // skip prefix + + vector tokens; + if (!Tokenize(public_line, kWhitespace, 3, &tokens)) { + return false; + } + + char *after_number; + *address = strtoull(tokens[0], &after_number, 16); + if (!IsValidAfterNumber(after_number) || + *address == std::numeric_limits::max()) { + return false; + } + *stack_param_size = strtol(tokens[1], &after_number, 16); + if (!IsValidAfterNumber(after_number) || + *stack_param_size == std::numeric_limits::max() || + *stack_param_size < 0) { + return false; + } + *name = tokens[2]; + + return true; +} + +// static +bool SymbolParseHelper::IsValidAfterNumber(char *after_number) { + if (after_number != NULL && strchr(kWhitespace, *after_number) != NULL) { + return true; + } + return false; +} + } // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/processor/basic_source_line_resolver_types.h b/toolkit/crashreporter/google-breakpad/src/processor/basic_source_line_resolver_types.h index 94616dcb3c84..a022bc0dbbf3 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/basic_source_line_resolver_types.h +++ b/toolkit/crashreporter/google-breakpad/src/processor/basic_source_line_resolver_types.h @@ -73,12 +73,20 @@ BasicSourceLineResolver::Function : public SourceLineResolverBase::Function { class BasicSourceLineResolver::Module : public SourceLineResolverBase::Module { public: - explicit Module(const string &name) : name_(name) { } + explicit Module(const string &name) : name_(name), is_corrupt_(false) { } virtual ~Module() { } // Loads a map from the given buffer in char* type. // Does NOT have ownership of memory_buffer. - virtual bool LoadMapFromMemory(char *memory_buffer); + // The passed in |memory buffer| is of size |memory_buffer_size|. If it is + // not null terminated, LoadMapFromMemory() will null terminate it by + // modifying the passed in buffer. + virtual bool LoadMapFromMemory(char *memory_buffer, + size_t memory_buffer_size); + + // Tells whether the loaded symbol data is corrupt. Return value is + // undefined, if the symbol data hasn't been loaded yet. + virtual bool IsCorrupt() const { return is_corrupt_; } // Looks up the given relative address, and fills the StackFrame struct // with the result. @@ -105,6 +113,13 @@ class BasicSourceLineResolver::Module : public SourceLineResolverBase::Module { typedef std::map FileMap; + // Logs parse errors. |*num_errors| is increased every time LogParseError is + // called. + static void LogParseError( + const string &message, + int line_number, + int *num_errors); + // Parses a file declaration bool ParseFile(char *file_line); @@ -129,6 +144,7 @@ class BasicSourceLineResolver::Module : public SourceLineResolverBase::Module { FileMap files_; RangeMap< MemAddr, linked_ptr > functions_; AddressMap< MemAddr, linked_ptr > public_symbols_; + bool is_corrupt_; // Each element in the array is a ContainedRangeMap for a type // listed in WindowsFrameInfoTypes. These are split by type because diff --git a/toolkit/crashreporter/google-breakpad/src/processor/basic_source_line_resolver_unittest.cc b/toolkit/crashreporter/google-breakpad/src/processor/basic_source_line_resolver_unittest.cc index 22c06082367c..7d4cd5c50bc1 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/basic_source_line_resolver_unittest.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/basic_source_line_resolver_unittest.cc @@ -27,9 +27,9 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#include #include -#include #include #include "breakpad_googletest_includes.h" @@ -49,21 +49,12 @@ namespace { using google_breakpad::BasicSourceLineResolver; using google_breakpad::CFIFrameInfo; using google_breakpad::CodeModule; -using google_breakpad::FromUniqueString; using google_breakpad::MemoryRegion; using google_breakpad::StackFrame; -using google_breakpad::ToUniqueString; -using google_breakpad::UniqueString; using google_breakpad::WindowsFrameInfo; using google_breakpad::linked_ptr; using google_breakpad::scoped_ptr; -using google_breakpad::ustr__ZDcfa; -using google_breakpad::ustr__ZDra; -using google_breakpad::ustr__ZSebx; -using google_breakpad::ustr__ZSebp; -using google_breakpad::ustr__ZSedi; -using google_breakpad::ustr__ZSesi; -using google_breakpad::ustr__ZSesp; +using google_breakpad::SymbolParseHelper; class TestCodeModule : public CodeModule { public: @@ -112,6 +103,9 @@ class MockMemoryRegion: public MemoryRegion { *value = address; return true; } + void Print() const { + assert(false); + } }; // Verify that, for every association in ACTUAL, EXPECTED has the same @@ -120,30 +114,27 @@ class MockMemoryRegion: public MemoryRegion { // ".cfa". static bool VerifyRegisters( const char *file, int line, - const std::map &expected, - const CFIFrameInfo::RegisterValueMap &actual_regmap) { - std::map actual; - actual_regmap.copy_to_map(&actual); - - std::map::const_iterator a; - a = actual.find(ustr__ZDcfa()); + const CFIFrameInfo::RegisterValueMap &expected, + const CFIFrameInfo::RegisterValueMap &actual) { + CFIFrameInfo::RegisterValueMap::const_iterator a; + a = actual.find(".cfa"); if (a == actual.end()) return false; - a = actual.find(ustr__ZDra()); + a = actual.find(".ra"); if (a == actual.end()) return false; for (a = actual.begin(); a != actual.end(); a++) { - std::map::const_iterator e = + CFIFrameInfo::RegisterValueMap::const_iterator e = expected.find(a->first); if (e == expected.end()) { fprintf(stderr, "%s:%d: unexpected register '%s' recovered, value 0x%x\n", - file, line, FromUniqueString(a->first), a->second); + file, line, a->first.c_str(), a->second); return false; } if (e->second != a->second) { fprintf(stderr, "%s:%d: register '%s' recovered value was 0x%x, expected 0x%x\n", - file, line, FromUniqueString(a->first), a->second, e->second); + file, line, a->first.c_str(), a->second, e->second); return false; } // Don't complain if this doesn't recover all registers. Although @@ -268,26 +259,26 @@ TEST_F(TestBasicSourceLineResolver, TestLoadAndResolve) CFIFrameInfo::RegisterValueMap current_registers; CFIFrameInfo::RegisterValueMap caller_registers; - std::map expected_caller_registers; + CFIFrameInfo::RegisterValueMap expected_caller_registers; MockMemoryRegion memory; // Regardless of which instruction evaluation takes place at, it // should produce the same values for the caller's registers. - expected_caller_registers[ustr__ZDcfa()] = 0x1001c; - expected_caller_registers[ustr__ZDra()] = 0xf6438648; - expected_caller_registers[ustr__ZSebp()] = 0x10038; - expected_caller_registers[ustr__ZSebx()] = 0x98ecadc3; - expected_caller_registers[ustr__ZSesi()] = 0x878f7524; - expected_caller_registers[ustr__ZSedi()] = 0x6312f9a5; + expected_caller_registers[".cfa"] = 0x1001c; + expected_caller_registers[".ra"] = 0xf6438648; + expected_caller_registers["$ebp"] = 0x10038; + expected_caller_registers["$ebx"] = 0x98ecadc3; + expected_caller_registers["$esi"] = 0x878f7524; + expected_caller_registers["$edi"] = 0x6312f9a5; frame.instruction = 0x3d40; frame.module = &module1; current_registers.clear(); - current_registers.set(ustr__ZSesp(), 0x10018); - current_registers.set(ustr__ZSebp(), 0x10038); - current_registers.set(ustr__ZSebx(), 0x98ecadc3); - current_registers.set(ustr__ZSesi(), 0x878f7524); - current_registers.set(ustr__ZSedi(), 0x6312f9a5); + current_registers["$esp"] = 0x10018; + current_registers["$ebp"] = 0x10038; + current_registers["$ebx"] = 0x98ecadc3; + current_registers["$esi"] = 0x878f7524; + current_registers["$edi"] = 0x6312f9a5; cfi_frame_info.reset(resolver.FindCFIFrameInfo(&frame)); ASSERT_TRUE(cfi_frame_info.get()); ASSERT_TRUE(cfi_frame_info.get() @@ -297,7 +288,7 @@ TEST_F(TestBasicSourceLineResolver, TestLoadAndResolve) expected_caller_registers, caller_registers)); frame.instruction = 0x3d41; - current_registers.set(ustr__ZSesp(), 0x10014); + current_registers["$esp"] = 0x10014; cfi_frame_info.reset(resolver.FindCFIFrameInfo(&frame)); ASSERT_TRUE(cfi_frame_info.get()); ASSERT_TRUE(cfi_frame_info.get() @@ -307,7 +298,7 @@ TEST_F(TestBasicSourceLineResolver, TestLoadAndResolve) expected_caller_registers, caller_registers)); frame.instruction = 0x3d43; - current_registers.set(ustr__ZSebp(), 0x10014); + current_registers["$ebp"] = 0x10014; cfi_frame_info.reset(resolver.FindCFIFrameInfo(&frame)); ASSERT_TRUE(cfi_frame_info.get()); ASSERT_TRUE(cfi_frame_info.get() @@ -317,7 +308,7 @@ TEST_F(TestBasicSourceLineResolver, TestLoadAndResolve) expected_caller_registers, caller_registers); frame.instruction = 0x3d54; - current_registers.set(ustr__ZSebx(), 0x6864f054U); + current_registers["$ebx"] = 0x6864f054U; cfi_frame_info.reset(resolver.FindCFIFrameInfo(&frame)); ASSERT_TRUE(cfi_frame_info.get()); ASSERT_TRUE(cfi_frame_info.get() @@ -327,7 +318,7 @@ TEST_F(TestBasicSourceLineResolver, TestLoadAndResolve) expected_caller_registers, caller_registers); frame.instruction = 0x3d5a; - current_registers.set(ustr__ZSesi(), 0x6285f79aU); + current_registers["$esi"] = 0x6285f79aU; cfi_frame_info.reset(resolver.FindCFIFrameInfo(&frame)); ASSERT_TRUE(cfi_frame_info.get()); ASSERT_TRUE(cfi_frame_info.get() @@ -337,7 +328,7 @@ TEST_F(TestBasicSourceLineResolver, TestLoadAndResolve) expected_caller_registers, caller_registers); frame.instruction = 0x3d84; - current_registers.set(ustr__ZSedi(), 0x64061449U); + current_registers["$edi"] = 0x64061449U; cfi_frame_info.reset(resolver.FindCFIFrameInfo(&frame)); ASSERT_TRUE(cfi_frame_info.get()); ASSERT_TRUE(cfi_frame_info.get() @@ -390,13 +381,15 @@ TEST_F(TestBasicSourceLineResolver, TestLoadAndResolve) TEST_F(TestBasicSourceLineResolver, TestInvalidLoads) { TestCodeModule module3("module3"); - ASSERT_FALSE(resolver.LoadModule(&module3, + ASSERT_TRUE(resolver.LoadModule(&module3, testdata_dir + "/module3_bad.out")); - ASSERT_FALSE(resolver.HasModule(&module3)); + ASSERT_TRUE(resolver.HasModule(&module3)); + ASSERT_TRUE(resolver.IsModuleCorrupt(&module3)); TestCodeModule module4("module4"); - ASSERT_FALSE(resolver.LoadModule(&module4, + ASSERT_TRUE(resolver.LoadModule(&module4, testdata_dir + "/module4_bad.out")); - ASSERT_FALSE(resolver.HasModule(&module4)); + ASSERT_TRUE(resolver.HasModule(&module4)); + ASSERT_TRUE(resolver.IsModuleCorrupt(&module4)); TestCodeModule module5("module5"); ASSERT_FALSE(resolver.LoadModule(&module5, testdata_dir + "/invalid-filename")); @@ -417,6 +410,268 @@ TEST_F(TestBasicSourceLineResolver, TestUnload) ASSERT_TRUE(resolver.HasModule(&module1)); } +// Test parsing of valid FILE lines. The format is: +// FILE +TEST(SymbolParseHelper, ParseFileValid) { + long index; + char *filename; + + char kTestLine[] = "FILE 1 file name"; + ASSERT_TRUE(SymbolParseHelper::ParseFile(kTestLine, &index, &filename)); + EXPECT_EQ(1, index); + EXPECT_EQ("file name", string(filename)); + + // 0 is a valid index. + char kTestLine1[] = "FILE 0 file name"; + ASSERT_TRUE(SymbolParseHelper::ParseFile(kTestLine1, &index, &filename)); + EXPECT_EQ(0, index); + EXPECT_EQ("file name", string(filename)); +} + +// Test parsing of invalid FILE lines. The format is: +// FILE +TEST(SymbolParseHelper, ParseFileInvalid) { + long index; + char *filename; + + // Test missing file name. + char kTestLine[] = "FILE 1 "; + ASSERT_FALSE(SymbolParseHelper::ParseFile(kTestLine, &index, &filename)); + + // Test bad index. + char kTestLine1[] = "FILE x1 file name"; + ASSERT_FALSE(SymbolParseHelper::ParseFile(kTestLine1, &index, &filename)); + + // Test large index. + char kTestLine2[] = "FILE 123123123123123123123123 file name"; + ASSERT_FALSE(SymbolParseHelper::ParseFile(kTestLine2, &index, &filename)); + + // Test negative index. + char kTestLine3[] = "FILE -2 file name"; + ASSERT_FALSE(SymbolParseHelper::ParseFile(kTestLine3, &index, &filename)); +} + +// Test parsing of valid FUNC lines. The format is: +// FUNC
+TEST(SymbolParseHelper, ParseFunctionValid) { + uint64_t address; + uint64_t size; + long stack_param_size; + char *name; + + char kTestLine[] = "FUNC 1 2 3 function name"; + ASSERT_TRUE(SymbolParseHelper::ParseFunction(kTestLine, &address, &size, + &stack_param_size, &name)); + EXPECT_EQ(1ULL, address); + EXPECT_EQ(2ULL, size); + EXPECT_EQ(3, stack_param_size); + EXPECT_EQ("function name", string(name)); + + // Test hex address, size, and param size. + char kTestLine1[] = "FUNC a1 a2 a3 function name"; + ASSERT_TRUE(SymbolParseHelper::ParseFunction(kTestLine1, &address, &size, + &stack_param_size, &name)); + EXPECT_EQ(0xa1ULL, address); + EXPECT_EQ(0xa2ULL, size); + EXPECT_EQ(0xa3, stack_param_size); + EXPECT_EQ("function name", string(name)); + + char kTestLine2[] = "FUNC 0 0 0 function name"; + ASSERT_TRUE(SymbolParseHelper::ParseFunction(kTestLine2, &address, &size, + &stack_param_size, &name)); + EXPECT_EQ(0ULL, address); + EXPECT_EQ(0ULL, size); + EXPECT_EQ(0, stack_param_size); + EXPECT_EQ("function name", string(name)); +} + +// Test parsing of invalid FUNC lines. The format is: +// FUNC
+TEST(SymbolParseHelper, ParseFunctionInvalid) { + uint64_t address; + uint64_t size; + long stack_param_size; + char *name; + + // Test missing function name. + char kTestLine[] = "FUNC 1 2 3 "; + ASSERT_FALSE(SymbolParseHelper::ParseFunction(kTestLine, &address, &size, + &stack_param_size, &name)); + // Test bad address. + char kTestLine1[] = "FUNC 1z 2 3 function name"; + ASSERT_FALSE(SymbolParseHelper::ParseFunction(kTestLine1, &address, &size, + &stack_param_size, &name)); + // Test large address. + char kTestLine2[] = "FUNC 123123123123123123123123123 2 3 function name"; + ASSERT_FALSE(SymbolParseHelper::ParseFunction(kTestLine2, &address, &size, + &stack_param_size, &name)); + // Test bad size. + char kTestLine3[] = "FUNC 1 z2 3 function name"; + ASSERT_FALSE(SymbolParseHelper::ParseFunction(kTestLine3, &address, &size, + &stack_param_size, &name)); + // Test large size. + char kTestLine4[] = "FUNC 1 231231231231231231231231232 3 function name"; + ASSERT_FALSE(SymbolParseHelper::ParseFunction(kTestLine4, &address, &size, + &stack_param_size, &name)); + // Test bad param size. + char kTestLine5[] = "FUNC 1 2 3z function name"; + ASSERT_FALSE(SymbolParseHelper::ParseFunction(kTestLine5, &address, &size, + &stack_param_size, &name)); + // Test large param size. + char kTestLine6[] = "FUNC 1 2 312312312312312312312312323 function name"; + ASSERT_FALSE(SymbolParseHelper::ParseFunction(kTestLine6, &address, &size, + &stack_param_size, &name)); + // Negative param size. + char kTestLine7[] = "FUNC 1 2 -5 function name"; + ASSERT_FALSE(SymbolParseHelper::ParseFunction(kTestLine7, &address, &size, + &stack_param_size, &name)); +} + +// Test parsing of valid lines. The format is: +//
+TEST(SymbolParseHelper, ParseLineValid) { + uint64_t address; + uint64_t size; + long line_number; + long source_file; + + char kTestLine[] = "1 2 3 4"; + ASSERT_TRUE(SymbolParseHelper::ParseLine(kTestLine, &address, &size, + &line_number, &source_file)); + EXPECT_EQ(1ULL, address); + EXPECT_EQ(2ULL, size); + EXPECT_EQ(3, line_number); + EXPECT_EQ(4, source_file); + + // Test hex size and address. + char kTestLine1[] = "a1 a2 3 4 // some comment"; + ASSERT_TRUE(SymbolParseHelper::ParseLine(kTestLine1, &address, &size, + &line_number, &source_file)); + EXPECT_EQ(0xa1ULL, address); + EXPECT_EQ(0xa2ULL, size); + EXPECT_EQ(3, line_number); + EXPECT_EQ(4, source_file); + + // 0 is a valid line number. + char kTestLine2[] = "a1 a2 0 4 // some comment"; + ASSERT_TRUE(SymbolParseHelper::ParseLine(kTestLine2, &address, &size, + &line_number, &source_file)); + EXPECT_EQ(0xa1ULL, address); + EXPECT_EQ(0xa2ULL, size); + EXPECT_EQ(0, line_number); + EXPECT_EQ(4, source_file); +} + +// Test parsing of invalid lines. The format is: +//
+TEST(SymbolParseHelper, ParseLineInvalid) { + uint64_t address; + uint64_t size; + long line_number; + long source_file; + + // Test missing source file id. + char kTestLine[] = "1 2 3"; + ASSERT_FALSE(SymbolParseHelper::ParseLine(kTestLine, &address, &size, + &line_number, &source_file)); + // Test bad address. + char kTestLine1[] = "1z 2 3 4"; + ASSERT_FALSE(SymbolParseHelper::ParseLine(kTestLine1, &address, &size, + &line_number, &source_file)); + // Test large address. + char kTestLine2[] = "123123123123123123123123 2 3 4"; + ASSERT_FALSE(SymbolParseHelper::ParseLine(kTestLine2, &address, &size, + &line_number, &source_file)); + // Test bad size. + char kTestLine3[] = "1 z2 3 4"; + ASSERT_FALSE(SymbolParseHelper::ParseLine(kTestLine3, &address, &size, + &line_number, &source_file)); + // Test large size. + char kTestLine4[] = "1 123123123123123123123123 3 4"; + ASSERT_FALSE(SymbolParseHelper::ParseLine(kTestLine4, &address, &size, + &line_number, &source_file)); + // Test bad line number. + char kTestLine5[] = "1 2 z3 4"; + ASSERT_FALSE(SymbolParseHelper::ParseLine(kTestLine5, &address, &size, + &line_number, &source_file)); + // Test negative line number. + char kTestLine6[] = "1 2 -1 4"; + ASSERT_FALSE(SymbolParseHelper::ParseLine(kTestLine6, &address, &size, + &line_number, &source_file)); + // Test large line number. + char kTestLine7[] = "1 2 123123123123123123123 4"; + ASSERT_FALSE(SymbolParseHelper::ParseLine(kTestLine7, &address, &size, + &line_number, &source_file)); + // Test bad source file id. + char kTestLine8[] = "1 2 3 f"; + ASSERT_FALSE(SymbolParseHelper::ParseLine(kTestLine8, &address, &size, + &line_number, &source_file)); +} + +// Test parsing of valid PUBLIC lines. The format is: +// PUBLIC
+TEST(SymbolParseHelper, ParsePublicSymbolValid) { + uint64_t address; + long stack_param_size; + char *name; + + char kTestLine[] = "PUBLIC 1 2 3"; + ASSERT_TRUE(SymbolParseHelper::ParsePublicSymbol(kTestLine, &address, + &stack_param_size, &name)); + EXPECT_EQ(1ULL, address); + EXPECT_EQ(2, stack_param_size); + EXPECT_EQ("3", string(name)); + + // Test hex size and address. + char kTestLine1[] = "PUBLIC a1 a2 function name"; + ASSERT_TRUE(SymbolParseHelper::ParsePublicSymbol(kTestLine1, &address, + &stack_param_size, &name)); + EXPECT_EQ(0xa1ULL, address); + EXPECT_EQ(0xa2, stack_param_size); + EXPECT_EQ("function name", string(name)); + + // Test 0 is a valid address. + char kTestLine2[] = "PUBLIC 0 a2 function name"; + ASSERT_TRUE(SymbolParseHelper::ParsePublicSymbol(kTestLine2, &address, + &stack_param_size, &name)); + EXPECT_EQ(0ULL, address); + EXPECT_EQ(0xa2, stack_param_size); + EXPECT_EQ("function name", string(name)); +} + +// Test parsing of invalid PUBLIC lines. The format is: +// PUBLIC
+TEST(SymbolParseHelper, ParsePublicSymbolInvalid) { + uint64_t address; + long stack_param_size; + char *name; + + // Test missing source function name. + char kTestLine[] = "PUBLIC 1 2 "; + ASSERT_FALSE(SymbolParseHelper::ParsePublicSymbol(kTestLine, &address, + &stack_param_size, &name)); + // Test bad address. + char kTestLine1[] = "PUBLIC 1z 2 3"; + ASSERT_FALSE(SymbolParseHelper::ParsePublicSymbol(kTestLine1, &address, + &stack_param_size, &name)); + // Test large address. + char kTestLine2[] = "PUBLIC 123123123123123123123123 2 3"; + ASSERT_FALSE(SymbolParseHelper::ParsePublicSymbol(kTestLine2, &address, + &stack_param_size, &name)); + // Test bad param stack size. + char kTestLine3[] = "PUBLIC 1 z2 3"; + ASSERT_FALSE(SymbolParseHelper::ParsePublicSymbol(kTestLine3, &address, + &stack_param_size, &name)); + // Test large param stack size. + char kTestLine4[] = "PUBLIC 1 123123123123123123123123123 3"; + ASSERT_FALSE(SymbolParseHelper::ParsePublicSymbol(kTestLine4, &address, + &stack_param_size, &name)); + // Test negative param stack size. + char kTestLine5[] = "PUBLIC 1 -5 3"; + ASSERT_FALSE(SymbolParseHelper::ParsePublicSymbol(kTestLine5, &address, + &stack_param_size, &name)); +} + } // namespace int main(int argc, char *argv[]) { diff --git a/toolkit/crashreporter/google-breakpad/src/processor/binarystream.cc b/toolkit/crashreporter/google-breakpad/src/processor/binarystream.cc deleted file mode 100644 index bf92225b5488..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/processor/binarystream.cc +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright (c) 2010, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#include -#include - -#include -#include - -#include "common/using_std_string.h" -#include "processor/binarystream.h" - -namespace google_breakpad { -using std::vector; - -binarystream &binarystream::operator>>(string &str) { - uint16_t length; - *this >> length; - if (eof()) - return *this; - if (length == 0) { - str.clear(); - return *this; - } - vector buffer(length); - stream_.read(&buffer[0], length); - if (!eof()) - str.assign(&buffer[0], length); - return *this; -} - -binarystream &binarystream::operator>>(uint8_t &u8) { - stream_.read((char *)&u8, 1); - return *this; -} - -binarystream &binarystream::operator>>(uint16_t &u16) { - uint16_t temp; - stream_.read((char *)&temp, 2); - if (!eof()) - u16 = ntohs(temp); - return *this; -} - -binarystream &binarystream::operator>>(uint32_t &u32) { - uint32_t temp; - stream_.read((char *)&temp, 4); - if (!eof()) - u32 = ntohl(temp); - return *this; -} - -binarystream &binarystream::operator>>(uint64_t &u64) { - uint32_t lower, upper; - *this >> lower >> upper; - if (!eof()) - u64 = static_cast(lower) | (static_cast(upper) << 32); - return *this; -} - -binarystream &binarystream::operator<<(const string &str) { - if (str.length() > USHRT_MAX) { - // truncate to 16-bit length - *this << static_cast(USHRT_MAX); - stream_.write(str.c_str(), USHRT_MAX); - } else { - *this << (uint16_t)(str.length() & 0xFFFF); - stream_.write(str.c_str(), str.length()); - } - return *this; -} - -binarystream &binarystream::operator<<(uint8_t u8) { - stream_.write((const char*)&u8, 1); - return *this; -} - -binarystream &binarystream::operator<<(uint16_t u16) { - u16 = htons(u16); - stream_.write((const char*)&u16, 2); - return *this; -} - -binarystream &binarystream::operator<<(uint32_t u32) { - u32 = htonl(u32); - stream_.write((const char*)&u32, 4); - return *this; -} - -binarystream &binarystream::operator<<(uint64_t u64) { - // write 64-bit ints as two 32-bit ints, so we can byte-swap them easily - uint32_t lower = static_cast(u64 & 0xFFFFFFFF); - uint32_t upper = static_cast(u64 >> 32); - *this << lower << upper; - return *this; -} - -} // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/processor/binarystream.h b/toolkit/crashreporter/google-breakpad/src/processor/binarystream.h deleted file mode 100644 index 172e09b92f6e..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/processor/binarystream.h +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (c) 2010, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// binarystream implements part of the std::iostream interface as a -// wrapper around std::stringstream to allow reading and writing strings -// and integers of known size. - -#ifndef GOOGLE_BREAKPAD_PROCESSOR_BINARYSTREAM_H_ -#define GOOGLE_BREAKPAD_PROCESSOR_BINARYSTREAM_H_ - -#include -#include - -#include "common/using_std_string.h" -#include "google_breakpad/common/breakpad_types.h" - -namespace google_breakpad { -using std::ios_base; -using std::ios; - -class binarystream { - public: - explicit binarystream(ios_base::openmode which = ios_base::out|ios_base::in) - : stream_(which) {} - explicit binarystream(const string &str, - ios_base::openmode which = ios_base::out|ios_base::in) - : stream_(str, which) {} - explicit binarystream(const char *str, size_t size, - ios_base::openmode which = ios_base::out|ios_base::in) - : stream_(string(str, size), which) {} - - binarystream &operator>>(string &str); - binarystream &operator>>(uint8_t &u8); - binarystream &operator>>(uint16_t &u16); - binarystream &operator>>(uint32_t &u32); - binarystream &operator>>(uint64_t &u64); - - // Note: strings are truncated at 65535 characters - binarystream &operator<<(const string &str); - binarystream &operator<<(uint8_t u8); - binarystream &operator<<(uint16_t u16); - binarystream &operator<<(uint32_t u32); - binarystream &operator<<(uint64_t u64); - - // Forward a few methods directly from the stream object - bool eof() const { return stream_.eof(); } - void clear() { stream_.clear(); } - string str() const { return stream_.str(); } - void str(const string &s) { stream_.str(s); } - - // Seek both read and write pointers to the beginning of the stream. - void rewind() { - stream_.seekg (0, ios::beg); - stream_.seekp (0, ios::beg); - // This is to clear all the error flags, since only the EOF flag is cleared - // with seekg(). - stream_.clear(); - } - - private: - std::stringstream stream_; -}; - -} // namespace google_breakpad - -#endif // GOOGLE_BREAKPAD_PROCESSOR_BINARYSTREAM_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/processor/binarystream_unittest.cc b/toolkit/crashreporter/google-breakpad/src/processor/binarystream_unittest.cc deleted file mode 100644 index bf020edb914f..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/processor/binarystream_unittest.cc +++ /dev/null @@ -1,432 +0,0 @@ -// Copyright (c) 2010, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#include -#include -#include - -#include "breakpad_googletest_includes.h" -#include "common/using_std_string.h" -#include "processor/binarystream.h" - -namespace { -using std::ios_base; -using std::vector; -using google_breakpad::binarystream; - - -class BinaryStreamBasicTest : public ::testing::Test { -protected: - binarystream stream; -}; - -TEST_F(BinaryStreamBasicTest, ReadU8) { - uint8_t u8 = 0; - ASSERT_FALSE(stream.eof()); - stream >> u8; - ASSERT_TRUE(stream.eof()); - EXPECT_EQ(0U, u8); - stream.rewind(); - stream.clear(); - stream << (uint8_t)1; - ASSERT_FALSE(stream.eof()); - stream >> u8; - EXPECT_EQ(1, u8); - EXPECT_FALSE(stream.eof()); -} - -TEST_F(BinaryStreamBasicTest, ReadU16) { - uint16_t u16 = 0; - ASSERT_FALSE(stream.eof()); - stream >> u16; - ASSERT_TRUE(stream.eof()); - EXPECT_EQ(0U, u16); - stream.rewind(); - stream.clear(); - stream << (uint16_t)1; - ASSERT_FALSE(stream.eof()); - stream >> u16; - EXPECT_EQ(1, u16); - EXPECT_FALSE(stream.eof()); -} - -TEST_F(BinaryStreamBasicTest, ReadU32) { - uint32_t u32 = 0; - ASSERT_FALSE(stream.eof()); - stream >> u32; - ASSERT_TRUE(stream.eof()); - EXPECT_EQ(0U, u32); - stream.rewind(); - stream.clear(); - stream << (uint32_t)1; - ASSERT_FALSE(stream.eof()); - stream >> u32; - EXPECT_EQ(1U, u32); - EXPECT_FALSE(stream.eof()); -} - -TEST_F(BinaryStreamBasicTest, ReadU64) { - uint64_t u64 = 0; - ASSERT_FALSE(stream.eof()); - stream >> u64; - ASSERT_TRUE(stream.eof()); - EXPECT_EQ(0U, u64); - stream.rewind(); - stream.clear(); - stream << (uint64_t)1; - ASSERT_FALSE(stream.eof()); - stream >> u64; - EXPECT_EQ(1U, u64); - EXPECT_FALSE(stream.eof()); -} - -TEST_F(BinaryStreamBasicTest, ReadString) { - string s(""); - ASSERT_FALSE(stream.eof()); - stream >> s; - ASSERT_TRUE(stream.eof()); - EXPECT_EQ("", s); - // write an empty string to the stream, read it back - s = "abcd"; - stream.rewind(); - stream.clear(); - stream << string(""); - stream >> s; - EXPECT_EQ("", s); - EXPECT_FALSE(stream.eof()); - stream.rewind(); - stream.clear(); - stream << string("test"); - ASSERT_FALSE(stream.eof()); - stream >> s; - EXPECT_EQ("test", s); - EXPECT_FALSE(stream.eof()); -} - -TEST_F(BinaryStreamBasicTest, ReadEmptyString) { - string s("abc"); - stream << string(""); - stream >> s; - EXPECT_EQ("", s); -} - -TEST_F(BinaryStreamBasicTest, ReadMultiU8) { - const uint8_t ea = 0, eb = 100, ec = 200, ed = 0xFF; - uint8_t a, b, c, d, e; - stream << ea << eb << ec << ed; - stream >> a >> b >> c >> d; - ASSERT_FALSE(stream.eof()); - EXPECT_EQ(ea, a); - EXPECT_EQ(eb, b); - EXPECT_EQ(ec, c); - EXPECT_EQ(ed, d); - ASSERT_FALSE(stream.eof()); - e = 0; - stream >> e; - EXPECT_EQ(0U, e); - ASSERT_TRUE(stream.eof()); - // try reading all at once, including one past eof - stream.rewind(); - stream.clear(); - ASSERT_FALSE(stream.eof()); - a = b = c = d = e = 0; - stream << ea << eb << ec << ed; - stream >> a >> b >> c >> d >> e; - EXPECT_EQ(ea, a); - EXPECT_EQ(eb, b); - EXPECT_EQ(ec, c); - EXPECT_EQ(ed, d); - EXPECT_EQ(0U, e); - EXPECT_TRUE(stream.eof()); -} - -TEST_F(BinaryStreamBasicTest, ReadMultiU16) { - const uint16_t ea = 0, eb = 0x100, ec = 0x8000, ed = 0xFFFF; - uint16_t a, b, c, d, e; - stream << ea << eb << ec << ed; - stream >> a >> b >> c >> d; - ASSERT_FALSE(stream.eof()); - EXPECT_EQ(ea, a); - EXPECT_EQ(eb, b); - EXPECT_EQ(ec, c); - EXPECT_EQ(ed, d); - ASSERT_FALSE(stream.eof()); - e = 0; - stream >> e; - EXPECT_EQ(0U, e); - EXPECT_TRUE(stream.eof()); - // try reading all at once, including one past eof - stream.rewind(); - stream.clear(); - ASSERT_FALSE(stream.eof()); - a = b = c = d = e = 0; - stream << ea << eb << ec << ed; - stream >> a >> b >> c >> d >> e; - EXPECT_EQ(ea, a); - EXPECT_EQ(eb, b); - EXPECT_EQ(ec, c); - EXPECT_EQ(ed, d); - EXPECT_EQ(0U, e); - EXPECT_TRUE(stream.eof()); -} - -TEST_F(BinaryStreamBasicTest, ReadMultiU32) { - const uint32_t ea = 0, eb = 0x10000, ec = 0x8000000, ed = 0xFFFFFFFF; - uint32_t a, b, c, d, e; - stream << ea << eb << ec << ed; - stream >> a >> b >> c >> d; - ASSERT_FALSE(stream.eof()); - EXPECT_EQ(ea, a); - EXPECT_EQ(eb, b); - EXPECT_EQ(ec, c); - EXPECT_EQ(ed, d); - ASSERT_FALSE(stream.eof()); - e = 0; - stream >> e; - EXPECT_EQ(0U, e); - EXPECT_TRUE(stream.eof()); - // try reading all at once, including one past eof - stream.rewind(); - stream.clear(); - ASSERT_FALSE(stream.eof()); - a = b = c = d = e = 0; - stream << ea << eb << ec << ed; - stream >> a >> b >> c >> d >> e; - EXPECT_EQ(ea, a); - EXPECT_EQ(eb, b); - EXPECT_EQ(ec, c); - EXPECT_EQ(ed, d); - EXPECT_EQ(0U, e); - EXPECT_TRUE(stream.eof()); -} - -TEST_F(BinaryStreamBasicTest, ReadMultiU64) { - const uint64_t ea = 0, eb = 0x10000, ec = 0x100000000ULL, - ed = 0xFFFFFFFFFFFFFFFFULL; - uint64_t a, b, c, d, e; - stream << ea << eb << ec << ed; - stream >> a >> b >> c >> d; - ASSERT_FALSE(stream.eof()); - EXPECT_EQ(ea, a); - EXPECT_EQ(eb, b); - EXPECT_EQ(ec, c); - EXPECT_EQ(ed, d); - ASSERT_FALSE(stream.eof()); - e = 0; - stream >> e; - EXPECT_EQ(0U, e); - EXPECT_TRUE(stream.eof()); - // try reading all at once, including one past eof - stream.rewind(); - stream.clear(); - ASSERT_FALSE(stream.eof()); - a = b = c = d = e = 0; - stream << ea << eb << ec << ed; - stream >> a >> b >> c >> d >> e; - EXPECT_EQ(ea, a); - EXPECT_EQ(eb, b); - EXPECT_EQ(ec, c); - EXPECT_EQ(ed, d); - EXPECT_EQ(0U, e); - EXPECT_TRUE(stream.eof()); -} - -TEST_F(BinaryStreamBasicTest, ReadMixed) { - const uint8_t e8 = 0x10; - const uint16_t e16 = 0x2020; - const uint32_t e32 = 0x30303030; - const uint64_t e64 = 0x4040404040404040ULL; - const string es = "test"; - uint8_t u8 = 0; - uint16_t u16 = 0; - uint32_t u32 = 0; - uint64_t u64 = 0; - string s("test"); - stream << e8 << e16 << e32 << e64 << es; - stream >> u8 >> u16 >> u32 >> u64 >> s; - EXPECT_FALSE(stream.eof()); - EXPECT_EQ(e8, u8); - EXPECT_EQ(e16, u16); - EXPECT_EQ(e32, u32); - EXPECT_EQ(e64, u64); - EXPECT_EQ(es, s); -} - -TEST_F(BinaryStreamBasicTest, ReadStringMissing) { - // ensure that reading a string where only the length is present fails - uint16_t u16 = 8; - stream << u16; - stream.rewind(); - string s(""); - stream >> s; - EXPECT_EQ("", s); - EXPECT_TRUE(stream.eof()); -} - -TEST_F(BinaryStreamBasicTest, ReadStringTruncated) { - // ensure that reading a string where not all the data is present fails - uint16_t u16 = 8; - stream << u16; - stream << (uint8_t)'t' << (uint8_t)'e' << (uint8_t)'s' << (uint8_t)'t'; - stream.rewind(); - string s(""); - stream >> s; - EXPECT_EQ("", s); - EXPECT_TRUE(stream.eof()); -} - -TEST_F(BinaryStreamBasicTest, StreamByteLength) { - // Test that the stream buffer contains the right amount of data - stream << (uint8_t)0 << (uint16_t)1 << (uint32_t)2 << (uint64_t)3 - << string("test"); - string s = stream.str(); - EXPECT_EQ(21U, s.length()); -} - -TEST_F(BinaryStreamBasicTest, AppendStreamResultsByteLength) { - // Test that appending the str() results from two streams - // gives the right byte length - binarystream stream2; - stream << (uint8_t)0 << (uint16_t)1; - stream2 << (uint32_t)0 << (uint64_t)2 - << string("test"); - string s = stream.str(); - string s2 = stream2.str(); - s.append(s2); - EXPECT_EQ(21U, s.length()); -} - -TEST_F(BinaryStreamBasicTest, StreamSetStr) { - const string es("test"); - stream << es; - binarystream stream2; - stream2.str(stream.str()); - string s; - stream2 >> s; - EXPECT_FALSE(stream2.eof()); - EXPECT_EQ("test", s); - s = ""; - stream2.str(stream.str()); - stream2.rewind(); - stream2 >> s; - EXPECT_FALSE(stream2.eof()); - EXPECT_EQ("test", s); -} - -class BinaryStreamU8Test : public ::testing::Test { -protected: - binarystream stream; - - void SetUp() { - stream << (uint8_t)1; - } -}; - -TEST_F(BinaryStreamU8Test, ReadU16) { - uint16_t u16 = 0; - ASSERT_FALSE(stream.eof()); - stream >> u16; - ASSERT_TRUE(stream.eof()); - EXPECT_EQ(0U, u16); -} - -TEST_F(BinaryStreamU8Test, ReadU32) { - uint32_t u32 = 0; - ASSERT_FALSE(stream.eof()); - stream >> u32; - ASSERT_TRUE(stream.eof()); - EXPECT_EQ(0U, u32); -} - -TEST_F(BinaryStreamU8Test, ReadU64) { - uint64_t u64 = 0; - ASSERT_FALSE(stream.eof()); - stream >> u64; - ASSERT_TRUE(stream.eof()); - EXPECT_EQ(0U, u64); -} - -TEST_F(BinaryStreamU8Test, ReadString) { - string s(""); - ASSERT_FALSE(stream.eof()); - stream >> s; - ASSERT_TRUE(stream.eof()); - EXPECT_EQ("", s); -} - - -TEST(BinaryStreamTest, InitWithData) { - const char *data = "abcd"; - binarystream stream(data); - uint8_t a, b, c, d; - stream >> a >> b >> c >> d; - ASSERT_FALSE(stream.eof()); - EXPECT_EQ('a', a); - EXPECT_EQ('b', b); - EXPECT_EQ('c', c); - EXPECT_EQ('d', d); -} - -TEST(BinaryStreamTest, InitWithDataLeadingNull) { - const char *data = "\0abcd"; - binarystream stream(data, 5); - uint8_t z, a, b, c, d; - stream >> z >> a >> b >> c >> d; - ASSERT_FALSE(stream.eof()); - EXPECT_EQ(0U, z); - EXPECT_EQ('a', a); - EXPECT_EQ('b', b); - EXPECT_EQ('c', c); - EXPECT_EQ('d', d); -} - -TEST(BinaryStreamTest, InitWithDataVector) { - vector data; - data.push_back('a'); - data.push_back('b'); - data.push_back('c'); - data.push_back('d'); - data.push_back('e'); - data.resize(4); - binarystream stream(&data[0], data.size()); - uint8_t a, b, c, d; - stream >> a >> b >> c >> d; - ASSERT_FALSE(stream.eof()); - EXPECT_EQ('a', a); - EXPECT_EQ('b', b); - EXPECT_EQ('c', c); - EXPECT_EQ('d', d); -} - -} // namespace - -int main(int argc, char *argv[]) { - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/toolkit/crashreporter/google-breakpad/src/processor/cfi_frame_info-inl.h b/toolkit/crashreporter/google-breakpad/src/processor/cfi_frame_info-inl.h index d8f5f9bea4dd..7e7af0af93af 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/cfi_frame_info-inl.h +++ b/toolkit/crashreporter/google-breakpad/src/processor/cfi_frame_info-inl.h @@ -40,29 +40,30 @@ namespace google_breakpad { -template -bool SimpleCFIWalker::FindCallerRegisters( +template +bool SimpleCFIWalker::FindCallerRegisters( const MemoryRegion &memory, const CFIFrameInfo &cfi_frame_info, const RawContextType &callee_context, int callee_validity, RawContextType *caller_context, int *caller_validity) const { - typedef CFIFrameInfo::RegisterValueMap ValueMap; + typedef CFIFrameInfo::RegisterValueMap ValueMap; ValueMap callee_registers; ValueMap caller_registers; + // Just for brevity. + typename ValueMap::const_iterator caller_none = caller_registers.end(); // Populate callee_registers with register values from callee_context. for (size_t i = 0; i < map_size_; i++) { const RegisterSet &r = register_map_[i]; if (callee_validity & r.validity_flag) - callee_registers.set(r.name, callee_context.*r.context_member); + callee_registers[r.name] = callee_context.*r.context_member; } // Apply the rules, and see what register values they yield. - if (!cfi_frame_info - .FindCallerRegs(callee_registers, memory, - &caller_registers)) + if (!cfi_frame_info.FindCallerRegs(callee_registers, memory, + &caller_registers)) return false; // Populate *caller_context with the values the rules placed in @@ -71,12 +72,12 @@ bool SimpleCFIWalker::FindCallerRegisters( *caller_validity = 0; for (size_t i = 0; i < map_size_; i++) { const RegisterSet &r = register_map_[i]; + typename ValueMap::const_iterator caller_entry; // Did the rules provide a value for this register by its name? - bool found = false; - RegisterValueType v = caller_registers.get(&found, r.name); - if (found) { - caller_context->*r.context_member = v; + caller_entry = caller_registers.find(r.name); + if (caller_entry != caller_none) { + caller_context->*r.context_member = caller_entry->second; *caller_validity |= r.validity_flag; continue; } @@ -84,10 +85,9 @@ bool SimpleCFIWalker::FindCallerRegisters( // Did the rules provide a value for this register under its // alternate name? if (r.alternate_name) { - found = false; - v = caller_registers.get(&found, r.alternate_name); - if (found) { - caller_context->*r.context_member = v; + caller_entry = caller_registers.find(r.alternate_name); + if (caller_entry != caller_none) { + caller_context->*r.context_member = caller_entry->second; *caller_validity |= r.validity_flag; continue; } diff --git a/toolkit/crashreporter/google-breakpad/src/processor/cfi_frame_info.cc b/toolkit/crashreporter/google-breakpad/src/processor/cfi_frame_info.cc index ebaf4533e827..0c4af7ba843a 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/cfi_frame_info.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/cfi_frame_info.cc @@ -36,7 +36,6 @@ #include -#include #include #include "common/scoped_ptr.h" @@ -44,7 +43,7 @@ namespace google_breakpad { -#ifdef _WIN32 +#ifdef _MSC_VER #define strtok_r strtok_s #endif @@ -54,7 +53,7 @@ bool CFIFrameInfo::FindCallerRegs(const RegisterValueMap ®isters, RegisterValueMap *caller_registers) const { // If there are not rules for both .ra and .cfa in effect at this address, // don't use this CFI data for stack walking. - if (cfa_rule_.isExprInvalid() || ra_rule_.isExprInvalid()) + if (cfa_rule_.empty() || ra_rule_.empty()) return false; RegisterValueMap working; @@ -71,7 +70,7 @@ bool CFIFrameInfo::FindCallerRegs(const RegisterValueMap ®isters, // Then, compute the return address. V ra; working = registers; - working.set(ustr__ZDcfa(), cfa); + working[".cfa"] = cfa; if (!evaluator.EvaluateForValue(ra_rule_, &ra)) return false; @@ -80,14 +79,14 @@ bool CFIFrameInfo::FindCallerRegs(const RegisterValueMap ®isters, it != register_rules_.end(); it++) { V value; working = registers; - working.set(ustr__ZDcfa(), cfa); + working[".cfa"] = cfa; if (!evaluator.EvaluateForValue(it->second, &value)) return false; - caller_registers->set(it->first, value); + (*caller_registers)[it->first] = value; } - caller_registers->set(ustr__ZDra(), ra); - caller_registers->set(ustr__ZDcfa(), cfa); + (*caller_registers)[".ra"] = ra; + (*caller_registers)[".cfa"] = cfa; return true; } @@ -105,37 +104,20 @@ template bool CFIFrameInfo::FindCallerRegs( string CFIFrameInfo::Serialize() const { std::ostringstream stream; - if (!cfa_rule_.isExprInvalid()) { + if (!cfa_rule_.empty()) { stream << ".cfa: " << cfa_rule_; } - if (!ra_rule_.isExprInvalid()) { + if (!ra_rule_.empty()) { if (static_cast(stream.tellp()) != 0) stream << " "; stream << ".ra: " << ra_rule_; } - - // Visit the register rules in alphabetical order. Because - // register_rules_ has the elements in some arbitrary order, - // get the names out into a vector, sort them, and visit in - // sorted order. - std::vector rr_names; for (RuleMap::const_iterator iter = register_rules_.begin(); iter != register_rules_.end(); ++iter) { - rr_names.push_back(iter->first); - } - - std::sort(rr_names.begin(), rr_names.end(), LessThan_UniqueString); - - // Now visit the register rules in alphabetical order. - for (std::vector::const_iterator name = rr_names.begin(); - name != rr_names.end(); - ++name) { - const UniqueString* nm = *name; - Module::Expr rule = register_rules_.find(nm)->second; if (static_cast(stream.tellp()) != 0) stream << " "; - stream << FromUniqueString(nm) << ": " << rule; + stream << iter->first << ": " << iter->second; } return stream.str(); @@ -147,7 +129,7 @@ bool CFIRuleParser::Parse(const string &rule_set) { memcpy(working_copy.get(), rule_set.data(), rule_set_len); working_copy[rule_set_len] = '\0'; - name_ = ustr__empty(); + name_.clear(); expression_.clear(); char *cursor; @@ -164,10 +146,10 @@ bool CFIRuleParser::Parse(const string &rule_set) { // Names can't be empty. if (token_len < 2) return false; // If there is any pending content, report it. - if (name_ != ustr__empty() || !expression_.empty()) { + if (!name_.empty() || !expression_.empty()) { if (!Report()) return false; } - name_ = ToUniqueString_n(token, token_len - 1); + name_.assign(token, token_len - 1); expression_.clear(); } else { // Another expression component. @@ -181,25 +163,24 @@ bool CFIRuleParser::Parse(const string &rule_set) { } bool CFIRuleParser::Report() { - if (name_ == ustr__empty() || expression_.empty()) return false; - if (name_ == ustr__ZDcfa()) handler_->CFARule(expression_); - else if (name_ == ustr__ZDra()) handler_->RARule(expression_); + if (name_.empty() || expression_.empty()) return false; + if (name_ == ".cfa") handler_->CFARule(expression_); + else if (name_ == ".ra") handler_->RARule(expression_); else handler_->RegisterRule(name_, expression_); return true; } void CFIFrameInfoParseHandler::CFARule(const string &expression) { - // 'expression' is a postfix expression string. - frame_info_->SetCFARule(Module::Expr(expression)); + frame_info_->SetCFARule(expression); } void CFIFrameInfoParseHandler::RARule(const string &expression) { - frame_info_->SetRARule(Module::Expr(expression)); + frame_info_->SetRARule(expression); } -void CFIFrameInfoParseHandler::RegisterRule(const UniqueString* name, +void CFIFrameInfoParseHandler::RegisterRule(const string &name, const string &expression) { - frame_info_->SetRegisterRule(name, Module::Expr(expression)); + frame_info_->SetRegisterRule(name, expression); } } // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/processor/cfi_frame_info.h b/toolkit/crashreporter/google-breakpad/src/processor/cfi_frame_info.h index 7e85af829855..bba2978ebd10 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/cfi_frame_info.h +++ b/toolkit/crashreporter/google-breakpad/src/processor/cfi_frame_info.h @@ -42,9 +42,7 @@ #include #include "common/using_std_string.h" -#include "common/unique_string.h" #include "google_breakpad/common/breakpad_types.h" -#include "common/module.h" namespace google_breakpad { @@ -68,17 +66,16 @@ class MemoryRegion; class CFIFrameInfo { public: // A map from register names onto values. - template class RegisterValueMap: - public UniqueStringMap { }; + template class RegisterValueMap: + public map { }; // Set the expression for computing a call frame address, return // address, or register's value. At least the CFA rule and the RA // rule must be set before calling FindCallerRegs. - void SetCFARule(const Module::Expr& rule) { cfa_rule_ = rule; } - void SetRARule(const Module::Expr& rule) { ra_rule_ = rule; } - void SetRegisterRule(const UniqueString* register_name, - const Module::Expr& rule) { - register_rules_[register_name] = rule; + void SetCFARule(const string &expression) { cfa_rule_ = expression; } + void SetRARule(const string &expression) { ra_rule_ = expression; } + void SetRegisterRule(const string ®ister_name, const string &expression) { + register_rules_[register_name] = expression; } // Compute the values of the calling frame's registers, according to @@ -109,23 +106,27 @@ class CFIFrameInfo { private: - // A map from register names onto evaluation rules. - typedef map RuleMap; + // A map from register names onto evaluation rules. + typedef map RuleMap; - // An expression for computing the current frame's CFA (call + // In this type, a "postfix expression" is an expression of the sort + // interpreted by google_breakpad::PostfixEvaluator. + + // A postfix expression for computing the current frame's CFA (call // frame address). The CFA is a reference address for the frame that // remains unchanged throughout the frame's lifetime. You should // evaluate this expression with a dictionary initially populated // with the values of the current frame's known registers. - Module::Expr cfa_rule_; + string cfa_rule_; // The following expressions should be evaluated with a dictionary // initially populated with the values of the current frame's known // registers, and with ".cfa" set to the result of evaluating the // cfa_rule expression, above. - // An expression for computing the current frame's return address. - Module::Expr ra_rule_; + // A postfix expression for computing the current frame's return + // address. + string ra_rule_; // For a register named REG, rules[REG] is a postfix expression // which leaves the value of REG in the calling frame on the top of @@ -151,8 +152,7 @@ class CFIRuleParser { virtual void RARule(const string &expression) = 0; // The input specifies EXPRESSION as the recovery rule for register NAME. - virtual void RegisterRule(const UniqueString* name, - const string &expression) = 0; + virtual void RegisterRule(const string &name, const string &expression) = 0; }; // Construct a parser which feeds its results to HANDLER. @@ -172,8 +172,7 @@ class CFIRuleParser { Handler *handler_; // Working data. - const UniqueString* name_; - string expression_; + string name_, expression_; }; // A handler for rule set parsing that populates a CFIFrameInfo with @@ -186,7 +185,7 @@ class CFIFrameInfoParseHandler: public CFIRuleParser::Handler { void CFARule(const string &expression); void RARule(const string &expression); - void RegisterRule(const UniqueString* name, const string &expression); + void RegisterRule(const string &name, const string &expression); private: CFIFrameInfo *frame_info_; @@ -213,14 +212,14 @@ class SimpleCFIWalker { // A structure describing one architecture register. struct RegisterSet { // The register name, as it appears in STACK CFI rules. - const UniqueString* name; + const char *name; // An alternate name that the register's value might be found // under in a register value dictionary, or NULL. When generating // names, prefer NAME to this value. It's common to list ".cfa" as // an alternative name for the stack pointer, and ".ra" as an // alternative name for the instruction pointer. - const UniqueString* alternate_name; + const char *alternate_name; // True if the callee is expected to preserve the value of this // register. If this flag is true for some register R, and the STACK diff --git a/toolkit/crashreporter/google-breakpad/src/processor/cfi_frame_info_unittest.cc b/toolkit/crashreporter/google-breakpad/src/processor/cfi_frame_info_unittest.cc index ccf4ac305519..542b28492ee8 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/cfi_frame_info_unittest.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/cfi_frame_info_unittest.cc @@ -35,7 +35,6 @@ #include #include "breakpad_googletest_includes.h" -#include "common/module.h" #include "common/using_std_string.h" #include "processor/cfi_frame_info.h" #include "google_breakpad/processor/memory_region.h" @@ -43,14 +42,8 @@ using google_breakpad::CFIFrameInfo; using google_breakpad::CFIFrameInfoParseHandler; using google_breakpad::CFIRuleParser; -using google_breakpad::FromUniqueString; using google_breakpad::MemoryRegion; -using google_breakpad::Module; using google_breakpad::SimpleCFIWalker; -using google_breakpad::ToUniqueString; -using google_breakpad::UniqueString; -using google_breakpad::ustr__ZDcfa; -using google_breakpad::ustr__ZDra; using testing::_; using testing::A; using testing::AtMost; @@ -67,6 +60,7 @@ class MockMemoryRegion: public MemoryRegion { MOCK_CONST_METHOD2(GetMemoryAtAddress, bool(uint64_t, uint16_t *)); MOCK_CONST_METHOD2(GetMemoryAtAddress, bool(uint64_t, uint32_t *)); MOCK_CONST_METHOD2(GetMemoryAtAddress, bool(uint64_t, uint64_t *)); + MOCK_CONST_METHOD0(Print, void()); }; // Handy definitions for all tests. @@ -93,7 +87,7 @@ class Simple: public CFIFixture, public Test { }; TEST_F(Simple, NoCFA) { ExpectNoMemoryReferences(); - cfi.SetRARule(Module::Expr("0")); + cfi.SetRARule("0"); ASSERT_FALSE(cfi.FindCallerRegs(registers, memory, &caller_registers)); ASSERT_EQ(".ra: 0", cfi.Serialize()); @@ -103,7 +97,7 @@ TEST_F(Simple, NoCFA) { TEST_F(Simple, NoRA) { ExpectNoMemoryReferences(); - cfi.SetCFARule(Module::Expr("0")); + cfi.SetCFARule("0"); ASSERT_FALSE(cfi.FindCallerRegs(registers, memory, &caller_registers)); ASSERT_EQ(".cfa: 0", cfi.Serialize()); @@ -112,12 +106,13 @@ TEST_F(Simple, NoRA) { TEST_F(Simple, SetCFAAndRARule) { ExpectNoMemoryReferences(); - cfi.SetCFARule(Module::Expr("330903416631436410")); - cfi.SetRARule(Module::Expr("5870666104170902211")); + cfi.SetCFARule("330903416631436410"); + cfi.SetRARule("5870666104170902211"); ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, &caller_registers)); - ASSERT_EQ(330903416631436410ULL, caller_registers.get(ustr__ZDcfa())); - ASSERT_EQ(5870666104170902211ULL, caller_registers.get(ustr__ZDra())); + ASSERT_EQ(2U, caller_registers.size()); + ASSERT_EQ(330903416631436410ULL, caller_registers[".cfa"]); + ASSERT_EQ(5870666104170902211ULL, caller_registers[".ra"]); ASSERT_EQ(".cfa: 330903416631436410 .ra: 5870666104170902211", cfi.Serialize()); @@ -126,26 +121,21 @@ TEST_F(Simple, SetCFAAndRARule) { TEST_F(Simple, SetManyRules) { ExpectNoMemoryReferences(); - cfi.SetCFARule(Module::Expr("$temp1 68737028 = $temp2 61072337 = $temp1 $temp2 -")); - cfi.SetRARule(Module::Expr(".cfa 99804755 +")); - - const UniqueString* reg1 = ToUniqueString("register1"); - const UniqueString* reg2 = ToUniqueString("vodkathumbscrewingly"); - const UniqueString* reg3 = ToUniqueString("pubvexingfjordschmaltzy"); - const UniqueString* reg4 = ToUniqueString("uncopyrightables"); - - cfi.SetRegisterRule(reg1, Module::Expr(".cfa 54370437 *")); - cfi.SetRegisterRule(reg2, Module::Expr("24076308 .cfa +")); - cfi.SetRegisterRule(reg3, Module::Expr(".cfa 29801007 -")); - cfi.SetRegisterRule(reg4, Module::Expr("92642917 .cfa /")); + cfi.SetCFARule("$temp1 68737028 = $temp2 61072337 = $temp1 $temp2 -"); + cfi.SetRARule(".cfa 99804755 +"); + cfi.SetRegisterRule("register1", ".cfa 54370437 *"); + cfi.SetRegisterRule("vodkathumbscrewingly", "24076308 .cfa +"); + cfi.SetRegisterRule("pubvexingfjordschmaltzy", ".cfa 29801007 -"); + cfi.SetRegisterRule("uncopyrightables", "92642917 .cfa /"); ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, &caller_registers)); - ASSERT_EQ(7664691U, caller_registers.get(ustr__ZDcfa())); - ASSERT_EQ(107469446U, caller_registers.get(ustr__ZDra())); - ASSERT_EQ(416732599139967ULL, caller_registers.get(reg1)); - ASSERT_EQ(31740999U, caller_registers.get(reg2)); - ASSERT_EQ(-22136316ULL, caller_registers.get(reg3)); - ASSERT_EQ(12U, caller_registers.get(reg4)); + ASSERT_EQ(6U, caller_registers.size()); + ASSERT_EQ(7664691U, caller_registers[".cfa"]); + ASSERT_EQ(107469446U, caller_registers[".ra"]); + ASSERT_EQ(416732599139967ULL, caller_registers["register1"]); + ASSERT_EQ(31740999U, caller_registers["vodkathumbscrewingly"]); + ASSERT_EQ(-22136316ULL, caller_registers["pubvexingfjordschmaltzy"]); + ASSERT_EQ(12U, caller_registers["uncopyrightables"]); ASSERT_EQ(".cfa: $temp1 68737028 = $temp2 61072337 = $temp1 $temp2 - " ".ra: .cfa 99804755 + " "pubvexingfjordschmaltzy: .cfa 29801007 - " @@ -158,13 +148,14 @@ TEST_F(Simple, SetManyRules) { TEST_F(Simple, RulesOverride) { ExpectNoMemoryReferences(); - cfi.SetCFARule(Module::Expr("330903416631436410")); - cfi.SetRARule(Module::Expr("5870666104170902211")); - cfi.SetCFARule(Module::Expr("2828089117179001")); + cfi.SetCFARule("330903416631436410"); + cfi.SetRARule("5870666104170902211"); + cfi.SetCFARule("2828089117179001"); ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, &caller_registers)); - ASSERT_EQ(2828089117179001ULL, caller_registers.get(ustr__ZDcfa())); - ASSERT_EQ(5870666104170902211ULL, caller_registers.get(ustr__ZDra())); + ASSERT_EQ(2U, caller_registers.size()); + ASSERT_EQ(2828089117179001ULL, caller_registers[".cfa"]); + ASSERT_EQ(5870666104170902211ULL, caller_registers[".ra"]); ASSERT_EQ(".cfa: 2828089117179001 .ra: 5870666104170902211", cfi.Serialize()); } @@ -175,8 +166,8 @@ class Scope: public CFIFixture, public Test { }; TEST_F(Scope, CFALacksCFA) { ExpectNoMemoryReferences(); - cfi.SetCFARule(Module::Expr(".cfa")); - cfi.SetRARule(Module::Expr("0")); + cfi.SetCFARule(".cfa"); + cfi.SetRARule("0"); ASSERT_FALSE(cfi.FindCallerRegs(registers, memory, &caller_registers)); } @@ -185,8 +176,8 @@ TEST_F(Scope, CFALacksCFA) { TEST_F(Scope, CFALacksRA) { ExpectNoMemoryReferences(); - cfi.SetCFARule(Module::Expr(".ra")); - cfi.SetRARule(Module::Expr("0")); + cfi.SetCFARule(".ra"); + cfi.SetRARule("0"); ASSERT_FALSE(cfi.FindCallerRegs(registers, memory, &caller_registers)); } @@ -196,35 +187,35 @@ TEST_F(Scope, CFALacksRA) { TEST_F(Scope, CFASeesCurrentRegs) { ExpectNoMemoryReferences(); - const UniqueString* reg1 = ToUniqueString(".baraminology"); - const UniqueString* reg2 = ToUniqueString(".ornithorhynchus"); - registers.set(reg1, 0x06a7bc63e4f13893ULL); - registers.set(reg2, 0x5e0bf850bafce9d2ULL); - cfi.SetCFARule(Module::Expr(".baraminology .ornithorhynchus +")); - cfi.SetRARule(Module::Expr("0")); + registers[".baraminology"] = 0x06a7bc63e4f13893ULL; + registers[".ornithorhynchus"] = 0x5e0bf850bafce9d2ULL; + cfi.SetCFARule(".baraminology .ornithorhynchus +"); + cfi.SetRARule("0"); ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, &caller_registers)); + ASSERT_EQ(2U, caller_registers.size()); ASSERT_EQ(0x06a7bc63e4f13893ULL + 0x5e0bf850bafce9d2ULL, - caller_registers.get(ustr__ZDcfa())); + caller_registers[".cfa"]); } // .cfa should be in scope in the return address expression. TEST_F(Scope, RASeesCFA) { ExpectNoMemoryReferences(); - cfi.SetCFARule(Module::Expr("48364076")); - cfi.SetRARule(Module::Expr(".cfa")); + cfi.SetCFARule("48364076"); + cfi.SetRARule(".cfa"); ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, &caller_registers)); - ASSERT_EQ(48364076U, caller_registers.get(ustr__ZDra())); + ASSERT_EQ(2U, caller_registers.size()); + ASSERT_EQ(48364076U, caller_registers[".ra"]); } // There should be no value for .ra in scope when evaluating the CFA rule. TEST_F(Scope, RALacksRA) { ExpectNoMemoryReferences(); - cfi.SetCFARule(Module::Expr("0")); - cfi.SetRARule(Module::Expr(".ra")); + cfi.SetCFARule("0"); + cfi.SetRARule(".ra"); ASSERT_FALSE(cfi.FindCallerRegs(registers, memory, &caller_registers)); } @@ -234,36 +225,35 @@ TEST_F(Scope, RALacksRA) { TEST_F(Scope, RASeesCurrentRegs) { ExpectNoMemoryReferences(); - cfi.SetCFARule(Module::Expr("10359370")); - const UniqueString* reg1 = ToUniqueString("noachian"); - registers.set(reg1, 0x54dc4a5d8e5eb503ULL); - cfi.SetRARule(Module::Expr(reg1, 0, false)); + registers["noachian"] = 0x54dc4a5d8e5eb503ULL; + cfi.SetCFARule("10359370"); + cfi.SetRARule("noachian"); ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, &caller_registers)); - ASSERT_EQ(0x54dc4a5d8e5eb503ULL, caller_registers.get(ustr__ZDra())); + ASSERT_EQ(2U, caller_registers.size()); + ASSERT_EQ(0x54dc4a5d8e5eb503ULL, caller_registers[".ra"]); } // .cfa should be in scope for register rules. TEST_F(Scope, RegistersSeeCFA) { ExpectNoMemoryReferences(); - cfi.SetCFARule(Module::Expr("6515179")); - cfi.SetRARule(Module::Expr(".cfa")); - const UniqueString* reg1 = ToUniqueString("rogerian"); - cfi.SetRegisterRule(reg1, Module::Expr(".cfa")); + cfi.SetCFARule("6515179"); + cfi.SetRARule(".cfa"); + cfi.SetRegisterRule("rogerian", ".cfa"); ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, &caller_registers)); - ASSERT_EQ(6515179U, caller_registers.get(reg1)); + ASSERT_EQ(3U, caller_registers.size()); + ASSERT_EQ(6515179U, caller_registers["rogerian"]); } // The return address should not be in scope for register rules. TEST_F(Scope, RegsLackRA) { ExpectNoMemoryReferences(); - cfi.SetCFARule(Module::Expr("42740329")); - cfi.SetRARule(Module::Expr("27045204")); - const UniqueString* reg1 = ToUniqueString("$r1"); - cfi.SetRegisterRule(reg1, Module::Expr(".ra")); + cfi.SetCFARule("42740329"); + cfi.SetRARule("27045204"); + cfi.SetRegisterRule("$r1", ".ra"); ASSERT_FALSE(cfi.FindCallerRegs(registers, memory, &caller_registers)); } @@ -272,31 +262,30 @@ TEST_F(Scope, RegsLackRA) { TEST_F(Scope, RegsSeeRegs) { ExpectNoMemoryReferences(); - const UniqueString* reg1 = ToUniqueString("$r1"); - const UniqueString* reg2 = ToUniqueString("$r2"); - registers.set(reg1, 0x6ed3582c4bedb9adULL); - registers.set(reg2, 0xd27d9e742b8df6d0ULL); - cfi.SetCFARule(Module::Expr("88239303")); - cfi.SetRARule(Module::Expr("30503835")); - cfi.SetRegisterRule(reg1, Module::Expr("$r1 42175211 = $r2")); - cfi.SetRegisterRule(reg2, Module::Expr("$r2 21357221 = $r1")); + registers["$r1"] = 0x6ed3582c4bedb9adULL; + registers["$r2"] = 0xd27d9e742b8df6d0ULL; + cfi.SetCFARule("88239303"); + cfi.SetRARule("30503835"); + cfi.SetRegisterRule("$r1", "$r1 42175211 = $r2"); + cfi.SetRegisterRule("$r2", "$r2 21357221 = $r1"); ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, &caller_registers)); - ASSERT_EQ(0xd27d9e742b8df6d0ULL, caller_registers.get(reg1)); - ASSERT_EQ(0x6ed3582c4bedb9adULL, caller_registers.get(reg2)); + ASSERT_EQ(4U, caller_registers.size()); + ASSERT_EQ(0xd27d9e742b8df6d0ULL, caller_registers["$r1"]); + ASSERT_EQ(0x6ed3582c4bedb9adULL, caller_registers["$r2"]); } // Each rule's temporaries are separate. TEST_F(Scope, SeparateTempsRA) { ExpectNoMemoryReferences(); - cfi.SetCFARule(Module::Expr("$temp1 76569129 = $temp1")); - cfi.SetRARule(Module::Expr("0")); + cfi.SetCFARule("$temp1 76569129 = $temp1"); + cfi.SetRARule("0"); ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, &caller_registers)); - cfi.SetCFARule(Module::Expr("$temp1 76569129 = $temp1")); - cfi.SetRARule(Module::Expr("$temp1")); + cfi.SetCFARule("$temp1 76569129 = $temp1"); + cfi.SetRARule("$temp1"); ASSERT_FALSE(cfi.FindCallerRegs(registers, memory, &caller_registers)); } @@ -305,7 +294,7 @@ class MockCFIRuleParserHandler: public CFIRuleParser::Handler { public: MOCK_METHOD1(CFARule, void(const string &)); MOCK_METHOD1(RARule, void(const string &)); - MOCK_METHOD2(RegisterRule, void(const UniqueString*, const string &)); + MOCK_METHOD2(RegisterRule, void(const string &, const string &)); }; // A fixture class for testing CFIRuleParser. @@ -376,7 +365,7 @@ TEST_F(Parser, RA) { } TEST_F(Parser, Reg) { - EXPECT_CALL(mock_handler, RegisterRule(ToUniqueString("nemo"), "mellifluous")) + EXPECT_CALL(mock_handler, RegisterRule("nemo", "mellifluous")) .WillOnce(Return()); EXPECT_TRUE(parser.Parse("nemo: mellifluous")); } @@ -384,18 +373,18 @@ TEST_F(Parser, Reg) { TEST_F(Parser, CFARARegs) { EXPECT_CALL(mock_handler, CFARule("cfa expression")).WillOnce(Return()); EXPECT_CALL(mock_handler, RARule("ra expression")).WillOnce(Return()); - EXPECT_CALL(mock_handler, RegisterRule(ToUniqueString("galba"), "praetorian")) + EXPECT_CALL(mock_handler, RegisterRule("galba", "praetorian")) .WillOnce(Return()); - EXPECT_CALL(mock_handler, RegisterRule(ToUniqueString("otho"), "vitellius")) + EXPECT_CALL(mock_handler, RegisterRule("otho", "vitellius")) .WillOnce(Return()); EXPECT_TRUE(parser.Parse(".cfa: cfa expression .ra: ra expression " "galba: praetorian otho: vitellius")); } TEST_F(Parser, Whitespace) { - EXPECT_CALL(mock_handler, RegisterRule(ToUniqueString("r1"), "r1 expression")) + EXPECT_CALL(mock_handler, RegisterRule("r1", "r1 expression")) .WillOnce(Return()); - EXPECT_CALL(mock_handler, RegisterRule(ToUniqueString("r2"), "r2 expression")) + EXPECT_CALL(mock_handler, RegisterRule("r2", "r2 expression")) .WillOnce(Return()); EXPECT_TRUE(parser.Parse(" r1:\tr1\nexpression \tr2:\t\rr2\r\n " "expression \n")); @@ -406,21 +395,21 @@ TEST_F(Parser, WhitespaceLoneColon) { } TEST_F(Parser, EmptyName) { - EXPECT_CALL(mock_handler, RegisterRule(ToUniqueString("reg"), _)) + EXPECT_CALL(mock_handler, RegisterRule("reg", _)) .Times(AtMost(1)) .WillRepeatedly(Return()); EXPECT_FALSE(parser.Parse("reg: expr1 : expr2")); } TEST_F(Parser, RuleLoneColon) { - EXPECT_CALL(mock_handler, RegisterRule(ToUniqueString("r1"), "expr")) + EXPECT_CALL(mock_handler, RegisterRule("r1", "expr")) .Times(AtMost(1)) .WillRepeatedly(Return()); EXPECT_FALSE(parser.Parse(" r1: expr :")); } TEST_F(Parser, RegNoExprRule) { - EXPECT_CALL(mock_handler, RegisterRule(ToUniqueString("r1"), "expr")) + EXPECT_CALL(mock_handler, RegisterRule("r1", "expr")) .Times(AtMost(1)) .WillRepeatedly(Return()); EXPECT_FALSE(parser.Parse("r0: r1: expr")); @@ -437,29 +426,29 @@ class ParseHandler: public ParseHandlerFixture, public Test { }; TEST_F(ParseHandler, CFARARule) { handler.CFARule("reg-for-cfa"); handler.RARule("reg-for-ra"); - registers.set(ToUniqueString("reg-for-cfa"), 0x268a9a4a3821a797ULL); - registers.set(ToUniqueString("reg-for-ra"), 0x6301b475b8b91c02ULL); + registers["reg-for-cfa"] = 0x268a9a4a3821a797ULL; + registers["reg-for-ra"] = 0x6301b475b8b91c02ULL; ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, &caller_registers)); - ASSERT_EQ(0x268a9a4a3821a797ULL, caller_registers.get(ustr__ZDcfa())); - ASSERT_EQ(0x6301b475b8b91c02ULL, caller_registers.get(ustr__ZDra())); + ASSERT_EQ(0x268a9a4a3821a797ULL, caller_registers[".cfa"]); + ASSERT_EQ(0x6301b475b8b91c02ULL, caller_registers[".ra"]); } TEST_F(ParseHandler, RegisterRules) { handler.CFARule("reg-for-cfa"); handler.RARule("reg-for-ra"); - handler.RegisterRule(ToUniqueString("reg1"), "reg-for-reg1"); - handler.RegisterRule(ToUniqueString("reg2"), "reg-for-reg2"); - registers.set(ToUniqueString("reg-for-cfa"), 0x268a9a4a3821a797ULL); - registers.set(ToUniqueString("reg-for-ra"), 0x6301b475b8b91c02ULL); - registers.set(ToUniqueString("reg-for-reg1"), 0x06cde8e2ff062481ULL); - registers.set(ToUniqueString("reg-for-reg2"), 0xff0c4f76403173e2ULL); + handler.RegisterRule("reg1", "reg-for-reg1"); + handler.RegisterRule("reg2", "reg-for-reg2"); + registers["reg-for-cfa"] = 0x268a9a4a3821a797ULL; + registers["reg-for-ra"] = 0x6301b475b8b91c02ULL; + registers["reg-for-reg1"] = 0x06cde8e2ff062481ULL; + registers["reg-for-reg2"] = 0xff0c4f76403173e2ULL; ASSERT_TRUE(cfi.FindCallerRegs(registers, memory, &caller_registers)); - ASSERT_EQ(0x268a9a4a3821a797ULL, caller_registers.get(ustr__ZDcfa())); - ASSERT_EQ(0x6301b475b8b91c02ULL, caller_registers.get(ustr__ZDra())); - ASSERT_EQ(0x06cde8e2ff062481ULL, caller_registers.get(ToUniqueString("reg1"))); - ASSERT_EQ(0xff0c4f76403173e2ULL, caller_registers.get(ToUniqueString("reg2"))); + ASSERT_EQ(0x268a9a4a3821a797ULL, caller_registers[".cfa"]); + ASSERT_EQ(0x6301b475b8b91c02ULL, caller_registers[".ra"]); + ASSERT_EQ(0x06cde8e2ff062481ULL, caller_registers["reg1"]); + ASSERT_EQ(0xff0c4f76403173e2ULL, caller_registers["reg2"]); } struct SimpleCFIWalkerFixture { @@ -490,13 +479,13 @@ struct SimpleCFIWalkerFixture { SimpleCFIWalkerFixture::CFIWalker::RegisterSet SimpleCFIWalkerFixture::register_map[7] = { - { ToUniqueString("r0"), NULL, true, R0_VALID, &RawContext::r0 }, - { ToUniqueString("r1"), NULL, true, R1_VALID, &RawContext::r1 }, - { ToUniqueString("r2"), NULL, false, R2_VALID, &RawContext::r2 }, - { ToUniqueString("r3"), NULL, false, R3_VALID, &RawContext::r3 }, - { ToUniqueString("r4"), NULL, true, R4_VALID, &RawContext::r4 }, - { ToUniqueString("sp"), ustr__ZDcfa(), true, SP_VALID, &RawContext::sp }, - { ToUniqueString("pc"), ustr__ZDra(), true, PC_VALID, &RawContext::pc }, + { "r0", NULL, true, R0_VALID, &RawContext::r0 }, + { "r1", NULL, true, R1_VALID, &RawContext::r1 }, + { "r2", NULL, false, R2_VALID, &RawContext::r2 }, + { "r3", NULL, false, R3_VALID, &RawContext::r3 }, + { "r4", NULL, true, R4_VALID, &RawContext::r4 }, + { "sp", ".cfa", true, SP_VALID, &RawContext::sp }, + { "pc", ".ra", true, PC_VALID, &RawContext::pc }, }; class SimpleWalker: public SimpleCFIWalkerFixture, public Test { }; @@ -529,12 +518,10 @@ TEST_F(SimpleWalker, Walk) { .WillRepeatedly(DoAll(SetArgumentPointee<1>(0xba5ad6d9acce28deULL), Return(true))); - call_frame_info.SetCFARule(Module::Expr("sp 24 +")); - call_frame_info.SetRARule(Module::Expr(".cfa 8 - ^")); - call_frame_info.SetRegisterRule(ToUniqueString("r0"), - Module::Expr(".cfa 24 - ^")); - call_frame_info.SetRegisterRule(ToUniqueString("r1"), - Module::Expr("r2")); + call_frame_info.SetCFARule("sp 24 +"); + call_frame_info.SetRARule(".cfa 8 - ^"); + call_frame_info.SetRegisterRule("r0", ".cfa 24 - ^"); + call_frame_info.SetRegisterRule("r1", "r2"); callee_context.r0 = 0x94e030ca79edd119ULL; callee_context.r1 = 0x937b4d7e95ce52d9ULL; diff --git a/toolkit/crashreporter/google-breakpad/src/processor/contained_range_map-inl.h b/toolkit/crashreporter/google-breakpad/src/processor/contained_range_map-inl.h index ef8d95c23f7f..4c0ad41f947d 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/contained_range_map-inl.h +++ b/toolkit/crashreporter/google-breakpad/src/processor/contained_range_map-inl.h @@ -40,7 +40,7 @@ #include -#include "common/logging.h" +#include "processor/logging.h" namespace google_breakpad { diff --git a/toolkit/crashreporter/google-breakpad/src/processor/disassembler_x86_unittest.cc b/toolkit/crashreporter/google-breakpad/src/processor/disassembler_x86_unittest.cc index b43dab046d7c..352905f20dac 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/disassembler_x86_unittest.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/disassembler_x86_unittest.cc @@ -1,3 +1,4 @@ +// Copyright (c) 2010, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -24,18 +25,7 @@ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE #include diff --git a/toolkit/crashreporter/google-breakpad/src/processor/dump_context.cc b/toolkit/crashreporter/google-breakpad/src/processor/dump_context.cc new file mode 100644 index 000000000000..49fb77b15fca --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/processor/dump_context.cc @@ -0,0 +1,657 @@ +// Copyright (c) 2010 Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// dump_context.cc: A (mini/micro)dump context. +// +// See dump_context.h for documentation. + +#include "google_breakpad/processor/dump_context.h" + +#include +#include + +#ifdef _WIN32 +#include +#if defined(_MSC_VER) && _MSC_VER < 1900 +#define snprintf _snprintf +#endif +#else // _WIN32 +#include +#endif // _WIN32 + +#include "processor/logging.h" + +namespace google_breakpad { + +DumpContext::DumpContext() : context_(), + context_flags_(0) { } + +DumpContext::~DumpContext() { + FreeContext(); +} + +uint32_t DumpContext::GetContextCPU() const { + if (!valid_) { + // Don't log a message, GetContextCPU can be legitimately called with + // valid_ false by FreeContext, which is called by Read. + return 0; + } + + return context_flags_ & MD_CONTEXT_CPU_MASK; +} + +uint32_t DumpContext::GetContextFlags() const { + return context_flags_; +} + +const MDRawContextX86* DumpContext::GetContextX86() const { + if (GetContextCPU() != MD_CONTEXT_X86) { + BPLOG(ERROR) << "DumpContext cannot get x86 context"; + return NULL; + } + + return context_.x86; +} + +const MDRawContextPPC* DumpContext::GetContextPPC() const { + if (GetContextCPU() != MD_CONTEXT_PPC) { + BPLOG(ERROR) << "DumpContext cannot get ppc context"; + return NULL; + } + + return context_.ppc; +} + +const MDRawContextPPC64* DumpContext::GetContextPPC64() const { + if (GetContextCPU() != MD_CONTEXT_PPC64) { + BPLOG(ERROR) << "DumpContext cannot get ppc64 context"; + return NULL; + } + + return context_.ppc64; +} + +const MDRawContextAMD64* DumpContext::GetContextAMD64() const { + if (GetContextCPU() != MD_CONTEXT_AMD64) { + BPLOG(ERROR) << "DumpContext cannot get amd64 context"; + return NULL; + } + + return context_.amd64; +} + +const MDRawContextSPARC* DumpContext::GetContextSPARC() const { + if (GetContextCPU() != MD_CONTEXT_SPARC) { + BPLOG(ERROR) << "DumpContext cannot get sparc context"; + return NULL; + } + + return context_.ctx_sparc; +} + +const MDRawContextARM* DumpContext::GetContextARM() const { + if (GetContextCPU() != MD_CONTEXT_ARM) { + BPLOG(ERROR) << "DumpContext cannot get arm context"; + return NULL; + } + + return context_.arm; +} + +const MDRawContextARM64* DumpContext::GetContextARM64() const { + if (GetContextCPU() != MD_CONTEXT_ARM64) { + BPLOG(ERROR) << "DumpContext cannot get arm64 context"; + return NULL; + } + + return context_.arm64; +} + +const MDRawContextMIPS* DumpContext::GetContextMIPS() const { + if (GetContextCPU() != MD_CONTEXT_MIPS) { + BPLOG(ERROR) << "DumpContext cannot get MIPS context"; + return NULL; + } + + return context_.ctx_mips; +} + +bool DumpContext::GetInstructionPointer(uint64_t* ip) const { + BPLOG_IF(ERROR, !ip) << "DumpContext::GetInstructionPointer requires |ip|"; + assert(ip); + *ip = 0; + + if (!valid_) { + BPLOG(ERROR) << "Invalid DumpContext for GetInstructionPointer"; + return false; + } + + switch (GetContextCPU()) { + case MD_CONTEXT_AMD64: + *ip = GetContextAMD64()->rip; + break; + case MD_CONTEXT_ARM: + *ip = GetContextARM()->iregs[MD_CONTEXT_ARM_REG_PC]; + break; + case MD_CONTEXT_ARM64: + *ip = GetContextARM64()->iregs[MD_CONTEXT_ARM64_REG_PC]; + break; + case MD_CONTEXT_PPC: + *ip = GetContextPPC()->srr0; + break; + case MD_CONTEXT_PPC64: + *ip = GetContextPPC64()->srr0; + break; + case MD_CONTEXT_SPARC: + *ip = GetContextSPARC()->pc; + break; + case MD_CONTEXT_X86: + *ip = GetContextX86()->eip; + break; + case MD_CONTEXT_MIPS: + *ip = GetContextMIPS()->epc; + break; + default: + // This should never happen. + BPLOG(ERROR) << "Unknown CPU architecture in GetInstructionPointer"; + return false; + } + return true; +} + +bool DumpContext::GetStackPointer(uint64_t* sp) const { + BPLOG_IF(ERROR, !sp) << "DumpContext::GetStackPointer requires |sp|"; + assert(sp); + *sp = 0; + + if (!valid_) { + BPLOG(ERROR) << "Invalid DumpContext for GetStackPointer"; + return false; + } + + switch (GetContextCPU()) { + case MD_CONTEXT_AMD64: + *sp = GetContextAMD64()->rsp; + break; + case MD_CONTEXT_ARM: + *sp = GetContextARM()->iregs[MD_CONTEXT_ARM_REG_SP]; + break; + case MD_CONTEXT_ARM64: + *sp = GetContextARM64()->iregs[MD_CONTEXT_ARM64_REG_SP]; + break; + case MD_CONTEXT_PPC: + *sp = GetContextPPC()->gpr[MD_CONTEXT_PPC_REG_SP]; + break; + case MD_CONTEXT_PPC64: + *sp = GetContextPPC64()->gpr[MD_CONTEXT_PPC64_REG_SP]; + break; + case MD_CONTEXT_SPARC: + *sp = GetContextSPARC()->g_r[MD_CONTEXT_SPARC_REG_SP]; + break; + case MD_CONTEXT_X86: + *sp = GetContextX86()->esp; + break; + case MD_CONTEXT_MIPS: + *sp = GetContextMIPS()->iregs[MD_CONTEXT_MIPS_REG_SP]; + break; + default: + // This should never happen. + BPLOG(ERROR) << "Unknown CPU architecture in GetStackPointer"; + return false; + } + return true; +} + +void DumpContext::SetContextFlags(uint32_t context_flags) { + context_flags_ = context_flags; +} + +void DumpContext::SetContextX86(MDRawContextX86* x86) { + context_.x86 = x86; +} + +void DumpContext::SetContextPPC(MDRawContextPPC* ppc) { + context_.ppc = ppc; +} + +void DumpContext::SetContextPPC64(MDRawContextPPC64* ppc64) { + context_.ppc64 = ppc64; +} + +void DumpContext::SetContextAMD64(MDRawContextAMD64* amd64) { + context_.amd64 = amd64; +} + +void DumpContext::SetContextSPARC(MDRawContextSPARC* ctx_sparc) { + context_.ctx_sparc = ctx_sparc; +} + +void DumpContext::SetContextARM(MDRawContextARM* arm) { + context_.arm = arm; +} + +void DumpContext::SetContextARM64(MDRawContextARM64* arm64) { + context_.arm64 = arm64; +} + +void DumpContext::SetContextMIPS(MDRawContextMIPS* ctx_mips) { + context_.ctx_mips = ctx_mips; +} + +void DumpContext::FreeContext() { + switch (GetContextCPU()) { + case MD_CONTEXT_X86: + delete context_.x86; + break; + + case MD_CONTEXT_PPC: + delete context_.ppc; + break; + + case MD_CONTEXT_PPC64: + delete context_.ppc64; + break; + + case MD_CONTEXT_AMD64: + delete context_.amd64; + break; + + case MD_CONTEXT_SPARC: + delete context_.ctx_sparc; + break; + + case MD_CONTEXT_ARM: + delete context_.arm; + break; + + case MD_CONTEXT_ARM64: + delete context_.arm64; + break; + + case MD_CONTEXT_MIPS: + delete context_.ctx_mips; + break; + + default: + // There is no context record (valid_ is false) or there's a + // context record for an unknown CPU (shouldn't happen, only known + // records are stored by Read). + break; + } + + context_flags_ = 0; + context_.base = NULL; +} + +void DumpContext::Print() { + if (!valid_) { + BPLOG(ERROR) << "DumpContext cannot print invalid data"; + return; + } + + switch (GetContextCPU()) { + case MD_CONTEXT_X86: { + const MDRawContextX86* context_x86 = GetContextX86(); + printf("MDRawContextX86\n"); + printf(" context_flags = 0x%x\n", + context_x86->context_flags); + printf(" dr0 = 0x%x\n", context_x86->dr0); + printf(" dr1 = 0x%x\n", context_x86->dr1); + printf(" dr2 = 0x%x\n", context_x86->dr2); + printf(" dr3 = 0x%x\n", context_x86->dr3); + printf(" dr6 = 0x%x\n", context_x86->dr6); + printf(" dr7 = 0x%x\n", context_x86->dr7); + printf(" float_save.control_word = 0x%x\n", + context_x86->float_save.control_word); + printf(" float_save.status_word = 0x%x\n", + context_x86->float_save.status_word); + printf(" float_save.tag_word = 0x%x\n", + context_x86->float_save.tag_word); + printf(" float_save.error_offset = 0x%x\n", + context_x86->float_save.error_offset); + printf(" float_save.error_selector = 0x%x\n", + context_x86->float_save.error_selector); + printf(" float_save.data_offset = 0x%x\n", + context_x86->float_save.data_offset); + printf(" float_save.data_selector = 0x%x\n", + context_x86->float_save.data_selector); + printf(" float_save.register_area[%2d] = 0x", + MD_FLOATINGSAVEAREA_X86_REGISTERAREA_SIZE); + for (unsigned int register_index = 0; + register_index < MD_FLOATINGSAVEAREA_X86_REGISTERAREA_SIZE; + ++register_index) { + printf("%02x", context_x86->float_save.register_area[register_index]); + } + printf("\n"); + printf(" float_save.cr0_npx_state = 0x%x\n", + context_x86->float_save.cr0_npx_state); + printf(" gs = 0x%x\n", context_x86->gs); + printf(" fs = 0x%x\n", context_x86->fs); + printf(" es = 0x%x\n", context_x86->es); + printf(" ds = 0x%x\n", context_x86->ds); + printf(" edi = 0x%x\n", context_x86->edi); + printf(" esi = 0x%x\n", context_x86->esi); + printf(" ebx = 0x%x\n", context_x86->ebx); + printf(" edx = 0x%x\n", context_x86->edx); + printf(" ecx = 0x%x\n", context_x86->ecx); + printf(" eax = 0x%x\n", context_x86->eax); + printf(" ebp = 0x%x\n", context_x86->ebp); + printf(" eip = 0x%x\n", context_x86->eip); + printf(" cs = 0x%x\n", context_x86->cs); + printf(" eflags = 0x%x\n", context_x86->eflags); + printf(" esp = 0x%x\n", context_x86->esp); + printf(" ss = 0x%x\n", context_x86->ss); + printf(" extended_registers[%3d] = 0x", + MD_CONTEXT_X86_EXTENDED_REGISTERS_SIZE); + for (unsigned int register_index = 0; + register_index < MD_CONTEXT_X86_EXTENDED_REGISTERS_SIZE; + ++register_index) { + printf("%02x", context_x86->extended_registers[register_index]); + } + printf("\n\n"); + + break; + } + + case MD_CONTEXT_PPC: { + const MDRawContextPPC* context_ppc = GetContextPPC(); + printf("MDRawContextPPC\n"); + printf(" context_flags = 0x%x\n", + context_ppc->context_flags); + printf(" srr0 = 0x%x\n", context_ppc->srr0); + printf(" srr1 = 0x%x\n", context_ppc->srr1); + for (unsigned int gpr_index = 0; + gpr_index < MD_CONTEXT_PPC_GPR_COUNT; + ++gpr_index) { + printf(" gpr[%2d] = 0x%x\n", + gpr_index, context_ppc->gpr[gpr_index]); + } + printf(" cr = 0x%x\n", context_ppc->cr); + printf(" xer = 0x%x\n", context_ppc->xer); + printf(" lr = 0x%x\n", context_ppc->lr); + printf(" ctr = 0x%x\n", context_ppc->ctr); + printf(" mq = 0x%x\n", context_ppc->mq); + printf(" vrsave = 0x%x\n", context_ppc->vrsave); + for (unsigned int fpr_index = 0; + fpr_index < MD_FLOATINGSAVEAREA_PPC_FPR_COUNT; + ++fpr_index) { + printf(" float_save.fpregs[%2d] = 0x%" PRIx64 "\n", + fpr_index, context_ppc->float_save.fpregs[fpr_index]); + } + printf(" float_save.fpscr = 0x%x\n", + context_ppc->float_save.fpscr); + // TODO(mmentovai): print the 128-bit quantities in + // context_ppc->vector_save. This isn't done yet because printf + // doesn't support 128-bit quantities, and printing them using + // PRIx64 as two 64-bit quantities requires knowledge of the CPU's + // byte ordering. + printf(" vector_save.save_vrvalid = 0x%x\n", + context_ppc->vector_save.save_vrvalid); + printf("\n"); + + break; + } + + case MD_CONTEXT_PPC64: { + const MDRawContextPPC64* context_ppc64 = GetContextPPC64(); + printf("MDRawContextPPC64\n"); + printf(" context_flags = 0x%" PRIx64 "\n", + context_ppc64->context_flags); + printf(" srr0 = 0x%" PRIx64 "\n", + context_ppc64->srr0); + printf(" srr1 = 0x%" PRIx64 "\n", + context_ppc64->srr1); + for (unsigned int gpr_index = 0; + gpr_index < MD_CONTEXT_PPC64_GPR_COUNT; + ++gpr_index) { + printf(" gpr[%2d] = 0x%" PRIx64 "\n", + gpr_index, context_ppc64->gpr[gpr_index]); + } + printf(" cr = 0x%" PRIx64 "\n", context_ppc64->cr); + printf(" xer = 0x%" PRIx64 "\n", + context_ppc64->xer); + printf(" lr = 0x%" PRIx64 "\n", context_ppc64->lr); + printf(" ctr = 0x%" PRIx64 "\n", + context_ppc64->ctr); + printf(" vrsave = 0x%" PRIx64 "\n", + context_ppc64->vrsave); + for (unsigned int fpr_index = 0; + fpr_index < MD_FLOATINGSAVEAREA_PPC_FPR_COUNT; + ++fpr_index) { + printf(" float_save.fpregs[%2d] = 0x%" PRIx64 "\n", + fpr_index, context_ppc64->float_save.fpregs[fpr_index]); + } + printf(" float_save.fpscr = 0x%x\n", + context_ppc64->float_save.fpscr); + // TODO(mmentovai): print the 128-bit quantities in + // context_ppc64->vector_save. This isn't done yet because printf + // doesn't support 128-bit quantities, and printing them using + // PRIx64 as two 64-bit quantities requires knowledge of the CPU's + // byte ordering. + printf(" vector_save.save_vrvalid = 0x%x\n", + context_ppc64->vector_save.save_vrvalid); + printf("\n"); + + break; + } + + case MD_CONTEXT_AMD64: { + const MDRawContextAMD64* context_amd64 = GetContextAMD64(); + printf("MDRawContextAMD64\n"); + printf(" p1_home = 0x%" PRIx64 "\n", + context_amd64->p1_home); + printf(" p2_home = 0x%" PRIx64 "\n", + context_amd64->p2_home); + printf(" p3_home = 0x%" PRIx64 "\n", + context_amd64->p3_home); + printf(" p4_home = 0x%" PRIx64 "\n", + context_amd64->p4_home); + printf(" p5_home = 0x%" PRIx64 "\n", + context_amd64->p5_home); + printf(" p6_home = 0x%" PRIx64 "\n", + context_amd64->p6_home); + printf(" context_flags = 0x%x\n", + context_amd64->context_flags); + printf(" mx_csr = 0x%x\n", + context_amd64->mx_csr); + printf(" cs = 0x%x\n", context_amd64->cs); + printf(" ds = 0x%x\n", context_amd64->ds); + printf(" es = 0x%x\n", context_amd64->es); + printf(" fs = 0x%x\n", context_amd64->fs); + printf(" gs = 0x%x\n", context_amd64->gs); + printf(" ss = 0x%x\n", context_amd64->ss); + printf(" eflags = 0x%x\n", context_amd64->eflags); + printf(" dr0 = 0x%" PRIx64 "\n", context_amd64->dr0); + printf(" dr1 = 0x%" PRIx64 "\n", context_amd64->dr1); + printf(" dr2 = 0x%" PRIx64 "\n", context_amd64->dr2); + printf(" dr3 = 0x%" PRIx64 "\n", context_amd64->dr3); + printf(" dr6 = 0x%" PRIx64 "\n", context_amd64->dr6); + printf(" dr7 = 0x%" PRIx64 "\n", context_amd64->dr7); + printf(" rax = 0x%" PRIx64 "\n", context_amd64->rax); + printf(" rcx = 0x%" PRIx64 "\n", context_amd64->rcx); + printf(" rdx = 0x%" PRIx64 "\n", context_amd64->rdx); + printf(" rbx = 0x%" PRIx64 "\n", context_amd64->rbx); + printf(" rsp = 0x%" PRIx64 "\n", context_amd64->rsp); + printf(" rbp = 0x%" PRIx64 "\n", context_amd64->rbp); + printf(" rsi = 0x%" PRIx64 "\n", context_amd64->rsi); + printf(" rdi = 0x%" PRIx64 "\n", context_amd64->rdi); + printf(" r8 = 0x%" PRIx64 "\n", context_amd64->r8); + printf(" r9 = 0x%" PRIx64 "\n", context_amd64->r9); + printf(" r10 = 0x%" PRIx64 "\n", context_amd64->r10); + printf(" r11 = 0x%" PRIx64 "\n", context_amd64->r11); + printf(" r12 = 0x%" PRIx64 "\n", context_amd64->r12); + printf(" r13 = 0x%" PRIx64 "\n", context_amd64->r13); + printf(" r14 = 0x%" PRIx64 "\n", context_amd64->r14); + printf(" r15 = 0x%" PRIx64 "\n", context_amd64->r15); + printf(" rip = 0x%" PRIx64 "\n", context_amd64->rip); + // TODO: print xmm, vector, debug registers + printf("\n"); + break; + } + + case MD_CONTEXT_SPARC: { + const MDRawContextSPARC* context_sparc = GetContextSPARC(); + printf("MDRawContextSPARC\n"); + printf(" context_flags = 0x%x\n", + context_sparc->context_flags); + for (unsigned int g_r_index = 0; + g_r_index < MD_CONTEXT_SPARC_GPR_COUNT; + ++g_r_index) { + printf(" g_r[%2d] = 0x%" PRIx64 "\n", + g_r_index, context_sparc->g_r[g_r_index]); + } + printf(" ccr = 0x%" PRIx64 "\n", context_sparc->ccr); + printf(" pc = 0x%" PRIx64 "\n", context_sparc->pc); + printf(" npc = 0x%" PRIx64 "\n", context_sparc->npc); + printf(" y = 0x%" PRIx64 "\n", context_sparc->y); + printf(" asi = 0x%" PRIx64 "\n", context_sparc->asi); + printf(" fprs = 0x%" PRIx64 "\n", context_sparc->fprs); + + for (unsigned int fpr_index = 0; + fpr_index < MD_FLOATINGSAVEAREA_SPARC_FPR_COUNT; + ++fpr_index) { + printf(" float_save.regs[%2d] = 0x%" PRIx64 "\n", + fpr_index, context_sparc->float_save.regs[fpr_index]); + } + printf(" float_save.filler = 0x%" PRIx64 "\n", + context_sparc->float_save.filler); + printf(" float_save.fsr = 0x%" PRIx64 "\n", + context_sparc->float_save.fsr); + break; + } + + case MD_CONTEXT_ARM: { + const MDRawContextARM* context_arm = GetContextARM(); + printf("MDRawContextARM\n"); + printf(" context_flags = 0x%x\n", + context_arm->context_flags); + for (unsigned int ireg_index = 0; + ireg_index < MD_CONTEXT_ARM_GPR_COUNT; + ++ireg_index) { + printf(" iregs[%2d] = 0x%x\n", + ireg_index, context_arm->iregs[ireg_index]); + } + printf(" cpsr = 0x%x\n", context_arm->cpsr); + printf(" float_save.fpscr = 0x%" PRIx64 "\n", + context_arm->float_save.fpscr); + for (unsigned int fpr_index = 0; + fpr_index < MD_FLOATINGSAVEAREA_ARM_FPR_COUNT; + ++fpr_index) { + printf(" float_save.regs[%2d] = 0x%" PRIx64 "\n", + fpr_index, context_arm->float_save.regs[fpr_index]); + } + for (unsigned int fpe_index = 0; + fpe_index < MD_FLOATINGSAVEAREA_ARM_FPEXTRA_COUNT; + ++fpe_index) { + printf(" float_save.extra[%2d] = 0x%" PRIx32 "\n", + fpe_index, context_arm->float_save.extra[fpe_index]); + } + + break; + } + + case MD_CONTEXT_ARM64: { + const MDRawContextARM64* context_arm64 = GetContextARM64(); + printf("MDRawContextARM64\n"); + printf(" context_flags = 0x%" PRIx64 "\n", + context_arm64->context_flags); + for (unsigned int ireg_index = 0; + ireg_index < MD_CONTEXT_ARM64_GPR_COUNT; + ++ireg_index) { + printf(" iregs[%2d] = 0x%" PRIx64 "\n", + ireg_index, context_arm64->iregs[ireg_index]); + } + printf(" cpsr = 0x%x\n", context_arm64->cpsr); + printf(" float_save.fpsr = 0x%x\n", context_arm64->float_save.fpsr); + printf(" float_save.fpcr = 0x%x\n", context_arm64->float_save.fpcr); + + for (unsigned int freg_index = 0; + freg_index < MD_FLOATINGSAVEAREA_ARM64_FPR_COUNT; + ++freg_index) { + uint128_struct fp_value = context_arm64->float_save.regs[freg_index]; + printf(" float_save.regs[%2d] = 0x%" PRIx64 "%" PRIx64 "\n", + freg_index, fp_value.high, fp_value.low); + } + break; + } + + case MD_CONTEXT_MIPS: { + const MDRawContextMIPS* context_mips = GetContextMIPS(); + printf("MDRawContextMIPS\n"); + printf(" context_flags = 0x%x\n", + context_mips->context_flags); + for (int ireg_index = 0; + ireg_index < MD_CONTEXT_MIPS_GPR_COUNT; + ++ireg_index) { + printf(" iregs[%2d] = 0x%" PRIx64 "\n", + ireg_index, context_mips->iregs[ireg_index]); + } + printf(" mdhi = 0x%" PRIx64 "\n", + context_mips->mdhi); + printf(" mdlo = 0x%" PRIx64 "\n", + context_mips->mdhi); + for (int dsp_index = 0; + dsp_index < MD_CONTEXT_MIPS_DSP_COUNT; + ++dsp_index) { + printf(" hi[%1d] = 0x%" PRIx32 "\n", + dsp_index, context_mips->hi[dsp_index]); + printf(" lo[%1d] = 0x%" PRIx32 "\n", + dsp_index, context_mips->lo[dsp_index]); + } + printf(" dsp_control = 0x%" PRIx32 "\n", + context_mips->dsp_control); + printf(" epc = 0x%" PRIx64 "\n", + context_mips->epc); + printf(" badvaddr = 0x%" PRIx64 "\n", + context_mips->badvaddr); + printf(" status = 0x%" PRIx32 "\n", + context_mips->status); + printf(" cause = 0x%" PRIx32 "\n", + context_mips->cause); + + for (int fpr_index = 0; + fpr_index < MD_FLOATINGSAVEAREA_MIPS_FPR_COUNT; + ++fpr_index) { + printf(" float_save.regs[%2d] = 0x%" PRIx64 "\n", + fpr_index, context_mips->float_save.regs[fpr_index]); + } + printf(" float_save.fpcsr = 0x%" PRIx32 "\n", + context_mips->float_save.fpcsr); + printf(" float_save.fir = 0x%" PRIx32 "\n", + context_mips->float_save.fir); + break; + } + + default: { + break; + } + } +} + +} // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/logging_striptest2.cc b/toolkit/crashreporter/google-breakpad/src/processor/dump_object.cc similarity index 85% rename from toolkit/crashreporter/google-breakpad/src/third_party/glog/src/logging_striptest2.cc rename to toolkit/crashreporter/google-breakpad/src/processor/dump_object.cc index a64685c9e5cd..2c82b200b874 100644 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/logging_striptest2.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/dump_object.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2007, Google Inc. +// Copyright (c) 2010 Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -26,10 +26,14 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: Sergey Ioffe -#define GOOGLE_STRIP_LOG 2 +// dump_object.cc: A base class for all mini/micro dump object. -// Include the actual test. -#include "logging_striptest_main.cc" +#include "google_breakpad/processor/dump_object.h" + +namespace google_breakpad { + +DumpObject::DumpObject() : valid_(false) { +} + +} // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/processor/exploitability.cc b/toolkit/crashreporter/google-breakpad/src/processor/exploitability.cc index 5355b7d1495b..6ee1e962222e 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/exploitability.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/exploitability.cc @@ -40,6 +40,7 @@ #include "google_breakpad/processor/exploitability.h" #include "google_breakpad/processor/minidump.h" #include "google_breakpad/processor/process_state.h" +#include "processor/exploitability_linux.h" #include "processor/exploitability_win.h" #include "processor/logging.h" @@ -57,6 +58,13 @@ ExploitabilityRating Exploitability::CheckExploitability() { Exploitability *Exploitability::ExploitabilityForPlatform( Minidump *dump, ProcessState *process_state) { + return ExploitabilityForPlatform(dump, process_state, false); +} + +Exploitability *Exploitability::ExploitabilityForPlatform( + Minidump *dump, + ProcessState *process_state, + bool enable_objdump) { Exploitability *platform_exploitability = NULL; MinidumpSystemInfo *minidump_system_info = dump->GetSystemInfo(); if (!minidump_system_info) @@ -70,16 +78,21 @@ Exploitability *Exploitability::ExploitabilityForPlatform( switch (raw_system_info->platform_id) { case MD_OS_WIN32_NT: case MD_OS_WIN32_WINDOWS: { - platform_exploitability = new ExploitabilityWin(dump, - process_state); + platform_exploitability = new ExploitabilityWin(dump, process_state); + break; + } + case MD_OS_LINUX: { + platform_exploitability = new ExploitabilityLinux(dump, + process_state, + enable_objdump); break; } case MD_OS_MAC_OS_X: case MD_OS_IOS: - case MD_OS_LINUX: case MD_OS_UNIX: case MD_OS_SOLARIS: case MD_OS_ANDROID: + case MD_OS_PS3: default: { platform_exploitability = NULL; break; diff --git a/toolkit/crashreporter/google-breakpad/src/processor/exploitability_linux.cc b/toolkit/crashreporter/google-breakpad/src/processor/exploitability_linux.cc new file mode 100644 index 000000000000..a196da79ab78 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/processor/exploitability_linux.cc @@ -0,0 +1,604 @@ +// Copyright (c) 2013 Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// exploitability_linux.cc: Linux specific exploitability engine. +// +// Provides a guess at the exploitability of the crash for the Linux +// platform given a minidump and process_state. +// +// Author: Matthew Riley + +#include "processor/exploitability_linux.h" + +#ifndef _WIN32 +#include +#include +#include +#include + +#include +#include +#endif // _WIN32 + +#include "google_breakpad/common/minidump_exception_linux.h" +#include "google_breakpad/processor/call_stack.h" +#include "google_breakpad/processor/process_state.h" +#include "google_breakpad/processor/stack_frame.h" +#include "processor/logging.h" + +namespace { + +// This function in libc is called if the program was compiled with +// -fstack-protector and a function's stack canary changes. +const char kStackCheckFailureFunction[] = "__stack_chk_fail"; + +// This function in libc is called if the program was compiled with +// -D_FORTIFY_SOURCE=2, a function like strcpy() is called, and the runtime +// can determine that the call would overflow the target buffer. +const char kBoundsCheckFailureFunction[] = "__chk_fail"; + +#ifndef _WIN32 +const unsigned int MAX_INSTRUCTION_LEN = 15; +const unsigned int MAX_OBJDUMP_BUFFER_LEN = 4096; +#endif // _WIN32 + +} // namespace + +namespace google_breakpad { + +ExploitabilityLinux::ExploitabilityLinux(Minidump *dump, + ProcessState *process_state) + : Exploitability(dump, process_state), + enable_objdump_(false) { } + +ExploitabilityLinux::ExploitabilityLinux(Minidump *dump, + ProcessState *process_state, + bool enable_objdump) + : Exploitability(dump, process_state), + enable_objdump_(enable_objdump) { } + + +ExploitabilityRating ExploitabilityLinux::CheckPlatformExploitability() { + // Check the crashing thread for functions suggesting a buffer overflow or + // stack smash. + if (process_state_->requesting_thread() != -1) { + CallStack* crashing_thread = + process_state_->threads()->at(process_state_->requesting_thread()); + const vector& crashing_thread_frames = + *crashing_thread->frames(); + for (size_t i = 0; i < crashing_thread_frames.size(); ++i) { + if (crashing_thread_frames[i]->function_name == + kStackCheckFailureFunction) { + return EXPLOITABILITY_HIGH; + } + + if (crashing_thread_frames[i]->function_name == + kBoundsCheckFailureFunction) { + return EXPLOITABILITY_HIGH; + } + } + } + + // Getting exception data. (It should exist for all minidumps.) + MinidumpException *exception = dump_->GetException(); + if (exception == NULL) { + BPLOG(INFO) << "No exception record."; + return EXPLOITABILITY_ERR_PROCESSING; + } + const MDRawExceptionStream *raw_exception_stream = exception->exception(); + if (raw_exception_stream == NULL) { + BPLOG(INFO) << "No raw exception stream."; + return EXPLOITABILITY_ERR_PROCESSING; + } + + // Checking for benign exceptions that caused the crash. + if (this->BenignCrashTrigger(raw_exception_stream)) { + return EXPLOITABILITY_NONE; + } + + // Check if the instruction pointer is in a valid instruction region + // by finding if it maps to an executable part of memory. + uint64_t instruction_ptr = 0; + uint64_t stack_ptr = 0; + + const MinidumpContext *context = exception->GetContext(); + if (context == NULL) { + BPLOG(INFO) << "No exception context."; + return EXPLOITABILITY_ERR_PROCESSING; + } + + // Getting the instruction pointer. + if (!context->GetInstructionPointer(&instruction_ptr)) { + BPLOG(INFO) << "Failed to retrieve instruction pointer."; + return EXPLOITABILITY_ERR_PROCESSING; + } + + // Getting the stack pointer. + if (!context->GetStackPointer(&stack_ptr)) { + BPLOG(INFO) << "Failed to retrieve stack pointer."; + return EXPLOITABILITY_ERR_PROCESSING; + } + + // Checking for the instruction pointer in a valid instruction region, + // a misplaced stack pointer, and an executable stack or heap. + if (!this->InstructionPointerInCode(instruction_ptr) || + this->StackPointerOffStack(stack_ptr) || + this->ExecutableStackOrHeap()) { + return EXPLOITABILITY_HIGH; + } + + // Check for write to read only memory or invalid memory, shelling out + // to objdump is enabled. + if (enable_objdump_ && this->EndedOnIllegalWrite(instruction_ptr)) { + return EXPLOITABILITY_HIGH; + } + + // There was no strong evidence suggesting exploitability, but the minidump + // does not appear totally benign either. + return EXPLOITABILITY_INTERESTING; +} + +bool ExploitabilityLinux::EndedOnIllegalWrite(uint64_t instruction_ptr) { +#ifdef _WIN32 + BPLOG(INFO) << "MinGW does not support fork and exec. Terminating method."; +#else + // Get memory region containing instruction pointer. + MinidumpMemoryList *memory_list = dump_->GetMemoryList(); + MinidumpMemoryRegion *memory_region = + memory_list ? + memory_list->GetMemoryRegionForAddress(instruction_ptr) : NULL; + if (!memory_region) { + BPLOG(INFO) << "No memory region around instruction pointer."; + return false; + } + + // Get exception data to find architecture. + string architecture = ""; + MinidumpException *exception = dump_->GetException(); + // This should never evaluate to true, since this should not be reachable + // without checking for exception data earlier. + if (!exception) { + BPLOG(INFO) << "No exception data."; + return false; + } + const MDRawExceptionStream *raw_exception_stream = exception->exception(); + const MinidumpContext *context = exception->GetContext(); + // This should not evaluate to true, for the same reason mentioned above. + if (!raw_exception_stream || !context) { + BPLOG(INFO) << "No exception or architecture data."; + return false; + } + // Check architecture and set architecture variable to corresponding flag + // in objdump. + switch (context->GetContextCPU()) { + case MD_CONTEXT_X86: + architecture = "i386"; + break; + case MD_CONTEXT_AMD64: + architecture = "i386:x86-64"; + break; + default: + // Unsupported architecture. Note that ARM architectures are not + // supported because objdump does not support ARM. + return false; + break; + } + + // Get memory region around instruction pointer and the number of bytes + // before and after the instruction pointer in the memory region. + const uint8_t *raw_memory = memory_region->GetMemory(); + const uint64_t base = memory_region->GetBase(); + if (base > instruction_ptr) { + BPLOG(ERROR) << "Memory region base value exceeds instruction pointer."; + return false; + } + const uint64_t offset = instruction_ptr - base; + if (memory_region->GetSize() < MAX_INSTRUCTION_LEN + offset) { + BPLOG(INFO) << "Not enough bytes left to guarantee complete instruction."; + return false; + } + + // Convert bytes into objdump output. + char objdump_output_buffer[MAX_OBJDUMP_BUFFER_LEN] = {0}; + DisassembleBytes(architecture, + raw_memory + offset, + MAX_OBJDUMP_BUFFER_LEN, + objdump_output_buffer); + + // Put buffer data into stream to output line-by-line. + std::stringstream objdump_stream; + objdump_stream.str(string(objdump_output_buffer)); + string line; + + // Pipe each output line into the string until the string contains + // the first instruction from objdump. + // Loop until the line shows the first instruction or there are no lines left. + do { + if (!getline(objdump_stream, line)) { + BPLOG(INFO) << "Objdump instructions not found"; + return false; + } + } while (line.find("0:") == string::npos); + // This first instruction contains the above substring. + + // Convert objdump instruction line into the operation and operands. + string instruction = ""; + string dest = ""; + string src = ""; + TokenizeObjdumpInstruction(line, &instruction, &dest, &src); + + // Check if the operation is a write to memory. First, the instruction + // must one that can write to memory. Second, the write destination + // must be a spot in memory rather than a register. Since there are no + // symbols from objdump, the destination will be enclosed by brackets. + if (dest.size() > 2 && dest.at(0) == '[' && dest.at(dest.size() - 1) == ']' && + (!instruction.compare("mov") || !instruction.compare("inc") || + !instruction.compare("dec") || !instruction.compare("and") || + !instruction.compare("or") || !instruction.compare("xor") || + !instruction.compare("not") || !instruction.compare("neg") || + !instruction.compare("add") || !instruction.compare("sub") || + !instruction.compare("shl") || !instruction.compare("shr"))) { + // Strip away enclosing brackets from the destination address. + dest = dest.substr(1, dest.size() - 2); + uint64_t write_address = 0; + CalculateAddress(dest, *context, &write_address); + + // If the program crashed as a result of a write, the destination of + // the write must have been an address that did not permit writing. + // However, if the address is under 4k, due to program protections, + // the crash does not suggest exploitability for writes with such a + // low target address. + return write_address > 4096; + } +#endif // _WIN32 + return false; +} + +#ifndef _WIN32 +bool ExploitabilityLinux::CalculateAddress(const string &address_expression, + const DumpContext &context, + uint64_t *write_address) { + // The destination should be the format reg+a or reg-a, where reg + // is a register and a is a hexadecimal constant. Although more complex + // expressions can make valid instructions, objdump's disassembly outputs + // it in this simpler format. + // TODO(liuandrew): Handle more complex formats, should they arise. + + if (!write_address) { + BPLOG(ERROR) << "Null parameter."; + return false; + } + + // Clone parameter into a non-const string. + string expression = address_expression; + + // Parse out the constant that is added to the address (if it exists). + size_t delim = expression.find('+'); + bool positive_add_constant = true; + // Check if constant is subtracted instead of added. + if (delim == string::npos) { + positive_add_constant = false; + delim = expression.find('-'); + } + uint32_t add_constant = 0; + // Save constant and remove it from the expression. + if (delim != string::npos) { + if (!sscanf(expression.substr(delim + 1).c_str(), "%x", &add_constant)) { + BPLOG(ERROR) << "Failed to scan constant."; + return false; + } + expression = expression.substr(0, delim); + } + + // Set the the write address to the corresponding register. + // TODO(liuandrew): Add support for partial registers, such as + // the rax/eax/ax/ah/al chain. + switch (context.GetContextCPU()) { + case MD_CONTEXT_X86: + if (!expression.compare("eax")) { + *write_address = context.GetContextX86()->eax; + } else if (!expression.compare("ebx")) { + *write_address = context.GetContextX86()->ebx; + } else if (!expression.compare("ecx")) { + *write_address = context.GetContextX86()->ecx; + } else if (!expression.compare("edx")) { + *write_address = context.GetContextX86()->edx; + } else if (!expression.compare("edi")) { + *write_address = context.GetContextX86()->edi; + } else if (!expression.compare("esi")) { + *write_address = context.GetContextX86()->esi; + } else if (!expression.compare("ebp")) { + *write_address = context.GetContextX86()->ebp; + } else if (!expression.compare("esp")) { + *write_address = context.GetContextX86()->esp; + } else if (!expression.compare("eip")) { + *write_address = context.GetContextX86()->eip; + } else { + BPLOG(ERROR) << "Unsupported register"; + return false; + } + break; + case MD_CONTEXT_AMD64: + if (!expression.compare("rax")) { + *write_address = context.GetContextAMD64()->rax; + } else if (!expression.compare("rbx")) { + *write_address = context.GetContextAMD64()->rbx; + } else if (!expression.compare("rcx")) { + *write_address = context.GetContextAMD64()->rcx; + } else if (!expression.compare("rdx")) { + *write_address = context.GetContextAMD64()->rdx; + } else if (!expression.compare("rdi")) { + *write_address = context.GetContextAMD64()->rdi; + } else if (!expression.compare("rsi")) { + *write_address = context.GetContextAMD64()->rsi; + } else if (!expression.compare("rbp")) { + *write_address = context.GetContextAMD64()->rbp; + } else if (!expression.compare("rsp")) { + *write_address = context.GetContextAMD64()->rsp; + } else if (!expression.compare("rip")) { + *write_address = context.GetContextAMD64()->rip; + } else if (!expression.compare("r8")) { + *write_address = context.GetContextAMD64()->r8; + } else if (!expression.compare("r9")) { + *write_address = context.GetContextAMD64()->r9; + } else if (!expression.compare("r10")) { + *write_address = context.GetContextAMD64()->r10; + } else if (!expression.compare("r11")) { + *write_address = context.GetContextAMD64()->r11; + } else if (!expression.compare("r12")) { + *write_address = context.GetContextAMD64()->r12; + } else if (!expression.compare("r13")) { + *write_address = context.GetContextAMD64()->r13; + } else if (!expression.compare("r14")) { + *write_address = context.GetContextAMD64()->r14; + } else if (!expression.compare("r15")) { + *write_address = context.GetContextAMD64()->r15; + } else { + BPLOG(ERROR) << "Unsupported register"; + return false; + } + break; + default: + // This should not occur since the same switch condition + // should have terminated this method. + return false; + break; + } + + // Add or subtract constant from write address (if applicable). + *write_address = + positive_add_constant ? + *write_address + add_constant : *write_address - add_constant; + + return true; +} + +bool ExploitabilityLinux::TokenizeObjdumpInstruction(const string &line, + string *operation, + string *dest, + string *src) { + if (!operation || !dest || !src) { + BPLOG(ERROR) << "Null parameters passed."; + return false; + } + + // Set all pointer values to empty strings. + *operation = ""; + *dest = ""; + *src = ""; + + // Tokenize the objdump line. + vector tokens; + std::istringstream line_stream(line); + copy(std::istream_iterator(line_stream), + std::istream_iterator(), + std::back_inserter(tokens)); + + // Regex for the data in hex form. Each byte is two hex digits. + regex_t regex; + regcomp(®ex, "^[[:xdigit:]]{2}$", REG_EXTENDED | REG_NOSUB); + + // Find and set the location of the operator. The operator appears + // directly after the chain of bytes that define the instruction. The + // operands will be the last token, given that the instruction has operands. + // If not, the operator is the last token. The loop skips the first token + // because the first token is the instruction number (namely "0:"). + string operands = ""; + for (size_t i = 1; i < tokens.size(); i++) { + // Check if current token no longer is in byte format. + if (regexec(®ex, tokens[i].c_str(), 0, NULL, 0)) { + // instruction = tokens[i]; + *operation = tokens[i]; + // If the operator is the last token, there are no operands. + if (i != tokens.size() - 1) { + operands = tokens[tokens.size() - 1]; + } + break; + } + } + regfree(®ex); + + if (operation->empty()) { + BPLOG(ERROR) << "Failed to parse out operation from objdump instruction."; + return false; + } + + // Split operands into source and destination (if applicable). + if (!operands.empty()) { + size_t delim = operands.find(','); + if (delim == string::npos) { + *dest = operands; + } else { + *dest = operands.substr(0, delim); + *src = operands.substr(delim + 1); + } + } + return true; +} + +bool ExploitabilityLinux::DisassembleBytes(const string &architecture, + const uint8_t *raw_bytes, + const unsigned int buffer_len, + char *objdump_output_buffer) { + if (!raw_bytes || !objdump_output_buffer) { + BPLOG(ERROR) << "Bad input parameters."; + return false; + } + + // Write raw bytes around instruction pointer to a temporary file to + // pass as an argument to objdump. + char raw_bytes_tmpfile[] = "/tmp/breakpad_mem_region-raw_bytes-XXXXXX"; + int raw_bytes_fd = mkstemp(raw_bytes_tmpfile); + if (raw_bytes_fd < 0) { + BPLOG(ERROR) << "Failed to create tempfile."; + unlink(raw_bytes_tmpfile); + return false; + } + if (write(raw_bytes_fd, raw_bytes, MAX_INSTRUCTION_LEN) + != MAX_INSTRUCTION_LEN) { + BPLOG(ERROR) << "Writing of raw bytes failed."; + unlink(raw_bytes_tmpfile); + return false; + } + + char cmd[1024] = {0}; + snprintf(cmd, + 1024, + "objdump -D -b binary -M intel -m %s %s", + architecture.c_str(), + raw_bytes_tmpfile); + FILE *objdump_fp = popen(cmd, "r"); + if (!objdump_fp) { + fclose(objdump_fp); + unlink(raw_bytes_tmpfile); + BPLOG(ERROR) << "Failed to call objdump."; + return false; + } + if (fread(objdump_output_buffer, 1, buffer_len, objdump_fp) <= 0) { + fclose(objdump_fp); + unlink(raw_bytes_tmpfile); + BPLOG(ERROR) << "Failed to read objdump output."; + return false; + } + fclose(objdump_fp); + unlink(raw_bytes_tmpfile); + return true; +} +#endif // _WIN32 + +bool ExploitabilityLinux::StackPointerOffStack(uint64_t stack_ptr) { + MinidumpLinuxMapsList *linux_maps_list = dump_->GetLinuxMapsList(); + // Inconclusive if there are no mappings available. + if (!linux_maps_list) { + return false; + } + const MinidumpLinuxMaps *linux_maps = + linux_maps_list->GetLinuxMapsForAddress(stack_ptr); + // Checks if the stack pointer maps to a valid mapping and if the mapping + // is not the stack. If the mapping has no name, it is inconclusive whether + // it is off the stack. + return !linux_maps || + (linux_maps->GetPathname().compare("") && + linux_maps->GetPathname().compare("[stack]")); +} + +bool ExploitabilityLinux::ExecutableStackOrHeap() { + MinidumpLinuxMapsList *linux_maps_list = dump_->GetLinuxMapsList(); + if (linux_maps_list) { + for (size_t i = 0; i < linux_maps_list->get_maps_count(); i++) { + const MinidumpLinuxMaps *linux_maps = + linux_maps_list->GetLinuxMapsAtIndex(i); + // Check for executable stack or heap for each mapping. + if (linux_maps && + (!linux_maps->GetPathname().compare("[stack]") || + !linux_maps->GetPathname().compare("[heap]")) && + linux_maps->IsExecutable()) { + return true; + } + } + } + return false; +} + +bool ExploitabilityLinux::InstructionPointerInCode(uint64_t instruction_ptr) { + // Get Linux memory mapping from /proc/self/maps. Checking whether the + // region the instruction pointer is in has executable permission can tell + // whether it is in a valid code region. If there is no mapping for the + // instruction pointer, it is indicative that the instruction pointer is + // not within a module, which implies that it is outside a valid area. + MinidumpLinuxMapsList *linux_maps_list = dump_->GetLinuxMapsList(); + const MinidumpLinuxMaps *linux_maps = + linux_maps_list ? + linux_maps_list->GetLinuxMapsForAddress(instruction_ptr) : NULL; + return linux_maps ? linux_maps->IsExecutable() : false; +} + +bool ExploitabilityLinux::BenignCrashTrigger(const MDRawExceptionStream + *raw_exception_stream) { + // Check the cause of crash. + // If the exception of the crash is a benign exception, + // it is probably not exploitable. + switch (raw_exception_stream->exception_record.exception_code) { + case MD_EXCEPTION_CODE_LIN_SIGHUP: + case MD_EXCEPTION_CODE_LIN_SIGINT: + case MD_EXCEPTION_CODE_LIN_SIGQUIT: + case MD_EXCEPTION_CODE_LIN_SIGTRAP: + case MD_EXCEPTION_CODE_LIN_SIGABRT: + case MD_EXCEPTION_CODE_LIN_SIGFPE: + case MD_EXCEPTION_CODE_LIN_SIGKILL: + case MD_EXCEPTION_CODE_LIN_SIGUSR1: + case MD_EXCEPTION_CODE_LIN_SIGUSR2: + case MD_EXCEPTION_CODE_LIN_SIGPIPE: + case MD_EXCEPTION_CODE_LIN_SIGALRM: + case MD_EXCEPTION_CODE_LIN_SIGTERM: + case MD_EXCEPTION_CODE_LIN_SIGCHLD: + case MD_EXCEPTION_CODE_LIN_SIGCONT: + case MD_EXCEPTION_CODE_LIN_SIGSTOP: + case MD_EXCEPTION_CODE_LIN_SIGTSTP: + case MD_EXCEPTION_CODE_LIN_SIGTTIN: + case MD_EXCEPTION_CODE_LIN_SIGTTOU: + case MD_EXCEPTION_CODE_LIN_SIGURG: + case MD_EXCEPTION_CODE_LIN_SIGXCPU: + case MD_EXCEPTION_CODE_LIN_SIGXFSZ: + case MD_EXCEPTION_CODE_LIN_SIGVTALRM: + case MD_EXCEPTION_CODE_LIN_SIGPROF: + case MD_EXCEPTION_CODE_LIN_SIGWINCH: + case MD_EXCEPTION_CODE_LIN_SIGIO: + case MD_EXCEPTION_CODE_LIN_SIGPWR: + case MD_EXCEPTION_CODE_LIN_SIGSYS: + case MD_EXCEPTION_CODE_LIN_DUMP_REQUESTED: + return true; + break; + default: + return false; + break; + } +} + +} // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/processor/exploitability_linux.h b/toolkit/crashreporter/google-breakpad/src/processor/exploitability_linux.h new file mode 100644 index 000000000000..93c5082fb3c2 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/processor/exploitability_linux.h @@ -0,0 +1,122 @@ +// Copyright (c) 2013 Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// exploitability_linux.h: Linux specific exploitability engine. +// +// Provides a guess at the exploitability of the crash for the Linux +// platform given a minidump and process_state. +// +// Author: Matthew Riley + +#ifndef GOOGLE_BREAKPAD_PROCESSOR_EXPLOITABILITY_LINUX_H_ +#define GOOGLE_BREAKPAD_PROCESSOR_EXPLOITABILITY_LINUX_H_ + +#include "google_breakpad/common/breakpad_types.h" +#include "google_breakpad/processor/exploitability.h" + +namespace google_breakpad { + +class ExploitabilityLinux : public Exploitability { + public: + ExploitabilityLinux(Minidump *dump, + ProcessState *process_state); + + // Parameters are the minidump to analyze, the object representing process + // state, and whether to enable objdump disassembly. + // Enabling objdump will allow exploitability analysis to call out to + // objdump for diassembly. It is used to check the identity of the + // instruction that caused the program to crash. If there are any + // portability concerns, this should not be enabled. + ExploitabilityLinux(Minidump *dump, + ProcessState *process_state, + bool enable_objdump); + + virtual ExploitabilityRating CheckPlatformExploitability(); + + private: + friend class ExploitabilityLinuxTest; + + // Takes the address of the instruction pointer and returns + // whether the instruction pointer lies in a valid instruction region. + bool InstructionPointerInCode(uint64_t instruction_ptr); + + // Checks the exception that triggered the creation of the + // minidump and reports whether the exception suggests no exploitability. + bool BenignCrashTrigger(const MDRawExceptionStream *raw_exception_stream); + + // This method checks if the crash occurred during a write to read-only or + // invalid memory. It does so by checking if the instruction at the + // instruction pointer is a write instruction, and if the target of the + // instruction is at a spot in memory that prohibits writes. + bool EndedOnIllegalWrite(uint64_t instruction_ptr); + +#ifndef _WIN32 + // Disassembles raw bytes via objdump and pipes the output into the provided + // buffer, given the desired architecture, the file from which objdump will + // read, and the buffer length. The method returns whether the disassembly + // was a success, and the caller owns all pointers. + static bool DisassembleBytes(const string &architecture, + const uint8_t *raw_bytes, + const unsigned int MAX_OBJDUMP_BUFFER_LEN, + char *objdump_output_buffer); + + // Tokenizes out the operation and operands from a line of instruction + // disassembled by objdump. This method modifies the pointers to match the + // tokens of the instruction, and returns if the tokenizing was a success. + // The caller owns all pointers. + static bool TokenizeObjdumpInstruction(const string &line, + string *operation, + string *dest, + string *src); + + // Calculates the effective address of an expression in the form reg+a or + // reg-a, where 'reg' is a register and 'a' is a constant, and writes the + // result in the pointer. The method returns whether the calculation was + // a success. The caller owns the pointer. + static bool CalculateAddress(const string &address_expression, + const DumpContext &context, + uint64_t *write_address); +#endif // _WIN32 + + // Checks if the stack pointer points to a memory mapping that is not + // labelled as the stack. + bool StackPointerOffStack(uint64_t stack_ptr); + + // Checks if the stack or heap are marked executable according + // to the memory mappings. + bool ExecutableStackOrHeap(); + + // Whether this exploitability engine is permitted to shell out to objdump + // to disassemble raw bytes. + bool enable_objdump_; +}; + +} // namespace google_breakpad + +#endif // GOOGLE_BREAKPAD_PROCESSOR_EXPLOITABILITY_LINUX_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/processor/exploitability_unittest.cc b/toolkit/crashreporter/google-breakpad/src/processor/exploitability_unittest.cc index ce7a6f72b110..700f9e58cc59 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/exploitability_unittest.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/exploitability_unittest.cc @@ -1,3 +1,4 @@ +// Copyright (c) 2010, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -24,18 +25,7 @@ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE #include #include @@ -45,211 +35,226 @@ #include "breakpad_googletest_includes.h" #include "common/using_std_string.h" #include "google_breakpad/processor/basic_source_line_resolver.h" -#include "google_breakpad/processor/call_stack.h" -#include "google_breakpad/processor/code_module.h" -#include "google_breakpad/processor/code_modules.h" -#include "google_breakpad/processor/minidump.h" #include "google_breakpad/processor/minidump_processor.h" #include "google_breakpad/processor/process_state.h" -#include "google_breakpad/processor/stack_frame.h" -#include "google_breakpad/processor/symbol_supplier.h" +#ifndef _WIN32 +#include "processor/exploitability_linux.h" +#endif // _WIN32 +#include "processor/simple_symbol_supplier.h" +#ifndef _WIN32 namespace google_breakpad { -class MockMinidump : public Minidump { - public: - MockMinidump() : Minidump("") { - } - MOCK_METHOD0(Read, bool()); - MOCK_CONST_METHOD0(path, string()); - MOCK_CONST_METHOD0(header, const MDRawHeader*()); - MOCK_METHOD0(GetThreadList, MinidumpThreadList*()); +class ExploitabilityLinuxTest : public ExploitabilityLinux { + public: + using ExploitabilityLinux::DisassembleBytes; + using ExploitabilityLinux::TokenizeObjdumpInstruction; + using ExploitabilityLinux::CalculateAddress; }; -} + +class ExploitabilityLinuxTestMinidumpContext : public MinidumpContext { + public: + explicit ExploitabilityLinuxTestMinidumpContext( + const MDRawContextAMD64& context) : MinidumpContext(NULL) { + valid_ = true; + SetContextAMD64(new MDRawContextAMD64(context)); + SetContextFlags(MD_CONTEXT_AMD64); + } +}; + +} // namespace google_breakpad +#endif // _WIN32 namespace { using google_breakpad::BasicSourceLineResolver; -using google_breakpad::CallStack; -using google_breakpad::CodeModule; +#ifndef _WIN32 +using google_breakpad::ExploitabilityLinuxTest; +using google_breakpad::ExploitabilityLinuxTestMinidumpContext; +#endif // _WIN32 using google_breakpad::MinidumpProcessor; -using google_breakpad::MinidumpThreadList; -using google_breakpad::MinidumpThread; -using google_breakpad::MockMinidump; using google_breakpad::ProcessState; -using google_breakpad::SymbolSupplier; -using google_breakpad::SystemInfo; +using google_breakpad::SimpleSymbolSupplier; -class TestSymbolSupplier : public SymbolSupplier { - public: - TestSymbolSupplier() : interrupt_(false) {} +string TestDataDir() { + return string(getenv("srcdir") ? getenv("srcdir") : ".") + + "/src/processor/testdata"; +} - virtual SymbolResult GetSymbolFile(const CodeModule *module, - const SystemInfo *system_info, - string *symbol_file); +// Find the given dump file in /src/processor/testdata, process it, +// and get the exploitability rating. Returns EXPLOITABILITY_ERR_PROCESSING +// if the crash dump can't be processed. +google_breakpad::ExploitabilityRating +ExploitabilityFor(const string& filename) { + SimpleSymbolSupplier supplier(TestDataDir() + "/symbols"); + BasicSourceLineResolver resolver; + MinidumpProcessor processor(&supplier, &resolver, true); + processor.set_enable_objdump(true); + ProcessState state; - virtual SymbolResult GetSymbolFile(const CodeModule *module, - const SystemInfo *system_info, - string *symbol_file, - string *symbol_data); + string minidump_file = TestDataDir() + "/" + filename; - virtual SymbolResult GetCStringSymbolData(const CodeModule *module, - const SystemInfo *system_info, - string *symbol_file, - char **symbol_data); - - virtual void FreeSymbolData(const CodeModule *module) { } - // When set to true, causes the SymbolSupplier to return INTERRUPT - void set_interrupt(bool interrupt) { interrupt_ = interrupt; } - - private: - bool interrupt_; -}; - -SymbolSupplier::SymbolResult TestSymbolSupplier::GetSymbolFile( - const CodeModule *module, - const SystemInfo *system_info, - string *symbol_file) { - - if (interrupt_) { - return INTERRUPT; + if (processor.Process(minidump_file, &state) != + google_breakpad::PROCESS_OK) { + return google_breakpad::EXPLOITABILITY_ERR_PROCESSING; } - return NOT_FOUND; -} - -SymbolSupplier::SymbolResult TestSymbolSupplier::GetCStringSymbolData( - const CodeModule *module, - const SystemInfo *system_info, - string *symbol_file, - char **symbol_data) { - return GetSymbolFile(module, system_info, symbol_file); -} - -SymbolSupplier::SymbolResult TestSymbolSupplier::GetSymbolFile( - const CodeModule *module, - const SystemInfo *system_info, - string *symbol_file, - string *symbol_data) { - return GetSymbolFile(module, system_info, symbol_file); + return state.exploitability(); } TEST(ExploitabilityTest, TestWindowsEngine) { - TestSymbolSupplier supplier; - BasicSourceLineResolver resolver; - MinidumpProcessor processor(&supplier, &resolver, true); - ProcessState state; - - string minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") + - "/src/processor/testdata/ascii_read_av.dmp"; - ASSERT_EQ(processor.Process(minidump_file, &state), - google_breakpad::PROCESS_OK); ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH, - state.exploitability()); - - minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") + - "/src/processor/testdata/ascii_read_av_block_write.dmp"; - ASSERT_EQ(processor.Process(minidump_file, &state), - google_breakpad::PROCESS_OK); + ExploitabilityFor("ascii_read_av.dmp")); ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH, - state.exploitability()); - - minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") + - "/src/processor/testdata/ascii_read_av_clobber_write.dmp"; - ASSERT_EQ(processor.Process(minidump_file, &state), - google_breakpad::PROCESS_OK); + ExploitabilityFor("ascii_read_av_block_write.dmp")); ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH, - state.exploitability()); - - minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") + - "/src/processor/testdata/ascii_read_av_conditional.dmp"; - ASSERT_EQ(processor.Process(minidump_file, &state), - google_breakpad::PROCESS_OK); + ExploitabilityFor("ascii_read_av_clobber_write.dmp")); ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH, - state.exploitability()); - - minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") + - "/src/processor/testdata/ascii_read_av_then_jmp.dmp"; - ASSERT_EQ(processor.Process(minidump_file, &state), - google_breakpad::PROCESS_OK); + ExploitabilityFor("ascii_read_av_conditional.dmp")); ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH, - state.exploitability()); - - minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") + - "/src/processor/testdata/ascii_read_av_xchg_write.dmp"; - ASSERT_EQ(processor.Process(minidump_file, &state), - google_breakpad::PROCESS_OK); + ExploitabilityFor("ascii_read_av_then_jmp.dmp")); ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH, - state.exploitability()); - - minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") + - "/src/processor/testdata/ascii_write_av.dmp"; - ASSERT_EQ(processor.Process(minidump_file, &state), - google_breakpad::PROCESS_OK); + ExploitabilityFor("ascii_read_av_xchg_write.dmp")); ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH, - state.exploitability()); - - minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") + - "/src/processor/testdata/ascii_write_av_arg_to_call.dmp"; - ASSERT_EQ(processor.Process(minidump_file, &state), - google_breakpad::PROCESS_OK); + ExploitabilityFor("ascii_write_av.dmp")); ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH, - state.exploitability()); - - minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") + - "/src/processor/testdata/null_read_av.dmp"; - ASSERT_EQ(processor.Process(minidump_file, &state), - google_breakpad::PROCESS_OK); + ExploitabilityFor("ascii_write_av_arg_to_call.dmp")); ASSERT_EQ(google_breakpad::EXPLOITABILITY_NONE, - state.exploitability()); - - minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") + - "/src/processor/testdata/null_write_av.dmp"; - ASSERT_EQ(processor.Process(minidump_file, &state), - google_breakpad::PROCESS_OK); + ExploitabilityFor("null_read_av.dmp")); ASSERT_EQ(google_breakpad::EXPLOITABILITY_NONE, - state.exploitability()); - - minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") + - "/src/processor/testdata/stack_exhaustion.dmp"; - ASSERT_EQ(processor.Process(minidump_file, &state), - google_breakpad::PROCESS_OK); + ExploitabilityFor("null_write_av.dmp")); ASSERT_EQ(google_breakpad::EXPLOITABILITY_NONE, - state.exploitability()); - - minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") + - "/src/processor/testdata/exec_av_on_stack.dmp"; - ASSERT_EQ(processor.Process(minidump_file, &state), - google_breakpad::PROCESS_OK); + ExploitabilityFor("stack_exhaustion.dmp")); ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH, - state.exploitability()); - - minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") + - "/src/processor/testdata/write_av_non_null.dmp"; - ASSERT_EQ(processor.Process(minidump_file, &state), - google_breakpad::PROCESS_OK); - ASSERT_EQ(google_breakpad::EXPLOITABLITY_MEDIUM, - state.exploitability()); - - minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") + - "/src/processor/testdata/read_av_non_null.dmp"; - ASSERT_EQ(processor.Process(minidump_file, &state), - google_breakpad::PROCESS_OK); + ExploitabilityFor("exec_av_on_stack.dmp")); + ASSERT_EQ(google_breakpad::EXPLOITABILITY_MEDIUM, + ExploitabilityFor("write_av_non_null.dmp")); ASSERT_EQ(google_breakpad::EXPLOITABILITY_LOW, - state.exploitability()); - - minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") + - "/src/processor/testdata/read_av_clobber_write.dmp"; - ASSERT_EQ(processor.Process(minidump_file, &state), - google_breakpad::PROCESS_OK); + ExploitabilityFor("read_av_non_null.dmp")); ASSERT_EQ(google_breakpad::EXPLOITABILITY_LOW, - state.exploitability()); - - minidump_file = string(getenv("srcdir") ? getenv("srcdir") : ".") + - "/src/processor/testdata/read_av_conditional.dmp"; - ASSERT_EQ(processor.Process(minidump_file, &state), - google_breakpad::PROCESS_OK); + ExploitabilityFor("read_av_clobber_write.dmp")); ASSERT_EQ(google_breakpad::EXPLOITABILITY_LOW, - state.exploitability()); + ExploitabilityFor("read_av_conditional.dmp")); } + +TEST(ExploitabilityTest, TestLinuxEngine) { + ASSERT_EQ(google_breakpad::EXPLOITABILITY_INTERESTING, + ExploitabilityFor("linux_null_read_av.dmp")); + ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH, + ExploitabilityFor("linux_overflow.dmp")); + ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH, + ExploitabilityFor("linux_stacksmash.dmp")); + ASSERT_EQ(google_breakpad::EXPLOITABILITY_NONE, + ExploitabilityFor("linux_divide_by_zero.dmp")); + ASSERT_EQ(google_breakpad::EXPLOITABILITY_INTERESTING, + ExploitabilityFor("linux_null_dereference.dmp")); + ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH, + ExploitabilityFor("linux_jmp_to_0.dmp")); + ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH, + ExploitabilityFor("linux_outside_module.dmp")); + ASSERT_EQ(google_breakpad::EXPLOITABILITY_NONE, + ExploitabilityFor("linux_raise_sigabrt.dmp")); + ASSERT_EQ(google_breakpad::EXPLOITABILITY_INTERESTING, + ExploitabilityFor("linux_inside_module_exe_region1.dmp")); + ASSERT_EQ(google_breakpad::EXPLOITABILITY_INTERESTING, + ExploitabilityFor("linux_inside_module_exe_region2.dmp")); + ASSERT_EQ(google_breakpad::EXPLOITABILITY_INTERESTING, + ExploitabilityFor("linux_stack_pointer_in_stack.dmp")); + ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH, + ExploitabilityFor("linux_stack_pointer_in_module.dmp")); + ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH, + ExploitabilityFor("linux_executable_stack.dmp")); + ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH, + ExploitabilityFor("linux_executable_heap.dmp")); + ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH, + ExploitabilityFor("linux_jmp_to_module_not_exe_region.dmp")); +#ifndef _WIN32 + ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH, + ExploitabilityFor("linux_write_to_nonwritable_module.dmp")); + ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH, + ExploitabilityFor("linux_write_to_nonwritable_region_math.dmp")); + ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH, + ExploitabilityFor("linux_write_to_outside_module.dmp")); + ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH, + ExploitabilityFor("linux_write_to_outside_module_via_math.dmp")); + ASSERT_EQ(google_breakpad::EXPLOITABILITY_INTERESTING, + ExploitabilityFor("linux_write_to_under_4k.dmp")); +#endif // _WIN32 } + +#ifndef _WIN32 +TEST(ExploitabilityLinuxUtilsTest, DisassembleBytesTest) { + ASSERT_FALSE(ExploitabilityLinuxTest::DisassembleBytes("", NULL, 5, NULL)); + uint8_t bytes[6] = {0xc7, 0x0, 0x5, 0x0, 0x0, 0x0}; + char buffer[1024] = {0}; + ASSERT_TRUE(ExploitabilityLinuxTest::DisassembleBytes("i386:x86-64", + bytes, + 1024, + buffer)); + std::stringstream objdump_stream; + objdump_stream.str(string(buffer)); + string line = ""; + while ((line.find("0:") == string::npos) && getline(objdump_stream, line)) { + } + ASSERT_EQ(line, " 0:\tc7 00 05 00 00 00 \tmov DWORD PTR [rax],0x5"); +} + +TEST(ExploitabilityLinuxUtilsTest, TokenizeObjdumpInstructionTest) { + ASSERT_FALSE(ExploitabilityLinuxTest::TokenizeObjdumpInstruction("", + NULL, + NULL, + NULL)); + string line = "0: c7 00 05 00 00 00 mov DWORD PTR [rax],0x5"; + string operation = ""; + string dest = ""; + string src = ""; + ASSERT_TRUE(ExploitabilityLinuxTest::TokenizeObjdumpInstruction(line, + &operation, + &dest, + &src)); + ASSERT_EQ(operation, "mov"); + ASSERT_EQ(dest, "[rax]"); + ASSERT_EQ(src, "0x5"); + line = "0: c3 ret"; + ASSERT_TRUE(ExploitabilityLinuxTest::TokenizeObjdumpInstruction(line, + &operation, + &dest, + &src)); + ASSERT_EQ(operation, "ret"); + ASSERT_EQ(dest, ""); + ASSERT_EQ(src, ""); + line = "0: 5f pop rdi"; + ASSERT_TRUE(ExploitabilityLinuxTest::TokenizeObjdumpInstruction(line, + &operation, + &dest, + &src)); + ASSERT_EQ(operation, "pop"); + ASSERT_EQ(dest, "rdi"); + ASSERT_EQ(src, ""); +} + +TEST(ExploitabilityLinuxUtilsTest, CalculateAddressTest) { + MDRawContextAMD64 raw_context; + raw_context.rdx = 12345; + ExploitabilityLinuxTestMinidumpContext context(raw_context); + ASSERT_EQ(context.GetContextAMD64()->rdx, 12345); + ASSERT_FALSE(ExploitabilityLinuxTest::CalculateAddress("", context, NULL)); + uint64_t write_address = 0; + ASSERT_TRUE(ExploitabilityLinuxTest::CalculateAddress("rdx-0x4D2", + context, + &write_address)); + ASSERT_EQ(write_address, 11111); + ASSERT_TRUE(ExploitabilityLinuxTest::CalculateAddress("rdx+0x4D2", + context, + &write_address)); + ASSERT_EQ(write_address, 13579); + ASSERT_FALSE(ExploitabilityLinuxTest::CalculateAddress("rdx+rax", + context, + &write_address)); + ASSERT_FALSE(ExploitabilityLinuxTest::CalculateAddress("0x3482+0x4D2", + context, + &write_address)); +} +#endif // _WIN32 + +} // namespace diff --git a/toolkit/crashreporter/google-breakpad/src/processor/exploitability_win.cc b/toolkit/crashreporter/google-breakpad/src/processor/exploitability_win.cc index e20fbdda4e20..a1f8703a6ef0 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/exploitability_win.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/exploitability_win.cc @@ -105,22 +105,15 @@ ExploitabilityRating ExploitabilityWin::CheckPlatformExploitability() { uint64_t stack_ptr = 0; uint64_t instruction_ptr = 0; - uint64_t this_ptr = 0; - switch (context->GetContextCPU()) { - case MD_CONTEXT_X86: - stack_ptr = context->GetContextX86()->esp; - instruction_ptr = context->GetContextX86()->eip; - this_ptr = context->GetContextX86()->ecx; - break; - case MD_CONTEXT_AMD64: - stack_ptr = context->GetContextAMD64()->rsp; - instruction_ptr = context->GetContextAMD64()->rip; - this_ptr = context->GetContextAMD64()->rcx; - break; - default: - BPLOG(INFO) << "Unsupported architecture."; - return EXPLOITABILITY_ERR_PROCESSING; + // Getting the instruction pointer. + if (!context->GetInstructionPointer(&instruction_ptr)) { + return EXPLOITABILITY_ERR_PROCESSING; + } + + // Getting the stack pointer. + if (!context->GetStackPointer(&stack_ptr)) { + return EXPLOITABILITY_ERR_PROCESSING; } // Check if we are executing on the stack. diff --git a/toolkit/crashreporter/google-breakpad/src/processor/fast_source_line_resolver.cc b/toolkit/crashreporter/google-breakpad/src/processor/fast_source_line_resolver.cc index 86073d2d1a3f..4a3d000714e7 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/fast_source_line_resolver.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/fast_source_line_resolver.cc @@ -47,6 +47,7 @@ #include "common/scoped_ptr.h" #include "common/using_std_string.h" #include "processor/module_factory.h" +#include "processor/simple_serializer-inl.h" using std::map; using std::make_pair; @@ -143,8 +144,14 @@ WindowsFrameInfo FastSourceLineResolver::CopyWFI(const char *raw) { // Loads a map from the given buffer in char* type. // Does NOT take ownership of mem_buffer. // In addition, treat mem_buffer as const char*. -bool FastSourceLineResolver::Module::LoadMapFromMemory(char *mem_buffer) { - if (!mem_buffer) return false; +bool FastSourceLineResolver::Module::LoadMapFromMemory( + char *memory_buffer, + size_t memory_buffer_size) { + if (!memory_buffer) return false; + + // Read the "is_corrupt" flag. + const char *mem_buffer = memory_buffer; + mem_buffer = SimpleSerializer::Read(mem_buffer, &is_corrupt_); const uint32_t *map_sizes = reinterpret_cast(mem_buffer); diff --git a/toolkit/crashreporter/google-breakpad/src/processor/fast_source_line_resolver_types.h b/toolkit/crashreporter/google-breakpad/src/processor/fast_source_line_resolver_types.h index c4cec60f89a6..2c010470f5bd 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/fast_source_line_resolver_types.h +++ b/toolkit/crashreporter/google-breakpad/src/processor/fast_source_line_resolver_types.h @@ -112,7 +112,7 @@ public SourceLineResolverBase::PublicSymbol { class FastSourceLineResolver::Module: public SourceLineResolverBase::Module { public: - explicit Module(const string &name) : name_(name) { } + explicit Module(const string &name) : name_(name), is_corrupt_(false) { } virtual ~Module() { } // Looks up the given relative address, and fills the StackFrame struct @@ -120,7 +120,12 @@ class FastSourceLineResolver::Module: public SourceLineResolverBase::Module { virtual void LookupAddress(StackFrame *frame) const; // Loads a map from the given buffer in char* type. - virtual bool LoadMapFromMemory(char *memory_buffer); + virtual bool LoadMapFromMemory(char *memory_buffer, + size_t memory_buffer_size); + + // Tells whether the loaded symbol data is corrupt. Return value is + // undefined, if the symbol data hasn't been loaded yet. + virtual bool IsCorrupt() const { return is_corrupt_; } // If Windows stack walking information is available covering ADDRESS, // return a WindowsFrameInfo structure describing it. If the information @@ -147,6 +152,7 @@ class FastSourceLineResolver::Module: public SourceLineResolverBase::Module { StaticMap files_; StaticRangeMap functions_; StaticAddressMap public_symbols_; + bool is_corrupt_; // Each element in the array is a ContainedRangeMap for a type // listed in WindowsFrameInfoTypes. These are split by type because diff --git a/toolkit/crashreporter/google-breakpad/src/processor/fast_source_line_resolver_unittest.cc b/toolkit/crashreporter/google-breakpad/src/processor/fast_source_line_resolver_unittest.cc index 76de1674e987..72632f84f920 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/fast_source_line_resolver_unittest.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/fast_source_line_resolver_unittest.cc @@ -37,6 +37,7 @@ // // Author: Siyang Xie (lambxsy@google.com) +#include #include #include @@ -56,25 +57,15 @@ namespace { using google_breakpad::SourceLineResolverBase; using google_breakpad::BasicSourceLineResolver; using google_breakpad::FastSourceLineResolver; -using google_breakpad::FromUniqueString; using google_breakpad::ModuleSerializer; using google_breakpad::ModuleComparer; using google_breakpad::CFIFrameInfo; using google_breakpad::CodeModule; using google_breakpad::MemoryRegion; using google_breakpad::StackFrame; -using google_breakpad::ToUniqueString; -using google_breakpad::UniqueString; using google_breakpad::WindowsFrameInfo; using google_breakpad::linked_ptr; using google_breakpad::scoped_ptr; -using google_breakpad::ustr__ZDcfa; -using google_breakpad::ustr__ZDra; -using google_breakpad::ustr__ZSebx; -using google_breakpad::ustr__ZSebp; -using google_breakpad::ustr__ZSedi; -using google_breakpad::ustr__ZSesi; -using google_breakpad::ustr__ZSesp; class TestCodeModule : public CodeModule { public: @@ -123,6 +114,9 @@ class MockMemoryRegion: public MemoryRegion { *value = address; return true; } + void Print() const { + assert(false); + } }; // Verify that, for every association in ACTUAL, EXPECTED has the same @@ -131,30 +125,27 @@ class MockMemoryRegion: public MemoryRegion { // ".cfa". static bool VerifyRegisters( const char *file, int line, - const std::map &expected, - const CFIFrameInfo::RegisterValueMap &actual_regmap) { - std::map actual; - actual_regmap.copy_to_map(&actual); - - std::map::const_iterator a; - a = actual.find(ustr__ZDcfa()); + const CFIFrameInfo::RegisterValueMap &expected, + const CFIFrameInfo::RegisterValueMap &actual) { + CFIFrameInfo::RegisterValueMap::const_iterator a; + a = actual.find(".cfa"); if (a == actual.end()) return false; - a = actual.find(ustr__ZDra()); + a = actual.find(".ra"); if (a == actual.end()) return false; for (a = actual.begin(); a != actual.end(); a++) { - std::map::const_iterator e = + CFIFrameInfo::RegisterValueMap::const_iterator e = expected.find(a->first); if (e == expected.end()) { fprintf(stderr, "%s:%d: unexpected register '%s' recovered, value 0x%x\n", - file, line, FromUniqueString(a->first), a->second); + file, line, a->first.c_str(), a->second); return false; } if (e->second != a->second) { fprintf(stderr, "%s:%d: register '%s' recovered value was 0x%x, expected 0x%x\n", - file, line, FromUniqueString(a->first), a->second, e->second); + file, line, a->first.c_str(), a->second, e->second); return false; } // Don't complain if this doesn't recover all registers. Although @@ -295,27 +286,26 @@ TEST_F(TestFastSourceLineResolver, TestLoadAndResolve) { CFIFrameInfo::RegisterValueMap current_registers; CFIFrameInfo::RegisterValueMap caller_registers; - std::map expected_caller_registers; + CFIFrameInfo::RegisterValueMap expected_caller_registers; MockMemoryRegion memory; // Regardless of which instruction evaluation takes place at, it // should produce the same values for the caller's registers. - // should produce the same values for the caller's registers. - expected_caller_registers[ustr__ZDcfa()] = 0x1001c; - expected_caller_registers[ustr__ZDra()] = 0xf6438648; - expected_caller_registers[ustr__ZSebp()] = 0x10038; - expected_caller_registers[ustr__ZSebx()] = 0x98ecadc3; - expected_caller_registers[ustr__ZSesi()] = 0x878f7524; - expected_caller_registers[ustr__ZSedi()] = 0x6312f9a5; + expected_caller_registers[".cfa"] = 0x1001c; + expected_caller_registers[".ra"] = 0xf6438648; + expected_caller_registers["$ebp"] = 0x10038; + expected_caller_registers["$ebx"] = 0x98ecadc3; + expected_caller_registers["$esi"] = 0x878f7524; + expected_caller_registers["$edi"] = 0x6312f9a5; frame.instruction = 0x3d40; frame.module = &module1; current_registers.clear(); - current_registers.set(ustr__ZSesp(), 0x10018); - current_registers.set(ustr__ZSebp(), 0x10038); - current_registers.set(ustr__ZSebx(), 0x98ecadc3); - current_registers.set(ustr__ZSesi(), 0x878f7524); - current_registers.set(ustr__ZSedi(), 0x6312f9a5); + current_registers["$esp"] = 0x10018; + current_registers["$ebp"] = 0x10038; + current_registers["$ebx"] = 0x98ecadc3; + current_registers["$esi"] = 0x878f7524; + current_registers["$edi"] = 0x6312f9a5; cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame)); ASSERT_TRUE(cfi_frame_info.get()); ASSERT_TRUE(cfi_frame_info.get() @@ -325,7 +315,7 @@ TEST_F(TestFastSourceLineResolver, TestLoadAndResolve) { expected_caller_registers, caller_registers)); frame.instruction = 0x3d41; - current_registers.set(ustr__ZSesp(), 0x10014); + current_registers["$esp"] = 0x10014; cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame)); ASSERT_TRUE(cfi_frame_info.get()); ASSERT_TRUE(cfi_frame_info.get() @@ -335,7 +325,7 @@ TEST_F(TestFastSourceLineResolver, TestLoadAndResolve) { expected_caller_registers, caller_registers)); frame.instruction = 0x3d43; - current_registers.set(ustr__ZSebp(), 0x10014); + current_registers["$ebp"] = 0x10014; cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame)); ASSERT_TRUE(cfi_frame_info.get()); ASSERT_TRUE(cfi_frame_info.get() @@ -345,7 +335,7 @@ TEST_F(TestFastSourceLineResolver, TestLoadAndResolve) { expected_caller_registers, caller_registers); frame.instruction = 0x3d54; - current_registers.set(ustr__ZSebx(), 0x6864f054U); + current_registers["$ebx"] = 0x6864f054U; cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame)); ASSERT_TRUE(cfi_frame_info.get()); ASSERT_TRUE(cfi_frame_info.get() @@ -355,7 +345,7 @@ TEST_F(TestFastSourceLineResolver, TestLoadAndResolve) { expected_caller_registers, caller_registers); frame.instruction = 0x3d5a; - current_registers.set(ustr__ZSesi(), 0x6285f79aU); + current_registers["$esi"] = 0x6285f79aU; cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame)); ASSERT_TRUE(cfi_frame_info.get()); ASSERT_TRUE(cfi_frame_info.get() @@ -365,7 +355,7 @@ TEST_F(TestFastSourceLineResolver, TestLoadAndResolve) { expected_caller_registers, caller_registers); frame.instruction = 0x3d84; - current_registers.set(ustr__ZSedi(), 0x64061449U); + current_registers["$edi"] = 0x64061449U; cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame)); ASSERT_TRUE(cfi_frame_info.get()); ASSERT_TRUE(cfi_frame_info.get() @@ -417,28 +407,32 @@ TEST_F(TestFastSourceLineResolver, TestLoadAndResolve) { TEST_F(TestFastSourceLineResolver, TestInvalidLoads) { TestCodeModule module3("module3"); - ASSERT_FALSE(basic_resolver.LoadModule(&module3, - testdata_dir + "/module3_bad.out")); - ASSERT_FALSE(basic_resolver.HasModule(&module3)); + ASSERT_TRUE(basic_resolver.LoadModule(&module3, + testdata_dir + "/module3_bad.out")); + ASSERT_TRUE(basic_resolver.HasModule(&module3)); + ASSERT_TRUE(basic_resolver.IsModuleCorrupt(&module3)); // Convert module3 to fast_module: - ASSERT_FALSE(serializer.ConvertOneModule(module3.code_file(), - &basic_resolver, - &fast_resolver)); - ASSERT_FALSE(fast_resolver.HasModule(&module3)); + ASSERT_TRUE(serializer.ConvertOneModule(module3.code_file(), + &basic_resolver, + &fast_resolver)); + ASSERT_TRUE(fast_resolver.HasModule(&module3)); + ASSERT_TRUE(fast_resolver.IsModuleCorrupt(&module3)); TestCodeModule module4("module4"); - ASSERT_FALSE(basic_resolver.LoadModule(&module4, - testdata_dir + "/module4_bad.out")); - ASSERT_FALSE(basic_resolver.HasModule(&module4)); + ASSERT_TRUE(basic_resolver.LoadModule(&module4, + testdata_dir + "/module4_bad.out")); + ASSERT_TRUE(basic_resolver.HasModule(&module4)); + ASSERT_TRUE(basic_resolver.IsModuleCorrupt(&module4)); // Convert module4 to fast_module: - ASSERT_FALSE(serializer.ConvertOneModule(module4.code_file(), - &basic_resolver, - &fast_resolver)); - ASSERT_FALSE(fast_resolver.HasModule(&module4)); + ASSERT_TRUE(serializer.ConvertOneModule(module4.code_file(), + &basic_resolver, + &fast_resolver)); + ASSERT_TRUE(fast_resolver.HasModule(&module4)); + ASSERT_TRUE(fast_resolver.IsModuleCorrupt(&module4)); TestCodeModule module5("module5"); ASSERT_FALSE(fast_resolver.LoadModule(&module5, - testdata_dir + "/invalid-filename")); + testdata_dir + "/invalid-filename")); ASSERT_FALSE(fast_resolver.HasModule(&module5)); TestCodeModule invalidmodule("invalid-module"); @@ -471,6 +465,7 @@ TEST_F(TestFastSourceLineResolver, TestUnload) { TEST_F(TestFastSourceLineResolver, CompareModule) { char *symbol_data; + size_t symbol_data_size; string symbol_data_string; string filename; @@ -479,8 +474,8 @@ TEST_F(TestFastSourceLineResolver, CompareModule) { ss << testdata_dir << "/module" << module_index << ".out"; filename = ss.str(); ASSERT_TRUE(SourceLineResolverBase::ReadSymbolFile( - &symbol_data, symbol_file(module_index))); - symbol_data_string = symbol_data; + symbol_file(module_index), &symbol_data, &symbol_data_size)); + symbol_data_string.assign(symbol_data, symbol_data_size); delete [] symbol_data; ASSERT_TRUE(module_comparer.Compare(symbol_data_string)); } diff --git a/toolkit/crashreporter/google-breakpad/src/common/logging.cc b/toolkit/crashreporter/google-breakpad/src/processor/logging.cc similarity index 82% rename from toolkit/crashreporter/google-breakpad/src/common/logging.cc rename to toolkit/crashreporter/google-breakpad/src/processor/logging.cc index 9e9c417d177c..8bb95a695aa9 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/logging.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/logging.cc @@ -42,17 +42,13 @@ #include #include "common/using_std_string.h" -#include "common/logging.h" -#include "common/pathname_stripper.h" +#include "processor/logging.h" +#include "processor/pathname_stripper.h" -#if defined(_MSC_VER) && _MSC_VER < 1900 +#ifdef _WIN32 #define snprintf _snprintf #endif -#ifdef __ANDROID__ -# include -#endif - namespace google_breakpad { LogStream::LogStream(std::ostream &stream, Severity severity, @@ -79,18 +75,12 @@ LogStream::LogStream(std::ostream &stream, Severity severity, break; } - str_ << time_string << ": " << PathnameStripper::File(file) << ":" << - line << ": " << severity_string << ": "; + stream_ << time_string << ": " << PathnameStripper::File(file) << ":" << + line << ": " << severity_string << ": "; } LogStream::~LogStream() { -#ifdef __ANDROID__ - __android_log_print(ANDROID_LOG_ERROR, - "Profiler", "%s", str_.str().c_str()); -#else - stream_ << str_.str(); stream_ << std::endl; -#endif } string HexString(uint32_t number) { @@ -123,17 +113,3 @@ int ErrnoString(string *error_string) { } } // namespace google_breakpad - -bool is_power_of_2(uint64_t x_in) -{ - uint64_t x = x_in; - x = x | (x >> 1); - x = x | (x >> 2); - x = x | (x >> 4); - x = x | (x >> 8); - x = x | (x >> 16); - x = x | (x >> 32); - x = x - (x >> 1); - // x has now been rounded down to the nearest power of 2 <= x_in. - return x == x_in; -} diff --git a/toolkit/crashreporter/google-breakpad/src/common/logging.h b/toolkit/crashreporter/google-breakpad/src/processor/logging.h similarity index 91% rename from toolkit/crashreporter/google-breakpad/src/common/logging.h rename to toolkit/crashreporter/google-breakpad/src/processor/logging.h index 926661cf349d..406fb67cf6ef 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/logging.h +++ b/toolkit/crashreporter/google-breakpad/src/processor/logging.h @@ -58,7 +58,6 @@ #define PROCESSOR_LOGGING_H__ #include -#include #include #include "common/using_std_string.h" @@ -107,15 +106,12 @@ class LogStream { // Finish logging by printing a newline and flushing the output stream. ~LogStream(); - // Accumulate text in the str_. It will be emitted to stream_ when - // the object is destructed. template std::ostream& operator<<(const T &t) { - return str_ << t; + return stream_ << t; } private: std::ostream &stream_; - std::ostringstream str_; // Disallow copy constructor and assignment operator explicit LogStream(const LogStream &that); @@ -146,15 +142,24 @@ int ErrnoString(string *error_string); } // namespace google_breakpad -// Useful for doing exponential backoff of error reporting -bool is_power_of_2(uint64_t); - #ifndef BPLOG_INIT #define BPLOG_INIT(pargc, pargv) #endif // BPLOG_INIT +#define BPLOG_LAZY_STREAM(stream, condition) \ + !(condition) ? (void) 0 : \ + google_breakpad::LogMessageVoidify() & (BPLOG_ ## stream) + +#ifndef BPLOG_MINIMUM_SEVERITY +#define BPLOG_MINIMUM_SEVERITY SEVERITY_INFO +#endif + +#define BPLOG_LOG_IS_ON(severity) \ + ((google_breakpad::LogStream::SEVERITY_ ## severity) >= \ + (google_breakpad::LogStream::BPLOG_MINIMUM_SEVERITY)) + #ifndef BPLOG -#define BPLOG(severity) BPLOG_ ## severity +#define BPLOG(severity) BPLOG_LAZY_STREAM(severity, BPLOG_LOG_IS_ON(severity)) #endif // BPLOG #ifndef BPLOG_INFO @@ -176,7 +181,6 @@ bool is_power_of_2(uint64_t); #endif // BPLOG_ERROR #define BPLOG_IF(severity, condition) \ - !(condition) ? (void) 0 : \ - google_breakpad::LogMessageVoidify() & BPLOG(severity) + BPLOG_LAZY_STREAM(severity, ((condition) && BPLOG_LOG_IS_ON(severity))) #endif // PROCESSOR_LOGGING_H__ diff --git a/toolkit/crashreporter/google-breakpad/src/processor/map_serializers_unittest.cc b/toolkit/crashreporter/google-breakpad/src/processor/map_serializers_unittest.cc index 95d03d01c0f0..0d872ec2e21a 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/map_serializers_unittest.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/map_serializers_unittest.cc @@ -49,8 +49,6 @@ typedef int32_t AddrType; typedef int32_t EntryType; -const int kSizeOfInt = 4; - class TestStdMapSerializer : public ::testing::Test { protected: void SetUp() { diff --git a/toolkit/crashreporter/google-breakpad/src/processor/microdump.cc b/toolkit/crashreporter/google-breakpad/src/processor/microdump.cc new file mode 100644 index 000000000000..6a51a9971a92 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/processor/microdump.cc @@ -0,0 +1,319 @@ +// Copyright (c) 2014 Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// microdump.cc: A microdump reader. +// +// See microdump.h for documentation. + +#include "google_breakpad/processor/microdump.h" + +#include +#include + +#include +#include +#include +#include + +#include "google_breakpad/common/minidump_cpu_arm.h" +#include "google_breakpad/processor/code_module.h" +#include "processor/basic_code_module.h" +#include "processor/linked_ptr.h" +#include "processor/logging.h" +#include "processor/range_map-inl.h" + +namespace { +static const char kGoogleBreakpadKey[] = "google-breakpad"; +static const char kMicrodumpBegin[] = "-----BEGIN BREAKPAD MICRODUMP-----"; +static const char kMicrodumpEnd[] = "-----END BREAKPAD MICRODUMP-----"; +static const char kOsKey[] = ": O "; +static const char kCpuKey[] = ": C "; +static const char kMmapKey[] = ": M "; +static const char kStackKey[] = ": S "; +static const char kStackFirstLineKey[] = ": S 0 "; +static const char kArmArchitecture[] = "arm"; +static const char kArm64Architecture[] = "arm64"; + +template +T HexStrToL(const string& str) { + uint64_t res = 0; + std::istringstream ss(str); + ss >> std::hex >> res; + return static_cast(res); +} + +std::vector ParseHexBuf(const string& str) { + std::vector buf; + for (size_t i = 0; i < str.length(); i += 2) { + buf.push_back(HexStrToL(str.substr(i, 2))); + } + return buf; +} + +bool GetLine(std::istringstream* istream, string* str) { + if (std::getline(*istream, *str)) { + // Trim any trailing newline from the end of the line. Allows us + // to seamlessly handle both Windows/DOS and Unix formatted input. The + // adb tool generally writes logcat dumps in Windows/DOS format. + if (!str->empty() && str->at(str->size() - 1) == '\r') { + str->erase(str->size() - 1); + } + return true; + } + return false; +} + +} // namespace + +namespace google_breakpad { + +// +// MicrodumpModules +// + +void MicrodumpModules::Add(const CodeModule* module) { + linked_ptr module_ptr(module); + if (!map_->StoreRange(module->base_address(), module->size(), module_ptr)) { + BPLOG(ERROR) << "Module " << module->code_file() << + " could not be stored"; + } +} + + +// +// MicrodumpContext +// + +void MicrodumpContext::SetContextARM(MDRawContextARM* arm) { + DumpContext::SetContextFlags(MD_CONTEXT_ARM); + DumpContext::SetContextARM(arm); + valid_ = true; +} + +void MicrodumpContext::SetContextARM64(MDRawContextARM64* arm64) { + DumpContext::SetContextFlags(MD_CONTEXT_ARM64); + DumpContext::SetContextARM64(arm64); + valid_ = true; +} + + +// +// MicrodumpMemoryRegion +// + +MicrodumpMemoryRegion::MicrodumpMemoryRegion() : base_address_(0) { } + +void MicrodumpMemoryRegion::Init(uint64_t base_address, + const std::vector& contents) { + base_address_ = base_address; + contents_ = contents; +} + +uint64_t MicrodumpMemoryRegion::GetBase() const { return base_address_; } + +uint32_t MicrodumpMemoryRegion::GetSize() const { return contents_.size(); } + +bool MicrodumpMemoryRegion::GetMemoryAtAddress(uint64_t address, + uint8_t* value) const { + return GetMemoryLittleEndian(address, value); +} + +bool MicrodumpMemoryRegion::GetMemoryAtAddress(uint64_t address, + uint16_t* value) const { + return GetMemoryLittleEndian(address, value); +} + +bool MicrodumpMemoryRegion::GetMemoryAtAddress(uint64_t address, + uint32_t* value) const { + return GetMemoryLittleEndian(address, value); +} + +bool MicrodumpMemoryRegion::GetMemoryAtAddress(uint64_t address, + uint64_t* value) const { + return GetMemoryLittleEndian(address, value); +} + +template +bool MicrodumpMemoryRegion::GetMemoryLittleEndian(uint64_t address, + ValueType* value) const { + if (address < base_address_ || + address - base_address_ + sizeof(ValueType) > contents_.size()) + return false; + ValueType v = 0; + uint64_t start = address - base_address_; + // The loop condition is odd, but it's correct for size_t. + for (size_t i = sizeof(ValueType) - 1; i < sizeof(ValueType); i--) + v = (v << 8) | static_cast(contents_[start + i]); + *value = v; + return true; +} + +void MicrodumpMemoryRegion::Print() const { + // Not reached, just needed to honor the base class contract. + assert(false); +} + +// +// Microdump +// +Microdump::Microdump(const string& contents) + : context_(new MicrodumpContext()), + stack_region_(new MicrodumpMemoryRegion()), + modules_(new MicrodumpModules()), + system_info_(new SystemInfo()) { + assert(!contents.empty()); + + bool in_microdump = false; + string line; + uint64_t stack_start = 0; + std::vector stack_content; + string arch; + + std::istringstream stream(contents); + while (GetLine(&stream, &line)) { + if (line.find(kGoogleBreakpadKey) == string::npos) { + continue; + } + if (line.find(kMicrodumpBegin) != string::npos) { + in_microdump = true; + continue; + } + if (line.find(kMicrodumpEnd) != string::npos) { + break; + } + + if (!in_microdump) { + continue; + } + + size_t pos; + if ((pos = line.find(kOsKey)) != string::npos) { + string os_str(line, pos + strlen(kOsKey)); + std::istringstream os_tokens(os_str); + string os_id; + string num_cpus; + string os_version; + // This reflect the actual HW arch and might not match the arch emulated + // for the execution (e.g., running a 32-bit binary on a 64-bit cpu). + string hw_arch; + + os_tokens >> os_id; + os_tokens >> arch; + os_tokens >> num_cpus; + os_tokens >> hw_arch; + GetLine(&os_tokens, &os_version); + os_version.erase(0, 1); // remove leading space. + + system_info_->cpu = arch; + system_info_->cpu_count = HexStrToL(num_cpus); + system_info_->os_version = os_version; + + if (os_id == "L") { + system_info_->os = "Linux"; + system_info_->os_short = "linux"; + } else if (os_id == "A") { + system_info_->os = "Android"; + system_info_->os_short = "android"; + } + + // OS line also contains release and version for future use. + } else if ((pos = line.find(kStackKey)) != string::npos) { + if (line.find(kStackFirstLineKey) != string::npos) { + // The first line of the stack (S 0 stack header) provides the value of + // the stack pointer, the start address of the stack being dumped and + // the length of the stack. We could use it in future to double check + // that we received all the stack as expected. + continue; + } + string stack_str(line, pos + strlen(kStackKey)); + std::istringstream stack_tokens(stack_str); + string start_addr_str; + string raw_content; + stack_tokens >> start_addr_str; + stack_tokens >> raw_content; + uint64_t start_addr = HexStrToL(start_addr_str); + + if (stack_start != 0) { + // Verify that the stack chunks in the microdump are contiguous. + assert(start_addr == stack_start + stack_content.size()); + } else { + stack_start = start_addr; + } + std::vector chunk = ParseHexBuf(raw_content); + stack_content.insert(stack_content.end(), chunk.begin(), chunk.end()); + + } else if ((pos = line.find(kCpuKey)) != string::npos) { + string cpu_state_str(line, pos + strlen(kCpuKey)); + std::vector cpu_state_raw = ParseHexBuf(cpu_state_str); + if (strcmp(arch.c_str(), kArmArchitecture) == 0) { + if (cpu_state_raw.size() != sizeof(MDRawContextARM)) { + std::cerr << "Malformed CPU context. Got " << cpu_state_raw.size() << + " bytes instead of " << sizeof(MDRawContextARM) << std::endl; + continue; + } + MDRawContextARM* arm = new MDRawContextARM(); + memcpy(arm, &cpu_state_raw[0], cpu_state_raw.size()); + context_->SetContextARM(arm); + } else if (strcmp(arch.c_str(), kArm64Architecture) == 0) { + if (cpu_state_raw.size() != sizeof(MDRawContextARM64)) { + std::cerr << "Malformed CPU context. Got " << cpu_state_raw.size() << + " bytes instead of " << sizeof(MDRawContextARM64) << std::endl; + continue; + } + MDRawContextARM64* arm = new MDRawContextARM64(); + memcpy(arm, &cpu_state_raw[0], cpu_state_raw.size()); + context_->SetContextARM64(arm); + } else { + std::cerr << "Unsupported architecture: " << arch << std::endl; + } + } else if ((pos = line.find(kMmapKey)) != string::npos) { + string mmap_line(line, pos + strlen(kMmapKey)); + std::istringstream mmap_tokens(mmap_line); + string addr, offset, size, identifier, filename; + mmap_tokens >> addr; + mmap_tokens >> offset; + mmap_tokens >> size; + mmap_tokens >> identifier; + mmap_tokens >> filename; + + modules_->Add(new BasicCodeModule( + HexStrToL(addr), // base_address + HexStrToL(size), // size + filename, // code_file + identifier, // code_identifier + filename, // debug_file + identifier, // debug_identifier + "")); // version + } + } + stack_region_->Init(stack_start, stack_content); +} + +} // namespace google_breakpad + diff --git a/toolkit/crashreporter/google-breakpad/src/processor/microdump_processor.cc b/toolkit/crashreporter/google-breakpad/src/processor/microdump_processor.cc new file mode 100644 index 000000000000..366e3f30aa97 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/processor/microdump_processor.cc @@ -0,0 +1,100 @@ +// Copyright (c) 2014, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// microdump_processor.cc: A microdump processor. +// +// See microdump_processor.h for documentation. + +#include "google_breakpad/processor/microdump_processor.h" + +#include + +#include + +#include "common/using_std_string.h" +#include "google_breakpad/processor/call_stack.h" +#include "google_breakpad/processor/microdump.h" +#include "google_breakpad/processor/process_state.h" +#include "google_breakpad/processor/stackwalker.h" +#include "google_breakpad/processor/stack_frame_symbolizer.h" +#include "processor/logging.h" + +namespace google_breakpad { + +MicrodumpProcessor::MicrodumpProcessor(StackFrameSymbolizer* frame_symbolizer) + : frame_symbolizer_(frame_symbolizer) { + assert(frame_symbolizer); +} + +MicrodumpProcessor::~MicrodumpProcessor() {} + +ProcessResult MicrodumpProcessor::Process(const string µdump_contents, + ProcessState* process_state) { + assert(process_state); + + process_state->Clear(); + + if (microdump_contents.empty()) { + BPLOG(ERROR) << "Microdump is empty."; + return PROCESS_ERROR_MINIDUMP_NOT_FOUND; + } + + Microdump microdump(microdump_contents); + process_state->modules_ = microdump.GetModules()->Copy(); + scoped_ptr stackwalker( + Stackwalker::StackwalkerForCPU( + &process_state->system_info_, + microdump.GetContext(), + microdump.GetMemory(), + process_state->modules_, + frame_symbolizer_)); + + scoped_ptr stack(new CallStack()); + if (stackwalker.get()) { + if (!stackwalker->Walk(stack.get(), + &process_state->modules_without_symbols_, + &process_state->modules_with_corrupt_symbols_)) { + BPLOG(INFO) << "Processing was interrupted."; + return PROCESS_SYMBOL_SUPPLIER_INTERRUPTED; + } + } else { + BPLOG(ERROR) << "No stackwalker found for microdump."; + return PROCESS_ERROR_NO_THREAD_LIST; + } + + process_state->threads_.push_back(stack.release()); + process_state->thread_memory_regions_.push_back(microdump.GetMemory()); + process_state->crashed_ = true; + process_state->requesting_thread_ = 0; + process_state->system_info_ = *microdump.GetSystemInfo(); + + return PROCESS_OK; +} + +} // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/processor/microdump_processor_unittest.cc b/toolkit/crashreporter/google-breakpad/src/processor/microdump_processor_unittest.cc new file mode 100644 index 000000000000..e667c386122a --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/processor/microdump_processor_unittest.cc @@ -0,0 +1,197 @@ +// Copyright (c) 2014, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Unit test for MicrodumpProcessor. + +#include +#include +#include +#include + +#include "breakpad_googletest_includes.h" +#include "google_breakpad/processor/basic_source_line_resolver.h" +#include "google_breakpad/processor/call_stack.h" +#include "google_breakpad/processor/microdump_processor.h" +#include "google_breakpad/processor/process_state.h" +#include "google_breakpad/processor/stack_frame.h" +#include "google_breakpad/processor/stack_frame_symbolizer.h" +#include "processor/simple_symbol_supplier.h" +#include "processor/stackwalker_unittest_utils.h" + +namespace { + +using google_breakpad::BasicSourceLineResolver; +using google_breakpad::MicrodumpProcessor; +using google_breakpad::ProcessState; +using google_breakpad::SimpleSymbolSupplier; +using google_breakpad::StackFrameSymbolizer; + +class MicrodumpProcessorTest : public ::testing::Test { + public: + MicrodumpProcessorTest() + : files_path_(string(getenv("srcdir") ? getenv("srcdir") : ".") + + "/src/processor/testdata/") { + } + + void ReadFile(const string& file_name, string* file_contents) { + assert(file_contents); + std::ifstream file_stream(file_name.c_str(), std::ios::in); + ASSERT_TRUE(file_stream.good()); + std::vector bytes; + file_stream.seekg(0, std::ios_base::end); + ASSERT_TRUE(file_stream.good()); + bytes.resize(file_stream.tellg()); + file_stream.seekg(0, std::ios_base::beg); + ASSERT_TRUE(file_stream.good()); + file_stream.read(&bytes[0], bytes.size()); + ASSERT_TRUE(file_stream.good()); + *file_contents = string(&bytes[0], bytes.size()); + } + + google_breakpad::ProcessResult ProcessMicrodump( + const string& symbols_file, + const string& microdump_contents, + ProcessState* state) { + SimpleSymbolSupplier supplier(symbols_file); + BasicSourceLineResolver resolver; + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); + MicrodumpProcessor processor(&frame_symbolizer); + + return processor.Process(microdump_contents, state); + } + + void AnalyzeDump(const string& microdump_file_name, ProcessState* state, + bool omit_symbols) { + string symbols_file = omit_symbols ? "" : files_path_ + "symbols/microdump"; + string microdump_file_path = files_path_ + microdump_file_name; + string microdump_contents; + ReadFile(microdump_file_path, µdump_contents); + + google_breakpad::ProcessResult result = + ProcessMicrodump(symbols_file, microdump_contents, state); + + ASSERT_EQ(google_breakpad::PROCESS_OK, result); + ASSERT_TRUE(state->crashed()); + ASSERT_EQ(0, state->requesting_thread()); + ASSERT_EQ(1U, state->threads()->size()); + + ASSERT_EQ(2, state->system_info()->cpu_count); + ASSERT_EQ("android", state->system_info()->os_short); + ASSERT_EQ("Android", state->system_info()->os); + } + + string files_path_; +}; + +TEST_F(MicrodumpProcessorTest, TestProcess_Empty) { + ProcessState state; + google_breakpad::ProcessResult result = + ProcessMicrodump("", "", &state); + ASSERT_EQ(google_breakpad::PROCESS_ERROR_MINIDUMP_NOT_FOUND, result); +} + +TEST_F(MicrodumpProcessorTest, TestProcess_Invalid) { + ProcessState state; + google_breakpad::ProcessResult result = + ProcessMicrodump("", "This is not a valid microdump", &state); + ASSERT_EQ(google_breakpad::PROCESS_ERROR_NO_THREAD_LIST, result); +} + +TEST_F(MicrodumpProcessorTest, TestProcess_MissingSymbols) { + ProcessState state; + AnalyzeDump("microdump-arm64.dmp", &state, true /* omit_symbols */); + + ASSERT_EQ(8U, state.modules()->module_count()); + ASSERT_EQ("arm64", state.system_info()->cpu); + ASSERT_EQ("OS 64 VERSION INFO", state.system_info()->os_version); + ASSERT_EQ(1U, state.threads()->size()); + ASSERT_EQ(12U, state.threads()->at(0)->frames()->size()); + + ASSERT_EQ("", + state.threads()->at(0)->frames()->at(0)->function_name); + ASSERT_EQ("", + state.threads()->at(0)->frames()->at(3)->function_name); +} + +TEST_F(MicrodumpProcessorTest, TestProcess_UnsupportedArch) { + string microdump_contents = + "W/google-breakpad(26491): -----BEGIN BREAKPAD MICRODUMP-----\n" + "W/google-breakpad(26491): O A \"unsupported-arch\"\n" + "W/google-breakpad(26491): S 0 A48BD840 A48BD000 00002000\n"; + + ProcessState state; + + google_breakpad::ProcessResult result = + ProcessMicrodump("", microdump_contents, &state); + + ASSERT_EQ(google_breakpad::PROCESS_ERROR_NO_THREAD_LIST, result); +} + +TEST_F(MicrodumpProcessorTest, TestProcessArm) { + ProcessState state; + AnalyzeDump("microdump-arm.dmp", &state, false /* omit_symbols */); + + ASSERT_EQ(6U, state.modules()->module_count()); + ASSERT_EQ("arm", state.system_info()->cpu); + ASSERT_EQ("OS VERSION INFO", state.system_info()->os_version); + ASSERT_EQ(8U, state.threads()->at(0)->frames()->size()); + ASSERT_EQ("MicrodumpWriterTest_Setup_Test::TestBody", + state.threads()->at(0)->frames()->at(0)->function_name); + ASSERT_EQ("testing::Test::Run", + state.threads()->at(0)->frames()->at(1)->function_name); + ASSERT_EQ("main", + state.threads()->at(0)->frames()->at(6)->function_name); + ASSERT_EQ("breakpad_unittests", + state.threads()->at(0)->frames()->at(6)->module->code_file()); +} + +TEST_F(MicrodumpProcessorTest, TestProcessArm64) { + ProcessState state; + AnalyzeDump("microdump-arm64.dmp", &state, false /* omit_symbols */); + + ASSERT_EQ(8U, state.modules()->module_count()); + ASSERT_EQ("arm64", state.system_info()->cpu); + ASSERT_EQ("OS 64 VERSION INFO", state.system_info()->os_version); + ASSERT_EQ(9U, state.threads()->at(0)->frames()->size()); + ASSERT_EQ("MicrodumpWriterTest_Setup_Test::TestBody", + state.threads()->at(0)->frames()->at(0)->function_name); + ASSERT_EQ("testing::Test::Run", + state.threads()->at(0)->frames()->at(2)->function_name); + ASSERT_EQ("main", + state.threads()->at(0)->frames()->at(7)->function_name); + ASSERT_EQ("breakpad_unittests", + state.threads()->at(0)->frames()->at(7)->module->code_file()); +} + +} // namespace + +int main(int argc, char* argv[]) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/toolkit/crashreporter/google-breakpad/src/processor/microdump_stackwalk.cc b/toolkit/crashreporter/google-breakpad/src/processor/microdump_stackwalk.cc new file mode 100644 index 000000000000..7ea80495a6c1 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/processor/microdump_stackwalk.cc @@ -0,0 +1,151 @@ +// Copyright (c) 2014 Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// microdump_stackwalk.cc: Process a microdump with MicrodumpProcessor, printing +// the results, including stack traces. + +#include +#include + +#include +#include +#include + +#include "common/scoped_ptr.h" +#include "common/using_std_string.h" +#include "google_breakpad/processor/basic_source_line_resolver.h" +#include "google_breakpad/processor/microdump_processor.h" +#include "google_breakpad/processor/process_state.h" +#include "google_breakpad/processor/stack_frame_symbolizer.h" +#include "processor/logging.h" +#include "processor/simple_symbol_supplier.h" +#include "processor/stackwalk_common.h" + + +namespace { + +using google_breakpad::BasicSourceLineResolver; +using google_breakpad::MicrodumpProcessor; +using google_breakpad::ProcessResult; +using google_breakpad::ProcessState; +using google_breakpad::scoped_ptr; +using google_breakpad::SimpleSymbolSupplier; +using google_breakpad::StackFrameSymbolizer; + +// Processes |microdump_file| using MicrodumpProcessor. |symbol_path|, if +// non-empty, is the base directory of a symbol storage area, laid out in +// the format required by SimpleSymbolSupplier. If such a storage area +// is specified, it is made available for use by the MicrodumpProcessor. +// +// Returns the value of MicrodumpProcessor::Process. If processing succeeds, +// prints identifying OS and CPU information from the microdump, crash +// information and call stacks for the crashing thread. +// All information is printed to stdout. +int PrintMicrodumpProcess(const char* microdump_file, + const std::vector& symbol_paths, + bool machine_readable) { + std::ifstream file_stream(microdump_file); + std::vector bytes; + file_stream.seekg(0, std::ios_base::end); + bytes.resize(file_stream.tellg()); + file_stream.seekg(0, std::ios_base::beg); + file_stream.read(&bytes[0], bytes.size()); + string microdump_content(&bytes[0], bytes.size()); + + scoped_ptr symbol_supplier; + if (!symbol_paths.empty()) { + symbol_supplier.reset(new SimpleSymbolSupplier(symbol_paths)); + } + + BasicSourceLineResolver resolver; + StackFrameSymbolizer frame_symbolizer(symbol_supplier.get(), &resolver); + ProcessState process_state; + MicrodumpProcessor microdump_processor(&frame_symbolizer); + ProcessResult res = microdump_processor.Process(microdump_content, + &process_state); + + if (res == google_breakpad::PROCESS_OK) { + if (machine_readable) { + PrintProcessStateMachineReadable(process_state); + } else { + PrintProcessState(process_state, false, &resolver); + } + return 0; + } + + BPLOG(ERROR) << "MicrodumpProcessor::Process failed (code = " << res << ")"; + return 1; +} + +void usage(const char *program_name) { + fprintf(stderr, "usage: %s [-m] [symbol-path ...]\n" + " -m : Output in machine-readable format\n", + program_name); +} + +} // namespace + +int main(int argc, char** argv) { + BPLOG_INIT(&argc, &argv); + + if (argc < 2) { + usage(argv[0]); + return 1; + } + + const char* microdump_file; + bool machine_readable; + int symbol_path_arg; + + if (strcmp(argv[1], "-m") == 0) { + if (argc < 3) { + usage(argv[0]); + return 1; + } + + machine_readable = true; + microdump_file = argv[2]; + symbol_path_arg = 3; + } else { + machine_readable = false; + microdump_file = argv[1]; + symbol_path_arg = 2; + } + + // extra arguments are symbol paths + std::vector symbol_paths; + if (argc > symbol_path_arg) { + for (int argi = symbol_path_arg; argi < argc; ++argi) + symbol_paths.push_back(argv[argi]); + } + + return PrintMicrodumpProcess(microdump_file, + symbol_paths, + machine_readable); +} diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/logging_striplog_test.sh b/toolkit/crashreporter/google-breakpad/src/processor/microdump_stackwalk_machine_readable_test similarity index 58% rename from toolkit/crashreporter/google-breakpad/src/third_party/glog/src/logging_striplog_test.sh rename to toolkit/crashreporter/google-breakpad/src/processor/microdump_stackwalk_machine_readable_test index b9033b242769..fadec2645650 100755 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/logging_striplog_test.sh +++ b/toolkit/crashreporter/google-breakpad/src/processor/microdump_stackwalk_machine_readable_test @@ -1,6 +1,6 @@ -#! /bin/sh -# -# Copyright (c) 2007, Google Inc. +#!/bin/sh + +# Copyright (c) 2014, Google Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -28,45 +28,16 @@ # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# Author: Sergey Ioffe -get_strings () { - if test -e ".libs/$1"; then - binary=".libs/$1" - elif test -e "$1.exe"; then - binary="$1.exe" - else - echo "We coundn't find $1 binary." - exit 1 - fi - - strings -n 10 $binary | sort | awk '/TESTMESSAGE/ {printf "%s ", $2}' -} +source "${0%/*}/microdump_stackwalk_test_vars" # for MICRODUMP_SUPPORTED_ARCHS. +testdata_dir=$srcdir/src/processor/testdata -# Die if "$1" != "$2", print $3 as death reason -check_eq () { - if [ "$1" != "$2" ]; then - echo "Check failed: '$1' == '$2' ${3:+ ($3)}" - exit 1 - fi -} - -die () { - echo $1 - exit 1 -} - -# Check that the string literals are appropriately stripped. This will -# not be the case in debug mode. - -check_eq "`get_strings logging_striptest0`" "COND ERROR FATAL INFO WARNING " -check_eq "`get_strings logging_striptest2`" "COND ERROR FATAL " -check_eq "`get_strings logging_striptest10`" "" - -# Check that LOG(FATAL) aborts even for large STRIP_LOG - -./logging_striptest2 2>/dev/null && die "Did not abort for STRIP_LOG=2" -./logging_striptest10 2>/dev/null && die "Did not abort for STRIP_LOG=10" - -echo "PASS" +set -e # Bail out with an error if any of the commands below fails. +for ARCH in $MICRODUMP_SUPPORTED_ARCHS; do + echo "Testing microdump_stackwalk -m for arch $ARCH" + ./src/processor/microdump_stackwalk -m $testdata_dir/microdump-${ARCH}.dmp \ + $testdata_dir/symbols/microdump | \ + tr -d '\015' | \ + diff -u $testdata_dir/microdump.stackwalk.machine_readable-${ARCH}.out - +done +exit 0 diff --git a/toolkit/crashreporter/google-breakpad/src/processor/microdump_stackwalk_test b/toolkit/crashreporter/google-breakpad/src/processor/microdump_stackwalk_test new file mode 100755 index 000000000000..5a1f3d59fc89 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/processor/microdump_stackwalk_test @@ -0,0 +1,43 @@ +#!/bin/sh + +# Copyright (c) 2014, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +source "${0%/*}/microdump_stackwalk_test_vars" # for MICRODUMP_SUPPORTED_ARCHS. +testdata_dir=$srcdir/src/processor/testdata + +set -e # Bail out with an error if any of the commands below fails. +for ARCH in $MICRODUMP_SUPPORTED_ARCHS; do + echo "Testing microdump_stackwalk for arch $ARCH" + ./src/processor/microdump_stackwalk $testdata_dir/microdump-${ARCH}.dmp \ + $testdata_dir/symbols/microdump | \ + tr -d '\015' | \ + diff -u $testdata_dir/microdump.stackwalk-${ARCH}.out - +done +exit 0 diff --git a/toolkit/crashreporter/google-breakpad/src/processor/microdump_stackwalk_test_vars b/toolkit/crashreporter/google-breakpad/src/processor/microdump_stackwalk_test_vars new file mode 100644 index 000000000000..a8b0e0df5ae1 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/processor/microdump_stackwalk_test_vars @@ -0,0 +1 @@ +MICRODUMP_SUPPORTED_ARCHS="arm arm64" diff --git a/toolkit/crashreporter/google-breakpad/src/processor/minidump.cc b/toolkit/crashreporter/google-breakpad/src/processor/minidump.cc old mode 100755 new mode 100644 index 4d35cb6ba4ae..f22400268dce --- a/toolkit/crashreporter/google-breakpad/src/processor/minidump.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/minidump.cc @@ -44,14 +44,11 @@ #ifdef _WIN32 #include -#define PRIx64 "llx" -#define PRIx32 "lx" #if defined(_MSC_VER) && _MSC_VER < 1900 #define snprintf _snprintf #endif #else // _WIN32 #include -#define O_BINARY 0 #endif // _WIN32 #include @@ -63,11 +60,10 @@ #include "processor/range_map-inl.h" #include "common/scoped_ptr.h" +#include "google_breakpad/processor/dump_context.h" #include "processor/basic_code_module.h" #include "processor/basic_code_modules.h" -#include "common/logging.h" - - +#include "processor/logging.h" namespace google_breakpad { @@ -77,6 +73,30 @@ using std::ifstream; using std::numeric_limits; using std::vector; +// Returns true iff |context_size| matches exactly one of the sizes of the +// various MDRawContext* types. +// TODO(blundell): This function can be removed once +// http://code.google.com/p/google-breakpad/issues/detail?id=550 is fixed. +static bool IsContextSizeUnique(uint32_t context_size) { + int num_matching_contexts = 0; + if (context_size == sizeof(MDRawContextX86)) + num_matching_contexts++; + if (context_size == sizeof(MDRawContextPPC)) + num_matching_contexts++; + if (context_size == sizeof(MDRawContextPPC64)) + num_matching_contexts++; + if (context_size == sizeof(MDRawContextAMD64)) + num_matching_contexts++; + if (context_size == sizeof(MDRawContextSPARC)) + num_matching_contexts++; + if (context_size == sizeof(MDRawContextARM)) + num_matching_contexts++; + if (context_size == sizeof(MDRawContextARM64)) + num_matching_contexts++; + if (context_size == sizeof(MDRawContextMIPS)) + num_matching_contexts++; + return num_matching_contexts == 1; +} // // Swapping routines @@ -144,6 +164,19 @@ static void Swap(uint128_struct* value) { Swap(&value->high); } +// Swapping signed integers +static inline void Swap(int16_t* value) { + Swap(reinterpret_cast(value)); +} + +static inline void Swap(int32_t* value) { + Swap(reinterpret_cast(value)); +} + +static inline void Swap(int64_t* value) { + Swap(reinterpret_cast(value)); +} + static inline void Swap(MDLocationDescriptor* location_descriptor) { Swap(&location_descriptor->data_size); @@ -164,6 +197,23 @@ static inline void Swap(MDGUID* guid) { // Don't swap guid->data4[] because it contains 8-bit quantities. } +static inline void Swap(MDSystemTime* system_time) { + Swap(&system_time->year); + Swap(&system_time->month); + Swap(&system_time->day_of_week); + Swap(&system_time->day); + Swap(&system_time->hour); + Swap(&system_time->minute); + Swap(&system_time->second); + Swap(&system_time->milliseconds); +} + +static inline void Swap(uint16_t* data, size_t size_in_bytes) { + size_t data_length = size_in_bytes / sizeof(data[0]); + for (size_t i = 0; i < data_length; i++) { + Swap(&data[i]); + } +} // // Character conversion routines @@ -180,7 +230,7 @@ static inline void Swap(MDGUID* guid) { // CPU's endianness into consideration. It doesn't seems worth the trouble // of making it a dependency when we don't care about anything but UTF-16. static string* UTF16ToUTF8(const vector& in, - bool swap) { + bool swap) { scoped_ptr out(new string()); // Set the string's initial capacity to the number of UTF-16 characters, @@ -228,19 +278,19 @@ static string* UTF16ToUTF8(const vector& in, // Convert the Unicode code point (unichar) into its UTF-8 representation, // appending it to the out string. if (unichar < 0x80) { - (*out) += unichar; + (*out) += static_cast(unichar); } else if (unichar < 0x800) { - (*out) += 0xc0 | (unichar >> 6); - (*out) += 0x80 | (unichar & 0x3f); + (*out) += 0xc0 | static_cast(unichar >> 6); + (*out) += 0x80 | static_cast(unichar & 0x3f); } else if (unichar < 0x10000) { - (*out) += 0xe0 | (unichar >> 12); - (*out) += 0x80 | ((unichar >> 6) & 0x3f); - (*out) += 0x80 | (unichar & 0x3f); + (*out) += 0xe0 | static_cast(unichar >> 12); + (*out) += 0x80 | static_cast((unichar >> 6) & 0x3f); + (*out) += 0x80 | static_cast(unichar & 0x3f); } else if (unichar < 0x200000) { - (*out) += 0xf0 | (unichar >> 18); - (*out) += 0x80 | ((unichar >> 12) & 0x3f); - (*out) += 0x80 | ((unichar >> 6) & 0x3f); - (*out) += 0x80 | (unichar & 0x3f); + (*out) += 0xf0 | static_cast(unichar >> 18); + (*out) += 0x80 | static_cast((unichar >> 12) & 0x3f); + (*out) += 0x80 | static_cast((unichar >> 6) & 0x3f); + (*out) += 0x80 | static_cast(unichar & 0x3f); } else { BPLOG(ERROR) << "UTF16ToUTF8 cannot represent high value " << HexString(unichar) << " in UTF-8"; @@ -260,6 +310,80 @@ static size_t UTF16codeunits(const uint16_t *string, size_t maxlen) { return count; } +static inline void Swap(MDTimeZoneInformation* time_zone) { + Swap(&time_zone->bias); + // Skip time_zone->standard_name. No need to swap UTF-16 fields. + // The swap will be done as part of the conversion to UTF-8. + Swap(&time_zone->standard_date); + Swap(&time_zone->standard_bias); + // Skip time_zone->daylight_name. No need to swap UTF-16 fields. + // The swap will be done as part of the conversion to UTF-8. + Swap(&time_zone->daylight_date); + Swap(&time_zone->daylight_bias); +} + +static void ConvertUTF16BufferToUTF8String(const uint16_t* utf16_data, + size_t max_length_in_bytes, + string* utf8_result, + bool swap) { + // Since there is no explicit byte length for each string, use + // UTF16codeunits to calculate word length, then derive byte + // length from that. + size_t max_word_length = max_length_in_bytes / sizeof(utf16_data[0]); + size_t word_length = UTF16codeunits(utf16_data, max_word_length); + if (word_length > 0) { + size_t byte_length = word_length * sizeof(utf16_data[0]); + vector utf16_vector(word_length); + memcpy(&utf16_vector[0], &utf16_data[0], byte_length); + scoped_ptr temp(UTF16ToUTF8(utf16_vector, swap)); + if (temp.get()) { + utf8_result->assign(*temp); + } + } else { + utf8_result->clear(); + } +} + + +// For fields that may or may not be valid, PrintValueOrInvalid will print the +// string "(invalid)" if the field is not valid, and will print the value if +// the field is valid. The value is printed as hexadecimal or decimal. + +enum NumberFormat { + kNumberFormatDecimal, + kNumberFormatHexadecimal, +}; + +static void PrintValueOrInvalid(bool valid, + NumberFormat number_format, + uint32_t value) { + if (!valid) { + printf("(invalid)\n"); + } else if (number_format == kNumberFormatDecimal) { + printf("%d\n", value); + } else { + printf("0x%x\n", value); + } +} + +// Converts a time_t to a string showing the time in UTC. +string TimeTToUTCString(time_t tt) { + struct tm timestruct; +#ifdef _WIN32 + gmtime_s(×truct, &tt); +#else + gmtime_r(&tt, ×truct); +#endif + + char timestr[20]; + int rv = strftime(timestr, 20, "%Y-%m-%d %H:%M:%S", ×truct); + if (rv == 0) { + return string(); + } + + return string(timestr); +} + // // MinidumpObject @@ -267,8 +391,8 @@ static size_t UTF16codeunits(const uint16_t *string, size_t maxlen) { MinidumpObject::MinidumpObject(Minidump* minidump) - : minidump_(minidump), - valid_(false) { + : DumpObject(), + minidump_(minidump) { } @@ -288,20 +412,33 @@ MinidumpStream::MinidumpStream(Minidump* minidump) MinidumpContext::MinidumpContext(Minidump* minidump) - : MinidumpStream(minidump), - context_(), - context_flags_(0) { + : DumpContext(), + minidump_(minidump) { } - MinidumpContext::~MinidumpContext() { - FreeContext(); } - bool MinidumpContext::Read(uint32_t expected_size) { valid_ = false; + // Certain raw context types are currently assumed to have unique sizes. + if (!IsContextSizeUnique(sizeof(MDRawContextAMD64))) { + BPLOG(ERROR) << "sizeof(MDRawContextAMD64) cannot match the size of any " + << "other raw context"; + return false; + } + if (!IsContextSizeUnique(sizeof(MDRawContextPPC64))) { + BPLOG(ERROR) << "sizeof(MDRawContextPPC64) cannot match the size of any " + << "other raw context"; + return false; + } + if (!IsContextSizeUnique(sizeof(MDRawContextARM64))) { + BPLOG(ERROR) << "sizeof(MDRawContextARM64) cannot match the size of any " + << "other raw context"; + return false; + } + FreeContext(); // First, figure out what type of CPU this context structure is for. @@ -331,9 +468,8 @@ bool MinidumpContext::Read(uint32_t expected_size) { } if (cpu_type != MD_CONTEXT_AMD64) { - //TODO: fall through to switch below? - // need a Tell method to be able to SeekSet back to beginning - // http://code.google.com/p/google-breakpad/issues/detail?id=224 + // TODO: Fall through to switch below. + // http://code.google.com/p/google-breakpad/issues/detail?id=550 BPLOG(ERROR) << "MinidumpContext not actually amd64 context"; return false; } @@ -390,7 +526,7 @@ bool MinidumpContext::Read(uint32_t expected_size) { Swap(&context_amd64->r14); Swap(&context_amd64->r15); Swap(&context_amd64->rip); - //FIXME: I'm not sure what actually determines + // FIXME: I'm not sure what actually determines // which member of the union {flt_save, sse_registers} // is valid. We're not currently using either, // but it would be good to have them swapped properly. @@ -407,11 +543,189 @@ bool MinidumpContext::Read(uint32_t expected_size) { Swap(&context_amd64->last_exception_from_rip); } - context_flags_ = context_amd64->context_flags; + SetContextFlags(context_amd64->context_flags); - context_.amd64 = context_amd64.release(); - } - else { + SetContextAMD64(context_amd64.release()); + } else if (expected_size == sizeof(MDRawContextPPC64)) { + // |context_flags| of MDRawContextPPC64 is 64 bits, but other MDRawContext + // in the else case have 32 bits |context_flags|, so special case it here. + uint64_t context_flags; + if (!minidump_->ReadBytes(&context_flags, sizeof(context_flags))) { + BPLOG(ERROR) << "MinidumpContext could not read context flags"; + return false; + } + if (minidump_->swap()) + Swap(&context_flags); + + uint32_t cpu_type = context_flags & MD_CONTEXT_CPU_MASK; + scoped_ptr context_ppc64(new MDRawContextPPC64()); + + if (cpu_type == 0) { + if (minidump_->GetContextCPUFlagsFromSystemInfo(&cpu_type)) { + context_ppc64->context_flags |= cpu_type; + } else { + BPLOG(ERROR) << "Failed to preserve the current stream position"; + return false; + } + } + + if (cpu_type != MD_CONTEXT_PPC64) { + // TODO: Fall through to switch below. + // http://code.google.com/p/google-breakpad/issues/detail?id=550 + BPLOG(ERROR) << "MinidumpContext not actually ppc64 context"; + return false; + } + + // Set the context_flags member, which has already been read, and + // read the rest of the structure beginning with the first member + // after context_flags. + context_ppc64->context_flags = context_flags; + + size_t flags_size = sizeof(context_ppc64->context_flags); + uint8_t* context_after_flags = + reinterpret_cast(context_ppc64.get()) + flags_size; + if (!minidump_->ReadBytes(context_after_flags, + sizeof(MDRawContextPPC64) - flags_size)) { + BPLOG(ERROR) << "MinidumpContext could not read ppc64 context"; + return false; + } + + // Do this after reading the entire MDRawContext structure because + // GetSystemInfo may seek minidump to a new position. + if (!CheckAgainstSystemInfo(cpu_type)) { + BPLOG(ERROR) << "MinidumpContext ppc64 does not match system info"; + return false; + } + if (minidump_->swap()) { + // context_ppc64->context_flags was already swapped. + Swap(&context_ppc64->srr0); + Swap(&context_ppc64->srr1); + for (unsigned int gpr_index = 0; + gpr_index < MD_CONTEXT_PPC64_GPR_COUNT; + ++gpr_index) { + Swap(&context_ppc64->gpr[gpr_index]); + } + Swap(&context_ppc64->cr); + Swap(&context_ppc64->xer); + Swap(&context_ppc64->lr); + Swap(&context_ppc64->ctr); + Swap(&context_ppc64->vrsave); + for (unsigned int fpr_index = 0; + fpr_index < MD_FLOATINGSAVEAREA_PPC_FPR_COUNT; + ++fpr_index) { + Swap(&context_ppc64->float_save.fpregs[fpr_index]); + } + // Don't swap context_ppc64->float_save.fpscr_pad because it is only + // used for padding. + Swap(&context_ppc64->float_save.fpscr); + for (unsigned int vr_index = 0; + vr_index < MD_VECTORSAVEAREA_PPC_VR_COUNT; + ++vr_index) { + Normalize128(&context_ppc64->vector_save.save_vr[vr_index], true); + Swap(&context_ppc64->vector_save.save_vr[vr_index]); + } + Swap(&context_ppc64->vector_save.save_vscr); + // Don't swap the padding fields in vector_save. + Swap(&context_ppc64->vector_save.save_vrvalid); + } + + SetContextFlags(static_cast(context_ppc64->context_flags)); + + // Check for data loss when converting context flags from uint64_t into + // uint32_t + if (static_cast(GetContextFlags()) != + context_ppc64->context_flags) { + BPLOG(ERROR) << "Data loss detected when converting PPC64 context_flags"; + return false; + } + + SetContextPPC64(context_ppc64.release()); + } else if (expected_size == sizeof(MDRawContextARM64)) { + // |context_flags| of MDRawContextARM64 is 64 bits, but other MDRawContext + // in the else case have 32 bits |context_flags|, so special case it here. + uint64_t context_flags; + + BPLOG(INFO) << "MinidumpContext: looks like ARM64 context"; + + if (!minidump_->ReadBytes(&context_flags, sizeof(context_flags))) { + BPLOG(ERROR) << "MinidumpContext could not read context flags"; + return false; + } + if (minidump_->swap()) + Swap(&context_flags); + + scoped_ptr context_arm64(new MDRawContextARM64()); + + uint32_t cpu_type = context_flags & MD_CONTEXT_CPU_MASK; + if (cpu_type == 0) { + if (minidump_->GetContextCPUFlagsFromSystemInfo(&cpu_type)) { + context_arm64->context_flags |= cpu_type; + } else { + BPLOG(ERROR) << "Failed to preserve the current stream position"; + return false; + } + } + + if (cpu_type != MD_CONTEXT_ARM64) { + // TODO: Fall through to switch below. + // http://code.google.com/p/google-breakpad/issues/detail?id=550 + BPLOG(ERROR) << "MinidumpContext not actually arm64 context"; + return false; + } + + // Set the context_flags member, which has already been read, and + // read the rest of the structure beginning with the first member + // after context_flags. + context_arm64->context_flags = context_flags; + + size_t flags_size = sizeof(context_arm64->context_flags); + uint8_t* context_after_flags = + reinterpret_cast(context_arm64.get()) + flags_size; + if (!minidump_->ReadBytes(context_after_flags, + sizeof(MDRawContextARM64) - flags_size)) { + BPLOG(ERROR) << "MinidumpContext could not read arm64 context"; + return false; + } + + // Do this after reading the entire MDRawContext structure because + // GetSystemInfo may seek minidump to a new position. + if (!CheckAgainstSystemInfo(cpu_type)) { + BPLOG(ERROR) << "MinidumpContext arm64 does not match system info"; + return false; + } + + if (minidump_->swap()) { + // context_arm64->context_flags was already swapped. + for (unsigned int ireg_index = 0; + ireg_index < MD_CONTEXT_ARM64_GPR_COUNT; + ++ireg_index) { + Swap(&context_arm64->iregs[ireg_index]); + } + Swap(&context_arm64->cpsr); + Swap(&context_arm64->float_save.fpsr); + Swap(&context_arm64->float_save.fpcr); + for (unsigned int fpr_index = 0; + fpr_index < MD_FLOATINGSAVEAREA_ARM64_FPR_COUNT; + ++fpr_index) { + // While ARM64 is bi-endian, iOS (currently the only platform + // for which ARM64 support has been brought up) uses ARM64 exclusively + // in little-endian mode. + Normalize128(&context_arm64->float_save.regs[fpr_index], false); + Swap(&context_arm64->float_save.regs[fpr_index]); + } + } + SetContextFlags(static_cast(context_arm64->context_flags)); + + // Check for data loss when converting context flags from uint64_t into + // uint32_t + if (static_cast(GetContextFlags()) != + context_arm64->context_flags) { + BPLOG(ERROR) << "Data loss detected when converting ARM64 context_flags"; + return false; + } + + SetContextARM64(context_arm64.release()); + } else { uint32_t context_flags; if (!minidump_->ReadBytes(&context_flags, sizeof(context_flags))) { BPLOG(ERROR) << "MinidumpContext could not read context flags"; @@ -515,7 +829,7 @@ bool MinidumpContext::Read(uint32_t expected_size) { // does not need to be swapped. } - context_.x86 = context_x86.release(); + SetContextX86(context_x86.release()); break; } @@ -591,7 +905,7 @@ bool MinidumpContext::Read(uint32_t expected_size) { Swap(&context_ppc->vector_save.save_vrvalid); } - context_.ppc = context_ppc.release(); + SetContextPPC(context_ppc.release()); break; } @@ -647,7 +961,7 @@ bool MinidumpContext::Read(uint32_t expected_size) { Swap(&context_sparc->float_save.filler); Swap(&context_sparc->float_save.fsr); } - context_.ctx_sparc = context_sparc.release(); + SetContextSPARC(context_sparc.release()); break; } @@ -702,7 +1016,72 @@ bool MinidumpContext::Read(uint32_t expected_size) { Swap(&context_arm->float_save.extra[fpe_index]); } } - context_.arm = context_arm.release(); + SetContextARM(context_arm.release()); + + break; + } + + case MD_CONTEXT_MIPS: { + if (expected_size != sizeof(MDRawContextMIPS)) { + BPLOG(ERROR) << "MinidumpContext MIPS size mismatch, " + << expected_size + << " != " + << sizeof(MDRawContextMIPS); + return false; + } + + scoped_ptr context_mips(new MDRawContextMIPS()); + + // Set the context_flags member, which has already been read, and + // read the rest of the structure beginning with the first member + // after context_flags. + context_mips->context_flags = context_flags; + + size_t flags_size = sizeof(context_mips->context_flags); + uint8_t* context_after_flags = + reinterpret_cast(context_mips.get()) + flags_size; + if (!minidump_->ReadBytes(context_after_flags, + sizeof(MDRawContextMIPS) - flags_size)) { + BPLOG(ERROR) << "MinidumpContext could not read MIPS context"; + return false; + } + + // Do this after reading the entire MDRawContext structure because + // GetSystemInfo may seek minidump to a new position. + if (!CheckAgainstSystemInfo(cpu_type)) { + BPLOG(ERROR) << "MinidumpContext MIPS does not match system info"; + return false; + } + + if (minidump_->swap()) { + // context_mips->context_flags was already swapped. + for (int ireg_index = 0; + ireg_index < MD_CONTEXT_MIPS_GPR_COUNT; + ++ireg_index) { + Swap(&context_mips->iregs[ireg_index]); + } + Swap(&context_mips->mdhi); + Swap(&context_mips->mdlo); + for (int dsp_index = 0; + dsp_index < MD_CONTEXT_MIPS_DSP_COUNT; + ++dsp_index) { + Swap(&context_mips->hi[dsp_index]); + Swap(&context_mips->lo[dsp_index]); + } + Swap(&context_mips->dsp_control); + Swap(&context_mips->epc); + Swap(&context_mips->badvaddr); + Swap(&context_mips->status); + Swap(&context_mips->cause); + for (int fpr_index = 0; + fpr_index < MD_FLOATINGSAVEAREA_MIPS_FPR_COUNT; + ++fpr_index) { + Swap(&context_mips->float_save.regs[fpr_index]); + } + Swap(&context_mips->float_save.fpcsr); + Swap(&context_mips->float_save.fir); + } + SetContextMIPS(context_mips.release()); break; } @@ -716,140 +1095,13 @@ bool MinidumpContext::Read(uint32_t expected_size) { break; } } - context_flags_ = context_flags; + SetContextFlags(context_flags); } valid_ = true; return true; } - -uint32_t MinidumpContext::GetContextCPU() const { - if (!valid_) { - // Don't log a message, GetContextCPU can be legitimately called with - // valid_ false by FreeContext, which is called by Read. - return 0; - } - - return context_flags_ & MD_CONTEXT_CPU_MASK; -} - -bool MinidumpContext::GetInstructionPointer(uint64_t* ip) const { - BPLOG_IF(ERROR, !ip) << "MinidumpContext::GetInstructionPointer " - "requires |ip|"; - assert(ip); - *ip = 0; - - if (!valid_) { - BPLOG(ERROR) << "Invalid MinidumpContext for GetInstructionPointer"; - return false; - } - - switch (context_flags_ & MD_CONTEXT_CPU_MASK) { - case MD_CONTEXT_AMD64: - *ip = context_.amd64->rip; - break; - case MD_CONTEXT_ARM: - *ip = context_.arm->iregs[MD_CONTEXT_ARM_REG_PC]; - break; - case MD_CONTEXT_PPC: - *ip = context_.ppc->srr0; - break; - case MD_CONTEXT_SPARC: - *ip = context_.ctx_sparc->pc; - break; - case MD_CONTEXT_X86: - *ip = context_.x86->eip; - break; - default: - // This should never happen. - BPLOG(ERROR) << "Unknown CPU architecture in GetInstructionPointer"; - return false; - } - return true; -} - - -const MDRawContextX86* MinidumpContext::GetContextX86() const { - if (GetContextCPU() != MD_CONTEXT_X86) { - BPLOG(ERROR) << "MinidumpContext cannot get x86 context"; - return NULL; - } - - return context_.x86; -} - - -const MDRawContextPPC* MinidumpContext::GetContextPPC() const { - if (GetContextCPU() != MD_CONTEXT_PPC) { - BPLOG(ERROR) << "MinidumpContext cannot get ppc context"; - return NULL; - } - - return context_.ppc; -} - -const MDRawContextAMD64* MinidumpContext::GetContextAMD64() const { - if (GetContextCPU() != MD_CONTEXT_AMD64) { - BPLOG(ERROR) << "MinidumpContext cannot get amd64 context"; - return NULL; - } - - return context_.amd64; -} - -const MDRawContextSPARC* MinidumpContext::GetContextSPARC() const { - if (GetContextCPU() != MD_CONTEXT_SPARC) { - BPLOG(ERROR) << "MinidumpContext cannot get sparc context"; - return NULL; - } - - return context_.ctx_sparc; -} - -const MDRawContextARM* MinidumpContext::GetContextARM() const { - if (GetContextCPU() != MD_CONTEXT_ARM) { - BPLOG(ERROR) << "MinidumpContext cannot get arm context"; - return NULL; - } - - return context_.arm; -} - -void MinidumpContext::FreeContext() { - switch (GetContextCPU()) { - case MD_CONTEXT_X86: - delete context_.x86; - break; - - case MD_CONTEXT_PPC: - delete context_.ppc; - break; - - case MD_CONTEXT_AMD64: - delete context_.amd64; - break; - - case MD_CONTEXT_SPARC: - delete context_.ctx_sparc; - break; - - case MD_CONTEXT_ARM: - delete context_.arm; - break; - - default: - // There is no context record (valid_ is false) or there's a - // context record for an unknown CPU (shouldn't happen, only known - // records are stored by Read). - break; - } - - context_flags_ = 0; - context_.base = NULL; -} - - bool MinidumpContext::CheckAgainstSystemInfo(uint32_t context_cpu_type) { // It's OK if the minidump doesn't contain an MD_SYSTEM_INFO_STREAM, // as this function just implements a sanity check. @@ -888,6 +1140,11 @@ bool MinidumpContext::CheckAgainstSystemInfo(uint32_t context_cpu_type) { return_value = true; break; + case MD_CONTEXT_PPC64: + if (system_info_cpu_type == MD_CPU_ARCHITECTURE_PPC64) + return_value = true; + break; + case MD_CONTEXT_AMD64: if (system_info_cpu_type == MD_CPU_ARCHITECTURE_AMD64) return_value = true; @@ -902,6 +1159,16 @@ bool MinidumpContext::CheckAgainstSystemInfo(uint32_t context_cpu_type) { if (system_info_cpu_type == MD_CPU_ARCHITECTURE_ARM) return_value = true; break; + + case MD_CONTEXT_ARM64: + if (system_info_cpu_type == MD_CPU_ARCHITECTURE_ARM64) + return_value = true; + break; + + case MD_CONTEXT_MIPS: + if (system_info_cpu_type == MD_CPU_ARCHITECTURE_MIPS) + return_value = true; + break; } BPLOG_IF(ERROR, !return_value) << "MinidumpContext CPU " << @@ -913,237 +1180,6 @@ bool MinidumpContext::CheckAgainstSystemInfo(uint32_t context_cpu_type) { } -void MinidumpContext::Print() { - if (!valid_) { - BPLOG(ERROR) << "MinidumpContext cannot print invalid data"; - return; - } - - switch (GetContextCPU()) { - case MD_CONTEXT_X86: { - const MDRawContextX86* context_x86 = GetContextX86(); - printf("MDRawContextX86\n"); - printf(" context_flags = 0x%x\n", - context_x86->context_flags); - printf(" dr0 = 0x%x\n", context_x86->dr0); - printf(" dr1 = 0x%x\n", context_x86->dr1); - printf(" dr2 = 0x%x\n", context_x86->dr2); - printf(" dr3 = 0x%x\n", context_x86->dr3); - printf(" dr6 = 0x%x\n", context_x86->dr6); - printf(" dr7 = 0x%x\n", context_x86->dr7); - printf(" float_save.control_word = 0x%x\n", - context_x86->float_save.control_word); - printf(" float_save.status_word = 0x%x\n", - context_x86->float_save.status_word); - printf(" float_save.tag_word = 0x%x\n", - context_x86->float_save.tag_word); - printf(" float_save.error_offset = 0x%x\n", - context_x86->float_save.error_offset); - printf(" float_save.error_selector = 0x%x\n", - context_x86->float_save.error_selector); - printf(" float_save.data_offset = 0x%x\n", - context_x86->float_save.data_offset); - printf(" float_save.data_selector = 0x%x\n", - context_x86->float_save.data_selector); - printf(" float_save.register_area[%2d] = 0x", - MD_FLOATINGSAVEAREA_X86_REGISTERAREA_SIZE); - for (unsigned int register_index = 0; - register_index < MD_FLOATINGSAVEAREA_X86_REGISTERAREA_SIZE; - ++register_index) { - printf("%02x", context_x86->float_save.register_area[register_index]); - } - printf("\n"); - printf(" float_save.cr0_npx_state = 0x%x\n", - context_x86->float_save.cr0_npx_state); - printf(" gs = 0x%x\n", context_x86->gs); - printf(" fs = 0x%x\n", context_x86->fs); - printf(" es = 0x%x\n", context_x86->es); - printf(" ds = 0x%x\n", context_x86->ds); - printf(" edi = 0x%x\n", context_x86->edi); - printf(" esi = 0x%x\n", context_x86->esi); - printf(" ebx = 0x%x\n", context_x86->ebx); - printf(" edx = 0x%x\n", context_x86->edx); - printf(" ecx = 0x%x\n", context_x86->ecx); - printf(" eax = 0x%x\n", context_x86->eax); - printf(" ebp = 0x%x\n", context_x86->ebp); - printf(" eip = 0x%x\n", context_x86->eip); - printf(" cs = 0x%x\n", context_x86->cs); - printf(" eflags = 0x%x\n", context_x86->eflags); - printf(" esp = 0x%x\n", context_x86->esp); - printf(" ss = 0x%x\n", context_x86->ss); - printf(" extended_registers[%3d] = 0x", - MD_CONTEXT_X86_EXTENDED_REGISTERS_SIZE); - for (unsigned int register_index = 0; - register_index < MD_CONTEXT_X86_EXTENDED_REGISTERS_SIZE; - ++register_index) { - printf("%02x", context_x86->extended_registers[register_index]); - } - printf("\n\n"); - - break; - } - - case MD_CONTEXT_PPC: { - const MDRawContextPPC* context_ppc = GetContextPPC(); - printf("MDRawContextPPC\n"); - printf(" context_flags = 0x%x\n", - context_ppc->context_flags); - printf(" srr0 = 0x%x\n", context_ppc->srr0); - printf(" srr1 = 0x%x\n", context_ppc->srr1); - for (unsigned int gpr_index = 0; - gpr_index < MD_CONTEXT_PPC_GPR_COUNT; - ++gpr_index) { - printf(" gpr[%2d] = 0x%x\n", - gpr_index, context_ppc->gpr[gpr_index]); - } - printf(" cr = 0x%x\n", context_ppc->cr); - printf(" xer = 0x%x\n", context_ppc->xer); - printf(" lr = 0x%x\n", context_ppc->lr); - printf(" ctr = 0x%x\n", context_ppc->ctr); - printf(" mq = 0x%x\n", context_ppc->mq); - printf(" vrsave = 0x%x\n", context_ppc->vrsave); - for (unsigned int fpr_index = 0; - fpr_index < MD_FLOATINGSAVEAREA_PPC_FPR_COUNT; - ++fpr_index) { - printf(" float_save.fpregs[%2d] = 0x%" PRIx64 "\n", - fpr_index, context_ppc->float_save.fpregs[fpr_index]); - } - printf(" float_save.fpscr = 0x%x\n", - context_ppc->float_save.fpscr); - // TODO(mmentovai): print the 128-bit quantities in - // context_ppc->vector_save. This isn't done yet because printf - // doesn't support 128-bit quantities, and printing them using - // PRIx64 as two 64-bit quantities requires knowledge of the CPU's - // byte ordering. - printf(" vector_save.save_vrvalid = 0x%x\n", - context_ppc->vector_save.save_vrvalid); - printf("\n"); - - break; - } - - case MD_CONTEXT_AMD64: { - const MDRawContextAMD64* context_amd64 = GetContextAMD64(); - printf("MDRawContextAMD64\n"); - printf(" p1_home = 0x%" PRIx64 "\n", - context_amd64->p1_home); - printf(" p2_home = 0x%" PRIx64 "\n", - context_amd64->p2_home); - printf(" p3_home = 0x%" PRIx64 "\n", - context_amd64->p3_home); - printf(" p4_home = 0x%" PRIx64 "\n", - context_amd64->p4_home); - printf(" p5_home = 0x%" PRIx64 "\n", - context_amd64->p5_home); - printf(" p6_home = 0x%" PRIx64 "\n", - context_amd64->p6_home); - printf(" context_flags = 0x%x\n", - context_amd64->context_flags); - printf(" mx_csr = 0x%x\n", - context_amd64->mx_csr); - printf(" cs = 0x%x\n", context_amd64->cs); - printf(" ds = 0x%x\n", context_amd64->ds); - printf(" es = 0x%x\n", context_amd64->es); - printf(" fs = 0x%x\n", context_amd64->fs); - printf(" gs = 0x%x\n", context_amd64->gs); - printf(" ss = 0x%x\n", context_amd64->ss); - printf(" eflags = 0x%x\n", context_amd64->eflags); - printf(" dr0 = 0x%" PRIx64 "\n", context_amd64->dr0); - printf(" dr1 = 0x%" PRIx64 "\n", context_amd64->dr1); - printf(" dr2 = 0x%" PRIx64 "\n", context_amd64->dr2); - printf(" dr3 = 0x%" PRIx64 "\n", context_amd64->dr3); - printf(" dr6 = 0x%" PRIx64 "\n", context_amd64->dr6); - printf(" dr7 = 0x%" PRIx64 "\n", context_amd64->dr7); - printf(" rax = 0x%" PRIx64 "\n", context_amd64->rax); - printf(" rcx = 0x%" PRIx64 "\n", context_amd64->rcx); - printf(" rdx = 0x%" PRIx64 "\n", context_amd64->rdx); - printf(" rbx = 0x%" PRIx64 "\n", context_amd64->rbx); - printf(" rsp = 0x%" PRIx64 "\n", context_amd64->rsp); - printf(" rbp = 0x%" PRIx64 "\n", context_amd64->rbp); - printf(" rsi = 0x%" PRIx64 "\n", context_amd64->rsi); - printf(" rdi = 0x%" PRIx64 "\n", context_amd64->rdi); - printf(" r8 = 0x%" PRIx64 "\n", context_amd64->r8); - printf(" r9 = 0x%" PRIx64 "\n", context_amd64->r9); - printf(" r10 = 0x%" PRIx64 "\n", context_amd64->r10); - printf(" r11 = 0x%" PRIx64 "\n", context_amd64->r11); - printf(" r12 = 0x%" PRIx64 "\n", context_amd64->r12); - printf(" r13 = 0x%" PRIx64 "\n", context_amd64->r13); - printf(" r14 = 0x%" PRIx64 "\n", context_amd64->r14); - printf(" r15 = 0x%" PRIx64 "\n", context_amd64->r15); - printf(" rip = 0x%" PRIx64 "\n", context_amd64->rip); - //TODO: print xmm, vector, debug registers - printf("\n"); - break; - } - - case MD_CONTEXT_SPARC: { - const MDRawContextSPARC* context_sparc = GetContextSPARC(); - printf("MDRawContextSPARC\n"); - printf(" context_flags = 0x%x\n", - context_sparc->context_flags); - for (unsigned int g_r_index = 0; - g_r_index < MD_CONTEXT_SPARC_GPR_COUNT; - ++g_r_index) { - printf(" g_r[%2d] = 0x%" PRIx64 "\n", - g_r_index, context_sparc->g_r[g_r_index]); - } - printf(" ccr = 0x%" PRIx64 "\n", context_sparc->ccr); - printf(" pc = 0x%" PRIx64 "\n", context_sparc->pc); - printf(" npc = 0x%" PRIx64 "\n", context_sparc->npc); - printf(" y = 0x%" PRIx64 "\n", context_sparc->y); - printf(" asi = 0x%" PRIx64 "\n", context_sparc->asi); - printf(" fprs = 0x%" PRIx64 "\n", context_sparc->fprs); - - for (unsigned int fpr_index = 0; - fpr_index < MD_FLOATINGSAVEAREA_SPARC_FPR_COUNT; - ++fpr_index) { - printf(" float_save.regs[%2d] = 0x%" PRIx64 "\n", - fpr_index, context_sparc->float_save.regs[fpr_index]); - } - printf(" float_save.filler = 0x%" PRIx64 "\n", - context_sparc->float_save.filler); - printf(" float_save.fsr = 0x%" PRIx64 "\n", - context_sparc->float_save.fsr); - break; - } - - case MD_CONTEXT_ARM: { - const MDRawContextARM* context_arm = GetContextARM(); - printf("MDRawContextARM\n"); - printf(" context_flags = 0x%x\n", - context_arm->context_flags); - for (unsigned int ireg_index = 0; - ireg_index < MD_CONTEXT_ARM_GPR_COUNT; - ++ireg_index) { - printf(" iregs[%2d] = 0x%x\n", - ireg_index, context_arm->iregs[ireg_index]); - } - printf(" cpsr = 0x%x\n", context_arm->cpsr); - printf(" float_save.fpscr = 0x%" PRIx64 "\n", - context_arm->float_save.fpscr); - for (unsigned int fpr_index = 0; - fpr_index < MD_FLOATINGSAVEAREA_ARM_FPR_COUNT; - ++fpr_index) { - printf(" float_save.regs[%2d] = 0x%" PRIx64 "\n", - fpr_index, context_arm->float_save.regs[fpr_index]); - } - for (unsigned int fpe_index = 0; - fpe_index < MD_FLOATINGSAVEAREA_ARM_FPEXTRA_COUNT; - ++fpe_index) { - printf(" float_save.extra[%2d] = 0x%" PRIx32 "\n", - fpe_index, context_arm->float_save.extra[fpe_index]); - } - - break; - } - - default: { - break; - } - } -} - - // // MinidumpMemoryRegion // @@ -1306,7 +1342,7 @@ bool MinidumpMemoryRegion::GetMemoryAtAddress(uint64_t address, } -void MinidumpMemoryRegion::Print() { +void MinidumpMemoryRegion::Print() const { if (!valid_) { BPLOG(ERROR) << "MinidumpMemoryRegion cannot print invalid data"; return; @@ -1371,13 +1407,15 @@ bool MinidumpThread::Read() { } // Check for base + size overflow or undersize. - if (thread_.stack.memory.data_size == 0 || + if (thread_.stack.memory.rva == 0 || + thread_.stack.memory.data_size == 0 || thread_.stack.memory.data_size > numeric_limits::max() - thread_.stack.start_of_memory_range) { // This is ok, but log an error anyway. BPLOG(ERROR) << "MinidumpThread has a memory region problem, " << HexString(thread_.stack.start_of_memory_range) << "+" << - HexString(thread_.stack.memory.data_size); + HexString(thread_.stack.memory.data_size) << + ", RVA 0x" << HexString(thread_.stack.memory.rva); } else { memory_ = new MinidumpMemoryRegion(minidump_); memory_->SetDescriptor(&thread_.stack); @@ -1387,6 +1425,14 @@ bool MinidumpThread::Read() { return true; } +uint64_t MinidumpThread::GetStartOfStackMemoryRange() const { + if (!valid_) { + BPLOG(ERROR) << "GetStartOfStackMemoryRange: Invalid MinidumpThread"; + return 0; + } + + return thread_.stack.start_of_memory_range; +} MinidumpMemoryRegion* MinidumpThread::GetMemory() { if (!valid_) { @@ -1539,7 +1585,8 @@ bool MinidumpThreadList::Read(uint32_t expected_size) { thread_count * sizeof(MDRawThread)) { uint32_t useless; if (!minidump_->ReadBytes(&useless, 4)) { - BPLOG(ERROR) << "MinidumpThreadList cannot read threadlist padded bytes"; + BPLOG(ERROR) << "MinidumpThreadList cannot read threadlist padded " + "bytes"; return false; } } else { @@ -1816,7 +1863,9 @@ string MinidumpModule::code_identifier() const { case MD_OS_IOS: case MD_OS_SOLARIS: case MD_OS_ANDROID: - case MD_OS_LINUX: { + case MD_OS_LINUX: + case MD_OS_NACL: + case MD_OS_PS3: { // TODO(mmentovai): support uuid extension if present, otherwise fall // back to version (from LC_ID_DYLIB?), otherwise fall back to something // else. @@ -2205,12 +2254,7 @@ const MDImageDebugMisc* MinidumpModule::GetMiscRecord(uint32_t* size) { uint16_t* data16 = reinterpret_cast(&(misc_record->data)); unsigned int dataBytes = module_.misc_record.data_size - MDImageDebugMisc_minsize; - unsigned int dataLength = dataBytes / 2; - for (unsigned int characterIndex = 0; - characterIndex < dataLength; - ++characterIndex) { - Swap(&data16[characterIndex]); - } + Swap(data16, dataBytes); } } @@ -2246,8 +2290,9 @@ void MinidumpModule::Print() { module_.size_of_image); printf(" checksum = 0x%x\n", module_.checksum); - printf(" time_date_stamp = 0x%x\n", - module_.time_date_stamp); + printf(" time_date_stamp = 0x%x %s\n", + module_.time_date_stamp, + TimeTToUTCString(module_.time_date_stamp).c_str()); printf(" module_name_rva = 0x%x\n", module_.module_name_rva); printf(" version_info.signature = 0x%x\n", @@ -2321,8 +2366,9 @@ void MinidumpModule::Print() { cv_record_20->cv_header.signature); printf(" (cv_record).cv_header.offset = 0x%x\n", cv_record_20->cv_header.offset); - printf(" (cv_record).signature = 0x%x\n", - cv_record_20->signature); + printf(" (cv_record).signature = 0x%x %s\n", + cv_record_20->signature, + TimeTToUTCString(cv_record_20->signature).c_str()); printf(" (cv_record).age = %d\n", cv_record_20->age); printf(" (cv_record).pdb_file_name = \"%s\"\n", @@ -2348,13 +2394,19 @@ void MinidumpModule::Print() { misc_record->length); printf(" (misc_record).unicode = %d\n", misc_record->unicode); - // Don't bother printing the UTF-16, we don't really even expect to ever - // see this misc_record anyway. - if (misc_record->unicode) + if (misc_record->unicode) { + string misc_record_data_utf8; + ConvertUTF16BufferToUTF8String( + reinterpret_cast(misc_record->data), + misc_record->length - offsetof(MDImageDebugMisc, data), + &misc_record_data_utf8, + false); // already swapped + printf(" (misc_record).data = \"%s\"\n", + misc_record_data_utf8.c_str()); + } else { printf(" (misc_record).data = \"%s\"\n", misc_record->data); - else - printf(" (misc_record).data = (UTF-16)\n"); + } } else { printf(" (misc_record) = (null)\n"); } @@ -2425,7 +2477,8 @@ bool MinidumpModuleList::Read(uint32_t expected_size) { module_count * MD_MODULE_SIZE) { uint32_t useless; if (!minidump_->ReadBytes(&useless, 4)) { - BPLOG(ERROR) << "MinidumpModuleList cannot read modulelist padded bytes"; + BPLOG(ERROR) << "MinidumpModuleList cannot read modulelist padded " + "bytes"; return false; } } else { @@ -2464,6 +2517,7 @@ bool MinidumpModuleList::Read(uint32_t expected_size) { // MinidumpModule::ReadAuxiliaryData seeks around, and if it were // included in the loop above, additional seeks would be needed where // none are now to read contiguous data. + uint64_t last_end_address = 0; for (unsigned int module_index = 0; module_index < module_count; ++module_index) { @@ -2494,13 +2548,45 @@ bool MinidumpModuleList::Read(uint32_t expected_size) { } if (!range_map_->StoreRange(base_address, module_size, module_index)) { - BPLOG(ERROR) << "MinidumpModuleList could not store module " << - module_index << "/" << module_count << ", " << - module->code_file() << ", " << - HexString(base_address) << "+" << - HexString(module_size); - return false; + // Android's shared memory implementation /dev/ashmem can contain + // duplicate entries for JITted code, so ignore these. + // TODO(wfh): Remove this code when Android is fixed. + // See https://crbug.com/439531 + const string kDevAshmem("/dev/ashmem/"); + if (module->code_file().compare( + 0, kDevAshmem.length(), kDevAshmem) != 0) { + if (base_address < last_end_address) { + // If failed due to apparent range overlap the cause may be + // the client correction applied for Android packed relocations. + // If this is the case, back out the client correction and retry. + module_size -= last_end_address - base_address; + base_address = last_end_address; + if (!range_map_->StoreRange(base_address, + module_size, module_index)) { + BPLOG(ERROR) << "MinidumpModuleList could not store module " << + module_index << "/" << module_count << ", " << + module->code_file() << ", " << + HexString(base_address) << "+" << + HexString(module_size) << ", after adjusting"; + return false; + } + } else { + BPLOG(ERROR) << "MinidumpModuleList could not store module " << + module_index << "/" << module_count << ", " << + module->code_file() << ", " << + HexString(base_address) << "+" << + HexString(module_size); + return false; + } + } else { + BPLOG(INFO) << "MinidumpModuleList ignoring overlapping module " << + module_index << "/" << module_count << ", " << + module->code_file() << ", " << + HexString(base_address) << "+" << + HexString(module_size); + } } + last_end_address = base_address + module_size; } modules_ = modules.release(); @@ -2671,12 +2757,13 @@ bool MinidumpMemoryList::Read(uint32_t expected_size) { region_count * sizeof(MDMemoryDescriptor)) { uint32_t useless; if (!minidump_->ReadBytes(&useless, 4)) { - BPLOG(ERROR) << "MinidumpMemoryList cannot read memorylist padded bytes"; + BPLOG(ERROR) << "MinidumpMemoryList cannot read memorylist padded " + "bytes"; return false; } } else { BPLOG(ERROR) << "MinidumpMemoryList size mismatch, " << expected_size << - " != " << sizeof(region_count) + + " != " << sizeof(region_count) + region_count * sizeof(MDMemoryDescriptor); return false; } @@ -2991,48 +3078,14 @@ bool MinidumpAssertion::Read(uint32_t expected_size) { // Each of {expression, function, file} is a UTF-16 string, // we'll convert them to UTF-8 for ease of use. - // expression - // Since we don't have an explicit byte length for each string, - // we use UTF16codeunits to calculate word length, then derive byte - // length from that. - uint32_t word_length = UTF16codeunits(assertion_.expression, - sizeof(assertion_.expression)); - if (word_length > 0) { - uint32_t byte_length = word_length * 2; - vector expression_utf16(word_length); - memcpy(&expression_utf16[0], &assertion_.expression[0], byte_length); - - scoped_ptr new_expression(UTF16ToUTF8(expression_utf16, - minidump_->swap())); - if (new_expression.get()) - expression_ = *new_expression; - } - - // assertion - word_length = UTF16codeunits(assertion_.function, - sizeof(assertion_.function)); - if (word_length) { - uint32_t byte_length = word_length * 2; - vector function_utf16(word_length); - memcpy(&function_utf16[0], &assertion_.function[0], byte_length); - scoped_ptr new_function(UTF16ToUTF8(function_utf16, - minidump_->swap())); - if (new_function.get()) - function_ = *new_function; - } - - // file - word_length = UTF16codeunits(assertion_.file, - sizeof(assertion_.file)); - if (word_length > 0) { - uint32_t byte_length = word_length * 2; - vector file_utf16(word_length); - memcpy(&file_utf16[0], &assertion_.file[0], byte_length); - scoped_ptr new_file(UTF16ToUTF8(file_utf16, - minidump_->swap())); - if (new_file.get()) - file_ = *new_file; - } + ConvertUTF16BufferToUTF8String(assertion_.expression, + sizeof(assertion_.expression), &expression_, + minidump_->swap()); + ConvertUTF16BufferToUTF8String(assertion_.function, + sizeof(assertion_.function), &function_, + minidump_->swap()); + ConvertUTF16BufferToUTF8String(assertion_.file, sizeof(assertion_.file), + &file_, minidump_->swap()); if (minidump_->swap()) { Swap(&assertion_.line); @@ -3168,6 +3221,14 @@ string MinidumpSystemInfo::GetOS() { os = "android"; break; + case MD_OS_PS3: + os = "ps3"; + break; + + case MD_OS_NACL: + os = "nacl"; + break; + default: BPLOG(ERROR) << "MinidumpSystemInfo unknown OS for platform " << HexString(system_info_.platform_id); @@ -3200,6 +3261,10 @@ string MinidumpSystemInfo::GetCPU() { cpu = "ppc"; break; + case MD_CPU_ARCHITECTURE_PPC64: + cpu = "ppc64"; + break; + case MD_CPU_ARCHITECTURE_SPARC: cpu = "sparc"; break; @@ -3208,6 +3273,10 @@ string MinidumpSystemInfo::GetCPU() { cpu = "arm"; break; + case MD_CPU_ARCHITECTURE_ARM64: + cpu = "arm64"; + break; + default: BPLOG(ERROR) << "MinidumpSystemInfo unknown CPU for architecture " << HexString(system_info_.processor_architecture); @@ -3273,7 +3342,7 @@ void MinidumpSystemInfo::Print() { } printf("MDRawSystemInfo\n"); - printf(" processor_architecture = %d\n", + printf(" processor_architecture = 0x%x\n", system_info_.processor_architecture); printf(" processor_level = %d\n", system_info_.processor_level); @@ -3289,12 +3358,18 @@ void MinidumpSystemInfo::Print() { system_info_.minor_version); printf(" build_number = %d\n", system_info_.build_number); - printf(" platform_id = %d\n", + printf(" platform_id = 0x%x\n", system_info_.platform_id); printf(" csd_version_rva = 0x%x\n", system_info_.csd_version_rva); printf(" suite_mask = 0x%x\n", system_info_.suite_mask); + if (system_info_.processor_architecture == MD_CPU_ARCHITECTURE_X86 || + system_info_.processor_architecture == MD_CPU_ARCHITECTURE_X86_WIN64) { + printf(" cpu.x86_cpu_info (valid):\n"); + } else { + printf(" cpu.x86_cpu_info (invalid):\n"); + } for (unsigned int i = 0; i < 3; ++i) { printf(" cpu.x86_cpu_info.vendor_id[%d] = 0x%x\n", i, system_info_.cpu.x86_cpu_info.vendor_id[i]); @@ -3305,6 +3380,14 @@ void MinidumpSystemInfo::Print() { system_info_.cpu.x86_cpu_info.feature_information); printf(" cpu.x86_cpu_info.amd_extended_cpu_features = 0x%x\n", system_info_.cpu.x86_cpu_info.amd_extended_cpu_features); + if (system_info_.processor_architecture != MD_CPU_ARCHITECTURE_X86 && + system_info_.processor_architecture != MD_CPU_ARCHITECTURE_X86_WIN64) { + printf(" cpu.other_cpu_info (valid):\n"); + for (unsigned int i = 0; i < 2; ++i) { + printf(" cpu.other_cpu_info.processor_features[%d] = 0x%" PRIx64 "\n", + i, system_info_.cpu.other_cpu_info.processor_features[i]); + } + } const string* csd_version = GetCSDVersion(); if (csd_version) { printf(" (csd_version) = \"%s\"\n", @@ -3338,10 +3421,13 @@ bool MinidumpMiscInfo::Read(uint32_t expected_size) { valid_ = false; if (expected_size != MD_MISCINFO_SIZE && - expected_size != MD_MISCINFO2_SIZE) { - BPLOG(ERROR) << "MinidumpMiscInfo size mismatch, " << expected_size << - " != " << MD_MISCINFO_SIZE << ", " << MD_MISCINFO2_SIZE << - ")"; + expected_size != MD_MISCINFO2_SIZE && + expected_size != MD_MISCINFO3_SIZE && + expected_size != MD_MISCINFO4_SIZE) { + BPLOG(ERROR) << "MinidumpMiscInfo size mismatch, " << expected_size + << " != " << MD_MISCINFO_SIZE << ", " << MD_MISCINFO2_SIZE + << ", " << MD_MISCINFO3_SIZE << ", " << MD_MISCINFO4_SIZE + << ")"; return false; } @@ -3351,6 +3437,7 @@ bool MinidumpMiscInfo::Read(uint32_t expected_size) { } if (minidump_->swap()) { + // Swap version 1 fields Swap(&misc_info_.size_of_info); Swap(&misc_info_.flags1); Swap(&misc_info_.process_id); @@ -3358,12 +3445,26 @@ bool MinidumpMiscInfo::Read(uint32_t expected_size) { Swap(&misc_info_.process_user_time); Swap(&misc_info_.process_kernel_time); if (misc_info_.size_of_info > MD_MISCINFO_SIZE) { + // Swap version 2 fields Swap(&misc_info_.processor_max_mhz); Swap(&misc_info_.processor_current_mhz); Swap(&misc_info_.processor_mhz_limit); Swap(&misc_info_.processor_max_idle_state); Swap(&misc_info_.processor_current_idle_state); } + if (misc_info_.size_of_info > MD_MISCINFO2_SIZE) { + // Swap version 3 fields + Swap(&misc_info_.process_integrity_level); + Swap(&misc_info_.process_execute_flags); + Swap(&misc_info_.protected_process); + Swap(&misc_info_.time_zone_id); + Swap(&misc_info_.time_zone); + } + if (misc_info_.size_of_info > MD_MISCINFO3_SIZE) { + // Swap version 4 fields. + // Do not swap UTF-16 strings. The swap is done as part of the + // conversion to UTF-8 (code follows below). + } } if (expected_size != misc_info_.size_of_info) { @@ -3372,6 +3473,26 @@ bool MinidumpMiscInfo::Read(uint32_t expected_size) { return false; } + // Convert UTF-16 strings + if (misc_info_.size_of_info > MD_MISCINFO2_SIZE) { + // Convert UTF-16 strings in version 3 fields + ConvertUTF16BufferToUTF8String(misc_info_.time_zone.standard_name, + sizeof(misc_info_.time_zone.standard_name), + &standard_name_, minidump_->swap()); + ConvertUTF16BufferToUTF8String(misc_info_.time_zone.daylight_name, + sizeof(misc_info_.time_zone.daylight_name), + &daylight_name_, minidump_->swap()); + } + if (misc_info_.size_of_info > MD_MISCINFO3_SIZE) { + // Convert UTF-16 strings in version 4 fields + ConvertUTF16BufferToUTF8String(misc_info_.build_string, + sizeof(misc_info_.build_string), + &build_string_, minidump_->swap()); + ConvertUTF16BufferToUTF8String(misc_info_.dbg_bld_str, + sizeof(misc_info_.dbg_bld_str), + &dbg_bld_str_, minidump_->swap()); + } + valid_ = true; return true; } @@ -3384,26 +3505,117 @@ void MinidumpMiscInfo::Print() { } printf("MDRawMiscInfo\n"); + // Print version 1 fields printf(" size_of_info = %d\n", misc_info_.size_of_info); printf(" flags1 = 0x%x\n", misc_info_.flags1); - printf(" process_id = 0x%x\n", misc_info_.process_id); - printf(" process_create_time = 0x%x\n", - misc_info_.process_create_time); - printf(" process_user_time = 0x%x\n", - misc_info_.process_user_time); - printf(" process_kernel_time = 0x%x\n", - misc_info_.process_kernel_time); + printf(" process_id = "); + PrintValueOrInvalid(misc_info_.flags1 & MD_MISCINFO_FLAGS1_PROCESS_ID, + kNumberFormatDecimal, misc_info_.process_id); + if (misc_info_.flags1 & MD_MISCINFO_FLAGS1_PROCESS_TIMES) { + printf(" process_create_time = 0x%x %s\n", + misc_info_.process_create_time, + TimeTToUTCString(misc_info_.process_create_time).c_str()); + } else { + printf(" process_create_time = (invalid)\n"); + } + printf(" process_user_time = "); + PrintValueOrInvalid(misc_info_.flags1 & MD_MISCINFO_FLAGS1_PROCESS_TIMES, + kNumberFormatDecimal, misc_info_.process_user_time); + printf(" process_kernel_time = "); + PrintValueOrInvalid(misc_info_.flags1 & MD_MISCINFO_FLAGS1_PROCESS_TIMES, + kNumberFormatDecimal, misc_info_.process_kernel_time); if (misc_info_.size_of_info > MD_MISCINFO_SIZE) { - printf(" processor_max_mhz = %d\n", - misc_info_.processor_max_mhz); - printf(" processor_current_mhz = %d\n", - misc_info_.processor_current_mhz); - printf(" processor_mhz_limit = %d\n", - misc_info_.processor_mhz_limit); - printf(" processor_max_idle_state = 0x%x\n", - misc_info_.processor_max_idle_state); - printf(" processor_current_idle_state = 0x%x\n", - misc_info_.processor_current_idle_state); + // Print version 2 fields + printf(" processor_max_mhz = "); + PrintValueOrInvalid(misc_info_.flags1 & + MD_MISCINFO_FLAGS1_PROCESSOR_POWER_INFO, + kNumberFormatDecimal, misc_info_.processor_max_mhz); + printf(" processor_current_mhz = "); + PrintValueOrInvalid(misc_info_.flags1 & + MD_MISCINFO_FLAGS1_PROCESSOR_POWER_INFO, + kNumberFormatDecimal, misc_info_.processor_current_mhz); + printf(" processor_mhz_limit = "); + PrintValueOrInvalid(misc_info_.flags1 & + MD_MISCINFO_FLAGS1_PROCESSOR_POWER_INFO, + kNumberFormatDecimal, misc_info_.processor_mhz_limit); + printf(" processor_max_idle_state = "); + PrintValueOrInvalid(misc_info_.flags1 & + MD_MISCINFO_FLAGS1_PROCESSOR_POWER_INFO, + kNumberFormatDecimal, + misc_info_.processor_max_idle_state); + printf(" processor_current_idle_state = "); + PrintValueOrInvalid(misc_info_.flags1 & + MD_MISCINFO_FLAGS1_PROCESSOR_POWER_INFO, + kNumberFormatDecimal, + misc_info_.processor_current_idle_state); + } + if (misc_info_.size_of_info > MD_MISCINFO2_SIZE) { + // Print version 3 fields + printf(" process_integrity_level = "); + PrintValueOrInvalid(misc_info_.flags1 & + MD_MISCINFO_FLAGS1_PROCESS_INTEGRITY, + kNumberFormatHexadecimal, + misc_info_.process_integrity_level); + printf(" process_execute_flags = "); + PrintValueOrInvalid(misc_info_.flags1 & + MD_MISCINFO_FLAGS1_PROCESS_EXECUTE_FLAGS, + kNumberFormatHexadecimal, + misc_info_.process_execute_flags); + printf(" protected_process = "); + PrintValueOrInvalid(misc_info_.flags1 & + MD_MISCINFO_FLAGS1_PROTECTED_PROCESS, + kNumberFormatDecimal, misc_info_.protected_process); + printf(" time_zone_id = "); + PrintValueOrInvalid(misc_info_.flags1 & MD_MISCINFO_FLAGS1_TIMEZONE, + kNumberFormatDecimal, misc_info_.time_zone_id); + if (misc_info_.flags1 & MD_MISCINFO_FLAGS1_TIMEZONE) { + printf(" time_zone.bias = %d\n", + misc_info_.time_zone.bias); + printf(" time_zone.standard_name = %s\n", standard_name_.c_str()); + printf(" time_zone.standard_date = " + "%04d-%02d-%02d (%d) %02d:%02d:%02d.%03d\n", + misc_info_.time_zone.standard_date.year, + misc_info_.time_zone.standard_date.month, + misc_info_.time_zone.standard_date.day, + misc_info_.time_zone.standard_date.day_of_week, + misc_info_.time_zone.standard_date.hour, + misc_info_.time_zone.standard_date.minute, + misc_info_.time_zone.standard_date.second, + misc_info_.time_zone.standard_date.milliseconds); + printf(" time_zone.standard_bias = %d\n", + misc_info_.time_zone.standard_bias); + printf(" time_zone.daylight_name = %s\n", daylight_name_.c_str()); + printf(" time_zone.daylight_date = " + "%04d-%02d-%02d (%d) %02d:%02d:%02d.%03d\n", + misc_info_.time_zone.daylight_date.year, + misc_info_.time_zone.daylight_date.month, + misc_info_.time_zone.daylight_date.day, + misc_info_.time_zone.daylight_date.day_of_week, + misc_info_.time_zone.daylight_date.hour, + misc_info_.time_zone.daylight_date.minute, + misc_info_.time_zone.daylight_date.second, + misc_info_.time_zone.daylight_date.milliseconds); + printf(" time_zone.daylight_bias = %d\n", + misc_info_.time_zone.daylight_bias); + } else { + printf(" time_zone.bias = (invalid)\n"); + printf(" time_zone.standard_name = (invalid)\n"); + printf(" time_zone.standard_date = (invalid)\n"); + printf(" time_zone.standard_bias = (invalid)\n"); + printf(" time_zone.daylight_name = (invalid)\n"); + printf(" time_zone.daylight_date = (invalid)\n"); + printf(" time_zone.daylight_bias = (invalid)\n"); + } + } + if (misc_info_.size_of_info > MD_MISCINFO3_SIZE) { + // Print version 4 fields + if (misc_info_.flags1 & MD_MISCINFO_FLAGS1_BUILDSTRING) { + printf(" build_string = %s\n", build_string_.c_str()); + printf(" dbg_bld_str = %s\n", dbg_bld_str_.c_str()); + } else { + printf(" build_string = (invalid)\n"); + printf(" dbg_bld_str = (invalid)\n"); + } } printf("\n"); } @@ -3497,19 +3709,15 @@ void MinidumpBreakpadInfo::Print() { printf("MDRawBreakpadInfo\n"); printf(" validity = 0x%x\n", breakpad_info_.validity); - - if (breakpad_info_.validity & MD_BREAKPAD_INFO_VALID_DUMP_THREAD_ID) { - printf(" dump_thread_id = 0x%x\n", breakpad_info_.dump_thread_id); - } else { - printf(" dump_thread_id = (invalid)\n"); - } - - if (breakpad_info_.validity & MD_BREAKPAD_INFO_VALID_DUMP_THREAD_ID) { - printf(" requesting_thread_id = 0x%x\n", - breakpad_info_.requesting_thread_id); - } else { - printf(" requesting_thread_id = (invalid)\n"); - } + printf(" dump_thread_id = "); + PrintValueOrInvalid(breakpad_info_.validity & + MD_BREAKPAD_INFO_VALID_DUMP_THREAD_ID, + kNumberFormatHexadecimal, breakpad_info_.dump_thread_id); + printf(" requesting_thread_id = "); + PrintValueOrInvalid(breakpad_info_.validity & + MD_BREAKPAD_INFO_VALID_REQUESTING_THREAD_ID, + kNumberFormatHexadecimal, + breakpad_info_.requesting_thread_id); printf("\n"); } @@ -3644,7 +3852,7 @@ bool MinidumpMemoryInfoList::Read(uint32_t expected_size) { } // Sanity check that the header is the expected size. - //TODO(ted): could possibly handle this more gracefully, assuming + // TODO(ted): could possibly handle this more gracefully, assuming // that future versions of the structs would be backwards-compatible. if (header.size_of_header != sizeof(MDRawMemoryInfoList)) { BPLOG(ERROR) << "MinidumpMemoryInfoList header size mismatch, " << @@ -3677,9 +3885,20 @@ bool MinidumpMemoryInfoList::Read(uint32_t expected_size) { return false; } + // Check for data loss when converting header.number_of_entries from + // uint64_t into MinidumpMemoryInfos::size_type (uint32_t) + MinidumpMemoryInfos::size_type header_number_of_entries = + static_cast(header.number_of_entries); + if (static_cast(header_number_of_entries) != + header.number_of_entries) { + BPLOG(ERROR) << "Data loss detected when converting " + "the header's number_of_entries"; + return false; + } + if (header.number_of_entries != 0) { scoped_ptr infos( - new MinidumpMemoryInfos(header.number_of_entries, + new MinidumpMemoryInfos(header_number_of_entries, MinidumpMemoryInfo(minidump_))); for (unsigned int index = 0; @@ -3695,7 +3914,7 @@ bool MinidumpMemoryInfoList::Read(uint32_t expected_size) { } uint64_t base_address = info->GetBase(); - uint32_t region_size = info->GetSize(); + uint64_t region_size = info->GetSize(); if (!range_map_->StoreRange(base_address, region_size, index)) { BPLOG(ERROR) << "MinidumpMemoryInfoList could not store" @@ -3710,7 +3929,7 @@ bool MinidumpMemoryInfoList::Read(uint32_t expected_size) { infos_ = infos.release(); } - info_count_ = header.number_of_entries; + info_count_ = header_number_of_entries; valid_ = true; return true; @@ -3772,6 +3991,149 @@ void MinidumpMemoryInfoList::Print() { } } +// +// MinidumpLinuxMaps +// + +MinidumpLinuxMaps::MinidumpLinuxMaps(Minidump *minidump) + : MinidumpObject(minidump) { +} + +void MinidumpLinuxMaps::Print() const { + if (!valid_) { + BPLOG(ERROR) << "MinidumpLinuxMaps cannot print invalid data"; + return; + } + std::cout << region_.line << std::endl; +} + +// +// MinidumpLinuxMapsList +// + +MinidumpLinuxMapsList::MinidumpLinuxMapsList(Minidump *minidump) + : MinidumpStream(minidump), + maps_(NULL), + maps_count_(0) { +} + +MinidumpLinuxMapsList::~MinidumpLinuxMapsList() { + if (maps_) { + for (unsigned int i = 0; i < maps_->size(); i++) { + delete (*maps_)[i]; + } + delete maps_; + } +} + +const MinidumpLinuxMaps *MinidumpLinuxMapsList::GetLinuxMapsForAddress( + uint64_t address) const { + if (!valid_ || (maps_ == NULL)) { + BPLOG(ERROR) << "Invalid MinidumpLinuxMapsList for GetLinuxMapsForAddress"; + return NULL; + } + + // Search every memory mapping. + for (unsigned int index = 0; index < maps_count_; index++) { + // Check if address is within bounds of the current memory region. + if ((*maps_)[index]->GetBase() <= address && + (*maps_)[index]->GetBase() + (*maps_)[index]->GetSize() > address) { + return (*maps_)[index]; + } + } + + // No mapping encloses the memory address. + BPLOG(ERROR) << "MinidumpLinuxMapsList has no mapping at " + << HexString(address); + return NULL; +} + +const MinidumpLinuxMaps *MinidumpLinuxMapsList::GetLinuxMapsAtIndex( + unsigned int index) const { + if (!valid_ || (maps_ == NULL)) { + BPLOG(ERROR) << "Invalid MinidumpLinuxMapsList for GetLinuxMapsAtIndex"; + return NULL; + } + + // Index out of bounds. + if (index >= maps_count_ || (maps_ == NULL)) { + BPLOG(ERROR) << "MinidumpLinuxMapsList index of out range: " + << index + << "/" + << maps_count_; + return NULL; + } + return (*maps_)[index]; +} + +bool MinidumpLinuxMapsList::Read(uint32_t expected_size) { + // Invalidate cached data. + if (maps_) { + for (unsigned int i = 0; i < maps_->size(); i++) { + delete (*maps_)[i]; + } + delete maps_; + } + maps_ = NULL; + maps_count_ = 0; + + valid_ = false; + + // Load and check expected stream length. + uint32_t length = 0; + if (!minidump_->SeekToStreamType(MD_LINUX_MAPS, &length)) { + BPLOG(ERROR) << "MinidumpLinuxMapsList stream type not found"; + return false; + } + if (expected_size != length) { + BPLOG(ERROR) << "MinidumpLinuxMapsList size mismatch: " + << expected_size + << " != " + << length; + return false; + } + + // Create a vector to read stream data. The vector needs to have + // at least enough capacity to read all the data. + vector mapping_bytes(length); + if (!minidump_->ReadBytes(&mapping_bytes[0], length)) { + BPLOG(ERROR) << "MinidumpLinuxMapsList failed to read bytes"; + return false; + } + string map_string(mapping_bytes.begin(), mapping_bytes.end()); + vector all_regions; + + // Parse string into mapping data. + if (!ParseProcMaps(map_string, &all_regions)) { + return false; + } + + scoped_ptr maps(new MinidumpLinuxMappings()); + + // Push mapping data into wrapper classes. + for (size_t i = 0; i < all_regions.size(); i++) { + scoped_ptr ele(new MinidumpLinuxMaps(minidump_)); + ele->region_ = all_regions[i]; + ele->valid_ = true; + maps->push_back(ele.release()); + } + + // Set instance variables. + maps_ = maps.release(); + maps_count_ = maps_->size(); + valid_ = true; + return true; +} + +void MinidumpLinuxMapsList::Print() const { + if (!valid_ || (maps_ == NULL)) { + BPLOG(ERROR) << "MinidumpLinuxMapsList cannot print valid data"; + return; + } + for (size_t i = 0; i < maps_->size(); i++) { + (*maps_)[i]->Print(); + } +} // // Minidump @@ -3865,12 +4227,18 @@ bool Minidump::GetContextCPUFlagsFromSystemInfo(uint32_t *context_cpu_flags) { case MD_CPU_ARCHITECTURE_PPC: *context_cpu_flags = MD_CONTEXT_PPC; break; + case MD_CPU_ARCHITECTURE_PPC64: + *context_cpu_flags = MD_CONTEXT_PPC64; + break; case MD_CPU_ARCHITECTURE_SHX: *context_cpu_flags = MD_CONTEXT_SHX; break; case MD_CPU_ARCHITECTURE_ARM: *context_cpu_flags = MD_CONTEXT_ARM; break; + case MD_CPU_ARCHITECTURE_ARM64: + *context_cpu_flags = MD_CONTEXT_ARM64; + break; case MD_CPU_ARCHITECTURE_IA64: *context_cpu_flags = MD_CONTEXT_IA64; break; @@ -4086,6 +4454,77 @@ MinidumpMemoryInfoList* Minidump::GetMemoryInfoList() { return GetStream(&memory_info_list); } +MinidumpLinuxMapsList *Minidump::GetLinuxMapsList() { + MinidumpLinuxMapsList *linux_maps_list; + return GetStream(&linux_maps_list); +} + +static const char* get_stream_name(uint32_t stream_type) { + switch (stream_type) { + case MD_UNUSED_STREAM: + return "MD_UNUSED_STREAM"; + case MD_RESERVED_STREAM_0: + return "MD_RESERVED_STREAM_0"; + case MD_RESERVED_STREAM_1: + return "MD_RESERVED_STREAM_1"; + case MD_THREAD_LIST_STREAM: + return "MD_THREAD_LIST_STREAM"; + case MD_MODULE_LIST_STREAM: + return "MD_MODULE_LIST_STREAM"; + case MD_MEMORY_LIST_STREAM: + return "MD_MEMORY_LIST_STREAM"; + case MD_EXCEPTION_STREAM: + return "MD_EXCEPTION_STREAM"; + case MD_SYSTEM_INFO_STREAM: + return "MD_SYSTEM_INFO_STREAM"; + case MD_THREAD_EX_LIST_STREAM: + return "MD_THREAD_EX_LIST_STREAM"; + case MD_MEMORY_64_LIST_STREAM: + return "MD_MEMORY_64_LIST_STREAM"; + case MD_COMMENT_STREAM_A: + return "MD_COMMENT_STREAM_A"; + case MD_COMMENT_STREAM_W: + return "MD_COMMENT_STREAM_W"; + case MD_HANDLE_DATA_STREAM: + return "MD_HANDLE_DATA_STREAM"; + case MD_FUNCTION_TABLE_STREAM: + return "MD_FUNCTION_TABLE_STREAM"; + case MD_UNLOADED_MODULE_LIST_STREAM: + return "MD_UNLOADED_MODULE_LIST_STREAM"; + case MD_MISC_INFO_STREAM: + return "MD_MISC_INFO_STREAM"; + case MD_MEMORY_INFO_LIST_STREAM: + return "MD_MEMORY_INFO_LIST_STREAM"; + case MD_THREAD_INFO_LIST_STREAM: + return "MD_THREAD_INFO_LIST_STREAM"; + case MD_HANDLE_OPERATION_LIST_STREAM: + return "MD_HANDLE_OPERATION_LIST_STREAM"; + case MD_LAST_RESERVED_STREAM: + return "MD_LAST_RESERVED_STREAM"; + case MD_BREAKPAD_INFO_STREAM: + return "MD_BREAKPAD_INFO_STREAM"; + case MD_ASSERTION_INFO_STREAM: + return "MD_ASSERTION_INFO_STREAM"; + case MD_LINUX_CPU_INFO: + return "MD_LINUX_CPU_INFO"; + case MD_LINUX_PROC_STATUS: + return "MD_LINUX_PROC_STATUS"; + case MD_LINUX_LSB_RELEASE: + return "MD_LINUX_LSB_RELEASE"; + case MD_LINUX_CMD_LINE: + return "MD_LINUX_CMD_LINE"; + case MD_LINUX_ENVIRON: + return "MD_LINUX_ENVIRON"; + case MD_LINUX_AUXV: + return "MD_LINUX_AUXV"; + case MD_LINUX_MAPS: + return "MD_LINUX_MAPS"; + case MD_LINUX_DSO_DEBUG: + return "MD_LINUX_DSO_DEBUG"; + default: + return "unknown"; + } +} void Minidump::Print() { if (!valid_) { @@ -4099,16 +4538,9 @@ void Minidump::Print() { printf(" stream_count = %d\n", header_.stream_count); printf(" stream_directory_rva = 0x%x\n", header_.stream_directory_rva); printf(" checksum = 0x%x\n", header_.checksum); - struct tm timestruct; -#ifdef _WIN32 - gmtime_s(×truct, reinterpret_cast(&header_.time_date_stamp)); -#else - gmtime_r(reinterpret_cast(&header_.time_date_stamp), ×truct); -#endif - char timestr[20]; - strftime(timestr, 20, "%Y-%m-%d %H:%M:%S", ×truct); - printf(" time_date_stamp = 0x%x %s\n", header_.time_date_stamp, - timestr); + printf(" time_date_stamp = 0x%x %s\n", + header_.time_date_stamp, + TimeTToUTCString(header_.time_date_stamp).c_str()); printf(" flags = 0x%" PRIx64 "\n", header_.flags); printf("\n"); @@ -4119,7 +4551,8 @@ void Minidump::Print() { printf("mDirectory[%d]\n", stream_index); printf("MDRawDirectory\n"); - printf(" stream_type = %d\n", directory_entry->stream_type); + printf(" stream_type = 0x%x (%s)\n", directory_entry->stream_type, + get_stream_name(directory_entry->stream_type)); printf(" location.data_size = %d\n", directory_entry->location.data_size); printf(" location.rva = 0x%x\n", directory_entry->location.rva); @@ -4132,7 +4565,9 @@ void Minidump::Print() { ++iterator) { uint32_t stream_type = iterator->first; MinidumpStreamInfo info = iterator->second; - printf(" stream type 0x%x at index %d\n", stream_type, info.stream_index); + printf(" stream type 0x%x (%s) at index %d\n", stream_type, + get_stream_name(stream_type), + info.stream_index); } printf("\n"); } @@ -4162,17 +4597,27 @@ bool Minidump::ReadBytes(void* bytes, size_t count) { return false; } stream_->read(static_cast(bytes), count); - size_t bytes_read = stream_->gcount(); - if (bytes_read != count) { - if (bytes_read == size_t(-1)) { - string error_string; - int error_code = ErrnoString(&error_string); - BPLOG(ERROR) << "ReadBytes: error " << error_code << ": " << error_string; - } else { - BPLOG(ERROR) << "ReadBytes: read " << bytes_read << "/" << count; - } + std::streamsize bytes_read = stream_->gcount(); + if (bytes_read == -1) { + string error_string; + int error_code = ErrnoString(&error_string); + BPLOG(ERROR) << "ReadBytes: error " << error_code << ": " << error_string; return false; } + + // Convert to size_t and check for data loss + size_t bytes_read_converted = static_cast(bytes_read); + if (static_cast(bytes_read_converted) != bytes_read) { + BPLOG(ERROR) << "ReadBytes: conversion data loss detected when converting " + << bytes_read << " to " << bytes_read_converted; + return false; + } + + if (bytes_read_converted != count) { + BPLOG(ERROR) << "ReadBytes: read " << bytes_read_converted << "/" << count; + return false; + } + return true; } @@ -4198,7 +4643,15 @@ off_t Minidump::Tell() { return (off_t)-1; } - return stream_->tellg(); + // Check for conversion data loss + std::streamoff std_streamoff = stream_->tellg(); + off_t rv = static_cast(std_streamoff); + if (static_cast(rv) == std_streamoff) { + return rv; + } else { + BPLOG(ERROR) << "Data loss detected"; + return (off_t)-1; + } } diff --git a/toolkit/crashreporter/google-breakpad/src/processor/minidump_processor.cc b/toolkit/crashreporter/google-breakpad/src/processor/minidump_processor.cc index 08682780f615..3a20dfa5bfaf 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/minidump_processor.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/minidump_processor.cc @@ -11,7 +11,7 @@ // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. -// * Neither the name of Google Inc. nor the names of its +// * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // @@ -32,7 +32,10 @@ #include #include +#include + #include "common/scoped_ptr.h" +#include "common/using_std_string.h" #include "google_breakpad/processor/call_stack.h" #include "google_breakpad/processor/minidump.h" #include "google_breakpad/processor/process_state.h" @@ -40,6 +43,7 @@ #include "google_breakpad/processor/stack_frame_symbolizer.h" #include "processor/logging.h" #include "processor/stackwalker_x86.h" +#include "processor/symbolic_constants_win.h" namespace google_breakpad { @@ -47,7 +51,8 @@ MinidumpProcessor::MinidumpProcessor(SymbolSupplier *supplier, SourceLineResolverInterface *resolver) : frame_symbolizer_(new StackFrameSymbolizer(supplier, resolver)), own_frame_symbolizer_(true), - enable_exploitability_(false) { + enable_exploitability_(false), + enable_objdump_(false) { } MinidumpProcessor::MinidumpProcessor(SymbolSupplier *supplier, @@ -55,14 +60,16 @@ MinidumpProcessor::MinidumpProcessor(SymbolSupplier *supplier, bool enable_exploitability) : frame_symbolizer_(new StackFrameSymbolizer(supplier, resolver)), own_frame_symbolizer_(true), - enable_exploitability_(enable_exploitability) { + enable_exploitability_(enable_exploitability), + enable_objdump_(false) { } MinidumpProcessor::MinidumpProcessor(StackFrameSymbolizer *frame_symbolizer, bool enable_exploitability) : frame_symbolizer_(frame_symbolizer), own_frame_symbolizer_(false), - enable_exploitability_(enable_exploitability) { + enable_exploitability_(enable_exploitability), + enable_objdump_(false) { assert(frame_symbolizer_); } @@ -84,6 +91,9 @@ ProcessResult MinidumpProcessor::Process( } process_state->time_date_stamp_ = header->time_date_stamp; + bool has_process_create_time = + GetProcessCreateTime(dump, &process_state->process_create_time_); + bool has_cpu_info = GetCPUInfo(dump, &process_state->system_info_); bool has_os_info = GetOSInfo(dump, &process_state->system_info_); @@ -119,6 +129,12 @@ ProcessResult MinidumpProcessor::Process( if (module_list) process_state->modules_ = module_list->Copy(); + MinidumpMemoryList *memory_list = dump->GetMemoryList(); + if (memory_list) { + BPLOG(INFO) << "Found " << memory_list->region_count() + << " memory regions."; + } + MinidumpThreadList *threads = dump->GetThreadList(); if (!threads) { BPLOG(ERROR) << "Minidump " << dump->path() << " has no thread list"; @@ -126,14 +142,15 @@ ProcessResult MinidumpProcessor::Process( } BPLOG(INFO) << "Minidump " << dump->path() << " has " << - (has_cpu_info ? "" : "no ") << "CPU info, " << - (has_os_info ? "" : "no ") << "OS info, " << - (breakpad_info != NULL ? "" : "no ") << "Breakpad info, " << - (exception != NULL ? "" : "no ") << "exception, " << - (module_list != NULL ? "" : "no ") << "module list, " << - (threads != NULL ? "" : "no ") << "thread list, " << - (has_dump_thread ? "" : "no ") << "dump thread, and " << - (has_requesting_thread ? "" : "no ") << "requesting thread"; + (has_cpu_info ? "" : "no ") << "CPU info, " << + (has_os_info ? "" : "no ") << "OS info, " << + (breakpad_info != NULL ? "" : "no ") << "Breakpad info, " << + (exception != NULL ? "" : "no ") << "exception, " << + (module_list != NULL ? "" : "no ") << "module list, " << + (threads != NULL ? "" : "no ") << "thread list, " << + (has_dump_thread ? "" : "no ") << "dump thread, " << + (has_requesting_thread ? "" : "no ") << "requesting thread, and " << + (has_process_create_time ? "" : "no ") << "process create time"; bool interrupted = false; bool found_requesting_thread = false; @@ -205,7 +222,17 @@ ProcessResult MinidumpProcessor::Process( } } + // If the memory region for the stack cannot be read using the RVA stored + // in the memory descriptor inside MINIDUMP_THREAD, try to locate and use + // a memory region (containing the stack) from the minidump memory list. MinidumpMemoryRegion *thread_memory = thread->GetMemory(); + if (!thread_memory && memory_list) { + uint64_t start_stack_memory_range = thread->GetStartOfStackMemoryRange(); + if (start_stack_memory_range) { + thread_memory = memory_list->GetMemoryRegionForAddress( + start_stack_memory_range); + } + } if (!thread_memory) { BPLOG(ERROR) << "No memory region for " << thread_string; } @@ -228,7 +255,8 @@ ProcessResult MinidumpProcessor::Process( scoped_ptr stack(new CallStack()); if (stackwalker.get()) { if (!stackwalker->Walk(stack.get(), - &process_state->modules_without_symbols_)) { + &process_state->modules_without_symbols_, + &process_state->modules_with_corrupt_symbols_)) { BPLOG(INFO) << "Stackwalker interrupt (missing symbols?) at " << thread_string; interrupted = true; @@ -264,7 +292,9 @@ ProcessResult MinidumpProcessor::Process( // rating. if (enable_exploitability_) { scoped_ptr exploitability( - Exploitability::ExploitabilityForPlatform(dump, process_state)); + Exploitability::ExploitabilityForPlatform(dump, + process_state, + enable_objdump_)); // The engine will be null if the platform is not supported if (exploitability != NULL) { process_state->exploitability_ = exploitability->CheckExploitability(); @@ -305,6 +335,128 @@ static const MDRawSystemInfo* GetSystemInfo(Minidump *dump, return minidump_system_info->system_info(); } +// Extract CPU info string from ARM-specific MDRawSystemInfo structure. +// raw_info: pointer to source MDRawSystemInfo. +// cpu_info: address of target string, cpu info text will be appended to it. +static void GetARMCpuInfo(const MDRawSystemInfo* raw_info, + string* cpu_info) { + assert(raw_info != NULL && cpu_info != NULL); + + // Write ARM architecture version. + char cpu_string[32]; + snprintf(cpu_string, sizeof(cpu_string), "ARMv%d", + raw_info->processor_level); + cpu_info->append(cpu_string); + + // There is no good list of implementer id values, but the following + // pages provide some help: + // http://comments.gmane.org/gmane.linux.linaro.devel/6903 + // http://forum.xda-developers.com/archive/index.php/t-480226.html + const struct { + uint32_t id; + const char* name; + } vendors[] = { + { 0x41, "ARM" }, + { 0x51, "Qualcomm" }, + { 0x56, "Marvell" }, + { 0x69, "Intel/Marvell" }, + }; + const struct { + uint32_t id; + const char* name; + } parts[] = { + { 0x4100c050, "Cortex-A5" }, + { 0x4100c080, "Cortex-A8" }, + { 0x4100c090, "Cortex-A9" }, + { 0x4100c0f0, "Cortex-A15" }, + { 0x4100c140, "Cortex-R4" }, + { 0x4100c150, "Cortex-R5" }, + { 0x4100b360, "ARM1136" }, + { 0x4100b560, "ARM1156" }, + { 0x4100b760, "ARM1176" }, + { 0x4100b020, "ARM11-MPCore" }, + { 0x41009260, "ARM926" }, + { 0x41009460, "ARM946" }, + { 0x41009660, "ARM966" }, + { 0x510006f0, "Krait" }, + { 0x510000f0, "Scorpion" }, + }; + + const struct { + uint32_t hwcap; + const char* name; + } features[] = { + { MD_CPU_ARM_ELF_HWCAP_SWP, "swp" }, + { MD_CPU_ARM_ELF_HWCAP_HALF, "half" }, + { MD_CPU_ARM_ELF_HWCAP_THUMB, "thumb" }, + { MD_CPU_ARM_ELF_HWCAP_26BIT, "26bit" }, + { MD_CPU_ARM_ELF_HWCAP_FAST_MULT, "fastmult" }, + { MD_CPU_ARM_ELF_HWCAP_FPA, "fpa" }, + { MD_CPU_ARM_ELF_HWCAP_VFP, "vfpv2" }, + { MD_CPU_ARM_ELF_HWCAP_EDSP, "edsp" }, + { MD_CPU_ARM_ELF_HWCAP_JAVA, "java" }, + { MD_CPU_ARM_ELF_HWCAP_IWMMXT, "iwmmxt" }, + { MD_CPU_ARM_ELF_HWCAP_CRUNCH, "crunch" }, + { MD_CPU_ARM_ELF_HWCAP_THUMBEE, "thumbee" }, + { MD_CPU_ARM_ELF_HWCAP_NEON, "neon" }, + { MD_CPU_ARM_ELF_HWCAP_VFPv3, "vfpv3" }, + { MD_CPU_ARM_ELF_HWCAP_VFPv3D16, "vfpv3d16" }, + { MD_CPU_ARM_ELF_HWCAP_TLS, "tls" }, + { MD_CPU_ARM_ELF_HWCAP_VFPv4, "vfpv4" }, + { MD_CPU_ARM_ELF_HWCAP_IDIVA, "idiva" }, + { MD_CPU_ARM_ELF_HWCAP_IDIVT, "idivt" }, + }; + + uint32_t cpuid = raw_info->cpu.arm_cpu_info.cpuid; + if (cpuid != 0) { + // Extract vendor name from CPUID + const char* vendor = NULL; + uint32_t vendor_id = (cpuid >> 24) & 0xff; + for (size_t i = 0; i < sizeof(vendors)/sizeof(vendors[0]); ++i) { + if (vendors[i].id == vendor_id) { + vendor = vendors[i].name; + break; + } + } + cpu_info->append(" "); + if (vendor) { + cpu_info->append(vendor); + } else { + snprintf(cpu_string, sizeof(cpu_string), "vendor(0x%x)", vendor_id); + cpu_info->append(cpu_string); + } + + // Extract part name from CPUID + uint32_t part_id = (cpuid & 0xff00fff0); + const char* part = NULL; + for (size_t i = 0; i < sizeof(parts)/sizeof(parts[0]); ++i) { + if (parts[i].id == part_id) { + part = parts[i].name; + break; + } + } + cpu_info->append(" "); + if (part != NULL) { + cpu_info->append(part); + } else { + snprintf(cpu_string, sizeof(cpu_string), "part(0x%x)", part_id); + cpu_info->append(cpu_string); + } + } + uint32_t elf_hwcaps = raw_info->cpu.arm_cpu_info.elf_hwcaps; + if (elf_hwcaps != 0) { + cpu_info->append(" features: "); + const char* comma = ""; + for (size_t i = 0; i < sizeof(features)/sizeof(features[0]); ++i) { + if (elf_hwcaps & features[i].hwcap) { + cpu_info->append(comma); + cpu_info->append(features[i].name); + comma = ","; + } + } + } +} + // static bool MinidumpProcessor::GetCPUInfo(Minidump *dump, SystemInfo *info) { assert(dump); @@ -347,6 +499,11 @@ bool MinidumpProcessor::GetCPUInfo(Minidump *dump, SystemInfo *info) { break; } + case MD_CPU_ARCHITECTURE_PPC64: { + info->cpu = "ppc64"; + break; + } + case MD_CPU_ARCHITECTURE_SPARC: { info->cpu = "sparc"; break; @@ -354,6 +511,17 @@ bool MinidumpProcessor::GetCPUInfo(Minidump *dump, SystemInfo *info) { case MD_CPU_ARCHITECTURE_ARM: { info->cpu = "arm"; + GetARMCpuInfo(raw_system_info, &info->cpu_info); + break; + } + + case MD_CPU_ARCHITECTURE_ARM64: { + info->cpu = "arm64"; + break; + } + + case MD_CPU_ARCHITECTURE_MIPS: { + info->cpu = "mips"; break; } @@ -424,6 +592,16 @@ bool MinidumpProcessor::GetOSInfo(Minidump *dump, SystemInfo *info) { break; } + case MD_OS_PS3: { + info->os = "PS3"; + break; + } + + case MD_OS_NACL: { + info->os = "NaCl"; + break; + } + default: { // Assign the numeric platform ID into the OS string. char os_string[11]; @@ -450,6 +628,32 @@ bool MinidumpProcessor::GetOSInfo(Minidump *dump, SystemInfo *info) { return true; } +// static +bool MinidumpProcessor::GetProcessCreateTime(Minidump* dump, + uint32_t* process_create_time) { + assert(dump); + assert(process_create_time); + + *process_create_time = 0; + + MinidumpMiscInfo* minidump_misc_info = dump->GetMiscInfo(); + if (!minidump_misc_info) { + return false; + } + + const MDRawMiscInfo* md_raw_misc_info = minidump_misc_info->misc_info(); + if (!md_raw_misc_info) { + return false; + } + + if (!(md_raw_misc_info->flags1 & MD_MISCINFO_FLAGS1_PROCESS_TIMES)) { + return false; + } + + *process_create_time = md_raw_misc_info->process_create_time; + return true; +} + // static string MinidumpProcessor::GetCrashReason(Minidump *dump, uint64_t *address) { MinidumpException *exception = dump->GetException(); @@ -505,7 +709,9 @@ string MinidumpProcessor::GetCrashReason(Minidump *dump, uint64_t *address) { default: // arm and ppc overlap if (raw_system_info->processor_architecture == - MD_CPU_ARCHITECTURE_ARM) { + MD_CPU_ARCHITECTURE_ARM || + raw_system_info->processor_architecture == + MD_CPU_ARCHITECTURE_ARM64) { switch (exception_flags) { case MD_EXCEPTION_CODE_MAC_ARM_DA_ALIGN: reason.append("EXC_ARM_DA_ALIGN"); @@ -545,7 +751,8 @@ string MinidumpProcessor::GetCrashReason(Minidump *dump, uint64_t *address) { case MD_EXCEPTION_MAC_BAD_INSTRUCTION: reason = "EXC_BAD_INSTRUCTION / "; switch (raw_system_info->processor_architecture) { - case MD_CPU_ARCHITECTURE_ARM: { + case MD_CPU_ARCHITECTURE_ARM: + case MD_CPU_ARCHITECTURE_ARM64: { switch (exception_flags) { case MD_EXCEPTION_CODE_MAC_ARM_UNDEFINED: reason.append("EXC_ARM_UNDEFINED"); @@ -724,7 +931,8 @@ string MinidumpProcessor::GetCrashReason(Minidump *dump, uint64_t *address) { case MD_EXCEPTION_MAC_BREAKPOINT: reason = "EXC_BREAKPOINT / "; switch (raw_system_info->processor_architecture) { - case MD_CPU_ARCHITECTURE_ARM: { + case MD_CPU_ARCHITECTURE_ARM: + case MD_CPU_ARCHITECTURE_ARM64: { switch (exception_flags) { case MD_EXCEPTION_CODE_MAC_ARM_DA_ALIGN: reason.append("EXC_ARM_DA_ALIGN"); @@ -813,8 +1021,8 @@ string MinidumpProcessor::GetCrashReason(Minidump *dump, uint64_t *address) { // For EXCEPTION_ACCESS_VIOLATION, Windows puts the address that // caused the fault in exception_information[1]. // exception_information[0] is 0 if the violation was caused by - // an attempt to read data and 1 if it was an attempt to write - // data. + // an attempt to read data, 1 if it was an attempt to write data, + // and 8 if this was a data execution violation. // This information is useful in addition to the code address, which // will be present in the crash thread's instruction field anyway. if (raw_exception->exception_record.number_parameters >= 1) { @@ -845,7 +1053,48 @@ string MinidumpProcessor::GetCrashReason(Minidump *dump, uint64_t *address) { } break; case MD_EXCEPTION_CODE_WIN_IN_PAGE_ERROR: - reason = "EXCEPTION_IN_PAGE_ERROR"; + // For EXCEPTION_IN_PAGE_ERROR, Windows puts the address that + // caused the fault in exception_information[1]. + // exception_information[0] is 0 if the violation was caused by + // an attempt to read data, 1 if it was an attempt to write data, + // and 8 if this was a data execution violation. + // exception_information[2] contains the underlying NTSTATUS code, + // which is the explanation for why this error occured. + // This information is useful in addition to the code address, which + // will be present in the crash thread's instruction field anyway. + if (raw_exception->exception_record.number_parameters >= 1) { + MDInPageErrorTypeWin av_type = + static_cast + (raw_exception->exception_record.exception_information[0]); + switch (av_type) { + case MD_IN_PAGE_ERROR_WIN_READ: + reason = "EXCEPTION_IN_PAGE_ERROR_READ"; + break; + case MD_IN_PAGE_ERROR_WIN_WRITE: + reason = "EXCEPTION_IN_PAGE_ERROR_WRITE"; + break; + case MD_IN_PAGE_ERROR_WIN_EXEC: + reason = "EXCEPTION_IN_PAGE_ERROR_EXEC"; + break; + default: + reason = "EXCEPTION_IN_PAGE_ERROR"; + break; + } + } else { + reason = "EXCEPTION_IN_PAGE_ERROR"; + } + if (address && + raw_exception->exception_record.number_parameters >= 2) { + *address = + raw_exception->exception_record.exception_information[1]; + } + if (raw_exception->exception_record.number_parameters >= 3) { + uint32_t ntstatus = + static_cast + (raw_exception->exception_record.exception_information[2]); + reason.append(" / "); + reason.append(NTStatusToString(ntstatus)); + } break; case MD_EXCEPTION_CODE_WIN_INVALID_HANDLE: reason = "EXCEPTION_INVALID_HANDLE"; @@ -1149,6 +1398,84 @@ string MinidumpProcessor::GetCrashReason(Minidump *dump, uint64_t *address) { break; } + case MD_OS_PS3: { + switch (exception_code) { + case MD_EXCEPTION_CODE_PS3_UNKNOWN: + reason = "UNKNOWN"; + break; + case MD_EXCEPTION_CODE_PS3_TRAP_EXCEP: + reason = "TRAP_EXCEP"; + break; + case MD_EXCEPTION_CODE_PS3_PRIV_INSTR: + reason = "PRIV_INSTR"; + break; + case MD_EXCEPTION_CODE_PS3_ILLEGAL_INSTR: + reason = "ILLEGAL_INSTR"; + break; + case MD_EXCEPTION_CODE_PS3_INSTR_STORAGE: + reason = "INSTR_STORAGE"; + break; + case MD_EXCEPTION_CODE_PS3_INSTR_SEGMENT: + reason = "INSTR_SEGMENT"; + break; + case MD_EXCEPTION_CODE_PS3_DATA_STORAGE: + reason = "DATA_STORAGE"; + break; + case MD_EXCEPTION_CODE_PS3_DATA_SEGMENT: + reason = "DATA_SEGMENT"; + break; + case MD_EXCEPTION_CODE_PS3_FLOAT_POINT: + reason = "FLOAT_POINT"; + break; + case MD_EXCEPTION_CODE_PS3_DABR_MATCH: + reason = "DABR_MATCH"; + break; + case MD_EXCEPTION_CODE_PS3_ALIGN_EXCEP: + reason = "ALIGN_EXCEP"; + break; + case MD_EXCEPTION_CODE_PS3_MEMORY_ACCESS: + reason = "MEMORY_ACCESS"; + break; + case MD_EXCEPTION_CODE_PS3_COPRO_ALIGN: + reason = "COPRO_ALIGN"; + break; + case MD_EXCEPTION_CODE_PS3_COPRO_INVALID_COM: + reason = "COPRO_INVALID_COM"; + break; + case MD_EXCEPTION_CODE_PS3_COPRO_ERR: + reason = "COPRO_ERR"; + break; + case MD_EXCEPTION_CODE_PS3_COPRO_FIR: + reason = "COPRO_FIR"; + break; + case MD_EXCEPTION_CODE_PS3_COPRO_DATA_SEGMENT: + reason = "COPRO_DATA_SEGMENT"; + break; + case MD_EXCEPTION_CODE_PS3_COPRO_DATA_STORAGE: + reason = "COPRO_DATA_STORAGE"; + break; + case MD_EXCEPTION_CODE_PS3_COPRO_STOP_INSTR: + reason = "COPRO_STOP_INSTR"; + break; + case MD_EXCEPTION_CODE_PS3_COPRO_HALT_INSTR: + reason = "COPRO_HALT_INSTR"; + break; + case MD_EXCEPTION_CODE_PS3_COPRO_HALTINST_UNKNOWN: + reason = "COPRO_HALTINSTR_UNKNOWN"; + break; + case MD_EXCEPTION_CODE_PS3_COPRO_MEMORY_ACCESS: + reason = "COPRO_MEMORY_ACCESS"; + break; + case MD_EXCEPTION_CODE_PS3_GRAPHIC: + reason = "GRAPHIC"; + break; + default: + BPLOG(INFO) << "Unknown exception reason "<< reason; + break; + } + break; + } + default: { BPLOG(INFO) << "Unknown exception reason " << reason; break; diff --git a/toolkit/crashreporter/google-breakpad/src/processor/minidump_processor_unittest.cc b/toolkit/crashreporter/google-breakpad/src/processor/minidump_processor_unittest.cc index 562c0f93c4dd..69e1f42e65d5 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/minidump_processor_unittest.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/minidump_processor_unittest.cc @@ -66,10 +66,12 @@ class MockMinidump : public Minidump { MOCK_CONST_METHOD0(header, const MDRawHeader*()); MOCK_METHOD0(GetThreadList, MinidumpThreadList*()); MOCK_METHOD0(GetSystemInfo, MinidumpSystemInfo*()); + MOCK_METHOD0(GetMiscInfo, MinidumpMiscInfo*()); MOCK_METHOD0(GetBreakpadInfo, MinidumpBreakpadInfo*()); MOCK_METHOD0(GetException, MinidumpException*()); MOCK_METHOD0(GetAssertion, MinidumpAssertion*()); MOCK_METHOD0(GetModuleList, MinidumpModuleList*()); + MOCK_METHOD0(GetMemoryList, MinidumpMemoryList*()); }; class MockMinidumpThreadList : public MinidumpThreadList { @@ -80,6 +82,13 @@ class MockMinidumpThreadList : public MinidumpThreadList { MOCK_CONST_METHOD1(GetThreadAtIndex, MinidumpThread*(unsigned int)); }; +class MockMinidumpMemoryList : public MinidumpMemoryList { + public: + MockMinidumpMemoryList() : MinidumpMemoryList(NULL) {} + + MOCK_METHOD1(GetMemoryRegionForAddress, MinidumpMemoryRegion*(uint64_t)); +}; + class MockMinidumpThread : public MinidumpThread { public: MockMinidumpThread() : MinidumpThread(NULL) {} @@ -87,6 +96,7 @@ class MockMinidumpThread : public MinidumpThread { MOCK_CONST_METHOD1(GetThreadID, bool(uint32_t*)); MOCK_METHOD0(GetContext, MinidumpContext*()); MOCK_METHOD0(GetMemory, MinidumpMemoryRegion*()); + MOCK_CONST_METHOD0(GetStartOfStackMemoryRange, uint64_t()); }; // This is crappy, but MinidumpProcessor really does want a @@ -117,6 +127,17 @@ class MockMinidumpMemoryRegion : public MinidumpMemoryRegion { MockMemoryRegion region_; }; +// A test miscelaneous info stream, just returns values from the +// MDRawMiscInfo fed to it. +class TestMinidumpMiscInfo : public MinidumpMiscInfo { + public: + explicit TestMinidumpMiscInfo(const MDRawMiscInfo& misc_info) : + MinidumpMiscInfo(NULL) { + valid_ = true; + misc_info_ = misc_info; + } +}; + } // namespace google_breakpad namespace { @@ -126,11 +147,13 @@ using google_breakpad::CallStack; using google_breakpad::CodeModule; using google_breakpad::MinidumpContext; using google_breakpad::MinidumpMemoryRegion; +using google_breakpad::MinidumpMiscInfo; using google_breakpad::MinidumpProcessor; using google_breakpad::MinidumpSystemInfo; using google_breakpad::MinidumpThreadList; using google_breakpad::MinidumpThread; using google_breakpad::MockMinidump; +using google_breakpad::MockMinidumpMemoryList; using google_breakpad::MockMinidumpMemoryRegion; using google_breakpad::MockMinidumpThread; using google_breakpad::MockMinidumpThreadList; @@ -139,6 +162,7 @@ using google_breakpad::scoped_ptr; using google_breakpad::SymbolSupplier; using google_breakpad::SystemInfo; using ::testing::_; +using ::testing::AnyNumber; using ::testing::DoAll; using ::testing::Mock; using ::testing::Ne; @@ -177,7 +201,8 @@ class TestSymbolSupplier : public SymbolSupplier { virtual SymbolResult GetCStringSymbolData(const CodeModule *module, const SystemInfo *system_info, string *symbol_file, - char **symbol_data); + char **symbol_data, + size_t *symbol_data_size); virtual void FreeSymbolData(const CodeModule *module); @@ -237,21 +262,23 @@ SymbolSupplier::SymbolResult TestSymbolSupplier::GetCStringSymbolData( const CodeModule *module, const SystemInfo *system_info, string *symbol_file, - char **symbol_data) { + char **symbol_data, + size_t *symbol_data_size) { string symbol_data_string; SymbolSupplier::SymbolResult s = GetSymbolFile(module, system_info, symbol_file, &symbol_data_string); if (s == FOUND) { - unsigned int size = symbol_data_string.size() + 1; - *symbol_data = new char[size]; + *symbol_data_size = symbol_data_string.size() + 1; + *symbol_data = new char[*symbol_data_size]; if (*symbol_data == NULL) { BPLOG(ERROR) << "Memory allocation failed for module: " - << module->code_file() << " size: " << size; + << module->code_file() << " size: " << *symbol_data_size; return INTERRUPT; } - strcpy(*symbol_data, symbol_data_string.c_str()); + memcpy(*symbol_data, symbol_data_string.c_str(), symbol_data_string.size()); + (*symbol_data)[symbol_data_string.size()] = '\0'; memory_buffers_.insert(make_pair(module->code_file(), *symbol_data)); } @@ -270,7 +297,7 @@ void TestSymbolSupplier::FreeSymbolData(const CodeModule *module) { // MDRawSystemInfo fed to it. class TestMinidumpSystemInfo : public MinidumpSystemInfo { public: - TestMinidumpSystemInfo(MDRawSystemInfo info) : + explicit TestMinidumpSystemInfo(MDRawSystemInfo info) : MinidumpSystemInfo(NULL) { valid_ = true; system_info_ = info; @@ -281,11 +308,12 @@ class TestMinidumpSystemInfo : public MinidumpSystemInfo { // A test minidump context, just returns the MDRawContextX86 // fed to it. class TestMinidumpContext : public MinidumpContext { -public: - TestMinidumpContext(const MDRawContextX86& context) : MinidumpContext(NULL) { + public: + explicit TestMinidumpContext(const MDRawContextX86& context) : + MinidumpContext(NULL) { valid_ = true; - context_.x86 = new MDRawContextX86(context); - context_flags_ = MD_CONTEXT_X86; + SetContextX86(new MDRawContextX86(context)); + SetContextFlags(MD_CONTEXT_X86); } }; @@ -307,16 +335,17 @@ TEST_F(MinidumpProcessorTest, TestCorruptMinidumps) { MDRawHeader fakeHeader; fakeHeader.time_date_stamp = 0; - EXPECT_CALL(dump, header()).WillOnce(Return((MDRawHeader*)NULL)). + EXPECT_CALL(dump, header()). + WillOnce(Return(reinterpret_cast(NULL))). WillRepeatedly(Return(&fakeHeader)); EXPECT_EQ(processor.Process(&dump, &state), google_breakpad::PROCESS_ERROR_NO_MINIDUMP_HEADER); EXPECT_CALL(dump, GetThreadList()). - WillOnce(Return((MinidumpThreadList*)NULL)); + WillOnce(Return(reinterpret_cast(NULL))); EXPECT_CALL(dump, GetSystemInfo()). - WillRepeatedly(Return((MinidumpSystemInfo*)NULL)); + WillRepeatedly(Return(reinterpret_cast(NULL))); EXPECT_EQ(processor.Process(&dump, &state), google_breakpad::PROCESS_ERROR_NO_THREAD_LIST); @@ -335,11 +364,14 @@ TEST_F(MinidumpProcessorTest, TestSymbolSupplierLookupCounts) { EXPECT_CALL(supplier, GetCStringSymbolData( Property(&google_breakpad::CodeModule::code_file, "c:\\test_app.exe"), - _, _, _)).WillOnce(Return(SymbolSupplier::NOT_FOUND)); + _, _, _, _)).WillOnce(Return(SymbolSupplier::NOT_FOUND)); EXPECT_CALL(supplier, GetCStringSymbolData( Property(&google_breakpad::CodeModule::code_file, Ne("c:\\test_app.exe")), - _, _, _)).WillRepeatedly(Return(SymbolSupplier::NOT_FOUND)); + _, _, _, _)).WillRepeatedly(Return(SymbolSupplier::NOT_FOUND)); + // Avoid GMOCK WARNING "Uninteresting mock function call - returning + // directly" for FreeSymbolData(). + EXPECT_CALL(supplier, FreeSymbolData(_)).Times(AnyNumber()); ASSERT_EQ(processor.Process(minidump_file, &state), google_breakpad::PROCESS_OK); @@ -350,11 +382,14 @@ TEST_F(MinidumpProcessorTest, TestSymbolSupplierLookupCounts) { EXPECT_CALL(supplier, GetCStringSymbolData( Property(&google_breakpad::CodeModule::code_file, "c:\\test_app.exe"), - _, _, _)).WillOnce(Return(SymbolSupplier::NOT_FOUND)); + _, _, _, _)).WillOnce(Return(SymbolSupplier::NOT_FOUND)); EXPECT_CALL(supplier, GetCStringSymbolData( Property(&google_breakpad::CodeModule::code_file, Ne("c:\\test_app.exe")), - _, _, _)).WillRepeatedly(Return(SymbolSupplier::NOT_FOUND)); + _, _, _, _)).WillRepeatedly(Return(SymbolSupplier::NOT_FOUND)); + // Avoid GMOCK WARNING "Uninteresting mock function call - returning + // directly" for FreeSymbolData(). + EXPECT_CALL(supplier, FreeSymbolData(_)).Times(AnyNumber()); ASSERT_EQ(processor.Process(minidump_file, &state), google_breakpad::PROCESS_OK); } @@ -380,6 +415,8 @@ TEST_F(MinidumpProcessorTest, TestBasicProcessing) { ASSERT_EQ(state.crash_address(), 0x45U); ASSERT_EQ(state.threads()->size(), size_t(1)); ASSERT_EQ(state.requesting_thread(), 0); + EXPECT_EQ(1171480435U, state.time_date_stamp()); + EXPECT_EQ(1171480435U, state.process_create_time()); CallStack *stack = state.threads()->at(0); ASSERT_TRUE(stack); @@ -463,13 +500,23 @@ TEST_F(MinidumpProcessorTest, TestThreadMissingMemory) { EXPECT_CALL(dump, GetThreadList()). WillOnce(Return(&thread_list)); + MockMinidumpMemoryList memory_list; + EXPECT_CALL(dump, GetMemoryList()). + WillOnce(Return(&memory_list)); + // Return a thread missing stack memory. MockMinidumpThread no_memory_thread; EXPECT_CALL(no_memory_thread, GetThreadID(_)). WillRepeatedly(DoAll(SetArgumentPointee<0>(1), Return(true))); EXPECT_CALL(no_memory_thread, GetMemory()). - WillRepeatedly(Return((MinidumpMemoryRegion*)NULL)); + WillRepeatedly(Return(reinterpret_cast(NULL))); + + const uint64_t kTestStartOfMemoryRange = 0x1234; + EXPECT_CALL(no_memory_thread, GetStartOfStackMemoryRange()). + WillRepeatedly(Return(kTestStartOfMemoryRange)); + EXPECT_CALL(memory_list, GetMemoryRegionForAddress(kTestStartOfMemoryRange)). + WillRepeatedly(Return(reinterpret_cast(NULL))); MDRawContextX86 no_memory_thread_raw_context; memset(&no_memory_thread_raw_context, 0, @@ -486,7 +533,7 @@ TEST_F(MinidumpProcessorTest, TestThreadMissingMemory) { EXPECT_CALL(thread_list, GetThreadAtIndex(0)). WillOnce(Return(&no_memory_thread)); - MinidumpProcessor processor((SymbolSupplier*)NULL, NULL); + MinidumpProcessor processor(reinterpret_cast(NULL), NULL); ProcessState state; EXPECT_EQ(processor.Process(&dump, &state), google_breakpad::PROCESS_OK); @@ -497,6 +544,40 @@ TEST_F(MinidumpProcessorTest, TestThreadMissingMemory) { ASSERT_EQ(kExpectedEIP, state.threads()->at(0)->frames()->at(0)->instruction); } +TEST_F(MinidumpProcessorTest, GetProcessCreateTime) { + const uint32_t kProcessCreateTime = 2000; + const uint32_t kTimeDateStamp = 5000; + MockMinidump dump; + EXPECT_CALL(dump, path()).WillRepeatedly(Return("mock minidump")); + EXPECT_CALL(dump, Read()).WillRepeatedly(Return(true)); + + // Set time of crash. + MDRawHeader fake_header; + fake_header.time_date_stamp = kTimeDateStamp; + EXPECT_CALL(dump, header()).WillRepeatedly(Return(&fake_header)); + + // Set process create time. + MDRawMiscInfo raw_misc_info; + memset(&raw_misc_info, 0, sizeof(raw_misc_info)); + raw_misc_info.process_create_time = kProcessCreateTime; + raw_misc_info.flags1 |= MD_MISCINFO_FLAGS1_PROCESS_TIMES; + google_breakpad::TestMinidumpMiscInfo dump_misc_info(raw_misc_info); + EXPECT_CALL(dump, GetMiscInfo()).WillRepeatedly(Return(&dump_misc_info)); + + // No threads + MockMinidumpThreadList thread_list; + EXPECT_CALL(dump, GetThreadList()).WillOnce(Return(&thread_list)); + EXPECT_CALL(thread_list, thread_count()).WillRepeatedly(Return(0)); + + MinidumpProcessor processor(reinterpret_cast(NULL), NULL); + ProcessState state; + EXPECT_EQ(google_breakpad::PROCESS_OK, processor.Process(&dump, &state)); + + // Verify the time stamps. + ASSERT_EQ(kTimeDateStamp, state.time_date_stamp()); + ASSERT_EQ(kProcessCreateTime, state.process_create_time()); +} + TEST_F(MinidumpProcessorTest, TestThreadMissingContext) { MockMinidump dump; EXPECT_CALL(dump, path()).WillRepeatedly(Return("mock minidump")); @@ -519,25 +600,33 @@ TEST_F(MinidumpProcessorTest, TestThreadMissingContext) { EXPECT_CALL(dump, GetThreadList()). WillOnce(Return(&thread_list)); + MockMinidumpMemoryList memory_list; + EXPECT_CALL(dump, GetMemoryList()). + WillOnce(Return(&memory_list)); + // Return a thread missing a thread context. MockMinidumpThread no_context_thread; EXPECT_CALL(no_context_thread, GetThreadID(_)). WillRepeatedly(DoAll(SetArgumentPointee<0>(1), Return(true))); EXPECT_CALL(no_context_thread, GetContext()). - WillRepeatedly(Return((MinidumpContext*)NULL)); + WillRepeatedly(Return(reinterpret_cast(NULL))); // The memory contents don't really matter here, since it won't be used. MockMinidumpMemoryRegion no_context_thread_memory(0x1234, "xxx"); EXPECT_CALL(no_context_thread, GetMemory()). WillRepeatedly(Return(&no_context_thread_memory)); + EXPECT_CALL(no_context_thread, GetStartOfStackMemoryRange()). + Times(0); + EXPECT_CALL(memory_list, GetMemoryRegionForAddress(_)). + Times(0); EXPECT_CALL(thread_list, thread_count()). WillRepeatedly(Return(1)); EXPECT_CALL(thread_list, GetThreadAtIndex(0)). WillOnce(Return(&no_context_thread)); - MinidumpProcessor processor((SymbolSupplier*)NULL, NULL); + MinidumpProcessor processor(reinterpret_cast(NULL), NULL); ProcessState state; EXPECT_EQ(processor.Process(&dump, &state), google_breakpad::PROCESS_OK); diff --git a/toolkit/crashreporter/google-breakpad/src/processor/minidump_stackwalk.cc b/toolkit/crashreporter/google-breakpad/src/processor/minidump_stackwalk.cc index 6bf78ac1fc76..8f83969fef1b 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/minidump_stackwalk.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/minidump_stackwalk.cc @@ -33,7 +33,6 @@ // Author: Mark Mentovai #include -#include #include #include @@ -42,520 +41,22 @@ #include "common/scoped_ptr.h" #include "common/using_std_string.h" #include "google_breakpad/processor/basic_source_line_resolver.h" -#include "google_breakpad/processor/call_stack.h" -#include "google_breakpad/processor/code_module.h" -#include "google_breakpad/processor/code_modules.h" #include "google_breakpad/processor/minidump.h" #include "google_breakpad/processor/minidump_processor.h" #include "google_breakpad/processor/process_state.h" -#include "google_breakpad/processor/stack_frame_cpu.h" #include "processor/logging.h" -#include "processor/pathname_stripper.h" #include "processor/simple_symbol_supplier.h" +#include "processor/stackwalk_common.h" + namespace { -using std::vector; using google_breakpad::BasicSourceLineResolver; -using google_breakpad::CallStack; -using google_breakpad::CodeModule; -using google_breakpad::CodeModules; -using google_breakpad::MinidumpModule; +using google_breakpad::Minidump; using google_breakpad::MinidumpProcessor; -using google_breakpad::PathnameStripper; using google_breakpad::ProcessState; -using google_breakpad::scoped_ptr; using google_breakpad::SimpleSymbolSupplier; -using google_breakpad::StackFrame; -using google_breakpad::StackFramePPC; -using google_breakpad::StackFrameSPARC; -using google_breakpad::StackFrameX86; -using google_breakpad::StackFrameAMD64; -using google_breakpad::StackFrameARM; - -// Separator character for machine readable output. -static const char kOutputSeparator = '|'; - -// PrintRegister prints a register's name and value to stdout. It will -// print four registers on a line. For the first register in a set, -// pass 0 for |start_col|. For registers in a set, pass the most recent -// return value of PrintRegister. -// The caller is responsible for printing the final newline after a set -// of registers is completely printed, regardless of the number of calls -// to PrintRegister. -static const int kMaxWidth = 80; // optimize for an 80-column terminal -static int PrintRegister(const char *name, uint32_t value, int start_col) { - char buffer[64]; - snprintf(buffer, sizeof(buffer), " %5s = 0x%08x", name, value); - - if (start_col + static_cast(strlen(buffer)) > kMaxWidth) { - start_col = 0; - printf("\n "); - } - fputs(buffer, stdout); - - return start_col + strlen(buffer); -} - -// PrintRegister64 does the same thing, but for 64-bit registers. -static int PrintRegister64(const char *name, uint64_t value, int start_col) { - char buffer[64]; - snprintf(buffer, sizeof(buffer), " %5s = 0x%016" PRIx64 , name, value); - - if (start_col + static_cast(strlen(buffer)) > kMaxWidth) { - start_col = 0; - printf("\n "); - } - fputs(buffer, stdout); - - return start_col + strlen(buffer); -} - -// StripSeparator takes a string |original| and returns a copy -// of the string with all occurences of |kOutputSeparator| removed. -static string StripSeparator(const string &original) { - string result = original; - string::size_type position = 0; - while ((position = result.find(kOutputSeparator, position)) != string::npos) { - result.erase(position, 1); - } - position = 0; - while ((position = result.find('\n', position)) != string::npos) { - result.erase(position, 1); - } - return result; -} - -// PrintStack prints the call stack in |stack| to stdout, in a reasonably -// useful form. Module, function, and source file names are displayed if -// they are available. The code offset to the base code address of the -// source line, function, or module is printed, preferring them in that -// order. If no source line, function, or module information is available, -// an absolute code offset is printed. -// -// If |cpu| is a recognized CPU name, relevant register state for each stack -// frame printed is also output, if available. -static void PrintStack(const CallStack *stack, const string &cpu) { - int frame_count = stack->frames()->size(); - if (frame_count == 0) { - printf(" \n"); - } - for (int frame_index = 0; frame_index < frame_count; ++frame_index) { - const StackFrame *frame = stack->frames()->at(frame_index); - printf("%2d ", frame_index); - - uint64_t instruction_address = frame->ReturnAddress(); - - if (frame->module) { - printf("%s", PathnameStripper::File(frame->module->code_file()).c_str()); - if (!frame->function_name.empty()) { - printf("!%s", frame->function_name.c_str()); - if (!frame->source_file_name.empty()) { - string source_file = PathnameStripper::File(frame->source_file_name); - printf(" [%s : %d + 0x%" PRIx64 "]", - source_file.c_str(), - frame->source_line, - instruction_address - frame->source_line_base); - } else { - printf(" + 0x%" PRIx64, instruction_address - frame->function_base); - } - } else { - printf(" + 0x%" PRIx64, - instruction_address - frame->module->base_address()); - } - } else { - printf("0x%" PRIx64, instruction_address); - } - printf("\n "); - - int sequence = 0; - if (cpu == "x86") { - const StackFrameX86 *frame_x86 = - reinterpret_cast(frame); - - if (frame_x86->context_validity & StackFrameX86::CONTEXT_VALID_EIP) - sequence = PrintRegister("eip", frame_x86->context.eip, sequence); - if (frame_x86->context_validity & StackFrameX86::CONTEXT_VALID_ESP) - sequence = PrintRegister("esp", frame_x86->context.esp, sequence); - if (frame_x86->context_validity & StackFrameX86::CONTEXT_VALID_EBP) - sequence = PrintRegister("ebp", frame_x86->context.ebp, sequence); - if (frame_x86->context_validity & StackFrameX86::CONTEXT_VALID_EBX) - sequence = PrintRegister("ebx", frame_x86->context.ebx, sequence); - if (frame_x86->context_validity & StackFrameX86::CONTEXT_VALID_ESI) - sequence = PrintRegister("esi", frame_x86->context.esi, sequence); - if (frame_x86->context_validity & StackFrameX86::CONTEXT_VALID_EDI) - sequence = PrintRegister("edi", frame_x86->context.edi, sequence); - if (frame_x86->context_validity == StackFrameX86::CONTEXT_VALID_ALL) { - sequence = PrintRegister("eax", frame_x86->context.eax, sequence); - sequence = PrintRegister("ecx", frame_x86->context.ecx, sequence); - sequence = PrintRegister("edx", frame_x86->context.edx, sequence); - sequence = PrintRegister("efl", frame_x86->context.eflags, sequence); - } - } else if (cpu == "ppc") { - const StackFramePPC *frame_ppc = - reinterpret_cast(frame); - - if (frame_ppc->context_validity & StackFramePPC::CONTEXT_VALID_SRR0) - sequence = PrintRegister("srr0", frame_ppc->context.srr0, sequence); - if (frame_ppc->context_validity & StackFramePPC::CONTEXT_VALID_GPR1) - sequence = PrintRegister("r1", frame_ppc->context.gpr[1], sequence); - } else if (cpu == "amd64") { - const StackFrameAMD64 *frame_amd64 = - reinterpret_cast(frame); - - if (frame_amd64->context_validity & StackFrameAMD64::CONTEXT_VALID_RBX) - sequence = PrintRegister64("rbx", frame_amd64->context.rbx, sequence); - if (frame_amd64->context_validity & StackFrameAMD64::CONTEXT_VALID_R12) - sequence = PrintRegister64("r12", frame_amd64->context.r12, sequence); - if (frame_amd64->context_validity & StackFrameAMD64::CONTEXT_VALID_R13) - sequence = PrintRegister64("r13", frame_amd64->context.r13, sequence); - if (frame_amd64->context_validity & StackFrameAMD64::CONTEXT_VALID_R14) - sequence = PrintRegister64("r14", frame_amd64->context.r14, sequence); - if (frame_amd64->context_validity & StackFrameAMD64::CONTEXT_VALID_R15) - sequence = PrintRegister64("r15", frame_amd64->context.r15, sequence); - if (frame_amd64->context_validity & StackFrameAMD64::CONTEXT_VALID_RIP) - sequence = PrintRegister64("rip", frame_amd64->context.rip, sequence); - if (frame_amd64->context_validity & StackFrameAMD64::CONTEXT_VALID_RSP) - sequence = PrintRegister64("rsp", frame_amd64->context.rsp, sequence); - if (frame_amd64->context_validity & StackFrameAMD64::CONTEXT_VALID_RBP) - sequence = PrintRegister64("rbp", frame_amd64->context.rbp, sequence); - } else if (cpu == "sparc") { - const StackFrameSPARC *frame_sparc = - reinterpret_cast(frame); - - if (frame_sparc->context_validity & StackFrameSPARC::CONTEXT_VALID_SP) - sequence = PrintRegister("sp", frame_sparc->context.g_r[14], sequence); - if (frame_sparc->context_validity & StackFrameSPARC::CONTEXT_VALID_FP) - sequence = PrintRegister("fp", frame_sparc->context.g_r[30], sequence); - if (frame_sparc->context_validity & StackFrameSPARC::CONTEXT_VALID_PC) - sequence = PrintRegister("pc", frame_sparc->context.pc, sequence); - } else if (cpu == "arm") { - const StackFrameARM *frame_arm = - reinterpret_cast(frame); - - // Argument registers (caller-saves), which will likely only be valid - // for the youngest frame. - if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_R0) - sequence = PrintRegister("r0", frame_arm->context.iregs[0], sequence); - if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_R1) - sequence = PrintRegister("r1", frame_arm->context.iregs[1], sequence); - if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_R2) - sequence = PrintRegister("r2", frame_arm->context.iregs[2], sequence); - if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_R3) - sequence = PrintRegister("r3", frame_arm->context.iregs[3], sequence); - - // General-purpose callee-saves registers. - if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_R4) - sequence = PrintRegister("r4", frame_arm->context.iregs[4], sequence); - if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_R5) - sequence = PrintRegister("r5", frame_arm->context.iregs[5], sequence); - if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_R6) - sequence = PrintRegister("r6", frame_arm->context.iregs[6], sequence); - if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_R7) - sequence = PrintRegister("r7", frame_arm->context.iregs[7], sequence); - if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_R8) - sequence = PrintRegister("r8", frame_arm->context.iregs[8], sequence); - if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_R9) - sequence = PrintRegister("r9", frame_arm->context.iregs[9], sequence); - if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_R10) - sequence = PrintRegister("r10", frame_arm->context.iregs[10], sequence); - - // Registers with a dedicated or conventional purpose. - if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_FP) - sequence = PrintRegister("fp", frame_arm->context.iregs[11], sequence); - if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_SP) - sequence = PrintRegister("sp", frame_arm->context.iregs[13], sequence); - if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_LR) - sequence = PrintRegister("lr", frame_arm->context.iregs[14], sequence); - if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_PC) - sequence = PrintRegister("pc", frame_arm->context.iregs[15], sequence); - } - printf("\n Found by: %s\n", frame->trust_description().c_str()); - } -} - -// PrintStackMachineReadable prints the call stack in |stack| to stdout, -// in the following machine readable pipe-delimited text format: -// thread number|frame number|module|function|source file|line|offset -// -// Module, function, source file, and source line may all be empty -// depending on availability. The code offset follows the same rules as -// PrintStack above. -static void PrintStackMachineReadable(int thread_num, const CallStack *stack) { - int frame_count = stack->frames()->size(); - for (int frame_index = 0; frame_index < frame_count; ++frame_index) { - const StackFrame *frame = stack->frames()->at(frame_index); - printf("%d%c%d%c", thread_num, kOutputSeparator, frame_index, - kOutputSeparator); - - uint64_t instruction_address = frame->ReturnAddress(); - - if (frame->module) { - assert(!frame->module->code_file().empty()); - printf("%s", StripSeparator(PathnameStripper::File( - frame->module->code_file())).c_str()); - if (!frame->function_name.empty()) { - printf("%c%s", kOutputSeparator, - StripSeparator(frame->function_name).c_str()); - if (!frame->source_file_name.empty()) { - printf("%c%s%c%d%c0x%" PRIx64, - kOutputSeparator, - StripSeparator(frame->source_file_name).c_str(), - kOutputSeparator, - frame->source_line, - kOutputSeparator, - instruction_address - frame->source_line_base); - } else { - printf("%c%c%c0x%" PRIx64, - kOutputSeparator, // empty source file - kOutputSeparator, // empty source line - kOutputSeparator, - instruction_address - frame->function_base); - } - } else { - printf("%c%c%c%c0x%" PRIx64, - kOutputSeparator, // empty function name - kOutputSeparator, // empty source file - kOutputSeparator, // empty source line - kOutputSeparator, - instruction_address - frame->module->base_address()); - } - } else { - // the printf before this prints a trailing separator for module name - printf("%c%c%c%c0x%" PRIx64, - kOutputSeparator, // empty function name - kOutputSeparator, // empty source file - kOutputSeparator, // empty source line - kOutputSeparator, - instruction_address); - } - printf("\n"); - } -} - -// ContainsModule checks whether a given |module| is in the vector -// |modules_without_symbols|. -static bool ContainsModule( - const vector *modules, - const CodeModule *module) { - assert(modules); - assert(module); - vector::const_iterator iter; - for (iter = modules->begin(); iter != modules->end(); ++iter) { - if (module->debug_file().compare((*iter)->debug_file()) == 0 && - module->debug_identifier().compare((*iter)->debug_identifier()) == 0) { - return true; - } - } - return false; -} - -// PrintModule prints a single |module| to stdout. -// |modules_without_symbols| should contain the list of modules that were -// confirmed to be missing their symbols during the stack walk. -static void PrintModule( - const CodeModule *module, - const vector *modules_without_symbols, - uint64_t main_address) { - string missing_symbols; - if (ContainsModule(modules_without_symbols, module)) { - missing_symbols = " (WARNING: No symbols, " + - PathnameStripper::File(module->debug_file()) + ", " + - module->debug_identifier() + ")"; - } - uint64_t base_address = module->base_address(); - printf("0x%08" PRIx64 " - 0x%08" PRIx64 " %s %s%s%s\n", - base_address, base_address + module->size() - 1, - PathnameStripper::File(module->code_file()).c_str(), - module->version().empty() ? "???" : module->version().c_str(), - main_address != 0 && base_address == main_address ? " (main)" : "", - missing_symbols.c_str()); -} - -// PrintModules prints the list of all loaded |modules| to stdout. -// |modules_without_symbols| should contain the list of modules that were -// confirmed to be missing their symbols during the stack walk. -static void PrintModules( - const CodeModules *modules, - const vector *modules_without_symbols) { - if (!modules) - return; - - printf("\n"); - printf("Loaded modules:\n"); - - uint64_t main_address = 0; - const CodeModule *main_module = modules->GetMainModule(); - if (main_module) { - main_address = main_module->base_address(); - } - - unsigned int module_count = modules->module_count(); - for (unsigned int module_sequence = 0; - module_sequence < module_count; - ++module_sequence) { - const CodeModule *module = modules->GetModuleAtSequence(module_sequence); - PrintModule(module, modules_without_symbols, main_address); - } -} - -// PrintModulesMachineReadable outputs a list of loaded modules, -// one per line, in the following machine-readable pipe-delimited -// text format: -// Module|{Module Filename}|{Version}|{Debug Filename}|{Debug Identifier}| -// {Base Address}|{Max Address}|{Main} -static void PrintModulesMachineReadable(const CodeModules *modules) { - if (!modules) - return; - - uint64_t main_address = 0; - const CodeModule *main_module = modules->GetMainModule(); - if (main_module) { - main_address = main_module->base_address(); - } - - unsigned int module_count = modules->module_count(); - for (unsigned int module_sequence = 0; - module_sequence < module_count; - ++module_sequence) { - const CodeModule *module = modules->GetModuleAtSequence(module_sequence); - uint64_t base_address = module->base_address(); - printf("Module%c%s%c%s%c%s%c%s%c0x%08" PRIx64 "%c0x%08" PRIx64 "%c%d\n", - kOutputSeparator, - StripSeparator(PathnameStripper::File(module->code_file())).c_str(), - kOutputSeparator, StripSeparator(module->version()).c_str(), - kOutputSeparator, - StripSeparator(PathnameStripper::File(module->debug_file())).c_str(), - kOutputSeparator, - StripSeparator(module->debug_identifier()).c_str(), - kOutputSeparator, base_address, - kOutputSeparator, base_address + module->size() - 1, - kOutputSeparator, - main_module != NULL && base_address == main_address ? 1 : 0); - } -} - -static void PrintProcessState(const ProcessState& process_state) { - // Print OS and CPU information. - string cpu = process_state.system_info()->cpu; - string cpu_info = process_state.system_info()->cpu_info; - printf("Operating system: %s\n", process_state.system_info()->os.c_str()); - printf(" %s\n", - process_state.system_info()->os_version.c_str()); - printf("CPU: %s\n", cpu.c_str()); - if (!cpu_info.empty()) { - // This field is optional. - printf(" %s\n", cpu_info.c_str()); - } - printf(" %d CPU%s\n", - process_state.system_info()->cpu_count, - process_state.system_info()->cpu_count != 1 ? "s" : ""); - printf("\n"); - - // Print crash information. - if (process_state.crashed()) { - printf("Crash reason: %s\n", process_state.crash_reason().c_str()); - printf("Crash address: 0x%" PRIx64 "\n", process_state.crash_address()); - } else { - printf("No crash\n"); - } - - string assertion = process_state.assertion(); - if (!assertion.empty()) { - printf("Assertion: %s\n", assertion.c_str()); - } - - // If the thread that requested the dump is known, print it first. - int requesting_thread = process_state.requesting_thread(); - if (requesting_thread != -1) { - printf("\n"); - printf("Thread %d (%s)\n", - requesting_thread, - process_state.crashed() ? "crashed" : - "requested dump, did not crash"); - PrintStack(process_state.threads()->at(requesting_thread), cpu); - } - - // Print all of the threads in the dump. - int thread_count = process_state.threads()->size(); - for (int thread_index = 0; thread_index < thread_count; ++thread_index) { - if (thread_index != requesting_thread) { - // Don't print the crash thread again, it was already printed. - printf("\n"); - printf("Thread %d\n", thread_index); - PrintStack(process_state.threads()->at(thread_index), cpu); - } - } - - PrintModules(process_state.modules(), - process_state.modules_without_symbols()); -} - -static void PrintProcessStateMachineReadable(const ProcessState& process_state) -{ - // Print OS and CPU information. - // OS|{OS Name}|{OS Version} - // CPU|{CPU Name}|{CPU Info}|{Number of CPUs} - printf("OS%c%s%c%s\n", kOutputSeparator, - StripSeparator(process_state.system_info()->os).c_str(), - kOutputSeparator, - StripSeparator(process_state.system_info()->os_version).c_str()); - printf("CPU%c%s%c%s%c%d\n", kOutputSeparator, - StripSeparator(process_state.system_info()->cpu).c_str(), - kOutputSeparator, - // this may be empty - StripSeparator(process_state.system_info()->cpu_info).c_str(), - kOutputSeparator, - process_state.system_info()->cpu_count); - - int requesting_thread = process_state.requesting_thread(); - - // Print crash information. - // Crash|{Crash Reason}|{Crash Address}|{Crashed Thread} - printf("Crash%c", kOutputSeparator); - if (process_state.crashed()) { - printf("%s%c0x%" PRIx64 "%c", - StripSeparator(process_state.crash_reason()).c_str(), - kOutputSeparator, process_state.crash_address(), kOutputSeparator); - } else { - // print assertion info, if available, in place of crash reason, - // instead of the unhelpful "No crash" - string assertion = process_state.assertion(); - if (!assertion.empty()) { - printf("%s%c%c", StripSeparator(assertion).c_str(), - kOutputSeparator, kOutputSeparator); - } else { - printf("No crash%c%c", kOutputSeparator, kOutputSeparator); - } - } - - if (requesting_thread != -1) { - printf("%d\n", requesting_thread); - } else { - printf("\n"); - } - - PrintModulesMachineReadable(process_state.modules()); - - // blank line to indicate start of threads - printf("\n"); - - // If the thread that requested the dump is known, print it first. - if (requesting_thread != -1) { - PrintStackMachineReadable(requesting_thread, - process_state.threads()->at(requesting_thread)); - } - - // Print all of the threads in the dump. - int thread_count = process_state.threads()->size(); - for (int thread_index = 0; thread_index < thread_count; ++thread_index) { - if (thread_index != requesting_thread) { - // Don't print the crash thread again, it was already printed. - PrintStackMachineReadable(thread_index, - process_state.threads()->at(thread_index)); - } - } -} +using google_breakpad::scoped_ptr; // Processes |minidump_file| using MinidumpProcessor. |symbol_path|, if // non-empty, is the base directory of a symbol storage area, laid out in @@ -567,9 +68,10 @@ static void PrintProcessStateMachineReadable(const ProcessState& process_state) // information if the minidump was produced as a result of a crash, and // call stacks for each thread contained in the minidump. All information // is printed to stdout. -static bool PrintMinidumpProcess(const string &minidump_file, - const vector &symbol_paths, - bool machine_readable) { +bool PrintMinidumpProcess(const string &minidump_file, + const std::vector &symbol_paths, + bool machine_readable, + bool output_stack_contents) { scoped_ptr symbol_supplier; if (!symbol_paths.empty()) { // TODO(mmentovai): check existence of symbol_path if specified? @@ -580,8 +82,13 @@ static bool PrintMinidumpProcess(const string &minidump_file, MinidumpProcessor minidump_processor(symbol_supplier.get(), &resolver); // Process the minidump. + Minidump dump(minidump_file); + if (!dump.Read()) { + BPLOG(ERROR) << "Minidump " << dump.path() << " could not be read"; + return false; + } ProcessState process_state; - if (minidump_processor.Process(minidump_file, &process_state) != + if (minidump_processor.Process(&dump, &process_state) != google_breakpad::PROCESS_OK) { BPLOG(ERROR) << "MinidumpProcessor::Process failed"; return false; @@ -590,20 +97,21 @@ static bool PrintMinidumpProcess(const string &minidump_file, if (machine_readable) { PrintProcessStateMachineReadable(process_state); } else { - PrintProcessState(process_state); + PrintProcessState(process_state, output_stack_contents, &resolver); } return true; } -} // namespace - -static void usage(const char *program_name) { - fprintf(stderr, "usage: %s [-m] [symbol-path ...]\n" - " -m : Output in machine-readable format\n", +void usage(const char *program_name) { + fprintf(stderr, "usage: %s [-m|-s] [symbol-path ...]\n" + " -m : Output in machine-readable format\n" + " -s : Output stack contents\n", program_name); } +} // namespace + int main(int argc, char **argv) { BPLOG_INIT(&argc, &argv); @@ -613,7 +121,8 @@ int main(int argc, char **argv) { } const char *minidump_file; - bool machine_readable; + bool machine_readable = false; + bool output_stack_contents = false; int symbol_path_arg; if (strcmp(argv[1], "-m") == 0) { @@ -625,8 +134,16 @@ int main(int argc, char **argv) { machine_readable = true; minidump_file = argv[2]; symbol_path_arg = 3; + } else if (strcmp(argv[1], "-s") == 0) { + if (argc < 3) { + usage(argv[0]); + return 1; + } + + output_stack_contents = true; + minidump_file = argv[2]; + symbol_path_arg = 3; } else { - machine_readable = false; minidump_file = argv[1]; symbol_path_arg = 2; } @@ -640,5 +157,6 @@ int main(int argc, char **argv) { return PrintMinidumpProcess(minidump_file, symbol_paths, - machine_readable) ? 0 : 1; + machine_readable, + output_stack_contents) ? 0 : 1; } diff --git a/toolkit/crashreporter/google-breakpad/src/processor/minidump_unittest.cc b/toolkit/crashreporter/google-breakpad/src/processor/minidump_unittest.cc index d16bbc6214b9..bb7dac642c80 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/minidump_unittest.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/minidump_unittest.cc @@ -1150,4 +1150,117 @@ TEST(Dump, OneExceptionARMOldFlags) { EXPECT_EQ(0x2e951ef7U, raw_context.cpsr); } +TEST(Dump, OneExceptionMIPS) { + Dump dump(0, kLittleEndian); + + MDRawContextMIPS raw_context; + raw_context.context_flags = MD_CONTEXT_MIPS_INTEGER; + raw_context.iregs[0] = 0x3ecba80d; + raw_context.iregs[1] = 0x382583b9; + raw_context.iregs[2] = 0x7fccc03f; + raw_context.iregs[3] = 0xf62f8ec2; + raw_context.iregs[4] = 0x46a6a6a8; + raw_context.iregs[5] = 0x6a5025e2; + raw_context.iregs[6] = 0xd9fabb4a; + raw_context.iregs[7] = 0x6913f540; + raw_context.iregs[8] = 0xbffe6eda; + raw_context.iregs[9] = 0xb2ce1e2d; + raw_context.iregs[10] = 0x659caaa4; + raw_context.iregs[11] = 0xf0e0d0c0; + raw_context.iregs[12] = 0xa9b8c7d6; + raw_context.iregs[13] = 0x12345678; + raw_context.iregs[14] = 0xabcd1234; + raw_context.iregs[15] = 0x10203040; + raw_context.iregs[16] = 0xa80d3ecb; + raw_context.iregs[17] = 0x83b93825; + raw_context.iregs[18] = 0xc03f7fcc; + raw_context.iregs[19] = 0x8ec2f62f; + raw_context.iregs[20] = 0xa6a846a6; + raw_context.iregs[21] = 0x25e26a50; + raw_context.iregs[22] = 0xbb4ad9fa; + raw_context.iregs[23] = 0xf5406913; + raw_context.iregs[24] = 0x6edabffe; + raw_context.iregs[25] = 0x1e2db2ce; + raw_context.iregs[26] = 0xaaa4659c; + raw_context.iregs[27] = 0xd0c0f0e0; + raw_context.iregs[28] = 0xc7d6a9b8; + raw_context.iregs[29] = 0x56781234; + raw_context.iregs[30] = 0x1234abcd; + raw_context.iregs[31] = 0x30401020; + + Context context(dump, raw_context); + + Exception exception(dump, context, + 0x1234abcd, // Thread id. + 0xdcba4321, // Exception code. + 0xf0e0d0c0, // Exception flags. + 0x0919a9b9); // Exception address. + + dump.Add(&context); + dump.Add(&exception); + dump.Finish(); + + string contents; + ASSERT_TRUE(dump.GetContents(&contents)); + + istringstream minidump_stream(contents); + Minidump minidump(minidump_stream); + ASSERT_TRUE(minidump.Read()); + ASSERT_EQ(1U, minidump.GetDirectoryEntryCount()); + + MinidumpException *md_exception = minidump.GetException(); + ASSERT_TRUE(md_exception != NULL); + + uint32_t thread_id; + ASSERT_TRUE(md_exception->GetThreadID(&thread_id)); + ASSERT_EQ(0x1234abcdU, thread_id); + + const MDRawExceptionStream* raw_exception = md_exception->exception(); + ASSERT_TRUE(raw_exception != NULL); + EXPECT_EQ(0xdcba4321, raw_exception->exception_record.exception_code); + EXPECT_EQ(0xf0e0d0c0, raw_exception->exception_record.exception_flags); + EXPECT_EQ(0x0919a9b9U, + raw_exception->exception_record.exception_address); + + MinidumpContext* md_context = md_exception->GetContext(); + ASSERT_TRUE(md_context != NULL); + ASSERT_EQ((uint32_t) MD_CONTEXT_MIPS, md_context->GetContextCPU()); + const MDRawContextMIPS* md_raw_context = md_context->GetContextMIPS(); + ASSERT_TRUE(md_raw_context != NULL); + ASSERT_EQ((uint32_t) MD_CONTEXT_MIPS_INTEGER, + (md_raw_context->context_flags & MD_CONTEXT_MIPS_INTEGER)); + EXPECT_EQ(0x3ecba80dU, raw_context.iregs[0]); + EXPECT_EQ(0x382583b9U, raw_context.iregs[1]); + EXPECT_EQ(0x7fccc03fU, raw_context.iregs[2]); + EXPECT_EQ(0xf62f8ec2U, raw_context.iregs[3]); + EXPECT_EQ(0x46a6a6a8U, raw_context.iregs[4]); + EXPECT_EQ(0x6a5025e2U, raw_context.iregs[5]); + EXPECT_EQ(0xd9fabb4aU, raw_context.iregs[6]); + EXPECT_EQ(0x6913f540U, raw_context.iregs[7]); + EXPECT_EQ(0xbffe6edaU, raw_context.iregs[8]); + EXPECT_EQ(0xb2ce1e2dU, raw_context.iregs[9]); + EXPECT_EQ(0x659caaa4U, raw_context.iregs[10]); + EXPECT_EQ(0xf0e0d0c0U, raw_context.iregs[11]); + EXPECT_EQ(0xa9b8c7d6U, raw_context.iregs[12]); + EXPECT_EQ(0x12345678U, raw_context.iregs[13]); + EXPECT_EQ(0xabcd1234U, raw_context.iregs[14]); + EXPECT_EQ(0x10203040U, raw_context.iregs[15]); + EXPECT_EQ(0xa80d3ecbU, raw_context.iregs[16]); + EXPECT_EQ(0x83b93825U, raw_context.iregs[17]); + EXPECT_EQ(0xc03f7fccU, raw_context.iregs[18]); + EXPECT_EQ(0x8ec2f62fU, raw_context.iregs[19]); + EXPECT_EQ(0xa6a846a6U, raw_context.iregs[20]); + EXPECT_EQ(0x25e26a50U, raw_context.iregs[21]); + EXPECT_EQ(0xbb4ad9faU, raw_context.iregs[22]); + EXPECT_EQ(0xf5406913U, raw_context.iregs[23]); + EXPECT_EQ(0x6edabffeU, raw_context.iregs[24]); + EXPECT_EQ(0x1e2db2ceU, raw_context.iregs[25]); + EXPECT_EQ(0xaaa4659cU, raw_context.iregs[26]); + EXPECT_EQ(0xd0c0f0e0U, raw_context.iregs[27]); + EXPECT_EQ(0xc7d6a9b8U, raw_context.iregs[28]); + EXPECT_EQ(0x56781234U, raw_context.iregs[29]); + EXPECT_EQ(0x1234abcdU, raw_context.iregs[30]); + EXPECT_EQ(0x30401020U, raw_context.iregs[31]); +} + } // namespace diff --git a/toolkit/crashreporter/google-breakpad/src/processor/module_comparer.cc b/toolkit/crashreporter/google-breakpad/src/processor/module_comparer.cc index ba561eeaa1c2..025ab883a30f 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/module_comparer.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/module_comparer.cc @@ -58,8 +58,10 @@ bool ModuleComparer::Compare(const string &symbol_data) { // Load symbol data into basic_module scoped_array buffer(new char[symbol_data.size() + 1]); - strcpy(buffer.get(), symbol_data.c_str()); - ASSERT_TRUE(basic_module->LoadMapFromMemory(buffer.get())); + memcpy(buffer.get(), symbol_data.c_str(), symbol_data.size()); + buffer.get()[symbol_data.size()] = '\0'; + ASSERT_TRUE(basic_module->LoadMapFromMemory(buffer.get(), + symbol_data.size() + 1)); buffer.reset(); // Serialize BasicSourceLineResolver::Module. @@ -70,7 +72,9 @@ bool ModuleComparer::Compare(const string &symbol_data) { BPLOG(INFO) << "Serialized size = " << serialized_size << " Bytes"; // Load FastSourceLineResolver::Module using serialized data. - ASSERT_TRUE(fast_module->LoadMapFromMemory(serialized_data.get())); + ASSERT_TRUE(fast_module->LoadMapFromMemory(serialized_data.get(), + serialized_size)); + ASSERT_TRUE(fast_module->IsCorrupt() == basic_module->IsCorrupt()); // Compare FastSourceLineResolver::Module with // BasicSourceLineResolver::Module. diff --git a/toolkit/crashreporter/google-breakpad/src/processor/module_serializer.cc b/toolkit/crashreporter/google-breakpad/src/processor/module_serializer.cc index cf64a7ef8f95..6ac60c1fcf73 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/module_serializer.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/module_serializer.cc @@ -51,6 +51,9 @@ SimpleSerializer::range_map_serializer_; size_t ModuleSerializer::SizeOf(const BasicSourceLineResolver::Module &module) { size_t total_size_alloc_ = 0; + // Size of the "is_corrupt" flag. + total_size_alloc_ += SimpleSerializer::SizeOf(module.is_corrupt_); + // Compute memory size for each map component in Module class. int map_index = 0; map_sizes_[map_index++] = files_serializer_.SizeOf(module.files_); @@ -65,19 +68,22 @@ size_t ModuleSerializer::SizeOf(const BasicSourceLineResolver::Module &module) { module.cfi_delta_rules_); // Header size. - total_size_alloc_ = kNumberMaps_ * sizeof(uint32_t); + total_size_alloc_ += kNumberMaps_ * sizeof(uint32_t); - for (int i = 0; i < kNumberMaps_; ++i) - total_size_alloc_ += map_sizes_[i]; + for (int i = 0; i < kNumberMaps_; ++i) { + total_size_alloc_ += map_sizes_[i]; + } // Extra one byte for null terminator for C-string copy safety. - ++total_size_alloc_; + total_size_alloc_ += SimpleSerializer::SizeOf(0); return total_size_alloc_; } char *ModuleSerializer::Write(const BasicSourceLineResolver::Module &module, char *dest) { + // Write the is_corrupt flag. + dest = SimpleSerializer::Write(module.is_corrupt_, dest); // Write header. memcpy(dest, map_sizes_, kNumberMaps_ * sizeof(uint32_t)); dest += kNumberMaps_ * sizeof(uint32_t); @@ -189,8 +195,9 @@ char* ModuleSerializer::SerializeSymbolFileData( scoped_ptr module( new BasicSourceLineResolver::Module("no name")); scoped_array buffer(new char[symbol_data.size() + 1]); - strcpy(buffer.get(), symbol_data.c_str()); - if (!module->LoadMapFromMemory(buffer.get())) { + memcpy(buffer.get(), symbol_data.c_str(), symbol_data.size()); + buffer.get()[symbol_data.size()] = '\0'; + if (!module->LoadMapFromMemory(buffer.get(), symbol_data.size() + 1)) { return NULL; } buffer.reset(NULL); diff --git a/toolkit/crashreporter/google-breakpad/src/processor/moz.build b/toolkit/crashreporter/google-breakpad/src/processor/moz.build index 6231737ca48e..731fea035625 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/moz.build +++ b/toolkit/crashreporter/google-breakpad/src/processor/moz.build @@ -29,8 +29,6 @@ FINAL_LIBRARY = 'xul' DEFINES['BP_LOGGING_INCLUDE'] = '"BreakpadLogging.h"' LOCAL_INCLUDES += [ - '..', - '../..', '../../../breakpad-logging', ] diff --git a/toolkit/crashreporter/google-breakpad/src/common/pathname_stripper.cc b/toolkit/crashreporter/google-breakpad/src/processor/pathname_stripper.cc similarity index 98% rename from toolkit/crashreporter/google-breakpad/src/common/pathname_stripper.cc rename to toolkit/crashreporter/google-breakpad/src/processor/pathname_stripper.cc index 3bea16472257..839287bdba8e 100644 --- a/toolkit/crashreporter/google-breakpad/src/common/pathname_stripper.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/pathname_stripper.cc @@ -33,7 +33,7 @@ // // Author: Mark Mentovai -#include "common/pathname_stripper.h" +#include "processor/pathname_stripper.h" namespace google_breakpad { diff --git a/toolkit/crashreporter/google-breakpad/src/common/pathname_stripper.h b/toolkit/crashreporter/google-breakpad/src/processor/pathname_stripper.h similarity index 100% rename from toolkit/crashreporter/google-breakpad/src/common/pathname_stripper.h rename to toolkit/crashreporter/google-breakpad/src/processor/pathname_stripper.h diff --git a/toolkit/crashreporter/google-breakpad/src/common/pathname_stripper_unittest.cc b/toolkit/crashreporter/google-breakpad/src/processor/pathname_stripper_unittest.cc similarity index 100% rename from toolkit/crashreporter/google-breakpad/src/common/pathname_stripper_unittest.cc rename to toolkit/crashreporter/google-breakpad/src/processor/pathname_stripper_unittest.cc diff --git a/toolkit/crashreporter/google-breakpad/src/processor/postfix_evaluator-inl.h b/toolkit/crashreporter/google-breakpad/src/processor/postfix_evaluator-inl.h index 30109204f79c..d7dbeac20516 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/postfix_evaluator-inl.h +++ b/toolkit/crashreporter/google-breakpad/src/processor/postfix_evaluator-inl.h @@ -46,7 +46,7 @@ #include #include "google_breakpad/processor/memory_region.h" -#include "common/logging.h" +#include "processor/logging.h" namespace google_breakpad { @@ -56,15 +56,13 @@ using std::ostringstream; // A small class used in Evaluate to make sure to clean up the stack // before returning failure. -template class AutoStackClearer { public: - explicit AutoStackClearer(vector > *stack) - : stack_(stack) {} + explicit AutoStackClearer(vector *stack) : stack_(stack) {} ~AutoStackClearer() { stack_->clear(); } private: - vector > *stack_; + vector *stack_; }; @@ -152,7 +150,7 @@ bool PostfixEvaluator::EvaluateToken( ValueType address; if (!PopValue(&address)) { - BPLOG(ERROR) << "Could not PopValue to get value to dereference: " << + BPLOG(ERROR) << "Could not PopValue to get value to derefence: " << expression; return false; } @@ -177,47 +175,28 @@ bool PostfixEvaluator::EvaluateToken( // Assignment is only meaningful when assigning into an identifier. // The identifier must name a variable, not a constant. Variables // begin with '$'. - const UniqueString* identifier; + string identifier; if (PopValueOrIdentifier(NULL, &identifier) != POP_RESULT_IDENTIFIER) { BPLOG(ERROR) << "PopValueOrIdentifier returned a value, but an " "identifier is needed to assign " << HexString(value) << ": " << expression; return false; } - if (identifier == ustr__empty() || Index(identifier,0) != '$') { + if (identifier.empty() || identifier[0] != '$') { BPLOG(ERROR) << "Can't assign " << HexString(value) << " to " << identifier << ": " << expression; return false; } - dictionary_->set(identifier, value); + (*dictionary_)[identifier] = value; if (assigned) - assigned->set(identifier, true); + (*assigned)[identifier] = true; } else { - // Push it onto the stack as-is, but first convert it either to a - // ValueType (if a literal) or to a UniqueString* (if an identifier). - // - // First, try to treat the value as a literal. Literals may have leading - // '-' sign, and the entire remaining string must be parseable as - // ValueType. If this isn't possible, it can't be a literal, so treat it - // as an identifier instead. - // - // 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). Since we require it, we - // handle it explicitly here. - istringstream token_stream(token); - ValueType literal = ValueType(); - bool negative = false; - if (token_stream.peek() == '-') { - negative = true; - token_stream.get(); - } - if (token_stream >> literal && token_stream.peek() == EOF) { - PushValue(negative ? (-literal) : literal); - } else { - PushIdentifier(ToUniqueString(token)); - } + // The token is not an operator, it's a literal value or an identifier. + // Push it onto the stack as-is. Use push_back instead of PushValue + // because PushValue pushes ValueType as a string, but token is already + // a string. + stack_.push_back(token); } return true; } @@ -252,19 +231,12 @@ bool PostfixEvaluator::EvaluateInternal( } template -bool PostfixEvaluator::Evaluate(const Module::Expr& expr, - DictionaryValidityType* assigned) { - // The expression is being exevaluated only for its side effects. Skip - // expressions that denote values only. - if (expr.how_ != Module::kExprPostfix) { - BPLOG(ERROR) << "Can't evaluate for side-effects: " << expr; - return false; - } - +bool PostfixEvaluator::Evaluate(const string &expression, + DictionaryValidityType *assigned) { // Ensure that the stack is cleared before returning. - AutoStackClearer clearer(&stack_); + AutoStackClearer clearer(&stack_); - if (!EvaluateInternal(expr.postfix_, assigned)) + if (!EvaluateInternal(expression, assigned)) return false; // If there's anything left on the stack, it indicates incomplete execution. @@ -273,93 +245,69 @@ bool PostfixEvaluator::Evaluate(const Module::Expr& expr, if (stack_.empty()) return true; - BPLOG(ERROR) << "Incomplete execution: " << expr; + BPLOG(ERROR) << "Incomplete execution: " << expression; return false; } template -bool PostfixEvaluator::EvaluateForValue(const Module::Expr& expr, - ValueType* result) { - switch (expr.how_) { +bool PostfixEvaluator::EvaluateForValue(const string &expression, + ValueType *result) { + // Ensure that the stack is cleared before returning. + AutoStackClearer clearer(&stack_); - // Postfix expression. Give to the evaluator and return the - // one-and-only stack element that should be left over. - case Module::kExprPostfix: { - // Ensure that the stack is cleared before returning. - AutoStackClearer clearer(&stack_); + if (!EvaluateInternal(expression, NULL)) + return false; - if (!EvaluateInternal(expr.postfix_, NULL)) - return false; - - // A successful execution should leave exactly one value on the stack. - if (stack_.size() != 1) { - BPLOG(ERROR) << "Expression yielded bad number of results: " - << "'" << expr << "'"; - return false; - } - - return PopValue(result); - } - - // Simple-form expressions - case Module::kExprSimple: - case Module::kExprSimpleMem: { - // Look up the base value - bool found = false; - ValueType v = dictionary_->get(&found, expr.ident_); - if (!found) { - // The identifier wasn't found in the dictionary. Don't imply any - // default value, just fail. - static uint64_t n_complaints = 0; // This isn't threadsafe. - n_complaints++; - if (is_power_of_2(n_complaints)) { - BPLOG(INFO) << "Identifier " << FromUniqueString(expr.ident_) - << " not in dictionary (kExprSimple{Mem})" - << " (shown " << n_complaints << " times)"; - } - return false; - } - - // Form the sum - ValueType sum = v + (int64_t)expr.offset_; - - // and dereference if necessary - if (expr.how_ == Module::kExprSimpleMem) { - ValueType derefd; - if (!memory_ || !memory_->GetMemoryAtAddress(sum, &derefd)) { - return false; - } - *result = derefd; - } else { - *result = sum; - } - return true; - } - - default: - return false; + // A successful execution should leave exactly one value on the stack. + if (stack_.size() != 1) { + BPLOG(ERROR) << "Expression yielded bad number of results: " + << "'" << expression << "'"; + return false; } -} + return PopValue(result); +} template typename PostfixEvaluator::PopResult PostfixEvaluator::PopValueOrIdentifier( - ValueType *value, const UniqueString** identifier) { + ValueType *value, string *identifier) { // There needs to be at least one element on the stack to pop. if (!stack_.size()) return POP_RESULT_FAIL; - StackElem el = stack_.back(); + string token = stack_.back(); stack_.pop_back(); - if (el.isValue) { - if (value) - *value = el.u.val; + // First, try to treat the value as a literal. Literals may have leading + // '-' sign, and the entire remaining string must be parseable as + // ValueType. If this isn't possible, it can't be a literal, so treat it + // as an identifier instead. + // + // 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). Since we require it, we + // handle it explicitly here. + istringstream token_stream(token); + ValueType literal = ValueType(); + bool negative; + if (token_stream.peek() == '-') { + negative = true; + token_stream.get(); + } else { + negative = false; + } + if (token_stream >> literal && token_stream.peek() == EOF) { + if (value) { + *value = literal; + } + if (negative) + *value = -*value; return POP_RESULT_VALUE; } else { - if (identifier) - *identifier = el.u.ustr; + if (identifier) { + *identifier = token; + } return POP_RESULT_IDENTIFIER; } } @@ -368,7 +316,7 @@ PostfixEvaluator::PopValueOrIdentifier( template bool PostfixEvaluator::PopValue(ValueType *value) { ValueType literal = ValueType(); - const UniqueString* token; + string token; PopResult result; if ((result = PopValueOrIdentifier(&literal, &token)) == POP_RESULT_FAIL) { return false; @@ -378,17 +326,16 @@ bool PostfixEvaluator::PopValue(ValueType *value) { } else { // result == POP_RESULT_IDENTIFIER // There was an identifier at the top of the stack. Resolve it to a // value by looking it up in the dictionary. - bool found = false; - ValueType v = dictionary_->get(&found, token); - if (!found) { + typename DictionaryType::const_iterator iterator = + dictionary_->find(token); + if (iterator == dictionary_->end()) { // The identifier wasn't found in the dictionary. Don't imply any // default value, just fail. - BPLOG(INFO) << "Identifier " << FromUniqueString(token) - << " not in dictionary"; + BPLOG(INFO) << "Identifier " << token << " not in dictionary"; return false; } - *value = v; + *value = iterator->second; } return true; @@ -404,14 +351,9 @@ bool PostfixEvaluator::PopValues(ValueType *value1, template void PostfixEvaluator::PushValue(const ValueType &value) { - StackElem el(value); - stack_.push_back(el); -} - -template -void PostfixEvaluator::PushIdentifier(const UniqueString* str) { - StackElem el(str); - stack_.push_back(el); + ostringstream token_stream; + token_stream << value; + stack_.push_back(token_stream.str()); } diff --git a/toolkit/crashreporter/google-breakpad/src/processor/postfix_evaluator.h b/toolkit/crashreporter/google-breakpad/src/processor/postfix_evaluator.h index dfa611744a3c..94b66190d5dc 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/postfix_evaluator.h +++ b/toolkit/crashreporter/google-breakpad/src/processor/postfix_evaluator.h @@ -75,8 +75,6 @@ #include #include "common/using_std_string.h" -#include "common/unique_string.h" -#include "common/module.h" namespace google_breakpad { @@ -85,21 +83,11 @@ using std::vector; class MemoryRegion; -// A union type for elements in the postfix evaluator's stack. -template -class StackElem { - public: - StackElem(ValueType val) { isValue = true; u.val = val; } - StackElem(const UniqueString* ustr) { isValue = false; u.ustr = ustr; } - bool isValue; - union { ValueType val; const UniqueString* ustr; } u; -}; - template class PostfixEvaluator { public: - typedef UniqueStringMap DictionaryType; - typedef UniqueStringMap DictionaryValidityType; + typedef map DictionaryType; + typedef map DictionaryValidityType; // Create a PostfixEvaluator object that may be used (with Evaluate) on // one or more expressions. PostfixEvaluator does not take ownership of @@ -117,13 +105,13 @@ class PostfixEvaluator { // non-NULL, any keys set in the dictionary as a result of evaluation // will also be set to true in assigned, providing a way to determine if // an expression modifies any of its input variables. - bool Evaluate(const Module::Expr &expr, DictionaryValidityType *assigned); + bool Evaluate(const string &expression, DictionaryValidityType *assigned); - // Like Evaluate, but expects the expression to denote a value. - // If evaluation succeeds and (in the case of a postfix expression) - // leaves exactly one value on the stack, pop that value, store it in - // *result, and return true. Otherwise, return false. - bool EvaluateForValue(const Module::Expr& expression, ValueType* result); + // Like Evaluate, but provides the value left on the stack to the + // caller. If evaluation succeeds and leaves exactly one value on + // the stack, pop that value, store it in *result, and return true. + // Otherwise, return false. + bool EvaluateForValue(const string &expression, ValueType *result); DictionaryType* dictionary() const { return dictionary_; } @@ -144,8 +132,7 @@ class PostfixEvaluator { // if the topmost entry is a constant or variable identifier, and sets // |identifier| accordingly. Returns POP_RESULT_FAIL on failure, such // as when the stack is empty. - PopResult PopValueOrIdentifier(ValueType *value, - const UniqueString** identifier); + PopResult PopValueOrIdentifier(ValueType *value, string *identifier); // Retrieves the topmost value on the stack. If the topmost entry is // an identifier, the dictionary is queried for the identifier's value. @@ -153,9 +140,6 @@ class PostfixEvaluator { // a nonexistent identifier is named. bool PopValue(ValueType *value); - // Pushes a UniqueString* on the stack. - void PushIdentifier(const UniqueString* ustr); - // Retrieves the top two values on the stack, in the style of PopValue. // value2 is popped before value1, so that value1 corresponds to the // entry that was pushed prior to value2. Returns false on failure. @@ -186,7 +170,7 @@ class PostfixEvaluator { // The stack contains state information as execution progresses. Values // are pushed on to it as the expression string is read and as operations // yield values; values are popped when used as operands to operators. - vector > stack_; + vector stack_; }; } // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/processor/postfix_evaluator_unittest.cc b/toolkit/crashreporter/google-breakpad/src/processor/postfix_evaluator_unittest.cc index 06c981244748..f1189828499a 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/postfix_evaluator_unittest.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/postfix_evaluator_unittest.cc @@ -31,6 +31,7 @@ // // Author: Mark Mentovai +#include #include #include @@ -48,22 +49,8 @@ namespace { using std::map; -using google_breakpad::FromUniqueString; using google_breakpad::MemoryRegion; using google_breakpad::PostfixEvaluator; -using google_breakpad::ToUniqueString; -using google_breakpad::UniqueString; -using google_breakpad::ustr__ZDcbParams; -using google_breakpad::ustr__ZDcbSavedRegs; -using google_breakpad::ustr__ZDcfa; -using google_breakpad::ustr__ZDra; -using google_breakpad::ustr__ZDraSearchStart; -using google_breakpad::ustr__ZSebx; -using google_breakpad::ustr__ZSebp; -using google_breakpad::ustr__ZSedi; -using google_breakpad::ustr__ZSeip; -using google_breakpad::ustr__ZSesi; -using google_breakpad::ustr__ZSesp; // FakeMemoryRegion is used to test PostfixEvaluator's dereference (^) @@ -89,6 +76,9 @@ class FakeMemoryRegion : public MemoryRegion { *value = address + 1; return true; } + virtual void Print() const { + assert(false); + } }; @@ -114,7 +104,7 @@ struct EvaluateTestSet { // Identifiers and their expected values upon completion of the Evaluate // tests in the set. - map *validate_data; + map *validate_data; }; @@ -166,29 +156,29 @@ static bool RunTests() { { "$rAlign 36 8 @ =", true }, // $rAlign = 36 @ 8 { "$rAdd3 2 2 + =$rMul2 9 6 * =", true } // smashed-equals tokenization }; - map validate_data_0; - validate_data_0[ToUniqueString("$rAdd")] = 8; - validate_data_0[ToUniqueString("$rAdd2")] = 4; - validate_data_0[ToUniqueString("$rSub")] = 3; - validate_data_0[ToUniqueString("$rMul")] = 54; - validate_data_0[ToUniqueString("$rDivQ")] = 1; - validate_data_0[ToUniqueString("$rDivM")] = 3; - validate_data_0[ToUniqueString("$rDeref")] = 10; - validate_data_0[ToUniqueString("$rAlign")] = 32; - validate_data_0[ToUniqueString("$rAdd3")] = 4; - validate_data_0[ToUniqueString("$rMul2")] = 54; + map validate_data_0; + validate_data_0["$rAdd"] = 8; + validate_data_0["$rAdd2"] = 4; + validate_data_0["$rSub"] = 3; + validate_data_0["$rMul"] = 54; + validate_data_0["$rDivQ"] = 1; + validate_data_0["$rDivM"] = 3; + validate_data_0["$rDeref"] = 10; + validate_data_0["$rAlign"] = 32; + validate_data_0["$rAdd3"] = 4; + validate_data_0["$rMul2"] = 54; // The second test set simulates a couple of MSVC program strings. // The data is fudged a little bit because the tests use FakeMemoryRegion // instead of a real stack snapshot, but the program strings are real and // the implementation doesn't know or care that the data is not real. PostfixEvaluator::DictionaryType dictionary_1; - dictionary_1.set(ustr__ZSebp(), 0xbfff0010); - dictionary_1.set(ustr__ZSeip(), 0x10000000); - dictionary_1.set(ustr__ZSesp(), 0xbfff0000); - dictionary_1.set(ustr__ZDcbSavedRegs(), 4); - dictionary_1.set(ustr__ZDcbParams(), 4); - dictionary_1.set(ustr__ZDraSearchStart(), 0xbfff0020); + dictionary_1["$ebp"] = 0xbfff0010; + dictionary_1["$eip"] = 0x10000000; + dictionary_1["$esp"] = 0xbfff0000; + dictionary_1[".cbSavedRegs"] = 4; + dictionary_1[".cbParams"] = 4; + dictionary_1[".raSearchStart"] = 0xbfff0020; const EvaluateTest evaluate_tests_1[] = { { "$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = " "$L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =", true }, @@ -207,18 +197,18 @@ static bool RunTests() { "$ebx $T0 28 - ^ =", true } }; - map validate_data_1; - validate_data_1[ToUniqueString("$T0")] = 0xbfff0012; - validate_data_1[ToUniqueString("$T1")] = 0xbfff0020; - validate_data_1[ToUniqueString("$T2")] = 0xbfff0019; - validate_data_1[ustr__ZSeip()] = 0xbfff0021; - validate_data_1[ustr__ZSebp()] = 0xbfff0012; - validate_data_1[ustr__ZSesp()] = 0xbfff0024; - validate_data_1[ToUniqueString("$L")] = 0xbfff000e; - validate_data_1[ToUniqueString("$P")] = 0xbfff0028; - validate_data_1[ustr__ZSebx()] = 0xbffefff7; - validate_data_1[ustr__ZDcbSavedRegs()] = 4; - validate_data_1[ustr__ZDcbParams()] = 4; + map validate_data_1; + validate_data_1["$T0"] = 0xbfff0012; + validate_data_1["$T1"] = 0xbfff0020; + validate_data_1["$T2"] = 0xbfff0019; + validate_data_1["$eip"] = 0xbfff0021; + validate_data_1["$ebp"] = 0xbfff0012; + validate_data_1["$esp"] = 0xbfff0024; + validate_data_1["$L"] = 0xbfff000e; + validate_data_1["$P"] = 0xbfff0028; + validate_data_1["$ebx"] = 0xbffefff7; + validate_data_1[".cbSavedRegs"] = 4; + validate_data_1[".cbParams"] = 4; EvaluateTestSet evaluate_test_sets[] = { { &dictionary_0, evaluate_tests_0, @@ -270,50 +260,52 @@ static bool RunTests() { } // Validate the results. - for (map::const_iterator - validate_iterator = + for (map::const_iterator validate_iterator = evaluate_test_set->validate_data->begin(); validate_iterator != evaluate_test_set->validate_data->end(); ++validate_iterator) { - const UniqueString* identifier = validate_iterator->first; + const string identifier = validate_iterator->first; unsigned int expected_value = validate_iterator->second; + map::const_iterator dictionary_iterator = + evaluate_test_set->dictionary->find(identifier); + // The identifier must exist in the dictionary. - if (!evaluate_test_set->dictionary->have(identifier)) { + if (dictionary_iterator == evaluate_test_set->dictionary->end()) { fprintf(stderr, "FAIL: evaluate test set %d/%d, " "validate identifier \"%s\", " "expected %d, observed not found\n", evaluate_test_set_index, evaluate_test_set_count, - FromUniqueString(identifier), expected_value); + identifier.c_str(), expected_value); return false; } // The value in the dictionary must be the same as the expected value. - unsigned int observed_value = - evaluate_test_set->dictionary->get(identifier); + unsigned int observed_value = dictionary_iterator->second; if (expected_value != observed_value) { fprintf(stderr, "FAIL: evaluate test set %d/%d, " "validate identifier \"%s\", " "expected %d, observed %d\n", evaluate_test_set_index, evaluate_test_set_count, - FromUniqueString(identifier), expected_value, observed_value); + identifier.c_str(), expected_value, observed_value); return false; } // The value must be set in the "assigned" dictionary if it was a // variable. It must not have been assigned if it was a constant. - bool expected_assigned = FromUniqueString(identifier)[0] == '$'; + bool expected_assigned = identifier[0] == '$'; bool observed_assigned = false; - if (assigned.have(identifier)) { - observed_assigned = assigned.get(identifier); + PostfixEvaluator::DictionaryValidityType::const_iterator + iterator_assigned = assigned.find(identifier); + if (iterator_assigned != assigned.end()) { + observed_assigned = iterator_assigned->second; } if (expected_assigned != observed_assigned) { fprintf(stderr, "FAIL: evaluate test set %d/%d, " "validate assignment of \"%s\", " "expected %d, observed %d\n", evaluate_test_set_index, evaluate_test_set_count, - FromUniqueString(identifier), expected_assigned, - observed_assigned); + identifier.c_str(), expected_assigned, observed_assigned); return false; } } @@ -321,12 +313,12 @@ static bool RunTests() { // EvaluateForValue tests. PostfixEvaluator::DictionaryType dictionary_2; - dictionary_2.set(ustr__ZSebp(), 0xbfff0010); - dictionary_2.set(ustr__ZSeip(), 0x10000000); - dictionary_2.set(ustr__ZSesp(), 0xbfff0000); - dictionary_2.set(ustr__ZDcbSavedRegs(), 4); - dictionary_2.set(ustr__ZDcbParams(), 4); - dictionary_2.set(ustr__ZDraSearchStart(), 0xbfff0020); + dictionary_2["$ebp"] = 0xbfff0010; + dictionary_2["$eip"] = 0x10000000; + dictionary_2["$esp"] = 0xbfff0000; + dictionary_2[".cbSavedRegs"] = 4; + dictionary_2[".cbParams"] = 4; + dictionary_2[".raSearchStart"] = 0xbfff0020; const EvaluateForValueTest evaluate_for_value_tests_2[] = { { "28907223", true, 28907223 }, // simple constant { "89854293 40010015 +", true, 89854293 + 40010015 }, // arithmetic @@ -341,14 +333,14 @@ static bool RunTests() { const int evaluate_for_value_tests_2_size = (sizeof (evaluate_for_value_tests_2) / sizeof (evaluate_for_value_tests_2[0])); - map validate_data_2; - validate_data_2[ustr__ZSeip()] = 0x10000000; - validate_data_2[ustr__ZSebp()] = 0xbfff000c; - validate_data_2[ustr__ZSesp()] = 0xbfff0000; - validate_data_2[ToUniqueString("$new")] = 0x10000000; - validate_data_2[ustr__ZDcbSavedRegs()] = 4; - validate_data_2[ustr__ZDcbParams()] = 4; - validate_data_2[ustr__ZDraSearchStart()] = 0xbfff0020; + map validate_data_2; + validate_data_2["$eip"] = 0x10000000; + validate_data_2["$ebp"] = 0xbfff000c; + validate_data_2["$esp"] = 0xbfff0000; + validate_data_2["$new"] = 0x10000000; + validate_data_2[".cbSavedRegs"] = 4; + validate_data_2[".cbParams"] = 4; + validate_data_2[".raSearchStart"] = 0xbfff0020; postfix_evaluator.set_dictionary(&dictionary_2); for (int i = 0; i < evaluate_for_value_tests_2_size; i++) { @@ -370,35 +362,30 @@ static bool RunTests() { } } - map dictionary_2_map; - dictionary_2.copy_to_map(&dictionary_2_map); - for (map::iterator v = - validate_data_2.begin(); + for (map::iterator v = validate_data_2.begin(); v != validate_data_2.end(); v++) { - map::iterator a = - dictionary_2_map.find(v->first); - if (a == dictionary_2_map.end()) { + map::iterator a = dictionary_2.find(v->first); + if (a == dictionary_2.end()) { fprintf(stderr, "FAIL: evaluate for value dictionary check: " "expected dict[\"%s\"] to be 0x%x, but it was unset\n", - FromUniqueString(v->first), v->second); + v->first.c_str(), v->second); return false; } else if (a->second != v->second) { fprintf(stderr, "FAIL: evaluate for value dictionary check: " "expected dict[\"%s\"] to be 0x%x, but it was 0x%x\n", - FromUniqueString(v->first), v->second, a->second); + v->first.c_str(), v->second, a->second); return false; - } - dictionary_2_map.erase(a); + } + dictionary_2.erase(a); } - - map::iterator remaining = - dictionary_2_map.begin(); - if (remaining != dictionary_2_map.end()) { + + map::iterator remaining = dictionary_2.begin(); + if (remaining != dictionary_2.end()) { fprintf(stderr, "FAIL: evaluation of test expressions put unexpected " "values in dictionary:\n"); - for (; remaining != dictionary_2_map.end(); remaining++) + for (; remaining != dictionary_2.end(); remaining++) fprintf(stderr, " dict[\"%s\"] == 0x%x\n", - FromUniqueString(remaining->first), remaining->second); + remaining->first.c_str(), remaining->second); return false; } diff --git a/toolkit/crashreporter/google-breakpad/src/processor/proc_maps_linux.cc b/toolkit/crashreporter/google-breakpad/src/processor/proc_maps_linux.cc new file mode 100644 index 000000000000..0cd3772e0afe --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/processor/proc_maps_linux.cc @@ -0,0 +1,105 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef __STDC_FORMAT_MACROS +#define __STDC_FORMAT_MACROS +#endif + +#include "google_breakpad/processor/proc_maps_linux.h" + +#include +#include +#include + +#include "processor/logging.h" + +#if defined(OS_ANDROID) && !defined(__LP64__) +// In 32-bit mode, Bionic's inttypes.h defines PRI/SCNxPTR as an +// unsigned long int, which is incompatible with Bionic's stdint.h +// defining uintptr_t as an unsigned int: +// https://code.google.com/p/android/issues/detail?id=57218 +#undef SCNxPTR +#define SCNxPTR "x" +#endif + +namespace google_breakpad { + +bool ParseProcMaps(const std::string& input, + std::vector* regions_out) { + std::vector regions; + + // This isn't async safe nor terribly efficient, but it doesn't need to be at + // this point in time. + + // Split the string by newlines. + std::vector lines; + std::string l = ""; + for (size_t i = 0; i < input.size(); i++) { + if (input[i] != '\n' && input[i] != '\r') { + l.push_back(input[i]); + } else if (l.size() > 0) { + lines.push_back(l); + l.clear(); + } + } + if (l.size() > 0) { + BPLOG(ERROR) << "Input doesn't end in newline"; + return false; + } + + for (size_t i = 0; i < lines.size(); ++i) { + MappedMemoryRegion region; + const char* line = lines[i].c_str(); + char permissions[5] = {'\0'}; // Ensure NUL-terminated string. + int path_index = 0; + + // Sample format from man 5 proc: + // + // address perms offset dev inode pathname + // 08048000-08056000 r-xp 00000000 03:0c 64593 /usr/sbin/gpm + // + // The final %n term captures the offset in the input string, which is used + // to determine the path name. It *does not* increment the return value. + // Refer to man 3 sscanf for details. + if (sscanf(line, "%" SCNx64 "-%" SCNx64 " %4c %" SCNx64" %hhx:%hhx %" + SCNd64 " %n", ®ion.start, ®ion.end, permissions, + ®ion.offset, ®ion.major_device, ®ion.minor_device, + ®ion.inode, &path_index) < 7) { + BPLOG(ERROR) << "sscanf failed for line: " << line; + return false; + } + + region.permissions = 0; + + if (permissions[0] == 'r') + region.permissions |= MappedMemoryRegion::READ; + else if (permissions[0] != '-') + return false; + + if (permissions[1] == 'w') + region.permissions |= MappedMemoryRegion::WRITE; + else if (permissions[1] != '-') + return false; + + if (permissions[2] == 'x') + region.permissions |= MappedMemoryRegion::EXECUTE; + else if (permissions[2] != '-') + return false; + + if (permissions[3] == 'p') + region.permissions |= MappedMemoryRegion::PRIVATE; + else if (permissions[3] != 's' && permissions[3] != 'S') // Shared memory. + return false; + + // Pushing then assigning saves us a string copy. + regions.push_back(region); + regions.back().path.assign(line + path_index); + regions.back().line.assign(line); + } + + regions_out->swap(regions); + return true; +} + +} // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/processor/proc_maps_linux_unittest.cc b/toolkit/crashreporter/google-breakpad/src/processor/proc_maps_linux_unittest.cc new file mode 100644 index 000000000000..1ff4b031d9e9 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/processor/proc_maps_linux_unittest.cc @@ -0,0 +1,250 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "breakpad_googletest_includes.h" +#include "google_breakpad/processor/proc_maps_linux.h" + +namespace { + +TEST(ProcMapsTest, Empty) { + std::vector regions; + EXPECT_TRUE(ParseProcMaps("", ®ions)); + EXPECT_EQ(0u, regions.size()); +} + +TEST(ProcMapsTest, NoSpaces) { + static const char kNoSpaces[] = + "00400000-0040b000 r-xp 00002200 fc:00 794418 /bin/cat\n"; + + std::vector regions; + ASSERT_TRUE(ParseProcMaps(kNoSpaces, ®ions)); + ASSERT_EQ(1u, regions.size()); + + EXPECT_EQ(0x00400000u, regions[0].start); + EXPECT_EQ(0x0040b000u, regions[0].end); + EXPECT_EQ(0x00002200u, regions[0].offset); + EXPECT_EQ("/bin/cat", regions[0].path); +} + +TEST(ProcMapsTest, Spaces) { + static const char kSpaces[] = + "00400000-0040b000 r-xp 00002200 fc:00 794418 /bin/space cat\n"; + + std::vector regions; + ASSERT_TRUE(ParseProcMaps(kSpaces, ®ions)); + ASSERT_EQ(1u, regions.size()); + + EXPECT_EQ(0x00400000u, regions[0].start); + EXPECT_EQ(0x0040b000u, regions[0].end); + EXPECT_EQ(0x00002200u, regions[0].offset); + EXPECT_EQ("/bin/space cat", regions[0].path); +} + +TEST(ProcMapsTest, NoNewline) { + static const char kNoSpaces[] = + "00400000-0040b000 r-xp 00002200 fc:00 794418 /bin/cat"; + + std::vector regions; + ASSERT_FALSE(ParseProcMaps(kNoSpaces, ®ions)); +} + +TEST(ProcMapsTest, NoPath) { + static const char kNoPath[] = + "00400000-0040b000 rw-p 00000000 00:00 0 \n"; + + std::vector regions; + ASSERT_TRUE(ParseProcMaps(kNoPath, ®ions)); + ASSERT_EQ(1u, regions.size()); + + EXPECT_EQ(0x00400000u, regions[0].start); + EXPECT_EQ(0x0040b000u, regions[0].end); + EXPECT_EQ(0x00000000u, regions[0].offset); + EXPECT_EQ("", regions[0].path); +} + +TEST(ProcMapsTest, Heap) { + static const char kHeap[] = + "022ac000-022cd000 rw-p 00000000 00:00 0 [heap]\n"; + + std::vector regions; + ASSERT_TRUE(ParseProcMaps(kHeap, ®ions)); + ASSERT_EQ(1u, regions.size()); + + EXPECT_EQ(0x022ac000u, regions[0].start); + EXPECT_EQ(0x022cd000u, regions[0].end); + EXPECT_EQ(0x00000000u, regions[0].offset); + EXPECT_EQ("[heap]", regions[0].path); +} + +#if defined(ARCH_CPU_32_BITS) +TEST(ProcMapsTest, Stack32) { + static const char kStack[] = + "beb04000-beb25000 rw-p 00000000 00:00 0 [stack]\n"; + + std::vector regions; + ASSERT_TRUE(ParseProcMaps(kStack, ®ions)); + ASSERT_EQ(1u, regions.size()); + + EXPECT_EQ(0xbeb04000u, regions[0].start); + EXPECT_EQ(0xbeb25000u, regions[0].end); + EXPECT_EQ(0x00000000u, regions[0].offset); + EXPECT_EQ("[stack]", regions[0].path); +} +#elif defined(ARCH_CPU_64_BITS) +TEST(ProcMapsTest, Stack64) { + static const char kStack[] = + "7fff69c5b000-7fff69c7d000 rw-p 00000000 00:00 0 [stack]\n"; + + std::vector regions; + ASSERT_TRUE(ParseProcMaps(kStack, ®ions)); + ASSERT_EQ(1u, regions.size()); + + EXPECT_EQ(0x7fff69c5b000u, regions[0].start); + EXPECT_EQ(0x7fff69c7d000u, regions[0].end); + EXPECT_EQ(0x00000000u, regions[0].offset); + EXPECT_EQ("[stack]", regions[0].path); +} +#endif + +TEST(ProcMapsTest, Multiple) { + static const char kMultiple[] = + "00400000-0040b000 r-xp 00000000 fc:00 794418 /bin/cat\n" + "0060a000-0060b000 r--p 0000a000 fc:00 794418 /bin/cat\n" + "0060b000-0060c000 rw-p 0000b000 fc:00 794418 /bin/cat\n"; + + std::vector regions; + ASSERT_TRUE(ParseProcMaps(kMultiple, ®ions)); + ASSERT_EQ(3u, regions.size()); + + EXPECT_EQ(0x00400000u, regions[0].start); + EXPECT_EQ(0x0040b000u, regions[0].end); + EXPECT_EQ(0x00000000u, regions[0].offset); + EXPECT_EQ("/bin/cat", regions[0].path); + + EXPECT_EQ(0x0060a000u, regions[1].start); + EXPECT_EQ(0x0060b000u, regions[1].end); + EXPECT_EQ(0x0000a000u, regions[1].offset); + EXPECT_EQ("/bin/cat", regions[1].path); + + EXPECT_EQ(0x0060b000u, regions[2].start); + EXPECT_EQ(0x0060c000u, regions[2].end); + EXPECT_EQ(0x0000b000u, regions[2].offset); + EXPECT_EQ("/bin/cat", regions[2].path); +} + +TEST(ProcMapsTest, Permissions) { + static struct { + const char* input; + uint8_t permissions; + } kTestCases[] = { + {"00400000-0040b000 ---s 00000000 fc:00 794418 /bin/cat\n", 0}, + {"00400000-0040b000 ---S 00000000 fc:00 794418 /bin/cat\n", 0}, + {"00400000-0040b000 r--s 00000000 fc:00 794418 /bin/cat\n", + google_breakpad::MappedMemoryRegion::READ}, + {"00400000-0040b000 -w-s 00000000 fc:00 794418 /bin/cat\n", + google_breakpad::MappedMemoryRegion::WRITE}, + {"00400000-0040b000 --xs 00000000 fc:00 794418 /bin/cat\n", + google_breakpad::MappedMemoryRegion::EXECUTE}, + {"00400000-0040b000 rwxs 00000000 fc:00 794418 /bin/cat\n", + google_breakpad::MappedMemoryRegion::READ + | google_breakpad::MappedMemoryRegion::WRITE + | google_breakpad::MappedMemoryRegion::EXECUTE}, + {"00400000-0040b000 ---p 00000000 fc:00 794418 /bin/cat\n", + google_breakpad::MappedMemoryRegion::PRIVATE}, + {"00400000-0040b000 r--p 00000000 fc:00 794418 /bin/cat\n", + google_breakpad::MappedMemoryRegion::READ + | google_breakpad::MappedMemoryRegion::PRIVATE}, + {"00400000-0040b000 -w-p 00000000 fc:00 794418 /bin/cat\n", + google_breakpad::MappedMemoryRegion::WRITE + | google_breakpad::MappedMemoryRegion::PRIVATE}, + {"00400000-0040b000 --xp 00000000 fc:00 794418 /bin/cat\n", + google_breakpad::MappedMemoryRegion::EXECUTE + | google_breakpad::MappedMemoryRegion::PRIVATE}, + {"00400000-0040b000 rwxp 00000000 fc:00 794418 /bin/cat\n", + google_breakpad::MappedMemoryRegion::READ + | google_breakpad::MappedMemoryRegion::WRITE + | google_breakpad::MappedMemoryRegion::EXECUTE + | google_breakpad::MappedMemoryRegion::PRIVATE}, + }; + + for (size_t i = 0; i < sizeof(kTestCases) / sizeof(kTestCases[0]); ++i) { + std::vector regions; + EXPECT_TRUE(ParseProcMaps(kTestCases[i].input, ®ions)); + EXPECT_EQ(1u, regions.size()); + if (regions.empty()) + continue; + EXPECT_EQ(kTestCases[i].permissions, regions[0].permissions); + } +} + +TEST(ProcMapsTest, MissingFields) { + static const char* kTestCases[] = { + "00400000\n", // Missing end + beyond. + "00400000-0040b000\n", // Missing perms + beyond. + "00400000-0040b000 r-xp\n", // Missing offset + beyond. + "00400000-0040b000 r-xp 00000000\n", // Missing device + beyond. + "00400000-0040b000 r-xp 00000000 fc:00\n", // Missing inode + beyond. + "00400000-0040b000 00000000 fc:00 794418 /bin/cat\n", // Missing perms. + "00400000-0040b000 r-xp fc:00 794418 /bin/cat\n", // Missing offset. + "00400000-0040b000 r-xp 00000000 fc:00 /bin/cat\n", // Missing inode. + "00400000 r-xp 00000000 fc:00 794418 /bin/cat\n", // Missing end. + "-0040b000 r-xp 00000000 fc:00 794418 /bin/cat\n", // Missing start. + "00400000-0040b000 r-xp 00000000 794418 /bin/cat\n", // Missing device. + }; + + for (size_t i = 0; i < sizeof(kTestCases) / sizeof(kTestCases[0]); ++i) { + std::vector regions; + EXPECT_FALSE(ParseProcMaps(kTestCases[i], ®ions)); + } +} + +TEST(ProcMapsTest, InvalidInput) { + static const char* kTestCases[] = { + "thisisal-0040b000 rwxp 00000000 fc:00 794418 /bin/cat\n", + "0040000d-linvalid rwxp 00000000 fc:00 794418 /bin/cat\n", + "00400000-0040b000 inpu 00000000 fc:00 794418 /bin/cat\n", + "00400000-0040b000 rwxp tforproc fc:00 794418 /bin/cat\n", + "00400000-0040b000 rwxp 00000000 ma:ps 794418 /bin/cat\n", + "00400000-0040b000 rwxp 00000000 fc:00 parse! /bin/cat\n", + }; + + for (size_t i = 0; i < sizeof(kTestCases) / sizeof(kTestCases[0]); ++i) { + std::vector regions; + EXPECT_FALSE(ParseProcMaps(kTestCases[i], ®ions)); + } +} + +TEST(ProcMapsTest, ParseProcMapsEmptyString) { + std::vector regions; + EXPECT_TRUE(ParseProcMaps("", ®ions)); + EXPECT_EQ(0ULL, regions.size()); +} + +// Testing a couple of remotely possible weird things in the input: +// - Line ending with \r\n or \n\r. +// - File name contains quotes. +// - File name has whitespaces. +TEST(ProcMapsTest, ParseProcMapsWeirdCorrectInput) { + std::vector regions; + const std::string kContents = + "00400000-0040b000 r-xp 00000000 fc:00 2106562 " + " /bin/cat\r\n" + "7f53b7dad000-7f53b7f62000 r-xp 00000000 fc:00 263011 " + " /lib/x86_64-linux-gnu/libc-2.15.so\n\r" + "7f53b816d000-7f53b818f000 r-xp 00000000 fc:00 264284 " + " /lib/x86_64-linux-gnu/ld-2.15.so\n" + "7fff9c7ff000-7fff9c800000 r-xp 00000000 00:00 0 " + " \"vd so\"\n" + "ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 " + " [vsys call]\n"; + EXPECT_TRUE(ParseProcMaps(kContents, ®ions)); + EXPECT_EQ(5ULL, regions.size()); + EXPECT_EQ("/bin/cat", regions[0].path); + EXPECT_EQ("/lib/x86_64-linux-gnu/libc-2.15.so", regions[1].path); + EXPECT_EQ("/lib/x86_64-linux-gnu/ld-2.15.so", regions[2].path); + EXPECT_EQ("\"vd so\"", regions[3].path); + EXPECT_EQ("[vsys call]", regions[4].path); +} + +} // namespace diff --git a/toolkit/crashreporter/google-breakpad/src/processor/process_state.cc b/toolkit/crashreporter/google-breakpad/src/processor/process_state.cc index 6c3a65679629..5a5cd7f62982 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/process_state.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/process_state.cc @@ -45,6 +45,7 @@ ProcessState::~ProcessState() { void ProcessState::Clear() { time_date_stamp_ = 0; + process_create_time_ = 0; crashed_ = false; crash_reason_.clear(); crash_address_ = 0; @@ -57,9 +58,10 @@ void ProcessState::Clear() { } threads_.clear(); system_info_.Clear(); - // modules_without_symbols_ DOES NOT owns the underlying CodeModule pointers. - // Just clear the vector. + // modules_without_symbols_ and modules_with_corrupt_symbols_ DO NOT own + // the underlying CodeModule pointers. Just clear the vectors. modules_without_symbols_.clear(); + modules_with_corrupt_symbols_.clear(); delete modules_; modules_ = NULL; } diff --git a/toolkit/crashreporter/google-breakpad/src/processor/processor.gyp b/toolkit/crashreporter/google-breakpad/src/processor/processor.gyp new file mode 100644 index 000000000000..fb3d7cde802c --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/processor/processor.gyp @@ -0,0 +1,183 @@ +# Copyright 2014 Google Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +{ + 'includes': [ + 'processor_tools.gypi', + ], + 'targets': [ + { + 'target_name': 'processor', + 'type': 'static_library', + 'sources': [ + 'address_map-inl.h', + 'address_map.h', + 'basic_code_module.h', + 'basic_code_modules.cc', + 'basic_code_modules.h', + 'basic_source_line_resolver.cc', + 'basic_source_line_resolver_types.h', + 'binarystream.cc', + 'binarystream.h', + 'call_stack.cc', + 'cfi_frame_info-inl.h', + 'cfi_frame_info.cc', + 'cfi_frame_info.h', + 'contained_range_map-inl.h', + 'contained_range_map.h', + 'disassembler_x86.cc', + 'disassembler_x86.h', + 'dump_context.cc', + 'dump_object.cc', + 'exploitability.cc', + 'exploitability_linux.cc', + 'exploitability_linux.h', + 'exploitability_win.cc', + 'exploitability_win.h', + 'fast_source_line_resolver.cc', + 'fast_source_line_resolver_types.h', + 'linked_ptr.h', + 'logging.cc', + 'logging.h', + 'map_serializers-inl.h', + 'map_serializers.h', + 'microdump_processor.cc', + 'minidump.cc', + 'minidump_processor.cc', + 'module_comparer.cc', + 'module_comparer.h', + 'module_factory.h', + 'module_serializer.cc', + 'module_serializer.h', + 'pathname_stripper.cc', + 'pathname_stripper.h', + 'postfix_evaluator-inl.h', + 'postfix_evaluator.h', + 'process_state.cc', + 'range_map-inl.h', + 'range_map.h', + 'simple_serializer-inl.h', + 'simple_serializer.h', + 'simple_symbol_supplier.cc', + 'simple_symbol_supplier.h', + 'source_line_resolver_base.cc', + 'source_line_resolver_base_types.h', + 'stack_frame_cpu.cc', + 'stack_frame_symbolizer.cc', + 'stackwalk_common.cc', + 'stackwalk_common.h', + 'stackwalker.cc', + 'stackwalker_address_list.cc', + 'stackwalker_address_list.h', + 'stackwalker_amd64.cc', + 'stackwalker_amd64.h', + 'stackwalker_arm.cc', + 'stackwalker_arm.h', + 'stackwalker_arm64.cc', + 'stackwalker_arm64.h', + 'stackwalker_mips.cc', + 'stackwalker_mips.h', + 'stackwalker_ppc.cc', + 'stackwalker_ppc.h', + 'stackwalker_ppc64.cc', + 'stackwalker_ppc64.h', + 'stackwalker_selftest.cc', + 'stackwalker_sparc.cc', + 'stackwalker_sparc.h', + 'stackwalker_x86.cc', + 'stackwalker_x86.h', + 'static_address_map-inl.h', + 'static_address_map.h', + 'static_contained_range_map-inl.h', + 'static_contained_range_map.h', + 'static_map-inl.h', + 'static_map.h', + 'static_map_iterator-inl.h', + 'static_map_iterator.h', + 'static_range_map-inl.h', + 'static_range_map.h', + 'symbolic_constants_win.cc', + 'symbolic_constants_win.h', + 'synth_minidump.cc', + 'synth_minidump.h', + 'tokenize.cc', + 'tokenize.h', + 'windows_frame_info.h', + ], + 'include_dirs': [ + '..', + ], + 'dependencies': [ + '../common/common.gyp:common', + '../third_party/libdisasm/libdisasm.gyp:libdisasm', + ], + }, + { + 'target_name': 'processor_unittests', + 'type': 'executable', + 'sources': [ + 'address_map_unittest.cc', + 'basic_source_line_resolver_unittest.cc', + 'binarystream_unittest.cc', + 'cfi_frame_info_unittest.cc', + 'contained_range_map_unittest.cc', + 'disassembler_x86_unittest.cc', + 'exploitability_unittest.cc', + 'fast_source_line_resolver_unittest.cc', + 'map_serializers_unittest.cc', + 'microdump_processor_unittest.cc', + 'minidump_processor_unittest.cc', + 'minidump_unittest.cc', + 'pathname_stripper_unittest.cc', + 'postfix_evaluator_unittest.cc', + 'range_map_unittest.cc', + 'stackwalker_address_list_unittest.cc', + 'stackwalker_amd64_unittest.cc', + 'stackwalker_arm64_unittest.cc', + 'stackwalker_arm_unittest.cc', + 'stackwalker_mips_unittest.cc', + 'stackwalker_unittest_utils.h', + 'stackwalker_x86_unittest.cc', + 'static_address_map_unittest.cc', + 'static_contained_range_map_unittest.cc', + 'static_map_unittest.cc', + 'static_range_map_unittest.cc', + 'synth_minidump_unittest.cc', + 'synth_minidump_unittest_data.h', + ], + 'include_dirs': [ + '..', + ], + 'dependencies': [ + 'processor', + '../build/testing.gypi:gmock', + '../build/testing.gypi:gtest', + ], + }, + ], +} diff --git a/toolkit/crashreporter/google-breakpad/src/processor/processor_tools.gypi b/toolkit/crashreporter/google-breakpad/src/processor/processor_tools.gypi new file mode 100644 index 000000000000..ecb450d60289 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/processor/processor_tools.gypi @@ -0,0 +1,57 @@ +# Copyright 2014 Google Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +{ + 'target_defaults': { + 'include_dirs': [ + '..', + ], + }, + 'targets': [ + { + 'target_name': 'minidump_dump', + 'type': 'executable', + 'sources': [ + 'minidump_dump.cc', + ], + 'dependencies': [ + 'processor', + ], + }, + { + 'target_name': 'minidump_stackwalk', + 'type': 'executable', + 'sources': [ + 'minidump_stackwalk.cc', + ], + 'dependencies': [ + 'processor', + ], + }, + ], +} diff --git a/toolkit/crashreporter/google-breakpad/src/processor/proto/process_state.proto b/toolkit/crashreporter/google-breakpad/src/processor/proto/process_state.proto index 5ff6194cfaf1..d3e02dc3f46c 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/proto/process_state.proto +++ b/toolkit/crashreporter/google-breakpad/src/processor/proto/process_state.proto @@ -46,11 +46,14 @@ package google_breakpad; // A proto representation of a process, in a fully-digested state. // See src/google_breakpad/processor/process_state.h message ProcessStateProto { - // Next value: 13 + // Next value: 14 // The time-date stamp of the original minidump (time_t format) optional int64 time_date_stamp = 1; + // The time-date stamp when the process was created (time_t format) + optional int64 process_create_time = 13; + message Crash { // The type of crash. OS- and possibly CPU- specific. For example, // "EXCEPTION_ACCESS_VIOLATION" (Windows), "EXC_BAD_ACCESS / diff --git a/toolkit/crashreporter/google-breakpad/src/processor/range_map-inl.h b/toolkit/crashreporter/google-breakpad/src/processor/range_map-inl.h index bfdc58389b85..55dae8396d4a 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/range_map-inl.h +++ b/toolkit/crashreporter/google-breakpad/src/processor/range_map-inl.h @@ -40,7 +40,7 @@ #include #include "processor/range_map.h" -#include "common/logging.h" +#include "processor/logging.h" namespace google_breakpad { @@ -72,12 +72,18 @@ bool RangeMap::StoreRange(const AddressType &base, // Some other range begins in the space used by this range. It may be // contained within the space used by this range, or it may extend lower. // Regardless, it is an error. - AddressType other_base = iterator_base->second.base(); - AddressType other_size = iterator_base->first - other_base + 1; - BPLOG(INFO) << "StoreRange failed, an existing range is contained by or " - "extends lower than the new range: new " << - HexString(base) << "+" << HexString(size) << ", existing " << - HexString(other_base) << "+" << HexString(other_size); + // The processor hits this case too frequently with common symbol files. + // This is most appropriate for a DEBUG channel, but since none exists now + // simply comment out this logging. + // + // AddressType other_base = iterator_base->second.base(); + // AddressType other_size = iterator_base->first - other_base + 1; + // BPLOG(INFO) << "StoreRange failed, an existing range is contained by or " + // "extends lower than the new range: new " << + // HexString(base) << "+" << HexString(size) << + // ", existing " << HexString(other_base) << "+" << + // HexString(other_size); + return false; } @@ -86,13 +92,17 @@ bool RangeMap::StoreRange(const AddressType &base, // The range above this one overlaps with this one. It may fully // contain this range, or it may begin within this range and extend // higher. Regardless, it's an error. - AddressType other_base = iterator_high->second.base(); - AddressType other_size = iterator_high->first - other_base + 1; - BPLOG(INFO) << "StoreRange failed, an existing range contains or " - "extends higher than the new range: new " << - HexString(base) << "+" << HexString(size) << - ", existing " << - HexString(other_base) << "+" << HexString(other_size); + // The processor hits this case too frequently with common symbol files. + // This is most appropriate for a DEBUG channel, but since none exists now + // simply comment out this logging. + // + // AddressType other_base = iterator_high->second.base(); + // AddressType other_size = iterator_high->first - other_base + 1; + // BPLOG(INFO) << "StoreRange failed, an existing range contains or " + // "extends higher than the new range: new " << + // HexString(base) << "+" << HexString(size) << + // ", existing " << HexString(other_base) << "+" << + // HexString(other_size); return false; } } diff --git a/toolkit/crashreporter/google-breakpad/src/processor/simple_serializer-inl.h b/toolkit/crashreporter/google-breakpad/src/processor/simple_serializer-inl.h index 6e5fe5d1eaf5..606bb3cead57 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/simple_serializer-inl.h +++ b/toolkit/crashreporter/google-breakpad/src/processor/simple_serializer-inl.h @@ -60,6 +60,11 @@ class SimpleSerializer { *dest = static_cast(boolean? 255 : 0); return ++dest; } + + static const char *Read(const char *source, bool *value) { + *value = ((*source) == 0 ? false : true); + return ++source; + } }; // Specializations of SimpleSerializer: string diff --git a/toolkit/crashreporter/google-breakpad/src/processor/simple_symbol_supplier.cc b/toolkit/crashreporter/google-breakpad/src/processor/simple_symbol_supplier.cc index 4a3a1059e09c..bc5ebb687b9e 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/simple_symbol_supplier.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/simple_symbol_supplier.cc @@ -84,8 +84,8 @@ SymbolSupplier::SymbolResult SimpleSymbolSupplier::GetSymbolFile( assert(symbol_data); symbol_data->clear(); - SymbolSupplier::SymbolResult s = GetSymbolFile(module, system_info, symbol_file); - + SymbolSupplier::SymbolResult s = GetSymbolFile(module, system_info, + symbol_file); if (s == FOUND) { std::ifstream in(symbol_file->c_str()); std::getline(in, *symbol_data, string::traits_type::to_char_type( @@ -99,22 +99,25 @@ SymbolSupplier::SymbolResult SimpleSymbolSupplier::GetCStringSymbolData( const CodeModule *module, const SystemInfo *system_info, string *symbol_file, - char **symbol_data) { + char **symbol_data, + size_t *symbol_data_size) { assert(symbol_data); + assert(symbol_data_size); string symbol_data_string; SymbolSupplier::SymbolResult s = GetSymbolFile(module, system_info, symbol_file, &symbol_data_string); if (s == FOUND) { - unsigned int size = symbol_data_string.size() + 1; - *symbol_data = new char[size]; + *symbol_data_size = symbol_data_string.size() + 1; + *symbol_data = new char[*symbol_data_size]; if (*symbol_data == NULL) { - BPLOG(ERROR) << "Memory allocation for size " << size << " failed"; + BPLOG(ERROR) << "Memory allocation for size " << *symbol_data_size + << " failed"; return INTERRUPT; } - memcpy(*symbol_data, symbol_data_string.c_str(), size - 1); - (*symbol_data)[size - 1] = '\0'; + memcpy(*symbol_data, symbol_data_string.c_str(), symbol_data_string.size()); + (*symbol_data)[symbol_data_string.size()] = '\0'; memory_buffers_.insert(make_pair(module->code_file(), *symbol_data)); } return s; diff --git a/toolkit/crashreporter/google-breakpad/src/processor/simple_symbol_supplier.h b/toolkit/crashreporter/google-breakpad/src/processor/simple_symbol_supplier.h index e19b194c65da..0cde85cdcd8b 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/simple_symbol_supplier.h +++ b/toolkit/crashreporter/google-breakpad/src/processor/simple_symbol_supplier.h @@ -118,7 +118,8 @@ class SimpleSymbolSupplier : public SymbolSupplier { virtual SymbolResult GetCStringSymbolData(const CodeModule *module, const SystemInfo *system_info, string *symbol_file, - char **symbol_data); + char **symbol_data, + size_t *symbol_data_size); // Free the data buffer allocated in the above GetCStringSymbolData(); virtual void FreeSymbolData(const CodeModule *module); diff --git a/toolkit/crashreporter/google-breakpad/src/processor/source_line_resolver_base.cc b/toolkit/crashreporter/google-breakpad/src/processor/source_line_resolver_base.cc index 49088c89511b..6eff1f991803 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/source_line_resolver_base.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/source_line_resolver_base.cc @@ -53,6 +53,7 @@ namespace google_breakpad { SourceLineResolverBase::SourceLineResolverBase( ModuleFactory *module_factory) : modules_(new ModuleMap), + corrupt_modules_(new ModuleSet), memory_buffers_(new MemoryMap), module_factory_(module_factory) { } @@ -66,6 +67,11 @@ SourceLineResolverBase::~SourceLineResolverBase() { } // Delete the map of modules. delete modules_; + modules_ = NULL; + + // Delete the set of corrupt modules. + delete corrupt_modules_; + corrupt_modules_ = NULL; MemoryMap::iterator iter = memory_buffers_->begin(); for (; iter != memory_buffers_->end(); ++iter) { @@ -73,13 +79,16 @@ SourceLineResolverBase::~SourceLineResolverBase() { } // Delete the map of memory buffers. delete memory_buffers_; + memory_buffers_ = NULL; delete module_factory_; + module_factory_ = NULL; } -bool SourceLineResolverBase::ReadSymbolFile(char **symbol_data, - const string &map_file) { - if (symbol_data == NULL) { +bool SourceLineResolverBase::ReadSymbolFile(const string &map_file, + char **symbol_data, + size_t *symbol_data_size) { + if (symbol_data == NULL || symbol_data_size == NULL) { BPLOG(ERROR) << "Could not Read file into Null memory pointer"; return false; } @@ -98,6 +107,7 @@ bool SourceLineResolverBase::ReadSymbolFile(char **symbol_data, // Allocate memory for file contents, plus a null terminator // since we may use strtok() on the contents. + *symbol_data_size = file_size + 1; *symbol_data = new char[file_size + 1]; if (*symbol_data == NULL) { @@ -154,12 +164,14 @@ bool SourceLineResolverBase::LoadModule(const CodeModule *module, << " from " << map_file; char *memory_buffer; - if (!ReadSymbolFile(&memory_buffer, map_file)) + size_t memory_buffer_size; + if (!ReadSymbolFile(map_file, &memory_buffer, &memory_buffer_size)) return false; BPLOG(INFO) << "Read symbol file " << map_file << " succeeded"; - bool load_result = LoadModuleUsingMemoryBuffer(module, memory_buffer); + bool load_result = LoadModuleUsingMemoryBuffer(module, memory_buffer, + memory_buffer_size); if (load_result && !ShouldDeleteMemoryBufferAfterLoadModule()) { // memory_buffer has to stay alive as long as the module. @@ -183,7 +195,8 @@ bool SourceLineResolverBase::LoadModuleUsingMapBuffer( return false; } - char *memory_buffer = new char[map_buffer.size() + 1]; + size_t memory_buffer_size = map_buffer.size() + 1; + char *memory_buffer = new char[memory_buffer_size]; if (memory_buffer == NULL) { BPLOG(ERROR) << "Could not allocate memory for " << module->code_file(); return false; @@ -193,7 +206,8 @@ bool SourceLineResolverBase::LoadModuleUsingMapBuffer( memcpy(memory_buffer, map_buffer.c_str(), map_buffer.size()); memory_buffer[map_buffer.size()] = '\0'; - bool load_result = LoadModuleUsingMemoryBuffer(module, memory_buffer); + bool load_result = LoadModuleUsingMemoryBuffer(module, memory_buffer, + memory_buffer_size); if (load_result && !ShouldDeleteMemoryBufferAfterLoadModule()) { // memory_buffer has to stay alive as long as the module. @@ -206,7 +220,9 @@ bool SourceLineResolverBase::LoadModuleUsingMapBuffer( } bool SourceLineResolverBase::LoadModuleUsingMemoryBuffer( - const CodeModule *module, char *memory_buffer) { + const CodeModule *module, + char *memory_buffer, + size_t memory_buffer_size) { if (!module) return false; @@ -223,12 +239,19 @@ bool SourceLineResolverBase::LoadModuleUsingMemoryBuffer( Module *basic_module = module_factory_->CreateModule(module->code_file()); // Ownership of memory is NOT transfered to Module::LoadMapFromMemory(). - if (!basic_module->LoadMapFromMemory(memory_buffer)) { - delete basic_module; - return false; + if (!basic_module->LoadMapFromMemory(memory_buffer, memory_buffer_size)) { + BPLOG(ERROR) << "Too many error while parsing symbol data for module " + << module->code_file(); + // Returning false from here would be an indication that the symbols for + // this module are missing which would be wrong. Intentionally fall through + // and add the module to both the modules_ and the corrupt_modules_ lists. + assert(basic_module->IsCorrupt()); } modules_->insert(make_pair(module->code_file(), basic_module)); + if (basic_module->IsCorrupt()) { + corrupt_modules_->insert(module->code_file()); + } return true; } @@ -244,6 +267,7 @@ void SourceLineResolverBase::UnloadModule(const CodeModule *code_module) { if (mod_iter != modules_->end()) { Module *symbol_module = mod_iter->second; delete symbol_module; + corrupt_modules_->erase(mod_iter->first); modules_->erase(mod_iter); } @@ -265,6 +289,12 @@ bool SourceLineResolverBase::HasModule(const CodeModule *module) { return modules_->find(module->code_file()) != modules_->end(); } +bool SourceLineResolverBase::IsModuleCorrupt(const CodeModule *module) { + if (!module) + return false; + return corrupt_modules_->find(module->code_file()) != corrupt_modules_->end(); +} + void SourceLineResolverBase::FillSourceLineInfo(StackFrame *frame) { if (frame->module) { ModuleMap::const_iterator it = modules_->find(frame->module->code_file()); diff --git a/toolkit/crashreporter/google-breakpad/src/processor/source_line_resolver_base_types.h b/toolkit/crashreporter/google-breakpad/src/processor/source_line_resolver_base_types.h index 1dc3d62a7ff0..4a9dfb3ced15 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/source_line_resolver_base_types.h +++ b/toolkit/crashreporter/google-breakpad/src/processor/source_line_resolver_base_types.h @@ -121,7 +121,15 @@ class SourceLineResolverBase::Module { // Loads a map from the given buffer in char* type. // Does NOT take ownership of memory_buffer (the caller, source line resolver, // is the owner of memory_buffer). - virtual bool LoadMapFromMemory(char *memory_buffer) = 0; + // The passed in |memory buffer| is of size |memory_buffer_size|. If it is + // not null terminated, LoadMapFromMemory will null terminate it by modifying + // the passed in buffer. + virtual bool LoadMapFromMemory(char *memory_buffer, + size_t memory_buffer_size) = 0; + + // Tells whether the loaded symbol data is corrupt. Return value is + // undefined, if the symbol data hasn't been loaded yet. + virtual bool IsCorrupt() const = 0; // Looks up the given relative address, and fills the StackFrame struct // with the result. diff --git a/toolkit/crashreporter/google-breakpad/src/processor/stack_frame_cpu.cc b/toolkit/crashreporter/google-breakpad/src/processor/stack_frame_cpu.cc new file mode 100644 index 000000000000..6175dc7f26e1 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/processor/stack_frame_cpu.cc @@ -0,0 +1,79 @@ +// Copyright 2013 Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// stack_frame_cpu.h: CPU-specific StackFrame extensions. +// +// See google_breakpad/processor/stack_frame_cpu.h for documentation. +// +// Author: Colin Blundell + +#include "google_breakpad/processor/stack_frame_cpu.h" + +namespace google_breakpad { + +const uint64_t StackFrameARM64::CONTEXT_VALID_X0; +const uint64_t StackFrameARM64::CONTEXT_VALID_X1; +const uint64_t StackFrameARM64::CONTEXT_VALID_X2; +const uint64_t StackFrameARM64::CONTEXT_VALID_X3; +const uint64_t StackFrameARM64::CONTEXT_VALID_X4; +const uint64_t StackFrameARM64::CONTEXT_VALID_X5; +const uint64_t StackFrameARM64::CONTEXT_VALID_X6; +const uint64_t StackFrameARM64::CONTEXT_VALID_X7; +const uint64_t StackFrameARM64::CONTEXT_VALID_X8; +const uint64_t StackFrameARM64::CONTEXT_VALID_X9; +const uint64_t StackFrameARM64::CONTEXT_VALID_X10; +const uint64_t StackFrameARM64::CONTEXT_VALID_X11; +const uint64_t StackFrameARM64::CONTEXT_VALID_X12; +const uint64_t StackFrameARM64::CONTEXT_VALID_X13; +const uint64_t StackFrameARM64::CONTEXT_VALID_X14; +const uint64_t StackFrameARM64::CONTEXT_VALID_X15; +const uint64_t StackFrameARM64::CONTEXT_VALID_X16; +const uint64_t StackFrameARM64::CONTEXT_VALID_X17; +const uint64_t StackFrameARM64::CONTEXT_VALID_X18; +const uint64_t StackFrameARM64::CONTEXT_VALID_X19; +const uint64_t StackFrameARM64::CONTEXT_VALID_X20; +const uint64_t StackFrameARM64::CONTEXT_VALID_X21; +const uint64_t StackFrameARM64::CONTEXT_VALID_X22; +const uint64_t StackFrameARM64::CONTEXT_VALID_X23; +const uint64_t StackFrameARM64::CONTEXT_VALID_X24; +const uint64_t StackFrameARM64::CONTEXT_VALID_X25; +const uint64_t StackFrameARM64::CONTEXT_VALID_X26; +const uint64_t StackFrameARM64::CONTEXT_VALID_X27; +const uint64_t StackFrameARM64::CONTEXT_VALID_X28; +const uint64_t StackFrameARM64::CONTEXT_VALID_X29; +const uint64_t StackFrameARM64::CONTEXT_VALID_X30; +const uint64_t StackFrameARM64::CONTEXT_VALID_X31; +const uint64_t StackFrameARM64::CONTEXT_VALID_X32; +const uint64_t StackFrameARM64::CONTEXT_VALID_FP; +const uint64_t StackFrameARM64::CONTEXT_VALID_LR; +const uint64_t StackFrameARM64::CONTEXT_VALID_SP; +const uint64_t StackFrameARM64::CONTEXT_VALID_PC; +const uint64_t StackFrameARM64::CONTEXT_VALID_ALL; + +} // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/processor/stack_frame_symbolizer.cc b/toolkit/crashreporter/google-breakpad/src/processor/stack_frame_symbolizer.cc index 4042ee36ee39..5c8dbe5e13f3 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/stack_frame_symbolizer.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/stack_frame_symbolizer.cc @@ -44,7 +44,7 @@ #include "google_breakpad/processor/symbol_supplier.h" #include "google_breakpad/processor/system_info.h" #include "processor/linked_ptr.h" -#include "common/logging.h" +#include "processor/logging.h" namespace google_breakpad { @@ -74,7 +74,8 @@ StackFrameSymbolizer::SymbolizerResult StackFrameSymbolizer::FillSourceLineInfo( // If module is already loaded, go ahead to fill source line info and return. if (resolver_->HasModule(frame->module)) { resolver_->FillSourceLineInfo(frame); - return kNoError; + return resolver_->IsModuleCorrupt(frame->module) ? + kWarningCorruptSymbols : kNoError; } // Module needs to fetch symbol file. First check to see if supplier exists. @@ -85,20 +86,24 @@ StackFrameSymbolizer::SymbolizerResult StackFrameSymbolizer::FillSourceLineInfo( // Start fetching symbol from supplier. string symbol_file; char* symbol_data = NULL; + size_t symbol_data_size; SymbolSupplier::SymbolResult symbol_result = supplier_->GetCStringSymbolData( - module, system_info, &symbol_file, &symbol_data); + module, system_info, &symbol_file, &symbol_data, &symbol_data_size); switch (symbol_result) { case SymbolSupplier::FOUND: { - bool load_success = resolver_->LoadModuleUsingMemoryBuffer(frame->module, - symbol_data); + bool load_success = resolver_->LoadModuleUsingMemoryBuffer( + frame->module, + symbol_data, + symbol_data_size); if (resolver_->ShouldDeleteMemoryBufferAfterLoadModule()) { supplier_->FreeSymbolData(module); } if (load_success) { resolver_->FillSourceLineInfo(frame); - return kNoError; + return resolver_->IsModuleCorrupt(frame->module) ? + kWarningCorruptSymbols : kNoError; } else { BPLOG(ERROR) << "Failed to load symbol file in resolver."; no_symbol_modules_.insert(module->code_file()); diff --git a/toolkit/crashreporter/google-breakpad/src/processor/stackwalk_common.cc b/toolkit/crashreporter/google-breakpad/src/processor/stackwalk_common.cc new file mode 100644 index 000000000000..3a6e17feca87 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/processor/stackwalk_common.cc @@ -0,0 +1,929 @@ +// Copyright (c) 2010 Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// stackwalk_common.cc: Module shared by the {micro,mini}dump_stackwalck +// executables to print the content of dumps (w/ stack traces) on the console. +// +// Author: Mark Mentovai + +#include "processor/stackwalk_common.h" + +#include +#include +#include +#include + +#include +#include + +#include "common/using_std_string.h" +#include "google_breakpad/processor/call_stack.h" +#include "google_breakpad/processor/code_module.h" +#include "google_breakpad/processor/code_modules.h" +#include "google_breakpad/processor/process_state.h" +#include "google_breakpad/processor/source_line_resolver_interface.h" +#include "google_breakpad/processor/stack_frame_cpu.h" +#include "processor/logging.h" +#include "processor/pathname_stripper.h" + +namespace google_breakpad { + +namespace { + +using std::vector; + +// Separator character for machine readable output. +static const char kOutputSeparator = '|'; + +// PrintRegister prints a register's name and value to stdout. It will +// print four registers on a line. For the first register in a set, +// pass 0 for |start_col|. For registers in a set, pass the most recent +// return value of PrintRegister. +// The caller is responsible for printing the final newline after a set +// of registers is completely printed, regardless of the number of calls +// to PrintRegister. +static const int kMaxWidth = 80; // optimize for an 80-column terminal +static int PrintRegister(const char *name, uint32_t value, int start_col) { + char buffer[64]; + snprintf(buffer, sizeof(buffer), " %5s = 0x%08x", name, value); + + if (start_col + static_cast(strlen(buffer)) > kMaxWidth) { + start_col = 0; + printf("\n "); + } + fputs(buffer, stdout); + + return start_col + strlen(buffer); +} + +// PrintRegister64 does the same thing, but for 64-bit registers. +static int PrintRegister64(const char *name, uint64_t value, int start_col) { + char buffer[64]; + snprintf(buffer, sizeof(buffer), " %5s = 0x%016" PRIx64 , name, value); + + if (start_col + static_cast(strlen(buffer)) > kMaxWidth) { + start_col = 0; + printf("\n "); + } + fputs(buffer, stdout); + + return start_col + strlen(buffer); +} + +// StripSeparator takes a string |original| and returns a copy +// of the string with all occurences of |kOutputSeparator| removed. +static string StripSeparator(const string &original) { + string result = original; + string::size_type position = 0; + while ((position = result.find(kOutputSeparator, position)) != string::npos) { + result.erase(position, 1); + } + position = 0; + while ((position = result.find('\n', position)) != string::npos) { + result.erase(position, 1); + } + return result; +} + +// PrintStackContents prints the stack contents of the current frame to stdout. +static void PrintStackContents(const std::string &indent, + const StackFrame *frame, + const StackFrame *prev_frame, + const std::string &cpu, + const MemoryRegion *memory, + const CodeModules* modules, + SourceLineResolverInterface *resolver) { + // Find stack range. + int word_length = 0; + uint64_t stack_begin = 0, stack_end = 0; + if (cpu == "x86") { + word_length = 4; + const StackFrameX86 *frame_x86 = static_cast(frame); + const StackFrameX86 *prev_frame_x86 = + static_cast(prev_frame); + if ((frame_x86->context_validity & StackFrameX86::CONTEXT_VALID_ESP) && + (prev_frame_x86->context_validity & StackFrameX86::CONTEXT_VALID_ESP)) { + stack_begin = frame_x86->context.esp; + stack_end = prev_frame_x86->context.esp; + } + } else if (cpu == "amd64") { + word_length = 8; + const StackFrameAMD64 *frame_amd64 = + static_cast(frame); + const StackFrameAMD64 *prev_frame_amd64 = + static_cast(prev_frame); + if ((frame_amd64->context_validity & StackFrameAMD64::CONTEXT_VALID_RSP) && + (prev_frame_amd64->context_validity & + StackFrameAMD64::CONTEXT_VALID_RSP)) { + stack_begin = frame_amd64->context.rsp; + stack_end = prev_frame_amd64->context.rsp; + } + } else if (cpu == "arm") { + word_length = 4; + const StackFrameARM *frame_arm = static_cast(frame); + const StackFrameARM *prev_frame_arm = + static_cast(prev_frame); + if ((frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_SP) && + (prev_frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_SP)) { + stack_begin = frame_arm->context.iregs[13]; + stack_end = prev_frame_arm->context.iregs[13]; + } + } else if (cpu == "arm64") { + word_length = 8; + const StackFrameARM64 *frame_arm64 = + static_cast(frame); + const StackFrameARM64 *prev_frame_arm64 = + static_cast(prev_frame); + if ((frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_SP) && + (prev_frame_arm64->context_validity & + StackFrameARM64::CONTEXT_VALID_SP)) { + stack_begin = frame_arm64->context.iregs[31]; + stack_end = prev_frame_arm64->context.iregs[31]; + } + } + if (!word_length || !stack_begin || !stack_end) + return; + + // Print stack contents. + printf("\n%sStack contents:", indent.c_str()); + for(uint64_t address = stack_begin; address < stack_end; ) { + // Print the start address of this row. + if (word_length == 4) + printf("\n%s %08x", indent.c_str(), static_cast(address)); + else + printf("\n%s %016" PRIx64, indent.c_str(), address); + + // Print data in hex. + const int kBytesPerRow = 16; + std::string data_as_string; + for (int i = 0; i < kBytesPerRow; ++i, ++address) { + uint8_t value = 0; + if (address < stack_end && + memory->GetMemoryAtAddress(address, &value)) { + printf(" %02x", value); + data_as_string.push_back(isprint(value) ? value : '.'); + } else { + printf(" "); + data_as_string.push_back(' '); + } + } + // Print data as string. + printf(" %s", data_as_string.c_str()); + } + + // Try to find instruction pointers from stack. + printf("\n%sPossible instruction pointers:\n", indent.c_str()); + for (uint64_t address = stack_begin; address < stack_end; + address += word_length) { + StackFrame pointee_frame; + + // Read a word (possible instruction pointer) from stack. + if (word_length == 4) { + uint32_t data32 = 0; + memory->GetMemoryAtAddress(address, &data32); + pointee_frame.instruction = data32; + } else { + uint64_t data64 = 0; + memory->GetMemoryAtAddress(address, &data64); + pointee_frame.instruction = data64; + } + pointee_frame.module = + modules->GetModuleForAddress(pointee_frame.instruction); + + // Try to look up the function name. + if (pointee_frame.module) + resolver->FillSourceLineInfo(&pointee_frame); + + // Print function name. + if (!pointee_frame.function_name.empty()) { + if (word_length == 4) { + printf("%s *(0x%08x) = 0x%08x", indent.c_str(), + static_cast(address), + static_cast(pointee_frame.instruction)); + } else { + printf("%s *(0x%016" PRIx64 ") = 0x%016" PRIx64, + indent.c_str(), address, pointee_frame.instruction); + } + printf(" <%s> [%s : %d + 0x%" PRIx64 "]\n", + pointee_frame.function_name.c_str(), + PathnameStripper::File(pointee_frame.source_file_name).c_str(), + pointee_frame.source_line, + pointee_frame.instruction - pointee_frame.source_line_base); + } + } + printf("\n"); +} + +// PrintStack prints the call stack in |stack| to stdout, in a reasonably +// useful form. Module, function, and source file names are displayed if +// they are available. The code offset to the base code address of the +// source line, function, or module is printed, preferring them in that +// order. If no source line, function, or module information is available, +// an absolute code offset is printed. +// +// If |cpu| is a recognized CPU name, relevant register state for each stack +// frame printed is also output, if available. +static void PrintStack(const CallStack *stack, + const string &cpu, + bool output_stack_contents, + const MemoryRegion* memory, + const CodeModules* modules, + SourceLineResolverInterface* resolver) { + int frame_count = stack->frames()->size(); + if (frame_count == 0) { + printf(" \n"); + } + for (int frame_index = 0; frame_index < frame_count; ++frame_index) { + const StackFrame *frame = stack->frames()->at(frame_index); + printf("%2d ", frame_index); + + uint64_t instruction_address = frame->ReturnAddress(); + + if (frame->module) { + printf("%s", PathnameStripper::File(frame->module->code_file()).c_str()); + if (!frame->function_name.empty()) { + printf("!%s", frame->function_name.c_str()); + if (!frame->source_file_name.empty()) { + string source_file = PathnameStripper::File(frame->source_file_name); + printf(" [%s : %d + 0x%" PRIx64 "]", + source_file.c_str(), + frame->source_line, + instruction_address - frame->source_line_base); + } else { + printf(" + 0x%" PRIx64, instruction_address - frame->function_base); + } + } else { + printf(" + 0x%" PRIx64, + instruction_address - frame->module->base_address()); + } + } else { + printf("0x%" PRIx64, instruction_address); + } + printf("\n "); + + int sequence = 0; + if (cpu == "x86") { + const StackFrameX86 *frame_x86 = + reinterpret_cast(frame); + + if (frame_x86->context_validity & StackFrameX86::CONTEXT_VALID_EIP) + sequence = PrintRegister("eip", frame_x86->context.eip, sequence); + if (frame_x86->context_validity & StackFrameX86::CONTEXT_VALID_ESP) + sequence = PrintRegister("esp", frame_x86->context.esp, sequence); + if (frame_x86->context_validity & StackFrameX86::CONTEXT_VALID_EBP) + sequence = PrintRegister("ebp", frame_x86->context.ebp, sequence); + if (frame_x86->context_validity & StackFrameX86::CONTEXT_VALID_EBX) + sequence = PrintRegister("ebx", frame_x86->context.ebx, sequence); + if (frame_x86->context_validity & StackFrameX86::CONTEXT_VALID_ESI) + sequence = PrintRegister("esi", frame_x86->context.esi, sequence); + if (frame_x86->context_validity & StackFrameX86::CONTEXT_VALID_EDI) + sequence = PrintRegister("edi", frame_x86->context.edi, sequence); + if (frame_x86->context_validity == StackFrameX86::CONTEXT_VALID_ALL) { + sequence = PrintRegister("eax", frame_x86->context.eax, sequence); + sequence = PrintRegister("ecx", frame_x86->context.ecx, sequence); + sequence = PrintRegister("edx", frame_x86->context.edx, sequence); + sequence = PrintRegister("efl", frame_x86->context.eflags, sequence); + } + } else if (cpu == "ppc") { + const StackFramePPC *frame_ppc = + reinterpret_cast(frame); + + if (frame_ppc->context_validity & StackFramePPC::CONTEXT_VALID_SRR0) + sequence = PrintRegister("srr0", frame_ppc->context.srr0, sequence); + if (frame_ppc->context_validity & StackFramePPC::CONTEXT_VALID_GPR1) + sequence = PrintRegister("r1", frame_ppc->context.gpr[1], sequence); + } else if (cpu == "amd64") { + const StackFrameAMD64 *frame_amd64 = + reinterpret_cast(frame); + + if (frame_amd64->context_validity & StackFrameAMD64::CONTEXT_VALID_RAX) + sequence = PrintRegister64("rax", frame_amd64->context.rax, sequence); + if (frame_amd64->context_validity & StackFrameAMD64::CONTEXT_VALID_RDX) + sequence = PrintRegister64("rdx", frame_amd64->context.rdx, sequence); + if (frame_amd64->context_validity & StackFrameAMD64::CONTEXT_VALID_RCX) + sequence = PrintRegister64("rcx", frame_amd64->context.rcx, sequence); + if (frame_amd64->context_validity & StackFrameAMD64::CONTEXT_VALID_RBX) + sequence = PrintRegister64("rbx", frame_amd64->context.rbx, sequence); + if (frame_amd64->context_validity & StackFrameAMD64::CONTEXT_VALID_RSI) + sequence = PrintRegister64("rsi", frame_amd64->context.rsi, sequence); + if (frame_amd64->context_validity & StackFrameAMD64::CONTEXT_VALID_RDI) + sequence = PrintRegister64("rdi", frame_amd64->context.rdi, sequence); + if (frame_amd64->context_validity & StackFrameAMD64::CONTEXT_VALID_RBP) + sequence = PrintRegister64("rbp", frame_amd64->context.rbp, sequence); + if (frame_amd64->context_validity & StackFrameAMD64::CONTEXT_VALID_RSP) + sequence = PrintRegister64("rsp", frame_amd64->context.rsp, sequence); + if (frame_amd64->context_validity & StackFrameAMD64::CONTEXT_VALID_R8) + sequence = PrintRegister64("r8", frame_amd64->context.r8, sequence); + if (frame_amd64->context_validity & StackFrameAMD64::CONTEXT_VALID_R9) + sequence = PrintRegister64("r9", frame_amd64->context.r9, sequence); + if (frame_amd64->context_validity & StackFrameAMD64::CONTEXT_VALID_R10) + sequence = PrintRegister64("r10", frame_amd64->context.r10, sequence); + if (frame_amd64->context_validity & StackFrameAMD64::CONTEXT_VALID_R11) + sequence = PrintRegister64("r11", frame_amd64->context.r11, sequence); + if (frame_amd64->context_validity & StackFrameAMD64::CONTEXT_VALID_R12) + sequence = PrintRegister64("r12", frame_amd64->context.r12, sequence); + if (frame_amd64->context_validity & StackFrameAMD64::CONTEXT_VALID_R13) + sequence = PrintRegister64("r13", frame_amd64->context.r13, sequence); + if (frame_amd64->context_validity & StackFrameAMD64::CONTEXT_VALID_R14) + sequence = PrintRegister64("r14", frame_amd64->context.r14, sequence); + if (frame_amd64->context_validity & StackFrameAMD64::CONTEXT_VALID_R15) + sequence = PrintRegister64("r15", frame_amd64->context.r15, sequence); + if (frame_amd64->context_validity & StackFrameAMD64::CONTEXT_VALID_RIP) + sequence = PrintRegister64("rip", frame_amd64->context.rip, sequence); + } else if (cpu == "sparc") { + const StackFrameSPARC *frame_sparc = + reinterpret_cast(frame); + + if (frame_sparc->context_validity & StackFrameSPARC::CONTEXT_VALID_SP) + sequence = PrintRegister("sp", frame_sparc->context.g_r[14], sequence); + if (frame_sparc->context_validity & StackFrameSPARC::CONTEXT_VALID_FP) + sequence = PrintRegister("fp", frame_sparc->context.g_r[30], sequence); + if (frame_sparc->context_validity & StackFrameSPARC::CONTEXT_VALID_PC) + sequence = PrintRegister("pc", frame_sparc->context.pc, sequence); + } else if (cpu == "arm") { + const StackFrameARM *frame_arm = + reinterpret_cast(frame); + + // Argument registers (caller-saves), which will likely only be valid + // for the youngest frame. + if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_R0) + sequence = PrintRegister("r0", frame_arm->context.iregs[0], sequence); + if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_R1) + sequence = PrintRegister("r1", frame_arm->context.iregs[1], sequence); + if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_R2) + sequence = PrintRegister("r2", frame_arm->context.iregs[2], sequence); + if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_R3) + sequence = PrintRegister("r3", frame_arm->context.iregs[3], sequence); + + // General-purpose callee-saves registers. + if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_R4) + sequence = PrintRegister("r4", frame_arm->context.iregs[4], sequence); + if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_R5) + sequence = PrintRegister("r5", frame_arm->context.iregs[5], sequence); + if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_R6) + sequence = PrintRegister("r6", frame_arm->context.iregs[6], sequence); + if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_R7) + sequence = PrintRegister("r7", frame_arm->context.iregs[7], sequence); + if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_R8) + sequence = PrintRegister("r8", frame_arm->context.iregs[8], sequence); + if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_R9) + sequence = PrintRegister("r9", frame_arm->context.iregs[9], sequence); + if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_R10) + sequence = PrintRegister("r10", frame_arm->context.iregs[10], sequence); + if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_R12) + sequence = PrintRegister("r12", frame_arm->context.iregs[12], sequence); + + // Registers with a dedicated or conventional purpose. + if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_FP) + sequence = PrintRegister("fp", frame_arm->context.iregs[11], sequence); + if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_SP) + sequence = PrintRegister("sp", frame_arm->context.iregs[13], sequence); + if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_LR) + sequence = PrintRegister("lr", frame_arm->context.iregs[14], sequence); + if (frame_arm->context_validity & StackFrameARM::CONTEXT_VALID_PC) + sequence = PrintRegister("pc", frame_arm->context.iregs[15], sequence); + } else if (cpu == "arm64") { + const StackFrameARM64 *frame_arm64 = + reinterpret_cast(frame); + + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_X0) { + sequence = + PrintRegister64("x0", frame_arm64->context.iregs[0], sequence); + } + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_X1) { + sequence = + PrintRegister64("x1", frame_arm64->context.iregs[1], sequence); + } + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_X2) { + sequence = + PrintRegister64("x2", frame_arm64->context.iregs[2], sequence); + } + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_X3) { + sequence = + PrintRegister64("x3", frame_arm64->context.iregs[3], sequence); + } + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_X4) { + sequence = + PrintRegister64("x4", frame_arm64->context.iregs[4], sequence); + } + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_X5) { + sequence = + PrintRegister64("x5", frame_arm64->context.iregs[5], sequence); + } + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_X6) { + sequence = + PrintRegister64("x6", frame_arm64->context.iregs[6], sequence); + } + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_X7) { + sequence = + PrintRegister64("x7", frame_arm64->context.iregs[7], sequence); + } + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_X8) { + sequence = + PrintRegister64("x8", frame_arm64->context.iregs[8], sequence); + } + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_X9) { + sequence = + PrintRegister64("x9", frame_arm64->context.iregs[9], sequence); + } + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_X10) { + sequence = + PrintRegister64("x10", frame_arm64->context.iregs[10], sequence); + } + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_X11) { + sequence = + PrintRegister64("x11", frame_arm64->context.iregs[11], sequence); + } + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_X12) { + sequence = + PrintRegister64("x12", frame_arm64->context.iregs[12], sequence); + } + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_X13) { + sequence = + PrintRegister64("x13", frame_arm64->context.iregs[13], sequence); + } + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_X14) { + sequence = + PrintRegister64("x14", frame_arm64->context.iregs[14], sequence); + } + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_X15) { + sequence = + PrintRegister64("x15", frame_arm64->context.iregs[15], sequence); + } + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_X16) { + sequence = + PrintRegister64("x16", frame_arm64->context.iregs[16], sequence); + } + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_X17) { + sequence = + PrintRegister64("x17", frame_arm64->context.iregs[17], sequence); + } + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_X18) { + sequence = + PrintRegister64("x18", frame_arm64->context.iregs[18], sequence); + } + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_X19) { + sequence = + PrintRegister64("x19", frame_arm64->context.iregs[19], sequence); + } + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_X20) { + sequence = + PrintRegister64("x20", frame_arm64->context.iregs[20], sequence); + } + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_X21) { + sequence = + PrintRegister64("x21", frame_arm64->context.iregs[21], sequence); + } + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_X22) { + sequence = + PrintRegister64("x22", frame_arm64->context.iregs[22], sequence); + } + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_X23) { + sequence = + PrintRegister64("x23", frame_arm64->context.iregs[23], sequence); + } + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_X24) { + sequence = + PrintRegister64("x24", frame_arm64->context.iregs[24], sequence); + } + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_X25) { + sequence = + PrintRegister64("x25", frame_arm64->context.iregs[25], sequence); + } + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_X26) { + sequence = + PrintRegister64("x26", frame_arm64->context.iregs[26], sequence); + } + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_X27) { + sequence = + PrintRegister64("x27", frame_arm64->context.iregs[27], sequence); + } + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_X28) { + sequence = + PrintRegister64("x28", frame_arm64->context.iregs[28], sequence); + } + + // Registers with a dedicated or conventional purpose. + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_FP) { + sequence = + PrintRegister64("fp", frame_arm64->context.iregs[29], sequence); + } + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_LR) { + sequence = + PrintRegister64("lr", frame_arm64->context.iregs[30], sequence); + } + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_SP) { + sequence = + PrintRegister64("sp", frame_arm64->context.iregs[31], sequence); + } + if (frame_arm64->context_validity & StackFrameARM64::CONTEXT_VALID_PC) { + sequence = + PrintRegister64("pc", frame_arm64->context.iregs[32], sequence); + } + } else if (cpu == "mips") { + const StackFrameMIPS* frame_mips = + reinterpret_cast(frame); + + if (frame_mips->context_validity & StackFrameMIPS::CONTEXT_VALID_GP) + sequence = PrintRegister64("gp", + frame_mips->context.iregs[MD_CONTEXT_MIPS_REG_GP], + sequence); + if (frame_mips->context_validity & StackFrameMIPS::CONTEXT_VALID_SP) + sequence = PrintRegister64("sp", + frame_mips->context.iregs[MD_CONTEXT_MIPS_REG_SP], + sequence); + if (frame_mips->context_validity & StackFrameMIPS::CONTEXT_VALID_FP) + sequence = PrintRegister64("fp", + frame_mips->context.iregs[MD_CONTEXT_MIPS_REG_FP], + sequence); + if (frame_mips->context_validity & StackFrameMIPS::CONTEXT_VALID_RA) + sequence = PrintRegister64("ra", + frame_mips->context.iregs[MD_CONTEXT_MIPS_REG_RA], + sequence); + if (frame_mips->context_validity & StackFrameMIPS::CONTEXT_VALID_PC) + sequence = PrintRegister64("pc", frame_mips->context.epc, sequence); + + // Save registers s0-s7 + if (frame_mips->context_validity & StackFrameMIPS::CONTEXT_VALID_S0) + sequence = PrintRegister64("s0", + frame_mips->context.iregs[MD_CONTEXT_MIPS_REG_S0], + sequence); + if (frame_mips->context_validity & StackFrameMIPS::CONTEXT_VALID_S1) + sequence = PrintRegister64("s1", + frame_mips->context.iregs[MD_CONTEXT_MIPS_REG_S1], + sequence); + if (frame_mips->context_validity & StackFrameMIPS::CONTEXT_VALID_S2) + sequence = PrintRegister64("s2", + frame_mips->context.iregs[MD_CONTEXT_MIPS_REG_S2], + sequence); + if (frame_mips->context_validity & StackFrameMIPS::CONTEXT_VALID_S3) + sequence = PrintRegister64("s3", + frame_mips->context.iregs[MD_CONTEXT_MIPS_REG_S3], + sequence); + if (frame_mips->context_validity & StackFrameMIPS::CONTEXT_VALID_S4) + sequence = PrintRegister64("s4", + frame_mips->context.iregs[MD_CONTEXT_MIPS_REG_S4], + sequence); + if (frame_mips->context_validity & StackFrameMIPS::CONTEXT_VALID_S5) + sequence = PrintRegister64("s5", + frame_mips->context.iregs[MD_CONTEXT_MIPS_REG_S5], + sequence); + if (frame_mips->context_validity & StackFrameMIPS::CONTEXT_VALID_S6) + sequence = PrintRegister64("s6", + frame_mips->context.iregs[MD_CONTEXT_MIPS_REG_S6], + sequence); + if (frame_mips->context_validity & StackFrameMIPS::CONTEXT_VALID_S7) + sequence = PrintRegister64("s7", + frame_mips->context.iregs[MD_CONTEXT_MIPS_REG_S7], + sequence); + } + printf("\n Found by: %s\n", frame->trust_description().c_str()); + + // Print stack contents. + if (output_stack_contents && frame_index + 1 < frame_count) { + const std::string indent(" "); + PrintStackContents(indent, frame, stack->frames()->at(frame_index + 1), + cpu, memory, modules, resolver); + } + } +} + +// PrintStackMachineReadable prints the call stack in |stack| to stdout, +// in the following machine readable pipe-delimited text format: +// thread number|frame number|module|function|source file|line|offset +// +// Module, function, source file, and source line may all be empty +// depending on availability. The code offset follows the same rules as +// PrintStack above. +static void PrintStackMachineReadable(int thread_num, const CallStack *stack) { + int frame_count = stack->frames()->size(); + for (int frame_index = 0; frame_index < frame_count; ++frame_index) { + const StackFrame *frame = stack->frames()->at(frame_index); + printf("%d%c%d%c", thread_num, kOutputSeparator, frame_index, + kOutputSeparator); + + uint64_t instruction_address = frame->ReturnAddress(); + + if (frame->module) { + assert(!frame->module->code_file().empty()); + printf("%s", StripSeparator(PathnameStripper::File( + frame->module->code_file())).c_str()); + if (!frame->function_name.empty()) { + printf("%c%s", kOutputSeparator, + StripSeparator(frame->function_name).c_str()); + if (!frame->source_file_name.empty()) { + printf("%c%s%c%d%c0x%" PRIx64, + kOutputSeparator, + StripSeparator(frame->source_file_name).c_str(), + kOutputSeparator, + frame->source_line, + kOutputSeparator, + instruction_address - frame->source_line_base); + } else { + printf("%c%c%c0x%" PRIx64, + kOutputSeparator, // empty source file + kOutputSeparator, // empty source line + kOutputSeparator, + instruction_address - frame->function_base); + } + } else { + printf("%c%c%c%c0x%" PRIx64, + kOutputSeparator, // empty function name + kOutputSeparator, // empty source file + kOutputSeparator, // empty source line + kOutputSeparator, + instruction_address - frame->module->base_address()); + } + } else { + // the printf before this prints a trailing separator for module name + printf("%c%c%c%c0x%" PRIx64, + kOutputSeparator, // empty function name + kOutputSeparator, // empty source file + kOutputSeparator, // empty source line + kOutputSeparator, + instruction_address); + } + printf("\n"); + } +} + +// ContainsModule checks whether a given |module| is in the vector +// |modules_without_symbols|. +static bool ContainsModule( + const vector *modules, + const CodeModule *module) { + assert(modules); + assert(module); + vector::const_iterator iter; + for (iter = modules->begin(); iter != modules->end(); ++iter) { + if (module->debug_file().compare((*iter)->debug_file()) == 0 && + module->debug_identifier().compare((*iter)->debug_identifier()) == 0) { + return true; + } + } + return false; +} + +// PrintModule prints a single |module| to stdout. +// |modules_without_symbols| should contain the list of modules that were +// confirmed to be missing their symbols during the stack walk. +static void PrintModule( + const CodeModule *module, + const vector *modules_without_symbols, + const vector *modules_with_corrupt_symbols, + uint64_t main_address) { + string symbol_issues; + if (ContainsModule(modules_without_symbols, module)) { + symbol_issues = " (WARNING: No symbols, " + + PathnameStripper::File(module->debug_file()) + ", " + + module->debug_identifier() + ")"; + } else if (ContainsModule(modules_with_corrupt_symbols, module)) { + symbol_issues = " (WARNING: Corrupt symbols, " + + PathnameStripper::File(module->debug_file()) + ", " + + module->debug_identifier() + ")"; + } + uint64_t base_address = module->base_address(); + printf("0x%08" PRIx64 " - 0x%08" PRIx64 " %s %s%s%s\n", + base_address, base_address + module->size() - 1, + PathnameStripper::File(module->code_file()).c_str(), + module->version().empty() ? "???" : module->version().c_str(), + main_address != 0 && base_address == main_address ? " (main)" : "", + symbol_issues.c_str()); +} + +// PrintModules prints the list of all loaded |modules| to stdout. +// |modules_without_symbols| should contain the list of modules that were +// confirmed to be missing their symbols during the stack walk. +static void PrintModules( + const CodeModules *modules, + const vector *modules_without_symbols, + const vector *modules_with_corrupt_symbols) { + if (!modules) + return; + + printf("\n"); + printf("Loaded modules:\n"); + + uint64_t main_address = 0; + const CodeModule *main_module = modules->GetMainModule(); + if (main_module) { + main_address = main_module->base_address(); + } + + unsigned int module_count = modules->module_count(); + for (unsigned int module_sequence = 0; + module_sequence < module_count; + ++module_sequence) { + const CodeModule *module = modules->GetModuleAtSequence(module_sequence); + PrintModule(module, modules_without_symbols, modules_with_corrupt_symbols, + main_address); + } +} + +// PrintModulesMachineReadable outputs a list of loaded modules, +// one per line, in the following machine-readable pipe-delimited +// text format: +// Module|{Module Filename}|{Version}|{Debug Filename}|{Debug Identifier}| +// {Base Address}|{Max Address}|{Main} +static void PrintModulesMachineReadable(const CodeModules *modules) { + if (!modules) + return; + + uint64_t main_address = 0; + const CodeModule *main_module = modules->GetMainModule(); + if (main_module) { + main_address = main_module->base_address(); + } + + unsigned int module_count = modules->module_count(); + for (unsigned int module_sequence = 0; + module_sequence < module_count; + ++module_sequence) { + const CodeModule *module = modules->GetModuleAtSequence(module_sequence); + uint64_t base_address = module->base_address(); + printf("Module%c%s%c%s%c%s%c%s%c0x%08" PRIx64 "%c0x%08" PRIx64 "%c%d\n", + kOutputSeparator, + StripSeparator(PathnameStripper::File(module->code_file())).c_str(), + kOutputSeparator, StripSeparator(module->version()).c_str(), + kOutputSeparator, + StripSeparator(PathnameStripper::File(module->debug_file())).c_str(), + kOutputSeparator, + StripSeparator(module->debug_identifier()).c_str(), + kOutputSeparator, base_address, + kOutputSeparator, base_address + module->size() - 1, + kOutputSeparator, + main_module != NULL && base_address == main_address ? 1 : 0); + } +} + +} // namespace + +void PrintProcessState(const ProcessState& process_state, + bool output_stack_contents, + SourceLineResolverInterface* resolver) { + // Print OS and CPU information. + string cpu = process_state.system_info()->cpu; + string cpu_info = process_state.system_info()->cpu_info; + printf("Operating system: %s\n", process_state.system_info()->os.c_str()); + printf(" %s\n", + process_state.system_info()->os_version.c_str()); + printf("CPU: %s\n", cpu.c_str()); + if (!cpu_info.empty()) { + // This field is optional. + printf(" %s\n", cpu_info.c_str()); + } + printf(" %d CPU%s\n", + process_state.system_info()->cpu_count, + process_state.system_info()->cpu_count != 1 ? "s" : ""); + printf("\n"); + + // Print crash information. + if (process_state.crashed()) { + printf("Crash reason: %s\n", process_state.crash_reason().c_str()); + printf("Crash address: 0x%" PRIx64 "\n", process_state.crash_address()); + } else { + printf("No crash\n"); + } + + string assertion = process_state.assertion(); + if (!assertion.empty()) { + printf("Assertion: %s\n", assertion.c_str()); + } + + // Compute process uptime if the process creation and crash times are + // available in the dump. + if (process_state.time_date_stamp() != 0 && + process_state.process_create_time() != 0 && + process_state.time_date_stamp() >= process_state.process_create_time()) { + printf("Process uptime: %d seconds\n", + process_state.time_date_stamp() - + process_state.process_create_time()); + } else { + printf("Process uptime: not available\n"); + } + + // If the thread that requested the dump is known, print it first. + int requesting_thread = process_state.requesting_thread(); + if (requesting_thread != -1) { + printf("\n"); + printf("Thread %d (%s)\n", + requesting_thread, + process_state.crashed() ? "crashed" : + "requested dump, did not crash"); + PrintStack(process_state.threads()->at(requesting_thread), cpu, + output_stack_contents, + process_state.thread_memory_regions()->at(requesting_thread), + process_state.modules(), resolver); + } + + // Print all of the threads in the dump. + int thread_count = process_state.threads()->size(); + for (int thread_index = 0; thread_index < thread_count; ++thread_index) { + if (thread_index != requesting_thread) { + // Don't print the crash thread again, it was already printed. + printf("\n"); + printf("Thread %d\n", thread_index); + PrintStack(process_state.threads()->at(thread_index), cpu, + output_stack_contents, + process_state.thread_memory_regions()->at(thread_index), + process_state.modules(), resolver); + } + } + + PrintModules(process_state.modules(), + process_state.modules_without_symbols(), + process_state.modules_with_corrupt_symbols()); +} + +void PrintProcessStateMachineReadable(const ProcessState& process_state) { + // Print OS and CPU information. + // OS|{OS Name}|{OS Version} + // CPU|{CPU Name}|{CPU Info}|{Number of CPUs} + printf("OS%c%s%c%s\n", kOutputSeparator, + StripSeparator(process_state.system_info()->os).c_str(), + kOutputSeparator, + StripSeparator(process_state.system_info()->os_version).c_str()); + printf("CPU%c%s%c%s%c%d\n", kOutputSeparator, + StripSeparator(process_state.system_info()->cpu).c_str(), + kOutputSeparator, + // this may be empty + StripSeparator(process_state.system_info()->cpu_info).c_str(), + kOutputSeparator, + process_state.system_info()->cpu_count); + + int requesting_thread = process_state.requesting_thread(); + + // Print crash information. + // Crash|{Crash Reason}|{Crash Address}|{Crashed Thread} + printf("Crash%c", kOutputSeparator); + if (process_state.crashed()) { + printf("%s%c0x%" PRIx64 "%c", + StripSeparator(process_state.crash_reason()).c_str(), + kOutputSeparator, process_state.crash_address(), kOutputSeparator); + } else { + // print assertion info, if available, in place of crash reason, + // instead of the unhelpful "No crash" + string assertion = process_state.assertion(); + if (!assertion.empty()) { + printf("%s%c%c", StripSeparator(assertion).c_str(), + kOutputSeparator, kOutputSeparator); + } else { + printf("No crash%c%c", kOutputSeparator, kOutputSeparator); + } + } + + if (requesting_thread != -1) { + printf("%d\n", requesting_thread); + } else { + printf("\n"); + } + + PrintModulesMachineReadable(process_state.modules()); + + // blank line to indicate start of threads + printf("\n"); + + // If the thread that requested the dump is known, print it first. + if (requesting_thread != -1) { + PrintStackMachineReadable(requesting_thread, + process_state.threads()->at(requesting_thread)); + } + + // Print all of the threads in the dump. + int thread_count = process_state.threads()->size(); + for (int thread_index = 0; thread_index < thread_count; ++thread_index) { + if (thread_index != requesting_thread) { + // Don't print the crash thread again, it was already printed. + PrintStackMachineReadable(thread_index, + process_state.threads()->at(thread_index)); + } + } +} + +} // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/processor/stackwalk_common.h b/toolkit/crashreporter/google-breakpad/src/processor/stackwalk_common.h new file mode 100644 index 000000000000..a74f7b6da15f --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/processor/stackwalk_common.h @@ -0,0 +1,49 @@ +// Copyright (c) 2010 Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// stackwalk_common.cc: Module shared by the {micro,mini}dump_stackwalck +// executables to print the content of dumps (w/ stack traces) on the console. + + +#ifndef PROCESSOR_STACKWALK_COMMON_H__ +#define PROCESSOR_STACKWALK_COMMON_H__ + +namespace google_breakpad { + +class ProcessState; +class SourceLineResolverInterface; + +void PrintProcessStateMachineReadable(const ProcessState& process_state); +void PrintProcessState(const ProcessState& process_state, + bool output_stack_contents, + SourceLineResolverInterface* resolver); + +} // namespace google_breakpad + +#endif // PROCESSOR_STACKWALK_COMMON_H__ diff --git a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker.cc b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker.cc index 289312300347..94b66334fe3d 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker.cc @@ -41,21 +41,24 @@ #include "google_breakpad/processor/call_stack.h" #include "google_breakpad/processor/code_module.h" #include "google_breakpad/processor/code_modules.h" -#include "google_breakpad/processor/minidump.h" +#include "google_breakpad/processor/dump_context.h" #include "google_breakpad/processor/stack_frame.h" #include "google_breakpad/processor/stack_frame_symbolizer.h" #include "google_breakpad/processor/system_info.h" #include "processor/linked_ptr.h" -#include "common/logging.h" +#include "processor/logging.h" #include "processor/stackwalker_ppc.h" +#include "processor/stackwalker_ppc64.h" #include "processor/stackwalker_sparc.h" #include "processor/stackwalker_x86.h" #include "processor/stackwalker_amd64.h" #include "processor/stackwalker_arm.h" +#include "processor/stackwalker_arm64.h" +#include "processor/stackwalker_mips.h" namespace google_breakpad { -const int Stackwalker::kRASearchWords = 30; +const int Stackwalker::kRASearchWords = 40; uint32_t Stackwalker::max_frames_ = 1024; bool Stackwalker::max_frames_set_ = false; @@ -73,23 +76,53 @@ Stackwalker::Stackwalker(const SystemInfo* system_info, assert(frame_symbolizer_); } +void InsertSpecialAttentionModule( + StackFrameSymbolizer::SymbolizerResult symbolizer_result, + const CodeModule* module, + vector* modules) { + if (!module) { + return; + } + assert(symbolizer_result == StackFrameSymbolizer::kError || + symbolizer_result == StackFrameSymbolizer::kWarningCorruptSymbols); + bool found = false; + vector::iterator iter; + for (iter = modules->begin(); iter != modules->end(); ++iter) { + if (*iter == module) { + found = true; + break; + } + } + if (!found) { + BPLOG(INFO) << ((symbolizer_result == StackFrameSymbolizer::kError) ? + "Couldn't load symbols for: " : + "Detected corrupt symbols for: ") + << module->debug_file() << "|" << module->debug_identifier(); + modules->push_back(module); + } +} -bool Stackwalker::Walk(CallStack* stack, - vector* modules_without_symbols) { +bool Stackwalker::Walk( + CallStack* stack, + vector* modules_without_symbols, + vector* modules_with_corrupt_symbols) { BPLOG_IF(ERROR, !stack) << "Stackwalker::Walk requires |stack|"; assert(stack); stack->Clear(); BPLOG_IF(ERROR, !modules_without_symbols) << "Stackwalker::Walk requires " << "|modules_without_symbols|"; + BPLOG_IF(ERROR, !modules_without_symbols) << "Stackwalker::Walk requires " + << "|modules_with_corrupt_symbols|"; assert(modules_without_symbols); + assert(modules_with_corrupt_symbols); // Begin with the context frame, and keep getting callers until there are // no more. // Keep track of the number of scanned or otherwise dubious frames seen // so far, as the caller may have set a limit. - uint32_t n_scanned_frames = 0; + uint32_t scanned_frames = 0; // Take ownership of the pointer returned by GetContextFrame. scoped_ptr frame(GetContextFrame()); @@ -103,30 +136,24 @@ bool Stackwalker::Walk(CallStack* stack, StackFrameSymbolizer::SymbolizerResult symbolizer_result = frame_symbolizer_->FillSourceLineInfo(modules_, system_info_, frame.get()); - if (symbolizer_result == StackFrameSymbolizer::kInterrupt) { - BPLOG(INFO) << "Stack walk is interrupted."; - return false; - } - - // Keep track of modules that have no symbols. - if (symbolizer_result == StackFrameSymbolizer::kError && - frame->module != NULL) { - bool found = false; - vector::iterator iter; - for (iter = modules_without_symbols->begin(); - iter != modules_without_symbols->end(); - ++iter) { - if (*iter == frame->module) { - found = true; - break; - } - } - if (!found) { - BPLOG(INFO) << "Couldn't load symbols for: " - << frame->module->debug_file() << "|" - << frame->module->debug_identifier(); - modules_without_symbols->push_back(frame->module); - } + switch (symbolizer_result) { + case StackFrameSymbolizer::kInterrupt: + BPLOG(INFO) << "Stack walk is interrupted."; + return false; + break; + case StackFrameSymbolizer::kError: + InsertSpecialAttentionModule(symbolizer_result, frame->module, + modules_without_symbols); + break; + case StackFrameSymbolizer::kWarningCorruptSymbols: + InsertSpecialAttentionModule(symbolizer_result, frame->module, + modules_with_corrupt_symbols); + break; + case StackFrameSymbolizer::kNoError: + break; + default: + assert(false); + break; } // Keep track of the number of dubious frames so far. @@ -134,7 +161,7 @@ bool Stackwalker::Walk(CallStack* stack, case StackFrame::FRAME_TRUST_NONE: case StackFrame::FRAME_TRUST_SCAN: case StackFrame::FRAME_TRUST_CFI_SCAN: - n_scanned_frames++; + scanned_frames++; break; default: break; @@ -144,7 +171,7 @@ bool Stackwalker::Walk(CallStack* stack, // over the frame, because the stack now owns it. stack->frames_.push_back(frame.release()); if (stack->frames_.size() > max_frames_) { - // Only emit an error message in the case where the limit that we + // Only emit an error message in the case where the limit // reached is the default limit, not set by the user. if (!max_frames_set_) BPLOG(ERROR) << "The stack is over " << max_frames_ << " frames."; @@ -152,7 +179,7 @@ bool Stackwalker::Walk(CallStack* stack, } // Get the next frame and take ownership. - bool stack_scan_allowed = n_scanned_frames < max_frames_scanned_; + bool stack_scan_allowed = scanned_frames < max_frames_scanned_; frame.reset(GetCallerFrame(stack, stack_scan_allowed)); } @@ -163,7 +190,7 @@ bool Stackwalker::Walk(CallStack* stack, // static Stackwalker* Stackwalker::StackwalkerForCPU( const SystemInfo* system_info, - MinidumpContext* context, + DumpContext* context, MemoryRegion* memory, const CodeModules* modules, StackFrameSymbolizer* frame_symbolizer) { @@ -188,6 +215,12 @@ Stackwalker* Stackwalker::StackwalkerForCPU( memory, modules, frame_symbolizer); break; + case MD_CONTEXT_PPC64: + cpu_stackwalker = new StackwalkerPPC64(system_info, + context->GetContextPPC64(), + memory, modules, frame_symbolizer); + break; + case MD_CONTEXT_AMD64: cpu_stackwalker = new StackwalkerAMD64(system_info, context->GetContextAMD64(), @@ -199,8 +232,15 @@ Stackwalker* Stackwalker::StackwalkerForCPU( context->GetContextSPARC(), memory, modules, frame_symbolizer); break; + + case MD_CONTEXT_MIPS: + cpu_stackwalker = new StackwalkerMIPS(system_info, + context->GetContextMIPS(), + memory, modules, frame_symbolizer); + break; case MD_CONTEXT_ARM: + { int fp_register = -1; if (system_info->os_short == "ios") fp_register = MD_CONTEXT_ARM_REG_IOS_FP; @@ -209,6 +249,14 @@ Stackwalker* Stackwalker::StackwalkerForCPU( fp_register, memory, modules, frame_symbolizer); break; + } + + case MD_CONTEXT_ARM64: + cpu_stackwalker = new StackwalkerARM64(system_info, + context->GetContextARM64(), + memory, modules, + frame_symbolizer); + break; } BPLOG_IF(ERROR, !cpu_stackwalker) << "Unknown CPU type " << HexString(cpu) << @@ -234,7 +282,8 @@ bool Stackwalker::InstructionAddressSeemsValid(uint64_t address) { return true; } - if (symbolizer_result != StackFrameSymbolizer::kNoError) { + if (symbolizer_result != StackFrameSymbolizer::kNoError && + symbolizer_result != StackFrameSymbolizer::kWarningCorruptSymbols) { // Some error occurred during symbolization, but the address is within a // known module return true; diff --git a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_address_list.cc b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_address_list.cc new file mode 100644 index 000000000000..e81fec282c19 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_address_list.cc @@ -0,0 +1,92 @@ +// Copyright (c) 2013 Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// stackwalker_address_list.cc: a pseudo stack walker. +// +// See stackwalker_address_list.h for documentation. +// +// Author: Chris Hamilton + +#include + +#include + +#include "google_breakpad/processor/call_stack.h" +#include "google_breakpad/processor/memory_region.h" +#include "google_breakpad/processor/source_line_resolver_interface.h" +#include "google_breakpad/processor/stack_frame.h" +#include "processor/logging.h" +#include "processor/stackwalker_address_list.h" + +namespace google_breakpad { + +StackwalkerAddressList::StackwalkerAddressList( + const uint64_t* frames, + size_t frame_count, + const CodeModules* modules, + StackFrameSymbolizer* frame_symbolizer) + : Stackwalker(NULL, NULL, modules, frame_symbolizer), + frames_(frames), + frame_count_(frame_count) { + assert(frames); + assert(frame_symbolizer); +} + +StackFrame* StackwalkerAddressList::GetContextFrame() { + if (frame_count_ == 0) + return NULL; + + StackFrame* frame = new StackFrame(); + frame->instruction = frames_[0]; + frame->trust = StackFrame::FRAME_TRUST_PREWALKED; + return frame; +} + +StackFrame* StackwalkerAddressList::GetCallerFrame(const CallStack* stack, + bool stack_scan_allowed) { + if (!stack) { + BPLOG(ERROR) << "Can't get caller frame without stack"; + return NULL; + } + + size_t frame_index = stack->frames()->size(); + + // There are no more frames to fetch. + if (frame_index >= frame_count_) + return NULL; + + // All frames have the highest level of trust because they were + // explicitly provided. + StackFrame* frame = new StackFrame(); + frame->instruction = frames_[frame_index]; + frame->trust = StackFrame::FRAME_TRUST_PREWALKED; + return frame; +} + +} // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stacktrace_generic-inl.h b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_address_list.h similarity index 52% rename from toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stacktrace_generic-inl.h rename to toolkit/crashreporter/google-breakpad/src/processor/stackwalker_address_list.h index fad81d3e3f4f..0f8c989efd12 100644 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stacktrace_generic-inl.h +++ b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_address_list.h @@ -1,4 +1,4 @@ -// Copyright (c) 2000 - 2007, Google Inc. +// Copyright (c) 2013 Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -26,34 +26,47 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// stackwalker_address_list.h: a pseudo stackwalker. // -// Portable implementation - just use glibc +// Doesn't actually walk a stack, rather initializes a CallStack given an +// explicit list of already walked return addresses. // -// Note: The glibc implementation may cause a call to malloc. -// This can cause a deadlock in HeapProfiler. -#include -#include -#include "stacktrace.h" +// Author: Chris Hamilton -_START_GOOGLE_NAMESPACE_ +#ifndef PROCESSOR_STACKWALKER_ADDRESS_LIST_H_ +#define PROCESSOR_STACKWALKER_ADDRESS_LIST_H_ -// If you change this function, also change GetStackFrames below. -int GetStackTrace(void** result, int max_depth, int skip_count) { - static const int kStackLength = 64; - void * stack[kStackLength]; - int size; +#include "common/basictypes.h" +#include "google_breakpad/common/breakpad_types.h" +#include "google_breakpad/processor/stackwalker.h" - size = backtrace(stack, kStackLength); - skip_count++; // we want to skip the current frame as well - int result_count = size - skip_count; - if (result_count < 0) - result_count = 0; - if (result_count > max_depth) - result_count = max_depth; - for (int i = 0; i < result_count; i++) - result[i] = stack[i + skip_count]; +namespace google_breakpad { - return result_count; -} +class CodeModules; -_END_GOOGLE_NAMESPACE_ +class StackwalkerAddressList : public Stackwalker { + public: + // Initializes this stack walker with an explicit set of frame addresses. + // |modules| and |frame_symbolizer| are passed directly through to the base + // Stackwalker constructor. + StackwalkerAddressList(const uint64_t* frames, + size_t frame_count, + const CodeModules* modules, + StackFrameSymbolizer* frame_symbolizer); + + private: + // Implementation of Stackwalker. + virtual StackFrame* GetContextFrame(); + virtual StackFrame* GetCallerFrame(const CallStack* stack, + bool stack_scan_allowed); + + const uint64_t* frames_; + size_t frame_count_; + + DISALLOW_COPY_AND_ASSIGN(StackwalkerAddressList); +}; + +} // namespace google_breakpad + +#endif // PROCESSOR_STACKWALKER_ADDRESS_LIST_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_address_list_unittest.cc b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_address_list_unittest.cc new file mode 100644 index 000000000000..ab4e9c08807a --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_address_list_unittest.cc @@ -0,0 +1,197 @@ +// Copyright (c) 2013, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// stackwalker_address_list_unittest.cc: Unit tests for the +// StackwalkerAddressList class. +// +// Author: Chris Hamilton + +#include +#include + +#include "breakpad_googletest_includes.h" +#include "common/using_std_string.h" +#include "google_breakpad/common/minidump_format.h" +#include "google_breakpad/processor/basic_source_line_resolver.h" +#include "google_breakpad/processor/call_stack.h" +#include "google_breakpad/processor/code_module.h" +#include "google_breakpad/processor/source_line_resolver_interface.h" +#include "google_breakpad/processor/stack_frame.h" +#include "processor/stackwalker_unittest_utils.h" +#include "processor/stackwalker_address_list.h" + +using google_breakpad::BasicSourceLineResolver; +using google_breakpad::CallStack; +using google_breakpad::CodeModule; +using google_breakpad::StackFrameSymbolizer; +using google_breakpad::StackFrame; +using google_breakpad::Stackwalker; +using google_breakpad::StackwalkerAddressList; +using std::vector; +using testing::_; +using testing::AnyNumber; +using testing::Return; +using testing::SetArgumentPointee; + +#define arraysize(f) (sizeof(f) / sizeof(*f)) + +// Addresses and sizes of a couple dummy modules. +uint64_t kModule1Base = 0x40000000; +uint64_t kModule1Size = 0x10000; +uint64_t kModule2Base = 0x50000000; +uint64_t kModule2Size = 0x10000; + +// A handful of addresses that lie within the modules above. +const uint64_t kDummyFrames[] = { + 0x50003000, 0x50002000, 0x50001000, 0x40002000, 0x40001000 }; + +class StackwalkerAddressListTest : public testing::Test { + public: + StackwalkerAddressListTest() + : // Give the two modules reasonable standard locations and names + // for tests to play with. + module1(kModule1Base, kModule1Size, "module1", "version1"), + module2(kModule2Base, kModule2Size, "module2", "version2") { + // Create some modules with some stock debugging information. + modules.Add(&module1); + modules.Add(&module2); + + // By default, none of the modules have symbol info; call + // SetModuleSymbols to override this. + EXPECT_CALL(supplier, GetCStringSymbolData(_, _, _, _, _)) + .WillRepeatedly(Return(MockSymbolSupplier::NOT_FOUND)); + + // Avoid GMOCK WARNING "Uninteresting mock function call - returning + // directly" for FreeSymbolData(). + EXPECT_CALL(supplier, FreeSymbolData(_)).Times(AnyNumber()); + } + + // Set the Breakpad symbol information that supplier should return for + // MODULE to INFO. + void SetModuleSymbols(MockCodeModule *module, const string &info) { + size_t buffer_size; + char *buffer = supplier.CopySymbolDataAndOwnTheCopy(info, &buffer_size); + EXPECT_CALL(supplier, GetCStringSymbolData(module, NULL, _, _, _)) + .WillRepeatedly(DoAll(SetArgumentPointee<3>(buffer), + SetArgumentPointee<4>(buffer_size), + Return(MockSymbolSupplier::FOUND))); + } + + void CheckCallStack(const CallStack& call_stack) { + const std::vector* frames = call_stack.frames(); + ASSERT_EQ(arraysize(kDummyFrames), frames->size()); + for (size_t i = 0; i < arraysize(kDummyFrames); ++i) { + ASSERT_EQ(kDummyFrames[i], frames->at(i)->instruction); + ASSERT_EQ(StackFrame::FRAME_TRUST_PREWALKED, frames->at(i)->trust); + } + ASSERT_EQ(static_cast(&module2), frames->at(0)->module); + ASSERT_EQ(static_cast(&module2), frames->at(1)->module); + ASSERT_EQ(static_cast(&module2), frames->at(2)->module); + ASSERT_EQ(static_cast(&module1), frames->at(3)->module); + ASSERT_EQ(static_cast(&module1), frames->at(4)->module); + } + + MockCodeModule module1; + MockCodeModule module2; + MockCodeModules modules; + MockSymbolSupplier supplier; + BasicSourceLineResolver resolver; +}; + +TEST_F(StackwalkerAddressListTest, ScanWithoutSymbols) { + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); + StackwalkerAddressList walker(kDummyFrames, arraysize(kDummyFrames), + &modules, &frame_symbolizer); + + CallStack call_stack; + vector modules_without_symbols; + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); + + // The stack starts in module2, so we expect that to be the first module + // found without symbols. + ASSERT_EQ(2U, modules_without_symbols.size()); + ASSERT_EQ("module2", modules_without_symbols[0]->debug_file()); + ASSERT_EQ("module1", modules_without_symbols[1]->debug_file()); + ASSERT_EQ(0u, modules_with_corrupt_symbols.size()); + + ASSERT_NO_FATAL_FAILURE(CheckCallStack(call_stack)); +} + +TEST_F(StackwalkerAddressListTest, ScanWithSymbols) { + // File : FILE number(dex) name + // Function: FUNC address(hex) size(hex) parameter_size(hex) name + // Line : address(hex) size(hex) line(dec) filenum(dec) + SetModuleSymbols(&module2, + "FILE 1 module2.cc\n" + "FUNC 3000 100 10 mod2func3\n" + "3000 10 1 1\n" + "FUNC 2000 200 10 mod2func2\n" + "FUNC 1000 300 10 mod2func1\n"); + SetModuleSymbols(&module1, + "FUNC 2000 200 10 mod1func2\n" + "FUNC 1000 300 10 mod1func1\n"); + + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); + StackwalkerAddressList walker(kDummyFrames, arraysize(kDummyFrames), + &modules, &frame_symbolizer); + + CallStack call_stack; + vector modules_without_symbols; + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); + + ASSERT_EQ(0u, modules_without_symbols.size()); + ASSERT_EQ(0u, modules_with_corrupt_symbols.size()); + + ASSERT_NO_FATAL_FAILURE(CheckCallStack(call_stack)); + + const std::vector* frames = call_stack.frames(); + + // We have full file/line information for the first function call. + ASSERT_EQ("mod2func3", frames->at(0)->function_name); + ASSERT_EQ(0x50003000u, frames->at(0)->function_base); + ASSERT_EQ("module2.cc", frames->at(0)->source_file_name); + ASSERT_EQ(1, frames->at(0)->source_line); + ASSERT_EQ(0x50003000u, frames->at(0)->source_line_base); + + ASSERT_EQ("mod2func2", frames->at(1)->function_name); + ASSERT_EQ(0x50002000u, frames->at(1)->function_base); + + ASSERT_EQ("mod2func1", frames->at(2)->function_name); + ASSERT_EQ(0x50001000u, frames->at(2)->function_base); + + ASSERT_EQ("mod1func2", frames->at(3)->function_name); + ASSERT_EQ(0x40002000u, frames->at(3)->function_base); + + ASSERT_EQ("mod1func1", frames->at(4)->function_name); + ASSERT_EQ(0x40001000u, frames->at(4)->function_base); +} diff --git a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_amd64.cc b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_amd64.cc index d1fc1df4598c..f252a33b7157 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_amd64.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_amd64.cc @@ -40,8 +40,9 @@ #include "google_breakpad/processor/memory_region.h" #include "google_breakpad/processor/source_line_resolver_interface.h" #include "google_breakpad/processor/stack_frame_cpu.h" +#include "google_breakpad/processor/system_info.h" #include "processor/cfi_frame_info.h" -#include "common/logging.h" +#include "processor/logging.h" #include "processor/stackwalker_amd64.h" namespace google_breakpad { @@ -54,39 +55,39 @@ StackwalkerAMD64::cfi_register_map_[] = { // flags here really means that the walker should assume they're // unchanged if the CFI doesn't mention them --- clearly wrong for $rip // and $rsp. - { ToUniqueString("$rax"), NULL, false, + { "$rax", NULL, false, StackFrameAMD64::CONTEXT_VALID_RAX, &MDRawContextAMD64::rax }, - { ToUniqueString("$rdx"), NULL, false, + { "$rdx", NULL, false, StackFrameAMD64::CONTEXT_VALID_RDX, &MDRawContextAMD64::rdx }, - { ToUniqueString("$rcx"), NULL, false, + { "$rcx", NULL, false, StackFrameAMD64::CONTEXT_VALID_RCX, &MDRawContextAMD64::rcx }, - { ToUniqueString("$rbx"), NULL, true, + { "$rbx", NULL, true, StackFrameAMD64::CONTEXT_VALID_RBX, &MDRawContextAMD64::rbx }, - { ToUniqueString("$rsi"), NULL, false, + { "$rsi", NULL, false, StackFrameAMD64::CONTEXT_VALID_RSI, &MDRawContextAMD64::rsi }, - { ToUniqueString("$rdi"), NULL, false, + { "$rdi", NULL, false, StackFrameAMD64::CONTEXT_VALID_RDI, &MDRawContextAMD64::rdi }, - { ToUniqueString("$rbp"), NULL, true, + { "$rbp", NULL, true, StackFrameAMD64::CONTEXT_VALID_RBP, &MDRawContextAMD64::rbp }, - { ToUniqueString("$rsp"), ToUniqueString(".cfa"), false, + { "$rsp", ".cfa", false, StackFrameAMD64::CONTEXT_VALID_RSP, &MDRawContextAMD64::rsp }, - { ToUniqueString("$r8"), NULL, false, + { "$r8", NULL, false, StackFrameAMD64::CONTEXT_VALID_R8, &MDRawContextAMD64::r8 }, - { ToUniqueString("$r9"), NULL, false, + { "$r9", NULL, false, StackFrameAMD64::CONTEXT_VALID_R9, &MDRawContextAMD64::r9 }, - { ToUniqueString("$r10"), NULL, false, + { "$r10", NULL, false, StackFrameAMD64::CONTEXT_VALID_R10, &MDRawContextAMD64::r10 }, - { ToUniqueString("$r11"), NULL, false, + { "$r11", NULL, false, StackFrameAMD64::CONTEXT_VALID_R11, &MDRawContextAMD64::r11 }, - { ToUniqueString("$r12"), NULL, true, + { "$r12", NULL, true, StackFrameAMD64::CONTEXT_VALID_R12, &MDRawContextAMD64::r12 }, - { ToUniqueString("$r13"), NULL, true, + { "$r13", NULL, true, StackFrameAMD64::CONTEXT_VALID_R13, &MDRawContextAMD64::r13 }, - { ToUniqueString("$r14"), NULL, true, + { "$r14", NULL, true, StackFrameAMD64::CONTEXT_VALID_R14, &MDRawContextAMD64::r14 }, - { ToUniqueString("$r15"), NULL, true, + { "$r15", NULL, true, StackFrameAMD64::CONTEXT_VALID_R15, &MDRawContextAMD64::r15 }, - { ToUniqueString("$rip"), ToUniqueString(".ra"), false, + { "$rip", ".ra", false, StackFrameAMD64::CONTEXT_VALID_RIP, &MDRawContextAMD64::rip }, }; @@ -101,10 +102,9 @@ StackwalkerAMD64::StackwalkerAMD64(const SystemInfo* system_info, (sizeof(cfi_register_map_) / sizeof(cfi_register_map_[0]))) { } -uint64_t StackFrameAMD64::ReturnAddress() const -{ +uint64_t StackFrameAMD64::ReturnAddress() const { assert(context_validity & StackFrameAMD64::CONTEXT_VALID_RIP); - return context.rip; + return context.rip; } StackFrame* StackwalkerAMD64::GetContextFrame() { @@ -147,13 +147,60 @@ StackFrameAMD64* StackwalkerAMD64::GetCallerByCFIFrameInfo( return frame.release(); } +StackFrameAMD64* StackwalkerAMD64::GetCallerByFramePointerRecovery( + const vector& frames) { + StackFrameAMD64* last_frame = static_cast(frames.back()); + uint64_t last_rsp = last_frame->context.rsp; + uint64_t last_rbp = last_frame->context.rbp; + + // Assume the presence of a frame pointer. This is not mandated by the + // AMD64 ABI, c.f. section 3.2.2 footnote 7, though it is typical for + // compilers to still preserve the frame pointer and not treat %rbp as a + // general purpose register. + // + // With this assumption, the CALL instruction pushes the return address + // onto the stack and sets %rip to the procedure to enter. The procedure + // then establishes the stack frame with a prologue that PUSHes the current + // %rbp onto the stack, MOVes the current %rsp to %rbp, and then allocates + // space for any local variables. Using this procedure linking information, + // it is possible to locate frame information for the callee: + // + // %caller_rsp = *(%callee_rbp + 16) + // %caller_rip = *(%callee_rbp + 8) + // %caller_rbp = *(%callee_rbp) + + uint64_t caller_rip, caller_rbp; + if (memory_->GetMemoryAtAddress(last_rbp + 8, &caller_rip) && + memory_->GetMemoryAtAddress(last_rbp, &caller_rbp)) { + uint64_t caller_rsp = last_rbp + 16; + + // Simple sanity check that the stack is growing downwards as expected. + if (caller_rbp < last_rbp || caller_rsp < last_rsp) + return NULL; + + StackFrameAMD64* frame = new StackFrameAMD64(); + frame->trust = StackFrame::FRAME_TRUST_FP; + frame->context = last_frame->context; + frame->context.rip = caller_rip; + frame->context.rsp = caller_rsp; + frame->context.rbp = caller_rbp; + frame->context_validity = StackFrameAMD64::CONTEXT_VALID_RIP | + StackFrameAMD64::CONTEXT_VALID_RSP | + StackFrameAMD64::CONTEXT_VALID_RBP; + return frame; + } + + return NULL; +} + StackFrameAMD64* StackwalkerAMD64::GetCallerByStackScan( const vector &frames) { StackFrameAMD64* last_frame = static_cast(frames.back()); uint64_t last_rsp = last_frame->context.rsp; uint64_t caller_rip_address, caller_rip; - if (!ScanForReturnAddress(last_rsp, &caller_rip_address, &caller_rip)) { + if (!ScanForReturnAddress(last_rsp, &caller_rip_address, &caller_rip, + frames.size() == 1 /* is_context_frame */)) { // No plausible return address was found. return NULL; } @@ -213,8 +260,12 @@ StackFrame* StackwalkerAMD64::GetCallerFrame(const CallStack* stack, if (cfi_frame_info.get()) new_frame.reset(GetCallerByCFIFrameInfo(frames, cfi_frame_info.get())); - // If CFI failed, or there wasn't CFI available, fall back - // to stack scanning. + // If CFI was not available or failed, try using frame pointer recovery. + if (!new_frame.get()) { + new_frame.reset(GetCallerByFramePointerRecovery(frames)); + } + + // If all else fails, fall back to stack scanning. if (stack_scan_allowed && !new_frame.get()) { new_frame.reset(GetCallerByStackScan(frames)); } @@ -223,6 +274,16 @@ StackFrame* StackwalkerAMD64::GetCallerFrame(const CallStack* stack, if (!new_frame.get()) return NULL; + if (system_info_->os_short == "nacl") { + // Apply constraints from Native Client's x86-64 sandbox. These + // registers have the 4GB-aligned sandbox base address (from r15) + // added to them, and only the bottom 32 bits are relevant for + // stack walking. + new_frame->context.rip = static_cast(new_frame->context.rip); + new_frame->context.rsp = static_cast(new_frame->context.rsp); + new_frame->context.rbp = static_cast(new_frame->context.rbp); + } + // Treat an instruction address of 0 as end-of-stack. if (new_frame->context.rip == 0) return NULL; diff --git a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_amd64.h b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_amd64.h index acdd2c2f635d..8f3dbd528024 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_amd64.h +++ b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_amd64.h @@ -78,6 +78,14 @@ class StackwalkerAMD64 : public Stackwalker { StackFrameAMD64* GetCallerByCFIFrameInfo(const vector &frames, CFIFrameInfo* cfi_frame_info); + // Assumes a traditional frame layout where the frame pointer has not been + // omitted. The expectation is that caller's %rbp is pushed to the stack + // after the return address of the callee, and that the callee's %rsp can + // be used to find the pushed %rbp. + // Caller owns the returned frame object. Returns NULL on failure. + StackFrameAMD64* GetCallerByFramePointerRecovery( + const vector& frames); + // Scan the stack for plausible return addresses. The caller takes ownership // of the returned frame. Return NULL on failure. StackFrameAMD64* GetCallerByStackScan(const vector &frames); diff --git a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_amd64_unittest.cc b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_amd64_unittest.cc index 8faf09ab8312..a54198bfd0af 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_amd64_unittest.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_amd64_unittest.cc @@ -53,6 +53,7 @@ using google_breakpad::CodeModule; using google_breakpad::StackFrameSymbolizer; using google_breakpad::StackFrame; using google_breakpad::StackFrameAMD64; +using google_breakpad::Stackwalker; using google_breakpad::StackwalkerAMD64; using google_breakpad::SystemInfo; using google_breakpad::test_assembler::kLittleEndian; @@ -60,6 +61,7 @@ using google_breakpad::test_assembler::Label; using google_breakpad::test_assembler::Section; using std::vector; using testing::_; +using testing::AnyNumber; using testing::Return; using testing::SetArgumentPointee; using testing::Test; @@ -88,16 +90,25 @@ class StackwalkerAMD64Fixture { // By default, none of the modules have symbol info; call // SetModuleSymbols to override this. - EXPECT_CALL(supplier, GetCStringSymbolData(_, _, _, _)) + EXPECT_CALL(supplier, GetCStringSymbolData(_, _, _, _, _)) .WillRepeatedly(Return(MockSymbolSupplier::NOT_FOUND)); + + // Avoid GMOCK WARNING "Uninteresting mock function call - returning + // directly" for FreeSymbolData(). + EXPECT_CALL(supplier, FreeSymbolData(_)).Times(AnyNumber()); + + // Reset max_frames_scanned since it's static. + Stackwalker::set_max_frames_scanned(1024); } // Set the Breakpad symbol information that supplier should return for // MODULE to INFO. void SetModuleSymbols(MockCodeModule *module, const string &info) { - char *buffer = supplier.CopySymbolDataAndOwnTheCopy(info); - EXPECT_CALL(supplier, GetCStringSymbolData(module, &system_info, _, _)) + size_t buffer_size; + char *buffer = supplier.CopySymbolDataAndOwnTheCopy(info, &buffer_size); + EXPECT_CALL(supplier, GetCStringSymbolData(module, &system_info, _, _, _)) .WillRepeatedly(DoAll(SetArgumentPointee<3>(buffer), + SetArgumentPointee<4>(buffer_size), Return(MockSymbolSupplier::FOUND))); } @@ -146,9 +157,12 @@ TEST_F(SanityCheck, NoResolver) { &frame_symbolizer); // This should succeed even without a resolver or supplier. vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(1U, modules_without_symbols.size()); ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_GE(1U, frames->size()); StackFrameAMD64 *frame = static_cast(frames->at(0)); @@ -169,9 +183,12 @@ TEST_F(GetContextFrame, Simple) { StackwalkerAMD64 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(1U, modules_without_symbols.size()); ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_GE(1U, frames->size()); StackFrameAMD64 *frame = static_cast(frames->at(0)); @@ -190,9 +207,12 @@ TEST_F(GetContextFrame, NoStackMemory) { StackwalkerAMD64 walker(&system_info, &raw_context, NULL, &modules, &frame_symbolizer); vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(1U, modules_without_symbols.size()); ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_GE(1U, frames->size()); StackFrameAMD64 *frame = static_cast(frames->at(0)); @@ -248,10 +268,13 @@ TEST_F(GetCallerFrame, ScanWithoutSymbols) { StackwalkerAMD64 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(2U, modules_without_symbols.size()); ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); ASSERT_EQ("module2", modules_without_symbols[1]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(3U, frames->size()); @@ -320,8 +343,11 @@ TEST_F(GetCallerFrame, ScanWithFunctionSymbols) { StackwalkerAMD64 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(2U, frames->size()); @@ -344,6 +370,68 @@ TEST_F(GetCallerFrame, ScanWithFunctionSymbols) { EXPECT_EQ(0x50000000b0000100ULL, frame1->function_base); } +// Test that set_max_frames_scanned prevents using stack scanning +// to find caller frames. +TEST_F(GetCallerFrame, ScanningNotAllowed) { + // When the stack walker resorts to scanning the stack, + // only addresses located within loaded modules are + // considered valid return addresses. + stack_section.start() = 0x8000000080000000ULL; + uint64_t return_address1 = 0x50000000b0000100ULL; + uint64_t return_address2 = 0x50000000b0000900ULL; + Label frame1_sp, frame2_sp, frame1_rbp; + stack_section + // frame 0 + .Append(16, 0) // space + + .D64(0x40000000b0000000ULL) // junk that's not + .D64(0x50000000d0000000ULL) // a return address + + .D64(return_address1) // actual return address + // frame 1 + .Mark(&frame1_sp) + .Append(16, 0) // space + + .D64(0x40000000b0000000ULL) // more junk + .D64(0x50000000d0000000ULL) + + .Mark(&frame1_rbp) + .D64(stack_section.start()) // This is in the right place to be + // a saved rbp, but it's bogus, so + // we shouldn't report it. + + .D64(return_address2) // actual return address + // frame 2 + .Mark(&frame2_sp) + .Append(32, 0); // end of stack + + RegionFromSection(); + + raw_context.rip = 0x40000000c0000200ULL; + raw_context.rbp = frame1_rbp.Value(); + raw_context.rsp = stack_section.start().Value(); + + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); + StackwalkerAMD64 walker(&system_info, &raw_context, &stack_region, &modules, + &frame_symbolizer); + Stackwalker::set_max_frames_scanned(0); + + vector modules_without_symbols; + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); + ASSERT_EQ(1U, modules_without_symbols.size()); + ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); + frames = call_stack.frames(); + ASSERT_EQ(1U, frames->size()); + + StackFrameAMD64 *frame0 = static_cast(frames->at(0)); + EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame0->trust); + ASSERT_EQ(StackFrameAMD64::CONTEXT_VALID_ALL, frame0->context_validity); + EXPECT_EQ(0, memcmp(&raw_context, &frame0->context, sizeof(raw_context))); +} + TEST_F(GetCallerFrame, CallerPushedRBP) { // Functions typically push their %rbp upon entry and set %rbp pointing // there. If stackwalking finds a plausible address for the next frame's @@ -387,8 +475,11 @@ TEST_F(GetCallerFrame, CallerPushedRBP) { StackwalkerAMD64 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(2U, frames->size()); @@ -400,7 +491,7 @@ TEST_F(GetCallerFrame, CallerPushedRBP) { EXPECT_EQ(0x40000000c0000100ULL, frame0->function_base); StackFrameAMD64 *frame1 = static_cast(frames->at(1)); - EXPECT_EQ(StackFrame::FRAME_TRUST_SCAN, frame1->trust); + EXPECT_EQ(StackFrame::FRAME_TRUST_FP, frame1->trust); ASSERT_EQ((StackFrameAMD64::CONTEXT_VALID_RIP | StackFrameAMD64::CONTEXT_VALID_RSP | StackFrameAMD64::CONTEXT_VALID_RBP), @@ -465,8 +556,11 @@ struct CFIFixture: public StackwalkerAMD64Fixture { StackwalkerAMD64 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(2U, frames->size()); diff --git a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_arm.cc b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_arm.cc index f0a49611b2a1..e4fc58697d15 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_arm.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_arm.cc @@ -41,7 +41,7 @@ #include "google_breakpad/processor/source_line_resolver_interface.h" #include "google_breakpad/processor/stack_frame_cpu.h" #include "processor/cfi_frame_info.h" -#include "common/logging.h" +#include "processor/logging.h" #include "processor/stackwalker_arm.h" namespace google_breakpad { @@ -81,20 +81,11 @@ StackFrameARM* StackwalkerARM::GetCallerByCFIFrameInfo( CFIFrameInfo* cfi_frame_info) { StackFrameARM* last_frame = static_cast(frames.back()); - static const UniqueString *register_names[] = { - ToUniqueString("r0"), ToUniqueString("r1"), - ToUniqueString("r2"), ToUniqueString("r3"), - ToUniqueString("r4"), ToUniqueString("r5"), - ToUniqueString("r6"), ToUniqueString("r7"), - ToUniqueString("r8"), ToUniqueString("r9"), - ToUniqueString("r10"), ToUniqueString("r11"), - ToUniqueString("r12"), ToUniqueString("sp"), - ToUniqueString("lr"), ToUniqueString("pc"), - ToUniqueString("f0"), ToUniqueString("f1"), - ToUniqueString("f2"), ToUniqueString("f3"), - ToUniqueString("f4"), ToUniqueString("f5"), - ToUniqueString("f6"), ToUniqueString("f7"), - ToUniqueString("fps"), ToUniqueString("cpsr"), + static const char* register_names[] = { + "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", + "r8", "r9", "r10", "r11", "r12", "sp", "lr", "pc", + "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", + "fps", "cpsr", NULL }; @@ -102,7 +93,7 @@ StackFrameARM* StackwalkerARM::GetCallerByCFIFrameInfo( CFIFrameInfo::RegisterValueMap callee_registers; for (int i = 0; register_names[i]; i++) if (last_frame->context_validity & StackFrameARM::RegisterValidFlag(i)) - callee_registers.set(register_names[i], last_frame->context.iregs[i]); + callee_registers[register_names[i]] = last_frame->context.iregs[i]; // Use the STACK CFI data to recover the caller's register values. CFIFrameInfo::RegisterValueMap caller_registers; @@ -113,13 +104,13 @@ StackFrameARM* StackwalkerARM::GetCallerByCFIFrameInfo( // Construct a new stack frame given the values the CFI recovered. scoped_ptr frame(new StackFrameARM()); for (int i = 0; register_names[i]; i++) { - bool found = false; - uint32_t v = caller_registers.get(&found, register_names[i]); - if (found) { + CFIFrameInfo::RegisterValueMap::iterator entry = + caller_registers.find(register_names[i]); + if (entry != caller_registers.end()) { // We recovered the value of this register; fill the context with the // value from caller_registers. frame->context_validity |= StackFrameARM::RegisterValidFlag(i); - frame->context.iregs[i] = v; + frame->context.iregs[i] = entry->second; } else if (4 <= i && i <= 11 && (last_frame->context_validity & StackFrameARM::RegisterValidFlag(i))) { // If the STACK CFI data doesn't mention some callee-saves register, and @@ -132,18 +123,18 @@ StackFrameARM* StackwalkerARM::GetCallerByCFIFrameInfo( } // If the CFI doesn't recover the PC explicitly, then use .ra. if (!(frame->context_validity & StackFrameARM::CONTEXT_VALID_PC)) { - bool found = false; - uint32_t v = caller_registers.get(&found, ustr__ZDra()); - if (found) { + CFIFrameInfo::RegisterValueMap::iterator entry = + caller_registers.find(".ra"); + if (entry != caller_registers.end()) { if (fp_register_ == -1) { frame->context_validity |= StackFrameARM::CONTEXT_VALID_PC; - frame->context.iregs[MD_CONTEXT_ARM_REG_PC] = v; + frame->context.iregs[MD_CONTEXT_ARM_REG_PC] = entry->second; } else { // The CFI updated the link register and not the program counter. // Handle getting the program counter from the link register. frame->context_validity |= StackFrameARM::CONTEXT_VALID_PC; frame->context_validity |= StackFrameARM::CONTEXT_VALID_LR; - frame->context.iregs[MD_CONTEXT_ARM_REG_LR] = v; + frame->context.iregs[MD_CONTEXT_ARM_REG_LR] = entry->second; frame->context.iregs[MD_CONTEXT_ARM_REG_PC] = last_frame->context.iregs[MD_CONTEXT_ARM_REG_LR]; } @@ -151,11 +142,11 @@ StackFrameARM* StackwalkerARM::GetCallerByCFIFrameInfo( } // If the CFI doesn't recover the SP explicitly, then use .cfa. if (!(frame->context_validity & StackFrameARM::CONTEXT_VALID_SP)) { - bool found = false; - uint32_t v = caller_registers.get(&found, ustr__ZDcfa()); - if (found) { + CFIFrameInfo::RegisterValueMap::iterator entry = + caller_registers.find(".cfa"); + if (entry != caller_registers.end()) { frame->context_validity |= StackFrameARM::CONTEXT_VALID_SP; - frame->context.iregs[MD_CONTEXT_ARM_REG_SP] = v; + frame->context.iregs[MD_CONTEXT_ARM_REG_SP] = entry->second; } } @@ -175,14 +166,8 @@ StackFrameARM* StackwalkerARM::GetCallerByStackScan( uint32_t last_sp = last_frame->context.iregs[MD_CONTEXT_ARM_REG_SP]; uint32_t caller_sp, caller_pc; - // When searching for the caller of the context frame, - // allow the scanner to look farther down the stack. - const int kRASearchWords = frames.size() == 1 ? - Stackwalker::kRASearchWords * 4 : - Stackwalker::kRASearchWords; - if (!ScanForReturnAddress(last_sp, &caller_sp, &caller_pc, - kRASearchWords)) { + frames.size() == 1 /* is_context_frame */)) { // No plausible return address was found. return NULL; } diff --git a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_arm64.cc b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_arm64.cc new file mode 100644 index 000000000000..31119a97e1d0 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_arm64.cc @@ -0,0 +1,278 @@ +// Copyright (c) 2013 Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// stackwalker_arm64.cc: arm64-specific stackwalker. +// +// See stackwalker_arm64.h for documentation. +// +// Author: Mark Mentovai, Ted Mielczarek, Jim Blandy, Colin Blundell + +#include + +#include "common/scoped_ptr.h" +#include "google_breakpad/processor/call_stack.h" +#include "google_breakpad/processor/memory_region.h" +#include "google_breakpad/processor/source_line_resolver_interface.h" +#include "google_breakpad/processor/stack_frame_cpu.h" +#include "processor/cfi_frame_info.h" +#include "processor/logging.h" +#include "processor/stackwalker_arm64.h" + +namespace google_breakpad { + + +StackwalkerARM64::StackwalkerARM64(const SystemInfo* system_info, + const MDRawContextARM64* context, + MemoryRegion* memory, + const CodeModules* modules, + StackFrameSymbolizer* resolver_helper) + : Stackwalker(system_info, memory, modules, resolver_helper), + context_(context), + context_frame_validity_(StackFrameARM64::CONTEXT_VALID_ALL) { } + + +StackFrame* StackwalkerARM64::GetContextFrame() { + if (!context_) { + BPLOG(ERROR) << "Can't get context frame without context"; + return NULL; + } + + StackFrameARM64* frame = new StackFrameARM64(); + + // The instruction pointer is stored directly in a register (x32), so pull it + // straight out of the CPU context structure. + frame->context = *context_; + frame->context_validity = context_frame_validity_; + frame->trust = StackFrame::FRAME_TRUST_CONTEXT; + frame->instruction = frame->context.iregs[MD_CONTEXT_ARM64_REG_PC]; + + return frame; +} + +StackFrameARM64* StackwalkerARM64::GetCallerByCFIFrameInfo( + const vector &frames, + CFIFrameInfo* cfi_frame_info) { + StackFrameARM64* last_frame = static_cast(frames.back()); + + static const char* register_names[] = { + "x0", "x1", "x2", "x3", "x4", "x5", "x6", "x7", + "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", + "x16", "x17", "x18", "x19", "x20", "x21", "x22", "x23", + "x24", "x25", "x26", "x27", "x28", "x29", "x30", "sp", + "pc", NULL + }; + + // Populate a dictionary with the valid register values in last_frame. + CFIFrameInfo::RegisterValueMap callee_registers; + for (int i = 0; register_names[i]; i++) { + if (last_frame->context_validity & StackFrameARM64::RegisterValidFlag(i)) + callee_registers[register_names[i]] = last_frame->context.iregs[i]; + } + + // Use the STACK CFI data to recover the caller's register values. + CFIFrameInfo::RegisterValueMap caller_registers; + if (!cfi_frame_info->FindCallerRegs(callee_registers, *memory_, + &caller_registers)) { + return NULL; + } + // Construct a new stack frame given the values the CFI recovered. + scoped_ptr frame(new StackFrameARM64()); + for (int i = 0; register_names[i]; i++) { + CFIFrameInfo::RegisterValueMap::iterator entry = + caller_registers.find(register_names[i]); + if (entry != caller_registers.end()) { + // We recovered the value of this register; fill the context with the + // value from caller_registers. + frame->context_validity |= StackFrameARM64::RegisterValidFlag(i); + frame->context.iregs[i] = entry->second; + } else if (19 <= i && i <= 29 && (last_frame->context_validity & + StackFrameARM64::RegisterValidFlag(i))) { + // If the STACK CFI data doesn't mention some callee-saves register, and + // it is valid in the callee, assume the callee has not yet changed it. + // Registers r19 through r29 are callee-saves, according to the Procedure + // Call Standard for the ARM AARCH64 Architecture, which the Linux ABI + // follows. + frame->context_validity |= StackFrameARM64::RegisterValidFlag(i); + frame->context.iregs[i] = last_frame->context.iregs[i]; + } + } + // If the CFI doesn't recover the PC explicitly, then use .ra. + if (!(frame->context_validity & StackFrameARM64::CONTEXT_VALID_PC)) { + CFIFrameInfo::RegisterValueMap::iterator entry = + caller_registers.find(".ra"); + if (entry != caller_registers.end()) { + frame->context_validity |= StackFrameARM64::CONTEXT_VALID_PC; + frame->context.iregs[MD_CONTEXT_ARM64_REG_PC] = entry->second; + } + } + // If the CFI doesn't recover the SP explicitly, then use .cfa. + if (!(frame->context_validity & StackFrameARM64::CONTEXT_VALID_SP)) { + CFIFrameInfo::RegisterValueMap::iterator entry = + caller_registers.find(".cfa"); + if (entry != caller_registers.end()) { + frame->context_validity |= StackFrameARM64::CONTEXT_VALID_SP; + frame->context.iregs[MD_CONTEXT_ARM64_REG_SP] = entry->second; + } + } + + // If we didn't recover the PC and the SP, then the frame isn't very useful. + static const uint64_t essentials = (StackFrameARM64::CONTEXT_VALID_SP + | StackFrameARM64::CONTEXT_VALID_PC); + if ((frame->context_validity & essentials) != essentials) + return NULL; + + frame->trust = StackFrame::FRAME_TRUST_CFI; + return frame.release(); +} + +StackFrameARM64* StackwalkerARM64::GetCallerByStackScan( + const vector &frames) { + StackFrameARM64* last_frame = static_cast(frames.back()); + uint64_t last_sp = last_frame->context.iregs[MD_CONTEXT_ARM64_REG_SP]; + uint64_t caller_sp, caller_pc; + + if (!ScanForReturnAddress(last_sp, &caller_sp, &caller_pc, + frames.size() == 1 /* is_context_frame */)) { + // No plausible return address was found. + return NULL; + } + + // ScanForReturnAddress found a reasonable return address. Advance + // %sp to the location above the one where the return address was + // found. + caller_sp += 8; + + // Create a new stack frame (ownership will be transferred to the caller) + // and fill it in. + StackFrameARM64* frame = new StackFrameARM64(); + + frame->trust = StackFrame::FRAME_TRUST_SCAN; + frame->context = last_frame->context; + frame->context.iregs[MD_CONTEXT_ARM64_REG_PC] = caller_pc; + frame->context.iregs[MD_CONTEXT_ARM64_REG_SP] = caller_sp; + frame->context_validity = StackFrameARM64::CONTEXT_VALID_PC | + StackFrameARM64::CONTEXT_VALID_SP; + + return frame; +} + +StackFrameARM64* StackwalkerARM64::GetCallerByFramePointer( + const vector &frames) { + StackFrameARM64* last_frame = static_cast(frames.back()); + + uint64_t last_fp = last_frame->context.iregs[MD_CONTEXT_ARM64_REG_FP]; + + uint64_t caller_fp = 0; + if (last_fp && !memory_->GetMemoryAtAddress(last_fp, &caller_fp)) { + BPLOG(ERROR) << "Unable to read caller_fp from last_fp: 0x" + << std::hex << last_fp; + return NULL; + } + + uint64_t caller_lr = 0; + if (last_fp && !memory_->GetMemoryAtAddress(last_fp + 8, &caller_lr)) { + BPLOG(ERROR) << "Unable to read caller_lr from last_fp + 8: 0x" + << std::hex << (last_fp + 8); + return NULL; + } + + uint64_t caller_sp = last_fp ? last_fp + 16 : + last_frame->context.iregs[MD_CONTEXT_ARM64_REG_SP]; + + // Create a new stack frame (ownership will be transferred to the caller) + // and fill it in. + StackFrameARM64* frame = new StackFrameARM64(); + + frame->trust = StackFrame::FRAME_TRUST_FP; + frame->context = last_frame->context; + frame->context.iregs[MD_CONTEXT_ARM64_REG_FP] = caller_fp; + frame->context.iregs[MD_CONTEXT_ARM64_REG_SP] = caller_sp; + frame->context.iregs[MD_CONTEXT_ARM64_REG_PC] = + last_frame->context.iregs[MD_CONTEXT_ARM64_REG_LR]; + frame->context.iregs[MD_CONTEXT_ARM64_REG_LR] = caller_lr; + frame->context_validity = StackFrameARM64::CONTEXT_VALID_PC | + StackFrameARM64::CONTEXT_VALID_LR | + StackFrameARM64::CONTEXT_VALID_FP | + StackFrameARM64::CONTEXT_VALID_SP; + return frame; +} + +StackFrame* StackwalkerARM64::GetCallerFrame(const CallStack* stack, + bool stack_scan_allowed) { + if (!memory_ || !stack) { + BPLOG(ERROR) << "Can't get caller frame without memory or stack"; + return NULL; + } + + const vector &frames = *stack->frames(); + StackFrameARM64* last_frame = static_cast(frames.back()); + scoped_ptr frame; + + // See if there is DWARF call frame information covering this address. + scoped_ptr cfi_frame_info( + frame_symbolizer_->FindCFIFrameInfo(last_frame)); + if (cfi_frame_info.get()) + frame.reset(GetCallerByCFIFrameInfo(frames, cfi_frame_info.get())); + + // If CFI failed, or there wasn't CFI available, fall back to frame pointer. + if (!frame.get()) + frame.reset(GetCallerByFramePointer(frames)); + + // If everything failed, fall back to stack scanning. + if (stack_scan_allowed && !frame.get()) + frame.reset(GetCallerByStackScan(frames)); + + // If nothing worked, tell the caller. + if (!frame.get()) + return NULL; + + // An instruction address of zero marks the end of the stack. + if (frame->context.iregs[MD_CONTEXT_ARM64_REG_PC] == 0) + return NULL; + + // If the new stack pointer is at a lower address than the old, then + // that's clearly incorrect. Treat this as end-of-stack to enforce + // progress and avoid infinite loops. + if (frame->context.iregs[MD_CONTEXT_ARM64_REG_SP] + < last_frame->context.iregs[MD_CONTEXT_ARM64_REG_SP]) + return NULL; + + // The new frame's context's PC is the return address, which is one + // instruction past the instruction that caused us to arrive at the callee. + // ARM64 instructions have a uniform 4-byte encoding, so subtracting 4 off + // the return address gets back to the beginning of the call instruction. + // Callers that require the exact return address value may access + // frame->context.iregs[MD_CONTEXT_ARM64_REG_PC]. + frame->instruction = frame->context.iregs[MD_CONTEXT_ARM64_REG_PC] - 4; + + return frame.release(); +} + + +} // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_arm64.h b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_arm64.h new file mode 100644 index 000000000000..121e824672e1 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_arm64.h @@ -0,0 +1,104 @@ +// -*- mode: C++ -*- + +// Copyright (c) 2013 Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// stackwalker_arm64.h: arm64-specific stackwalker. +// +// Provides stack frames given arm64 register context and a memory region +// corresponding to an arm64 stack. +// +// Author: Mark Mentovai, Ted Mielczarek, Colin Blundell + + +#ifndef PROCESSOR_STACKWALKER_ARM64_H__ +#define PROCESSOR_STACKWALKER_ARM64_H__ + +#include "google_breakpad/common/breakpad_types.h" +#include "google_breakpad/common/minidump_format.h" +#include "google_breakpad/processor/stackwalker.h" + +namespace google_breakpad { + +class CodeModules; + +class StackwalkerARM64 : public Stackwalker { + public: + // context is an arm64 context object that gives access to arm64-specific + // register state corresponding to the innermost called frame to be + // included in the stack. The other arguments are passed directly through + // to the base Stackwalker constructor. + StackwalkerARM64(const SystemInfo* system_info, + const MDRawContextARM64* context, + MemoryRegion* memory, + const CodeModules* modules, + StackFrameSymbolizer* frame_symbolizer); + + // Change the context validity mask of the frame returned by + // GetContextFrame to VALID. This is only for use by unit tests; the + // default behavior is correct for all application code. + void SetContextFrameValidity(uint64_t valid) { + context_frame_validity_ = valid; + } + + private: + // Implementation of Stackwalker, using arm64 context and stack conventions. + virtual StackFrame* GetContextFrame(); + virtual StackFrame* GetCallerFrame(const CallStack* stack, + bool stack_scan_allowed); + + // Use cfi_frame_info (derived from STACK CFI records) to construct + // the frame that called frames.back(). The caller takes ownership + // of the returned frame. Return NULL on failure. + StackFrameARM64* GetCallerByCFIFrameInfo(const vector &frames, + CFIFrameInfo* cfi_frame_info); + + // Use the frame pointer. The caller takes ownership of the returned frame. + // Return NULL on failure. + StackFrameARM64* GetCallerByFramePointer(const vector &frames); + + // Scan the stack for plausible return addresses. The caller takes ownership + // of the returned frame. Return NULL on failure. + StackFrameARM64* GetCallerByStackScan(const vector &frames); + + // Stores the CPU context corresponding to the youngest stack frame, to + // be returned by GetContextFrame. + const MDRawContextARM64* context_; + + // Validity mask for youngest stack frame. This is always + // CONTEXT_VALID_ALL in real use; it is only changeable for the sake of + // unit tests. + uint64_t context_frame_validity_; +}; + + +} // namespace google_breakpad + + +#endif // PROCESSOR_STACKWALKER_ARM64_H__ diff --git a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_arm64_unittest.cc b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_arm64_unittest.cc new file mode 100644 index 000000000000..f9d18cea0117 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_arm64_unittest.cc @@ -0,0 +1,880 @@ +// Copyright (c) 2010, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Original author: Jim Blandy + +// stackwalker_arm64_unittest.cc: Unit tests for StackwalkerARM64 class. + +#include +#include +#include + +#include "breakpad_googletest_includes.h" +#include "common/test_assembler.h" +#include "common/using_std_string.h" +#include "google_breakpad/common/minidump_format.h" +#include "google_breakpad/processor/basic_source_line_resolver.h" +#include "google_breakpad/processor/call_stack.h" +#include "google_breakpad/processor/code_module.h" +#include "google_breakpad/processor/source_line_resolver_interface.h" +#include "google_breakpad/processor/stack_frame_cpu.h" +#include "processor/stackwalker_unittest_utils.h" +#include "processor/stackwalker_arm64.h" +#include "processor/windows_frame_info.h" + +using google_breakpad::BasicSourceLineResolver; +using google_breakpad::CallStack; +using google_breakpad::CodeModule; +using google_breakpad::StackFrameSymbolizer; +using google_breakpad::StackFrame; +using google_breakpad::StackFrameARM64; +using google_breakpad::Stackwalker; +using google_breakpad::StackwalkerARM64; +using google_breakpad::SystemInfo; +using google_breakpad::WindowsFrameInfo; +using google_breakpad::test_assembler::kLittleEndian; +using google_breakpad::test_assembler::Label; +using google_breakpad::test_assembler::Section; +using std::vector; +using testing::_; +using testing::AnyNumber; +using testing::Return; +using testing::SetArgumentPointee; +using testing::Test; + +class StackwalkerARM64Fixture { + public: + StackwalkerARM64Fixture() + : stack_section(kLittleEndian), + // Give the two modules reasonable standard locations and names + // for tests to play with. + module1(0x40000000, 0x10000, "module1", "version1"), + module2(0x50000000, 0x10000, "module2", "version2") { + // Identify the system as an iOS system. + system_info.os = "iOS"; + system_info.os_short = "ios"; + system_info.cpu = "arm64"; + system_info.cpu_info = ""; + + // Put distinctive values in the raw CPU context. + BrandContext(&raw_context); + + // Create some modules with some stock debugging information. + modules.Add(&module1); + modules.Add(&module2); + + // By default, none of the modules have symbol info; call + // SetModuleSymbols to override this. + EXPECT_CALL(supplier, GetCStringSymbolData(_, _, _, _, _)) + .WillRepeatedly(Return(MockSymbolSupplier::NOT_FOUND)); + + // Avoid GMOCK WARNING "Uninteresting mock function call - returning + // directly" for FreeSymbolData(). + EXPECT_CALL(supplier, FreeSymbolData(_)).Times(AnyNumber()); + + // Reset max_frames_scanned since it's static. + Stackwalker::set_max_frames_scanned(1024); + } + + // Set the Breakpad symbol information that supplier should return for + // MODULE to INFO. + void SetModuleSymbols(MockCodeModule *module, const string &info) { + size_t buffer_size; + char *buffer = supplier.CopySymbolDataAndOwnTheCopy(info, &buffer_size); + EXPECT_CALL(supplier, GetCStringSymbolData(module, &system_info, _, _, _)) + .WillRepeatedly(DoAll(SetArgumentPointee<3>(buffer), + SetArgumentPointee<4>(buffer_size), + Return(MockSymbolSupplier::FOUND))); + } + + // Populate stack_region with the contents of stack_section. Use + // stack_section.start() as the region's starting address. + void RegionFromSection() { + string contents; + ASSERT_TRUE(stack_section.GetContents(&contents)); + stack_region.Init(stack_section.start().Value(), contents); + } + + // Fill RAW_CONTEXT with pseudo-random data, for round-trip checking. + void BrandContext(MDRawContextARM64 *raw_context) { + uint8_t x = 173; + for (size_t i = 0; i < sizeof(*raw_context); i++) + reinterpret_cast(raw_context)[i] = (x += 17); + } + + SystemInfo system_info; + MDRawContextARM64 raw_context; + Section stack_section; + MockMemoryRegion stack_region; + MockCodeModule module1; + MockCodeModule module2; + MockCodeModules modules; + MockSymbolSupplier supplier; + BasicSourceLineResolver resolver; + CallStack call_stack; + const vector *frames; +}; + +class SanityCheck: public StackwalkerARM64Fixture, public Test { }; + +TEST_F(SanityCheck, NoResolver) { + // Since the context's frame pointer is garbage, the stack walk will end after + // the first frame. + StackFrameSymbolizer frame_symbolizer(NULL, NULL); + StackwalkerARM64 walker(&system_info, &raw_context, &stack_region, &modules, + &frame_symbolizer); + // This should succeed even without a resolver or supplier. + vector modules_without_symbols; + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); + ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); + frames = call_stack.frames(); + ASSERT_EQ(1U, frames->size()); + StackFrameARM64 *frame = static_cast(frames->at(0)); + // Check that the values from the original raw context made it + // through to the context in the stack frame. + EXPECT_EQ(0, memcmp(&raw_context, &frame->context, sizeof(raw_context))); +} + +class GetContextFrame: public StackwalkerARM64Fixture, public Test { }; + +// The stackwalker should be able to produce the context frame even +// without stack memory present. +TEST_F(GetContextFrame, NoStackMemory) { + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); + StackwalkerARM64 walker(&system_info, &raw_context, NULL, &modules, + &frame_symbolizer); + vector modules_without_symbols; + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); + ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); + frames = call_stack.frames(); + ASSERT_EQ(1U, frames->size()); + StackFrameARM64 *frame = static_cast(frames->at(0)); + // Check that the values from the original raw context made it + // through to the context in the stack frame. + EXPECT_EQ(0, memcmp(&raw_context, &frame->context, sizeof(raw_context))); +} + +class GetCallerFrame: public StackwalkerARM64Fixture, public Test { }; + +TEST_F(GetCallerFrame, ScanWithoutSymbols) { + // When the stack walker resorts to scanning the stack, + // only addresses located within loaded modules are + // considered valid return addresses. + // Force scanning through three frames to ensure that the + // stack pointer is set properly in scan-recovered frames. + stack_section.start() = 0x80000000; + uint64_t return_address1 = 0x50000100; + uint64_t return_address2 = 0x50000900; + Label frame1_sp, frame2_sp; + stack_section + // frame 0 + .Append(16, 0) // space + + .D64(0x40090000) // junk that's not + .D64(0x60000000) // a return address + + .D64(return_address1) // actual return address + // frame 1 + .Mark(&frame1_sp) + .Append(16, 0) // space + + .D64(0xF0000000) // more junk + .D64(0x0000000D) + + .D64(return_address2) // actual return address + // frame 2 + .Mark(&frame2_sp) + .Append(64, 0); // end of stack + RegionFromSection(); + + raw_context.iregs[MD_CONTEXT_ARM64_REG_PC] = 0x40005510; + raw_context.iregs[MD_CONTEXT_ARM64_REG_SP] = stack_section.start().Value(); + + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); + StackwalkerARM64 walker(&system_info, &raw_context, &stack_region, &modules, + &frame_symbolizer); + vector modules_without_symbols; + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); + ASSERT_EQ(2U, modules_without_symbols.size()); + ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); + ASSERT_EQ("module2", modules_without_symbols[1]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); + frames = call_stack.frames(); + ASSERT_EQ(3U, frames->size()); + + StackFrameARM64 *frame0 = static_cast(frames->at(0)); + EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame0->trust); + ASSERT_EQ(StackFrameARM64::CONTEXT_VALID_ALL, + frame0->context_validity); + EXPECT_EQ(0, memcmp(&raw_context, &frame0->context, sizeof(raw_context))); + + StackFrameARM64 *frame1 = static_cast(frames->at(1)); + EXPECT_EQ(StackFrame::FRAME_TRUST_SCAN, frame1->trust); + ASSERT_EQ((StackFrameARM64::CONTEXT_VALID_PC | + StackFrameARM64::CONTEXT_VALID_SP), + frame1->context_validity); + EXPECT_EQ(return_address1, frame1->context.iregs[MD_CONTEXT_ARM64_REG_PC]); + EXPECT_EQ(frame1_sp.Value(), frame1->context.iregs[MD_CONTEXT_ARM64_REG_SP]); + + StackFrameARM64 *frame2 = static_cast(frames->at(2)); + EXPECT_EQ(StackFrame::FRAME_TRUST_SCAN, frame2->trust); + ASSERT_EQ((StackFrameARM64::CONTEXT_VALID_PC | + StackFrameARM64::CONTEXT_VALID_SP), + frame2->context_validity); + EXPECT_EQ(return_address2, frame2->context.iregs[MD_CONTEXT_ARM64_REG_PC]); + EXPECT_EQ(frame2_sp.Value(), frame2->context.iregs[MD_CONTEXT_ARM64_REG_SP]); +} + +TEST_F(GetCallerFrame, ScanWithFunctionSymbols) { + // During stack scanning, if a potential return address + // is located within a loaded module that has symbols, + // it is only considered a valid return address if it + // lies within a function's bounds. + stack_section.start() = 0x80000000; + uint64_t return_address = 0x50000200; + Label frame1_sp; + + stack_section + // frame 0 + .Append(16, 0) // space + + .D64(0x40090000) // junk that's not + .D64(0x60000000) // a return address + + .D64(0x40001000) // a couple of plausible addresses + .D64(0x5000F000) // that are not within functions + + .D64(return_address) // actual return address + // frame 1 + .Mark(&frame1_sp) + .Append(64, 0); // end of stack + RegionFromSection(); + + raw_context.iregs[MD_CONTEXT_ARM64_REG_PC] = 0x40000200; + raw_context.iregs[MD_CONTEXT_ARM64_REG_SP] = stack_section.start().Value(); + + SetModuleSymbols(&module1, + // The youngest frame's function. + "FUNC 100 400 10 monotreme\n"); + SetModuleSymbols(&module2, + // The calling frame's function. + "FUNC 100 400 10 marsupial\n"); + + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); + StackwalkerARM64 walker(&system_info, &raw_context, &stack_region, &modules, + &frame_symbolizer); + vector modules_without_symbols; + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); + ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); + frames = call_stack.frames(); + ASSERT_EQ(2U, frames->size()); + + StackFrameARM64 *frame0 = static_cast(frames->at(0)); + EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame0->trust); + ASSERT_EQ(StackFrameARM64::CONTEXT_VALID_ALL, + frame0->context_validity); + EXPECT_EQ(0, memcmp(&raw_context, &frame0->context, sizeof(raw_context))); + EXPECT_EQ("monotreme", frame0->function_name); + EXPECT_EQ(0x40000100ULL, frame0->function_base); + + StackFrameARM64 *frame1 = static_cast(frames->at(1)); + EXPECT_EQ(StackFrame::FRAME_TRUST_SCAN, frame1->trust); + ASSERT_EQ((StackFrameARM64::CONTEXT_VALID_PC | + StackFrameARM64::CONTEXT_VALID_SP), + frame1->context_validity); + EXPECT_EQ(return_address, frame1->context.iregs[MD_CONTEXT_ARM64_REG_PC]); + EXPECT_EQ(frame1_sp.Value(), frame1->context.iregs[MD_CONTEXT_ARM64_REG_SP]); + EXPECT_EQ("marsupial", frame1->function_name); + EXPECT_EQ(0x50000100ULL, frame1->function_base); +} + +TEST_F(GetCallerFrame, ScanFirstFrame) { + // If the stackwalker resorts to stack scanning, it will scan much + // farther to find the caller of the context frame. + stack_section.start() = 0x80000000; + uint64_t return_address1 = 0x50000100; + uint64_t return_address2 = 0x50000900; + Label frame1_sp, frame2_sp; + stack_section + // frame 0 + .Append(32, 0) // space + + .D64(0x40090000) // junk that's not + .D64(0x60000000) // a return address + + .Append(96, 0) // more space + + .D64(return_address1) // actual return address + // frame 1 + .Mark(&frame1_sp) + .Append(32, 0) // space + + .D64(0xF0000000) // more junk + .D64(0x0000000D) + + .Append(336, 0) // more space + + .D64(return_address2) // actual return address + // (won't be found) + // frame 2 + .Mark(&frame2_sp) + .Append(64, 0); // end of stack + RegionFromSection(); + + raw_context.iregs[MD_CONTEXT_ARM64_REG_PC] = 0x40005510; + raw_context.iregs[MD_CONTEXT_ARM64_REG_SP] = stack_section.start().Value(); + + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); + StackwalkerARM64 walker(&system_info, &raw_context, &stack_region, &modules, + &frame_symbolizer); + vector modules_without_symbols; + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); + ASSERT_EQ(2U, modules_without_symbols.size()); + ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); + ASSERT_EQ("module2", modules_without_symbols[1]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); + frames = call_stack.frames(); + ASSERT_EQ(2U, frames->size()); + + StackFrameARM64 *frame0 = static_cast(frames->at(0)); + EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame0->trust); + ASSERT_EQ(StackFrameARM64::CONTEXT_VALID_ALL, + frame0->context_validity); + EXPECT_EQ(0, memcmp(&raw_context, &frame0->context, sizeof(raw_context))); + + StackFrameARM64 *frame1 = static_cast(frames->at(1)); + EXPECT_EQ(StackFrame::FRAME_TRUST_SCAN, frame1->trust); + ASSERT_EQ((StackFrameARM64::CONTEXT_VALID_PC | + StackFrameARM64::CONTEXT_VALID_SP), + frame1->context_validity); + EXPECT_EQ(return_address1, frame1->context.iregs[MD_CONTEXT_ARM64_REG_PC]); + EXPECT_EQ(frame1_sp.Value(), frame1->context.iregs[MD_CONTEXT_ARM64_REG_SP]); +} + +// Test that set_max_frames_scanned prevents using stack scanning +// to find caller frames. +TEST_F(GetCallerFrame, ScanningNotAllowed) { + // When the stack walker resorts to scanning the stack, + // only addresses located within loaded modules are + // considered valid return addresses. + stack_section.start() = 0x80000000; + uint64_t return_address1 = 0x50000100; + uint64_t return_address2 = 0x50000900; + Label frame1_sp, frame2_sp; + stack_section + // frame 0 + .Append(16, 0) // space + + .D64(0x40090000) // junk that's not + .D64(0x60000000) // a return address + + .D64(return_address1) // actual return address + // frame 1 + .Mark(&frame1_sp) + .Append(16, 0) // space + + .D64(0xF0000000) // more junk + .D64(0x0000000D) + + .D64(return_address2) // actual return address + // frame 2 + .Mark(&frame2_sp) + .Append(64, 0); // end of stack + RegionFromSection(); + + raw_context.iregs[MD_CONTEXT_ARM64_REG_PC] = 0x40005510; + raw_context.iregs[MD_CONTEXT_ARM64_REG_SP] = stack_section.start().Value(); + + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); + StackwalkerARM64 walker(&system_info, &raw_context, &stack_region, &modules, + &frame_symbolizer); + Stackwalker::set_max_frames_scanned(0); + + vector modules_without_symbols; + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); + ASSERT_EQ(1U, modules_without_symbols.size()); + ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); + frames = call_stack.frames(); + ASSERT_EQ(1U, frames->size()); + + StackFrameARM64 *frame0 = static_cast(frames->at(0)); + EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame0->trust); + ASSERT_EQ(StackFrameARM64::CONTEXT_VALID_ALL, + frame0->context_validity); + EXPECT_EQ(0, memcmp(&raw_context, &frame0->context, sizeof(raw_context))); +} + +class GetFramesByFramePointer: public StackwalkerARM64Fixture, public Test { }; + +TEST_F(GetFramesByFramePointer, OnlyFramePointer) { + stack_section.start() = 0x80000000; + uint64_t return_address1 = 0x50000100; + uint64_t return_address2 = 0x50000900; + Label frame1_sp, frame2_sp; + Label frame1_fp, frame2_fp; + stack_section + // frame 0 + .Append(64, 0) // Whatever values on the stack. + .D64(0x0000000D) // junk that's not + .D64(0xF0000000) // a return address. + + .Mark(&frame1_fp) // Next fp will point to the next value. + .D64(frame2_fp) // Save current frame pointer. + .D64(return_address2) // Save current link register. + .Mark(&frame1_sp) + + // frame 1 + .Append(64, 0) // Whatever values on the stack. + .D64(0x0000000D) // junk that's not + .D64(0xF0000000) // a return address. + + .Mark(&frame2_fp) + .D64(0) + .D64(0) + .Mark(&frame2_sp) + + // frame 2 + .Append(64, 0) // Whatever values on the stack. + .D64(0x0000000D) // junk that's not + .D64(0xF0000000); // a return address. + RegionFromSection(); + + + raw_context.iregs[MD_CONTEXT_ARM64_REG_PC] = 0x40005510; + raw_context.iregs[MD_CONTEXT_ARM64_REG_LR] = return_address1; + raw_context.iregs[MD_CONTEXT_ARM64_REG_FP] = frame1_fp.Value(); + raw_context.iregs[MD_CONTEXT_ARM64_REG_SP] = stack_section.start().Value(); + + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); + StackwalkerARM64 walker(&system_info, &raw_context, + &stack_region, &modules, &frame_symbolizer); + + vector modules_without_symbols; + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); + ASSERT_EQ(2U, modules_without_symbols.size()); + ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); + ASSERT_EQ("module2", modules_without_symbols[1]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); + frames = call_stack.frames(); + ASSERT_EQ(3U, frames->size()); + + StackFrameARM64 *frame0 = static_cast(frames->at(0)); + EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame0->trust); + ASSERT_EQ(StackFrameARM64::CONTEXT_VALID_ALL, + frame0->context_validity); + EXPECT_EQ(0, memcmp(&raw_context, &frame0->context, sizeof(raw_context))); + + StackFrameARM64 *frame1 = static_cast(frames->at(1)); + EXPECT_EQ(StackFrame::FRAME_TRUST_FP, frame1->trust); + ASSERT_EQ((StackFrameARM64::CONTEXT_VALID_PC | + StackFrameARM64::CONTEXT_VALID_LR | + StackFrameARM64::CONTEXT_VALID_FP | + StackFrameARM64::CONTEXT_VALID_SP), + frame1->context_validity); + EXPECT_EQ(return_address1, frame1->context.iregs[MD_CONTEXT_ARM64_REG_PC]); + EXPECT_EQ(return_address2, frame1->context.iregs[MD_CONTEXT_ARM64_REG_LR]); + EXPECT_EQ(frame1_sp.Value(), frame1->context.iregs[MD_CONTEXT_ARM64_REG_SP]); + EXPECT_EQ(frame2_fp.Value(), + frame1->context.iregs[MD_CONTEXT_ARM64_REG_FP]); + + StackFrameARM64 *frame2 = static_cast(frames->at(2)); + EXPECT_EQ(StackFrame::FRAME_TRUST_FP, frame2->trust); + ASSERT_EQ((StackFrameARM64::CONTEXT_VALID_PC | + StackFrameARM64::CONTEXT_VALID_LR | + StackFrameARM64::CONTEXT_VALID_FP | + StackFrameARM64::CONTEXT_VALID_SP), + frame2->context_validity); + EXPECT_EQ(return_address2, frame2->context.iregs[MD_CONTEXT_ARM64_REG_PC]); + EXPECT_EQ(0U, frame2->context.iregs[MD_CONTEXT_ARM64_REG_LR]); + EXPECT_EQ(frame2_sp.Value(), frame2->context.iregs[MD_CONTEXT_ARM64_REG_SP]); + EXPECT_EQ(0U, frame2->context.iregs[MD_CONTEXT_ARM64_REG_FP]); +} + +struct CFIFixture: public StackwalkerARM64Fixture { + CFIFixture() { + // Provide a bunch of STACK CFI records; we'll walk to the caller + // from every point in this series, expecting to find the same set + // of register values. + SetModuleSymbols(&module1, + // The youngest frame's function. + "FUNC 4000 1000 10 enchiridion\n" + // Initially, nothing has been pushed on the stack, + // and the return address is still in the link + // register (x30). + "STACK CFI INIT 4000 100 .cfa: sp 0 + .ra: x30\n" + // Push x19, x20, the frame pointer and the link register. + "STACK CFI 4001 .cfa: sp 32 + .ra: .cfa -8 + ^" + " x19: .cfa -32 + ^ x20: .cfa -24 + ^ " + " x29: .cfa -16 + ^\n" + // Save x19..x22 in x0..x3: verify that we populate + // the youngest frame with all the values we have. + "STACK CFI 4002 x19: x0 x20: x1 x21: x2 x22: x3\n" + // Restore x19..x22. Save the non-callee-saves register x1. + "STACK CFI 4003 .cfa: sp 40 + x1: .cfa 40 - ^" + " x19: x19 x20: x20 x21: x21 x22: x22\n" + // Move the .cfa back eight bytes, to point at the return + // address, and restore the sp explicitly. + "STACK CFI 4005 .cfa: sp 32 + x1: .cfa 32 - ^" + " x29: .cfa 8 - ^ .ra: .cfa ^ sp: .cfa 8 +\n" + // Recover the PC explicitly from a new stack slot; + // provide garbage for the .ra. + "STACK CFI 4006 .cfa: sp 40 + pc: .cfa 40 - ^\n" + + // The calling function. + "FUNC 5000 1000 10 epictetus\n" + // Mark it as end of stack. + "STACK CFI INIT 5000 1000 .cfa: 0 .ra: 0\n" + + // A function whose CFI makes the stack pointer + // go backwards. + "FUNC 6000 1000 20 palinal\n" + "STACK CFI INIT 6000 1000 .cfa: sp 8 - .ra: x30\n" + + // A function with CFI expressions that can't be + // evaluated. + "FUNC 7000 1000 20 rhetorical\n" + "STACK CFI INIT 7000 1000 .cfa: moot .ra: ambiguous\n"); + + // Provide some distinctive values for the caller's registers. + expected.iregs[MD_CONTEXT_ARM64_REG_PC] = 0x0000000040005510L; + expected.iregs[MD_CONTEXT_ARM64_REG_SP] = 0x0000000080000000L; + expected.iregs[19] = 0x5e68b5d5b5d55e68L; + expected.iregs[20] = 0x34f3ebd1ebd134f3L; + expected.iregs[21] = 0x74bca31ea31e74bcL; + expected.iregs[22] = 0x16b32dcb2dcb16b3L; + expected.iregs[23] = 0x21372ada2ada2137L; + expected.iregs[24] = 0x557dbbbbbbbb557dL; + expected.iregs[25] = 0x8ca748bf48bf8ca7L; + expected.iregs[26] = 0x21f0ab46ab4621f0L; + expected.iregs[27] = 0x146732b732b71467L; + expected.iregs[28] = 0xa673645fa673645fL; + expected.iregs[MD_CONTEXT_ARM64_REG_FP] = 0xe11081128112e110L; + + // Expect CFI to recover all callee-saves registers. Since CFI is the + // only stack frame construction technique we have, aside from the + // context frame itself, there's no way for us to have a set of valid + // registers smaller than this. + expected_validity = (StackFrameARM64::CONTEXT_VALID_PC | + StackFrameARM64::CONTEXT_VALID_SP | + StackFrameARM64::CONTEXT_VALID_X19 | + StackFrameARM64::CONTEXT_VALID_X20 | + StackFrameARM64::CONTEXT_VALID_X21 | + StackFrameARM64::CONTEXT_VALID_X22 | + StackFrameARM64::CONTEXT_VALID_X23 | + StackFrameARM64::CONTEXT_VALID_X24 | + StackFrameARM64::CONTEXT_VALID_X25 | + StackFrameARM64::CONTEXT_VALID_X26 | + StackFrameARM64::CONTEXT_VALID_X27 | + StackFrameARM64::CONTEXT_VALID_X28 | + StackFrameARM64::CONTEXT_VALID_FP); + + // By default, context frames provide all registers, as normal. + context_frame_validity = StackFrameARM64::CONTEXT_VALID_ALL; + + // By default, registers are unchanged. + raw_context = expected; + } + + // Walk the stack, using stack_section as the contents of the stack + // and raw_context as the current register values. (Set the stack + // pointer to the stack's starting address.) Expect two stack + // frames; in the older frame, expect the callee-saves registers to + // have values matching those in 'expected'. + void CheckWalk() { + RegionFromSection(); + raw_context.iregs[MD_CONTEXT_ARM64_REG_SP] = stack_section.start().Value(); + + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); + StackwalkerARM64 walker(&system_info, &raw_context, &stack_region, + &modules, &frame_symbolizer); + walker.SetContextFrameValidity(context_frame_validity); + vector modules_without_symbols; + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); + ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); + frames = call_stack.frames(); + ASSERT_EQ(2U, frames->size()); + + StackFrameARM64 *frame0 = static_cast(frames->at(0)); + EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame0->trust); + ASSERT_EQ(context_frame_validity, frame0->context_validity); + EXPECT_EQ("enchiridion", frame0->function_name); + EXPECT_EQ(0x0000000040004000UL, frame0->function_base); + + StackFrameARM64 *frame1 = static_cast(frames->at(1)); + EXPECT_EQ(StackFrame::FRAME_TRUST_CFI, frame1->trust); + ASSERT_EQ(expected_validity, frame1->context_validity); + if (expected_validity & StackFrameARM64::CONTEXT_VALID_X1) + EXPECT_EQ(expected.iregs[1], frame1->context.iregs[1]); + if (expected_validity & StackFrameARM64::CONTEXT_VALID_X19) + EXPECT_EQ(expected.iregs[19], frame1->context.iregs[19]); + if (expected_validity & StackFrameARM64::CONTEXT_VALID_X20) + EXPECT_EQ(expected.iregs[20], frame1->context.iregs[20]); + if (expected_validity & StackFrameARM64::CONTEXT_VALID_X21) + EXPECT_EQ(expected.iregs[21], frame1->context.iregs[21]); + if (expected_validity & StackFrameARM64::CONTEXT_VALID_X22) + EXPECT_EQ(expected.iregs[22], frame1->context.iregs[22]); + if (expected_validity & StackFrameARM64::CONTEXT_VALID_X23) + EXPECT_EQ(expected.iregs[23], frame1->context.iregs[23]); + if (expected_validity & StackFrameARM64::CONTEXT_VALID_X24) + EXPECT_EQ(expected.iregs[24], frame1->context.iregs[24]); + if (expected_validity & StackFrameARM64::CONTEXT_VALID_X25) + EXPECT_EQ(expected.iregs[25], frame1->context.iregs[25]); + if (expected_validity & StackFrameARM64::CONTEXT_VALID_X26) + EXPECT_EQ(expected.iregs[26], frame1->context.iregs[26]); + if (expected_validity & StackFrameARM64::CONTEXT_VALID_X27) + EXPECT_EQ(expected.iregs[27], frame1->context.iregs[27]); + if (expected_validity & StackFrameARM64::CONTEXT_VALID_X28) + EXPECT_EQ(expected.iregs[28], frame1->context.iregs[28]); + if (expected_validity & StackFrameARM64::CONTEXT_VALID_FP) + EXPECT_EQ(expected.iregs[MD_CONTEXT_ARM64_REG_FP], + frame1->context.iregs[MD_CONTEXT_ARM64_REG_FP]); + + // We would never have gotten a frame in the first place if the SP + // and PC weren't valid or ->instruction weren't set. + EXPECT_EQ(expected.iregs[MD_CONTEXT_ARM64_REG_SP], + frame1->context.iregs[MD_CONTEXT_ARM64_REG_SP]); + EXPECT_EQ(expected.iregs[MD_CONTEXT_ARM64_REG_PC], + frame1->context.iregs[MD_CONTEXT_ARM64_REG_PC]); + EXPECT_EQ(expected.iregs[MD_CONTEXT_ARM64_REG_PC], + frame1->instruction + 4); + EXPECT_EQ("epictetus", frame1->function_name); + } + + // The values we expect to find for the caller's registers. + MDRawContextARM64 expected; + + // The validity mask for expected. + uint64_t expected_validity; + + // The validity mask to impose on the context frame. + uint64_t context_frame_validity; +}; + +class CFI: public CFIFixture, public Test { }; + +TEST_F(CFI, At4000) { + stack_section.start() = expected.iregs[MD_CONTEXT_ARM64_REG_SP]; + raw_context.iregs[MD_CONTEXT_ARM64_REG_PC] = 0x0000000040004000L; + raw_context.iregs[MD_CONTEXT_ARM64_REG_LR] = 0x0000000040005510L; + CheckWalk(); +} + +TEST_F(CFI, At4001) { + Label frame1_sp = expected.iregs[MD_CONTEXT_ARM64_REG_SP]; + stack_section + .D64(0x5e68b5d5b5d55e68L) // saved x19 + .D64(0x34f3ebd1ebd134f3L) // saved x20 + .D64(0xe11081128112e110L) // saved fp + .D64(0x0000000040005510L) // return address + .Mark(&frame1_sp); // This effectively sets stack_section.start(). + raw_context.iregs[MD_CONTEXT_ARM64_REG_PC] = 0x0000000040004001L; + // distinct callee x19, x20 and fp + raw_context.iregs[19] = 0xadc9f635a635adc9L; + raw_context.iregs[20] = 0x623135ac35ac6231L; + raw_context.iregs[MD_CONTEXT_ARM64_REG_FP] = 0x5fc4be14be145fc4L; + CheckWalk(); +} + +// As above, but unwind from a context that has only the PC and SP. +TEST_F(CFI, At4001LimitedValidity) { + Label frame1_sp = expected.iregs[MD_CONTEXT_ARM64_REG_SP]; + stack_section + .D64(0x5e68b5d5b5d55e68L) // saved x19 + .D64(0x34f3ebd1ebd134f3L) // saved x20 + .D64(0xe11081128112e110L) // saved fp + .D64(0x0000000040005510L) // return address + .Mark(&frame1_sp); // This effectively sets stack_section.start(). + context_frame_validity = + StackFrameARM64::CONTEXT_VALID_PC | StackFrameARM64::CONTEXT_VALID_SP; + raw_context.iregs[MD_CONTEXT_ARM64_REG_PC] = 0x0000000040004001L; + raw_context.iregs[MD_CONTEXT_ARM64_REG_FP] = 0x5fc4be14be145fc4L; + + expected_validity = (StackFrameARM64::CONTEXT_VALID_PC + | StackFrameARM64::CONTEXT_VALID_SP + | StackFrameARM64::CONTEXT_VALID_FP + | StackFrameARM64::CONTEXT_VALID_X19 + | StackFrameARM64::CONTEXT_VALID_X20); + CheckWalk(); +} + +TEST_F(CFI, At4002) { + Label frame1_sp = expected.iregs[MD_CONTEXT_ARM64_REG_SP]; + stack_section + .D64(0xff3dfb81fb81ff3dL) // no longer saved x19 + .D64(0x34f3ebd1ebd134f3L) // no longer saved x20 + .D64(0xe11081128112e110L) // saved fp + .D64(0x0000000040005510L) // return address + .Mark(&frame1_sp); // This effectively sets stack_section.start(). + raw_context.iregs[MD_CONTEXT_ARM64_REG_PC] = 0x0000000040004002L; + raw_context.iregs[0] = 0x5e68b5d5b5d55e68L; // saved x19 + raw_context.iregs[1] = 0x34f3ebd1ebd134f3L; // saved x20 + raw_context.iregs[2] = 0x74bca31ea31e74bcL; // saved x21 + raw_context.iregs[3] = 0x16b32dcb2dcb16b3L; // saved x22 + raw_context.iregs[19] = 0xadc9f635a635adc9L; // distinct callee x19 + raw_context.iregs[20] = 0x623135ac35ac6231L; // distinct callee x20 + raw_context.iregs[21] = 0xac4543564356ac45L; // distinct callee x21 + raw_context.iregs[22] = 0x2561562f562f2561L; // distinct callee x22 + // distinct callee fp + raw_context.iregs[MD_CONTEXT_ARM64_REG_FP] = 0x5fc4be14be145fc4L; + CheckWalk(); +} + +TEST_F(CFI, At4003) { + Label frame1_sp = expected.iregs[MD_CONTEXT_ARM64_REG_SP]; + stack_section + .D64(0xdd5a48c848c8dd5aL) // saved x1 (even though it's not callee-saves) + .D64(0xff3dfb81fb81ff3dL) // no longer saved x19 + .D64(0x34f3ebd1ebd134f3L) // no longer saved x20 + .D64(0xe11081128112e110L) // saved fp + .D64(0x0000000040005510L) // return address + .Mark(&frame1_sp); // This effectively sets stack_section.start(). + raw_context.iregs[MD_CONTEXT_ARM64_REG_PC] = 0x0000000040004003L; + // distinct callee x1 and fp + raw_context.iregs[1] = 0xfb756319fb756319L; + raw_context.iregs[MD_CONTEXT_ARM64_REG_FP] = 0x5fc4be14be145fc4L; + // caller's x1 + expected.iregs[1] = 0xdd5a48c848c8dd5aL; + expected_validity |= StackFrameARM64::CONTEXT_VALID_X1; + CheckWalk(); +} + +// We have no new rule at module offset 0x4004, so the results here should +// be the same as those at module offset 0x4003. +TEST_F(CFI, At4004) { + Label frame1_sp = expected.iregs[MD_CONTEXT_ARM64_REG_SP]; + stack_section + .D64(0xdd5a48c848c8dd5aL) // saved x1 (even though it's not callee-saves) + .D64(0xff3dfb81fb81ff3dL) // no longer saved x19 + .D64(0x34f3ebd1ebd134f3L) // no longer saved x20 + .D64(0xe11081128112e110L) // saved fp + .D64(0x0000000040005510L) // return address + .Mark(&frame1_sp); // This effectively sets stack_section.start(). + raw_context.iregs[MD_CONTEXT_ARM64_REG_PC] = 0x0000000040004004L; + // distinct callee x1 and fp + raw_context.iregs[1] = 0xfb756319fb756319L; + raw_context.iregs[MD_CONTEXT_ARM64_REG_FP] = 0x5fc4be14be145fc4L; + // caller's x1 + expected.iregs[1] = 0xdd5a48c848c8dd5aL; + expected_validity |= StackFrameARM64::CONTEXT_VALID_X1; + CheckWalk(); +} + +// Here we move the .cfa, but provide an explicit rule to recover the SP, +// so again there should be no change in the registers recovered. +TEST_F(CFI, At4005) { + Label frame1_sp = expected.iregs[MD_CONTEXT_ARM64_REG_SP]; + stack_section + .D64(0xdd5a48c848c8dd5aL) // saved x1 (even though it's not callee-saves) + .D64(0xff3dfb81fb81ff3dL) // no longer saved x19 + .D64(0x34f3ebd1ebd134f3L) // no longer saved x20 + .D64(0xe11081128112e110L) // saved fp + .D64(0x0000000040005510L) // return address + .Mark(&frame1_sp); // This effectively sets stack_section.start(). + raw_context.iregs[MD_CONTEXT_ARM64_REG_PC] = 0x0000000040004005L; + raw_context.iregs[1] = 0xfb756319fb756319L; // distinct callee x1 + expected.iregs[1] = 0xdd5a48c848c8dd5aL; // caller's x1 + expected_validity |= StackFrameARM64::CONTEXT_VALID_X1; + CheckWalk(); +} + +// Here we provide an explicit rule for the PC, and have the saved .ra be +// bogus. +TEST_F(CFI, At4006) { + Label frame1_sp = expected.iregs[MD_CONTEXT_ARM64_REG_SP]; + stack_section + .D64(0x0000000040005510L) // saved pc + .D64(0xdd5a48c848c8dd5aL) // saved x1 (even though it's not callee-saves) + .D64(0xff3dfb81fb81ff3dL) // no longer saved x19 + .D64(0x34f3ebd1ebd134f3L) // no longer saved x20 + .D64(0xe11081128112e110L) // saved fp + .D64(0xf8d157835783f8d1L) // .ra rule recovers this, which is garbage + .Mark(&frame1_sp); // This effectively sets stack_section.start(). + raw_context.iregs[MD_CONTEXT_ARM64_REG_PC] = 0x0000000040004006L; + raw_context.iregs[1] = 0xfb756319fb756319L; // distinct callee x1 + expected.iregs[1] = 0xdd5a48c848c8dd5aL; // caller's x1 + expected_validity |= StackFrameARM64::CONTEXT_VALID_X1; + CheckWalk(); +} + +// Check that we reject rules that would cause the stack pointer to +// move in the wrong direction. +TEST_F(CFI, RejectBackwards) { + raw_context.iregs[MD_CONTEXT_ARM64_REG_PC] = 0x0000000040006000L; + raw_context.iregs[MD_CONTEXT_ARM64_REG_SP] = 0x0000000080000000L; + raw_context.iregs[MD_CONTEXT_ARM64_REG_LR] = 0x0000000040005510L; + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); + StackwalkerARM64 walker(&system_info, &raw_context, &stack_region, &modules, + &frame_symbolizer); + vector modules_without_symbols; + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); + ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); + frames = call_stack.frames(); + ASSERT_EQ(1U, frames->size()); +} + +// Check that we reject rules whose expressions' evaluation fails. +TEST_F(CFI, RejectBadExpressions) { + raw_context.iregs[MD_CONTEXT_ARM64_REG_PC] = 0x0000000040007000L; + raw_context.iregs[MD_CONTEXT_ARM64_REG_SP] = 0x0000000080000000L; + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); + StackwalkerARM64 walker(&system_info, &raw_context, &stack_region, &modules, + &frame_symbolizer); + vector modules_without_symbols; + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); + ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); + frames = call_stack.frames(); + ASSERT_EQ(1U, frames->size()); +} diff --git a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_arm_unittest.cc b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_arm_unittest.cc index 588b5c5f4775..8a0fd5e95b15 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_arm_unittest.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_arm_unittest.cc @@ -54,6 +54,7 @@ using google_breakpad::CodeModule; using google_breakpad::StackFrameSymbolizer; using google_breakpad::StackFrame; using google_breakpad::StackFrameARM; +using google_breakpad::Stackwalker; using google_breakpad::StackwalkerARM; using google_breakpad::SystemInfo; using google_breakpad::WindowsFrameInfo; @@ -62,6 +63,7 @@ using google_breakpad::test_assembler::Label; using google_breakpad::test_assembler::Section; using std::vector; using testing::_; +using testing::AnyNumber; using testing::Return; using testing::SetArgumentPointee; using testing::Test; @@ -90,16 +92,25 @@ class StackwalkerARMFixture { // By default, none of the modules have symbol info; call // SetModuleSymbols to override this. - EXPECT_CALL(supplier, GetCStringSymbolData(_, _, _, _)) + EXPECT_CALL(supplier, GetCStringSymbolData(_, _, _, _, _)) .WillRepeatedly(Return(MockSymbolSupplier::NOT_FOUND)); + + // Avoid GMOCK WARNING "Uninteresting mock function call - returning + // directly" for FreeSymbolData(). + EXPECT_CALL(supplier, FreeSymbolData(_)).Times(AnyNumber()); + + // Reset max_frames_scanned since it's static. + Stackwalker::set_max_frames_scanned(1024); } // Set the Breakpad symbol information that supplier should return for // MODULE to INFO. void SetModuleSymbols(MockCodeModule *module, const string &info) { - char *buffer = supplier.CopySymbolDataAndOwnTheCopy(info); - EXPECT_CALL(supplier, GetCStringSymbolData(module, &system_info, _, _)) + size_t buffer_size; + char *buffer = supplier.CopySymbolDataAndOwnTheCopy(info, &buffer_size); + EXPECT_CALL(supplier, GetCStringSymbolData(module, &system_info, _, _, _)) .WillRepeatedly(DoAll(SetArgumentPointee<3>(buffer), + SetArgumentPointee<4>(buffer_size), Return(MockSymbolSupplier::FOUND))); } @@ -142,8 +153,11 @@ TEST_F(SanityCheck, NoResolver) { &frame_symbolizer); // This should succeed even without a resolver or supplier. vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(1U, frames->size()); StackFrameARM *frame = static_cast(frames->at(0)); @@ -162,8 +176,11 @@ TEST_F(GetContextFrame, Simple) { StackwalkerARM walker(&system_info, &raw_context, -1, &stack_region, &modules, &frame_symbolizer); vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(1U, frames->size()); StackFrameARM *frame = static_cast(frames->at(0)); @@ -179,8 +196,11 @@ TEST_F(GetContextFrame, NoStackMemory) { StackwalkerARM walker(&system_info, &raw_context, -1, NULL, &modules, &frame_symbolizer); vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(1U, frames->size()); StackFrameARM *frame = static_cast(frames->at(0)); @@ -229,10 +249,13 @@ TEST_F(GetCallerFrame, ScanWithoutSymbols) { StackwalkerARM walker(&system_info, &raw_context, -1, &stack_region, &modules, &frame_symbolizer); vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(2U, modules_without_symbols.size()); ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); ASSERT_EQ("module2", modules_without_symbols[1]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(3U, frames->size()); @@ -297,8 +320,11 @@ TEST_F(GetCallerFrame, ScanWithFunctionSymbols) { StackwalkerARM walker(&system_info, &raw_context, -1, &stack_region, &modules, &frame_symbolizer); vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(2U, frames->size()); @@ -344,7 +370,7 @@ TEST_F(GetCallerFrame, ScanFirstFrame) { .D32(0xF0000000) // more junk .D32(0x0000000D) - .Append(96, 0) // more space + .Append(136, 0) // more space .D32(return_address2) // actual return address // (won't be found) @@ -360,10 +386,13 @@ TEST_F(GetCallerFrame, ScanFirstFrame) { StackwalkerARM walker(&system_info, &raw_context, -1, &stack_region, &modules, &frame_symbolizer); vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(2U, modules_without_symbols.size()); ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); ASSERT_EQ("module2", modules_without_symbols[1]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(2U, frames->size()); @@ -381,6 +410,61 @@ TEST_F(GetCallerFrame, ScanFirstFrame) { EXPECT_EQ(frame1_sp.Value(), frame1->context.iregs[MD_CONTEXT_ARM_REG_SP]); } +// Test that set_max_frames_scanned prevents using stack scanning +// to find caller frames. +TEST_F(GetCallerFrame, ScanningNotAllowed) { + // When the stack walker resorts to scanning the stack, + // only addresses located within loaded modules are + // considered valid return addresses. + stack_section.start() = 0x80000000; + uint32_t return_address1 = 0x50000100; + uint32_t return_address2 = 0x50000900; + Label frame1_sp, frame2_sp; + stack_section + // frame 0 + .Append(16, 0) // space + + .D32(0x40090000) // junk that's not + .D32(0x60000000) // a return address + + .D32(return_address1) // actual return address + // frame 1 + .Mark(&frame1_sp) + .Append(16, 0) // space + + .D32(0xF0000000) // more junk + .D32(0x0000000D) + + .D32(return_address2) // actual return address + // frame 2 + .Mark(&frame2_sp) + .Append(32, 0); // end of stack + RegionFromSection(); + + raw_context.iregs[MD_CONTEXT_ARM_REG_PC] = 0x40005510; + raw_context.iregs[MD_CONTEXT_ARM_REG_SP] = stack_section.start().Value(); + + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); + StackwalkerARM walker(&system_info, &raw_context, -1, &stack_region, &modules, + &frame_symbolizer); + Stackwalker::set_max_frames_scanned(0); + + vector modules_without_symbols; + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); + ASSERT_EQ(1U, modules_without_symbols.size()); + ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); + frames = call_stack.frames(); + ASSERT_EQ(1U, frames->size()); + + StackFrameARM *frame0 = static_cast(frames->at(0)); + EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame0->trust); + ASSERT_EQ(StackFrameARM::CONTEXT_VALID_ALL, frame0->context_validity); + EXPECT_EQ(0, memcmp(&raw_context, &frame0->context, sizeof(raw_context))); +} + struct CFIFixture: public StackwalkerARMFixture { CFIFixture() { // Provide a bunch of STACK CFI records; we'll walk to the caller @@ -472,8 +556,11 @@ struct CFIFixture: public StackwalkerARMFixture { &modules, &frame_symbolizer); walker.SetContextFrameValidity(context_frame_validity); vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(2U, frames->size()); @@ -666,8 +753,11 @@ TEST_F(CFI, RejectBackwards) { StackwalkerARM walker(&system_info, &raw_context, -1, &stack_region, &modules, &frame_symbolizer); vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(1U, frames->size()); } @@ -680,8 +770,11 @@ TEST_F(CFI, RejectBadExpressions) { StackwalkerARM walker(&system_info, &raw_context, -1, &stack_region, &modules, &frame_symbolizer); vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(1U, frames->size()); } @@ -740,10 +833,13 @@ TEST_F(GetFramesByFramePointer, OnlyFramePointer) { &stack_region, &modules, &frame_symbolizer); vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(2U, modules_without_symbols.size()); ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); ASSERT_EQ("module2", modules_without_symbols[1]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(3U, frames->size()); @@ -834,9 +930,12 @@ TEST_F(GetFramesByFramePointer, FramePointerAndCFI) { &stack_region, &modules, &frame_symbolizer); vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(1U, modules_without_symbols.size()); ASSERT_EQ("module2", modules_without_symbols[0]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(3U, frames->size()); diff --git a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_mips.cc b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_mips.cc new file mode 100644 index 000000000000..7db342192323 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_mips.cc @@ -0,0 +1,300 @@ +// Copyright (c) 2013 Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// stackwalker_mips.cc: MIPS-specific stackwalker. +// +// See stackwalker_mips.h for documentation. +// +// Author: Tata Elxsi + +#include "common/scoped_ptr.h" +#include "google_breakpad/processor/call_stack.h" +#include "google_breakpad/processor/code_modules.h" +#include "google_breakpad/processor/memory_region.h" +#include "google_breakpad/processor/source_line_resolver_interface.h" +#include "google_breakpad/processor/stack_frame_cpu.h" +#include "processor/cfi_frame_info.h" +#include "processor/logging.h" +#include "processor/postfix_evaluator-inl.h" +#include "processor/stackwalker_mips.h" +#include "processor/windows_frame_info.h" +#include "google_breakpad/common/minidump_cpu_mips.h" + +namespace google_breakpad { + +StackwalkerMIPS::StackwalkerMIPS(const SystemInfo* system_info, + const MDRawContextMIPS* context, + MemoryRegion* memory, + const CodeModules* modules, + StackFrameSymbolizer* resolver_helper) + : Stackwalker(system_info, memory, modules, resolver_helper), + context_(context) { + if (memory_ && memory_->GetBase() + memory_->GetSize() - 1 > 0xffffffff) { + BPLOG(ERROR) << "Memory out of range for stackwalking: " + << HexString(memory_->GetBase()) + << "+" + << HexString(memory_->GetSize()); + memory_ = NULL; + } +} + +StackFrame* StackwalkerMIPS::GetContextFrame() { + if (!context_) { + BPLOG(ERROR) << "Can't get context frame without context."; + return NULL; + } + + StackFrameMIPS* frame = new StackFrameMIPS(); + + // The instruction pointer is stored directly in a register, so pull it + // straight out of the CPU context structure. + frame->context = *context_; + frame->context_validity = StackFrameMIPS::CONTEXT_VALID_ALL; + frame->trust = StackFrame::FRAME_TRUST_CONTEXT; + frame->instruction = frame->context.epc; + + return frame; +} + +// Register names for mips. +static const char* const kRegisterNames[] = { + "$zero", "$at", "$v0", "$v1", "$a0", "$a1", "$a2", "$a3", "$to", "$t1", + "$t2", "$t3", "$t4", "$t5", "$t6", "$t7", "$s0", "$s1", "$s2", "$s3", + "$s4", "$s5", "$s6", "$s7", "$t8", "$t9", "$k0", "$k1", "$gp", "$sp", + "$fp", "$ra", NULL + // TODO(gordanac): add float point save registers +}; + +StackFrameMIPS* StackwalkerMIPS::GetCallerByCFIFrameInfo( + const vector& frames, + CFIFrameInfo* cfi_frame_info) { + StackFrameMIPS* last_frame = static_cast(frames.back()); + + uint32_t sp = 0, pc = 0; + + // Populate a dictionary with the valid register values in last_frame. + CFIFrameInfo::RegisterValueMap callee_registers; + // Use the STACK CFI data to recover the caller's register values. + CFIFrameInfo::RegisterValueMap caller_registers; + + for (int i = 0; kRegisterNames[i]; ++i) { + caller_registers[kRegisterNames[i]] = last_frame->context.iregs[i]; + callee_registers[kRegisterNames[i]] = last_frame->context.iregs[i]; + } + + if (!cfi_frame_info->FindCallerRegs(callee_registers, *memory_, + &caller_registers)) { + return NULL; + } + + CFIFrameInfo::RegisterValueMap::const_iterator entry = + caller_registers.find(".cfa"); + + if (entry != caller_registers.end()) { + sp = entry->second; + caller_registers["$sp"] = entry->second; + } + + entry = caller_registers.find(".ra"); + if (entry != caller_registers.end()) { + caller_registers["$ra"] = entry->second; + pc = entry->second - 2 * sizeof(pc); + } + caller_registers["$pc"] = pc; + // Construct a new stack frame given the values the CFI recovered. + scoped_ptr frame(new StackFrameMIPS()); + + for (int i = 0; kRegisterNames[i]; ++i) { + CFIFrameInfo::RegisterValueMap::const_iterator caller_entry = + caller_registers.find(kRegisterNames[i]); + + if (caller_entry != caller_registers.end()) { + // The value of this register is recovered; fill the context with the + // value from caller_registers. + frame->context.iregs[i] = caller_entry->second; + frame->context_validity |= StackFrameMIPS::RegisterValidFlag(i); + } else if (((i >= INDEX_MIPS_REG_S0 && i <= INDEX_MIPS_REG_S7) || + (i > INDEX_MIPS_REG_GP && i < INDEX_MIPS_REG_RA)) && + (last_frame->context_validity & + StackFrameMIPS::RegisterValidFlag(i))) { + // If the STACK CFI data doesn't mention some callee-save register, and + // it is valid in the callee, assume the callee has not yet changed it. + // Calee-save registers according to the MIPS o32 ABI specification are: + // $s0 to $s7 + // $sp, $s8 + frame->context.iregs[i] = last_frame->context.iregs[i]; + frame->context_validity |= StackFrameMIPS::RegisterValidFlag(i); + } + } + + frame->context.epc = caller_registers["$pc"]; + frame->instruction = caller_registers["$pc"]; + frame->context_validity |= StackFrameMIPS::CONTEXT_VALID_PC; + + frame->context.iregs[MD_CONTEXT_MIPS_REG_RA] = caller_registers["$ra"]; + frame->context_validity |= StackFrameMIPS::CONTEXT_VALID_RA; + + frame->trust = StackFrame::FRAME_TRUST_CFI; + + return frame.release(); +} + +StackFrame* StackwalkerMIPS::GetCallerFrame(const CallStack* stack, + bool stack_scan_allowed) { + if (!memory_ || !stack) { + BPLOG(ERROR) << "Can't get caller frame without memory or stack"; + return NULL; + } + + const vector& frames = *stack->frames(); + StackFrameMIPS* last_frame = static_cast(frames.back()); + scoped_ptr new_frame; + + // See if there is DWARF call frame information covering this address. + scoped_ptr cfi_frame_info( + frame_symbolizer_->FindCFIFrameInfo(last_frame)); + if (cfi_frame_info.get()) + new_frame.reset(GetCallerByCFIFrameInfo(frames, cfi_frame_info.get())); + + // If caller frame is not found in CFI try analyzing the stack. + if (stack_scan_allowed && !new_frame.get()) { + new_frame.reset(GetCallerByStackScan(frames)); + } + + // If nothing worked, tell the caller. + if (!new_frame.get()) { + return NULL; + } + + // Treat an instruction address of 0 as end-of-stack. + if (new_frame->context.epc == 0) { + return NULL; + } + + // If the new stack pointer is at a lower address than the old, then + // that's clearly incorrect. Treat this as end-of-stack to enforce + // progress and avoid infinite loops. + if (new_frame->context.iregs[MD_CONTEXT_MIPS_REG_SP] <= + last_frame->context.iregs[MD_CONTEXT_MIPS_REG_SP]) { + return NULL; + } + + return new_frame.release(); +} + +StackFrameMIPS* StackwalkerMIPS::GetCallerByStackScan( + const vector& frames) { + const uint32_t kMaxFrameStackSize = 1024; + const uint32_t kMinArgsOnStack = 4; + + StackFrameMIPS* last_frame = static_cast(frames.back()); + + uint32_t last_sp = last_frame->context.iregs[MD_CONTEXT_MIPS_REG_SP]; + uint32_t caller_pc, caller_sp, caller_fp; + + // Return address cannot be obtained directly. + // Force stackwalking. + + // We cannot use frame pointer to get the return address. + // We'll scan the stack for a + // return address. This can happen if last_frame is executing code + // for a module for which we don't have symbols. + int count = kMaxFrameStackSize / sizeof(caller_pc); + + if (frames.size() > 1) { + // In case of mips32 ABI stack frame of a nonleaf function + // must have minimum stack frame assigned for 4 arguments (4 words). + // Move stack pointer for 4 words to avoid reporting non-existing frames + // for all frames except the topmost one. + // There is no way of knowing if topmost frame belongs to a leaf or + // a nonleaf function. + last_sp += kMinArgsOnStack * sizeof(caller_pc); + // Adjust 'count' so that return address is scanned only in limits + // of one stack frame. + count -= kMinArgsOnStack; + } + + do { + // Scanning for return address from stack pointer of the last frame. + if (!ScanForReturnAddress(last_sp, &caller_sp, &caller_pc, count)) { + // If we can't find an instruction pointer even with stack scanning, + // give up. + BPLOG(ERROR) << " ScanForReturnAddress failed "; + return NULL; + } + // Get $fp stored in the stack frame. + if (!memory_->GetMemoryAtAddress(caller_sp - sizeof(caller_pc), + &caller_fp)) { + BPLOG(INFO) << " GetMemoryAtAddress for fp failed " ; + return NULL; + } + + count = count - (caller_sp - last_sp) / sizeof(caller_pc); + // Now scan the next address in the stack. + last_sp = caller_sp + sizeof(caller_pc); + } while ((caller_fp - caller_sp >= kMaxFrameStackSize) && count > 0); + + if (!count) { + BPLOG(INFO) << " No frame found " ; + return NULL; + } + + // ScanForReturnAddress found a reasonable return address. Advance + // $sp to the location above the one where the return address was + // found. + caller_sp += sizeof(caller_pc); + // caller_pc is actually containing $ra value; + // $pc is two instructions before $ra, + // so the caller_pc needs to be decremented accordingly. + caller_pc -= 2 * sizeof(caller_pc); + + + // Create a new stack frame (ownership will be transferred to the caller) + // and fill it in. + StackFrameMIPS* frame = new StackFrameMIPS(); + frame->trust = StackFrame::FRAME_TRUST_SCAN; + frame->context = last_frame->context; + frame->context.epc = caller_pc; + frame->context_validity |= StackFrameMIPS::CONTEXT_VALID_PC; + frame->instruction = caller_pc; + + frame->context.iregs[MD_CONTEXT_MIPS_REG_SP] = caller_sp; + frame->context_validity |= StackFrameMIPS::CONTEXT_VALID_SP; + frame->context.iregs[MD_CONTEXT_MIPS_REG_FP] = caller_fp; + frame->context_validity |= StackFrameMIPS::CONTEXT_VALID_FP; + + frame->context.iregs[MD_CONTEXT_MIPS_REG_RA] = + caller_pc + 2 * sizeof(caller_pc); + frame->context_validity |= StackFrameMIPS::CONTEXT_VALID_RA; + + return frame; +} + +} // namespace google_breakpad + diff --git a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_mips.h b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_mips.h new file mode 100644 index 000000000000..5f97791fb76a --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_mips.h @@ -0,0 +1,85 @@ +// Copyright (c) 2013 Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// stackwalker_mips.h: MIPS-specific stackwalker. +// +// Provides stack frames given MIPS register context and a memory region +// corresponding to a MIPSstack. +// +// Author: Tata Elxsi + +#ifndef PROCESSOR_STACKWALKER_MIPS_H__ +#define PROCESSOR_STACKWALKER_MIPS_H__ + +#include "google_breakpad/common/breakpad_types.h" +#include "google_breakpad/common/minidump_format.h" +#include "google_breakpad/processor/stackwalker.h" +#include "google_breakpad/processor/stack_frame_cpu.h" +#include "processor/cfi_frame_info.h" + +namespace google_breakpad { + +class CodeModules; + +class StackwalkerMIPS : public Stackwalker { + public: + // Context is a MIPS context object that gives access to mips-specific + // register state corresponding to the innermost called frame to be + // included in the stack. The other arguments are passed directly + // through to the base Stackwalker constructor. + StackwalkerMIPS(const SystemInfo* system_info, + const MDRawContextMIPS* context, + MemoryRegion* memory, + const CodeModules* modules, + StackFrameSymbolizer* frame_symbolizer); + + private: + // Implementation of Stackwalker, using mips context and stack conventions. + virtual StackFrame* GetContextFrame(); + virtual StackFrame* GetCallerFrame(const CallStack* stack, + bool stack_scan_allowed); + + // Use cfi_frame_info (derived from STACK CFI records) to construct + // the frame that called frames.back(). The caller takes ownership + // of the returned frame. Return NULL on failure. + StackFrameMIPS* GetCallerByCFIFrameInfo(const vector& frames, + CFIFrameInfo* cfi_frame_info); + + // Scan the stack for plausible return address and frame pointer pair. + // The caller takes ownership of the returned frame. Return NULL on failure. + StackFrameMIPS* GetCallerByStackScan(const vector& frames); + + // Stores the CPU context corresponding to the innermost stack frame to + // be returned by GetContextFrame. + const MDRawContextMIPS* context_; +}; + +} // namespace google_breakpad + +#endif // PROCESSOR_STACKWALKER_MIPS_H__ diff --git a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_mips_unittest.cc b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_mips_unittest.cc new file mode 100644 index 000000000000..ed4be4f5b161 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_mips_unittest.cc @@ -0,0 +1,697 @@ +// Copyright (c) 2013, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Original author: Gordana Cmiljanovic + +// stackwalker_mips_unittest.cc: Unit tests for StackwalkerMIPS class. + +#include +#include +#include + +#include "breakpad_googletest_includes.h" +#include "common/test_assembler.h" +#include "common/using_std_string.h" +#include "google_breakpad/common/minidump_format.h" +#include "google_breakpad/processor/basic_source_line_resolver.h" +#include "google_breakpad/processor/call_stack.h" +#include "google_breakpad/processor/code_module.h" +#include "google_breakpad/processor/source_line_resolver_interface.h" +#include "google_breakpad/processor/stack_frame_cpu.h" +#include "processor/stackwalker_unittest_utils.h" +#include "processor/stackwalker_mips.h" +#include "processor/windows_frame_info.h" + +using google_breakpad::BasicSourceLineResolver; +using google_breakpad::CallStack; +using google_breakpad::CodeModule; +using google_breakpad::StackFrameSymbolizer; +using google_breakpad::StackFrame; +using google_breakpad::StackFrameMIPS; +using google_breakpad::Stackwalker; +using google_breakpad::StackwalkerMIPS; +using google_breakpad::SystemInfo; +using google_breakpad::WindowsFrameInfo; +using google_breakpad::test_assembler::kLittleEndian; +using google_breakpad::test_assembler::Label; +using google_breakpad::test_assembler::Section; +using std::vector; +using testing::_; +using testing::AnyNumber; +using testing::Return; +using testing::SetArgumentPointee; +using testing::Test; + +class StackwalkerMIPSFixture { + public: + StackwalkerMIPSFixture() + : stack_section(kLittleEndian), + // Give the two modules reasonable standard locations and names + // for tests to play with. + module1(0x00400000, 0x10000, "module1", "version1"), + module2(0x00500000, 0x10000, "module2", "version2") { + // Identify the system as a Linux system. + system_info.os = "Linux"; + system_info.os_short = "linux"; + system_info.os_version = "Observant Opossum"; // Jealous Jellyfish + system_info.cpu = "mips"; + system_info.cpu_info = ""; + + // Put distinctive values in the raw CPU context. + BrandContext(&raw_context); + + // Create some modules with some stock debugging information. + modules.Add(&module1); + modules.Add(&module2); + + // By default, none of the modules have symbol info; call + // SetModuleSymbols to override this. + EXPECT_CALL(supplier, GetCStringSymbolData(_, _, _, _, _)) + .WillRepeatedly(Return(MockSymbolSupplier::NOT_FOUND)); + + // Avoid GMOCK WARNING "Uninteresting mock function call - returning + // directly" for FreeSymbolData(). + EXPECT_CALL(supplier, FreeSymbolData(_)).Times(AnyNumber()); + + // Reset max_frames_scanned since it's static. + Stackwalker::set_max_frames_scanned(1024); + } + + // Set the Breakpad symbol information that supplier should return for + // MODULE to INFO. + void SetModuleSymbols(MockCodeModule* module, const string& info) { + size_t buffer_size; + char* buffer = supplier.CopySymbolDataAndOwnTheCopy(info, &buffer_size); + EXPECT_CALL(supplier, GetCStringSymbolData(module, &system_info, _, _, _)) + .WillRepeatedly(DoAll(SetArgumentPointee<3>(buffer), + SetArgumentPointee<4>(buffer_size), + Return(MockSymbolSupplier::FOUND))); + } + + // Populate stack_region with the contents of stack_section. Use + // stack_section.start() as the region's starting address. + void RegionFromSection() { + string contents; + ASSERT_TRUE(stack_section.GetContents(&contents)); + stack_region.Init(stack_section.start().Value(), contents); + } + + // Fill RAW_CONTEXT with pseudo-random data, for round-trip checking. + void BrandContext(MDRawContextMIPS* raw_context) { + uint8_t x = 173; + for (size_t i = 0; i < sizeof(*raw_context); ++i) + reinterpret_cast(raw_context)[i] = (x += 17); + } + + SystemInfo system_info; + MDRawContextMIPS raw_context; + Section stack_section; + MockMemoryRegion stack_region; + MockCodeModule module1; + MockCodeModule module2; + MockCodeModules modules; + MockSymbolSupplier supplier; + BasicSourceLineResolver resolver; + CallStack call_stack; + const vector* frames; +}; + +class SanityCheck: public StackwalkerMIPSFixture, public Test { }; + +TEST_F(SanityCheck, NoResolver) { + stack_section.start() = 0x80000000; + stack_section.D32(0).D32(0x0); + RegionFromSection(); + raw_context.epc = 0x00400020; + raw_context.iregs[MD_CONTEXT_MIPS_REG_SP] = 0x80000000; + + StackFrameSymbolizer frame_symbolizer(NULL, NULL); + StackwalkerMIPS walker(&system_info, &raw_context, &stack_region, &modules, + &frame_symbolizer); + // This should succeed, even without a resolver or supplier. + vector modules_without_symbols; + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); + ASSERT_EQ(1U, modules_without_symbols.size()); + ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); + frames = call_stack.frames(); + ASSERT_EQ(1U, frames->size()); + StackFrameMIPS* frame = static_cast(frames->at(0)); + // Check that the values from the original raw context made it + // through to the context in the stack frame. + EXPECT_EQ(0, memcmp(&raw_context, &frame->context, sizeof(raw_context))); +} + +class GetContextFrame: public StackwalkerMIPSFixture, public Test { }; + +TEST_F(GetContextFrame, Simple) { + stack_section.start() = 0x80000000; + stack_section.D32(0).D32(0x0); + RegionFromSection(); + raw_context.epc = 0x00400020; + raw_context.iregs[MD_CONTEXT_MIPS_REG_SP] = 0x80000000; + + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); + StackwalkerMIPS walker(&system_info, &raw_context, &stack_region, &modules, + &frame_symbolizer); + vector modules_without_symbols; + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); + ASSERT_EQ(1U, modules_without_symbols.size()); + ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); + frames = call_stack.frames(); + StackFrameMIPS* frame = static_cast(frames->at(0)); + // Check that the values from the original raw context made it + // through to the context in the stack frame. + EXPECT_EQ(0, memcmp(&raw_context, &frame->context, sizeof(raw_context))); +} + +// The stackwalker should be able to produce the context frame even +// without stack memory present. +TEST_F(GetContextFrame, NoStackMemory) { + raw_context.epc = 0x00400020; + raw_context.iregs[MD_CONTEXT_MIPS_REG_SP] = 0x80000000; + + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); + StackwalkerMIPS walker(&system_info, &raw_context, NULL, &modules, + &frame_symbolizer); + vector modules_without_symbols; + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); + ASSERT_EQ(1U, modules_without_symbols.size()); + ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); + frames = call_stack.frames(); + StackFrameMIPS* frame = static_cast(frames->at(0)); + // Check that the values from the original raw context made it + // through to the context in the stack frame. + EXPECT_EQ(0, memcmp(&raw_context, &frame->context, sizeof(raw_context))); +} + +class GetCallerFrame: public StackwalkerMIPSFixture, public Test { }; + +TEST_F(GetCallerFrame, ScanWithoutSymbols) { + // When the stack walker resorts to scanning the stack, + // only addresses located within loaded modules are + // considered valid return addresses. + // Force scanning through three frames to ensure that the + // stack pointer is set properly in scan-recovered frames. + stack_section.start() = 0x80000000; + uint32_t return_address1 = 0x00400100; + uint32_t return_address2 = 0x00400900; + Label frame1_sp, frame2_sp; + stack_section + // frame 0 + .Append(16, 0) // space + + .D32(0x00490000) // junk that's not + .D32(0x00600000) // a return address + + .D32(frame1_sp) // stack pointer + .D32(return_address1) // actual return address + // frame 1 + .Mark(&frame1_sp) + .Append(16, 0) // space + + .D32(0xF0000000) // more junk + .D32(0x0000000D) + + .D32(frame2_sp) // stack pointer + .D32(return_address2) // actual return address + // frame 2 + .Mark(&frame2_sp) + .Append(32, 0); // end of stack + RegionFromSection(); + + raw_context.epc = 0x00405510; + raw_context.iregs[MD_CONTEXT_MIPS_REG_SP] = stack_section.start().Value(); + raw_context.iregs[MD_CONTEXT_MIPS_REG_RA] = return_address1; + + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); + StackwalkerMIPS walker(&system_info, &raw_context, &stack_region, &modules, + &frame_symbolizer); + vector modules_without_symbols; + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); + ASSERT_EQ(1U, modules_without_symbols.size()); + ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); + frames = call_stack.frames(); + ASSERT_EQ(3U, frames->size()); + + StackFrameMIPS* frame0 = static_cast(frames->at(0)); + EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame0->trust); + ASSERT_EQ(StackFrameMIPS::CONTEXT_VALID_ALL, frame0->context_validity); + EXPECT_EQ(0, memcmp(&raw_context, &frame0->context, sizeof(raw_context))); + + StackFrameMIPS* frame1 = static_cast(frames->at(1)); + EXPECT_EQ(StackFrame::FRAME_TRUST_SCAN, frame1->trust); + ASSERT_EQ((StackFrameMIPS::CONTEXT_VALID_PC | + StackFrameMIPS::CONTEXT_VALID_SP | + StackFrameMIPS::CONTEXT_VALID_FP | + StackFrameMIPS::CONTEXT_VALID_RA), + frame1->context_validity); + EXPECT_EQ(return_address1 - 2 * sizeof(return_address1), frame1->context.epc); + EXPECT_EQ(frame1_sp.Value(), frame1->context.iregs[MD_CONTEXT_MIPS_REG_SP]); + + StackFrameMIPS* frame2 = static_cast(frames->at(2)); + EXPECT_EQ(StackFrame::FRAME_TRUST_SCAN, frame2->trust); + ASSERT_EQ((StackFrameMIPS::CONTEXT_VALID_PC | + StackFrameMIPS::CONTEXT_VALID_SP | + StackFrameMIPS::CONTEXT_VALID_FP | + StackFrameMIPS::CONTEXT_VALID_RA), + frame2->context_validity); + EXPECT_EQ(return_address2 - 2 * sizeof(return_address2), frame2->context.epc); + EXPECT_EQ(frame2_sp.Value(), frame2->context.iregs[MD_CONTEXT_MIPS_REG_SP]); +} + +TEST_F(GetCallerFrame, ScanWithFunctionSymbols) { + // During stack scanning, if a potential return address + // is located within a loaded module that has symbols, + // it is only considered a valid return address if it + // lies within a function's bounds. + stack_section.start() = 0x80000000; + uint32_t return_address = 0x00500200; + Label frame1_sp; + stack_section + // frame 0 + .Append(16, 0) // space + + .D32(0x00490000) // junk that's not + .D32(0x00600000) // a return address + + .D32(0x00401000) // a couple of plausible addresses + .D32(0x0050F000) // that are not within functions + + .D32(frame1_sp) // stack pointer + .D32(return_address) // actual return address + // frame 1 + .Mark(&frame1_sp) + .Append(32, 0); // end of stack + RegionFromSection(); + + raw_context.epc = 0x00400200; + raw_context.iregs[MD_CONTEXT_MIPS_REG_SP] = stack_section.start().Value(); + raw_context.iregs[MD_CONTEXT_MIPS_REG_RA] = return_address; + + SetModuleSymbols(&module1, + // The youngest frame's function. + "FUNC 100 400 10 monotreme\n"); + SetModuleSymbols(&module2, + // The calling frame's function. + "FUNC 100 400 10 marsupial\n"); + + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); + StackwalkerMIPS walker(&system_info, &raw_context, &stack_region, &modules, + &frame_symbolizer); + vector modules_without_symbols; + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); + ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); + frames = call_stack.frames(); + ASSERT_EQ(2U, frames->size()); + + StackFrameMIPS* frame0 = static_cast(frames->at(0)); + EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame0->trust); + ASSERT_EQ(StackFrameMIPS::CONTEXT_VALID_ALL, frame0->context_validity); + EXPECT_EQ(0, memcmp(&raw_context, &frame0->context, sizeof(raw_context))); + EXPECT_EQ("monotreme", frame0->function_name); + EXPECT_EQ(0x00400100U, frame0->function_base); + + StackFrameMIPS* frame1 = static_cast(frames->at(1)); + EXPECT_EQ(StackFrame::FRAME_TRUST_SCAN, frame1->trust); + ASSERT_EQ((StackFrameMIPS::CONTEXT_VALID_PC | + StackFrameMIPS::CONTEXT_VALID_SP | + StackFrameMIPS::CONTEXT_VALID_FP | + StackFrameMIPS::CONTEXT_VALID_RA), + frame1->context_validity); + EXPECT_EQ(return_address - 2 * sizeof(return_address), frame1->context.epc); + EXPECT_EQ(frame1_sp.Value(), frame1->context.iregs[MD_CONTEXT_MIPS_REG_SP]); + EXPECT_EQ("marsupial", frame1->function_name); + EXPECT_EQ(0x00500100U, frame1->function_base); +} + +TEST_F(GetCallerFrame, CheckStackFrameSizeLimit) { + // If the stackwalker resorts to stack scanning, it will scan only + // 1024 bytes of stack which correspondes to maximum size of stack frame. + stack_section.start() = 0x80000000; + uint32_t return_address1 = 0x00500100; + uint32_t return_address2 = 0x00500900; + Label frame1_sp, frame2_sp; + stack_section + // frame 0 + .Append(32, 0) // space + + .D32(0x00490000) // junk that's not + .D32(0x00600000) // a return address + + .Append(96, 0) // more space + + .D32(frame1_sp) // stack pointer + .D32(return_address1) // actual return address + // frame 1 + .Mark(&frame1_sp) + .Append(128 * 4, 0) // space + + .D32(0x00F00000) // more junk + .D32(0x0000000D) + + .Append(128 * 4, 0) // more space + + .D32(frame2_sp) // stack pointer + .D32(return_address2) // actual return address + // (won't be found) + // frame 2 + .Mark(&frame2_sp) + .Append(32, 0); // end of stack + RegionFromSection(); + + raw_context.epc = 0x00405510; + raw_context.iregs[MD_CONTEXT_MIPS_REG_SP] = stack_section.start().Value(); + raw_context.iregs[MD_CONTEXT_MIPS_REG_RA] = return_address1; + + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); + StackwalkerMIPS walker(&system_info, &raw_context, &stack_region, &modules, + &frame_symbolizer); + vector modules_without_symbols; + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); + ASSERT_EQ(2U, modules_without_symbols.size()); + ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); + ASSERT_EQ("module2", modules_without_symbols[1]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); + frames = call_stack.frames(); + ASSERT_EQ(2U, frames->size()); + + StackFrameMIPS* frame0 = static_cast(frames->at(0)); + EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame0->trust); + ASSERT_EQ(StackFrameMIPS::CONTEXT_VALID_ALL, frame0->context_validity); + EXPECT_EQ(0, memcmp(&raw_context, &frame0->context, sizeof(raw_context))); + + StackFrameMIPS* frame1 = static_cast(frames->at(1)); + EXPECT_EQ(StackFrame::FRAME_TRUST_SCAN, frame1->trust); + ASSERT_EQ((StackFrameMIPS::CONTEXT_VALID_PC | + StackFrameMIPS::CONTEXT_VALID_SP | + StackFrameMIPS::CONTEXT_VALID_FP | + StackFrameMIPS::CONTEXT_VALID_RA), + frame1->context_validity); + EXPECT_EQ(return_address1 - 2 * sizeof(return_address1), frame1->context.epc); + EXPECT_EQ(frame1_sp.Value(), frame1->context.iregs[MD_CONTEXT_MIPS_REG_SP]); +} + +// Test that set_max_frames_scanned prevents using stack scanning +// to find caller frames. +TEST_F(GetCallerFrame, ScanningNotAllowed) { + // When the stack walker resorts to scanning the stack, + // only fixed number of frames are allowed to be scanned out from stack + stack_section.start() = 0x80000000; + uint32_t return_address1 = 0x00500100; + uint32_t return_address2 = 0x00500900; + Label frame1_sp, frame2_sp; + stack_section + // frame 0 + .Append(32, 0) // space + + .D32(0x00490000) // junk that's not + .D32(0x00600000) // a return address + + .Append(96, 0) // more space + + .D32(frame1_sp) // stack pointer + .D32(return_address1) // actual return address + // frame 1 + .Mark(&frame1_sp) + .Append(128 * 4, 0) // space + + .D32(0x00F00000) // more junk + .D32(0x0000000D) + + .Append(128 * 4, 0) // more space + + .D32(frame2_sp) // stack pointer + .D32(return_address2) // actual return address + // (won't be found) + // frame 2 + .Mark(&frame2_sp) + .Append(32, 0); // end of stack + RegionFromSection(); + + raw_context.epc = 0x00405510; + raw_context.iregs[MD_CONTEXT_MIPS_REG_SP] = stack_section.start().Value(); + raw_context.iregs[MD_CONTEXT_MIPS_REG_RA] = return_address1; + + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); + StackwalkerMIPS walker(&system_info, &raw_context, &stack_region, &modules, + &frame_symbolizer); + Stackwalker::set_max_frames_scanned(0); + + vector modules_without_symbols; + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); + ASSERT_EQ(1U, modules_without_symbols.size()); + ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); + frames = call_stack.frames(); + ASSERT_EQ(1U, frames->size()); + + StackFrameMIPS* frame0 = static_cast(frames->at(0)); + EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame0->trust); + ASSERT_EQ(StackFrameMIPS::CONTEXT_VALID_ALL, frame0->context_validity); + EXPECT_EQ(0, memcmp(&raw_context, &frame0->context, sizeof(raw_context))); +} + +struct CFIFixture: public StackwalkerMIPSFixture { + CFIFixture() { + // Provide some STACK CFI records; + SetModuleSymbols(&module1, + // The youngest frame's function. + "FUNC 4000 1000 0 enchiridion\n" + // Initially, nothing has been pushed on the stack, + // and the return address is still in the $ra register. + "STACK CFI INIT 4000 1000 .cfa: $sp 0 + .ra: $ra\n" + // Move stack pointer. + "STACK CFI 4004 .cfa: $sp 32 +\n" + // store $fp and ra + "STACK CFI 4008 $fp: .cfa -8 + ^ .ra: .cfa -4 + ^\n" + // restore $fp + "STACK CFI 400c .cfa: $fp 32 +\n" + // restore $sp + "STACK CFI 4018 .cfa: $sp 32 +\n" + + "STACK CFI 4020 $fp: $fp .cfa: $sp 0 + .ra: .ra\n" + + // The calling function. + "FUNC 5000 1000 0 epictetus\n" + // Initially, nothing has been pushed on the stack, + // and the return address is still in the $ra register. + "STACK CFI INIT 5000 1000 .cfa: $sp .ra: $ra\n" + // Mark it as end of stack. + "STACK CFI INIT 5000 8 .cfa: $sp 0 + .ra: $ra\n" + + // A function whose CFI makes the stack pointer + // go backwards. + "FUNC 6000 1000 20 palinal\n" + "STACK CFI INIT 6000 1000 .cfa: $sp 4 - .ra: $ra\n" + + // A function with CFI expressions that can't be + // evaluated. + "FUNC 7000 1000 20 rhetorical\n" + "STACK CFI INIT 7000 1000 .cfa: moot .ra: ambiguous\n" + ); + + // Provide some distinctive values for the caller's registers. + expected.epc = 0x00405508; + expected.iregs[MD_CONTEXT_MIPS_REG_S0] = 0x0; + expected.iregs[MD_CONTEXT_MIPS_REG_S1] = 0x1; + expected.iregs[MD_CONTEXT_MIPS_REG_S2] = 0x2; + expected.iregs[MD_CONTEXT_MIPS_REG_S3] = 0x3; + expected.iregs[MD_CONTEXT_MIPS_REG_S4] = 0x4; + expected.iregs[MD_CONTEXT_MIPS_REG_S5] = 0x5; + expected.iregs[MD_CONTEXT_MIPS_REG_S6] = 0x6; + expected.iregs[MD_CONTEXT_MIPS_REG_S7] = 0x7; + expected.iregs[MD_CONTEXT_MIPS_REG_SP] = 0x80000000; + expected.iregs[MD_CONTEXT_MIPS_REG_FP] = 0x80000000; + expected.iregs[MD_CONTEXT_MIPS_REG_RA] = 0x00405510; + + // Expect CFI to recover all callee-save registers. Since CFI is the + // only stack frame construction technique we have, aside from the + // context frame itself, there's no way for us to have a set of valid + // registers smaller than this. + expected_validity = (StackFrameMIPS::CONTEXT_VALID_PC | + StackFrameMIPS::CONTEXT_VALID_S0 | + StackFrameMIPS::CONTEXT_VALID_S1 | + StackFrameMIPS::CONTEXT_VALID_S2 | + StackFrameMIPS::CONTEXT_VALID_S3 | + StackFrameMIPS::CONTEXT_VALID_S4 | + StackFrameMIPS::CONTEXT_VALID_S5 | + StackFrameMIPS::CONTEXT_VALID_S6 | + StackFrameMIPS::CONTEXT_VALID_S7 | + StackFrameMIPS::CONTEXT_VALID_SP | + StackFrameMIPS::CONTEXT_VALID_FP | + StackFrameMIPS::CONTEXT_VALID_RA); + + // By default, context frames provide all registers, as normal. + context_frame_validity = StackFrameMIPS::CONTEXT_VALID_ALL; + + // By default, registers are unchanged. + raw_context = expected; + } + + // Walk the stack, using stack_section as the contents of the stack + // and raw_context as the current register values. (Set the stack + // pointer to the stack's starting address.) Expect two stack + // frames; in the older frame, expect the callee-saves registers to + // have values matching those in 'expected'. + void CheckWalk() { + RegionFromSection(); + raw_context.iregs[MD_CONTEXT_MIPS_REG_SP] = stack_section.start().Value(); + + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); + StackwalkerMIPS walker(&system_info, &raw_context, &stack_region, + &modules, &frame_symbolizer); + vector modules_without_symbols; + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); + ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); + frames = call_stack.frames(); + ASSERT_EQ(2U, frames->size()); + + StackFrameMIPS* frame0 = static_cast(frames->at(0)); + EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame0->trust); + ASSERT_EQ(StackFrameMIPS::CONTEXT_VALID_ALL, frame0->context_validity); + EXPECT_EQ("enchiridion", frame0->function_name); + EXPECT_EQ(0x00404000U, frame0->function_base); + + StackFrameMIPS* frame1 = static_cast(frames->at(1)); + EXPECT_EQ(StackFrame::FRAME_TRUST_CFI, frame1->trust); + ASSERT_EQ(expected_validity, frame1->context_validity); + EXPECT_EQ(expected.iregs[MD_CONTEXT_MIPS_REG_S0], + frame1->context.iregs[MD_CONTEXT_MIPS_REG_S0]); + EXPECT_EQ(expected.iregs[MD_CONTEXT_MIPS_REG_S1], + frame1->context.iregs[MD_CONTEXT_MIPS_REG_S1]); + EXPECT_EQ(expected.iregs[MD_CONTEXT_MIPS_REG_S2], + frame1->context.iregs[MD_CONTEXT_MIPS_REG_S2]); + EXPECT_EQ(expected.iregs[MD_CONTEXT_MIPS_REG_S3], + frame1->context.iregs[MD_CONTEXT_MIPS_REG_S3]); + EXPECT_EQ(expected.iregs[MD_CONTEXT_MIPS_REG_S4], + frame1->context.iregs[MD_CONTEXT_MIPS_REG_S4]); + EXPECT_EQ(expected.iregs[MD_CONTEXT_MIPS_REG_S5], + frame1->context.iregs[MD_CONTEXT_MIPS_REG_S5]); + EXPECT_EQ(expected.iregs[MD_CONTEXT_MIPS_REG_S6], + frame1->context.iregs[MD_CONTEXT_MIPS_REG_S6]); + EXPECT_EQ(expected.iregs[MD_CONTEXT_MIPS_REG_S7], + frame1->context.iregs[MD_CONTEXT_MIPS_REG_S7]); + EXPECT_EQ(expected.iregs[MD_CONTEXT_MIPS_REG_FP], + frame1->context.iregs[MD_CONTEXT_MIPS_REG_FP]); + EXPECT_EQ(expected.iregs[MD_CONTEXT_MIPS_REG_RA], + frame1->context.iregs[MD_CONTEXT_MIPS_REG_RA]); + EXPECT_EQ(expected.iregs[MD_CONTEXT_MIPS_REG_SP], + frame1->context.iregs[MD_CONTEXT_MIPS_REG_SP]); + EXPECT_EQ(expected.epc, frame1->context.epc); + EXPECT_EQ(expected.epc, frame1->instruction); + EXPECT_EQ("epictetus", frame1->function_name); + EXPECT_EQ(0x00405000U, frame1->function_base); + } + + // The values we expect to find for the caller's registers. + MDRawContextMIPS expected; + + // The validity mask for expected. + int expected_validity; + + // The validity mask to impose on the context frame. + int context_frame_validity; +}; + +class CFI: public CFIFixture, public Test { }; + +// TODO(gordanac): add CFI tests + +TEST_F(CFI, At4004) { + Label frame1_sp = expected.iregs[MD_CONTEXT_MIPS_REG_SP]; + stack_section + // frame0 + .Append(24, 0) // space + .D32(frame1_sp) // stack pointer + .D32(0x00405510) // return address + .Mark(&frame1_sp); // This effectively sets stack_section.start(). + raw_context.epc = 0x00404004; + CheckWalk(); +} + +// Check that we reject rules that would cause the stack pointer to +// move in the wrong direction. +TEST_F(CFI, RejectBackwards) { + raw_context.epc = 0x40005000; + raw_context.iregs[MD_CONTEXT_MIPS_REG_SP] = 0x80000000; + raw_context.iregs[MD_CONTEXT_MIPS_REG_RA] = 0x00405510; + + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); + StackwalkerMIPS walker(&system_info, &raw_context, &stack_region, &modules, + &frame_symbolizer); + vector modules_without_symbols; + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); + ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); + frames = call_stack.frames(); + ASSERT_EQ(1U, frames->size()); +} + +// Check that we reject rules whose expressions' evaluation fails. +TEST_F(CFI, RejectBadExpressions) { + raw_context.epc = 0x00407000; + raw_context.iregs[MD_CONTEXT_MIPS_REG_SP] = 0x80000000; + raw_context.iregs[MD_CONTEXT_MIPS_REG_RA] = 0x00405510; + + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); + StackwalkerMIPS walker(&system_info, &raw_context, &stack_region, &modules, + &frame_symbolizer); + vector modules_without_symbols; + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); + ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); + frames = call_stack.frames(); + ASSERT_EQ(1U, frames->size()); +} diff --git a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_ppc.cc b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_ppc.cc index e3f719382e5f..7e2088440b3b 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_ppc.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_ppc.cc @@ -38,7 +38,7 @@ #include "google_breakpad/processor/call_stack.h" #include "google_breakpad/processor/memory_region.h" #include "google_breakpad/processor/stack_frame_cpu.h" -#include "common/logging.h" +#include "processor/logging.h" namespace google_breakpad { diff --git a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_ppc64.cc b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_ppc64.cc new file mode 100644 index 000000000000..51c71fe56115 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_ppc64.cc @@ -0,0 +1,137 @@ +// Copyright (c) 2013 Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// stackwalker_ppc64.cc: ppc64-specific stackwalker. +// +// See stackwalker_ppc64.h for documentation. + + +#include "processor/stackwalker_ppc64.h" +#include "google_breakpad/processor/call_stack.h" +#include "google_breakpad/processor/memory_region.h" +#include "google_breakpad/processor/stack_frame_cpu.h" +#include "processor/logging.h" + +#include + +namespace google_breakpad { + + +StackwalkerPPC64::StackwalkerPPC64(const SystemInfo* system_info, + const MDRawContextPPC64* context, + MemoryRegion* memory, + const CodeModules* modules, + StackFrameSymbolizer* resolver_helper) + : Stackwalker(system_info, memory, modules, resolver_helper), + context_(context) { +} + + +StackFrame* StackwalkerPPC64::GetContextFrame() { + if (!context_) { + BPLOG(ERROR) << "Can't get context frame without context"; + return NULL; + } + + StackFramePPC64* frame = new StackFramePPC64(); + + // The instruction pointer is stored directly in a register, so pull it + // straight out of the CPU context structure. + frame->context = *context_; + frame->context_validity = StackFramePPC64::CONTEXT_VALID_ALL; + frame->trust = StackFrame::FRAME_TRUST_CONTEXT; + frame->instruction = frame->context.srr0; + + return frame; +} + + +StackFrame* StackwalkerPPC64::GetCallerFrame(const CallStack* stack, + bool stack_scan_allowed) { + if (!memory_ || !stack) { + BPLOG(ERROR) << "Can't get caller frame without memory or stack"; + return NULL; + } + + // The instruction pointers for previous frames are saved on the stack. + // The typical ppc64 calling convention is for the called procedure to store + // its return address in the calling procedure's stack frame at 8(%r1), + // and to allocate its own stack frame by decrementing %r1 (the stack + // pointer) and saving the old value of %r1 at 0(%r1). Because the ppc64 has + // no hardware stack, there is no distinction between the stack pointer and + // frame pointer, and what is typically thought of as the frame pointer on + // an x86 is usually referred to as the stack pointer on a ppc64. + + StackFramePPC64* last_frame = static_cast( + stack->frames()->back()); + + // A caller frame must reside higher in memory than its callee frames. + // Anything else is an error, or an indication that we've reached the + // end of the stack. + uint64_t stack_pointer; + if (!memory_->GetMemoryAtAddress(last_frame->context.gpr[1], + &stack_pointer) || + stack_pointer <= last_frame->context.gpr[1]) { + return NULL; + } + + // Mac OS X/Darwin gives 1 as the return address from the bottom-most + // frame in a stack (a thread's entry point). I haven't found any + // documentation on this, but 0 or 1 would be bogus return addresses, + // so check for them here and return false (end of stack) when they're + // hit to avoid having a phantom frame. + uint64_t instruction; + if (!memory_->GetMemoryAtAddress(stack_pointer + 16, &instruction) || + instruction <= 1) { + return NULL; + } + + StackFramePPC64* frame = new StackFramePPC64(); + + frame->context = last_frame->context; + frame->context.srr0 = instruction; + frame->context.gpr[1] = stack_pointer; + frame->context_validity = StackFramePPC64::CONTEXT_VALID_SRR0 | + StackFramePPC64::CONTEXT_VALID_GPR1; + frame->trust = StackFrame::FRAME_TRUST_FP; + + // frame->context.srr0 is the return address, which is one instruction + // past the branch that caused us to arrive at the callee. Set + // frame_ppc64->instruction to eight less than that. Since all ppc64 + // instructions are 8 bytes wide, this is the address of the branch + // instruction. This allows source line information to match up with the + // line that contains a function call. Callers that require the exact + // return address value may access the context.srr0 field of StackFramePPC64. + frame->instruction = frame->context.srr0 - 8; + + return frame; +} + + +} // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_ppc64.h b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_ppc64.h new file mode 100644 index 000000000000..a406343af4e2 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_ppc64.h @@ -0,0 +1,77 @@ +// Copyright (c) 2013 Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// stackwalker_ppc64.h: ppc-specific stackwalker. +// +// Provides stack frames given ppc64 register context and a memory region +// corresponding to a ppc64 stack. + + +#ifndef PROCESSOR_STACKWALKER_PPC64_H__ +#define PROCESSOR_STACKWALKER_PPC64_H__ + + +#include "google_breakpad/common/breakpad_types.h" +#include "google_breakpad/common/minidump_format.h" +#include "google_breakpad/processor/stackwalker.h" + +namespace google_breakpad { + +class CodeModules; + +class StackwalkerPPC64 : public Stackwalker { + public: + // context is a ppc64 context object that gives access to ppc64-specific + // register state corresponding to the innermost called frame to be + // included in the stack. The other arguments are passed directly through + // to the base Stackwalker constructor. + StackwalkerPPC64(const SystemInfo* system_info, + const MDRawContextPPC64* context, + MemoryRegion* memory, + const CodeModules* modules, + StackFrameSymbolizer* frame_symbolizer); + + private: + // Implementation of Stackwalker, using ppc64 context (stack pointer in %r1, + // saved program counter in %srr0) and stack conventions (saved stack + // pointer at 0(%r1), return address at 8(0(%r1)). + virtual StackFrame* GetContextFrame(); + virtual StackFrame* GetCallerFrame(const CallStack* stack, + bool stack_scan_allowed); + + // Stores the CPU context corresponding to the innermost stack frame to + // be returned by GetContextFrame. + const MDRawContextPPC64* context_; +}; + + +} // namespace google_breakpad + + +#endif // PROCESSOR_STACKWALKER_PPC64_H__ diff --git a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_selftest.cc b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_selftest.cc index 75d47582e6c3..f692d4c4c0db 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_selftest.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_selftest.cc @@ -49,6 +49,8 @@ // // Author: Mark Mentovai +#include + #include "processor/logging.h" #if defined(__i386) && !defined(__i386__) @@ -102,17 +104,20 @@ using google_breakpad::StackwalkerSPARC; // process' memory space by pointer. class SelfMemoryRegion : public MemoryRegion { public: - virtual uint64_t GetBase() { return 0; } - virtual uint32_t GetSize() { return 0xffffffff; } + virtual uint64_t GetBase() const { return 0; } + virtual uint32_t GetSize() const { return 0xffffffff; } - bool GetMemoryAtAddress(uint64_t address, uint8_t* value) { + bool GetMemoryAtAddress(uint64_t address, uint8_t* value) const { return GetMemoryAtAddressInternal(address, value); } - bool GetMemoryAtAddress(uint64_t address, uint16_t* value) { + bool GetMemoryAtAddress(uint64_t address, uint16_t* value) const { return GetMemoryAtAddressInternal(address, value); } - bool GetMemoryAtAddress(uint64_t address, uint32_t* value) { + bool GetMemoryAtAddress(uint64_t address, uint32_t* value) const { return GetMemoryAtAddressInternal(address, value); } - bool GetMemoryAtAddress(uint64_t address, uint64_t* value) { + bool GetMemoryAtAddress(uint64_t address, uint64_t* value) const { return GetMemoryAtAddressInternal(address, value); } + void Print() const { + assert(false); + } private: template bool GetMemoryAtAddressInternal(uint64_t address, diff --git a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_sparc.cc b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_sparc.cc index 51dbaa459ed8..ff2ea75a805e 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_sparc.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_sparc.cc @@ -37,7 +37,7 @@ #include "google_breakpad/processor/call_stack.h" #include "google_breakpad/processor/memory_region.h" #include "google_breakpad/processor/stack_frame_cpu.h" -#include "common/logging.h" +#include "processor/logging.h" #include "processor/stackwalker_sparc.h" namespace google_breakpad { diff --git a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_unittest_utils.h b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_unittest_utils.h index 076386618d27..73ceb199fe8a 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_unittest_utils.h +++ b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_unittest_utils.h @@ -36,6 +36,7 @@ #ifndef PROCESSOR_STACKWALKER_UNITTEST_UTILS_H_ #define PROCESSOR_STACKWALKER_UNITTEST_UTILS_H_ +#include #include #include #include @@ -75,6 +76,9 @@ class MockMemoryRegion: public google_breakpad::MemoryRegion { bool GetMemoryAtAddress(uint64_t address, uint64_t *value) const { return GetMemoryLittleEndian(address, value); } + void Print() const { + assert(false); + } private: // Fetch a little-endian value from ADDRESS in contents_ whose size @@ -171,18 +175,21 @@ class MockSymbolSupplier: public google_breakpad::SymbolSupplier { const SystemInfo *system_info, string *symbol_file, string *symbol_data)); - MOCK_METHOD4(GetCStringSymbolData, SymbolResult(const CodeModule *module, + MOCK_METHOD5(GetCStringSymbolData, SymbolResult(const CodeModule *module, const SystemInfo *system_info, string *symbol_file, - char **symbol_data)); + char **symbol_data, + size_t *symbol_data_size)); MOCK_METHOD1(FreeSymbolData, void(const CodeModule *module)); // Copies the passed string contents into a newly allocated buffer. // The newly allocated buffer will be freed during destruction. - char* CopySymbolDataAndOwnTheCopy(const std::string &info) { - unsigned int buffer_size = info.size() + 1; - char *symbol_data = new char [buffer_size]; - strcpy(symbol_data, info.c_str()); + char* CopySymbolDataAndOwnTheCopy(const std::string &info, + size_t *symbol_data_size) { + *symbol_data_size = info.size() + 1; + char *symbol_data = new char[*symbol_data_size]; + memcpy(symbol_data, info.c_str(), info.size()); + symbol_data[info.size()] = '\0'; symbol_data_to_free_.push_back(symbol_data); return symbol_data; } diff --git a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_x86.cc b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_x86.cc index abe4a629a281..29d98e4b8a9e 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_x86.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_x86.cc @@ -42,7 +42,7 @@ #include "google_breakpad/processor/memory_region.h" #include "google_breakpad/processor/source_line_resolver_interface.h" #include "google_breakpad/processor/stack_frame_cpu.h" -#include "common/logging.h" +#include "processor/logging.h" #include "processor/postfix_evaluator-inl.h" #include "processor/stackwalker_x86.h" #include "processor/windows_frame_info.h" @@ -50,6 +50,12 @@ namespace google_breakpad { +// Max reasonable size for a single x86 frame is 128 KB. This value is used in +// a heuristic for recovering of the EBP chain after a scan for return address. +// This value is based on a stack frame size histogram built for a set of +// popular third party libraries which suggests that 99.5% of all frames are +// smaller than 128 KB. +static const uint32_t kMaxReasonableGapBetweenFrames = 128 * 1024; const StackwalkerX86::CFIWalker::RegisterSet StackwalkerX86::cfi_register_map_[] = { @@ -58,23 +64,23 @@ StackwalkerX86::cfi_register_map_[] = { // restored upon return. But the callee_saves flags here really means // that the walker should assume they're unchanged if the CFI doesn't // mention them, which is clearly wrong for $eip and $esp. - { ToUniqueString("$eip"), ToUniqueString(".ra"), false, + { "$eip", ".ra", false, StackFrameX86::CONTEXT_VALID_EIP, &MDRawContextX86::eip }, - { ToUniqueString("$esp"), ToUniqueString(".cfa"), false, + { "$esp", ".cfa", false, StackFrameX86::CONTEXT_VALID_ESP, &MDRawContextX86::esp }, - { ToUniqueString("$ebp"), NULL, true, + { "$ebp", NULL, true, StackFrameX86::CONTEXT_VALID_EBP, &MDRawContextX86::ebp }, - { ToUniqueString("$eax"), NULL, false, + { "$eax", NULL, false, StackFrameX86::CONTEXT_VALID_EAX, &MDRawContextX86::eax }, - { ToUniqueString("$ebx"), NULL, true, + { "$ebx", NULL, true, StackFrameX86::CONTEXT_VALID_EBX, &MDRawContextX86::ebx }, - { ToUniqueString("$ecx"), NULL, false, + { "$ecx", NULL, false, StackFrameX86::CONTEXT_VALID_ECX, &MDRawContextX86::ecx }, - { ToUniqueString("$edx"), NULL, false, + { "$edx", NULL, false, StackFrameX86::CONTEXT_VALID_EDX, &MDRawContextX86::edx }, - { ToUniqueString("$esi"), NULL, true, + { "$esi", NULL, true, StackFrameX86::CONTEXT_VALID_ESI, &MDRawContextX86::esi }, - { ToUniqueString("$edi"), NULL, true, + { "$edi", NULL, true, StackFrameX86::CONTEXT_VALID_EDI, &MDRawContextX86::edi }, }; @@ -106,10 +112,9 @@ StackFrameX86::~StackFrameX86() { cfi_frame_info = NULL; } -uint64_t StackFrameX86::ReturnAddress() const -{ +uint64_t StackFrameX86::ReturnAddress() const { assert(context_validity & StackFrameX86::CONTEXT_VALID_EIP); - return context.eip; + return context.eip; } StackFrame* StackwalkerX86::GetContextFrame() { @@ -200,26 +205,39 @@ StackFrameX86* StackwalkerX86::GetCallerByWindowsFrameInfo( // here. PostfixEvaluator::DictionaryType dictionary; // Provide the current register values. - dictionary.set(ustr__ZSebp(), last_frame->context.ebp); - dictionary.set(ustr__ZSesp(), last_frame->context.esp); + dictionary["$ebp"] = last_frame->context.ebp; + dictionary["$esp"] = last_frame->context.esp; // Provide constants from the debug info for last_frame and its callee. // .cbCalleeParams is a Breakpad extension that allows us to use the // PostfixEvaluator engine when certain types of debugging information // are present without having to write the constants into the program // string as literals. - dictionary.set(ustr__ZDcbCalleeParams(), last_frame_callee_parameter_size); - dictionary.set(ustr__ZDcbSavedRegs(), last_frame_info->saved_register_size); - dictionary.set(ustr__ZDcbLocals(), last_frame_info->local_size); + dictionary[".cbCalleeParams"] = last_frame_callee_parameter_size; + dictionary[".cbSavedRegs"] = last_frame_info->saved_register_size; + dictionary[".cbLocals"] = last_frame_info->local_size; uint32_t raSearchStart = last_frame->context.esp + - last_frame_callee_parameter_size + - last_frame_info->local_size + - last_frame_info->saved_register_size; + last_frame_callee_parameter_size + + last_frame_info->local_size + + last_frame_info->saved_register_size; uint32_t raSearchStartOld = raSearchStart; uint32_t found = 0; // dummy value // Scan up to three words above the calculated search value, in case // the stack was aligned to a quadword boundary. + // + // TODO(ivan.penkov): Consider cleaning up the scan for return address that + // follows. The purpose of this scan is to adjust the .raSearchStart + // calculation (which is based on register %esp) in the cases where register + // %esp may have been aligned (up to a quadword). There are two problems + // with this approach: + // 1) In practice, 64 byte boundary alignment is seen which clearly can not + // be handled by a three word scan. + // 2) A search for a return address is "guesswork" by definition because + // the results will be different depending on what is left on the stack + // from previous executions. + // So, basically, the results from this scan should be ignored if other means + // for calculation of the value of .raSearchStart are available. if (ScanForReturnAddress(raSearchStart, &raSearchStart, &found, 3) && last_frame->trust == StackFrame::FRAME_TRUST_CONTEXT && last_frame->windows_frame_info != NULL && @@ -236,12 +254,7 @@ StackFrameX86* StackwalkerX86::GetCallerByWindowsFrameInfo( ScanForReturnAddress(raSearchStart, &raSearchStart, &found, 3); } - // The difference between raSearch and raSearchStart is unknown, - // but making them the same seems to work well in practice. - dictionary.set(ustr__ZDraSearchStart(), raSearchStart); - dictionary.set(ustr__ZDraSearch(), raSearchStart); - - dictionary.set(ustr__ZDcbParams(), last_frame_info->parameter_size); + dictionary[".cbParams"] = last_frame_info->parameter_size; // Decide what type of program string to use. The program string is in // postfix notation and will be passed to PostfixEvaluator::Evaluate. @@ -325,14 +338,35 @@ StackFrameX86* StackwalkerX86::GetCallerByWindowsFrameInfo( recover_ebp = false; } + // Check for alignment operators in the program string. If alignment + // operators are found, then current %ebp must be valid and it is the only + // reliable data point that can be used for getting to the previous frame. + // E.g. the .raSearchStart calculation (above) is based on %esp and since + // %esp was aligned in the current frame (which is a lossy operation) the + // calculated value of .raSearchStart cannot be correct and should not be + // used. Instead .raSearchStart must be calculated based on %ebp. + // The code that follows assumes that .raSearchStart is supposed to point + // at the saved return address (ebp + 4). + // For some more details on this topic, take a look at the following thread: + // https://groups.google.com/forum/#!topic/google-breakpad-dev/ZP1FA9B1JjM + if ((StackFrameX86::CONTEXT_VALID_EBP & last_frame->context_validity) != 0 && + program_string.find('@') != string::npos) { + raSearchStart = last_frame->context.ebp + 4; + } + + // The difference between raSearch and raSearchStart is unknown, + // but making them the same seems to work well in practice. + dictionary[".raSearchStart"] = raSearchStart; + dictionary[".raSearch"] = raSearchStart; + // Now crank it out, making sure that the program string set at least the // two required variables. PostfixEvaluator evaluator = PostfixEvaluator(&dictionary, memory_); PostfixEvaluator::DictionaryValidityType dictionary_validity; if (!evaluator.Evaluate(program_string, &dictionary_validity) || - !dictionary_validity.have(ustr__ZSeip()) || - !dictionary_validity.have(ustr__ZSesp())) { + dictionary_validity.find("$eip") == dictionary_validity.end() || + dictionary_validity.find("$esp") == dictionary_validity.end()) { // Program string evaluation failed. It may be that %eip is not somewhere // with stack frame info, and %ebp is pointing to non-stack memory, so // our evaluation couldn't succeed. We'll scan the stack for a return @@ -342,7 +376,8 @@ StackFrameX86* StackwalkerX86::GetCallerByWindowsFrameInfo( uint32_t location_start = last_frame->context.esp; uint32_t location, eip; if (!stack_scan_allowed - || !ScanForReturnAddress(location_start, &location, &eip)) { + || !ScanForReturnAddress(location_start, &location, &eip, + frames.size() == 1 /* is_context_frame */)) { // if we can't find an instruction pointer even with stack scanning, // give up. return NULL; @@ -351,8 +386,8 @@ StackFrameX86* StackwalkerX86::GetCallerByWindowsFrameInfo( // This seems like a reasonable return address. Since program string // evaluation failed, use it and set %esp to the location above the // one where the return address was found. - dictionary.set(ustr__ZSeip(), eip); - dictionary.set(ustr__ZSesp(), location + 4); + dictionary["$eip"] = eip; + dictionary["$esp"] = location + 4; trust = StackFrame::FRAME_TRUST_SCAN; } @@ -363,8 +398,7 @@ StackFrameX86* StackwalkerX86::GetCallerByWindowsFrameInfo( // However, if program string evaluation resulted in both %eip and // %ebp values of 0, trust that the end of the stack has been // reached and don't scan for anything else. - if (dictionary.get(ustr__ZSeip()) != 0 || - dictionary.get(ustr__ZSebp()) != 0) { + if (dictionary["$eip"] != 0 || dictionary["$ebp"] != 0) { int offset = 0; // This scan can only be done if a CodeModules object is available, to @@ -379,19 +413,20 @@ StackFrameX86* StackwalkerX86::GetCallerByWindowsFrameInfo( // ability, older OSes (pre-XP SP2) and CPUs (pre-P4) don't enforce // an independent execute privilege on memory pages. - uint32_t eip = dictionary.get(ustr__ZSeip()); + uint32_t eip = dictionary["$eip"]; if (modules_ && !modules_->GetModuleForAddress(eip)) { // The instruction pointer at .raSearchStart was invalid, so start // looking one 32-bit word above that location. - uint32_t location_start = dictionary.get(ustr__ZDraSearchStart()) + 4; + uint32_t location_start = dictionary[".raSearchStart"] + 4; uint32_t location; if (stack_scan_allowed - && ScanForReturnAddress(location_start, &location, &eip)) { + && ScanForReturnAddress(location_start, &location, &eip, + frames.size() == 1 /* is_context_frame */)) { // This is a better return address that what program string // evaluation found. Use it, and set %esp to the location above the // one where the return address was found. - dictionary.set(ustr__ZSeip(), eip); - dictionary.set(ustr__ZSesp(), location + 4); + dictionary["$eip"] = eip; + dictionary["$esp"] = location + 4; offset = location - location_start; trust = StackFrame::FRAME_TRUST_CFI_SCAN; } @@ -405,7 +440,7 @@ StackFrameX86* StackwalkerX86::GetCallerByWindowsFrameInfo( // stack. The scan is performed from the highest possible address to // the lowest, because the expectation is that the function's prolog // would have saved %ebp early. - uint32_t ebp = dictionary.get(ustr__ZSebp()); + uint32_t ebp = dictionary["$ebp"]; // When a scan for return address is used, it is possible to skip one or // more frames (when return address is not in a known module). One @@ -429,7 +464,7 @@ StackFrameX86* StackwalkerX86::GetCallerByWindowsFrameInfo( if (memory_->GetMemoryAtAddress(ebp, &value)) { // The candidate value is a pointer to the same memory region // (the stack). Prefer it as a recovered %ebp result. - dictionary.set(ustr__ZSebp(), ebp); + dictionary["$ebp"] = ebp; break; } } @@ -443,25 +478,25 @@ StackFrameX86* StackwalkerX86::GetCallerByWindowsFrameInfo( frame->trust = trust; frame->context = last_frame->context; - frame->context.eip = dictionary.get(ustr__ZSeip()); - frame->context.esp = dictionary.get(ustr__ZSesp()); - frame->context.ebp = dictionary.get(ustr__ZSebp()); + frame->context.eip = dictionary["$eip"]; + frame->context.esp = dictionary["$esp"]; + frame->context.ebp = dictionary["$ebp"]; frame->context_validity = StackFrameX86::CONTEXT_VALID_EIP | StackFrameX86::CONTEXT_VALID_ESP | StackFrameX86::CONTEXT_VALID_EBP; // These are nonvolatile (callee-save) registers, and the program string // may have filled them in. - if (dictionary_validity.have(ustr__ZSebx())) { - frame->context.ebx = dictionary.get(ustr__ZSebx()); + if (dictionary_validity.find("$ebx") != dictionary_validity.end()) { + frame->context.ebx = dictionary["$ebx"]; frame->context_validity |= StackFrameX86::CONTEXT_VALID_EBX; } - if (dictionary_validity.have(ustr__ZSesi())) { - frame->context.esi = dictionary.get(ustr__ZSesi()); + if (dictionary_validity.find("$esi") != dictionary_validity.end()) { + frame->context.esi = dictionary["$esi"]; frame->context_validity |= StackFrameX86::CONTEXT_VALID_ESI; } - if (dictionary_validity.have(ustr__ZSedi())) { - frame->context.edi = dictionary.get(ustr__ZSedi()); + if (dictionary_validity.find("$edi") != dictionary_validity.end()) { + frame->context.edi = dictionary["$edi"]; frame->context_validity |= StackFrameX86::CONTEXT_VALID_EDI; } @@ -537,17 +572,29 @@ StackFrameX86* StackwalkerX86::GetCallerByEBPAtBase( // for a module for which we don't have symbols, and that module // is compiled without a frame pointer. if (!stack_scan_allowed - || !ScanForReturnAddress(last_esp, &caller_esp, &caller_eip)) { + || !ScanForReturnAddress(last_esp, &caller_esp, &caller_eip, + frames.size() == 1 /* is_context_frame */)) { // if we can't find an instruction pointer even with stack scanning, // give up. return NULL; } - // ScanForReturnAddress found a reasonable return address. Advance - // %esp to the location above the one where the return address was - // found. Assume that %ebp is unchanged. + // ScanForReturnAddress found a reasonable return address. Advance %esp to + // the location immediately above the one where the return address was + // found. caller_esp += 4; - caller_ebp = last_ebp; + // Try to restore the %ebp chain. The caller %ebp should be stored at a + // location immediately below the one where the return address was found. + // A valid caller %ebp must be greater than the address where it is stored + // and the gap between the two adjacent frames should be reasonable. + uint32_t restored_ebp_chain = caller_esp - 8; + if (!memory_->GetMemoryAtAddress(restored_ebp_chain, &caller_ebp) || + caller_ebp <= restored_ebp_chain || + caller_ebp - restored_ebp_chain > kMaxReasonableGapBetweenFrames) { + // The restored %ebp chain doesn't appear to be valid. + // Assume that %ebp is unchanged. + caller_ebp = last_ebp; + } trust = StackFrame::FRAME_TRUST_SCAN; } diff --git a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_x86_unittest.cc b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_x86_unittest.cc index caf899e60e4b..d4c61c8c4e6d 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_x86_unittest.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/stackwalker_x86_unittest.cc @@ -53,6 +53,7 @@ using google_breakpad::CodeModule; using google_breakpad::StackFrameSymbolizer; using google_breakpad::StackFrame; using google_breakpad::StackFrameX86; +using google_breakpad::Stackwalker; using google_breakpad::StackwalkerX86; using google_breakpad::SystemInfo; using google_breakpad::WindowsFrameInfo; @@ -61,6 +62,7 @@ using google_breakpad::test_assembler::Label; using google_breakpad::test_assembler::Section; using std::vector; using testing::_; +using testing::AnyNumber; using testing::Return; using testing::SetArgumentPointee; using testing::Test; @@ -97,16 +99,25 @@ class StackwalkerX86Fixture { // By default, none of the modules have symbol info; call // SetModuleSymbols to override this. - EXPECT_CALL(supplier, GetCStringSymbolData(_, _, _, _)) + EXPECT_CALL(supplier, GetCStringSymbolData(_, _, _, _, _)) .WillRepeatedly(Return(MockSymbolSupplier::NOT_FOUND)); + + // Avoid GMOCK WARNING "Uninteresting mock function call - returning + // directly" for FreeSymbolData(). + EXPECT_CALL(supplier, FreeSymbolData(_)).Times(AnyNumber()); + + // Reset max_frames_scanned since it's static. + Stackwalker::set_max_frames_scanned(1024); } // Set the Breakpad symbol information that supplier should return for // MODULE to INFO. void SetModuleSymbols(MockCodeModule *module, const string &info) { - char *buffer = supplier.CopySymbolDataAndOwnTheCopy(info); - EXPECT_CALL(supplier, GetCStringSymbolData(module, &system_info, _, _)) + size_t buffer_size; + char *buffer = supplier.CopySymbolDataAndOwnTheCopy(info, &buffer_size); + EXPECT_CALL(supplier, GetCStringSymbolData(module, &system_info, _, _, _)) .WillRepeatedly(DoAll(SetArgumentPointee<3>(buffer), + SetArgumentPointee<4>(buffer_size), Return(MockSymbolSupplier::FOUND))); } @@ -124,7 +135,7 @@ class StackwalkerX86Fixture { for (size_t i = 0; i < sizeof(*raw_context); i++) reinterpret_cast(raw_context)[i] = (x += 17); } - + SystemInfo system_info; MDRawContextX86 raw_context; Section stack_section; @@ -146,7 +157,7 @@ class SanityCheck: public StackwalkerX86Fixture, public Test { }; TEST_F(SanityCheck, NoResolver) { stack_section.start() = 0x80000000; - stack_section.D32(0).D32(0); // end-of-stack marker + stack_section.D32(0).D32(0); // end-of-stack marker RegionFromSection(); raw_context.eip = 0x40000200; raw_context.ebp = 0x80000000; @@ -156,9 +167,12 @@ TEST_F(SanityCheck, NoResolver) { &frame_symbolizer); // This should succeed, even without a resolver or supplier. vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(1U, modules_without_symbols.size()); ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); StackFrameX86 *frame = static_cast(frames->at(0)); // Check that the values from the original raw context made it @@ -170,7 +184,7 @@ class GetContextFrame: public StackwalkerX86Fixture, public Test { }; TEST_F(GetContextFrame, Simple) { stack_section.start() = 0x80000000; - stack_section.D32(0).D32(0); // end-of-stack marker + stack_section.D32(0).D32(0); // end-of-stack marker RegionFromSection(); raw_context.eip = 0x40000200; raw_context.ebp = 0x80000000; @@ -179,9 +193,12 @@ TEST_F(GetContextFrame, Simple) { StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(1U, modules_without_symbols.size()); ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); StackFrameX86 *frame = static_cast(frames->at(0)); // Check that the values from the original raw context made it @@ -199,9 +216,12 @@ TEST_F(GetContextFrame, NoStackMemory) { StackwalkerX86 walker(&system_info, &raw_context, NULL, &modules, &frame_symbolizer); vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(1U, modules_without_symbols.size()); ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); StackFrameX86 *frame = static_cast(frames->at(0)); // Check that the values from the original raw context made it @@ -209,7 +229,10 @@ TEST_F(GetContextFrame, NoStackMemory) { EXPECT_EQ(0, memcmp(&raw_context, &frame->context, sizeof(raw_context))); } -class GetCallerFrame: public StackwalkerX86Fixture, public Test { }; +class GetCallerFrame: public StackwalkerX86Fixture, public Test { + protected: + void IPAddressIsNotInKnownModuleTestImpl(bool has_corrupt_symbols); +}; // Walk a traditional frame. A traditional frame saves the caller's // %ebp just below the return address, and has its own %ebp pointing @@ -235,9 +258,12 @@ TEST_F(GetCallerFrame, Traditional) { StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(1U, modules_without_symbols.size()); ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(2U, frames->size()); @@ -270,6 +296,7 @@ TEST_F(GetCallerFrame, Traditional) { TEST_F(GetCallerFrame, TraditionalScan) { stack_section.start() = 0x80000000; Label frame1_ebp; + Label frame1_esp; stack_section // frame 0 .D32(0xf065dc76) // locals area: @@ -278,6 +305,7 @@ TEST_F(GetCallerFrame, TraditionalScan) { .D32(frame1_ebp) // saved %ebp (%ebp fails to point here, forcing scan) .D32(0x4000129d) // return address // frame 1 + .Mark(&frame1_esp) .Append(8, 0) // space .Mark(&frame1_ebp) // %ebp points here .D32(0) // saved %ebp (stack end) @@ -294,9 +322,12 @@ TEST_F(GetCallerFrame, TraditionalScan) { StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(1U, modules_without_symbols.size()); ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(2U, frames->size()); @@ -314,18 +345,14 @@ TEST_F(GetCallerFrame, TraditionalScan) { { // To avoid reusing locals by mistake StackFrameX86 *frame1 = static_cast(frames->at(1)); EXPECT_EQ(StackFrame::FRAME_TRUST_SCAN, frame1->trust); - // I'd argue that CONTEXT_VALID_EBP shouldn't be here, since the - // walker does not actually fetch the EBP after a scan (forcing the - // next frame to be scanned as well). But let's grandfather the existing - // behavior in for now. ASSERT_EQ((StackFrameX86::CONTEXT_VALID_EIP | StackFrameX86::CONTEXT_VALID_ESP | StackFrameX86::CONTEXT_VALID_EBP), frame1->context_validity); EXPECT_EQ(0x4000129dU, frame1->instruction + 1); EXPECT_EQ(0x4000129dU, frame1->context.eip); - EXPECT_EQ(0x80000014U, frame1->context.esp); - EXPECT_EQ(0xd43eed6eU, frame1->context.ebp); + EXPECT_EQ(frame1_esp.Value(), frame1->context.esp); + EXPECT_EQ(frame1_ebp.Value(), frame1->context.ebp); EXPECT_EQ(NULL, frame1->windows_frame_info); } } @@ -334,6 +361,7 @@ TEST_F(GetCallerFrame, TraditionalScan) { TEST_F(GetCallerFrame, TraditionalScanLongWay) { stack_section.start() = 0x80000000; Label frame1_ebp; + Label frame1_esp; stack_section // frame 0 .D32(0xf065dc76) // locals area: @@ -343,6 +371,7 @@ TEST_F(GetCallerFrame, TraditionalScanLongWay) { .D32(frame1_ebp) // saved %ebp (%ebp fails to point here, forcing scan) .D32(0x4000129d) // return address // frame 1 + .Mark(&frame1_esp) .Append(8, 0) // space .Mark(&frame1_ebp) // %ebp points here .D32(0) // saved %ebp (stack end) @@ -359,9 +388,12 @@ TEST_F(GetCallerFrame, TraditionalScanLongWay) { StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(1U, modules_without_symbols.size()); ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(2U, frames->size()); @@ -379,22 +411,70 @@ TEST_F(GetCallerFrame, TraditionalScanLongWay) { { // To avoid reusing locals by mistake StackFrameX86 *frame1 = static_cast(frames->at(1)); EXPECT_EQ(StackFrame::FRAME_TRUST_SCAN, frame1->trust); - // I'd argue that CONTEXT_VALID_EBP shouldn't be here, since the - // walker does not actually fetch the EBP after a scan (forcing the - // next frame to be scanned as well). But let's grandfather the existing - // behavior in for now. ASSERT_EQ((StackFrameX86::CONTEXT_VALID_EIP | StackFrameX86::CONTEXT_VALID_ESP | StackFrameX86::CONTEXT_VALID_EBP), frame1->context_validity); EXPECT_EQ(0x4000129dU, frame1->instruction + 1); EXPECT_EQ(0x4000129dU, frame1->context.eip); - EXPECT_EQ(0x80000064U, frame1->context.esp); - EXPECT_EQ(0xd43eed6eU, frame1->context.ebp); + EXPECT_EQ(frame1_esp.Value(), frame1->context.esp); + EXPECT_EQ(frame1_ebp.Value(), frame1->context.ebp); EXPECT_EQ(NULL, frame1->windows_frame_info); } } +// Test that set_max_frames_scanned prevents using stack scanning +// to find caller frames. +TEST_F(GetCallerFrame, ScanningNotAllowed) { + stack_section.start() = 0x80000000; + Label frame1_ebp; + stack_section + // frame 0 + .D32(0xf065dc76) // locals area: + .D32(0x46ee2167) // garbage that doesn't look like + .D32(0xbab023ec) // a return address + .D32(frame1_ebp) // saved %ebp (%ebp fails to point here, forcing scan) + .D32(0x4000129d) // return address + // frame 1 + .Append(8, 0) // space + .Mark(&frame1_ebp) // %ebp points here + .D32(0) // saved %ebp (stack end) + .D32(0); // return address (stack end) + + RegionFromSection(); + raw_context.eip = 0x4000f49d; + raw_context.esp = stack_section.start().Value(); + // Make the frame pointer bogus, to make the stackwalker scan the stack + // for something that looks like a return address. + raw_context.ebp = 0xd43eed6e; + + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); + StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules, + &frame_symbolizer); + Stackwalker::set_max_frames_scanned(0); + + vector modules_without_symbols; + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); + ASSERT_EQ(1U, modules_without_symbols.size()); + ASSERT_EQ("module1", modules_without_symbols[0]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); + frames = call_stack.frames(); + ASSERT_EQ(1U, frames->size()); + + { // To avoid reusing locals by mistake + StackFrameX86 *frame0 = static_cast(frames->at(0)); + EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame0->trust); + ASSERT_EQ(StackFrameX86::CONTEXT_VALID_ALL, frame0->context_validity); + EXPECT_EQ(0x4000f49dU, frame0->instruction); + EXPECT_EQ(0x4000f49dU, frame0->context.eip); + EXPECT_EQ(stack_section.start().Value(), frame0->context.esp); + EXPECT_EQ(0xd43eed6eU, frame0->context.ebp); + EXPECT_EQ(NULL, frame0->windows_frame_info); + } +} + // Use Windows frame data (a "STACK WIN 4" record, from a // FrameTypeFrameData DIA record) to walk a stack frame. TEST_F(GetCallerFrame, WindowsFrameData) { @@ -434,8 +514,11 @@ TEST_F(GetCallerFrame, WindowsFrameData) { StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(2U, frames->size()); @@ -477,20 +560,23 @@ TEST_F(GetCallerFrame, WindowsFrameData) { TEST_F(GetCallerFrame, WindowsFrameDataAligned) { SetModuleSymbols(&module1, "STACK WIN 4 aa85 176 0 0 4 4 8 0 1" - " $T1 .raSearch =" - " $T0 $T1 4 - 8 @ =" - " $ebp $T1 4 - ^ =" - " $eip $T1 ^ =" - " $esp $T1 4 + ="); + " $T1 .raSearch =" + " $T0 $T1 4 - 8 @ =" + " $ebp $T1 4 - ^ =" + " $eip $T1 ^ =" + " $esp $T1 4 + ="); + Label frame0_esp, frame0_ebp; Label frame1_esp, frame1_ebp; stack_section.start() = 0x80000000; stack_section // frame 0 + .Mark(&frame0_esp) .D32(0x0ffa0ffa) // unused saved register .D32(0xdeaddead) // locals .D32(0xbeefbeef) .D32(0) // 8-byte alignment - .D32(frame1_ebp) + .Mark(&frame0_ebp) + .D32(frame1_ebp) // saved %ebp .D32(0x5000129d) // return address // frame 1 .Mark(&frame1_esp) @@ -501,16 +587,19 @@ TEST_F(GetCallerFrame, WindowsFrameDataAligned) { RegionFromSection(); raw_context.eip = 0x4000aa85; - raw_context.esp = stack_section.start().Value(); - raw_context.ebp = 0xf052c1de; // should not be needed to walk frame + raw_context.esp = frame0_esp.Value(); + raw_context.ebp = frame0_ebp.Value(); StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(1U, modules_without_symbols.size()); ASSERT_EQ("module2", modules_without_symbols[0]->debug_file()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(2U, frames->size()); @@ -520,8 +609,8 @@ TEST_F(GetCallerFrame, WindowsFrameDataAligned) { ASSERT_EQ(StackFrameX86::CONTEXT_VALID_ALL, frame0->context_validity); EXPECT_EQ(0x4000aa85U, frame0->instruction); EXPECT_EQ(0x4000aa85U, frame0->context.eip); - EXPECT_EQ(stack_section.start().Value(), frame0->context.esp); - EXPECT_EQ(0xf052c1deU, frame0->context.ebp); + EXPECT_EQ(frame0_esp.Value(), frame0->context.esp); + EXPECT_EQ(frame0_ebp.Value(), frame0->context.ebp); EXPECT_TRUE(frame0->windows_frame_info != NULL); } @@ -586,7 +675,7 @@ TEST_F(GetCallerFrame, WindowsFrameDataParameterSize) { .D32(0); // saved %eip (stack end) RegionFromSection(); - raw_context.eip = 0x40001004; // in module1::wheedle + raw_context.eip = 0x40001004; // in module1::wheedle raw_context.esp = stack_section.start().Value(); raw_context.ebp = frame0_ebp.Value(); @@ -594,8 +683,11 @@ TEST_F(GetCallerFrame, WindowsFrameDataParameterSize) { StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(3U, frames->size()); @@ -691,8 +783,11 @@ TEST_F(GetCallerFrame, WindowsFrameDataScan) { StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(2U, frames->size()); @@ -777,8 +872,11 @@ TEST_F(GetCallerFrame, WindowsFrameDataBadEIPScan) { StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(2U, frames->size()); @@ -827,18 +925,18 @@ TEST_F(GetCallerFrame, WindowsFPOUnchangedEBP) { // frame 0, in module1::wheedle. FrameTypeFPO (STACK WIN 0) frame. .Mark(&frame0_esp) // no outgoing parameters; this is the youngest frame. - .D32(0x7c521352) // four bytes of saved registers - .Append(0x10, 0x42) // local area - .D32(0x40009b5b) // return address, in module1, no function + .D32(0x7c521352) // four bytes of saved registers + .Append(0x10, 0x42) // local area + .D32(0x40009b5b) // return address, in module1, no function // frame 1, in module1, no function. .Mark(&frame1_esp) - .D32(0xf60ea7fc) // junk + .D32(0xf60ea7fc) // junk .Mark(&frame1_ebp) - .D32(0) // saved %ebp (stack end) - .D32(0); // saved %eip (stack end) + .D32(0) // saved %ebp (stack end) + .D32(0); // saved %eip (stack end) RegionFromSection(); - raw_context.eip = 0x4000e8b8; // in module1::whine + raw_context.eip = 0x4000e8b8; // in module1::whine raw_context.esp = stack_section.start().Value(); // Frame pointer unchanged from caller. raw_context.ebp = frame1_ebp.Value(); @@ -847,8 +945,11 @@ TEST_F(GetCallerFrame, WindowsFPOUnchangedEBP) { StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(2U, frames->size()); @@ -859,7 +960,8 @@ TEST_F(GetCallerFrame, WindowsFPOUnchangedEBP) { EXPECT_EQ(0x4000e8b8U, frame0->instruction); EXPECT_EQ(0x4000e8b8U, frame0->context.eip); EXPECT_EQ(frame0_esp.Value(), frame0->context.esp); - EXPECT_EQ(frame1_ebp.Value(), frame0->context.ebp); // unchanged from caller + // unchanged from caller + EXPECT_EQ(frame1_ebp.Value(), frame0->context.ebp); EXPECT_EQ(&module1, frame0->module); EXPECT_EQ("module1::discombobulated", frame0->function_name); EXPECT_EQ(0x4000e8a8U, frame0->function_base); @@ -917,7 +1019,7 @@ TEST_F(GetCallerFrame, WindowsFPOUsedEBP) { .D32(0); // saved %eip (stack end) RegionFromSection(); - raw_context.eip = 0x40009ab8; // in module1::RaisedByTheAliens + raw_context.eip = 0x40009ab8; // in module1::RaisedByTheAliens raw_context.esp = stack_section.start().Value(); // RaisedByTheAliens uses %ebp for its own mysterious purposes. raw_context.ebp = 0xecbdd1a5; @@ -926,8 +1028,11 @@ TEST_F(GetCallerFrame, WindowsFPOUsedEBP) { StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(2U, frames->size()); @@ -1066,8 +1171,11 @@ TEST_F(GetCallerFrame, WindowsFPOSystemCall) { StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(4U, frames->size()); @@ -1119,12 +1227,12 @@ TEST_F(GetCallerFrame, WindowsFPOSystemCall) { } // Scan the stack for a better return address and potentially skip frames -// when the calculated return address is not in a known module. -// Note, that the span of this scan is somewhat arbitrarily limited to 30 -// search words (pointers): -// const int kRASearchWords = 30; +// when the calculated return address is not in a known module. Note, that +// the span of this scan is somewhat arbitrarily limited to 160 search words +// for the context frame and 40 search words (pointers) for the other frames: +// const int kRASearchWords = 40; // This means that frames can be skipped only when their size is relatively -// small: smaller than kRASearchWords * sizeof(InstructionType) +// small: smaller than 4 * kRASearchWords * sizeof(InstructionType) TEST_F(GetCallerFrame, ReturnAddressIsNotInKnownModule) { MockCodeModule msvcrt_dll(0x77be0000, 0x58000, "msvcrt.dll", "version1"); SetModuleSymbols(&msvcrt_dll, // msvcrt.dll @@ -1276,8 +1384,11 @@ TEST_F(GetCallerFrame, ReturnAddressIsNotInKnownModule) { StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &local_modules, &frame_symbolizer); vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(3U, frames->size()); @@ -1354,6 +1465,469 @@ TEST_F(GetCallerFrame, ReturnAddressIsNotInKnownModule) { } } +// Test the .raSearchStart/.raSearch calculation when alignment operators are +// used in the program string. The current %ebp must be valid and it is the +// only reliable data point that can be used for that calculation. +TEST_F(GetCallerFrame, HandleAlignmentInProgramString) { + MockCodeModule chrome_dll(0x59630000, 0x19e3000, "chrome.dll", "version1"); + SetModuleSymbols(&chrome_dll, // chrome.dll + "FUNC 56422 50c 8 base::MessageLoop::RunTask" + "(base::PendingTask const &)\n" + "56422 e 458 4589\n" + "STACK WIN 4 56422 50c 11 0 8 c ac 0 1 $T1 .raSearch = $T0 " + "$T1 4 - 8 @ = $ebp $T1 4 - ^ = $eip $T1 ^ = $esp $T1 4 + = " + "$20 $T0 176 - ^ = $23 $T0 180 - ^ = $24 $T0 184 - ^ =\n" + "FUNC 55d34 34a 0 base::MessageLoop::DoWork()\n" + "55d34 11 596 4589\n" + "STACK WIN 4 55d34 34a 19 0 0 c 134 0 1 $T1 .raSearch = " + "$T0 $T1 4 - 8 @ = $ebp $T1 4 - ^ = $eip $T1 ^ = $esp " + "$T1 4 + = $20 $T0 312 - ^ = $23 $T0 316 - ^ = $24 $T0 " + "320 - ^ =\n" + "FUNC 55c39 fb 0 base::MessagePumpForIO::DoRunLoop()\n" + "55c39 d 518 19962\n" + "STACK WIN 4 55c39 fb d 0 0 c 34 0 1 $T1 .raSearch = $T0 " + "$T1 4 - 64 @ = $ebp $T1 4 - ^ = $eip $T1 ^ = $esp $T1 4 + " + "= $20 $T0 56 - ^ = $23 $T0 60 - ^ = $24 $T0 64 - ^ =\n" + "FUNC 55bf0 49 4 base::MessagePumpWin::Run(base::" + "MessagePump::Delegate *)\n" + "55bf0 49 48 4724\n" + "STACK WIN 4 55bf0 49 c 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 " + "+ ^ = $ebp $T0 ^ = $esp $T0 8 + =\n" + "FUNC 165d de 4 malloc\n" + "165d 6 119 54\n" + "STACK WIN 4 165d de d 0 4 8 0 0 1 $T1 .raSearch = $T0 " + "$T1 4 - 8 @ = $ebp $T1 4 - ^ = $eip $T1 ^ = $esp $T1 4 " + "+ = $23 $T0 4 - ^ = $24 $T0 8 - ^ =\n" + "FUNC 55ac9 79 0 base::MessageLoop::RunInternal()\n" + "55ac9 d 427 4589\n" + "STACK WIN 4 55ac9 79 d 0 0 8 10 0 1 $T1 .raSearch = $T0 " + "$T1 4 - 8 @ = $ebp $T1 4 - ^ = $eip $T1 ^ = $esp $T1 4 + = " + "$23 $T0 20 - ^ = $24 $T0 24 - ^ =\n"); + + // Create some modules with some stock debugging information. + MockCodeModules local_modules; + local_modules.Add(&chrome_dll); + + Label frame0_esp; + Label frame0_ebp; + Label frame1_esp; + Label frame1_ebp; + Label frame2_esp; + Label frame2_ebp; + Label frame3_esp; + Label frame3_ebp; + + stack_section.start() = 0x046bfc80; + stack_section + .D32(0) + .Mark(&frame0_esp) + .D32(0x01e235a0) + .D32(0x00000000) + .D32(0x01e9f580) + .D32(0x01e9f580) + .D32(0x00000020) + .D32(0x00000000) + .D32(0x00463674) + .D32(0x00000020) + .D32(0x00000000) + .D32(0x046bfcd8) + .D32(0x046bfcd8) + .D32(0x0001204b) + .D32(0x00000000) + .D32(0xfdddb523) + .D32(0x00000000) + .D32(0x00000007) + .D32(0x00000040) + .D32(0x00000000) + .D32(0x59631693) // chrome_59630000!malloc+0x36 + .D32(0x01e9f580) + .D32(0x01e9f580) + .D32(0x046bfcf8) + .D32(0x77da6704) // ntdll!NtSetIoCompletion+0xc + .D32(0x046bfd4c) + .D32(0x59685bec) // chrome_59630000!base::MessageLoop::StartHistogrammer.. + .D32(0x01e235a0) + + .Mark(&frame0_ebp) + .D32(frame1_ebp) // Child EBP .D32(0x046bfd0c) + .D32(0x59685c2e) // Return address in + // chrome_59630000!base::MessagePumpWin::Run+0x3e + .Mark(&frame1_esp) + .D32(0x01e75a90) + .D32(0x046bfd4c) + .D32(0x01e75a90) + .D32(0x00000000) + .D32(0x00000300) + .D32(0x00000001) + + .Mark(&frame1_ebp) + .D32(frame2_ebp) // Child EBP .D32(0x046bfd30) + .D32(0x59685b3c) // Return address in + // chrome_59630000!base::MessageLoop::RunInternal+0x73 + .Mark(&frame2_esp) + .D32(0x01e75a90) + .D32(0x00000000) + .D32(0x046bfd4c) + .D32(0x59658123) // chrome_59630000!std::deque.. + .D32(0x046bfda0) + .D32(0x01e79d70) + .D32(0x046bfda0) + + .Mark(&frame2_ebp) // .D32(0x046bfd40) + .D32(0) // saved %ebp (stack end) + .D32(0); // saved %eip (stack end) + + RegionFromSection(); + raw_context.eip = 0x59685c46; // Context frame in + // base::MessagePumpForIO::DoRunLoop + raw_context.esp = frame0_esp.Value(); + raw_context.ebp = frame0_ebp.Value(); + + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); + StackwalkerX86 walker(&system_info, &raw_context, &stack_region, + &local_modules, &frame_symbolizer); + vector modules_without_symbols; + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); + ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); + frames = call_stack.frames(); + + ASSERT_EQ(3U, frames->size()); + + { // To avoid reusing locals by mistake + StackFrameX86 *frame = static_cast(frames->at(0)); + EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame->trust); + ASSERT_EQ(StackFrameX86::CONTEXT_VALID_ALL, frame->context_validity); + EXPECT_EQ("base::MessagePumpForIO::DoRunLoop()", frame->function_name); + EXPECT_EQ(0x59685c46U, frame->instruction); + EXPECT_EQ(0x59685c46U, frame->context.eip); + EXPECT_EQ(frame0_esp.Value(), frame->context.esp); + EXPECT_EQ(frame0_ebp.Value(), frame->context.ebp); + EXPECT_EQ(&chrome_dll, frame->module); + ASSERT_TRUE(frame->windows_frame_info != NULL); + EXPECT_EQ(WindowsFrameInfo::VALID_ALL, frame->windows_frame_info->valid); + EXPECT_EQ(WindowsFrameInfo::STACK_INFO_FRAME_DATA, + frame->windows_frame_info->type_); + EXPECT_EQ("$T1 .raSearch = $T0 " + "$T1 4 - 64 @ = $ebp $T1 4 - ^ = $eip $T1 ^ = $esp $T1 4 + " + "= $20 $T0 56 - ^ = $23 $T0 60 - ^ = $24 $T0 64 - ^ =", + frame->windows_frame_info->program_string); + EXPECT_FALSE(frame->windows_frame_info->allocates_base_pointer); + } + + { // To avoid reusing locals by mistake + StackFrameX86 *frame = static_cast(frames->at(1)); + EXPECT_EQ(StackFrame::FRAME_TRUST_CFI, frame->trust); + ASSERT_EQ((StackFrameX86::CONTEXT_VALID_EIP | + StackFrameX86::CONTEXT_VALID_ESP | + StackFrameX86::CONTEXT_VALID_EBP), + frame->context_validity); + EXPECT_EQ("base::MessagePumpWin::Run(base::MessagePump::Delegate *)", + frame->function_name); + EXPECT_EQ(1500011566U, frame->instruction + 1); + EXPECT_EQ(1500011566U, frame->context.eip); + EXPECT_EQ(frame1_esp.Value(), frame->context.esp); + EXPECT_EQ(frame1_ebp.Value(), frame->context.ebp); + EXPECT_EQ(&chrome_dll, frame->module); + ASSERT_TRUE(frame->windows_frame_info != NULL); + EXPECT_EQ(WindowsFrameInfo::VALID_ALL, frame->windows_frame_info->valid); + EXPECT_EQ(WindowsFrameInfo::STACK_INFO_FRAME_DATA, + frame->windows_frame_info->type_); + EXPECT_EQ("$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + =", + frame->windows_frame_info->program_string); + EXPECT_FALSE(frame->windows_frame_info->allocates_base_pointer); + } + + { // To avoid reusing locals by mistake + StackFrameX86 *frame = static_cast(frames->at(2)); + EXPECT_EQ(StackFrame::FRAME_TRUST_CFI, frame->trust); + ASSERT_EQ((StackFrameX86::CONTEXT_VALID_EIP | + StackFrameX86::CONTEXT_VALID_ESP | + StackFrameX86::CONTEXT_VALID_EBP), + frame->context_validity); + EXPECT_EQ("base::MessageLoop::RunInternal()", frame->function_name); + EXPECT_EQ(1500011324U, frame->instruction + 1); + EXPECT_EQ(1500011324U, frame->context.eip); + EXPECT_EQ(frame2_esp.Value(), frame->context.esp); + EXPECT_EQ(frame2_ebp.Value(), frame->context.ebp); + EXPECT_EQ(&chrome_dll, frame->module); + ASSERT_TRUE(frame->windows_frame_info != NULL); + EXPECT_EQ(WindowsFrameInfo::VALID_ALL, frame->windows_frame_info->valid); + EXPECT_EQ(WindowsFrameInfo::STACK_INFO_FRAME_DATA, + frame->windows_frame_info->type_); + EXPECT_EQ("$T1 .raSearch = $T0 " + "$T1 4 - 8 @ = $ebp $T1 4 - ^ = $eip $T1 ^ = $esp $T1 4 + = " + "$23 $T0 20 - ^ = $24 $T0 24 - ^ =", + frame->windows_frame_info->program_string); + EXPECT_FALSE(frame->windows_frame_info->allocates_base_pointer); + } +} + +// Scan the stack for a return address and potentially skip frames when the +// current IP address is not in a known module. Note, that that the span of +// this scan is limited to 120 search words for the context frame and 30 +// search words (pointers) for the other frames: +// const int kRASearchWords = 30; +void GetCallerFrame::IPAddressIsNotInKnownModuleTestImpl( + bool has_corrupt_symbols) { + MockCodeModule remoting_core_dll(0x54080000, 0x501000, "remoting_core.dll", + "version1"); + string symbols_func_section = + "FUNC 137214 17d 10 PK11_Verify\n" + "FUNC 15c834 37 14 nsc_ECDSAVerifyStub\n" + "FUNC 1611d3 91 14 NSC_Verify\n" + "FUNC 162ff7 60 4 sftk_SessionFromHandle\n"; + string symbols_stack_section = + "STACK WIN 4 137214 17d 9 0 10 0 10 0 1 $T0 $ebp = " + "$eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + =\n" + "STACK WIN 4 15c834 37 6 0 14 0 18 0 1 $T0 $ebp = " + "$eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + =\n" + "STACK WIN 4 1611d3 91 7 0 14 0 8 0 1 $T0 $ebp = " + "$eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + =\n" + "STACK WIN 4 162ff7 60 5 0 4 0 0 0 1 $T0 $ebp = " + "$eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + =\n"; + + string symbols = symbols_func_section; + if (has_corrupt_symbols) { + symbols.append(string(1, '\0')); // null terminator in the middle + symbols.append("\n"); + symbols.append("FUNC 1234\n" // invalid FUNC records + "FUNNC 1234\n" + "STACK WIN 4 1234 234 23 " // invalid STACK record + "23423423 234 23 234 234 " + "234 23 234 23 234 234 " + "234 234 234\n"); + } + symbols.append(symbols_stack_section); + SetModuleSymbols(&remoting_core_dll, symbols); + + // Create some modules with some stock debugging information. + MockCodeModules local_modules; + local_modules.Add(&remoting_core_dll); + + Label frame0_esp; + Label frame0_ebp; + Label frame1_ebp; + Label frame1_esp; + Label frame2_ebp; + Label frame2_esp; + Label frame3_ebp; + Label frame3_esp; + Label bogus_stack_location_1; + Label bogus_stack_location_2; + Label bogus_stack_location_3; + + stack_section.start() = 0x01a3ea28; + stack_section + .Mark(&frame0_esp) + .D32(bogus_stack_location_2) + .D32(bogus_stack_location_1) + .D32(0x042478e4) + .D32(bogus_stack_location_2) + .D32(0x00000000) + .D32(0x041f0420) + .D32(0x00000000) + .D32(0x00000000) + .D32(0x00000040) + .D32(0x00000001) + .D32(0x00b7e0d0) + .D32(0x00000000) + .D32(0x00000040) + .D32(0x00000001) + .D32(0x00b7f570) + .Mark(&bogus_stack_location_1) + .D32(0x00000000) + .D32(0x00000040) + .D32(0x00000008) + .D32(0x04289530) + .D32(0x00000000) + .D32(0x00000040) + .D32(0x00000008) + .D32(0x00b7e910) + .D32(0x00000000) + .D32(0x00000040) + .D32(0x00000008) + .D32(0x00b7d998) + .D32(0x00000000) + .D32(0x00000040) + .D32(0x00000008) + .D32(0x00b7dec0) + .Mark(&bogus_stack_location_2) + .D32(0x00000000) + .D32(0x00000040) + .D32(0x00000008) + .D32(0x04289428) + .D32(0x00000000) + .D32(0x00000040) + .D32(0x00000008) + .D32(0x00b7f258) + .Mark(&bogus_stack_location_3) + .D32(0x00000000) + .D32(0x041f3560) + .D32(0x00000041) + .D32(0x00000020) + .D32(0xffffffff) + .Mark(&frame0_ebp) + .D32(frame1_ebp) // Child %ebp + .D32(0x541dc866) // return address of frame 0 + // inside remoting_core!nsc_ECDSAVerifyStub+0x32 + .Mark(&frame1_esp) + .D32(0x04247860) + .D32(0x01a3eaec) + .D32(0x01a3eaf8) + .D32(0x541e304f) // remoting_core!sftk_SessionFromHandle+0x58 + .D32(0x0404c620) + .D32(0x00000040) + .D32(0x01a3eb2c) + .D32(0x01a3ec08) + .D32(0x00000014) + .Mark(&frame1_ebp) + .D32(frame2_ebp) // Child %ebp + .D32(0x541e1234) // return address of frame 1 + // inside remoting_core!NSC_Verify+0x61 + .Mark(&frame2_esp) + .D32(0x04247858) + .D32(0x0404c620) + .D32(0x00000040) + .D32(0x01a3ec08) + .D32(0x00000014) + .D32(0x01000005) + .D32(0x00b2f7a0) + .D32(0x041f0420) + .D32(0x041f3650) + .Mark(&frame2_ebp) + .D32(frame3_ebp) // Child %ebp + .D32(0x541b734d) // return address of frame 1 + // inside remoting_core!PK11_Verify+0x139 + .Mark(&frame3_esp) + .D32(0x01000005) + .D32(0x01a3ec08) + .D32(0x00000014) + .D32(0x0404c620) + .D32(0x00000040) + .D32(0x04073e00) + .D32(0x04073e00) + .D32(0x04247050) + .D32(0x00001041) + .D32(0x00000000) + .D32(0x00000000) + .D32(0x00000000) + .Mark(&frame3_ebp) + .D32(0) // saved %ebp (stack end) + .D32(0); // saved %eip (stack end) + + RegionFromSection(); + raw_context.eip = 0x4247860; // IP address not in known module + raw_context.ebp = 0x5420362d; // bogus + raw_context.esp = frame0_esp.Value(); + + // sanity + ASSERT_TRUE(raw_context.esp == stack_section.start().Value()); + + StackFrameSymbolizer frame_symbolizer(&supplier, &resolver); + StackwalkerX86 walker(&system_info, &raw_context, &stack_region, + &local_modules, &frame_symbolizer); + vector modules_without_symbols; + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); + ASSERT_EQ(0U, modules_without_symbols.size()); + if (has_corrupt_symbols) { + ASSERT_EQ(1U, modules_with_corrupt_symbols.size()); + ASSERT_EQ("remoting_core.dll", + modules_with_corrupt_symbols[0]->debug_file()); + } else { + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); + } + frames = call_stack.frames(); + + ASSERT_EQ(4U, frames->size()); + + { // To avoid reusing locals by mistake + StackFrameX86 *frame0 = static_cast(frames->at(0)); + EXPECT_EQ(StackFrame::FRAME_TRUST_CONTEXT, frame0->trust); + ASSERT_EQ(StackFrameX86::CONTEXT_VALID_ALL, frame0->context_validity); + EXPECT_EQ(raw_context.eip, frame0->context.eip); + EXPECT_EQ(raw_context.ebp, frame0->context.ebp); + EXPECT_EQ(raw_context.esp, frame0->context.esp); + EXPECT_EQ(NULL, frame0->module); // IP not in known module + EXPECT_EQ("", frame0->function_name); + ASSERT_EQ(NULL, frame0->windows_frame_info); + } + + { // To avoid reusing locals by mistake + StackFrameX86 *frame1 = static_cast(frames->at(1)); + EXPECT_EQ(StackFrame::FRAME_TRUST_SCAN, frame1->trust); + ASSERT_EQ((StackFrameX86::CONTEXT_VALID_EIP | + StackFrameX86::CONTEXT_VALID_ESP | + StackFrameX86::CONTEXT_VALID_EBP), + frame1->context_validity); + EXPECT_EQ(frame1_ebp.Value(), frame1->context.ebp); + EXPECT_EQ(frame1_esp.Value(), frame1->context.esp); + EXPECT_EQ(&remoting_core_dll, frame1->module); + EXPECT_EQ("nsc_ECDSAVerifyStub", frame1->function_name); + ASSERT_TRUE(frame1->windows_frame_info != NULL); + EXPECT_EQ(WindowsFrameInfo::VALID_ALL, frame1->windows_frame_info->valid); + EXPECT_EQ(WindowsFrameInfo::STACK_INFO_FRAME_DATA, + frame1->windows_frame_info->type_); + EXPECT_EQ("$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + =", + frame1->windows_frame_info->program_string); + EXPECT_FALSE(frame1->windows_frame_info->allocates_base_pointer); + } + + { // To avoid reusing locals by mistake + StackFrameX86 *frame2 = static_cast(frames->at(2)); + EXPECT_EQ(StackFrame::FRAME_TRUST_CFI, frame2->trust); + ASSERT_EQ((StackFrameX86::CONTEXT_VALID_EIP | + StackFrameX86::CONTEXT_VALID_ESP | + StackFrameX86::CONTEXT_VALID_EBP), + frame2->context_validity); + EXPECT_EQ(frame2_ebp.Value(), frame2->context.ebp); + EXPECT_EQ(frame2_esp.Value(), frame2->context.esp); + EXPECT_EQ(&remoting_core_dll, frame2->module); + EXPECT_EQ("NSC_Verify", frame2->function_name); + ASSERT_TRUE(frame2->windows_frame_info != NULL); + EXPECT_EQ(WindowsFrameInfo::VALID_ALL, frame2->windows_frame_info->valid); + EXPECT_EQ(WindowsFrameInfo::STACK_INFO_FRAME_DATA, + frame2->windows_frame_info->type_); + EXPECT_EQ("$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + =", + frame2->windows_frame_info->program_string); + EXPECT_FALSE(frame2->windows_frame_info->allocates_base_pointer); + } + + { // To avoid reusing locals by mistake + StackFrameX86 *frame3 = static_cast(frames->at(3)); + EXPECT_EQ(StackFrame::FRAME_TRUST_CFI, frame3->trust); + ASSERT_EQ((StackFrameX86::CONTEXT_VALID_EIP | + StackFrameX86::CONTEXT_VALID_ESP | + StackFrameX86::CONTEXT_VALID_EBP), + frame3->context_validity); + EXPECT_EQ(frame3_ebp.Value(), frame3->context.ebp); + EXPECT_EQ(frame3_esp.Value(), frame3->context.esp); + EXPECT_EQ(&remoting_core_dll, frame3->module); + EXPECT_EQ("PK11_Verify", frame3->function_name); + ASSERT_TRUE(frame3->windows_frame_info != NULL); + EXPECT_EQ(WindowsFrameInfo::VALID_ALL, frame3->windows_frame_info->valid); + EXPECT_EQ(WindowsFrameInfo::STACK_INFO_FRAME_DATA, + frame3->windows_frame_info->type_); + EXPECT_EQ("$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + =", + frame3->windows_frame_info->program_string); + EXPECT_FALSE(frame3->windows_frame_info->allocates_base_pointer); + } +} + +// Runs IPAddressIsNotInKnownModule test with good symbols +TEST_F(GetCallerFrame, IPAddressIsNotInKnownModule) { + IPAddressIsNotInKnownModuleTestImpl(false /* has_corrupt_modules */); +} + +// Runs IPAddressIsNotInKnownModule test with corrupt symbols +TEST_F(GetCallerFrame, IPAddressIsNotInKnownModule_CorruptSymbols) { + IPAddressIsNotInKnownModuleTestImpl(true /* has_corrupt_modules */); +} + struct CFIFixture: public StackwalkerX86Fixture { CFIFixture() { // Provide a bunch of STACK CFI records; individual tests walk to the @@ -1405,8 +1979,11 @@ struct CFIFixture: public StackwalkerX86Fixture { StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules, &frame_symbolizer); vector modules_without_symbols; - ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols)); + vector modules_with_corrupt_symbols; + ASSERT_TRUE(walker.Walk(&call_stack, &modules_without_symbols, + &modules_with_corrupt_symbols)); ASSERT_EQ(0U, modules_without_symbols.size()); + ASSERT_EQ(0U, modules_with_corrupt_symbols.size()); frames = call_stack.frames(); ASSERT_EQ(2U, frames->size()); @@ -1451,8 +2028,8 @@ class CFI: public CFIFixture, public Test { }; TEST_F(CFI, At4000) { Label frame1_esp = expected.esp; stack_section - .D32(0x40005510) // return address - .Mark(&frame1_esp); // This effectively sets stack_section.start(). + .D32(0x40005510) // return address + .Mark(&frame1_esp); // This effectively sets stack_section.start(). raw_context.eip = 0x40004000; CheckWalk(); } @@ -1460,39 +2037,39 @@ TEST_F(CFI, At4000) { TEST_F(CFI, At4001) { Label frame1_esp = expected.esp; stack_section - .D32(0x60f20ce6) // saved %ebx - .D32(0x40005510) // return address - .Mark(&frame1_esp); // This effectively sets stack_section.start(). + .D32(0x60f20ce6) // saved %ebx + .D32(0x40005510) // return address + .Mark(&frame1_esp); // This effectively sets stack_section.start(). raw_context.eip = 0x40004001; - raw_context.ebx = 0x91aa9a8b; // callee's %ebx value + raw_context.ebx = 0x91aa9a8b; // callee's %ebx value CheckWalk(); } TEST_F(CFI, At4002) { Label frame1_esp = expected.esp; stack_section - .D32(0x60f20ce6) // saved %ebx - .D32(0x40005510) // return address - .Mark(&frame1_esp); // This effectively sets stack_section.start(). + .D32(0x60f20ce6) // saved %ebx + .D32(0x40005510) // return address + .Mark(&frame1_esp); // This effectively sets stack_section.start(). raw_context.eip = 0x40004002; - raw_context.ebx = 0x53d1379d; // saved %esi - raw_context.esi = 0xa5c790ed; // callee's %esi value + raw_context.ebx = 0x53d1379d; // saved %esi + raw_context.esi = 0xa5c790ed; // callee's %esi value CheckWalk(); } TEST_F(CFI, At4003) { Label frame1_esp = expected.esp; stack_section - .D32(0x56ec3db7) // garbage - .D32(0xafbae234) // saved %edi - .D32(0x53d67131) // garbage - .D32(0x60f20ce6) // saved %ebx - .D32(0x40005510) // return address - .Mark(&frame1_esp); // This effectively sets stack_section.start(). + .D32(0x56ec3db7) // garbage + .D32(0xafbae234) // saved %edi + .D32(0x53d67131) // garbage + .D32(0x60f20ce6) // saved %ebx + .D32(0x40005510) // return address + .Mark(&frame1_esp); // This effectively sets stack_section.start(). raw_context.eip = 0x40004003; - raw_context.ebx = 0x53d1379d; // saved %esi - raw_context.esi = 0xa97f229d; // callee's %esi - raw_context.edi = 0xb05cc997; // callee's %edi + raw_context.ebx = 0x53d1379d; // saved %esi + raw_context.esi = 0xa97f229d; // callee's %esi + raw_context.edi = 0xb05cc997; // callee's %edi CheckWalk(); } @@ -1501,32 +2078,32 @@ TEST_F(CFI, At4003) { TEST_F(CFI, At4004) { Label frame1_esp = expected.esp; stack_section - .D32(0xe29782c2) // garbage - .D32(0xafbae234) // saved %edi - .D32(0x5ba29ce9) // garbage - .D32(0x60f20ce6) // saved %ebx - .D32(0x40005510) // return address - .Mark(&frame1_esp); // This effectively sets stack_section.start(). + .D32(0xe29782c2) // garbage + .D32(0xafbae234) // saved %edi + .D32(0x5ba29ce9) // garbage + .D32(0x60f20ce6) // saved %ebx + .D32(0x40005510) // return address + .Mark(&frame1_esp); // This effectively sets stack_section.start(). raw_context.eip = 0x40004004; - raw_context.ebx = 0x53d1379d; // saved %esi - raw_context.esi = 0x0fb7dc4e; // callee's %esi - raw_context.edi = 0x993b4280; // callee's %edi + raw_context.ebx = 0x53d1379d; // saved %esi + raw_context.esi = 0x0fb7dc4e; // callee's %esi + raw_context.edi = 0x993b4280; // callee's %edi CheckWalk(); } TEST_F(CFI, At4005) { Label frame1_esp = expected.esp; stack_section - .D32(0xe29782c2) // garbage - .D32(0xafbae234) // saved %edi - .D32(0x5ba29ce9) // garbage - .D32(0x60f20ce6) // saved %ebx - .D32(0x8036cc02) // garbage - .Mark(&frame1_esp); // This effectively sets stack_section.start(). + .D32(0xe29782c2) // garbage + .D32(0xafbae234) // saved %edi + .D32(0x5ba29ce9) // garbage + .D32(0x60f20ce6) // saved %ebx + .D32(0x8036cc02) // garbage + .Mark(&frame1_esp); // This effectively sets stack_section.start(). raw_context.eip = 0x40004005; - raw_context.ebx = 0x53d1379d; // saved %esi - raw_context.esi = 0x0fb7dc4e; // callee's %esi - raw_context.edi = 0x40005510; // return address + raw_context.ebx = 0x53d1379d; // saved %esi + raw_context.esi = 0x0fb7dc4e; // callee's %esi + raw_context.edi = 0x40005510; // return address CheckWalk(); } @@ -1534,18 +2111,18 @@ TEST_F(CFI, At4006) { Label frame0_ebp; Label frame1_esp = expected.esp; stack_section - .D32(0xdcdd25cd) // garbage - .D32(0xafbae234) // saved %edi - .D32(0xc0d4aab9) // saved %ebp - .Mark(&frame0_ebp) // frame pointer points here - .D32(0x60f20ce6) // saved %ebx - .D32(0x8036cc02) // garbage - .Mark(&frame1_esp); // This effectively sets stack_section.start(). + .D32(0xdcdd25cd) // garbage + .D32(0xafbae234) // saved %edi + .D32(0xc0d4aab9) // saved %ebp + .Mark(&frame0_ebp) // frame pointer points here + .D32(0x60f20ce6) // saved %ebx + .D32(0x8036cc02) // garbage + .Mark(&frame1_esp); // This effectively sets stack_section.start(). raw_context.eip = 0x40004006; raw_context.ebp = frame0_ebp.Value(); - raw_context.ebx = 0x53d1379d; // saved %esi - raw_context.esi = 0x743833c9; // callee's %esi - raw_context.edi = 0x40005510; // return address + raw_context.ebx = 0x53d1379d; // saved %esi + raw_context.esi = 0x743833c9; // callee's %esi + raw_context.edi = 0x40005510; // return address CheckWalk(); } diff --git a/toolkit/crashreporter/google-breakpad/src/processor/static_address_map-inl.h b/toolkit/crashreporter/google-breakpad/src/processor/static_address_map-inl.h index f92acb0c2b4f..67e07976e083 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/static_address_map-inl.h +++ b/toolkit/crashreporter/google-breakpad/src/processor/static_address_map-inl.h @@ -38,7 +38,7 @@ #include "processor/static_address_map.h" -#include "common/logging.h" +#include "processor/logging.h" namespace google_breakpad { diff --git a/toolkit/crashreporter/google-breakpad/src/processor/static_contained_range_map-inl.h b/toolkit/crashreporter/google-breakpad/src/processor/static_contained_range_map-inl.h index d93aa4892dba..777c7621840a 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/static_contained_range_map-inl.h +++ b/toolkit/crashreporter/google-breakpad/src/processor/static_contained_range_map-inl.h @@ -38,7 +38,7 @@ #define PROCESSOR_STATIC_CONTAINED_RANGE_MAP_INL_H__ #include "processor/static_contained_range_map.h" -#include "common/logging.h" +#include "processor/logging.h" namespace google_breakpad { diff --git a/toolkit/crashreporter/google-breakpad/src/processor/static_map-inl.h b/toolkit/crashreporter/google-breakpad/src/processor/static_map-inl.h index 4db89309cda3..e6aac6aba4b5 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/static_map-inl.h +++ b/toolkit/crashreporter/google-breakpad/src/processor/static_map-inl.h @@ -38,7 +38,7 @@ #include "processor/static_map.h" #include "processor/static_map_iterator-inl.h" -#include "common/logging.h" +#include "processor/logging.h" namespace google_breakpad { diff --git a/toolkit/crashreporter/google-breakpad/src/processor/static_map_iterator-inl.h b/toolkit/crashreporter/google-breakpad/src/processor/static_map_iterator-inl.h index 3c280f4b586d..7a7db5ad93b5 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/static_map_iterator-inl.h +++ b/toolkit/crashreporter/google-breakpad/src/processor/static_map_iterator-inl.h @@ -37,7 +37,7 @@ #include "processor/static_map_iterator.h" -#include "common/logging.h" +#include "processor/logging.h" namespace google_breakpad { diff --git a/toolkit/crashreporter/google-breakpad/src/processor/static_range_map-inl.h b/toolkit/crashreporter/google-breakpad/src/processor/static_range_map-inl.h index b496fcdecb3b..f6cef1a9eec8 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/static_range_map-inl.h +++ b/toolkit/crashreporter/google-breakpad/src/processor/static_range_map-inl.h @@ -37,7 +37,7 @@ #define PROCESSOR_STATIC_RANGE_MAP_INL_H__ #include "processor/static_range_map.h" -#include "common/logging.h" +#include "processor/logging.h" namespace google_breakpad { diff --git a/toolkit/crashreporter/google-breakpad/src/processor/symbolic_constants_win.cc b/toolkit/crashreporter/google-breakpad/src/processor/symbolic_constants_win.cc new file mode 100644 index 000000000000..333aa04174da --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/processor/symbolic_constants_win.cc @@ -0,0 +1,6417 @@ +// Copyright (c) 2015 Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// ntstatus_reason_win.h: Windows NTSTATUS code to string. +// +// Provides a means to convert NTSTATUS codes to strings. +// +// Author: Ben Wagner + +#include +#include + +#include "google_breakpad/common/breakpad_types.h" +#include "google_breakpad/common/minidump_exception_win32.h" +#include "processor/symbolic_constants_win.h" + +namespace google_breakpad { + +std::string NTStatusToString(uint32_t ntstatus) { + std::string reason; + // The content of this switch was created from ntstatus.h in the 8.1 SDK with + // + // egrep '#define [A-Z_0-9]+\s+\(\(NTSTATUS\)0xC[0-9A-F]+L\)' ntstatus.h + // | tr -d '\r' + // | sed -r 's@#define ([A-Z_0-9]+)\s+\(\(NTSTATUS\)(0xC[0-9A-F]+)L\).*@\2 \1@' + // | sort + // | sed -r 's@(0xC[0-9A-F]+) ([A-Z_0-9]+)@ case MD_NTSTATUS_WIN_\2:\n reason = "\2";\n break;@' + // + // With easy copy to clipboard with + // | xclip -selection c # on linux + // | clip # on windows + // | pbcopy # on mac + // + // and then the default case added. + switch (ntstatus) { + case MD_NTSTATUS_WIN_STATUS_UNSUCCESSFUL: + reason = "STATUS_UNSUCCESSFUL"; + break; + case MD_NTSTATUS_WIN_STATUS_NOT_IMPLEMENTED: + reason = "STATUS_NOT_IMPLEMENTED"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_INFO_CLASS: + reason = "STATUS_INVALID_INFO_CLASS"; + break; + case MD_NTSTATUS_WIN_STATUS_INFO_LENGTH_MISMATCH: + reason = "STATUS_INFO_LENGTH_MISMATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_ACCESS_VIOLATION: + reason = "STATUS_ACCESS_VIOLATION"; + break; + case MD_NTSTATUS_WIN_STATUS_IN_PAGE_ERROR: + reason = "STATUS_IN_PAGE_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_PAGEFILE_QUOTA: + reason = "STATUS_PAGEFILE_QUOTA"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_HANDLE: + reason = "STATUS_INVALID_HANDLE"; + break; + case MD_NTSTATUS_WIN_STATUS_BAD_INITIAL_STACK: + reason = "STATUS_BAD_INITIAL_STACK"; + break; + case MD_NTSTATUS_WIN_STATUS_BAD_INITIAL_PC: + reason = "STATUS_BAD_INITIAL_PC"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_CID: + reason = "STATUS_INVALID_CID"; + break; + case MD_NTSTATUS_WIN_STATUS_TIMER_NOT_CANCELED: + reason = "STATUS_TIMER_NOT_CANCELED"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_PARAMETER: + reason = "STATUS_INVALID_PARAMETER"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_SUCH_DEVICE: + reason = "STATUS_NO_SUCH_DEVICE"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_SUCH_FILE: + reason = "STATUS_NO_SUCH_FILE"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_DEVICE_REQUEST: + reason = "STATUS_INVALID_DEVICE_REQUEST"; + break; + case MD_NTSTATUS_WIN_STATUS_END_OF_FILE: + reason = "STATUS_END_OF_FILE"; + break; + case MD_NTSTATUS_WIN_STATUS_WRONG_VOLUME: + reason = "STATUS_WRONG_VOLUME"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_MEDIA_IN_DEVICE: + reason = "STATUS_NO_MEDIA_IN_DEVICE"; + break; + case MD_NTSTATUS_WIN_STATUS_UNRECOGNIZED_MEDIA: + reason = "STATUS_UNRECOGNIZED_MEDIA"; + break; + case MD_NTSTATUS_WIN_STATUS_NONEXISTENT_SECTOR: + reason = "STATUS_NONEXISTENT_SECTOR"; + break; + case MD_NTSTATUS_WIN_STATUS_MORE_PROCESSING_REQUIRED: + reason = "STATUS_MORE_PROCESSING_REQUIRED"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_MEMORY: + reason = "STATUS_NO_MEMORY"; + break; + case MD_NTSTATUS_WIN_STATUS_CONFLICTING_ADDRESSES: + reason = "STATUS_CONFLICTING_ADDRESSES"; + break; + case MD_NTSTATUS_WIN_STATUS_NOT_MAPPED_VIEW: + reason = "STATUS_NOT_MAPPED_VIEW"; + break; + case MD_NTSTATUS_WIN_STATUS_UNABLE_TO_FREE_VM: + reason = "STATUS_UNABLE_TO_FREE_VM"; + break; + case MD_NTSTATUS_WIN_STATUS_UNABLE_TO_DELETE_SECTION: + reason = "STATUS_UNABLE_TO_DELETE_SECTION"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_SYSTEM_SERVICE: + reason = "STATUS_INVALID_SYSTEM_SERVICE"; + break; + case MD_NTSTATUS_WIN_STATUS_ILLEGAL_INSTRUCTION: + reason = "STATUS_ILLEGAL_INSTRUCTION"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_LOCK_SEQUENCE: + reason = "STATUS_INVALID_LOCK_SEQUENCE"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_VIEW_SIZE: + reason = "STATUS_INVALID_VIEW_SIZE"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_FILE_FOR_SECTION: + reason = "STATUS_INVALID_FILE_FOR_SECTION"; + break; + case MD_NTSTATUS_WIN_STATUS_ALREADY_COMMITTED: + reason = "STATUS_ALREADY_COMMITTED"; + break; + case MD_NTSTATUS_WIN_STATUS_ACCESS_DENIED: + reason = "STATUS_ACCESS_DENIED"; + break; + case MD_NTSTATUS_WIN_STATUS_BUFFER_TOO_SMALL: + reason = "STATUS_BUFFER_TOO_SMALL"; + break; + case MD_NTSTATUS_WIN_STATUS_OBJECT_TYPE_MISMATCH: + reason = "STATUS_OBJECT_TYPE_MISMATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_NONCONTINUABLE_EXCEPTION: + reason = "STATUS_NONCONTINUABLE_EXCEPTION"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_DISPOSITION: + reason = "STATUS_INVALID_DISPOSITION"; + break; + case MD_NTSTATUS_WIN_STATUS_UNWIND: + reason = "STATUS_UNWIND"; + break; + case MD_NTSTATUS_WIN_STATUS_BAD_STACK: + reason = "STATUS_BAD_STACK"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_UNWIND_TARGET: + reason = "STATUS_INVALID_UNWIND_TARGET"; + break; + case MD_NTSTATUS_WIN_STATUS_NOT_LOCKED: + reason = "STATUS_NOT_LOCKED"; + break; + case MD_NTSTATUS_WIN_STATUS_PARITY_ERROR: + reason = "STATUS_PARITY_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_UNABLE_TO_DECOMMIT_VM: + reason = "STATUS_UNABLE_TO_DECOMMIT_VM"; + break; + case MD_NTSTATUS_WIN_STATUS_NOT_COMMITTED: + reason = "STATUS_NOT_COMMITTED"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_PORT_ATTRIBUTES: + reason = "STATUS_INVALID_PORT_ATTRIBUTES"; + break; + case MD_NTSTATUS_WIN_STATUS_PORT_MESSAGE_TOO_LONG: + reason = "STATUS_PORT_MESSAGE_TOO_LONG"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_PARAMETER_MIX: + reason = "STATUS_INVALID_PARAMETER_MIX"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_QUOTA_LOWER: + reason = "STATUS_INVALID_QUOTA_LOWER"; + break; + case MD_NTSTATUS_WIN_STATUS_DISK_CORRUPT_ERROR: + reason = "STATUS_DISK_CORRUPT_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_OBJECT_NAME_INVALID: + reason = "STATUS_OBJECT_NAME_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_OBJECT_NAME_NOT_FOUND: + reason = "STATUS_OBJECT_NAME_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_OBJECT_NAME_COLLISION: + reason = "STATUS_OBJECT_NAME_COLLISION"; + break; + case MD_NTSTATUS_WIN_STATUS_PORT_DISCONNECTED: + reason = "STATUS_PORT_DISCONNECTED"; + break; + case MD_NTSTATUS_WIN_STATUS_DEVICE_ALREADY_ATTACHED: + reason = "STATUS_DEVICE_ALREADY_ATTACHED"; + break; + case MD_NTSTATUS_WIN_STATUS_OBJECT_PATH_INVALID: + reason = "STATUS_OBJECT_PATH_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_OBJECT_PATH_NOT_FOUND: + reason = "STATUS_OBJECT_PATH_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_OBJECT_PATH_SYNTAX_BAD: + reason = "STATUS_OBJECT_PATH_SYNTAX_BAD"; + break; + case MD_NTSTATUS_WIN_STATUS_DATA_OVERRUN: + reason = "STATUS_DATA_OVERRUN"; + break; + case MD_NTSTATUS_WIN_STATUS_DATA_LATE_ERROR: + reason = "STATUS_DATA_LATE_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_DATA_ERROR: + reason = "STATUS_DATA_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_CRC_ERROR: + reason = "STATUS_CRC_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_SECTION_TOO_BIG: + reason = "STATUS_SECTION_TOO_BIG"; + break; + case MD_NTSTATUS_WIN_STATUS_PORT_CONNECTION_REFUSED: + reason = "STATUS_PORT_CONNECTION_REFUSED"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_PORT_HANDLE: + reason = "STATUS_INVALID_PORT_HANDLE"; + break; + case MD_NTSTATUS_WIN_STATUS_SHARING_VIOLATION: + reason = "STATUS_SHARING_VIOLATION"; + break; + case MD_NTSTATUS_WIN_STATUS_QUOTA_EXCEEDED: + reason = "STATUS_QUOTA_EXCEEDED"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_PAGE_PROTECTION: + reason = "STATUS_INVALID_PAGE_PROTECTION"; + break; + case MD_NTSTATUS_WIN_STATUS_MUTANT_NOT_OWNED: + reason = "STATUS_MUTANT_NOT_OWNED"; + break; + case MD_NTSTATUS_WIN_STATUS_SEMAPHORE_LIMIT_EXCEEDED: + reason = "STATUS_SEMAPHORE_LIMIT_EXCEEDED"; + break; + case MD_NTSTATUS_WIN_STATUS_PORT_ALREADY_SET: + reason = "STATUS_PORT_ALREADY_SET"; + break; + case MD_NTSTATUS_WIN_STATUS_SECTION_NOT_IMAGE: + reason = "STATUS_SECTION_NOT_IMAGE"; + break; + case MD_NTSTATUS_WIN_STATUS_SUSPEND_COUNT_EXCEEDED: + reason = "STATUS_SUSPEND_COUNT_EXCEEDED"; + break; + case MD_NTSTATUS_WIN_STATUS_THREAD_IS_TERMINATING: + reason = "STATUS_THREAD_IS_TERMINATING"; + break; + case MD_NTSTATUS_WIN_STATUS_BAD_WORKING_SET_LIMIT: + reason = "STATUS_BAD_WORKING_SET_LIMIT"; + break; + case MD_NTSTATUS_WIN_STATUS_INCOMPATIBLE_FILE_MAP: + reason = "STATUS_INCOMPATIBLE_FILE_MAP"; + break; + case MD_NTSTATUS_WIN_STATUS_SECTION_PROTECTION: + reason = "STATUS_SECTION_PROTECTION"; + break; + case MD_NTSTATUS_WIN_STATUS_EAS_NOT_SUPPORTED: + reason = "STATUS_EAS_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_EA_TOO_LARGE: + reason = "STATUS_EA_TOO_LARGE"; + break; + case MD_NTSTATUS_WIN_STATUS_NONEXISTENT_EA_ENTRY: + reason = "STATUS_NONEXISTENT_EA_ENTRY"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_EAS_ON_FILE: + reason = "STATUS_NO_EAS_ON_FILE"; + break; + case MD_NTSTATUS_WIN_STATUS_EA_CORRUPT_ERROR: + reason = "STATUS_EA_CORRUPT_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_FILE_LOCK_CONFLICT: + reason = "STATUS_FILE_LOCK_CONFLICT"; + break; + case MD_NTSTATUS_WIN_STATUS_LOCK_NOT_GRANTED: + reason = "STATUS_LOCK_NOT_GRANTED"; + break; + case MD_NTSTATUS_WIN_STATUS_DELETE_PENDING: + reason = "STATUS_DELETE_PENDING"; + break; + case MD_NTSTATUS_WIN_STATUS_CTL_FILE_NOT_SUPPORTED: + reason = "STATUS_CTL_FILE_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_UNKNOWN_REVISION: + reason = "STATUS_UNKNOWN_REVISION"; + break; + case MD_NTSTATUS_WIN_STATUS_REVISION_MISMATCH: + reason = "STATUS_REVISION_MISMATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_OWNER: + reason = "STATUS_INVALID_OWNER"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_PRIMARY_GROUP: + reason = "STATUS_INVALID_PRIMARY_GROUP"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_IMPERSONATION_TOKEN: + reason = "STATUS_NO_IMPERSONATION_TOKEN"; + break; + case MD_NTSTATUS_WIN_STATUS_CANT_DISABLE_MANDATORY: + reason = "STATUS_CANT_DISABLE_MANDATORY"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_LOGON_SERVERS: + reason = "STATUS_NO_LOGON_SERVERS"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_SUCH_LOGON_SESSION: + reason = "STATUS_NO_SUCH_LOGON_SESSION"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_SUCH_PRIVILEGE: + reason = "STATUS_NO_SUCH_PRIVILEGE"; + break; + case MD_NTSTATUS_WIN_STATUS_PRIVILEGE_NOT_HELD: + reason = "STATUS_PRIVILEGE_NOT_HELD"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_ACCOUNT_NAME: + reason = "STATUS_INVALID_ACCOUNT_NAME"; + break; + case MD_NTSTATUS_WIN_STATUS_USER_EXISTS: + reason = "STATUS_USER_EXISTS"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_SUCH_USER: + reason = "STATUS_NO_SUCH_USER"; + break; + case MD_NTSTATUS_WIN_STATUS_GROUP_EXISTS: + reason = "STATUS_GROUP_EXISTS"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_SUCH_GROUP: + reason = "STATUS_NO_SUCH_GROUP"; + break; + case MD_NTSTATUS_WIN_STATUS_MEMBER_IN_GROUP: + reason = "STATUS_MEMBER_IN_GROUP"; + break; + case MD_NTSTATUS_WIN_STATUS_MEMBER_NOT_IN_GROUP: + reason = "STATUS_MEMBER_NOT_IN_GROUP"; + break; + case MD_NTSTATUS_WIN_STATUS_LAST_ADMIN: + reason = "STATUS_LAST_ADMIN"; + break; + case MD_NTSTATUS_WIN_STATUS_WRONG_PASSWORD: + reason = "STATUS_WRONG_PASSWORD"; + break; + case MD_NTSTATUS_WIN_STATUS_ILL_FORMED_PASSWORD: + reason = "STATUS_ILL_FORMED_PASSWORD"; + break; + case MD_NTSTATUS_WIN_STATUS_PASSWORD_RESTRICTION: + reason = "STATUS_PASSWORD_RESTRICTION"; + break; + case MD_NTSTATUS_WIN_STATUS_LOGON_FAILURE: + reason = "STATUS_LOGON_FAILURE"; + break; + case MD_NTSTATUS_WIN_STATUS_ACCOUNT_RESTRICTION: + reason = "STATUS_ACCOUNT_RESTRICTION"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_LOGON_HOURS: + reason = "STATUS_INVALID_LOGON_HOURS"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_WORKSTATION: + reason = "STATUS_INVALID_WORKSTATION"; + break; + case MD_NTSTATUS_WIN_STATUS_PASSWORD_EXPIRED: + reason = "STATUS_PASSWORD_EXPIRED"; + break; + case MD_NTSTATUS_WIN_STATUS_ACCOUNT_DISABLED: + reason = "STATUS_ACCOUNT_DISABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_NONE_MAPPED: + reason = "STATUS_NONE_MAPPED"; + break; + case MD_NTSTATUS_WIN_STATUS_TOO_MANY_LUIDS_REQUESTED: + reason = "STATUS_TOO_MANY_LUIDS_REQUESTED"; + break; + case MD_NTSTATUS_WIN_STATUS_LUIDS_EXHAUSTED: + reason = "STATUS_LUIDS_EXHAUSTED"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_SUB_AUTHORITY: + reason = "STATUS_INVALID_SUB_AUTHORITY"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_ACL: + reason = "STATUS_INVALID_ACL"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_SID: + reason = "STATUS_INVALID_SID"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_SECURITY_DESCR: + reason = "STATUS_INVALID_SECURITY_DESCR"; + break; + case MD_NTSTATUS_WIN_STATUS_PROCEDURE_NOT_FOUND: + reason = "STATUS_PROCEDURE_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_IMAGE_FORMAT: + reason = "STATUS_INVALID_IMAGE_FORMAT"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_TOKEN: + reason = "STATUS_NO_TOKEN"; + break; + case MD_NTSTATUS_WIN_STATUS_BAD_INHERITANCE_ACL: + reason = "STATUS_BAD_INHERITANCE_ACL"; + break; + case MD_NTSTATUS_WIN_STATUS_RANGE_NOT_LOCKED: + reason = "STATUS_RANGE_NOT_LOCKED"; + break; + case MD_NTSTATUS_WIN_STATUS_DISK_FULL: + reason = "STATUS_DISK_FULL"; + break; + case MD_NTSTATUS_WIN_STATUS_SERVER_DISABLED: + reason = "STATUS_SERVER_DISABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_SERVER_NOT_DISABLED: + reason = "STATUS_SERVER_NOT_DISABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_TOO_MANY_GUIDS_REQUESTED: + reason = "STATUS_TOO_MANY_GUIDS_REQUESTED"; + break; + case MD_NTSTATUS_WIN_STATUS_GUIDS_EXHAUSTED: + reason = "STATUS_GUIDS_EXHAUSTED"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_ID_AUTHORITY: + reason = "STATUS_INVALID_ID_AUTHORITY"; + break; + case MD_NTSTATUS_WIN_STATUS_AGENTS_EXHAUSTED: + reason = "STATUS_AGENTS_EXHAUSTED"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_VOLUME_LABEL: + reason = "STATUS_INVALID_VOLUME_LABEL"; + break; + case MD_NTSTATUS_WIN_STATUS_SECTION_NOT_EXTENDED: + reason = "STATUS_SECTION_NOT_EXTENDED"; + break; + case MD_NTSTATUS_WIN_STATUS_NOT_MAPPED_DATA: + reason = "STATUS_NOT_MAPPED_DATA"; + break; + case MD_NTSTATUS_WIN_STATUS_RESOURCE_DATA_NOT_FOUND: + reason = "STATUS_RESOURCE_DATA_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_RESOURCE_TYPE_NOT_FOUND: + reason = "STATUS_RESOURCE_TYPE_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_RESOURCE_NAME_NOT_FOUND: + reason = "STATUS_RESOURCE_NAME_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_ARRAY_BOUNDS_EXCEEDED: + reason = "STATUS_ARRAY_BOUNDS_EXCEEDED"; + break; + case MD_NTSTATUS_WIN_STATUS_FLOAT_DENORMAL_OPERAND: + reason = "STATUS_FLOAT_DENORMAL_OPERAND"; + break; + case MD_NTSTATUS_WIN_STATUS_FLOAT_DIVIDE_BY_ZERO: + reason = "STATUS_FLOAT_DIVIDE_BY_ZERO"; + break; + case MD_NTSTATUS_WIN_STATUS_FLOAT_INEXACT_RESULT: + reason = "STATUS_FLOAT_INEXACT_RESULT"; + break; + case MD_NTSTATUS_WIN_STATUS_FLOAT_INVALID_OPERATION: + reason = "STATUS_FLOAT_INVALID_OPERATION"; + break; + case MD_NTSTATUS_WIN_STATUS_FLOAT_OVERFLOW: + reason = "STATUS_FLOAT_OVERFLOW"; + break; + case MD_NTSTATUS_WIN_STATUS_FLOAT_STACK_CHECK: + reason = "STATUS_FLOAT_STACK_CHECK"; + break; + case MD_NTSTATUS_WIN_STATUS_FLOAT_UNDERFLOW: + reason = "STATUS_FLOAT_UNDERFLOW"; + break; + case MD_NTSTATUS_WIN_STATUS_INTEGER_DIVIDE_BY_ZERO: + reason = "STATUS_INTEGER_DIVIDE_BY_ZERO"; + break; + case MD_NTSTATUS_WIN_STATUS_INTEGER_OVERFLOW: + reason = "STATUS_INTEGER_OVERFLOW"; + break; + case MD_NTSTATUS_WIN_STATUS_PRIVILEGED_INSTRUCTION: + reason = "STATUS_PRIVILEGED_INSTRUCTION"; + break; + case MD_NTSTATUS_WIN_STATUS_TOO_MANY_PAGING_FILES: + reason = "STATUS_TOO_MANY_PAGING_FILES"; + break; + case MD_NTSTATUS_WIN_STATUS_FILE_INVALID: + reason = "STATUS_FILE_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_ALLOTTED_SPACE_EXCEEDED: + reason = "STATUS_ALLOTTED_SPACE_EXCEEDED"; + break; + case MD_NTSTATUS_WIN_STATUS_INSUFFICIENT_RESOURCES: + reason = "STATUS_INSUFFICIENT_RESOURCES"; + break; + case MD_NTSTATUS_WIN_STATUS_DFS_EXIT_PATH_FOUND: + reason = "STATUS_DFS_EXIT_PATH_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_DEVICE_DATA_ERROR: + reason = "STATUS_DEVICE_DATA_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_DEVICE_NOT_CONNECTED: + reason = "STATUS_DEVICE_NOT_CONNECTED"; + break; + case MD_NTSTATUS_WIN_STATUS_DEVICE_POWER_FAILURE: + reason = "STATUS_DEVICE_POWER_FAILURE"; + break; + case MD_NTSTATUS_WIN_STATUS_FREE_VM_NOT_AT_BASE: + reason = "STATUS_FREE_VM_NOT_AT_BASE"; + break; + case MD_NTSTATUS_WIN_STATUS_MEMORY_NOT_ALLOCATED: + reason = "STATUS_MEMORY_NOT_ALLOCATED"; + break; + case MD_NTSTATUS_WIN_STATUS_WORKING_SET_QUOTA: + reason = "STATUS_WORKING_SET_QUOTA"; + break; + case MD_NTSTATUS_WIN_STATUS_MEDIA_WRITE_PROTECTED: + reason = "STATUS_MEDIA_WRITE_PROTECTED"; + break; + case MD_NTSTATUS_WIN_STATUS_DEVICE_NOT_READY: + reason = "STATUS_DEVICE_NOT_READY"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_GROUP_ATTRIBUTES: + reason = "STATUS_INVALID_GROUP_ATTRIBUTES"; + break; + case MD_NTSTATUS_WIN_STATUS_BAD_IMPERSONATION_LEVEL: + reason = "STATUS_BAD_IMPERSONATION_LEVEL"; + break; + case MD_NTSTATUS_WIN_STATUS_CANT_OPEN_ANONYMOUS: + reason = "STATUS_CANT_OPEN_ANONYMOUS"; + break; + case MD_NTSTATUS_WIN_STATUS_BAD_VALIDATION_CLASS: + reason = "STATUS_BAD_VALIDATION_CLASS"; + break; + case MD_NTSTATUS_WIN_STATUS_BAD_TOKEN_TYPE: + reason = "STATUS_BAD_TOKEN_TYPE"; + break; + case MD_NTSTATUS_WIN_STATUS_BAD_MASTER_BOOT_RECORD: + reason = "STATUS_BAD_MASTER_BOOT_RECORD"; + break; + case MD_NTSTATUS_WIN_STATUS_INSTRUCTION_MISALIGNMENT: + reason = "STATUS_INSTRUCTION_MISALIGNMENT"; + break; + case MD_NTSTATUS_WIN_STATUS_INSTANCE_NOT_AVAILABLE: + reason = "STATUS_INSTANCE_NOT_AVAILABLE"; + break; + case MD_NTSTATUS_WIN_STATUS_PIPE_NOT_AVAILABLE: + reason = "STATUS_PIPE_NOT_AVAILABLE"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_PIPE_STATE: + reason = "STATUS_INVALID_PIPE_STATE"; + break; + case MD_NTSTATUS_WIN_STATUS_PIPE_BUSY: + reason = "STATUS_PIPE_BUSY"; + break; + case MD_NTSTATUS_WIN_STATUS_ILLEGAL_FUNCTION: + reason = "STATUS_ILLEGAL_FUNCTION"; + break; + case MD_NTSTATUS_WIN_STATUS_PIPE_DISCONNECTED: + reason = "STATUS_PIPE_DISCONNECTED"; + break; + case MD_NTSTATUS_WIN_STATUS_PIPE_CLOSING: + reason = "STATUS_PIPE_CLOSING"; + break; + case MD_NTSTATUS_WIN_STATUS_PIPE_CONNECTED: + reason = "STATUS_PIPE_CONNECTED"; + break; + case MD_NTSTATUS_WIN_STATUS_PIPE_LISTENING: + reason = "STATUS_PIPE_LISTENING"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_READ_MODE: + reason = "STATUS_INVALID_READ_MODE"; + break; + case MD_NTSTATUS_WIN_STATUS_IO_TIMEOUT: + reason = "STATUS_IO_TIMEOUT"; + break; + case MD_NTSTATUS_WIN_STATUS_FILE_FORCED_CLOSED: + reason = "STATUS_FILE_FORCED_CLOSED"; + break; + case MD_NTSTATUS_WIN_STATUS_PROFILING_NOT_STARTED: + reason = "STATUS_PROFILING_NOT_STARTED"; + break; + case MD_NTSTATUS_WIN_STATUS_PROFILING_NOT_STOPPED: + reason = "STATUS_PROFILING_NOT_STOPPED"; + break; + case MD_NTSTATUS_WIN_STATUS_COULD_NOT_INTERPRET: + reason = "STATUS_COULD_NOT_INTERPRET"; + break; + case MD_NTSTATUS_WIN_STATUS_FILE_IS_A_DIRECTORY: + reason = "STATUS_FILE_IS_A_DIRECTORY"; + break; + case MD_NTSTATUS_WIN_STATUS_NOT_SUPPORTED: + reason = "STATUS_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_REMOTE_NOT_LISTENING: + reason = "STATUS_REMOTE_NOT_LISTENING"; + break; + case MD_NTSTATUS_WIN_STATUS_DUPLICATE_NAME: + reason = "STATUS_DUPLICATE_NAME"; + break; + case MD_NTSTATUS_WIN_STATUS_BAD_NETWORK_PATH: + reason = "STATUS_BAD_NETWORK_PATH"; + break; + case MD_NTSTATUS_WIN_STATUS_NETWORK_BUSY: + reason = "STATUS_NETWORK_BUSY"; + break; + case MD_NTSTATUS_WIN_STATUS_DEVICE_DOES_NOT_EXIST: + reason = "STATUS_DEVICE_DOES_NOT_EXIST"; + break; + case MD_NTSTATUS_WIN_STATUS_TOO_MANY_COMMANDS: + reason = "STATUS_TOO_MANY_COMMANDS"; + break; + case MD_NTSTATUS_WIN_STATUS_ADAPTER_HARDWARE_ERROR: + reason = "STATUS_ADAPTER_HARDWARE_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_NETWORK_RESPONSE: + reason = "STATUS_INVALID_NETWORK_RESPONSE"; + break; + case MD_NTSTATUS_WIN_STATUS_UNEXPECTED_NETWORK_ERROR: + reason = "STATUS_UNEXPECTED_NETWORK_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_BAD_REMOTE_ADAPTER: + reason = "STATUS_BAD_REMOTE_ADAPTER"; + break; + case MD_NTSTATUS_WIN_STATUS_PRINT_QUEUE_FULL: + reason = "STATUS_PRINT_QUEUE_FULL"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_SPOOL_SPACE: + reason = "STATUS_NO_SPOOL_SPACE"; + break; + case MD_NTSTATUS_WIN_STATUS_PRINT_CANCELLED: + reason = "STATUS_PRINT_CANCELLED"; + break; + case MD_NTSTATUS_WIN_STATUS_NETWORK_NAME_DELETED: + reason = "STATUS_NETWORK_NAME_DELETED"; + break; + case MD_NTSTATUS_WIN_STATUS_NETWORK_ACCESS_DENIED: + reason = "STATUS_NETWORK_ACCESS_DENIED"; + break; + case MD_NTSTATUS_WIN_STATUS_BAD_DEVICE_TYPE: + reason = "STATUS_BAD_DEVICE_TYPE"; + break; + case MD_NTSTATUS_WIN_STATUS_BAD_NETWORK_NAME: + reason = "STATUS_BAD_NETWORK_NAME"; + break; + case MD_NTSTATUS_WIN_STATUS_TOO_MANY_NAMES: + reason = "STATUS_TOO_MANY_NAMES"; + break; + case MD_NTSTATUS_WIN_STATUS_TOO_MANY_SESSIONS: + reason = "STATUS_TOO_MANY_SESSIONS"; + break; + case MD_NTSTATUS_WIN_STATUS_SHARING_PAUSED: + reason = "STATUS_SHARING_PAUSED"; + break; + case MD_NTSTATUS_WIN_STATUS_REQUEST_NOT_ACCEPTED: + reason = "STATUS_REQUEST_NOT_ACCEPTED"; + break; + case MD_NTSTATUS_WIN_STATUS_REDIRECTOR_PAUSED: + reason = "STATUS_REDIRECTOR_PAUSED"; + break; + case MD_NTSTATUS_WIN_STATUS_NET_WRITE_FAULT: + reason = "STATUS_NET_WRITE_FAULT"; + break; + case MD_NTSTATUS_WIN_STATUS_PROFILING_AT_LIMIT: + reason = "STATUS_PROFILING_AT_LIMIT"; + break; + case MD_NTSTATUS_WIN_STATUS_NOT_SAME_DEVICE: + reason = "STATUS_NOT_SAME_DEVICE"; + break; + case MD_NTSTATUS_WIN_STATUS_FILE_RENAMED: + reason = "STATUS_FILE_RENAMED"; + break; + case MD_NTSTATUS_WIN_STATUS_VIRTUAL_CIRCUIT_CLOSED: + reason = "STATUS_VIRTUAL_CIRCUIT_CLOSED"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_SECURITY_ON_OBJECT: + reason = "STATUS_NO_SECURITY_ON_OBJECT"; + break; + case MD_NTSTATUS_WIN_STATUS_CANT_WAIT: + reason = "STATUS_CANT_WAIT"; + break; + case MD_NTSTATUS_WIN_STATUS_PIPE_EMPTY: + reason = "STATUS_PIPE_EMPTY"; + break; + case MD_NTSTATUS_WIN_STATUS_CANT_ACCESS_DOMAIN_INFO: + reason = "STATUS_CANT_ACCESS_DOMAIN_INFO"; + break; + case MD_NTSTATUS_WIN_STATUS_CANT_TERMINATE_SELF: + reason = "STATUS_CANT_TERMINATE_SELF"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_SERVER_STATE: + reason = "STATUS_INVALID_SERVER_STATE"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_DOMAIN_STATE: + reason = "STATUS_INVALID_DOMAIN_STATE"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_DOMAIN_ROLE: + reason = "STATUS_INVALID_DOMAIN_ROLE"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_SUCH_DOMAIN: + reason = "STATUS_NO_SUCH_DOMAIN"; + break; + case MD_NTSTATUS_WIN_STATUS_DOMAIN_EXISTS: + reason = "STATUS_DOMAIN_EXISTS"; + break; + case MD_NTSTATUS_WIN_STATUS_DOMAIN_LIMIT_EXCEEDED: + reason = "STATUS_DOMAIN_LIMIT_EXCEEDED"; + break; + case MD_NTSTATUS_WIN_STATUS_OPLOCK_NOT_GRANTED: + reason = "STATUS_OPLOCK_NOT_GRANTED"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_OPLOCK_PROTOCOL: + reason = "STATUS_INVALID_OPLOCK_PROTOCOL"; + break; + case MD_NTSTATUS_WIN_STATUS_INTERNAL_DB_CORRUPTION: + reason = "STATUS_INTERNAL_DB_CORRUPTION"; + break; + case MD_NTSTATUS_WIN_STATUS_INTERNAL_ERROR: + reason = "STATUS_INTERNAL_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_GENERIC_NOT_MAPPED: + reason = "STATUS_GENERIC_NOT_MAPPED"; + break; + case MD_NTSTATUS_WIN_STATUS_BAD_DESCRIPTOR_FORMAT: + reason = "STATUS_BAD_DESCRIPTOR_FORMAT"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_USER_BUFFER: + reason = "STATUS_INVALID_USER_BUFFER"; + break; + case MD_NTSTATUS_WIN_STATUS_UNEXPECTED_IO_ERROR: + reason = "STATUS_UNEXPECTED_IO_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_UNEXPECTED_MM_CREATE_ERR: + reason = "STATUS_UNEXPECTED_MM_CREATE_ERR"; + break; + case MD_NTSTATUS_WIN_STATUS_UNEXPECTED_MM_MAP_ERROR: + reason = "STATUS_UNEXPECTED_MM_MAP_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_UNEXPECTED_MM_EXTEND_ERR: + reason = "STATUS_UNEXPECTED_MM_EXTEND_ERR"; + break; + case MD_NTSTATUS_WIN_STATUS_NOT_LOGON_PROCESS: + reason = "STATUS_NOT_LOGON_PROCESS"; + break; + case MD_NTSTATUS_WIN_STATUS_LOGON_SESSION_EXISTS: + reason = "STATUS_LOGON_SESSION_EXISTS"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_PARAMETER_1: + reason = "STATUS_INVALID_PARAMETER_1"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_PARAMETER_2: + reason = "STATUS_INVALID_PARAMETER_2"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_PARAMETER_3: + reason = "STATUS_INVALID_PARAMETER_3"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_PARAMETER_4: + reason = "STATUS_INVALID_PARAMETER_4"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_PARAMETER_5: + reason = "STATUS_INVALID_PARAMETER_5"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_PARAMETER_6: + reason = "STATUS_INVALID_PARAMETER_6"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_PARAMETER_7: + reason = "STATUS_INVALID_PARAMETER_7"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_PARAMETER_8: + reason = "STATUS_INVALID_PARAMETER_8"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_PARAMETER_9: + reason = "STATUS_INVALID_PARAMETER_9"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_PARAMETER_10: + reason = "STATUS_INVALID_PARAMETER_10"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_PARAMETER_11: + reason = "STATUS_INVALID_PARAMETER_11"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_PARAMETER_12: + reason = "STATUS_INVALID_PARAMETER_12"; + break; + case MD_NTSTATUS_WIN_STATUS_REDIRECTOR_NOT_STARTED: + reason = "STATUS_REDIRECTOR_NOT_STARTED"; + break; + case MD_NTSTATUS_WIN_STATUS_REDIRECTOR_STARTED: + reason = "STATUS_REDIRECTOR_STARTED"; + break; + case MD_NTSTATUS_WIN_STATUS_STACK_OVERFLOW: + reason = "STATUS_STACK_OVERFLOW"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_SUCH_PACKAGE: + reason = "STATUS_NO_SUCH_PACKAGE"; + break; + case MD_NTSTATUS_WIN_STATUS_BAD_FUNCTION_TABLE: + reason = "STATUS_BAD_FUNCTION_TABLE"; + break; + case MD_NTSTATUS_WIN_STATUS_VARIABLE_NOT_FOUND: + reason = "STATUS_VARIABLE_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_DIRECTORY_NOT_EMPTY: + reason = "STATUS_DIRECTORY_NOT_EMPTY"; + break; + case MD_NTSTATUS_WIN_STATUS_FILE_CORRUPT_ERROR: + reason = "STATUS_FILE_CORRUPT_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_NOT_A_DIRECTORY: + reason = "STATUS_NOT_A_DIRECTORY"; + break; + case MD_NTSTATUS_WIN_STATUS_BAD_LOGON_SESSION_STATE: + reason = "STATUS_BAD_LOGON_SESSION_STATE"; + break; + case MD_NTSTATUS_WIN_STATUS_LOGON_SESSION_COLLISION: + reason = "STATUS_LOGON_SESSION_COLLISION"; + break; + case MD_NTSTATUS_WIN_STATUS_NAME_TOO_LONG: + reason = "STATUS_NAME_TOO_LONG"; + break; + case MD_NTSTATUS_WIN_STATUS_FILES_OPEN: + reason = "STATUS_FILES_OPEN"; + break; + case MD_NTSTATUS_WIN_STATUS_CONNECTION_IN_USE: + reason = "STATUS_CONNECTION_IN_USE"; + break; + case MD_NTSTATUS_WIN_STATUS_MESSAGE_NOT_FOUND: + reason = "STATUS_MESSAGE_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_PROCESS_IS_TERMINATING: + reason = "STATUS_PROCESS_IS_TERMINATING"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_LOGON_TYPE: + reason = "STATUS_INVALID_LOGON_TYPE"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_GUID_TRANSLATION: + reason = "STATUS_NO_GUID_TRANSLATION"; + break; + case MD_NTSTATUS_WIN_STATUS_CANNOT_IMPERSONATE: + reason = "STATUS_CANNOT_IMPERSONATE"; + break; + case MD_NTSTATUS_WIN_STATUS_IMAGE_ALREADY_LOADED: + reason = "STATUS_IMAGE_ALREADY_LOADED"; + break; + case MD_NTSTATUS_WIN_STATUS_ABIOS_NOT_PRESENT: + reason = "STATUS_ABIOS_NOT_PRESENT"; + break; + case MD_NTSTATUS_WIN_STATUS_ABIOS_LID_NOT_EXIST: + reason = "STATUS_ABIOS_LID_NOT_EXIST"; + break; + case MD_NTSTATUS_WIN_STATUS_ABIOS_LID_ALREADY_OWNED: + reason = "STATUS_ABIOS_LID_ALREADY_OWNED"; + break; + case MD_NTSTATUS_WIN_STATUS_ABIOS_NOT_LID_OWNER: + reason = "STATUS_ABIOS_NOT_LID_OWNER"; + break; + case MD_NTSTATUS_WIN_STATUS_ABIOS_INVALID_COMMAND: + reason = "STATUS_ABIOS_INVALID_COMMAND"; + break; + case MD_NTSTATUS_WIN_STATUS_ABIOS_INVALID_LID: + reason = "STATUS_ABIOS_INVALID_LID"; + break; + case MD_NTSTATUS_WIN_STATUS_ABIOS_SELECTOR_NOT_AVAILABLE: + reason = "STATUS_ABIOS_SELECTOR_NOT_AVAILABLE"; + break; + case MD_NTSTATUS_WIN_STATUS_ABIOS_INVALID_SELECTOR: + reason = "STATUS_ABIOS_INVALID_SELECTOR"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_LDT: + reason = "STATUS_NO_LDT"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_LDT_SIZE: + reason = "STATUS_INVALID_LDT_SIZE"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_LDT_OFFSET: + reason = "STATUS_INVALID_LDT_OFFSET"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_LDT_DESCRIPTOR: + reason = "STATUS_INVALID_LDT_DESCRIPTOR"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_IMAGE_NE_FORMAT: + reason = "STATUS_INVALID_IMAGE_NE_FORMAT"; + break; + case MD_NTSTATUS_WIN_STATUS_RXACT_INVALID_STATE: + reason = "STATUS_RXACT_INVALID_STATE"; + break; + case MD_NTSTATUS_WIN_STATUS_RXACT_COMMIT_FAILURE: + reason = "STATUS_RXACT_COMMIT_FAILURE"; + break; + case MD_NTSTATUS_WIN_STATUS_MAPPED_FILE_SIZE_ZERO: + reason = "STATUS_MAPPED_FILE_SIZE_ZERO"; + break; + case MD_NTSTATUS_WIN_STATUS_TOO_MANY_OPENED_FILES: + reason = "STATUS_TOO_MANY_OPENED_FILES"; + break; + case MD_NTSTATUS_WIN_STATUS_CANCELLED: + reason = "STATUS_CANCELLED"; + break; + case MD_NTSTATUS_WIN_STATUS_CANNOT_DELETE: + reason = "STATUS_CANNOT_DELETE"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_COMPUTER_NAME: + reason = "STATUS_INVALID_COMPUTER_NAME"; + break; + case MD_NTSTATUS_WIN_STATUS_FILE_DELETED: + reason = "STATUS_FILE_DELETED"; + break; + case MD_NTSTATUS_WIN_STATUS_SPECIAL_ACCOUNT: + reason = "STATUS_SPECIAL_ACCOUNT"; + break; + case MD_NTSTATUS_WIN_STATUS_SPECIAL_GROUP: + reason = "STATUS_SPECIAL_GROUP"; + break; + case MD_NTSTATUS_WIN_STATUS_SPECIAL_USER: + reason = "STATUS_SPECIAL_USER"; + break; + case MD_NTSTATUS_WIN_STATUS_MEMBERS_PRIMARY_GROUP: + reason = "STATUS_MEMBERS_PRIMARY_GROUP"; + break; + case MD_NTSTATUS_WIN_STATUS_FILE_CLOSED: + reason = "STATUS_FILE_CLOSED"; + break; + case MD_NTSTATUS_WIN_STATUS_TOO_MANY_THREADS: + reason = "STATUS_TOO_MANY_THREADS"; + break; + case MD_NTSTATUS_WIN_STATUS_THREAD_NOT_IN_PROCESS: + reason = "STATUS_THREAD_NOT_IN_PROCESS"; + break; + case MD_NTSTATUS_WIN_STATUS_TOKEN_ALREADY_IN_USE: + reason = "STATUS_TOKEN_ALREADY_IN_USE"; + break; + case MD_NTSTATUS_WIN_STATUS_PAGEFILE_QUOTA_EXCEEDED: + reason = "STATUS_PAGEFILE_QUOTA_EXCEEDED"; + break; + case MD_NTSTATUS_WIN_STATUS_COMMITMENT_LIMIT: + reason = "STATUS_COMMITMENT_LIMIT"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_IMAGE_LE_FORMAT: + reason = "STATUS_INVALID_IMAGE_LE_FORMAT"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_IMAGE_NOT_MZ: + reason = "STATUS_INVALID_IMAGE_NOT_MZ"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_IMAGE_PROTECT: + reason = "STATUS_INVALID_IMAGE_PROTECT"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_IMAGE_WIN_16: + reason = "STATUS_INVALID_IMAGE_WIN_16"; + break; + case MD_NTSTATUS_WIN_STATUS_LOGON_SERVER_CONFLICT: + reason = "STATUS_LOGON_SERVER_CONFLICT"; + break; + case MD_NTSTATUS_WIN_STATUS_TIME_DIFFERENCE_AT_DC: + reason = "STATUS_TIME_DIFFERENCE_AT_DC"; + break; + case MD_NTSTATUS_WIN_STATUS_SYNCHRONIZATION_REQUIRED: + reason = "STATUS_SYNCHRONIZATION_REQUIRED"; + break; + case MD_NTSTATUS_WIN_STATUS_DLL_NOT_FOUND: + reason = "STATUS_DLL_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_OPEN_FAILED: + reason = "STATUS_OPEN_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_IO_PRIVILEGE_FAILED: + reason = "STATUS_IO_PRIVILEGE_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_ORDINAL_NOT_FOUND: + reason = "STATUS_ORDINAL_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_ENTRYPOINT_NOT_FOUND: + reason = "STATUS_ENTRYPOINT_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_CONTROL_C_EXIT: + reason = "STATUS_CONTROL_C_EXIT"; + break; + case MD_NTSTATUS_WIN_STATUS_LOCAL_DISCONNECT: + reason = "STATUS_LOCAL_DISCONNECT"; + break; + case MD_NTSTATUS_WIN_STATUS_REMOTE_DISCONNECT: + reason = "STATUS_REMOTE_DISCONNECT"; + break; + case MD_NTSTATUS_WIN_STATUS_REMOTE_RESOURCES: + reason = "STATUS_REMOTE_RESOURCES"; + break; + case MD_NTSTATUS_WIN_STATUS_LINK_FAILED: + reason = "STATUS_LINK_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_LINK_TIMEOUT: + reason = "STATUS_LINK_TIMEOUT"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_CONNECTION: + reason = "STATUS_INVALID_CONNECTION"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_ADDRESS: + reason = "STATUS_INVALID_ADDRESS"; + break; + case MD_NTSTATUS_WIN_STATUS_DLL_INIT_FAILED: + reason = "STATUS_DLL_INIT_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_MISSING_SYSTEMFILE: + reason = "STATUS_MISSING_SYSTEMFILE"; + break; + case MD_NTSTATUS_WIN_STATUS_UNHANDLED_EXCEPTION: + reason = "STATUS_UNHANDLED_EXCEPTION"; + break; + case MD_NTSTATUS_WIN_STATUS_APP_INIT_FAILURE: + reason = "STATUS_APP_INIT_FAILURE"; + break; + case MD_NTSTATUS_WIN_STATUS_PAGEFILE_CREATE_FAILED: + reason = "STATUS_PAGEFILE_CREATE_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_PAGEFILE: + reason = "STATUS_NO_PAGEFILE"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_LEVEL: + reason = "STATUS_INVALID_LEVEL"; + break; + case MD_NTSTATUS_WIN_STATUS_WRONG_PASSWORD_CORE: + reason = "STATUS_WRONG_PASSWORD_CORE"; + break; + case MD_NTSTATUS_WIN_STATUS_ILLEGAL_FLOAT_CONTEXT: + reason = "STATUS_ILLEGAL_FLOAT_CONTEXT"; + break; + case MD_NTSTATUS_WIN_STATUS_PIPE_BROKEN: + reason = "STATUS_PIPE_BROKEN"; + break; + case MD_NTSTATUS_WIN_STATUS_REGISTRY_CORRUPT: + reason = "STATUS_REGISTRY_CORRUPT"; + break; + case MD_NTSTATUS_WIN_STATUS_REGISTRY_IO_FAILED: + reason = "STATUS_REGISTRY_IO_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_EVENT_PAIR: + reason = "STATUS_NO_EVENT_PAIR"; + break; + case MD_NTSTATUS_WIN_STATUS_UNRECOGNIZED_VOLUME: + reason = "STATUS_UNRECOGNIZED_VOLUME"; + break; + case MD_NTSTATUS_WIN_STATUS_SERIAL_NO_DEVICE_INITED: + reason = "STATUS_SERIAL_NO_DEVICE_INITED"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_SUCH_ALIAS: + reason = "STATUS_NO_SUCH_ALIAS"; + break; + case MD_NTSTATUS_WIN_STATUS_MEMBER_NOT_IN_ALIAS: + reason = "STATUS_MEMBER_NOT_IN_ALIAS"; + break; + case MD_NTSTATUS_WIN_STATUS_MEMBER_IN_ALIAS: + reason = "STATUS_MEMBER_IN_ALIAS"; + break; + case MD_NTSTATUS_WIN_STATUS_ALIAS_EXISTS: + reason = "STATUS_ALIAS_EXISTS"; + break; + case MD_NTSTATUS_WIN_STATUS_LOGON_NOT_GRANTED: + reason = "STATUS_LOGON_NOT_GRANTED"; + break; + case MD_NTSTATUS_WIN_STATUS_TOO_MANY_SECRETS: + reason = "STATUS_TOO_MANY_SECRETS"; + break; + case MD_NTSTATUS_WIN_STATUS_SECRET_TOO_LONG: + reason = "STATUS_SECRET_TOO_LONG"; + break; + case MD_NTSTATUS_WIN_STATUS_INTERNAL_DB_ERROR: + reason = "STATUS_INTERNAL_DB_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_FULLSCREEN_MODE: + reason = "STATUS_FULLSCREEN_MODE"; + break; + case MD_NTSTATUS_WIN_STATUS_TOO_MANY_CONTEXT_IDS: + reason = "STATUS_TOO_MANY_CONTEXT_IDS"; + break; + case MD_NTSTATUS_WIN_STATUS_LOGON_TYPE_NOT_GRANTED: + reason = "STATUS_LOGON_TYPE_NOT_GRANTED"; + break; + case MD_NTSTATUS_WIN_STATUS_NOT_REGISTRY_FILE: + reason = "STATUS_NOT_REGISTRY_FILE"; + break; + case MD_NTSTATUS_WIN_STATUS_NT_CROSS_ENCRYPTION_REQUIRED: + reason = "STATUS_NT_CROSS_ENCRYPTION_REQUIRED"; + break; + case MD_NTSTATUS_WIN_STATUS_DOMAIN_CTRLR_CONFIG_ERROR: + reason = "STATUS_DOMAIN_CTRLR_CONFIG_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_FT_MISSING_MEMBER: + reason = "STATUS_FT_MISSING_MEMBER"; + break; + case MD_NTSTATUS_WIN_STATUS_ILL_FORMED_SERVICE_ENTRY: + reason = "STATUS_ILL_FORMED_SERVICE_ENTRY"; + break; + case MD_NTSTATUS_WIN_STATUS_ILLEGAL_CHARACTER: + reason = "STATUS_ILLEGAL_CHARACTER"; + break; + case MD_NTSTATUS_WIN_STATUS_UNMAPPABLE_CHARACTER: + reason = "STATUS_UNMAPPABLE_CHARACTER"; + break; + case MD_NTSTATUS_WIN_STATUS_UNDEFINED_CHARACTER: + reason = "STATUS_UNDEFINED_CHARACTER"; + break; + case MD_NTSTATUS_WIN_STATUS_FLOPPY_VOLUME: + reason = "STATUS_FLOPPY_VOLUME"; + break; + case MD_NTSTATUS_WIN_STATUS_FLOPPY_ID_MARK_NOT_FOUND: + reason = "STATUS_FLOPPY_ID_MARK_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_FLOPPY_WRONG_CYLINDER: + reason = "STATUS_FLOPPY_WRONG_CYLINDER"; + break; + case MD_NTSTATUS_WIN_STATUS_FLOPPY_UNKNOWN_ERROR: + reason = "STATUS_FLOPPY_UNKNOWN_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_FLOPPY_BAD_REGISTERS: + reason = "STATUS_FLOPPY_BAD_REGISTERS"; + break; + case MD_NTSTATUS_WIN_STATUS_DISK_RECALIBRATE_FAILED: + reason = "STATUS_DISK_RECALIBRATE_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_DISK_OPERATION_FAILED: + reason = "STATUS_DISK_OPERATION_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_DISK_RESET_FAILED: + reason = "STATUS_DISK_RESET_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_SHARED_IRQ_BUSY: + reason = "STATUS_SHARED_IRQ_BUSY"; + break; + case MD_NTSTATUS_WIN_STATUS_FT_ORPHANING: + reason = "STATUS_FT_ORPHANING"; + break; + case MD_NTSTATUS_WIN_STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT: + reason = "STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT"; + break; + case MD_NTSTATUS_WIN_STATUS_PARTITION_FAILURE: + reason = "STATUS_PARTITION_FAILURE"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_BLOCK_LENGTH: + reason = "STATUS_INVALID_BLOCK_LENGTH"; + break; + case MD_NTSTATUS_WIN_STATUS_DEVICE_NOT_PARTITIONED: + reason = "STATUS_DEVICE_NOT_PARTITIONED"; + break; + case MD_NTSTATUS_WIN_STATUS_UNABLE_TO_LOCK_MEDIA: + reason = "STATUS_UNABLE_TO_LOCK_MEDIA"; + break; + case MD_NTSTATUS_WIN_STATUS_UNABLE_TO_UNLOAD_MEDIA: + reason = "STATUS_UNABLE_TO_UNLOAD_MEDIA"; + break; + case MD_NTSTATUS_WIN_STATUS_EOM_OVERFLOW: + reason = "STATUS_EOM_OVERFLOW"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_MEDIA: + reason = "STATUS_NO_MEDIA"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_SUCH_MEMBER: + reason = "STATUS_NO_SUCH_MEMBER"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_MEMBER: + reason = "STATUS_INVALID_MEMBER"; + break; + case MD_NTSTATUS_WIN_STATUS_KEY_DELETED: + reason = "STATUS_KEY_DELETED"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_LOG_SPACE: + reason = "STATUS_NO_LOG_SPACE"; + break; + case MD_NTSTATUS_WIN_STATUS_TOO_MANY_SIDS: + reason = "STATUS_TOO_MANY_SIDS"; + break; + case MD_NTSTATUS_WIN_STATUS_LM_CROSS_ENCRYPTION_REQUIRED: + reason = "STATUS_LM_CROSS_ENCRYPTION_REQUIRED"; + break; + case MD_NTSTATUS_WIN_STATUS_KEY_HAS_CHILDREN: + reason = "STATUS_KEY_HAS_CHILDREN"; + break; + case MD_NTSTATUS_WIN_STATUS_CHILD_MUST_BE_VOLATILE: + reason = "STATUS_CHILD_MUST_BE_VOLATILE"; + break; + case MD_NTSTATUS_WIN_STATUS_DEVICE_CONFIGURATION_ERROR: + reason = "STATUS_DEVICE_CONFIGURATION_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_DRIVER_INTERNAL_ERROR: + reason = "STATUS_DRIVER_INTERNAL_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_DEVICE_STATE: + reason = "STATUS_INVALID_DEVICE_STATE"; + break; + case MD_NTSTATUS_WIN_STATUS_IO_DEVICE_ERROR: + reason = "STATUS_IO_DEVICE_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_DEVICE_PROTOCOL_ERROR: + reason = "STATUS_DEVICE_PROTOCOL_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_BACKUP_CONTROLLER: + reason = "STATUS_BACKUP_CONTROLLER"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_FILE_FULL: + reason = "STATUS_LOG_FILE_FULL"; + break; + case MD_NTSTATUS_WIN_STATUS_TOO_LATE: + reason = "STATUS_TOO_LATE"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_TRUST_LSA_SECRET: + reason = "STATUS_NO_TRUST_LSA_SECRET"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_TRUST_SAM_ACCOUNT: + reason = "STATUS_NO_TRUST_SAM_ACCOUNT"; + break; + case MD_NTSTATUS_WIN_STATUS_TRUSTED_DOMAIN_FAILURE: + reason = "STATUS_TRUSTED_DOMAIN_FAILURE"; + break; + case MD_NTSTATUS_WIN_STATUS_TRUSTED_RELATIONSHIP_FAILURE: + reason = "STATUS_TRUSTED_RELATIONSHIP_FAILURE"; + break; + case MD_NTSTATUS_WIN_STATUS_EVENTLOG_FILE_CORRUPT: + reason = "STATUS_EVENTLOG_FILE_CORRUPT"; + break; + case MD_NTSTATUS_WIN_STATUS_EVENTLOG_CANT_START: + reason = "STATUS_EVENTLOG_CANT_START"; + break; + case MD_NTSTATUS_WIN_STATUS_TRUST_FAILURE: + reason = "STATUS_TRUST_FAILURE"; + break; + case MD_NTSTATUS_WIN_STATUS_MUTANT_LIMIT_EXCEEDED: + reason = "STATUS_MUTANT_LIMIT_EXCEEDED"; + break; + case MD_NTSTATUS_WIN_STATUS_NETLOGON_NOT_STARTED: + reason = "STATUS_NETLOGON_NOT_STARTED"; + break; + case MD_NTSTATUS_WIN_STATUS_ACCOUNT_EXPIRED: + reason = "STATUS_ACCOUNT_EXPIRED"; + break; + case MD_NTSTATUS_WIN_STATUS_POSSIBLE_DEADLOCK: + reason = "STATUS_POSSIBLE_DEADLOCK"; + break; + case MD_NTSTATUS_WIN_STATUS_NETWORK_CREDENTIAL_CONFLICT: + reason = "STATUS_NETWORK_CREDENTIAL_CONFLICT"; + break; + case MD_NTSTATUS_WIN_STATUS_REMOTE_SESSION_LIMIT: + reason = "STATUS_REMOTE_SESSION_LIMIT"; + break; + case MD_NTSTATUS_WIN_STATUS_EVENTLOG_FILE_CHANGED: + reason = "STATUS_EVENTLOG_FILE_CHANGED"; + break; + case MD_NTSTATUS_WIN_STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT: + reason = "STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT"; + break; + case MD_NTSTATUS_WIN_STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT: + reason = "STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT"; + break; + case MD_NTSTATUS_WIN_STATUS_NOLOGON_SERVER_TRUST_ACCOUNT: + reason = "STATUS_NOLOGON_SERVER_TRUST_ACCOUNT"; + break; + case MD_NTSTATUS_WIN_STATUS_DOMAIN_TRUST_INCONSISTENT: + reason = "STATUS_DOMAIN_TRUST_INCONSISTENT"; + break; + case MD_NTSTATUS_WIN_STATUS_FS_DRIVER_REQUIRED: + reason = "STATUS_FS_DRIVER_REQUIRED"; + break; + case MD_NTSTATUS_WIN_STATUS_IMAGE_ALREADY_LOADED_AS_DLL: + reason = "STATUS_IMAGE_ALREADY_LOADED_AS_DLL"; + break; + case MD_NTSTATUS_WIN_STATUS_INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING: + reason = "STATUS_INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING"; + break; + case MD_NTSTATUS_WIN_STATUS_SHORT_NAMES_NOT_ENABLED_ON_VOLUME: + reason = "STATUS_SHORT_NAMES_NOT_ENABLED_ON_VOLUME"; + break; + case MD_NTSTATUS_WIN_STATUS_SECURITY_STREAM_IS_INCONSISTENT: + reason = "STATUS_SECURITY_STREAM_IS_INCONSISTENT"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_LOCK_RANGE: + reason = "STATUS_INVALID_LOCK_RANGE"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_ACE_CONDITION: + reason = "STATUS_INVALID_ACE_CONDITION"; + break; + case MD_NTSTATUS_WIN_STATUS_IMAGE_SUBSYSTEM_NOT_PRESENT: + reason = "STATUS_IMAGE_SUBSYSTEM_NOT_PRESENT"; + break; + case MD_NTSTATUS_WIN_STATUS_NOTIFICATION_GUID_ALREADY_DEFINED: + reason = "STATUS_NOTIFICATION_GUID_ALREADY_DEFINED"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_EXCEPTION_HANDLER: + reason = "STATUS_INVALID_EXCEPTION_HANDLER"; + break; + case MD_NTSTATUS_WIN_STATUS_DUPLICATE_PRIVILEGES: + reason = "STATUS_DUPLICATE_PRIVILEGES"; + break; + case MD_NTSTATUS_WIN_STATUS_NOT_ALLOWED_ON_SYSTEM_FILE: + reason = "STATUS_NOT_ALLOWED_ON_SYSTEM_FILE"; + break; + case MD_NTSTATUS_WIN_STATUS_REPAIR_NEEDED: + reason = "STATUS_REPAIR_NEEDED"; + break; + case MD_NTSTATUS_WIN_STATUS_QUOTA_NOT_ENABLED: + reason = "STATUS_QUOTA_NOT_ENABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_APPLICATION_PACKAGE: + reason = "STATUS_NO_APPLICATION_PACKAGE"; + break; + case MD_NTSTATUS_WIN_STATUS_NETWORK_OPEN_RESTRICTION: + reason = "STATUS_NETWORK_OPEN_RESTRICTION"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_USER_SESSION_KEY: + reason = "STATUS_NO_USER_SESSION_KEY"; + break; + case MD_NTSTATUS_WIN_STATUS_USER_SESSION_DELETED: + reason = "STATUS_USER_SESSION_DELETED"; + break; + case MD_NTSTATUS_WIN_STATUS_RESOURCE_LANG_NOT_FOUND: + reason = "STATUS_RESOURCE_LANG_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_INSUFF_SERVER_RESOURCES: + reason = "STATUS_INSUFF_SERVER_RESOURCES"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_BUFFER_SIZE: + reason = "STATUS_INVALID_BUFFER_SIZE"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_ADDRESS_COMPONENT: + reason = "STATUS_INVALID_ADDRESS_COMPONENT"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_ADDRESS_WILDCARD: + reason = "STATUS_INVALID_ADDRESS_WILDCARD"; + break; + case MD_NTSTATUS_WIN_STATUS_TOO_MANY_ADDRESSES: + reason = "STATUS_TOO_MANY_ADDRESSES"; + break; + case MD_NTSTATUS_WIN_STATUS_ADDRESS_ALREADY_EXISTS: + reason = "STATUS_ADDRESS_ALREADY_EXISTS"; + break; + case MD_NTSTATUS_WIN_STATUS_ADDRESS_CLOSED: + reason = "STATUS_ADDRESS_CLOSED"; + break; + case MD_NTSTATUS_WIN_STATUS_CONNECTION_DISCONNECTED: + reason = "STATUS_CONNECTION_DISCONNECTED"; + break; + case MD_NTSTATUS_WIN_STATUS_CONNECTION_RESET: + reason = "STATUS_CONNECTION_RESET"; + break; + case MD_NTSTATUS_WIN_STATUS_TOO_MANY_NODES: + reason = "STATUS_TOO_MANY_NODES"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTION_ABORTED: + reason = "STATUS_TRANSACTION_ABORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTION_TIMED_OUT: + reason = "STATUS_TRANSACTION_TIMED_OUT"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTION_NO_RELEASE: + reason = "STATUS_TRANSACTION_NO_RELEASE"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTION_NO_MATCH: + reason = "STATUS_TRANSACTION_NO_MATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTION_RESPONDED: + reason = "STATUS_TRANSACTION_RESPONDED"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTION_INVALID_ID: + reason = "STATUS_TRANSACTION_INVALID_ID"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTION_INVALID_TYPE: + reason = "STATUS_TRANSACTION_INVALID_TYPE"; + break; + case MD_NTSTATUS_WIN_STATUS_NOT_SERVER_SESSION: + reason = "STATUS_NOT_SERVER_SESSION"; + break; + case MD_NTSTATUS_WIN_STATUS_NOT_CLIENT_SESSION: + reason = "STATUS_NOT_CLIENT_SESSION"; + break; + case MD_NTSTATUS_WIN_STATUS_CANNOT_LOAD_REGISTRY_FILE: + reason = "STATUS_CANNOT_LOAD_REGISTRY_FILE"; + break; + case MD_NTSTATUS_WIN_STATUS_DEBUG_ATTACH_FAILED: + reason = "STATUS_DEBUG_ATTACH_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_SYSTEM_PROCESS_TERMINATED: + reason = "STATUS_SYSTEM_PROCESS_TERMINATED"; + break; + case MD_NTSTATUS_WIN_STATUS_DATA_NOT_ACCEPTED: + reason = "STATUS_DATA_NOT_ACCEPTED"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_BROWSER_SERVERS_FOUND: + reason = "STATUS_NO_BROWSER_SERVERS_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_VDM_HARD_ERROR: + reason = "STATUS_VDM_HARD_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_DRIVER_CANCEL_TIMEOUT: + reason = "STATUS_DRIVER_CANCEL_TIMEOUT"; + break; + case MD_NTSTATUS_WIN_STATUS_REPLY_MESSAGE_MISMATCH: + reason = "STATUS_REPLY_MESSAGE_MISMATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_MAPPED_ALIGNMENT: + reason = "STATUS_MAPPED_ALIGNMENT"; + break; + case MD_NTSTATUS_WIN_STATUS_IMAGE_CHECKSUM_MISMATCH: + reason = "STATUS_IMAGE_CHECKSUM_MISMATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_LOST_WRITEBEHIND_DATA: + reason = "STATUS_LOST_WRITEBEHIND_DATA"; + break; + case MD_NTSTATUS_WIN_STATUS_CLIENT_SERVER_PARAMETERS_INVALID: + reason = "STATUS_CLIENT_SERVER_PARAMETERS_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_PASSWORD_MUST_CHANGE: + reason = "STATUS_PASSWORD_MUST_CHANGE"; + break; + case MD_NTSTATUS_WIN_STATUS_NOT_FOUND: + reason = "STATUS_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_NOT_TINY_STREAM: + reason = "STATUS_NOT_TINY_STREAM"; + break; + case MD_NTSTATUS_WIN_STATUS_RECOVERY_FAILURE: + reason = "STATUS_RECOVERY_FAILURE"; + break; + case MD_NTSTATUS_WIN_STATUS_STACK_OVERFLOW_READ: + reason = "STATUS_STACK_OVERFLOW_READ"; + break; + case MD_NTSTATUS_WIN_STATUS_FAIL_CHECK: + reason = "STATUS_FAIL_CHECK"; + break; + case MD_NTSTATUS_WIN_STATUS_DUPLICATE_OBJECTID: + reason = "STATUS_DUPLICATE_OBJECTID"; + break; + case MD_NTSTATUS_WIN_STATUS_OBJECTID_EXISTS: + reason = "STATUS_OBJECTID_EXISTS"; + break; + case MD_NTSTATUS_WIN_STATUS_CONVERT_TO_LARGE: + reason = "STATUS_CONVERT_TO_LARGE"; + break; + case MD_NTSTATUS_WIN_STATUS_RETRY: + reason = "STATUS_RETRY"; + break; + case MD_NTSTATUS_WIN_STATUS_FOUND_OUT_OF_SCOPE: + reason = "STATUS_FOUND_OUT_OF_SCOPE"; + break; + case MD_NTSTATUS_WIN_STATUS_ALLOCATE_BUCKET: + reason = "STATUS_ALLOCATE_BUCKET"; + break; + case MD_NTSTATUS_WIN_STATUS_PROPSET_NOT_FOUND: + reason = "STATUS_PROPSET_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_MARSHALL_OVERFLOW: + reason = "STATUS_MARSHALL_OVERFLOW"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_VARIANT: + reason = "STATUS_INVALID_VARIANT"; + break; + case MD_NTSTATUS_WIN_STATUS_DOMAIN_CONTROLLER_NOT_FOUND: + reason = "STATUS_DOMAIN_CONTROLLER_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_ACCOUNT_LOCKED_OUT: + reason = "STATUS_ACCOUNT_LOCKED_OUT"; + break; + case MD_NTSTATUS_WIN_STATUS_HANDLE_NOT_CLOSABLE: + reason = "STATUS_HANDLE_NOT_CLOSABLE"; + break; + case MD_NTSTATUS_WIN_STATUS_CONNECTION_REFUSED: + reason = "STATUS_CONNECTION_REFUSED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRACEFUL_DISCONNECT: + reason = "STATUS_GRACEFUL_DISCONNECT"; + break; + case MD_NTSTATUS_WIN_STATUS_ADDRESS_ALREADY_ASSOCIATED: + reason = "STATUS_ADDRESS_ALREADY_ASSOCIATED"; + break; + case MD_NTSTATUS_WIN_STATUS_ADDRESS_NOT_ASSOCIATED: + reason = "STATUS_ADDRESS_NOT_ASSOCIATED"; + break; + case MD_NTSTATUS_WIN_STATUS_CONNECTION_INVALID: + reason = "STATUS_CONNECTION_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_CONNECTION_ACTIVE: + reason = "STATUS_CONNECTION_ACTIVE"; + break; + case MD_NTSTATUS_WIN_STATUS_NETWORK_UNREACHABLE: + reason = "STATUS_NETWORK_UNREACHABLE"; + break; + case MD_NTSTATUS_WIN_STATUS_HOST_UNREACHABLE: + reason = "STATUS_HOST_UNREACHABLE"; + break; + case MD_NTSTATUS_WIN_STATUS_PROTOCOL_UNREACHABLE: + reason = "STATUS_PROTOCOL_UNREACHABLE"; + break; + case MD_NTSTATUS_WIN_STATUS_PORT_UNREACHABLE: + reason = "STATUS_PORT_UNREACHABLE"; + break; + case MD_NTSTATUS_WIN_STATUS_REQUEST_ABORTED: + reason = "STATUS_REQUEST_ABORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_CONNECTION_ABORTED: + reason = "STATUS_CONNECTION_ABORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_BAD_COMPRESSION_BUFFER: + reason = "STATUS_BAD_COMPRESSION_BUFFER"; + break; + case MD_NTSTATUS_WIN_STATUS_USER_MAPPED_FILE: + reason = "STATUS_USER_MAPPED_FILE"; + break; + case MD_NTSTATUS_WIN_STATUS_AUDIT_FAILED: + reason = "STATUS_AUDIT_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_TIMER_RESOLUTION_NOT_SET: + reason = "STATUS_TIMER_RESOLUTION_NOT_SET"; + break; + case MD_NTSTATUS_WIN_STATUS_CONNECTION_COUNT_LIMIT: + reason = "STATUS_CONNECTION_COUNT_LIMIT"; + break; + case MD_NTSTATUS_WIN_STATUS_LOGIN_TIME_RESTRICTION: + reason = "STATUS_LOGIN_TIME_RESTRICTION"; + break; + case MD_NTSTATUS_WIN_STATUS_LOGIN_WKSTA_RESTRICTION: + reason = "STATUS_LOGIN_WKSTA_RESTRICTION"; + break; + case MD_NTSTATUS_WIN_STATUS_IMAGE_MP_UP_MISMATCH: + reason = "STATUS_IMAGE_MP_UP_MISMATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_INSUFFICIENT_LOGON_INFO: + reason = "STATUS_INSUFFICIENT_LOGON_INFO"; + break; + case MD_NTSTATUS_WIN_STATUS_BAD_DLL_ENTRYPOINT: + reason = "STATUS_BAD_DLL_ENTRYPOINT"; + break; + case MD_NTSTATUS_WIN_STATUS_BAD_SERVICE_ENTRYPOINT: + reason = "STATUS_BAD_SERVICE_ENTRYPOINT"; + break; + case MD_NTSTATUS_WIN_STATUS_LPC_REPLY_LOST: + reason = "STATUS_LPC_REPLY_LOST"; + break; + case MD_NTSTATUS_WIN_STATUS_IP_ADDRESS_CONFLICT1: + reason = "STATUS_IP_ADDRESS_CONFLICT1"; + break; + case MD_NTSTATUS_WIN_STATUS_IP_ADDRESS_CONFLICT2: + reason = "STATUS_IP_ADDRESS_CONFLICT2"; + break; + case MD_NTSTATUS_WIN_STATUS_REGISTRY_QUOTA_LIMIT: + reason = "STATUS_REGISTRY_QUOTA_LIMIT"; + break; + case MD_NTSTATUS_WIN_STATUS_PATH_NOT_COVERED: + reason = "STATUS_PATH_NOT_COVERED"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_CALLBACK_ACTIVE: + reason = "STATUS_NO_CALLBACK_ACTIVE"; + break; + case MD_NTSTATUS_WIN_STATUS_LICENSE_QUOTA_EXCEEDED: + reason = "STATUS_LICENSE_QUOTA_EXCEEDED"; + break; + case MD_NTSTATUS_WIN_STATUS_PWD_TOO_SHORT: + reason = "STATUS_PWD_TOO_SHORT"; + break; + case MD_NTSTATUS_WIN_STATUS_PWD_TOO_RECENT: + reason = "STATUS_PWD_TOO_RECENT"; + break; + case MD_NTSTATUS_WIN_STATUS_PWD_HISTORY_CONFLICT: + reason = "STATUS_PWD_HISTORY_CONFLICT"; + break; + case MD_NTSTATUS_WIN_STATUS_PLUGPLAY_NO_DEVICE: + reason = "STATUS_PLUGPLAY_NO_DEVICE"; + break; + case MD_NTSTATUS_WIN_STATUS_UNSUPPORTED_COMPRESSION: + reason = "STATUS_UNSUPPORTED_COMPRESSION"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_HW_PROFILE: + reason = "STATUS_INVALID_HW_PROFILE"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_PLUGPLAY_DEVICE_PATH: + reason = "STATUS_INVALID_PLUGPLAY_DEVICE_PATH"; + break; + case MD_NTSTATUS_WIN_STATUS_DRIVER_ORDINAL_NOT_FOUND: + reason = "STATUS_DRIVER_ORDINAL_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_DRIVER_ENTRYPOINT_NOT_FOUND: + reason = "STATUS_DRIVER_ENTRYPOINT_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_RESOURCE_NOT_OWNED: + reason = "STATUS_RESOURCE_NOT_OWNED"; + break; + case MD_NTSTATUS_WIN_STATUS_TOO_MANY_LINKS: + reason = "STATUS_TOO_MANY_LINKS"; + break; + case MD_NTSTATUS_WIN_STATUS_QUOTA_LIST_INCONSISTENT: + reason = "STATUS_QUOTA_LIST_INCONSISTENT"; + break; + case MD_NTSTATUS_WIN_STATUS_FILE_IS_OFFLINE: + reason = "STATUS_FILE_IS_OFFLINE"; + break; + case MD_NTSTATUS_WIN_STATUS_EVALUATION_EXPIRATION: + reason = "STATUS_EVALUATION_EXPIRATION"; + break; + case MD_NTSTATUS_WIN_STATUS_ILLEGAL_DLL_RELOCATION: + reason = "STATUS_ILLEGAL_DLL_RELOCATION"; + break; + case MD_NTSTATUS_WIN_STATUS_LICENSE_VIOLATION: + reason = "STATUS_LICENSE_VIOLATION"; + break; + case MD_NTSTATUS_WIN_STATUS_DLL_INIT_FAILED_LOGOFF: + reason = "STATUS_DLL_INIT_FAILED_LOGOFF"; + break; + case MD_NTSTATUS_WIN_STATUS_DRIVER_UNABLE_TO_LOAD: + reason = "STATUS_DRIVER_UNABLE_TO_LOAD"; + break; + case MD_NTSTATUS_WIN_STATUS_DFS_UNAVAILABLE: + reason = "STATUS_DFS_UNAVAILABLE"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLUME_DISMOUNTED: + reason = "STATUS_VOLUME_DISMOUNTED"; + break; + case MD_NTSTATUS_WIN_STATUS_WX86_INTERNAL_ERROR: + reason = "STATUS_WX86_INTERNAL_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_WX86_FLOAT_STACK_CHECK: + reason = "STATUS_WX86_FLOAT_STACK_CHECK"; + break; + case MD_NTSTATUS_WIN_STATUS_VALIDATE_CONTINUE: + reason = "STATUS_VALIDATE_CONTINUE"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_MATCH: + reason = "STATUS_NO_MATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_MORE_MATCHES: + reason = "STATUS_NO_MORE_MATCHES"; + break; + case MD_NTSTATUS_WIN_STATUS_NOT_A_REPARSE_POINT: + reason = "STATUS_NOT_A_REPARSE_POINT"; + break; + case MD_NTSTATUS_WIN_STATUS_IO_REPARSE_TAG_INVALID: + reason = "STATUS_IO_REPARSE_TAG_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_IO_REPARSE_TAG_MISMATCH: + reason = "STATUS_IO_REPARSE_TAG_MISMATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_IO_REPARSE_DATA_INVALID: + reason = "STATUS_IO_REPARSE_DATA_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_IO_REPARSE_TAG_NOT_HANDLED: + reason = "STATUS_IO_REPARSE_TAG_NOT_HANDLED"; + break; + case MD_NTSTATUS_WIN_STATUS_PWD_TOO_LONG: + reason = "STATUS_PWD_TOO_LONG"; + break; + case MD_NTSTATUS_WIN_STATUS_STOWED_EXCEPTION: + reason = "STATUS_STOWED_EXCEPTION"; + break; + case MD_NTSTATUS_WIN_STATUS_REPARSE_POINT_NOT_RESOLVED: + reason = "STATUS_REPARSE_POINT_NOT_RESOLVED"; + break; + case MD_NTSTATUS_WIN_STATUS_DIRECTORY_IS_A_REPARSE_POINT: + reason = "STATUS_DIRECTORY_IS_A_REPARSE_POINT"; + break; + case MD_NTSTATUS_WIN_STATUS_RANGE_LIST_CONFLICT: + reason = "STATUS_RANGE_LIST_CONFLICT"; + break; + case MD_NTSTATUS_WIN_STATUS_SOURCE_ELEMENT_EMPTY: + reason = "STATUS_SOURCE_ELEMENT_EMPTY"; + break; + case MD_NTSTATUS_WIN_STATUS_DESTINATION_ELEMENT_FULL: + reason = "STATUS_DESTINATION_ELEMENT_FULL"; + break; + case MD_NTSTATUS_WIN_STATUS_ILLEGAL_ELEMENT_ADDRESS: + reason = "STATUS_ILLEGAL_ELEMENT_ADDRESS"; + break; + case MD_NTSTATUS_WIN_STATUS_MAGAZINE_NOT_PRESENT: + reason = "STATUS_MAGAZINE_NOT_PRESENT"; + break; + case MD_NTSTATUS_WIN_STATUS_REINITIALIZATION_NEEDED: + reason = "STATUS_REINITIALIZATION_NEEDED"; + break; + case MD_NTSTATUS_WIN_STATUS_ENCRYPTION_FAILED: + reason = "STATUS_ENCRYPTION_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_DECRYPTION_FAILED: + reason = "STATUS_DECRYPTION_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_RANGE_NOT_FOUND: + reason = "STATUS_RANGE_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_RECOVERY_POLICY: + reason = "STATUS_NO_RECOVERY_POLICY"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_EFS: + reason = "STATUS_NO_EFS"; + break; + case MD_NTSTATUS_WIN_STATUS_WRONG_EFS: + reason = "STATUS_WRONG_EFS"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_USER_KEYS: + reason = "STATUS_NO_USER_KEYS"; + break; + case MD_NTSTATUS_WIN_STATUS_FILE_NOT_ENCRYPTED: + reason = "STATUS_FILE_NOT_ENCRYPTED"; + break; + case MD_NTSTATUS_WIN_STATUS_NOT_EXPORT_FORMAT: + reason = "STATUS_NOT_EXPORT_FORMAT"; + break; + case MD_NTSTATUS_WIN_STATUS_FILE_ENCRYPTED: + reason = "STATUS_FILE_ENCRYPTED"; + break; + case MD_NTSTATUS_WIN_STATUS_WMI_GUID_NOT_FOUND: + reason = "STATUS_WMI_GUID_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_WMI_INSTANCE_NOT_FOUND: + reason = "STATUS_WMI_INSTANCE_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_WMI_ITEMID_NOT_FOUND: + reason = "STATUS_WMI_ITEMID_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_WMI_TRY_AGAIN: + reason = "STATUS_WMI_TRY_AGAIN"; + break; + case MD_NTSTATUS_WIN_STATUS_SHARED_POLICY: + reason = "STATUS_SHARED_POLICY"; + break; + case MD_NTSTATUS_WIN_STATUS_POLICY_OBJECT_NOT_FOUND: + reason = "STATUS_POLICY_OBJECT_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_POLICY_ONLY_IN_DS: + reason = "STATUS_POLICY_ONLY_IN_DS"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLUME_NOT_UPGRADED: + reason = "STATUS_VOLUME_NOT_UPGRADED"; + break; + case MD_NTSTATUS_WIN_STATUS_REMOTE_STORAGE_NOT_ACTIVE: + reason = "STATUS_REMOTE_STORAGE_NOT_ACTIVE"; + break; + case MD_NTSTATUS_WIN_STATUS_REMOTE_STORAGE_MEDIA_ERROR: + reason = "STATUS_REMOTE_STORAGE_MEDIA_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_TRACKING_SERVICE: + reason = "STATUS_NO_TRACKING_SERVICE"; + break; + case MD_NTSTATUS_WIN_STATUS_SERVER_SID_MISMATCH: + reason = "STATUS_SERVER_SID_MISMATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_NO_ATTRIBUTE_OR_VALUE: + reason = "STATUS_DS_NO_ATTRIBUTE_OR_VALUE"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_INVALID_ATTRIBUTE_SYNTAX: + reason = "STATUS_DS_INVALID_ATTRIBUTE_SYNTAX"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_ATTRIBUTE_TYPE_UNDEFINED: + reason = "STATUS_DS_ATTRIBUTE_TYPE_UNDEFINED"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_ATTRIBUTE_OR_VALUE_EXISTS: + reason = "STATUS_DS_ATTRIBUTE_OR_VALUE_EXISTS"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_BUSY: + reason = "STATUS_DS_BUSY"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_UNAVAILABLE: + reason = "STATUS_DS_UNAVAILABLE"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_NO_RIDS_ALLOCATED: + reason = "STATUS_DS_NO_RIDS_ALLOCATED"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_NO_MORE_RIDS: + reason = "STATUS_DS_NO_MORE_RIDS"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_INCORRECT_ROLE_OWNER: + reason = "STATUS_DS_INCORRECT_ROLE_OWNER"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_RIDMGR_INIT_ERROR: + reason = "STATUS_DS_RIDMGR_INIT_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_OBJ_CLASS_VIOLATION: + reason = "STATUS_DS_OBJ_CLASS_VIOLATION"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_CANT_ON_NON_LEAF: + reason = "STATUS_DS_CANT_ON_NON_LEAF"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_CANT_ON_RDN: + reason = "STATUS_DS_CANT_ON_RDN"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_CANT_MOD_OBJ_CLASS: + reason = "STATUS_DS_CANT_MOD_OBJ_CLASS"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_CROSS_DOM_MOVE_FAILED: + reason = "STATUS_DS_CROSS_DOM_MOVE_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_GC_NOT_AVAILABLE: + reason = "STATUS_DS_GC_NOT_AVAILABLE"; + break; + case MD_NTSTATUS_WIN_STATUS_DIRECTORY_SERVICE_REQUIRED: + reason = "STATUS_DIRECTORY_SERVICE_REQUIRED"; + break; + case MD_NTSTATUS_WIN_STATUS_REPARSE_ATTRIBUTE_CONFLICT: + reason = "STATUS_REPARSE_ATTRIBUTE_CONFLICT"; + break; + case MD_NTSTATUS_WIN_STATUS_CANT_ENABLE_DENY_ONLY: + reason = "STATUS_CANT_ENABLE_DENY_ONLY"; + break; + case MD_NTSTATUS_WIN_STATUS_FLOAT_MULTIPLE_FAULTS: + reason = "STATUS_FLOAT_MULTIPLE_FAULTS"; + break; + case MD_NTSTATUS_WIN_STATUS_FLOAT_MULTIPLE_TRAPS: + reason = "STATUS_FLOAT_MULTIPLE_TRAPS"; + break; + case MD_NTSTATUS_WIN_STATUS_DEVICE_REMOVED: + reason = "STATUS_DEVICE_REMOVED"; + break; + case MD_NTSTATUS_WIN_STATUS_JOURNAL_DELETE_IN_PROGRESS: + reason = "STATUS_JOURNAL_DELETE_IN_PROGRESS"; + break; + case MD_NTSTATUS_WIN_STATUS_JOURNAL_NOT_ACTIVE: + reason = "STATUS_JOURNAL_NOT_ACTIVE"; + break; + case MD_NTSTATUS_WIN_STATUS_NOINTERFACE: + reason = "STATUS_NOINTERFACE"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_RIDMGR_DISABLED: + reason = "STATUS_DS_RIDMGR_DISABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_ADMIN_LIMIT_EXCEEDED: + reason = "STATUS_DS_ADMIN_LIMIT_EXCEEDED"; + break; + case MD_NTSTATUS_WIN_STATUS_DRIVER_FAILED_SLEEP: + reason = "STATUS_DRIVER_FAILED_SLEEP"; + break; + case MD_NTSTATUS_WIN_STATUS_MUTUAL_AUTHENTICATION_FAILED: + reason = "STATUS_MUTUAL_AUTHENTICATION_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_CORRUPT_SYSTEM_FILE: + reason = "STATUS_CORRUPT_SYSTEM_FILE"; + break; + case MD_NTSTATUS_WIN_STATUS_DATATYPE_MISALIGNMENT_ERROR: + reason = "STATUS_DATATYPE_MISALIGNMENT_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_WMI_READ_ONLY: + reason = "STATUS_WMI_READ_ONLY"; + break; + case MD_NTSTATUS_WIN_STATUS_WMI_SET_FAILURE: + reason = "STATUS_WMI_SET_FAILURE"; + break; + case MD_NTSTATUS_WIN_STATUS_COMMITMENT_MINIMUM: + reason = "STATUS_COMMITMENT_MINIMUM"; + break; + case MD_NTSTATUS_WIN_STATUS_REG_NAT_CONSUMPTION: + reason = "STATUS_REG_NAT_CONSUMPTION"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSPORT_FULL: + reason = "STATUS_TRANSPORT_FULL"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_SAM_INIT_FAILURE: + reason = "STATUS_DS_SAM_INIT_FAILURE"; + break; + case MD_NTSTATUS_WIN_STATUS_ONLY_IF_CONNECTED: + reason = "STATUS_ONLY_IF_CONNECTED"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_SENSITIVE_GROUP_VIOLATION: + reason = "STATUS_DS_SENSITIVE_GROUP_VIOLATION"; + break; + case MD_NTSTATUS_WIN_STATUS_PNP_RESTART_ENUMERATION: + reason = "STATUS_PNP_RESTART_ENUMERATION"; + break; + case MD_NTSTATUS_WIN_STATUS_JOURNAL_ENTRY_DELETED: + reason = "STATUS_JOURNAL_ENTRY_DELETED"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_CANT_MOD_PRIMARYGROUPID: + reason = "STATUS_DS_CANT_MOD_PRIMARYGROUPID"; + break; + case MD_NTSTATUS_WIN_STATUS_SYSTEM_IMAGE_BAD_SIGNATURE: + reason = "STATUS_SYSTEM_IMAGE_BAD_SIGNATURE"; + break; + case MD_NTSTATUS_WIN_STATUS_PNP_REBOOT_REQUIRED: + reason = "STATUS_PNP_REBOOT_REQUIRED"; + break; + case MD_NTSTATUS_WIN_STATUS_POWER_STATE_INVALID: + reason = "STATUS_POWER_STATE_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_INVALID_GROUP_TYPE: + reason = "STATUS_DS_INVALID_GROUP_TYPE"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN: + reason = "STATUS_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN: + reason = "STATUS_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER: + reason = "STATUS_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER: + reason = "STATUS_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER: + reason = "STATUS_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER: + reason = "STATUS_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER: + reason = "STATUS_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_HAVE_PRIMARY_MEMBERS: + reason = "STATUS_DS_HAVE_PRIMARY_MEMBERS"; + break; + case MD_NTSTATUS_WIN_STATUS_WMI_NOT_SUPPORTED: + reason = "STATUS_WMI_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_INSUFFICIENT_POWER: + reason = "STATUS_INSUFFICIENT_POWER"; + break; + case MD_NTSTATUS_WIN_STATUS_SAM_NEED_BOOTKEY_PASSWORD: + reason = "STATUS_SAM_NEED_BOOTKEY_PASSWORD"; + break; + case MD_NTSTATUS_WIN_STATUS_SAM_NEED_BOOTKEY_FLOPPY: + reason = "STATUS_SAM_NEED_BOOTKEY_FLOPPY"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_CANT_START: + reason = "STATUS_DS_CANT_START"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_INIT_FAILURE: + reason = "STATUS_DS_INIT_FAILURE"; + break; + case MD_NTSTATUS_WIN_STATUS_SAM_INIT_FAILURE: + reason = "STATUS_SAM_INIT_FAILURE"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_GC_REQUIRED: + reason = "STATUS_DS_GC_REQUIRED"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_LOCAL_MEMBER_OF_LOCAL_ONLY: + reason = "STATUS_DS_LOCAL_MEMBER_OF_LOCAL_ONLY"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_NO_FPO_IN_UNIVERSAL_GROUPS: + reason = "STATUS_DS_NO_FPO_IN_UNIVERSAL_GROUPS"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED: + reason = "STATUS_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED"; + break; + case MD_NTSTATUS_WIN_STATUS_MULTIPLE_FAULT_VIOLATION: + reason = "STATUS_MULTIPLE_FAULT_VIOLATION"; + break; + case MD_NTSTATUS_WIN_STATUS_CURRENT_DOMAIN_NOT_ALLOWED: + reason = "STATUS_CURRENT_DOMAIN_NOT_ALLOWED"; + break; + case MD_NTSTATUS_WIN_STATUS_CANNOT_MAKE: + reason = "STATUS_CANNOT_MAKE"; + break; + case MD_NTSTATUS_WIN_STATUS_SYSTEM_SHUTDOWN: + reason = "STATUS_SYSTEM_SHUTDOWN"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_INIT_FAILURE_CONSOLE: + reason = "STATUS_DS_INIT_FAILURE_CONSOLE"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_SAM_INIT_FAILURE_CONSOLE: + reason = "STATUS_DS_SAM_INIT_FAILURE_CONSOLE"; + break; + case MD_NTSTATUS_WIN_STATUS_UNFINISHED_CONTEXT_DELETED: + reason = "STATUS_UNFINISHED_CONTEXT_DELETED"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_TGT_REPLY: + reason = "STATUS_NO_TGT_REPLY"; + break; + case MD_NTSTATUS_WIN_STATUS_OBJECTID_NOT_FOUND: + reason = "STATUS_OBJECTID_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_IP_ADDRESSES: + reason = "STATUS_NO_IP_ADDRESSES"; + break; + case MD_NTSTATUS_WIN_STATUS_WRONG_CREDENTIAL_HANDLE: + reason = "STATUS_WRONG_CREDENTIAL_HANDLE"; + break; + case MD_NTSTATUS_WIN_STATUS_CRYPTO_SYSTEM_INVALID: + reason = "STATUS_CRYPTO_SYSTEM_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_MAX_REFERRALS_EXCEEDED: + reason = "STATUS_MAX_REFERRALS_EXCEEDED"; + break; + case MD_NTSTATUS_WIN_STATUS_MUST_BE_KDC: + reason = "STATUS_MUST_BE_KDC"; + break; + case MD_NTSTATUS_WIN_STATUS_STRONG_CRYPTO_NOT_SUPPORTED: + reason = "STATUS_STRONG_CRYPTO_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_TOO_MANY_PRINCIPALS: + reason = "STATUS_TOO_MANY_PRINCIPALS"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_PA_DATA: + reason = "STATUS_NO_PA_DATA"; + break; + case MD_NTSTATUS_WIN_STATUS_PKINIT_NAME_MISMATCH: + reason = "STATUS_PKINIT_NAME_MISMATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_SMARTCARD_LOGON_REQUIRED: + reason = "STATUS_SMARTCARD_LOGON_REQUIRED"; + break; + case MD_NTSTATUS_WIN_STATUS_KDC_INVALID_REQUEST: + reason = "STATUS_KDC_INVALID_REQUEST"; + break; + case MD_NTSTATUS_WIN_STATUS_KDC_UNABLE_TO_REFER: + reason = "STATUS_KDC_UNABLE_TO_REFER"; + break; + case MD_NTSTATUS_WIN_STATUS_KDC_UNKNOWN_ETYPE: + reason = "STATUS_KDC_UNKNOWN_ETYPE"; + break; + case MD_NTSTATUS_WIN_STATUS_SHUTDOWN_IN_PROGRESS: + reason = "STATUS_SHUTDOWN_IN_PROGRESS"; + break; + case MD_NTSTATUS_WIN_STATUS_SERVER_SHUTDOWN_IN_PROGRESS: + reason = "STATUS_SERVER_SHUTDOWN_IN_PROGRESS"; + break; + case MD_NTSTATUS_WIN_STATUS_NOT_SUPPORTED_ON_SBS: + reason = "STATUS_NOT_SUPPORTED_ON_SBS"; + break; + case MD_NTSTATUS_WIN_STATUS_WMI_GUID_DISCONNECTED: + reason = "STATUS_WMI_GUID_DISCONNECTED"; + break; + case MD_NTSTATUS_WIN_STATUS_WMI_ALREADY_DISABLED: + reason = "STATUS_WMI_ALREADY_DISABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_WMI_ALREADY_ENABLED: + reason = "STATUS_WMI_ALREADY_ENABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_MFT_TOO_FRAGMENTED: + reason = "STATUS_MFT_TOO_FRAGMENTED"; + break; + case MD_NTSTATUS_WIN_STATUS_COPY_PROTECTION_FAILURE: + reason = "STATUS_COPY_PROTECTION_FAILURE"; + break; + case MD_NTSTATUS_WIN_STATUS_CSS_AUTHENTICATION_FAILURE: + reason = "STATUS_CSS_AUTHENTICATION_FAILURE"; + break; + case MD_NTSTATUS_WIN_STATUS_CSS_KEY_NOT_PRESENT: + reason = "STATUS_CSS_KEY_NOT_PRESENT"; + break; + case MD_NTSTATUS_WIN_STATUS_CSS_KEY_NOT_ESTABLISHED: + reason = "STATUS_CSS_KEY_NOT_ESTABLISHED"; + break; + case MD_NTSTATUS_WIN_STATUS_CSS_SCRAMBLED_SECTOR: + reason = "STATUS_CSS_SCRAMBLED_SECTOR"; + break; + case MD_NTSTATUS_WIN_STATUS_CSS_REGION_MISMATCH: + reason = "STATUS_CSS_REGION_MISMATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_CSS_RESETS_EXHAUSTED: + reason = "STATUS_CSS_RESETS_EXHAUSTED"; + break; + case MD_NTSTATUS_WIN_STATUS_PASSWORD_CHANGE_REQUIRED: + reason = "STATUS_PASSWORD_CHANGE_REQUIRED"; + break; + case MD_NTSTATUS_WIN_STATUS_PKINIT_FAILURE: + reason = "STATUS_PKINIT_FAILURE"; + break; + case MD_NTSTATUS_WIN_STATUS_SMARTCARD_SUBSYSTEM_FAILURE: + reason = "STATUS_SMARTCARD_SUBSYSTEM_FAILURE"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_KERB_KEY: + reason = "STATUS_NO_KERB_KEY"; + break; + case MD_NTSTATUS_WIN_STATUS_HOST_DOWN: + reason = "STATUS_HOST_DOWN"; + break; + case MD_NTSTATUS_WIN_STATUS_UNSUPPORTED_PREAUTH: + reason = "STATUS_UNSUPPORTED_PREAUTH"; + break; + case MD_NTSTATUS_WIN_STATUS_EFS_ALG_BLOB_TOO_BIG: + reason = "STATUS_EFS_ALG_BLOB_TOO_BIG"; + break; + case MD_NTSTATUS_WIN_STATUS_PORT_NOT_SET: + reason = "STATUS_PORT_NOT_SET"; + break; + case MD_NTSTATUS_WIN_STATUS_DEBUGGER_INACTIVE: + reason = "STATUS_DEBUGGER_INACTIVE"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_VERSION_CHECK_FAILURE: + reason = "STATUS_DS_VERSION_CHECK_FAILURE"; + break; + case MD_NTSTATUS_WIN_STATUS_AUDITING_DISABLED: + reason = "STATUS_AUDITING_DISABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_PRENT4_MACHINE_ACCOUNT: + reason = "STATUS_PRENT4_MACHINE_ACCOUNT"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER: + reason = "STATUS_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_IMAGE_WIN_32: + reason = "STATUS_INVALID_IMAGE_WIN_32"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_IMAGE_WIN_64: + reason = "STATUS_INVALID_IMAGE_WIN_64"; + break; + case MD_NTSTATUS_WIN_STATUS_BAD_BINDINGS: + reason = "STATUS_BAD_BINDINGS"; + break; + case MD_NTSTATUS_WIN_STATUS_NETWORK_SESSION_EXPIRED: + reason = "STATUS_NETWORK_SESSION_EXPIRED"; + break; + case MD_NTSTATUS_WIN_STATUS_APPHELP_BLOCK: + reason = "STATUS_APPHELP_BLOCK"; + break; + case MD_NTSTATUS_WIN_STATUS_ALL_SIDS_FILTERED: + reason = "STATUS_ALL_SIDS_FILTERED"; + break; + case MD_NTSTATUS_WIN_STATUS_NOT_SAFE_MODE_DRIVER: + reason = "STATUS_NOT_SAFE_MODE_DRIVER"; + break; + case MD_NTSTATUS_WIN_STATUS_ACCESS_DISABLED_BY_POLICY_DEFAULT: + reason = "STATUS_ACCESS_DISABLED_BY_POLICY_DEFAULT"; + break; + case MD_NTSTATUS_WIN_STATUS_ACCESS_DISABLED_BY_POLICY_PATH: + reason = "STATUS_ACCESS_DISABLED_BY_POLICY_PATH"; + break; + case MD_NTSTATUS_WIN_STATUS_ACCESS_DISABLED_BY_POLICY_PUBLISHER: + reason = "STATUS_ACCESS_DISABLED_BY_POLICY_PUBLISHER"; + break; + case MD_NTSTATUS_WIN_STATUS_ACCESS_DISABLED_BY_POLICY_OTHER: + reason = "STATUS_ACCESS_DISABLED_BY_POLICY_OTHER"; + break; + case MD_NTSTATUS_WIN_STATUS_FAILED_DRIVER_ENTRY: + reason = "STATUS_FAILED_DRIVER_ENTRY"; + break; + case MD_NTSTATUS_WIN_STATUS_DEVICE_ENUMERATION_ERROR: + reason = "STATUS_DEVICE_ENUMERATION_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_MOUNT_POINT_NOT_RESOLVED: + reason = "STATUS_MOUNT_POINT_NOT_RESOLVED"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_DEVICE_OBJECT_PARAMETER: + reason = "STATUS_INVALID_DEVICE_OBJECT_PARAMETER"; + break; + case MD_NTSTATUS_WIN_STATUS_MCA_OCCURED: + reason = "STATUS_MCA_OCCURED"; + break; + case MD_NTSTATUS_WIN_STATUS_DRIVER_BLOCKED_CRITICAL: + reason = "STATUS_DRIVER_BLOCKED_CRITICAL"; + break; + case MD_NTSTATUS_WIN_STATUS_DRIVER_BLOCKED: + reason = "STATUS_DRIVER_BLOCKED"; + break; + case MD_NTSTATUS_WIN_STATUS_DRIVER_DATABASE_ERROR: + reason = "STATUS_DRIVER_DATABASE_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_SYSTEM_HIVE_TOO_LARGE: + reason = "STATUS_SYSTEM_HIVE_TOO_LARGE"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_IMPORT_OF_NON_DLL: + reason = "STATUS_INVALID_IMPORT_OF_NON_DLL"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_SECRETS: + reason = "STATUS_NO_SECRETS"; + break; + case MD_NTSTATUS_WIN_STATUS_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY: + reason = "STATUS_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY"; + break; + case MD_NTSTATUS_WIN_STATUS_FAILED_STACK_SWITCH: + reason = "STATUS_FAILED_STACK_SWITCH"; + break; + case MD_NTSTATUS_WIN_STATUS_HEAP_CORRUPTION: + reason = "STATUS_HEAP_CORRUPTION"; + break; + case MD_NTSTATUS_WIN_STATUS_SMARTCARD_WRONG_PIN: + reason = "STATUS_SMARTCARD_WRONG_PIN"; + break; + case MD_NTSTATUS_WIN_STATUS_SMARTCARD_CARD_BLOCKED: + reason = "STATUS_SMARTCARD_CARD_BLOCKED"; + break; + case MD_NTSTATUS_WIN_STATUS_SMARTCARD_CARD_NOT_AUTHENTICATED: + reason = "STATUS_SMARTCARD_CARD_NOT_AUTHENTICATED"; + break; + case MD_NTSTATUS_WIN_STATUS_SMARTCARD_NO_CARD: + reason = "STATUS_SMARTCARD_NO_CARD"; + break; + case MD_NTSTATUS_WIN_STATUS_SMARTCARD_NO_KEY_CONTAINER: + reason = "STATUS_SMARTCARD_NO_KEY_CONTAINER"; + break; + case MD_NTSTATUS_WIN_STATUS_SMARTCARD_NO_CERTIFICATE: + reason = "STATUS_SMARTCARD_NO_CERTIFICATE"; + break; + case MD_NTSTATUS_WIN_STATUS_SMARTCARD_NO_KEYSET: + reason = "STATUS_SMARTCARD_NO_KEYSET"; + break; + case MD_NTSTATUS_WIN_STATUS_SMARTCARD_IO_ERROR: + reason = "STATUS_SMARTCARD_IO_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_DOWNGRADE_DETECTED: + reason = "STATUS_DOWNGRADE_DETECTED"; + break; + case MD_NTSTATUS_WIN_STATUS_SMARTCARD_CERT_REVOKED: + reason = "STATUS_SMARTCARD_CERT_REVOKED"; + break; + case MD_NTSTATUS_WIN_STATUS_ISSUING_CA_UNTRUSTED: + reason = "STATUS_ISSUING_CA_UNTRUSTED"; + break; + case MD_NTSTATUS_WIN_STATUS_REVOCATION_OFFLINE_C: + reason = "STATUS_REVOCATION_OFFLINE_C"; + break; + case MD_NTSTATUS_WIN_STATUS_PKINIT_CLIENT_FAILURE: + reason = "STATUS_PKINIT_CLIENT_FAILURE"; + break; + case MD_NTSTATUS_WIN_STATUS_SMARTCARD_CERT_EXPIRED: + reason = "STATUS_SMARTCARD_CERT_EXPIRED"; + break; + case MD_NTSTATUS_WIN_STATUS_DRIVER_FAILED_PRIOR_UNLOAD: + reason = "STATUS_DRIVER_FAILED_PRIOR_UNLOAD"; + break; + case MD_NTSTATUS_WIN_STATUS_SMARTCARD_SILENT_CONTEXT: + reason = "STATUS_SMARTCARD_SILENT_CONTEXT"; + break; + case MD_NTSTATUS_WIN_STATUS_PER_USER_TRUST_QUOTA_EXCEEDED: + reason = "STATUS_PER_USER_TRUST_QUOTA_EXCEEDED"; + break; + case MD_NTSTATUS_WIN_STATUS_ALL_USER_TRUST_QUOTA_EXCEEDED: + reason = "STATUS_ALL_USER_TRUST_QUOTA_EXCEEDED"; + break; + case MD_NTSTATUS_WIN_STATUS_USER_DELETE_TRUST_QUOTA_EXCEEDED: + reason = "STATUS_USER_DELETE_TRUST_QUOTA_EXCEEDED"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_NAME_NOT_UNIQUE: + reason = "STATUS_DS_NAME_NOT_UNIQUE"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_DUPLICATE_ID_FOUND: + reason = "STATUS_DS_DUPLICATE_ID_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_GROUP_CONVERSION_ERROR: + reason = "STATUS_DS_GROUP_CONVERSION_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLSNAP_PREPARE_HIBERNATE: + reason = "STATUS_VOLSNAP_PREPARE_HIBERNATE"; + break; + case MD_NTSTATUS_WIN_STATUS_USER2USER_REQUIRED: + reason = "STATUS_USER2USER_REQUIRED"; + break; + case MD_NTSTATUS_WIN_STATUS_STACK_BUFFER_OVERRUN: + reason = "STATUS_STACK_BUFFER_OVERRUN"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_S4U_PROT_SUPPORT: + reason = "STATUS_NO_S4U_PROT_SUPPORT"; + break; + case MD_NTSTATUS_WIN_STATUS_CROSSREALM_DELEGATION_FAILURE: + reason = "STATUS_CROSSREALM_DELEGATION_FAILURE"; + break; + case MD_NTSTATUS_WIN_STATUS_REVOCATION_OFFLINE_KDC: + reason = "STATUS_REVOCATION_OFFLINE_KDC"; + break; + case MD_NTSTATUS_WIN_STATUS_ISSUING_CA_UNTRUSTED_KDC: + reason = "STATUS_ISSUING_CA_UNTRUSTED_KDC"; + break; + case MD_NTSTATUS_WIN_STATUS_KDC_CERT_EXPIRED: + reason = "STATUS_KDC_CERT_EXPIRED"; + break; + case MD_NTSTATUS_WIN_STATUS_KDC_CERT_REVOKED: + reason = "STATUS_KDC_CERT_REVOKED"; + break; + case MD_NTSTATUS_WIN_STATUS_PARAMETER_QUOTA_EXCEEDED: + reason = "STATUS_PARAMETER_QUOTA_EXCEEDED"; + break; + case MD_NTSTATUS_WIN_STATUS_HIBERNATION_FAILURE: + reason = "STATUS_HIBERNATION_FAILURE"; + break; + case MD_NTSTATUS_WIN_STATUS_DELAY_LOAD_FAILED: + reason = "STATUS_DELAY_LOAD_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_AUTHENTICATION_FIREWALL_FAILED: + reason = "STATUS_AUTHENTICATION_FIREWALL_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_VDM_DISALLOWED: + reason = "STATUS_VDM_DISALLOWED"; + break; + case MD_NTSTATUS_WIN_STATUS_HUNG_DISPLAY_DRIVER_THREAD: + reason = "STATUS_HUNG_DISPLAY_DRIVER_THREAD"; + break; + case MD_NTSTATUS_WIN_STATUS_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE: + reason = "STATUS_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_CRUNTIME_PARAMETER: + reason = "STATUS_INVALID_CRUNTIME_PARAMETER"; + break; + case MD_NTSTATUS_WIN_STATUS_NTLM_BLOCKED: + reason = "STATUS_NTLM_BLOCKED"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_SRC_SID_EXISTS_IN_FOREST: + reason = "STATUS_DS_SRC_SID_EXISTS_IN_FOREST"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_DOMAIN_NAME_EXISTS_IN_FOREST: + reason = "STATUS_DS_DOMAIN_NAME_EXISTS_IN_FOREST"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_FLAT_NAME_EXISTS_IN_FOREST: + reason = "STATUS_DS_FLAT_NAME_EXISTS_IN_FOREST"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_USER_PRINCIPAL_NAME: + reason = "STATUS_INVALID_USER_PRINCIPAL_NAME"; + break; + case MD_NTSTATUS_WIN_STATUS_FATAL_USER_CALLBACK_EXCEPTION: + reason = "STATUS_FATAL_USER_CALLBACK_EXCEPTION"; + break; + case MD_NTSTATUS_WIN_STATUS_ASSERTION_FAILURE: + reason = "STATUS_ASSERTION_FAILURE"; + break; + case MD_NTSTATUS_WIN_STATUS_VERIFIER_STOP: + reason = "STATUS_VERIFIER_STOP"; + break; + case MD_NTSTATUS_WIN_STATUS_CALLBACK_POP_STACK: + reason = "STATUS_CALLBACK_POP_STACK"; + break; + case MD_NTSTATUS_WIN_STATUS_INCOMPATIBLE_DRIVER_BLOCKED: + reason = "STATUS_INCOMPATIBLE_DRIVER_BLOCKED"; + break; + case MD_NTSTATUS_WIN_STATUS_HIVE_UNLOADED: + reason = "STATUS_HIVE_UNLOADED"; + break; + case MD_NTSTATUS_WIN_STATUS_COMPRESSION_DISABLED: + reason = "STATUS_COMPRESSION_DISABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_FILE_SYSTEM_LIMITATION: + reason = "STATUS_FILE_SYSTEM_LIMITATION"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_IMAGE_HASH: + reason = "STATUS_INVALID_IMAGE_HASH"; + break; + case MD_NTSTATUS_WIN_STATUS_NOT_CAPABLE: + reason = "STATUS_NOT_CAPABLE"; + break; + case MD_NTSTATUS_WIN_STATUS_REQUEST_OUT_OF_SEQUENCE: + reason = "STATUS_REQUEST_OUT_OF_SEQUENCE"; + break; + case MD_NTSTATUS_WIN_STATUS_IMPLEMENTATION_LIMIT: + reason = "STATUS_IMPLEMENTATION_LIMIT"; + break; + case MD_NTSTATUS_WIN_STATUS_ELEVATION_REQUIRED: + reason = "STATUS_ELEVATION_REQUIRED"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_SECURITY_CONTEXT: + reason = "STATUS_NO_SECURITY_CONTEXT"; + break; + case MD_NTSTATUS_WIN_STATUS_PKU2U_CERT_FAILURE: + reason = "STATUS_PKU2U_CERT_FAILURE"; + break; + case MD_NTSTATUS_WIN_STATUS_BEYOND_VDL: + reason = "STATUS_BEYOND_VDL"; + break; + case MD_NTSTATUS_WIN_STATUS_ENCOUNTERED_WRITE_IN_PROGRESS: + reason = "STATUS_ENCOUNTERED_WRITE_IN_PROGRESS"; + break; + case MD_NTSTATUS_WIN_STATUS_PTE_CHANGED: + reason = "STATUS_PTE_CHANGED"; + break; + case MD_NTSTATUS_WIN_STATUS_PURGE_FAILED: + reason = "STATUS_PURGE_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_CRED_REQUIRES_CONFIRMATION: + reason = "STATUS_CRED_REQUIRES_CONFIRMATION"; + break; + case MD_NTSTATUS_WIN_STATUS_CS_ENCRYPTION_INVALID_SERVER_RESPONSE: + reason = "STATUS_CS_ENCRYPTION_INVALID_SERVER_RESPONSE"; + break; + case MD_NTSTATUS_WIN_STATUS_CS_ENCRYPTION_UNSUPPORTED_SERVER: + reason = "STATUS_CS_ENCRYPTION_UNSUPPORTED_SERVER"; + break; + case MD_NTSTATUS_WIN_STATUS_CS_ENCRYPTION_EXISTING_ENCRYPTED_FILE: + reason = "STATUS_CS_ENCRYPTION_EXISTING_ENCRYPTED_FILE"; + break; + case MD_NTSTATUS_WIN_STATUS_CS_ENCRYPTION_NEW_ENCRYPTED_FILE: + reason = "STATUS_CS_ENCRYPTION_NEW_ENCRYPTED_FILE"; + break; + case MD_NTSTATUS_WIN_STATUS_CS_ENCRYPTION_FILE_NOT_CSE: + reason = "STATUS_CS_ENCRYPTION_FILE_NOT_CSE"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_LABEL: + reason = "STATUS_INVALID_LABEL"; + break; + case MD_NTSTATUS_WIN_STATUS_DRIVER_PROCESS_TERMINATED: + reason = "STATUS_DRIVER_PROCESS_TERMINATED"; + break; + case MD_NTSTATUS_WIN_STATUS_AMBIGUOUS_SYSTEM_DEVICE: + reason = "STATUS_AMBIGUOUS_SYSTEM_DEVICE"; + break; + case MD_NTSTATUS_WIN_STATUS_SYSTEM_DEVICE_NOT_FOUND: + reason = "STATUS_SYSTEM_DEVICE_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_RESTART_BOOT_APPLICATION: + reason = "STATUS_RESTART_BOOT_APPLICATION"; + break; + case MD_NTSTATUS_WIN_STATUS_INSUFFICIENT_NVRAM_RESOURCES: + reason = "STATUS_INSUFFICIENT_NVRAM_RESOURCES"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_SESSION: + reason = "STATUS_INVALID_SESSION"; + break; + case MD_NTSTATUS_WIN_STATUS_THREAD_ALREADY_IN_SESSION: + reason = "STATUS_THREAD_ALREADY_IN_SESSION"; + break; + case MD_NTSTATUS_WIN_STATUS_THREAD_NOT_IN_SESSION: + reason = "STATUS_THREAD_NOT_IN_SESSION"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_WEIGHT: + reason = "STATUS_INVALID_WEIGHT"; + break; + case MD_NTSTATUS_WIN_STATUS_REQUEST_PAUSED: + reason = "STATUS_REQUEST_PAUSED"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_RANGES_PROCESSED: + reason = "STATUS_NO_RANGES_PROCESSED"; + break; + case MD_NTSTATUS_WIN_STATUS_DISK_RESOURCES_EXHAUSTED: + reason = "STATUS_DISK_RESOURCES_EXHAUSTED"; + break; + case MD_NTSTATUS_WIN_STATUS_NEEDS_REMEDIATION: + reason = "STATUS_NEEDS_REMEDIATION"; + break; + case MD_NTSTATUS_WIN_STATUS_DEVICE_FEATURE_NOT_SUPPORTED: + reason = "STATUS_DEVICE_FEATURE_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_DEVICE_UNREACHABLE: + reason = "STATUS_DEVICE_UNREACHABLE"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_TOKEN: + reason = "STATUS_INVALID_TOKEN"; + break; + case MD_NTSTATUS_WIN_STATUS_SERVER_UNAVAILABLE: + reason = "STATUS_SERVER_UNAVAILABLE"; + break; + case MD_NTSTATUS_WIN_STATUS_FILE_NOT_AVAILABLE: + reason = "STATUS_FILE_NOT_AVAILABLE"; + break; + case MD_NTSTATUS_WIN_STATUS_DEVICE_INSUFFICIENT_RESOURCES: + reason = "STATUS_DEVICE_INSUFFICIENT_RESOURCES"; + break; + case MD_NTSTATUS_WIN_STATUS_PACKAGE_UPDATING: + reason = "STATUS_PACKAGE_UPDATING"; + break; + case MD_NTSTATUS_WIN_STATUS_NOT_READ_FROM_COPY: + reason = "STATUS_NOT_READ_FROM_COPY"; + break; + case MD_NTSTATUS_WIN_STATUS_FT_WRITE_FAILURE: + reason = "STATUS_FT_WRITE_FAILURE"; + break; + case MD_NTSTATUS_WIN_STATUS_FT_DI_SCAN_REQUIRED: + reason = "STATUS_FT_DI_SCAN_REQUIRED"; + break; + case MD_NTSTATUS_WIN_STATUS_OBJECT_NOT_EXTERNALLY_BACKED: + reason = "STATUS_OBJECT_NOT_EXTERNALLY_BACKED"; + break; + case MD_NTSTATUS_WIN_STATUS_EXTERNAL_BACKING_PROVIDER_UNKNOWN: + reason = "STATUS_EXTERNAL_BACKING_PROVIDER_UNKNOWN"; + break; + case MD_NTSTATUS_WIN_STATUS_DATA_CHECKSUM_ERROR: + reason = "STATUS_DATA_CHECKSUM_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_INTERMIXED_KERNEL_EA_OPERATION: + reason = "STATUS_INTERMIXED_KERNEL_EA_OPERATION"; + break; + case MD_NTSTATUS_WIN_STATUS_TRIM_READ_ZERO_NOT_SUPPORTED: + reason = "STATUS_TRIM_READ_ZERO_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_TOO_MANY_SEGMENT_DESCRIPTORS: + reason = "STATUS_TOO_MANY_SEGMENT_DESCRIPTORS"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_OFFSET_ALIGNMENT: + reason = "STATUS_INVALID_OFFSET_ALIGNMENT"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_FIELD_IN_PARAMETER_LIST: + reason = "STATUS_INVALID_FIELD_IN_PARAMETER_LIST"; + break; + case MD_NTSTATUS_WIN_STATUS_OPERATION_IN_PROGRESS: + reason = "STATUS_OPERATION_IN_PROGRESS"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_INITIATOR_TARGET_PATH: + reason = "STATUS_INVALID_INITIATOR_TARGET_PATH"; + break; + case MD_NTSTATUS_WIN_STATUS_SCRUB_DATA_DISABLED: + reason = "STATUS_SCRUB_DATA_DISABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_NOT_REDUNDANT_STORAGE: + reason = "STATUS_NOT_REDUNDANT_STORAGE"; + break; + case MD_NTSTATUS_WIN_STATUS_RESIDENT_FILE_NOT_SUPPORTED: + reason = "STATUS_RESIDENT_FILE_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_COMPRESSED_FILE_NOT_SUPPORTED: + reason = "STATUS_COMPRESSED_FILE_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_DIRECTORY_NOT_SUPPORTED: + reason = "STATUS_DIRECTORY_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_IO_OPERATION_TIMEOUT: + reason = "STATUS_IO_OPERATION_TIMEOUT"; + break; + case MD_NTSTATUS_WIN_STATUS_SYSTEM_NEEDS_REMEDIATION: + reason = "STATUS_SYSTEM_NEEDS_REMEDIATION"; + break; + case MD_NTSTATUS_WIN_STATUS_APPX_INTEGRITY_FAILURE_CLR_NGEN: + reason = "STATUS_APPX_INTEGRITY_FAILURE_CLR_NGEN"; + break; + case MD_NTSTATUS_WIN_STATUS_SHARE_UNAVAILABLE: + reason = "STATUS_SHARE_UNAVAILABLE"; + break; + case MD_NTSTATUS_WIN_STATUS_APISET_NOT_HOSTED: + reason = "STATUS_APISET_NOT_HOSTED"; + break; + case MD_NTSTATUS_WIN_STATUS_APISET_NOT_PRESENT: + reason = "STATUS_APISET_NOT_PRESENT"; + break; + case MD_NTSTATUS_WIN_STATUS_DEVICE_HARDWARE_ERROR: + reason = "STATUS_DEVICE_HARDWARE_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_TASK_NAME: + reason = "STATUS_INVALID_TASK_NAME"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_TASK_INDEX: + reason = "STATUS_INVALID_TASK_INDEX"; + break; + case MD_NTSTATUS_WIN_STATUS_THREAD_ALREADY_IN_TASK: + reason = "STATUS_THREAD_ALREADY_IN_TASK"; + break; + case MD_NTSTATUS_WIN_STATUS_CALLBACK_BYPASS: + reason = "STATUS_CALLBACK_BYPASS"; + break; + case MD_NTSTATUS_WIN_STATUS_UNDEFINED_SCOPE: + reason = "STATUS_UNDEFINED_SCOPE"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_CAP: + reason = "STATUS_INVALID_CAP"; + break; + case MD_NTSTATUS_WIN_STATUS_NOT_GUI_PROCESS: + reason = "STATUS_NOT_GUI_PROCESS"; + break; + case MD_NTSTATUS_WIN_STATUS_FAIL_FAST_EXCEPTION: + reason = "STATUS_FAIL_FAST_EXCEPTION"; + break; + case MD_NTSTATUS_WIN_STATUS_IMAGE_CERT_REVOKED: + reason = "STATUS_IMAGE_CERT_REVOKED"; + break; + case MD_NTSTATUS_WIN_STATUS_DYNAMIC_CODE_BLOCKED: + reason = "STATUS_DYNAMIC_CODE_BLOCKED"; + break; + case MD_NTSTATUS_WIN_STATUS_PORT_CLOSED: + reason = "STATUS_PORT_CLOSED"; + break; + case MD_NTSTATUS_WIN_STATUS_MESSAGE_LOST: + reason = "STATUS_MESSAGE_LOST"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_MESSAGE: + reason = "STATUS_INVALID_MESSAGE"; + break; + case MD_NTSTATUS_WIN_STATUS_REQUEST_CANCELED: + reason = "STATUS_REQUEST_CANCELED"; + break; + case MD_NTSTATUS_WIN_STATUS_RECURSIVE_DISPATCH: + reason = "STATUS_RECURSIVE_DISPATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_LPC_RECEIVE_BUFFER_EXPECTED: + reason = "STATUS_LPC_RECEIVE_BUFFER_EXPECTED"; + break; + case MD_NTSTATUS_WIN_STATUS_LPC_INVALID_CONNECTION_USAGE: + reason = "STATUS_LPC_INVALID_CONNECTION_USAGE"; + break; + case MD_NTSTATUS_WIN_STATUS_LPC_REQUESTS_NOT_ALLOWED: + reason = "STATUS_LPC_REQUESTS_NOT_ALLOWED"; + break; + case MD_NTSTATUS_WIN_STATUS_RESOURCE_IN_USE: + reason = "STATUS_RESOURCE_IN_USE"; + break; + case MD_NTSTATUS_WIN_STATUS_HARDWARE_MEMORY_ERROR: + reason = "STATUS_HARDWARE_MEMORY_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_THREADPOOL_HANDLE_EXCEPTION: + reason = "STATUS_THREADPOOL_HANDLE_EXCEPTION"; + break; + case MD_NTSTATUS_WIN_STATUS_THREADPOOL_SET_EVENT_ON_COMPLETION_FAILED: + reason = "STATUS_THREADPOOL_SET_EVENT_ON_COMPLETION_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_THREADPOOL_RELEASE_SEMAPHORE_ON_COMPLETION_FAILED: + reason = "STATUS_THREADPOOL_RELEASE_SEMAPHORE_ON_COMPLETION_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_THREADPOOL_RELEASE_MUTEX_ON_COMPLETION_FAILED: + reason = "STATUS_THREADPOOL_RELEASE_MUTEX_ON_COMPLETION_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_THREADPOOL_FREE_LIBRARY_ON_COMPLETION_FAILED: + reason = "STATUS_THREADPOOL_FREE_LIBRARY_ON_COMPLETION_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_THREADPOOL_RELEASED_DURING_OPERATION: + reason = "STATUS_THREADPOOL_RELEASED_DURING_OPERATION"; + break; + case MD_NTSTATUS_WIN_STATUS_CALLBACK_RETURNED_WHILE_IMPERSONATING: + reason = "STATUS_CALLBACK_RETURNED_WHILE_IMPERSONATING"; + break; + case MD_NTSTATUS_WIN_STATUS_APC_RETURNED_WHILE_IMPERSONATING: + reason = "STATUS_APC_RETURNED_WHILE_IMPERSONATING"; + break; + case MD_NTSTATUS_WIN_STATUS_PROCESS_IS_PROTECTED: + reason = "STATUS_PROCESS_IS_PROTECTED"; + break; + case MD_NTSTATUS_WIN_STATUS_MCA_EXCEPTION: + reason = "STATUS_MCA_EXCEPTION"; + break; + case MD_NTSTATUS_WIN_STATUS_CERTIFICATE_MAPPING_NOT_UNIQUE: + reason = "STATUS_CERTIFICATE_MAPPING_NOT_UNIQUE"; + break; + case MD_NTSTATUS_WIN_STATUS_SYMLINK_CLASS_DISABLED: + reason = "STATUS_SYMLINK_CLASS_DISABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_IDN_NORMALIZATION: + reason = "STATUS_INVALID_IDN_NORMALIZATION"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_UNICODE_TRANSLATION: + reason = "STATUS_NO_UNICODE_TRANSLATION"; + break; + case MD_NTSTATUS_WIN_STATUS_ALREADY_REGISTERED: + reason = "STATUS_ALREADY_REGISTERED"; + break; + case MD_NTSTATUS_WIN_STATUS_CONTEXT_MISMATCH: + reason = "STATUS_CONTEXT_MISMATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_PORT_ALREADY_HAS_COMPLETION_LIST: + reason = "STATUS_PORT_ALREADY_HAS_COMPLETION_LIST"; + break; + case MD_NTSTATUS_WIN_STATUS_CALLBACK_RETURNED_THREAD_PRIORITY: + reason = "STATUS_CALLBACK_RETURNED_THREAD_PRIORITY"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_THREAD: + reason = "STATUS_INVALID_THREAD"; + break; + case MD_NTSTATUS_WIN_STATUS_CALLBACK_RETURNED_TRANSACTION: + reason = "STATUS_CALLBACK_RETURNED_TRANSACTION"; + break; + case MD_NTSTATUS_WIN_STATUS_CALLBACK_RETURNED_LDR_LOCK: + reason = "STATUS_CALLBACK_RETURNED_LDR_LOCK"; + break; + case MD_NTSTATUS_WIN_STATUS_CALLBACK_RETURNED_LANG: + reason = "STATUS_CALLBACK_RETURNED_LANG"; + break; + case MD_NTSTATUS_WIN_STATUS_CALLBACK_RETURNED_PRI_BACK: + reason = "STATUS_CALLBACK_RETURNED_PRI_BACK"; + break; + case MD_NTSTATUS_WIN_STATUS_CALLBACK_RETURNED_THREAD_AFFINITY: + reason = "STATUS_CALLBACK_RETURNED_THREAD_AFFINITY"; + break; + case MD_NTSTATUS_WIN_STATUS_DISK_REPAIR_DISABLED: + reason = "STATUS_DISK_REPAIR_DISABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_DOMAIN_RENAME_IN_PROGRESS: + reason = "STATUS_DS_DOMAIN_RENAME_IN_PROGRESS"; + break; + case MD_NTSTATUS_WIN_STATUS_DISK_QUOTA_EXCEEDED: + reason = "STATUS_DISK_QUOTA_EXCEEDED"; + break; + case MD_NTSTATUS_WIN_STATUS_CONTENT_BLOCKED: + reason = "STATUS_CONTENT_BLOCKED"; + break; + case MD_NTSTATUS_WIN_STATUS_BAD_CLUSTERS: + reason = "STATUS_BAD_CLUSTERS"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLUME_DIRTY: + reason = "STATUS_VOLUME_DIRTY"; + break; + case MD_NTSTATUS_WIN_STATUS_DISK_REPAIR_UNSUCCESSFUL: + reason = "STATUS_DISK_REPAIR_UNSUCCESSFUL"; + break; + case MD_NTSTATUS_WIN_STATUS_CORRUPT_LOG_OVERFULL: + reason = "STATUS_CORRUPT_LOG_OVERFULL"; + break; + case MD_NTSTATUS_WIN_STATUS_CORRUPT_LOG_CORRUPTED: + reason = "STATUS_CORRUPT_LOG_CORRUPTED"; + break; + case MD_NTSTATUS_WIN_STATUS_CORRUPT_LOG_UNAVAILABLE: + reason = "STATUS_CORRUPT_LOG_UNAVAILABLE"; + break; + case MD_NTSTATUS_WIN_STATUS_CORRUPT_LOG_DELETED_FULL: + reason = "STATUS_CORRUPT_LOG_DELETED_FULL"; + break; + case MD_NTSTATUS_WIN_STATUS_CORRUPT_LOG_CLEARED: + reason = "STATUS_CORRUPT_LOG_CLEARED"; + break; + case MD_NTSTATUS_WIN_STATUS_ORPHAN_NAME_EXHAUSTED: + reason = "STATUS_ORPHAN_NAME_EXHAUSTED"; + break; + case MD_NTSTATUS_WIN_STATUS_PROACTIVE_SCAN_IN_PROGRESS: + reason = "STATUS_PROACTIVE_SCAN_IN_PROGRESS"; + break; + case MD_NTSTATUS_WIN_STATUS_ENCRYPTED_IO_NOT_POSSIBLE: + reason = "STATUS_ENCRYPTED_IO_NOT_POSSIBLE"; + break; + case MD_NTSTATUS_WIN_STATUS_CORRUPT_LOG_UPLEVEL_RECORDS: + reason = "STATUS_CORRUPT_LOG_UPLEVEL_RECORDS"; + break; + case MD_NTSTATUS_WIN_STATUS_FILE_CHECKED_OUT: + reason = "STATUS_FILE_CHECKED_OUT"; + break; + case MD_NTSTATUS_WIN_STATUS_CHECKOUT_REQUIRED: + reason = "STATUS_CHECKOUT_REQUIRED"; + break; + case MD_NTSTATUS_WIN_STATUS_BAD_FILE_TYPE: + reason = "STATUS_BAD_FILE_TYPE"; + break; + case MD_NTSTATUS_WIN_STATUS_FILE_TOO_LARGE: + reason = "STATUS_FILE_TOO_LARGE"; + break; + case MD_NTSTATUS_WIN_STATUS_FORMS_AUTH_REQUIRED: + reason = "STATUS_FORMS_AUTH_REQUIRED"; + break; + case MD_NTSTATUS_WIN_STATUS_VIRUS_INFECTED: + reason = "STATUS_VIRUS_INFECTED"; + break; + case MD_NTSTATUS_WIN_STATUS_VIRUS_DELETED: + reason = "STATUS_VIRUS_DELETED"; + break; + case MD_NTSTATUS_WIN_STATUS_BAD_MCFG_TABLE: + reason = "STATUS_BAD_MCFG_TABLE"; + break; + case MD_NTSTATUS_WIN_STATUS_CANNOT_BREAK_OPLOCK: + reason = "STATUS_CANNOT_BREAK_OPLOCK"; + break; + case MD_NTSTATUS_WIN_STATUS_BAD_KEY: + reason = "STATUS_BAD_KEY"; + break; + case MD_NTSTATUS_WIN_STATUS_BAD_DATA: + reason = "STATUS_BAD_DATA"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_KEY: + reason = "STATUS_NO_KEY"; + break; + case MD_NTSTATUS_WIN_STATUS_FILE_HANDLE_REVOKED: + reason = "STATUS_FILE_HANDLE_REVOKED"; + break; + case MD_NTSTATUS_WIN_STATUS_WOW_ASSERTION: + reason = "STATUS_WOW_ASSERTION"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_SIGNATURE: + reason = "STATUS_INVALID_SIGNATURE"; + break; + case MD_NTSTATUS_WIN_STATUS_HMAC_NOT_SUPPORTED: + reason = "STATUS_HMAC_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_AUTH_TAG_MISMATCH: + reason = "STATUS_AUTH_TAG_MISMATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_STATE_TRANSITION: + reason = "STATUS_INVALID_STATE_TRANSITION"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_KERNEL_INFO_VERSION: + reason = "STATUS_INVALID_KERNEL_INFO_VERSION"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_PEP_INFO_VERSION: + reason = "STATUS_INVALID_PEP_INFO_VERSION"; + break; + case MD_NTSTATUS_WIN_STATUS_IPSEC_QUEUE_OVERFLOW: + reason = "STATUS_IPSEC_QUEUE_OVERFLOW"; + break; + case MD_NTSTATUS_WIN_STATUS_ND_QUEUE_OVERFLOW: + reason = "STATUS_ND_QUEUE_OVERFLOW"; + break; + case MD_NTSTATUS_WIN_STATUS_HOPLIMIT_EXCEEDED: + reason = "STATUS_HOPLIMIT_EXCEEDED"; + break; + case MD_NTSTATUS_WIN_STATUS_PROTOCOL_NOT_SUPPORTED: + reason = "STATUS_PROTOCOL_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_FASTPATH_REJECTED: + reason = "STATUS_FASTPATH_REJECTED"; + break; + case MD_NTSTATUS_WIN_STATUS_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED: + reason = "STATUS_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED"; + break; + case MD_NTSTATUS_WIN_STATUS_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR: + reason = "STATUS_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR: + reason = "STATUS_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_XML_PARSE_ERROR: + reason = "STATUS_XML_PARSE_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_XMLDSIG_ERROR: + reason = "STATUS_XMLDSIG_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_WRONG_COMPARTMENT: + reason = "STATUS_WRONG_COMPARTMENT"; + break; + case MD_NTSTATUS_WIN_STATUS_AUTHIP_FAILURE: + reason = "STATUS_AUTHIP_FAILURE"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_OID_MAPPED_GROUP_CANT_HAVE_MEMBERS: + reason = "STATUS_DS_OID_MAPPED_GROUP_CANT_HAVE_MEMBERS"; + break; + case MD_NTSTATUS_WIN_STATUS_DS_OID_NOT_FOUND: + reason = "STATUS_DS_OID_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_INCORRECT_ACCOUNT_TYPE: + reason = "STATUS_INCORRECT_ACCOUNT_TYPE"; + break; + case MD_NTSTATUS_WIN_STATUS_HASH_NOT_SUPPORTED: + reason = "STATUS_HASH_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_HASH_NOT_PRESENT: + reason = "STATUS_HASH_NOT_PRESENT"; + break; + case MD_NTSTATUS_WIN_STATUS_SECONDARY_IC_PROVIDER_NOT_REGISTERED: + reason = "STATUS_SECONDARY_IC_PROVIDER_NOT_REGISTERED"; + break; + case MD_NTSTATUS_WIN_STATUS_GPIO_CLIENT_INFORMATION_INVALID: + reason = "STATUS_GPIO_CLIENT_INFORMATION_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_GPIO_VERSION_NOT_SUPPORTED: + reason = "STATUS_GPIO_VERSION_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_GPIO_INVALID_REGISTRATION_PACKET: + reason = "STATUS_GPIO_INVALID_REGISTRATION_PACKET"; + break; + case MD_NTSTATUS_WIN_STATUS_GPIO_OPERATION_DENIED: + reason = "STATUS_GPIO_OPERATION_DENIED"; + break; + case MD_NTSTATUS_WIN_STATUS_GPIO_INCOMPATIBLE_CONNECT_MODE: + reason = "STATUS_GPIO_INCOMPATIBLE_CONNECT_MODE"; + break; + case MD_NTSTATUS_WIN_STATUS_CANNOT_SWITCH_RUNLEVEL: + reason = "STATUS_CANNOT_SWITCH_RUNLEVEL"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_RUNLEVEL_SETTING: + reason = "STATUS_INVALID_RUNLEVEL_SETTING"; + break; + case MD_NTSTATUS_WIN_STATUS_RUNLEVEL_SWITCH_TIMEOUT: + reason = "STATUS_RUNLEVEL_SWITCH_TIMEOUT"; + break; + case MD_NTSTATUS_WIN_STATUS_RUNLEVEL_SWITCH_AGENT_TIMEOUT: + reason = "STATUS_RUNLEVEL_SWITCH_AGENT_TIMEOUT"; + break; + case MD_NTSTATUS_WIN_STATUS_RUNLEVEL_SWITCH_IN_PROGRESS: + reason = "STATUS_RUNLEVEL_SWITCH_IN_PROGRESS"; + break; + case MD_NTSTATUS_WIN_STATUS_NOT_APPCONTAINER: + reason = "STATUS_NOT_APPCONTAINER"; + break; + case MD_NTSTATUS_WIN_STATUS_NOT_SUPPORTED_IN_APPCONTAINER: + reason = "STATUS_NOT_SUPPORTED_IN_APPCONTAINER"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_PACKAGE_SID_LENGTH: + reason = "STATUS_INVALID_PACKAGE_SID_LENGTH"; + break; + case MD_NTSTATUS_WIN_STATUS_APP_DATA_NOT_FOUND: + reason = "STATUS_APP_DATA_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_APP_DATA_EXPIRED: + reason = "STATUS_APP_DATA_EXPIRED"; + break; + case MD_NTSTATUS_WIN_STATUS_APP_DATA_CORRUPT: + reason = "STATUS_APP_DATA_CORRUPT"; + break; + case MD_NTSTATUS_WIN_STATUS_APP_DATA_LIMIT_EXCEEDED: + reason = "STATUS_APP_DATA_LIMIT_EXCEEDED"; + break; + case MD_NTSTATUS_WIN_STATUS_APP_DATA_REBOOT_REQUIRED: + reason = "STATUS_APP_DATA_REBOOT_REQUIRED"; + break; + case MD_NTSTATUS_WIN_STATUS_OFFLOAD_READ_FLT_NOT_SUPPORTED: + reason = "STATUS_OFFLOAD_READ_FLT_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_OFFLOAD_WRITE_FLT_NOT_SUPPORTED: + reason = "STATUS_OFFLOAD_WRITE_FLT_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_OFFLOAD_READ_FILE_NOT_SUPPORTED: + reason = "STATUS_OFFLOAD_READ_FILE_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_OFFLOAD_WRITE_FILE_NOT_SUPPORTED: + reason = "STATUS_OFFLOAD_WRITE_FILE_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_DBG_NO_STATE_CHANGE: + reason = "DBG_NO_STATE_CHANGE"; + break; + case MD_NTSTATUS_WIN_DBG_APP_NOT_IDLE: + reason = "DBG_APP_NOT_IDLE"; + break; + case MD_NTSTATUS_WIN_RPC_NT_INVALID_STRING_BINDING: + reason = "RPC_NT_INVALID_STRING_BINDING"; + break; + case MD_NTSTATUS_WIN_RPC_NT_WRONG_KIND_OF_BINDING: + reason = "RPC_NT_WRONG_KIND_OF_BINDING"; + break; + case MD_NTSTATUS_WIN_RPC_NT_INVALID_BINDING: + reason = "RPC_NT_INVALID_BINDING"; + break; + case MD_NTSTATUS_WIN_RPC_NT_PROTSEQ_NOT_SUPPORTED: + reason = "RPC_NT_PROTSEQ_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_RPC_NT_INVALID_RPC_PROTSEQ: + reason = "RPC_NT_INVALID_RPC_PROTSEQ"; + break; + case MD_NTSTATUS_WIN_RPC_NT_INVALID_STRING_UUID: + reason = "RPC_NT_INVALID_STRING_UUID"; + break; + case MD_NTSTATUS_WIN_RPC_NT_INVALID_ENDPOINT_FORMAT: + reason = "RPC_NT_INVALID_ENDPOINT_FORMAT"; + break; + case MD_NTSTATUS_WIN_RPC_NT_INVALID_NET_ADDR: + reason = "RPC_NT_INVALID_NET_ADDR"; + break; + case MD_NTSTATUS_WIN_RPC_NT_NO_ENDPOINT_FOUND: + reason = "RPC_NT_NO_ENDPOINT_FOUND"; + break; + case MD_NTSTATUS_WIN_RPC_NT_INVALID_TIMEOUT: + reason = "RPC_NT_INVALID_TIMEOUT"; + break; + case MD_NTSTATUS_WIN_RPC_NT_OBJECT_NOT_FOUND: + reason = "RPC_NT_OBJECT_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_RPC_NT_ALREADY_REGISTERED: + reason = "RPC_NT_ALREADY_REGISTERED"; + break; + case MD_NTSTATUS_WIN_RPC_NT_TYPE_ALREADY_REGISTERED: + reason = "RPC_NT_TYPE_ALREADY_REGISTERED"; + break; + case MD_NTSTATUS_WIN_RPC_NT_ALREADY_LISTENING: + reason = "RPC_NT_ALREADY_LISTENING"; + break; + case MD_NTSTATUS_WIN_RPC_NT_NO_PROTSEQS_REGISTERED: + reason = "RPC_NT_NO_PROTSEQS_REGISTERED"; + break; + case MD_NTSTATUS_WIN_RPC_NT_NOT_LISTENING: + reason = "RPC_NT_NOT_LISTENING"; + break; + case MD_NTSTATUS_WIN_RPC_NT_UNKNOWN_MGR_TYPE: + reason = "RPC_NT_UNKNOWN_MGR_TYPE"; + break; + case MD_NTSTATUS_WIN_RPC_NT_UNKNOWN_IF: + reason = "RPC_NT_UNKNOWN_IF"; + break; + case MD_NTSTATUS_WIN_RPC_NT_NO_BINDINGS: + reason = "RPC_NT_NO_BINDINGS"; + break; + case MD_NTSTATUS_WIN_RPC_NT_NO_PROTSEQS: + reason = "RPC_NT_NO_PROTSEQS"; + break; + case MD_NTSTATUS_WIN_RPC_NT_CANT_CREATE_ENDPOINT: + reason = "RPC_NT_CANT_CREATE_ENDPOINT"; + break; + case MD_NTSTATUS_WIN_RPC_NT_OUT_OF_RESOURCES: + reason = "RPC_NT_OUT_OF_RESOURCES"; + break; + case MD_NTSTATUS_WIN_RPC_NT_SERVER_UNAVAILABLE: + reason = "RPC_NT_SERVER_UNAVAILABLE"; + break; + case MD_NTSTATUS_WIN_RPC_NT_SERVER_TOO_BUSY: + reason = "RPC_NT_SERVER_TOO_BUSY"; + break; + case MD_NTSTATUS_WIN_RPC_NT_INVALID_NETWORK_OPTIONS: + reason = "RPC_NT_INVALID_NETWORK_OPTIONS"; + break; + case MD_NTSTATUS_WIN_RPC_NT_NO_CALL_ACTIVE: + reason = "RPC_NT_NO_CALL_ACTIVE"; + break; + case MD_NTSTATUS_WIN_RPC_NT_CALL_FAILED: + reason = "RPC_NT_CALL_FAILED"; + break; + case MD_NTSTATUS_WIN_RPC_NT_CALL_FAILED_DNE: + reason = "RPC_NT_CALL_FAILED_DNE"; + break; + case MD_NTSTATUS_WIN_RPC_NT_PROTOCOL_ERROR: + reason = "RPC_NT_PROTOCOL_ERROR"; + break; + case MD_NTSTATUS_WIN_RPC_NT_UNSUPPORTED_TRANS_SYN: + reason = "RPC_NT_UNSUPPORTED_TRANS_SYN"; + break; + case MD_NTSTATUS_WIN_RPC_NT_UNSUPPORTED_TYPE: + reason = "RPC_NT_UNSUPPORTED_TYPE"; + break; + case MD_NTSTATUS_WIN_RPC_NT_INVALID_TAG: + reason = "RPC_NT_INVALID_TAG"; + break; + case MD_NTSTATUS_WIN_RPC_NT_INVALID_BOUND: + reason = "RPC_NT_INVALID_BOUND"; + break; + case MD_NTSTATUS_WIN_RPC_NT_NO_ENTRY_NAME: + reason = "RPC_NT_NO_ENTRY_NAME"; + break; + case MD_NTSTATUS_WIN_RPC_NT_INVALID_NAME_SYNTAX: + reason = "RPC_NT_INVALID_NAME_SYNTAX"; + break; + case MD_NTSTATUS_WIN_RPC_NT_UNSUPPORTED_NAME_SYNTAX: + reason = "RPC_NT_UNSUPPORTED_NAME_SYNTAX"; + break; + case MD_NTSTATUS_WIN_RPC_NT_UUID_NO_ADDRESS: + reason = "RPC_NT_UUID_NO_ADDRESS"; + break; + case MD_NTSTATUS_WIN_RPC_NT_DUPLICATE_ENDPOINT: + reason = "RPC_NT_DUPLICATE_ENDPOINT"; + break; + case MD_NTSTATUS_WIN_RPC_NT_UNKNOWN_AUTHN_TYPE: + reason = "RPC_NT_UNKNOWN_AUTHN_TYPE"; + break; + case MD_NTSTATUS_WIN_RPC_NT_MAX_CALLS_TOO_SMALL: + reason = "RPC_NT_MAX_CALLS_TOO_SMALL"; + break; + case MD_NTSTATUS_WIN_RPC_NT_STRING_TOO_LONG: + reason = "RPC_NT_STRING_TOO_LONG"; + break; + case MD_NTSTATUS_WIN_RPC_NT_PROTSEQ_NOT_FOUND: + reason = "RPC_NT_PROTSEQ_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_RPC_NT_PROCNUM_OUT_OF_RANGE: + reason = "RPC_NT_PROCNUM_OUT_OF_RANGE"; + break; + case MD_NTSTATUS_WIN_RPC_NT_BINDING_HAS_NO_AUTH: + reason = "RPC_NT_BINDING_HAS_NO_AUTH"; + break; + case MD_NTSTATUS_WIN_RPC_NT_UNKNOWN_AUTHN_SERVICE: + reason = "RPC_NT_UNKNOWN_AUTHN_SERVICE"; + break; + case MD_NTSTATUS_WIN_RPC_NT_UNKNOWN_AUTHN_LEVEL: + reason = "RPC_NT_UNKNOWN_AUTHN_LEVEL"; + break; + case MD_NTSTATUS_WIN_RPC_NT_INVALID_AUTH_IDENTITY: + reason = "RPC_NT_INVALID_AUTH_IDENTITY"; + break; + case MD_NTSTATUS_WIN_RPC_NT_UNKNOWN_AUTHZ_SERVICE: + reason = "RPC_NT_UNKNOWN_AUTHZ_SERVICE"; + break; + case MD_NTSTATUS_WIN_EPT_NT_INVALID_ENTRY: + reason = "EPT_NT_INVALID_ENTRY"; + break; + case MD_NTSTATUS_WIN_EPT_NT_CANT_PERFORM_OP: + reason = "EPT_NT_CANT_PERFORM_OP"; + break; + case MD_NTSTATUS_WIN_EPT_NT_NOT_REGISTERED: + reason = "EPT_NT_NOT_REGISTERED"; + break; + case MD_NTSTATUS_WIN_RPC_NT_NOTHING_TO_EXPORT: + reason = "RPC_NT_NOTHING_TO_EXPORT"; + break; + case MD_NTSTATUS_WIN_RPC_NT_INCOMPLETE_NAME: + reason = "RPC_NT_INCOMPLETE_NAME"; + break; + case MD_NTSTATUS_WIN_RPC_NT_INVALID_VERS_OPTION: + reason = "RPC_NT_INVALID_VERS_OPTION"; + break; + case MD_NTSTATUS_WIN_RPC_NT_NO_MORE_MEMBERS: + reason = "RPC_NT_NO_MORE_MEMBERS"; + break; + case MD_NTSTATUS_WIN_RPC_NT_NOT_ALL_OBJS_UNEXPORTED: + reason = "RPC_NT_NOT_ALL_OBJS_UNEXPORTED"; + break; + case MD_NTSTATUS_WIN_RPC_NT_INTERFACE_NOT_FOUND: + reason = "RPC_NT_INTERFACE_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_RPC_NT_ENTRY_ALREADY_EXISTS: + reason = "RPC_NT_ENTRY_ALREADY_EXISTS"; + break; + case MD_NTSTATUS_WIN_RPC_NT_ENTRY_NOT_FOUND: + reason = "RPC_NT_ENTRY_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_RPC_NT_NAME_SERVICE_UNAVAILABLE: + reason = "RPC_NT_NAME_SERVICE_UNAVAILABLE"; + break; + case MD_NTSTATUS_WIN_RPC_NT_INVALID_NAF_ID: + reason = "RPC_NT_INVALID_NAF_ID"; + break; + case MD_NTSTATUS_WIN_RPC_NT_CANNOT_SUPPORT: + reason = "RPC_NT_CANNOT_SUPPORT"; + break; + case MD_NTSTATUS_WIN_RPC_NT_NO_CONTEXT_AVAILABLE: + reason = "RPC_NT_NO_CONTEXT_AVAILABLE"; + break; + case MD_NTSTATUS_WIN_RPC_NT_INTERNAL_ERROR: + reason = "RPC_NT_INTERNAL_ERROR"; + break; + case MD_NTSTATUS_WIN_RPC_NT_ZERO_DIVIDE: + reason = "RPC_NT_ZERO_DIVIDE"; + break; + case MD_NTSTATUS_WIN_RPC_NT_ADDRESS_ERROR: + reason = "RPC_NT_ADDRESS_ERROR"; + break; + case MD_NTSTATUS_WIN_RPC_NT_FP_DIV_ZERO: + reason = "RPC_NT_FP_DIV_ZERO"; + break; + case MD_NTSTATUS_WIN_RPC_NT_FP_UNDERFLOW: + reason = "RPC_NT_FP_UNDERFLOW"; + break; + case MD_NTSTATUS_WIN_RPC_NT_FP_OVERFLOW: + reason = "RPC_NT_FP_OVERFLOW"; + break; + case MD_NTSTATUS_WIN_RPC_NT_CALL_IN_PROGRESS: + reason = "RPC_NT_CALL_IN_PROGRESS"; + break; + case MD_NTSTATUS_WIN_RPC_NT_NO_MORE_BINDINGS: + reason = "RPC_NT_NO_MORE_BINDINGS"; + break; + case MD_NTSTATUS_WIN_RPC_NT_GROUP_MEMBER_NOT_FOUND: + reason = "RPC_NT_GROUP_MEMBER_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_EPT_NT_CANT_CREATE: + reason = "EPT_NT_CANT_CREATE"; + break; + case MD_NTSTATUS_WIN_RPC_NT_INVALID_OBJECT: + reason = "RPC_NT_INVALID_OBJECT"; + break; + case MD_NTSTATUS_WIN_RPC_NT_NO_INTERFACES: + reason = "RPC_NT_NO_INTERFACES"; + break; + case MD_NTSTATUS_WIN_RPC_NT_CALL_CANCELLED: + reason = "RPC_NT_CALL_CANCELLED"; + break; + case MD_NTSTATUS_WIN_RPC_NT_BINDING_INCOMPLETE: + reason = "RPC_NT_BINDING_INCOMPLETE"; + break; + case MD_NTSTATUS_WIN_RPC_NT_COMM_FAILURE: + reason = "RPC_NT_COMM_FAILURE"; + break; + case MD_NTSTATUS_WIN_RPC_NT_UNSUPPORTED_AUTHN_LEVEL: + reason = "RPC_NT_UNSUPPORTED_AUTHN_LEVEL"; + break; + case MD_NTSTATUS_WIN_RPC_NT_NO_PRINC_NAME: + reason = "RPC_NT_NO_PRINC_NAME"; + break; + case MD_NTSTATUS_WIN_RPC_NT_NOT_RPC_ERROR: + reason = "RPC_NT_NOT_RPC_ERROR"; + break; + case MD_NTSTATUS_WIN_RPC_NT_SEC_PKG_ERROR: + reason = "RPC_NT_SEC_PKG_ERROR"; + break; + case MD_NTSTATUS_WIN_RPC_NT_NOT_CANCELLED: + reason = "RPC_NT_NOT_CANCELLED"; + break; + case MD_NTSTATUS_WIN_RPC_NT_INVALID_ASYNC_HANDLE: + reason = "RPC_NT_INVALID_ASYNC_HANDLE"; + break; + case MD_NTSTATUS_WIN_RPC_NT_INVALID_ASYNC_CALL: + reason = "RPC_NT_INVALID_ASYNC_CALL"; + break; + case MD_NTSTATUS_WIN_RPC_NT_PROXY_ACCESS_DENIED: + reason = "RPC_NT_PROXY_ACCESS_DENIED"; + break; + case MD_NTSTATUS_WIN_RPC_NT_COOKIE_AUTH_FAILED: + reason = "RPC_NT_COOKIE_AUTH_FAILED"; + break; + case MD_NTSTATUS_WIN_RPC_NT_NO_MORE_ENTRIES: + reason = "RPC_NT_NO_MORE_ENTRIES"; + break; + case MD_NTSTATUS_WIN_RPC_NT_SS_CHAR_TRANS_OPEN_FAIL: + reason = "RPC_NT_SS_CHAR_TRANS_OPEN_FAIL"; + break; + case MD_NTSTATUS_WIN_RPC_NT_SS_CHAR_TRANS_SHORT_FILE: + reason = "RPC_NT_SS_CHAR_TRANS_SHORT_FILE"; + break; + case MD_NTSTATUS_WIN_RPC_NT_SS_IN_NULL_CONTEXT: + reason = "RPC_NT_SS_IN_NULL_CONTEXT"; + break; + case MD_NTSTATUS_WIN_RPC_NT_SS_CONTEXT_MISMATCH: + reason = "RPC_NT_SS_CONTEXT_MISMATCH"; + break; + case MD_NTSTATUS_WIN_RPC_NT_SS_CONTEXT_DAMAGED: + reason = "RPC_NT_SS_CONTEXT_DAMAGED"; + break; + case MD_NTSTATUS_WIN_RPC_NT_SS_HANDLES_MISMATCH: + reason = "RPC_NT_SS_HANDLES_MISMATCH"; + break; + case MD_NTSTATUS_WIN_RPC_NT_SS_CANNOT_GET_CALL_HANDLE: + reason = "RPC_NT_SS_CANNOT_GET_CALL_HANDLE"; + break; + case MD_NTSTATUS_WIN_RPC_NT_NULL_REF_POINTER: + reason = "RPC_NT_NULL_REF_POINTER"; + break; + case MD_NTSTATUS_WIN_RPC_NT_ENUM_VALUE_OUT_OF_RANGE: + reason = "RPC_NT_ENUM_VALUE_OUT_OF_RANGE"; + break; + case MD_NTSTATUS_WIN_RPC_NT_BYTE_COUNT_TOO_SMALL: + reason = "RPC_NT_BYTE_COUNT_TOO_SMALL"; + break; + case MD_NTSTATUS_WIN_RPC_NT_BAD_STUB_DATA: + reason = "RPC_NT_BAD_STUB_DATA"; + break; + case MD_NTSTATUS_WIN_RPC_NT_INVALID_ES_ACTION: + reason = "RPC_NT_INVALID_ES_ACTION"; + break; + case MD_NTSTATUS_WIN_RPC_NT_WRONG_ES_VERSION: + reason = "RPC_NT_WRONG_ES_VERSION"; + break; + case MD_NTSTATUS_WIN_RPC_NT_WRONG_STUB_VERSION: + reason = "RPC_NT_WRONG_STUB_VERSION"; + break; + case MD_NTSTATUS_WIN_RPC_NT_INVALID_PIPE_OBJECT: + reason = "RPC_NT_INVALID_PIPE_OBJECT"; + break; + case MD_NTSTATUS_WIN_RPC_NT_INVALID_PIPE_OPERATION: + reason = "RPC_NT_INVALID_PIPE_OPERATION"; + break; + case MD_NTSTATUS_WIN_RPC_NT_WRONG_PIPE_VERSION: + reason = "RPC_NT_WRONG_PIPE_VERSION"; + break; + case MD_NTSTATUS_WIN_RPC_NT_PIPE_CLOSED: + reason = "RPC_NT_PIPE_CLOSED"; + break; + case MD_NTSTATUS_WIN_RPC_NT_PIPE_DISCIPLINE_ERROR: + reason = "RPC_NT_PIPE_DISCIPLINE_ERROR"; + break; + case MD_NTSTATUS_WIN_RPC_NT_PIPE_EMPTY: + reason = "RPC_NT_PIPE_EMPTY"; + break; + case MD_NTSTATUS_WIN_STATUS_PNP_BAD_MPS_TABLE: + reason = "STATUS_PNP_BAD_MPS_TABLE"; + break; + case MD_NTSTATUS_WIN_STATUS_PNP_TRANSLATION_FAILED: + reason = "STATUS_PNP_TRANSLATION_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_PNP_IRQ_TRANSLATION_FAILED: + reason = "STATUS_PNP_IRQ_TRANSLATION_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_PNP_INVALID_ID: + reason = "STATUS_PNP_INVALID_ID"; + break; + case MD_NTSTATUS_WIN_STATUS_IO_REISSUE_AS_CACHED: + reason = "STATUS_IO_REISSUE_AS_CACHED"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_WINSTATION_NAME_INVALID: + reason = "STATUS_CTX_WINSTATION_NAME_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_INVALID_PD: + reason = "STATUS_CTX_INVALID_PD"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_PD_NOT_FOUND: + reason = "STATUS_CTX_PD_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_CLOSE_PENDING: + reason = "STATUS_CTX_CLOSE_PENDING"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_NO_OUTBUF: + reason = "STATUS_CTX_NO_OUTBUF"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_MODEM_INF_NOT_FOUND: + reason = "STATUS_CTX_MODEM_INF_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_INVALID_MODEMNAME: + reason = "STATUS_CTX_INVALID_MODEMNAME"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_RESPONSE_ERROR: + reason = "STATUS_CTX_RESPONSE_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_MODEM_RESPONSE_TIMEOUT: + reason = "STATUS_CTX_MODEM_RESPONSE_TIMEOUT"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_MODEM_RESPONSE_NO_CARRIER: + reason = "STATUS_CTX_MODEM_RESPONSE_NO_CARRIER"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_MODEM_RESPONSE_NO_DIALTONE: + reason = "STATUS_CTX_MODEM_RESPONSE_NO_DIALTONE"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_MODEM_RESPONSE_BUSY: + reason = "STATUS_CTX_MODEM_RESPONSE_BUSY"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_MODEM_RESPONSE_VOICE: + reason = "STATUS_CTX_MODEM_RESPONSE_VOICE"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_TD_ERROR: + reason = "STATUS_CTX_TD_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_LICENSE_CLIENT_INVALID: + reason = "STATUS_CTX_LICENSE_CLIENT_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_LICENSE_NOT_AVAILABLE: + reason = "STATUS_CTX_LICENSE_NOT_AVAILABLE"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_LICENSE_EXPIRED: + reason = "STATUS_CTX_LICENSE_EXPIRED"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_WINSTATION_NOT_FOUND: + reason = "STATUS_CTX_WINSTATION_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_WINSTATION_NAME_COLLISION: + reason = "STATUS_CTX_WINSTATION_NAME_COLLISION"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_WINSTATION_BUSY: + reason = "STATUS_CTX_WINSTATION_BUSY"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_BAD_VIDEO_MODE: + reason = "STATUS_CTX_BAD_VIDEO_MODE"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_GRAPHICS_INVALID: + reason = "STATUS_CTX_GRAPHICS_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_NOT_CONSOLE: + reason = "STATUS_CTX_NOT_CONSOLE"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_CLIENT_QUERY_TIMEOUT: + reason = "STATUS_CTX_CLIENT_QUERY_TIMEOUT"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_CONSOLE_DISCONNECT: + reason = "STATUS_CTX_CONSOLE_DISCONNECT"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_CONSOLE_CONNECT: + reason = "STATUS_CTX_CONSOLE_CONNECT"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_SHADOW_DENIED: + reason = "STATUS_CTX_SHADOW_DENIED"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_WINSTATION_ACCESS_DENIED: + reason = "STATUS_CTX_WINSTATION_ACCESS_DENIED"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_INVALID_WD: + reason = "STATUS_CTX_INVALID_WD"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_WD_NOT_FOUND: + reason = "STATUS_CTX_WD_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_SHADOW_INVALID: + reason = "STATUS_CTX_SHADOW_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_SHADOW_DISABLED: + reason = "STATUS_CTX_SHADOW_DISABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_RDP_PROTOCOL_ERROR: + reason = "STATUS_RDP_PROTOCOL_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_CLIENT_LICENSE_NOT_SET: + reason = "STATUS_CTX_CLIENT_LICENSE_NOT_SET"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_CLIENT_LICENSE_IN_USE: + reason = "STATUS_CTX_CLIENT_LICENSE_IN_USE"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_SHADOW_ENDED_BY_MODE_CHANGE: + reason = "STATUS_CTX_SHADOW_ENDED_BY_MODE_CHANGE"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_SHADOW_NOT_RUNNING: + reason = "STATUS_CTX_SHADOW_NOT_RUNNING"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_LOGON_DISABLED: + reason = "STATUS_CTX_LOGON_DISABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_CTX_SECURITY_LAYER_ERROR: + reason = "STATUS_CTX_SECURITY_LAYER_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_TS_INCOMPATIBLE_SESSIONS: + reason = "STATUS_TS_INCOMPATIBLE_SESSIONS"; + break; + case MD_NTSTATUS_WIN_STATUS_TS_VIDEO_SUBSYSTEM_ERROR: + reason = "STATUS_TS_VIDEO_SUBSYSTEM_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_MUI_FILE_NOT_FOUND: + reason = "STATUS_MUI_FILE_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_MUI_INVALID_FILE: + reason = "STATUS_MUI_INVALID_FILE"; + break; + case MD_NTSTATUS_WIN_STATUS_MUI_INVALID_RC_CONFIG: + reason = "STATUS_MUI_INVALID_RC_CONFIG"; + break; + case MD_NTSTATUS_WIN_STATUS_MUI_INVALID_LOCALE_NAME: + reason = "STATUS_MUI_INVALID_LOCALE_NAME"; + break; + case MD_NTSTATUS_WIN_STATUS_MUI_INVALID_ULTIMATEFALLBACK_NAME: + reason = "STATUS_MUI_INVALID_ULTIMATEFALLBACK_NAME"; + break; + case MD_NTSTATUS_WIN_STATUS_MUI_FILE_NOT_LOADED: + reason = "STATUS_MUI_FILE_NOT_LOADED"; + break; + case MD_NTSTATUS_WIN_STATUS_RESOURCE_ENUM_USER_STOP: + reason = "STATUS_RESOURCE_ENUM_USER_STOP"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_INVALID_NODE: + reason = "STATUS_CLUSTER_INVALID_NODE"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_NODE_EXISTS: + reason = "STATUS_CLUSTER_NODE_EXISTS"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_JOIN_IN_PROGRESS: + reason = "STATUS_CLUSTER_JOIN_IN_PROGRESS"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_NODE_NOT_FOUND: + reason = "STATUS_CLUSTER_NODE_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_LOCAL_NODE_NOT_FOUND: + reason = "STATUS_CLUSTER_LOCAL_NODE_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_NETWORK_EXISTS: + reason = "STATUS_CLUSTER_NETWORK_EXISTS"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_NETWORK_NOT_FOUND: + reason = "STATUS_CLUSTER_NETWORK_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_NETINTERFACE_EXISTS: + reason = "STATUS_CLUSTER_NETINTERFACE_EXISTS"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_NETINTERFACE_NOT_FOUND: + reason = "STATUS_CLUSTER_NETINTERFACE_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_INVALID_REQUEST: + reason = "STATUS_CLUSTER_INVALID_REQUEST"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_INVALID_NETWORK_PROVIDER: + reason = "STATUS_CLUSTER_INVALID_NETWORK_PROVIDER"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_NODE_DOWN: + reason = "STATUS_CLUSTER_NODE_DOWN"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_NODE_UNREACHABLE: + reason = "STATUS_CLUSTER_NODE_UNREACHABLE"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_NODE_NOT_MEMBER: + reason = "STATUS_CLUSTER_NODE_NOT_MEMBER"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_JOIN_NOT_IN_PROGRESS: + reason = "STATUS_CLUSTER_JOIN_NOT_IN_PROGRESS"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_INVALID_NETWORK: + reason = "STATUS_CLUSTER_INVALID_NETWORK"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_NO_NET_ADAPTERS: + reason = "STATUS_CLUSTER_NO_NET_ADAPTERS"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_NODE_UP: + reason = "STATUS_CLUSTER_NODE_UP"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_NODE_PAUSED: + reason = "STATUS_CLUSTER_NODE_PAUSED"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_NODE_NOT_PAUSED: + reason = "STATUS_CLUSTER_NODE_NOT_PAUSED"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_NO_SECURITY_CONTEXT: + reason = "STATUS_CLUSTER_NO_SECURITY_CONTEXT"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_NETWORK_NOT_INTERNAL: + reason = "STATUS_CLUSTER_NETWORK_NOT_INTERNAL"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_POISONED: + reason = "STATUS_CLUSTER_POISONED"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_NON_CSV_PATH: + reason = "STATUS_CLUSTER_NON_CSV_PATH"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_CSV_VOLUME_NOT_LOCAL: + reason = "STATUS_CLUSTER_CSV_VOLUME_NOT_LOCAL"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_CSV_READ_OPLOCK_BREAK_IN_PROGRESS: + reason = "STATUS_CLUSTER_CSV_READ_OPLOCK_BREAK_IN_PROGRESS"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_CSV_AUTO_PAUSE_ERROR: + reason = "STATUS_CLUSTER_CSV_AUTO_PAUSE_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_CSV_REDIRECTED: + reason = "STATUS_CLUSTER_CSV_REDIRECTED"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_CSV_NOT_REDIRECTED: + reason = "STATUS_CLUSTER_CSV_NOT_REDIRECTED"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_CSV_VOLUME_DRAINING: + reason = "STATUS_CLUSTER_CSV_VOLUME_DRAINING"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_CSV_SNAPSHOT_CREATION_IN_PROGRESS: + reason = "STATUS_CLUSTER_CSV_SNAPSHOT_CREATION_IN_PROGRESS"; + break; + case MD_NTSTATUS_WIN_STATUS_CLUSTER_CSV_VOLUME_DRAINING_SUCCEEDED_DOWNLEVEL: + reason = "STATUS_CLUSTER_CSV_VOLUME_DRAINING_SUCCEEDED_DOWNLEVEL"; + break; + case MD_NTSTATUS_WIN_STATUS_ACPI_INVALID_OPCODE: + reason = "STATUS_ACPI_INVALID_OPCODE"; + break; + case MD_NTSTATUS_WIN_STATUS_ACPI_STACK_OVERFLOW: + reason = "STATUS_ACPI_STACK_OVERFLOW"; + break; + case MD_NTSTATUS_WIN_STATUS_ACPI_ASSERT_FAILED: + reason = "STATUS_ACPI_ASSERT_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_ACPI_INVALID_INDEX: + reason = "STATUS_ACPI_INVALID_INDEX"; + break; + case MD_NTSTATUS_WIN_STATUS_ACPI_INVALID_ARGUMENT: + reason = "STATUS_ACPI_INVALID_ARGUMENT"; + break; + case MD_NTSTATUS_WIN_STATUS_ACPI_FATAL: + reason = "STATUS_ACPI_FATAL"; + break; + case MD_NTSTATUS_WIN_STATUS_ACPI_INVALID_SUPERNAME: + reason = "STATUS_ACPI_INVALID_SUPERNAME"; + break; + case MD_NTSTATUS_WIN_STATUS_ACPI_INVALID_ARGTYPE: + reason = "STATUS_ACPI_INVALID_ARGTYPE"; + break; + case MD_NTSTATUS_WIN_STATUS_ACPI_INVALID_OBJTYPE: + reason = "STATUS_ACPI_INVALID_OBJTYPE"; + break; + case MD_NTSTATUS_WIN_STATUS_ACPI_INVALID_TARGETTYPE: + reason = "STATUS_ACPI_INVALID_TARGETTYPE"; + break; + case MD_NTSTATUS_WIN_STATUS_ACPI_INCORRECT_ARGUMENT_COUNT: + reason = "STATUS_ACPI_INCORRECT_ARGUMENT_COUNT"; + break; + case MD_NTSTATUS_WIN_STATUS_ACPI_ADDRESS_NOT_MAPPED: + reason = "STATUS_ACPI_ADDRESS_NOT_MAPPED"; + break; + case MD_NTSTATUS_WIN_STATUS_ACPI_INVALID_EVENTTYPE: + reason = "STATUS_ACPI_INVALID_EVENTTYPE"; + break; + case MD_NTSTATUS_WIN_STATUS_ACPI_HANDLER_COLLISION: + reason = "STATUS_ACPI_HANDLER_COLLISION"; + break; + case MD_NTSTATUS_WIN_STATUS_ACPI_INVALID_DATA: + reason = "STATUS_ACPI_INVALID_DATA"; + break; + case MD_NTSTATUS_WIN_STATUS_ACPI_INVALID_REGION: + reason = "STATUS_ACPI_INVALID_REGION"; + break; + case MD_NTSTATUS_WIN_STATUS_ACPI_INVALID_ACCESS_SIZE: + reason = "STATUS_ACPI_INVALID_ACCESS_SIZE"; + break; + case MD_NTSTATUS_WIN_STATUS_ACPI_ACQUIRE_GLOBAL_LOCK: + reason = "STATUS_ACPI_ACQUIRE_GLOBAL_LOCK"; + break; + case MD_NTSTATUS_WIN_STATUS_ACPI_ALREADY_INITIALIZED: + reason = "STATUS_ACPI_ALREADY_INITIALIZED"; + break; + case MD_NTSTATUS_WIN_STATUS_ACPI_NOT_INITIALIZED: + reason = "STATUS_ACPI_NOT_INITIALIZED"; + break; + case MD_NTSTATUS_WIN_STATUS_ACPI_INVALID_MUTEX_LEVEL: + reason = "STATUS_ACPI_INVALID_MUTEX_LEVEL"; + break; + case MD_NTSTATUS_WIN_STATUS_ACPI_MUTEX_NOT_OWNED: + reason = "STATUS_ACPI_MUTEX_NOT_OWNED"; + break; + case MD_NTSTATUS_WIN_STATUS_ACPI_MUTEX_NOT_OWNER: + reason = "STATUS_ACPI_MUTEX_NOT_OWNER"; + break; + case MD_NTSTATUS_WIN_STATUS_ACPI_RS_ACCESS: + reason = "STATUS_ACPI_RS_ACCESS"; + break; + case MD_NTSTATUS_WIN_STATUS_ACPI_INVALID_TABLE: + reason = "STATUS_ACPI_INVALID_TABLE"; + break; + case MD_NTSTATUS_WIN_STATUS_ACPI_REG_HANDLER_FAILED: + reason = "STATUS_ACPI_REG_HANDLER_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_ACPI_POWER_REQUEST_FAILED: + reason = "STATUS_ACPI_POWER_REQUEST_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_SECTION_NOT_FOUND: + reason = "STATUS_SXS_SECTION_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_CANT_GEN_ACTCTX: + reason = "STATUS_SXS_CANT_GEN_ACTCTX"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_INVALID_ACTCTXDATA_FORMAT: + reason = "STATUS_SXS_INVALID_ACTCTXDATA_FORMAT"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_ASSEMBLY_NOT_FOUND: + reason = "STATUS_SXS_ASSEMBLY_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_MANIFEST_FORMAT_ERROR: + reason = "STATUS_SXS_MANIFEST_FORMAT_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_MANIFEST_PARSE_ERROR: + reason = "STATUS_SXS_MANIFEST_PARSE_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_ACTIVATION_CONTEXT_DISABLED: + reason = "STATUS_SXS_ACTIVATION_CONTEXT_DISABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_KEY_NOT_FOUND: + reason = "STATUS_SXS_KEY_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_VERSION_CONFLICT: + reason = "STATUS_SXS_VERSION_CONFLICT"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_WRONG_SECTION_TYPE: + reason = "STATUS_SXS_WRONG_SECTION_TYPE"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_THREAD_QUERIES_DISABLED: + reason = "STATUS_SXS_THREAD_QUERIES_DISABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_ASSEMBLY_MISSING: + reason = "STATUS_SXS_ASSEMBLY_MISSING"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_PROCESS_DEFAULT_ALREADY_SET: + reason = "STATUS_SXS_PROCESS_DEFAULT_ALREADY_SET"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_EARLY_DEACTIVATION: + reason = "STATUS_SXS_EARLY_DEACTIVATION"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_INVALID_DEACTIVATION: + reason = "STATUS_SXS_INVALID_DEACTIVATION"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_MULTIPLE_DEACTIVATION: + reason = "STATUS_SXS_MULTIPLE_DEACTIVATION"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY: + reason = "STATUS_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_PROCESS_TERMINATION_REQUESTED: + reason = "STATUS_SXS_PROCESS_TERMINATION_REQUESTED"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_CORRUPT_ACTIVATION_STACK: + reason = "STATUS_SXS_CORRUPT_ACTIVATION_STACK"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_CORRUPTION: + reason = "STATUS_SXS_CORRUPTION"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE: + reason = "STATUS_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME: + reason = "STATUS_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_IDENTITY_DUPLICATE_ATTRIBUTE: + reason = "STATUS_SXS_IDENTITY_DUPLICATE_ATTRIBUTE"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_IDENTITY_PARSE_ERROR: + reason = "STATUS_SXS_IDENTITY_PARSE_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_COMPONENT_STORE_CORRUPT: + reason = "STATUS_SXS_COMPONENT_STORE_CORRUPT"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_FILE_HASH_MISMATCH: + reason = "STATUS_SXS_FILE_HASH_MISMATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT: + reason = "STATUS_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_IDENTITIES_DIFFERENT: + reason = "STATUS_SXS_IDENTITIES_DIFFERENT"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT: + reason = "STATUS_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_FILE_NOT_PART_OF_ASSEMBLY: + reason = "STATUS_SXS_FILE_NOT_PART_OF_ASSEMBLY"; + break; + case MD_NTSTATUS_WIN_STATUS_ADVANCED_INSTALLER_FAILED: + reason = "STATUS_ADVANCED_INSTALLER_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_XML_ENCODING_MISMATCH: + reason = "STATUS_XML_ENCODING_MISMATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_MANIFEST_TOO_BIG: + reason = "STATUS_SXS_MANIFEST_TOO_BIG"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_SETTING_NOT_REGISTERED: + reason = "STATUS_SXS_SETTING_NOT_REGISTERED"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_TRANSACTION_CLOSURE_INCOMPLETE: + reason = "STATUS_SXS_TRANSACTION_CLOSURE_INCOMPLETE"; + break; + case MD_NTSTATUS_WIN_STATUS_SMI_PRIMITIVE_INSTALLER_FAILED: + reason = "STATUS_SMI_PRIMITIVE_INSTALLER_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_GENERIC_COMMAND_FAILED: + reason = "STATUS_GENERIC_COMMAND_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_SXS_FILE_HASH_MISSING: + reason = "STATUS_SXS_FILE_HASH_MISSING"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTIONAL_CONFLICT: + reason = "STATUS_TRANSACTIONAL_CONFLICT"; + break; + case MD_NTSTATUS_WIN_STATUS_INVALID_TRANSACTION: + reason = "STATUS_INVALID_TRANSACTION"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTION_NOT_ACTIVE: + reason = "STATUS_TRANSACTION_NOT_ACTIVE"; + break; + case MD_NTSTATUS_WIN_STATUS_TM_INITIALIZATION_FAILED: + reason = "STATUS_TM_INITIALIZATION_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_RM_NOT_ACTIVE: + reason = "STATUS_RM_NOT_ACTIVE"; + break; + case MD_NTSTATUS_WIN_STATUS_RM_METADATA_CORRUPT: + reason = "STATUS_RM_METADATA_CORRUPT"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTION_NOT_JOINED: + reason = "STATUS_TRANSACTION_NOT_JOINED"; + break; + case MD_NTSTATUS_WIN_STATUS_DIRECTORY_NOT_RM: + reason = "STATUS_DIRECTORY_NOT_RM"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTIONS_UNSUPPORTED_REMOTE: + reason = "STATUS_TRANSACTIONS_UNSUPPORTED_REMOTE"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_RESIZE_INVALID_SIZE: + reason = "STATUS_LOG_RESIZE_INVALID_SIZE"; + break; + case MD_NTSTATUS_WIN_STATUS_REMOTE_FILE_VERSION_MISMATCH: + reason = "STATUS_REMOTE_FILE_VERSION_MISMATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_CRM_PROTOCOL_ALREADY_EXISTS: + reason = "STATUS_CRM_PROTOCOL_ALREADY_EXISTS"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTION_PROPAGATION_FAILED: + reason = "STATUS_TRANSACTION_PROPAGATION_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_CRM_PROTOCOL_NOT_FOUND: + reason = "STATUS_CRM_PROTOCOL_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTION_SUPERIOR_EXISTS: + reason = "STATUS_TRANSACTION_SUPERIOR_EXISTS"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTION_REQUEST_NOT_VALID: + reason = "STATUS_TRANSACTION_REQUEST_NOT_VALID"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTION_NOT_REQUESTED: + reason = "STATUS_TRANSACTION_NOT_REQUESTED"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTION_ALREADY_ABORTED: + reason = "STATUS_TRANSACTION_ALREADY_ABORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTION_ALREADY_COMMITTED: + reason = "STATUS_TRANSACTION_ALREADY_COMMITTED"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTION_INVALID_MARSHALL_BUFFER: + reason = "STATUS_TRANSACTION_INVALID_MARSHALL_BUFFER"; + break; + case MD_NTSTATUS_WIN_STATUS_CURRENT_TRANSACTION_NOT_VALID: + reason = "STATUS_CURRENT_TRANSACTION_NOT_VALID"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_GROWTH_FAILED: + reason = "STATUS_LOG_GROWTH_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_OBJECT_NO_LONGER_EXISTS: + reason = "STATUS_OBJECT_NO_LONGER_EXISTS"; + break; + case MD_NTSTATUS_WIN_STATUS_STREAM_MINIVERSION_NOT_FOUND: + reason = "STATUS_STREAM_MINIVERSION_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_STREAM_MINIVERSION_NOT_VALID: + reason = "STATUS_STREAM_MINIVERSION_NOT_VALID"; + break; + case MD_NTSTATUS_WIN_STATUS_MINIVERSION_INACCESSIBLE_FROM_SPECIFIED_TRANSACTION: + reason = "STATUS_MINIVERSION_INACCESSIBLE_FROM_SPECIFIED_TRANSACTION"; + break; + case MD_NTSTATUS_WIN_STATUS_CANT_OPEN_MINIVERSION_WITH_MODIFY_INTENT: + reason = "STATUS_CANT_OPEN_MINIVERSION_WITH_MODIFY_INTENT"; + break; + case MD_NTSTATUS_WIN_STATUS_CANT_CREATE_MORE_STREAM_MINIVERSIONS: + reason = "STATUS_CANT_CREATE_MORE_STREAM_MINIVERSIONS"; + break; + case MD_NTSTATUS_WIN_STATUS_HANDLE_NO_LONGER_VALID: + reason = "STATUS_HANDLE_NO_LONGER_VALID"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_CORRUPTION_DETECTED: + reason = "STATUS_LOG_CORRUPTION_DETECTED"; + break; + case MD_NTSTATUS_WIN_STATUS_RM_DISCONNECTED: + reason = "STATUS_RM_DISCONNECTED"; + break; + case MD_NTSTATUS_WIN_STATUS_ENLISTMENT_NOT_SUPERIOR: + reason = "STATUS_ENLISTMENT_NOT_SUPERIOR"; + break; + case MD_NTSTATUS_WIN_STATUS_FILE_IDENTITY_NOT_PERSISTENT: + reason = "STATUS_FILE_IDENTITY_NOT_PERSISTENT"; + break; + case MD_NTSTATUS_WIN_STATUS_CANT_BREAK_TRANSACTIONAL_DEPENDENCY: + reason = "STATUS_CANT_BREAK_TRANSACTIONAL_DEPENDENCY"; + break; + case MD_NTSTATUS_WIN_STATUS_CANT_CROSS_RM_BOUNDARY: + reason = "STATUS_CANT_CROSS_RM_BOUNDARY"; + break; + case MD_NTSTATUS_WIN_STATUS_TXF_DIR_NOT_EMPTY: + reason = "STATUS_TXF_DIR_NOT_EMPTY"; + break; + case MD_NTSTATUS_WIN_STATUS_INDOUBT_TRANSACTIONS_EXIST: + reason = "STATUS_INDOUBT_TRANSACTIONS_EXIST"; + break; + case MD_NTSTATUS_WIN_STATUS_TM_VOLATILE: + reason = "STATUS_TM_VOLATILE"; + break; + case MD_NTSTATUS_WIN_STATUS_ROLLBACK_TIMER_EXPIRED: + reason = "STATUS_ROLLBACK_TIMER_EXPIRED"; + break; + case MD_NTSTATUS_WIN_STATUS_TXF_ATTRIBUTE_CORRUPT: + reason = "STATUS_TXF_ATTRIBUTE_CORRUPT"; + break; + case MD_NTSTATUS_WIN_STATUS_EFS_NOT_ALLOWED_IN_TRANSACTION: + reason = "STATUS_EFS_NOT_ALLOWED_IN_TRANSACTION"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTIONAL_OPEN_NOT_ALLOWED: + reason = "STATUS_TRANSACTIONAL_OPEN_NOT_ALLOWED"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTED_MAPPING_UNSUPPORTED_REMOTE: + reason = "STATUS_TRANSACTED_MAPPING_UNSUPPORTED_REMOTE"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTION_REQUIRED_PROMOTION: + reason = "STATUS_TRANSACTION_REQUIRED_PROMOTION"; + break; + case MD_NTSTATUS_WIN_STATUS_CANNOT_EXECUTE_FILE_IN_TRANSACTION: + reason = "STATUS_CANNOT_EXECUTE_FILE_IN_TRANSACTION"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTIONS_NOT_FROZEN: + reason = "STATUS_TRANSACTIONS_NOT_FROZEN"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTION_FREEZE_IN_PROGRESS: + reason = "STATUS_TRANSACTION_FREEZE_IN_PROGRESS"; + break; + case MD_NTSTATUS_WIN_STATUS_NOT_SNAPSHOT_VOLUME: + reason = "STATUS_NOT_SNAPSHOT_VOLUME"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_SAVEPOINT_WITH_OPEN_FILES: + reason = "STATUS_NO_SAVEPOINT_WITH_OPEN_FILES"; + break; + case MD_NTSTATUS_WIN_STATUS_SPARSE_NOT_ALLOWED_IN_TRANSACTION: + reason = "STATUS_SPARSE_NOT_ALLOWED_IN_TRANSACTION"; + break; + case MD_NTSTATUS_WIN_STATUS_TM_IDENTITY_MISMATCH: + reason = "STATUS_TM_IDENTITY_MISMATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_FLOATED_SECTION: + reason = "STATUS_FLOATED_SECTION"; + break; + case MD_NTSTATUS_WIN_STATUS_CANNOT_ACCEPT_TRANSACTED_WORK: + reason = "STATUS_CANNOT_ACCEPT_TRANSACTED_WORK"; + break; + case MD_NTSTATUS_WIN_STATUS_CANNOT_ABORT_TRANSACTIONS: + reason = "STATUS_CANNOT_ABORT_TRANSACTIONS"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTION_NOT_FOUND: + reason = "STATUS_TRANSACTION_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_RESOURCEMANAGER_NOT_FOUND: + reason = "STATUS_RESOURCEMANAGER_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_ENLISTMENT_NOT_FOUND: + reason = "STATUS_ENLISTMENT_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTIONMANAGER_NOT_FOUND: + reason = "STATUS_TRANSACTIONMANAGER_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTIONMANAGER_NOT_ONLINE: + reason = "STATUS_TRANSACTIONMANAGER_NOT_ONLINE"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTIONMANAGER_RECOVERY_NAME_COLLISION: + reason = "STATUS_TRANSACTIONMANAGER_RECOVERY_NAME_COLLISION"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTION_NOT_ROOT: + reason = "STATUS_TRANSACTION_NOT_ROOT"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTION_OBJECT_EXPIRED: + reason = "STATUS_TRANSACTION_OBJECT_EXPIRED"; + break; + case MD_NTSTATUS_WIN_STATUS_COMPRESSION_NOT_ALLOWED_IN_TRANSACTION: + reason = "STATUS_COMPRESSION_NOT_ALLOWED_IN_TRANSACTION"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTION_RESPONSE_NOT_ENLISTED: + reason = "STATUS_TRANSACTION_RESPONSE_NOT_ENLISTED"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTION_RECORD_TOO_LONG: + reason = "STATUS_TRANSACTION_RECORD_TOO_LONG"; + break; + case MD_NTSTATUS_WIN_STATUS_NO_LINK_TRACKING_IN_TRANSACTION: + reason = "STATUS_NO_LINK_TRACKING_IN_TRANSACTION"; + break; + case MD_NTSTATUS_WIN_STATUS_OPERATION_NOT_SUPPORTED_IN_TRANSACTION: + reason = "STATUS_OPERATION_NOT_SUPPORTED_IN_TRANSACTION"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTION_INTEGRITY_VIOLATED: + reason = "STATUS_TRANSACTION_INTEGRITY_VIOLATED"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTIONMANAGER_IDENTITY_MISMATCH: + reason = "STATUS_TRANSACTIONMANAGER_IDENTITY_MISMATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_RM_CANNOT_BE_FROZEN_FOR_SNAPSHOT: + reason = "STATUS_RM_CANNOT_BE_FROZEN_FOR_SNAPSHOT"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTION_MUST_WRITETHROUGH: + reason = "STATUS_TRANSACTION_MUST_WRITETHROUGH"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTION_NO_SUPERIOR: + reason = "STATUS_TRANSACTION_NO_SUPERIOR"; + break; + case MD_NTSTATUS_WIN_STATUS_EXPIRED_HANDLE: + reason = "STATUS_EXPIRED_HANDLE"; + break; + case MD_NTSTATUS_WIN_STATUS_TRANSACTION_NOT_ENLISTED: + reason = "STATUS_TRANSACTION_NOT_ENLISTED"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_SECTOR_INVALID: + reason = "STATUS_LOG_SECTOR_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_SECTOR_PARITY_INVALID: + reason = "STATUS_LOG_SECTOR_PARITY_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_SECTOR_REMAPPED: + reason = "STATUS_LOG_SECTOR_REMAPPED"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_BLOCK_INCOMPLETE: + reason = "STATUS_LOG_BLOCK_INCOMPLETE"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_INVALID_RANGE: + reason = "STATUS_LOG_INVALID_RANGE"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_BLOCKS_EXHAUSTED: + reason = "STATUS_LOG_BLOCKS_EXHAUSTED"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_READ_CONTEXT_INVALID: + reason = "STATUS_LOG_READ_CONTEXT_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_RESTART_INVALID: + reason = "STATUS_LOG_RESTART_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_BLOCK_VERSION: + reason = "STATUS_LOG_BLOCK_VERSION"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_BLOCK_INVALID: + reason = "STATUS_LOG_BLOCK_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_READ_MODE_INVALID: + reason = "STATUS_LOG_READ_MODE_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_METADATA_CORRUPT: + reason = "STATUS_LOG_METADATA_CORRUPT"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_METADATA_INVALID: + reason = "STATUS_LOG_METADATA_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_METADATA_INCONSISTENT: + reason = "STATUS_LOG_METADATA_INCONSISTENT"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_RESERVATION_INVALID: + reason = "STATUS_LOG_RESERVATION_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_CANT_DELETE: + reason = "STATUS_LOG_CANT_DELETE"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_CONTAINER_LIMIT_EXCEEDED: + reason = "STATUS_LOG_CONTAINER_LIMIT_EXCEEDED"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_START_OF_LOG: + reason = "STATUS_LOG_START_OF_LOG"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_POLICY_ALREADY_INSTALLED: + reason = "STATUS_LOG_POLICY_ALREADY_INSTALLED"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_POLICY_NOT_INSTALLED: + reason = "STATUS_LOG_POLICY_NOT_INSTALLED"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_POLICY_INVALID: + reason = "STATUS_LOG_POLICY_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_POLICY_CONFLICT: + reason = "STATUS_LOG_POLICY_CONFLICT"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_PINNED_ARCHIVE_TAIL: + reason = "STATUS_LOG_PINNED_ARCHIVE_TAIL"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_RECORD_NONEXISTENT: + reason = "STATUS_LOG_RECORD_NONEXISTENT"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_RECORDS_RESERVED_INVALID: + reason = "STATUS_LOG_RECORDS_RESERVED_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_SPACE_RESERVED_INVALID: + reason = "STATUS_LOG_SPACE_RESERVED_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_TAIL_INVALID: + reason = "STATUS_LOG_TAIL_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_FULL: + reason = "STATUS_LOG_FULL"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_MULTIPLEXED: + reason = "STATUS_LOG_MULTIPLEXED"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_DEDICATED: + reason = "STATUS_LOG_DEDICATED"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_ARCHIVE_NOT_IN_PROGRESS: + reason = "STATUS_LOG_ARCHIVE_NOT_IN_PROGRESS"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_ARCHIVE_IN_PROGRESS: + reason = "STATUS_LOG_ARCHIVE_IN_PROGRESS"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_EPHEMERAL: + reason = "STATUS_LOG_EPHEMERAL"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_NOT_ENOUGH_CONTAINERS: + reason = "STATUS_LOG_NOT_ENOUGH_CONTAINERS"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_CLIENT_ALREADY_REGISTERED: + reason = "STATUS_LOG_CLIENT_ALREADY_REGISTERED"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_CLIENT_NOT_REGISTERED: + reason = "STATUS_LOG_CLIENT_NOT_REGISTERED"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_FULL_HANDLER_IN_PROGRESS: + reason = "STATUS_LOG_FULL_HANDLER_IN_PROGRESS"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_CONTAINER_READ_FAILED: + reason = "STATUS_LOG_CONTAINER_READ_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_CONTAINER_WRITE_FAILED: + reason = "STATUS_LOG_CONTAINER_WRITE_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_CONTAINER_OPEN_FAILED: + reason = "STATUS_LOG_CONTAINER_OPEN_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_CONTAINER_STATE_INVALID: + reason = "STATUS_LOG_CONTAINER_STATE_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_STATE_INVALID: + reason = "STATUS_LOG_STATE_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_PINNED: + reason = "STATUS_LOG_PINNED"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_METADATA_FLUSH_FAILED: + reason = "STATUS_LOG_METADATA_FLUSH_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_INCONSISTENT_SECURITY: + reason = "STATUS_LOG_INCONSISTENT_SECURITY"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_APPENDED_FLUSH_FAILED: + reason = "STATUS_LOG_APPENDED_FLUSH_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_LOG_PINNED_RESERVATION: + reason = "STATUS_LOG_PINNED_RESERVATION"; + break; + case MD_NTSTATUS_WIN_STATUS_VIDEO_HUNG_DISPLAY_DRIVER_THREAD: + reason = "STATUS_VIDEO_HUNG_DISPLAY_DRIVER_THREAD"; + break; + case MD_NTSTATUS_WIN_STATUS_FLT_NO_HANDLER_DEFINED: + reason = "STATUS_FLT_NO_HANDLER_DEFINED"; + break; + case MD_NTSTATUS_WIN_STATUS_FLT_CONTEXT_ALREADY_DEFINED: + reason = "STATUS_FLT_CONTEXT_ALREADY_DEFINED"; + break; + case MD_NTSTATUS_WIN_STATUS_FLT_INVALID_ASYNCHRONOUS_REQUEST: + reason = "STATUS_FLT_INVALID_ASYNCHRONOUS_REQUEST"; + break; + case MD_NTSTATUS_WIN_STATUS_FLT_DISALLOW_FAST_IO: + reason = "STATUS_FLT_DISALLOW_FAST_IO"; + break; + case MD_NTSTATUS_WIN_STATUS_FLT_INVALID_NAME_REQUEST: + reason = "STATUS_FLT_INVALID_NAME_REQUEST"; + break; + case MD_NTSTATUS_WIN_STATUS_FLT_NOT_SAFE_TO_POST_OPERATION: + reason = "STATUS_FLT_NOT_SAFE_TO_POST_OPERATION"; + break; + case MD_NTSTATUS_WIN_STATUS_FLT_NOT_INITIALIZED: + reason = "STATUS_FLT_NOT_INITIALIZED"; + break; + case MD_NTSTATUS_WIN_STATUS_FLT_FILTER_NOT_READY: + reason = "STATUS_FLT_FILTER_NOT_READY"; + break; + case MD_NTSTATUS_WIN_STATUS_FLT_POST_OPERATION_CLEANUP: + reason = "STATUS_FLT_POST_OPERATION_CLEANUP"; + break; + case MD_NTSTATUS_WIN_STATUS_FLT_INTERNAL_ERROR: + reason = "STATUS_FLT_INTERNAL_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_FLT_DELETING_OBJECT: + reason = "STATUS_FLT_DELETING_OBJECT"; + break; + case MD_NTSTATUS_WIN_STATUS_FLT_MUST_BE_NONPAGED_POOL: + reason = "STATUS_FLT_MUST_BE_NONPAGED_POOL"; + break; + case MD_NTSTATUS_WIN_STATUS_FLT_DUPLICATE_ENTRY: + reason = "STATUS_FLT_DUPLICATE_ENTRY"; + break; + case MD_NTSTATUS_WIN_STATUS_FLT_CBDQ_DISABLED: + reason = "STATUS_FLT_CBDQ_DISABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_FLT_DO_NOT_ATTACH: + reason = "STATUS_FLT_DO_NOT_ATTACH"; + break; + case MD_NTSTATUS_WIN_STATUS_FLT_DO_NOT_DETACH: + reason = "STATUS_FLT_DO_NOT_DETACH"; + break; + case MD_NTSTATUS_WIN_STATUS_FLT_INSTANCE_ALTITUDE_COLLISION: + reason = "STATUS_FLT_INSTANCE_ALTITUDE_COLLISION"; + break; + case MD_NTSTATUS_WIN_STATUS_FLT_INSTANCE_NAME_COLLISION: + reason = "STATUS_FLT_INSTANCE_NAME_COLLISION"; + break; + case MD_NTSTATUS_WIN_STATUS_FLT_FILTER_NOT_FOUND: + reason = "STATUS_FLT_FILTER_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_FLT_VOLUME_NOT_FOUND: + reason = "STATUS_FLT_VOLUME_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_FLT_INSTANCE_NOT_FOUND: + reason = "STATUS_FLT_INSTANCE_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_FLT_CONTEXT_ALLOCATION_NOT_FOUND: + reason = "STATUS_FLT_CONTEXT_ALLOCATION_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_FLT_INVALID_CONTEXT_REGISTRATION: + reason = "STATUS_FLT_INVALID_CONTEXT_REGISTRATION"; + break; + case MD_NTSTATUS_WIN_STATUS_FLT_NAME_CACHE_MISS: + reason = "STATUS_FLT_NAME_CACHE_MISS"; + break; + case MD_NTSTATUS_WIN_STATUS_FLT_NO_DEVICE_OBJECT: + reason = "STATUS_FLT_NO_DEVICE_OBJECT"; + break; + case MD_NTSTATUS_WIN_STATUS_FLT_VOLUME_ALREADY_MOUNTED: + reason = "STATUS_FLT_VOLUME_ALREADY_MOUNTED"; + break; + case MD_NTSTATUS_WIN_STATUS_FLT_ALREADY_ENLISTED: + reason = "STATUS_FLT_ALREADY_ENLISTED"; + break; + case MD_NTSTATUS_WIN_STATUS_FLT_CONTEXT_ALREADY_LINKED: + reason = "STATUS_FLT_CONTEXT_ALREADY_LINKED"; + break; + case MD_NTSTATUS_WIN_STATUS_FLT_NO_WAITER_FOR_REPLY: + reason = "STATUS_FLT_NO_WAITER_FOR_REPLY"; + break; + case MD_NTSTATUS_WIN_STATUS_FLT_REGISTRATION_BUSY: + reason = "STATUS_FLT_REGISTRATION_BUSY"; + break; + case MD_NTSTATUS_WIN_STATUS_MONITOR_NO_DESCRIPTOR: + reason = "STATUS_MONITOR_NO_DESCRIPTOR"; + break; + case MD_NTSTATUS_WIN_STATUS_MONITOR_UNKNOWN_DESCRIPTOR_FORMAT: + reason = "STATUS_MONITOR_UNKNOWN_DESCRIPTOR_FORMAT"; + break; + case MD_NTSTATUS_WIN_STATUS_MONITOR_INVALID_DESCRIPTOR_CHECKSUM: + reason = "STATUS_MONITOR_INVALID_DESCRIPTOR_CHECKSUM"; + break; + case MD_NTSTATUS_WIN_STATUS_MONITOR_INVALID_STANDARD_TIMING_BLOCK: + reason = "STATUS_MONITOR_INVALID_STANDARD_TIMING_BLOCK"; + break; + case MD_NTSTATUS_WIN_STATUS_MONITOR_WMI_DATABLOCK_REGISTRATION_FAILED: + reason = "STATUS_MONITOR_WMI_DATABLOCK_REGISTRATION_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_MONITOR_INVALID_SERIAL_NUMBER_MONDSC_BLOCK: + reason = "STATUS_MONITOR_INVALID_SERIAL_NUMBER_MONDSC_BLOCK"; + break; + case MD_NTSTATUS_WIN_STATUS_MONITOR_INVALID_USER_FRIENDLY_MONDSC_BLOCK: + reason = "STATUS_MONITOR_INVALID_USER_FRIENDLY_MONDSC_BLOCK"; + break; + case MD_NTSTATUS_WIN_STATUS_MONITOR_NO_MORE_DESCRIPTOR_DATA: + reason = "STATUS_MONITOR_NO_MORE_DESCRIPTOR_DATA"; + break; + case MD_NTSTATUS_WIN_STATUS_MONITOR_INVALID_DETAILED_TIMING_BLOCK: + reason = "STATUS_MONITOR_INVALID_DETAILED_TIMING_BLOCK"; + break; + case MD_NTSTATUS_WIN_STATUS_MONITOR_INVALID_MANUFACTURE_DATE: + reason = "STATUS_MONITOR_INVALID_MANUFACTURE_DATE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_NOT_EXCLUSIVE_MODE_OWNER: + reason = "STATUS_GRAPHICS_NOT_EXCLUSIVE_MODE_OWNER"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INSUFFICIENT_DMA_BUFFER: + reason = "STATUS_GRAPHICS_INSUFFICIENT_DMA_BUFFER"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_DISPLAY_ADAPTER: + reason = "STATUS_GRAPHICS_INVALID_DISPLAY_ADAPTER"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_ADAPTER_WAS_RESET: + reason = "STATUS_GRAPHICS_ADAPTER_WAS_RESET"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_DRIVER_MODEL: + reason = "STATUS_GRAPHICS_INVALID_DRIVER_MODEL"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_PRESENT_MODE_CHANGED: + reason = "STATUS_GRAPHICS_PRESENT_MODE_CHANGED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_PRESENT_OCCLUDED: + reason = "STATUS_GRAPHICS_PRESENT_OCCLUDED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_PRESENT_DENIED: + reason = "STATUS_GRAPHICS_PRESENT_DENIED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_CANNOTCOLORCONVERT: + reason = "STATUS_GRAPHICS_CANNOTCOLORCONVERT"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_DRIVER_MISMATCH: + reason = "STATUS_GRAPHICS_DRIVER_MISMATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_PRESENT_REDIRECTION_DISABLED: + reason = "STATUS_GRAPHICS_PRESENT_REDIRECTION_DISABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_PRESENT_UNOCCLUDED: + reason = "STATUS_GRAPHICS_PRESENT_UNOCCLUDED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_WINDOWDC_NOT_AVAILABLE: + reason = "STATUS_GRAPHICS_WINDOWDC_NOT_AVAILABLE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_WINDOWLESS_PRESENT_DISABLED: + reason = "STATUS_GRAPHICS_WINDOWLESS_PRESENT_DISABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_NO_VIDEO_MEMORY: + reason = "STATUS_GRAPHICS_NO_VIDEO_MEMORY"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_CANT_LOCK_MEMORY: + reason = "STATUS_GRAPHICS_CANT_LOCK_MEMORY"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_ALLOCATION_BUSY: + reason = "STATUS_GRAPHICS_ALLOCATION_BUSY"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_TOO_MANY_REFERENCES: + reason = "STATUS_GRAPHICS_TOO_MANY_REFERENCES"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_TRY_AGAIN_LATER: + reason = "STATUS_GRAPHICS_TRY_AGAIN_LATER"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_TRY_AGAIN_NOW: + reason = "STATUS_GRAPHICS_TRY_AGAIN_NOW"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_ALLOCATION_INVALID: + reason = "STATUS_GRAPHICS_ALLOCATION_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE: + reason = "STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNSUPPORTED: + reason = "STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNSUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_CANT_EVICT_PINNED_ALLOCATION: + reason = "STATUS_GRAPHICS_CANT_EVICT_PINNED_ALLOCATION"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_ALLOCATION_USAGE: + reason = "STATUS_GRAPHICS_INVALID_ALLOCATION_USAGE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_CANT_RENDER_LOCKED_ALLOCATION: + reason = "STATUS_GRAPHICS_CANT_RENDER_LOCKED_ALLOCATION"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_ALLOCATION_CLOSED: + reason = "STATUS_GRAPHICS_ALLOCATION_CLOSED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_ALLOCATION_INSTANCE: + reason = "STATUS_GRAPHICS_INVALID_ALLOCATION_INSTANCE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_ALLOCATION_HANDLE: + reason = "STATUS_GRAPHICS_INVALID_ALLOCATION_HANDLE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_WRONG_ALLOCATION_DEVICE: + reason = "STATUS_GRAPHICS_WRONG_ALLOCATION_DEVICE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_ALLOCATION_CONTENT_LOST: + reason = "STATUS_GRAPHICS_ALLOCATION_CONTENT_LOST"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_GPU_EXCEPTION_ON_DEVICE: + reason = "STATUS_GRAPHICS_GPU_EXCEPTION_ON_DEVICE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_VIDPN_TOPOLOGY: + reason = "STATUS_GRAPHICS_INVALID_VIDPN_TOPOLOGY"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_VIDPN_TOPOLOGY_NOT_SUPPORTED: + reason = "STATUS_GRAPHICS_VIDPN_TOPOLOGY_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_VIDPN_TOPOLOGY_CURRENTLY_NOT_SUPPORTED: + reason = "STATUS_GRAPHICS_VIDPN_TOPOLOGY_CURRENTLY_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_VIDPN: + reason = "STATUS_GRAPHICS_INVALID_VIDPN"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE: + reason = "STATUS_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET: + reason = "STATUS_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_VIDPN_MODALITY_NOT_SUPPORTED: + reason = "STATUS_GRAPHICS_VIDPN_MODALITY_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_VIDPN_SOURCEMODESET: + reason = "STATUS_GRAPHICS_INVALID_VIDPN_SOURCEMODESET"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_VIDPN_TARGETMODESET: + reason = "STATUS_GRAPHICS_INVALID_VIDPN_TARGETMODESET"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_FREQUENCY: + reason = "STATUS_GRAPHICS_INVALID_FREQUENCY"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_ACTIVE_REGION: + reason = "STATUS_GRAPHICS_INVALID_ACTIVE_REGION"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_TOTAL_REGION: + reason = "STATUS_GRAPHICS_INVALID_TOTAL_REGION"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE_MODE: + reason = "STATUS_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE_MODE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET_MODE: + reason = "STATUS_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET_MODE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_PINNED_MODE_MUST_REMAIN_IN_SET: + reason = "STATUS_GRAPHICS_PINNED_MODE_MUST_REMAIN_IN_SET"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_PATH_ALREADY_IN_TOPOLOGY: + reason = "STATUS_GRAPHICS_PATH_ALREADY_IN_TOPOLOGY"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_MODE_ALREADY_IN_MODESET: + reason = "STATUS_GRAPHICS_MODE_ALREADY_IN_MODESET"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_VIDEOPRESENTSOURCESET: + reason = "STATUS_GRAPHICS_INVALID_VIDEOPRESENTSOURCESET"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_VIDEOPRESENTTARGETSET: + reason = "STATUS_GRAPHICS_INVALID_VIDEOPRESENTTARGETSET"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_SOURCE_ALREADY_IN_SET: + reason = "STATUS_GRAPHICS_SOURCE_ALREADY_IN_SET"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_TARGET_ALREADY_IN_SET: + reason = "STATUS_GRAPHICS_TARGET_ALREADY_IN_SET"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_VIDPN_PRESENT_PATH: + reason = "STATUS_GRAPHICS_INVALID_VIDPN_PRESENT_PATH"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_NO_RECOMMENDED_VIDPN_TOPOLOGY: + reason = "STATUS_GRAPHICS_NO_RECOMMENDED_VIDPN_TOPOLOGY"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGESET: + reason = "STATUS_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGESET"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE: + reason = "STATUS_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_FREQUENCYRANGE_NOT_IN_SET: + reason = "STATUS_GRAPHICS_FREQUENCYRANGE_NOT_IN_SET"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_FREQUENCYRANGE_ALREADY_IN_SET: + reason = "STATUS_GRAPHICS_FREQUENCYRANGE_ALREADY_IN_SET"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_STALE_MODESET: + reason = "STATUS_GRAPHICS_STALE_MODESET"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_MONITOR_SOURCEMODESET: + reason = "STATUS_GRAPHICS_INVALID_MONITOR_SOURCEMODESET"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_MONITOR_SOURCE_MODE: + reason = "STATUS_GRAPHICS_INVALID_MONITOR_SOURCE_MODE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_NO_RECOMMENDED_FUNCTIONAL_VIDPN: + reason = "STATUS_GRAPHICS_NO_RECOMMENDED_FUNCTIONAL_VIDPN"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_MODE_ID_MUST_BE_UNIQUE: + reason = "STATUS_GRAPHICS_MODE_ID_MUST_BE_UNIQUE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_EMPTY_ADAPTER_MONITOR_MODE_SUPPORT_INTERSECTION: + reason = "STATUS_GRAPHICS_EMPTY_ADAPTER_MONITOR_MODE_SUPPORT_INTERSECTION"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_VIDEO_PRESENT_TARGETS_LESS_THAN_SOURCES: + reason = "STATUS_GRAPHICS_VIDEO_PRESENT_TARGETS_LESS_THAN_SOURCES"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_PATH_NOT_IN_TOPOLOGY: + reason = "STATUS_GRAPHICS_PATH_NOT_IN_TOPOLOGY"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_SOURCE: + reason = "STATUS_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_SOURCE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_TARGET: + reason = "STATUS_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_TARGET"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_MONITORDESCRIPTORSET: + reason = "STATUS_GRAPHICS_INVALID_MONITORDESCRIPTORSET"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_MONITORDESCRIPTOR: + reason = "STATUS_GRAPHICS_INVALID_MONITORDESCRIPTOR"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_MONITORDESCRIPTOR_NOT_IN_SET: + reason = "STATUS_GRAPHICS_MONITORDESCRIPTOR_NOT_IN_SET"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_MONITORDESCRIPTOR_ALREADY_IN_SET: + reason = "STATUS_GRAPHICS_MONITORDESCRIPTOR_ALREADY_IN_SET"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_MONITORDESCRIPTOR_ID_MUST_BE_UNIQUE: + reason = "STATUS_GRAPHICS_MONITORDESCRIPTOR_ID_MUST_BE_UNIQUE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_VIDPN_TARGET_SUBSET_TYPE: + reason = "STATUS_GRAPHICS_INVALID_VIDPN_TARGET_SUBSET_TYPE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_RESOURCES_NOT_RELATED: + reason = "STATUS_GRAPHICS_RESOURCES_NOT_RELATED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_SOURCE_ID_MUST_BE_UNIQUE: + reason = "STATUS_GRAPHICS_SOURCE_ID_MUST_BE_UNIQUE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_TARGET_ID_MUST_BE_UNIQUE: + reason = "STATUS_GRAPHICS_TARGET_ID_MUST_BE_UNIQUE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_NO_AVAILABLE_VIDPN_TARGET: + reason = "STATUS_GRAPHICS_NO_AVAILABLE_VIDPN_TARGET"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_MONITOR_COULD_NOT_BE_ASSOCIATED_WITH_ADAPTER: + reason = "STATUS_GRAPHICS_MONITOR_COULD_NOT_BE_ASSOCIATED_WITH_ADAPTER"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_NO_VIDPNMGR: + reason = "STATUS_GRAPHICS_NO_VIDPNMGR"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_NO_ACTIVE_VIDPN: + reason = "STATUS_GRAPHICS_NO_ACTIVE_VIDPN"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_STALE_VIDPN_TOPOLOGY: + reason = "STATUS_GRAPHICS_STALE_VIDPN_TOPOLOGY"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_MONITOR_NOT_CONNECTED: + reason = "STATUS_GRAPHICS_MONITOR_NOT_CONNECTED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_SOURCE_NOT_IN_TOPOLOGY: + reason = "STATUS_GRAPHICS_SOURCE_NOT_IN_TOPOLOGY"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_PRIMARYSURFACE_SIZE: + reason = "STATUS_GRAPHICS_INVALID_PRIMARYSURFACE_SIZE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_VISIBLEREGION_SIZE: + reason = "STATUS_GRAPHICS_INVALID_VISIBLEREGION_SIZE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_STRIDE: + reason = "STATUS_GRAPHICS_INVALID_STRIDE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_PIXELFORMAT: + reason = "STATUS_GRAPHICS_INVALID_PIXELFORMAT"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_COLORBASIS: + reason = "STATUS_GRAPHICS_INVALID_COLORBASIS"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_PIXELVALUEACCESSMODE: + reason = "STATUS_GRAPHICS_INVALID_PIXELVALUEACCESSMODE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_TARGET_NOT_IN_TOPOLOGY: + reason = "STATUS_GRAPHICS_TARGET_NOT_IN_TOPOLOGY"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_NO_DISPLAY_MODE_MANAGEMENT_SUPPORT: + reason = "STATUS_GRAPHICS_NO_DISPLAY_MODE_MANAGEMENT_SUPPORT"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE: + reason = "STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_CANT_ACCESS_ACTIVE_VIDPN: + reason = "STATUS_GRAPHICS_CANT_ACCESS_ACTIVE_VIDPN"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_PATH_IMPORTANCE_ORDINAL: + reason = "STATUS_GRAPHICS_INVALID_PATH_IMPORTANCE_ORDINAL"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_PATH_CONTENT_GEOMETRY_TRANSFORMATION: + reason = "STATUS_GRAPHICS_INVALID_PATH_CONTENT_GEOMETRY_TRANSFORMATION"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_PATH_CONTENT_GEOMETRY_TRANSFORMATION_NOT_SUPPORTED: + reason = "STATUS_GRAPHICS_PATH_CONTENT_GEOMETRY_TRANSFORMATION_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_GAMMA_RAMP: + reason = "STATUS_GRAPHICS_INVALID_GAMMA_RAMP"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_GAMMA_RAMP_NOT_SUPPORTED: + reason = "STATUS_GRAPHICS_GAMMA_RAMP_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_MULTISAMPLING_NOT_SUPPORTED: + reason = "STATUS_GRAPHICS_MULTISAMPLING_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_MODE_NOT_IN_MODESET: + reason = "STATUS_GRAPHICS_MODE_NOT_IN_MODESET"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_VIDPN_TOPOLOGY_RECOMMENDATION_REASON: + reason = "STATUS_GRAPHICS_INVALID_VIDPN_TOPOLOGY_RECOMMENDATION_REASON"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_PATH_CONTENT_TYPE: + reason = "STATUS_GRAPHICS_INVALID_PATH_CONTENT_TYPE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_COPYPROTECTION_TYPE: + reason = "STATUS_GRAPHICS_INVALID_COPYPROTECTION_TYPE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_UNASSIGNED_MODESET_ALREADY_EXISTS: + reason = "STATUS_GRAPHICS_UNASSIGNED_MODESET_ALREADY_EXISTS"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_SCANLINE_ORDERING: + reason = "STATUS_GRAPHICS_INVALID_SCANLINE_ORDERING"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_TOPOLOGY_CHANGES_NOT_ALLOWED: + reason = "STATUS_GRAPHICS_TOPOLOGY_CHANGES_NOT_ALLOWED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_NO_AVAILABLE_IMPORTANCE_ORDINALS: + reason = "STATUS_GRAPHICS_NO_AVAILABLE_IMPORTANCE_ORDINALS"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INCOMPATIBLE_PRIVATE_FORMAT: + reason = "STATUS_GRAPHICS_INCOMPATIBLE_PRIVATE_FORMAT"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_MODE_PRUNING_ALGORITHM: + reason = "STATUS_GRAPHICS_INVALID_MODE_PRUNING_ALGORITHM"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_MONITOR_CAPABILITY_ORIGIN: + reason = "STATUS_GRAPHICS_INVALID_MONITOR_CAPABILITY_ORIGIN"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE_CONSTRAINT: + reason = "STATUS_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE_CONSTRAINT"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_MAX_NUM_PATHS_REACHED: + reason = "STATUS_GRAPHICS_MAX_NUM_PATHS_REACHED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_CANCEL_VIDPN_TOPOLOGY_AUGMENTATION: + reason = "STATUS_GRAPHICS_CANCEL_VIDPN_TOPOLOGY_AUGMENTATION"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_CLIENT_TYPE: + reason = "STATUS_GRAPHICS_INVALID_CLIENT_TYPE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_CLIENTVIDPN_NOT_SET: + reason = "STATUS_GRAPHICS_CLIENTVIDPN_NOT_SET"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_SPECIFIED_CHILD_ALREADY_CONNECTED: + reason = "STATUS_GRAPHICS_SPECIFIED_CHILD_ALREADY_CONNECTED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_CHILD_DESCRIPTOR_NOT_SUPPORTED: + reason = "STATUS_GRAPHICS_CHILD_DESCRIPTOR_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_NOT_A_LINKED_ADAPTER: + reason = "STATUS_GRAPHICS_NOT_A_LINKED_ADAPTER"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_LEADLINK_NOT_ENUMERATED: + reason = "STATUS_GRAPHICS_LEADLINK_NOT_ENUMERATED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_CHAINLINKS_NOT_ENUMERATED: + reason = "STATUS_GRAPHICS_CHAINLINKS_NOT_ENUMERATED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_ADAPTER_CHAIN_NOT_READY: + reason = "STATUS_GRAPHICS_ADAPTER_CHAIN_NOT_READY"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_CHAINLINKS_NOT_STARTED: + reason = "STATUS_GRAPHICS_CHAINLINKS_NOT_STARTED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_CHAINLINKS_NOT_POWERED_ON: + reason = "STATUS_GRAPHICS_CHAINLINKS_NOT_POWERED_ON"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INCONSISTENT_DEVICE_LINK_STATE: + reason = "STATUS_GRAPHICS_INCONSISTENT_DEVICE_LINK_STATE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_NOT_POST_DEVICE_DRIVER: + reason = "STATUS_GRAPHICS_NOT_POST_DEVICE_DRIVER"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_ADAPTER_ACCESS_NOT_EXCLUDED: + reason = "STATUS_GRAPHICS_ADAPTER_ACCESS_NOT_EXCLUDED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_NOT_SUPPORTED: + reason = "STATUS_GRAPHICS_OPM_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_COPP_NOT_SUPPORTED: + reason = "STATUS_GRAPHICS_COPP_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_UAB_NOT_SUPPORTED: + reason = "STATUS_GRAPHICS_UAB_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_INVALID_ENCRYPTED_PARAMETERS: + reason = "STATUS_GRAPHICS_OPM_INVALID_ENCRYPTED_PARAMETERS"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_NO_PROTECTED_OUTPUTS_EXIST: + reason = "STATUS_GRAPHICS_OPM_NO_PROTECTED_OUTPUTS_EXIST"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_INTERNAL_ERROR: + reason = "STATUS_GRAPHICS_OPM_INTERNAL_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_INVALID_HANDLE: + reason = "STATUS_GRAPHICS_OPM_INVALID_HANDLE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_PVP_INVALID_CERTIFICATE_LENGTH: + reason = "STATUS_GRAPHICS_PVP_INVALID_CERTIFICATE_LENGTH"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_SPANNING_MODE_ENABLED: + reason = "STATUS_GRAPHICS_OPM_SPANNING_MODE_ENABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_THEATER_MODE_ENABLED: + reason = "STATUS_GRAPHICS_OPM_THEATER_MODE_ENABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_PVP_HFS_FAILED: + reason = "STATUS_GRAPHICS_PVP_HFS_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_INVALID_SRM: + reason = "STATUS_GRAPHICS_OPM_INVALID_SRM"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_HDCP: + reason = "STATUS_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_HDCP"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_ACP: + reason = "STATUS_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_ACP"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_CGMSA: + reason = "STATUS_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_CGMSA"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_HDCP_SRM_NEVER_SET: + reason = "STATUS_GRAPHICS_OPM_HDCP_SRM_NEVER_SET"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_RESOLUTION_TOO_HIGH: + reason = "STATUS_GRAPHICS_OPM_RESOLUTION_TOO_HIGH"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_ALL_HDCP_HARDWARE_ALREADY_IN_USE: + reason = "STATUS_GRAPHICS_OPM_ALL_HDCP_HARDWARE_ALREADY_IN_USE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_PROTECTED_OUTPUT_NO_LONGER_EXISTS: + reason = "STATUS_GRAPHICS_OPM_PROTECTED_OUTPUT_NO_LONGER_EXISTS"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_PROTECTED_OUTPUT_DOES_NOT_HAVE_COPP_SEMANTICS: + reason = "STATUS_GRAPHICS_OPM_PROTECTED_OUTPUT_DOES_NOT_HAVE_COPP_SEMANTICS"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_INVALID_INFORMATION_REQUEST: + reason = "STATUS_GRAPHICS_OPM_INVALID_INFORMATION_REQUEST"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_DRIVER_INTERNAL_ERROR: + reason = "STATUS_GRAPHICS_OPM_DRIVER_INTERNAL_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_PROTECTED_OUTPUT_DOES_NOT_HAVE_OPM_SEMANTICS: + reason = "STATUS_GRAPHICS_OPM_PROTECTED_OUTPUT_DOES_NOT_HAVE_OPM_SEMANTICS"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_SIGNALING_NOT_SUPPORTED: + reason = "STATUS_GRAPHICS_OPM_SIGNALING_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_OPM_INVALID_CONFIGURATION_REQUEST: + reason = "STATUS_GRAPHICS_OPM_INVALID_CONFIGURATION_REQUEST"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_I2C_NOT_SUPPORTED: + reason = "STATUS_GRAPHICS_I2C_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_I2C_DEVICE_DOES_NOT_EXIST: + reason = "STATUS_GRAPHICS_I2C_DEVICE_DOES_NOT_EXIST"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_I2C_ERROR_TRANSMITTING_DATA: + reason = "STATUS_GRAPHICS_I2C_ERROR_TRANSMITTING_DATA"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_I2C_ERROR_RECEIVING_DATA: + reason = "STATUS_GRAPHICS_I2C_ERROR_RECEIVING_DATA"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_DDCCI_VCP_NOT_SUPPORTED: + reason = "STATUS_GRAPHICS_DDCCI_VCP_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_DDCCI_INVALID_DATA: + reason = "STATUS_GRAPHICS_DDCCI_INVALID_DATA"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_DDCCI_MONITOR_RETURNED_INVALID_TIMING_STATUS_BYTE: + reason = "STATUS_GRAPHICS_DDCCI_MONITOR_RETURNED_INVALID_TIMING_STATUS_BYTE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_DDCCI_INVALID_CAPABILITIES_STRING: + reason = "STATUS_GRAPHICS_DDCCI_INVALID_CAPABILITIES_STRING"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_MCA_INTERNAL_ERROR: + reason = "STATUS_GRAPHICS_MCA_INTERNAL_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_DDCCI_INVALID_MESSAGE_COMMAND: + reason = "STATUS_GRAPHICS_DDCCI_INVALID_MESSAGE_COMMAND"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_DDCCI_INVALID_MESSAGE_LENGTH: + reason = "STATUS_GRAPHICS_DDCCI_INVALID_MESSAGE_LENGTH"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_DDCCI_INVALID_MESSAGE_CHECKSUM: + reason = "STATUS_GRAPHICS_DDCCI_INVALID_MESSAGE_CHECKSUM"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_PHYSICAL_MONITOR_HANDLE: + reason = "STATUS_GRAPHICS_INVALID_PHYSICAL_MONITOR_HANDLE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_MONITOR_NO_LONGER_EXISTS: + reason = "STATUS_GRAPHICS_MONITOR_NO_LONGER_EXISTS"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_ONLY_CONSOLE_SESSION_SUPPORTED: + reason = "STATUS_GRAPHICS_ONLY_CONSOLE_SESSION_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_NO_DISPLAY_DEVICE_CORRESPONDS_TO_NAME: + reason = "STATUS_GRAPHICS_NO_DISPLAY_DEVICE_CORRESPONDS_TO_NAME"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_DISPLAY_DEVICE_NOT_ATTACHED_TO_DESKTOP: + reason = "STATUS_GRAPHICS_DISPLAY_DEVICE_NOT_ATTACHED_TO_DESKTOP"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_MIRRORING_DEVICES_NOT_SUPPORTED: + reason = "STATUS_GRAPHICS_MIRRORING_DEVICES_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INVALID_POINTER: + reason = "STATUS_GRAPHICS_INVALID_POINTER"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_NO_MONITORS_CORRESPOND_TO_DISPLAY_DEVICE: + reason = "STATUS_GRAPHICS_NO_MONITORS_CORRESPOND_TO_DISPLAY_DEVICE"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_PARAMETER_ARRAY_TOO_SMALL: + reason = "STATUS_GRAPHICS_PARAMETER_ARRAY_TOO_SMALL"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_INTERNAL_ERROR: + reason = "STATUS_GRAPHICS_INTERNAL_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_GRAPHICS_SESSION_TYPE_CHANGE_IN_PROGRESS: + reason = "STATUS_GRAPHICS_SESSION_TYPE_CHANGE_IN_PROGRESS"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_LOCKED_VOLUME: + reason = "STATUS_FVE_LOCKED_VOLUME"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_NOT_ENCRYPTED: + reason = "STATUS_FVE_NOT_ENCRYPTED"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_BAD_INFORMATION: + reason = "STATUS_FVE_BAD_INFORMATION"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_TOO_SMALL: + reason = "STATUS_FVE_TOO_SMALL"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_FAILED_WRONG_FS: + reason = "STATUS_FVE_FAILED_WRONG_FS"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_BAD_PARTITION_SIZE: + reason = "STATUS_FVE_BAD_PARTITION_SIZE"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_FS_NOT_EXTENDED: + reason = "STATUS_FVE_FS_NOT_EXTENDED"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_FS_MOUNTED: + reason = "STATUS_FVE_FS_MOUNTED"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_NO_LICENSE: + reason = "STATUS_FVE_NO_LICENSE"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_ACTION_NOT_ALLOWED: + reason = "STATUS_FVE_ACTION_NOT_ALLOWED"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_BAD_DATA: + reason = "STATUS_FVE_BAD_DATA"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_VOLUME_NOT_BOUND: + reason = "STATUS_FVE_VOLUME_NOT_BOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_NOT_DATA_VOLUME: + reason = "STATUS_FVE_NOT_DATA_VOLUME"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_CONV_READ_ERROR: + reason = "STATUS_FVE_CONV_READ_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_CONV_WRITE_ERROR: + reason = "STATUS_FVE_CONV_WRITE_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_OVERLAPPED_UPDATE: + reason = "STATUS_FVE_OVERLAPPED_UPDATE"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_FAILED_SECTOR_SIZE: + reason = "STATUS_FVE_FAILED_SECTOR_SIZE"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_FAILED_AUTHENTICATION: + reason = "STATUS_FVE_FAILED_AUTHENTICATION"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_NOT_OS_VOLUME: + reason = "STATUS_FVE_NOT_OS_VOLUME"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_KEYFILE_NOT_FOUND: + reason = "STATUS_FVE_KEYFILE_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_KEYFILE_INVALID: + reason = "STATUS_FVE_KEYFILE_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_KEYFILE_NO_VMK: + reason = "STATUS_FVE_KEYFILE_NO_VMK"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_TPM_DISABLED: + reason = "STATUS_FVE_TPM_DISABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_TPM_SRK_AUTH_NOT_ZERO: + reason = "STATUS_FVE_TPM_SRK_AUTH_NOT_ZERO"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_TPM_INVALID_PCR: + reason = "STATUS_FVE_TPM_INVALID_PCR"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_TPM_NO_VMK: + reason = "STATUS_FVE_TPM_NO_VMK"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_PIN_INVALID: + reason = "STATUS_FVE_PIN_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_AUTH_INVALID_APPLICATION: + reason = "STATUS_FVE_AUTH_INVALID_APPLICATION"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_AUTH_INVALID_CONFIG: + reason = "STATUS_FVE_AUTH_INVALID_CONFIG"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_DEBUGGER_ENABLED: + reason = "STATUS_FVE_DEBUGGER_ENABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_DRY_RUN_FAILED: + reason = "STATUS_FVE_DRY_RUN_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_BAD_METADATA_POINTER: + reason = "STATUS_FVE_BAD_METADATA_POINTER"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_OLD_METADATA_COPY: + reason = "STATUS_FVE_OLD_METADATA_COPY"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_REBOOT_REQUIRED: + reason = "STATUS_FVE_REBOOT_REQUIRED"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_RAW_ACCESS: + reason = "STATUS_FVE_RAW_ACCESS"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_RAW_BLOCKED: + reason = "STATUS_FVE_RAW_BLOCKED"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_NO_AUTOUNLOCK_MASTER_KEY: + reason = "STATUS_FVE_NO_AUTOUNLOCK_MASTER_KEY"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_MOR_FAILED: + reason = "STATUS_FVE_MOR_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_NO_FEATURE_LICENSE: + reason = "STATUS_FVE_NO_FEATURE_LICENSE"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_POLICY_USER_DISABLE_RDV_NOT_ALLOWED: + reason = "STATUS_FVE_POLICY_USER_DISABLE_RDV_NOT_ALLOWED"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_CONV_RECOVERY_FAILED: + reason = "STATUS_FVE_CONV_RECOVERY_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_VIRTUALIZED_SPACE_TOO_BIG: + reason = "STATUS_FVE_VIRTUALIZED_SPACE_TOO_BIG"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_INVALID_DATUM_TYPE: + reason = "STATUS_FVE_INVALID_DATUM_TYPE"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_VOLUME_TOO_SMALL: + reason = "STATUS_FVE_VOLUME_TOO_SMALL"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_ENH_PIN_INVALID: + reason = "STATUS_FVE_ENH_PIN_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_FULL_ENCRYPTION_NOT_ALLOWED_ON_TP_STORAGE: + reason = "STATUS_FVE_FULL_ENCRYPTION_NOT_ALLOWED_ON_TP_STORAGE"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_WIPE_NOT_ALLOWED_ON_TP_STORAGE: + reason = "STATUS_FVE_WIPE_NOT_ALLOWED_ON_TP_STORAGE"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_NOT_ALLOWED_ON_CSV_STACK: + reason = "STATUS_FVE_NOT_ALLOWED_ON_CSV_STACK"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_NOT_ALLOWED_ON_CLUSTER: + reason = "STATUS_FVE_NOT_ALLOWED_ON_CLUSTER"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_NOT_ALLOWED_TO_UPGRADE_WHILE_CONVERTING: + reason = "STATUS_FVE_NOT_ALLOWED_TO_UPGRADE_WHILE_CONVERTING"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_WIPE_CANCEL_NOT_APPLICABLE: + reason = "STATUS_FVE_WIPE_CANCEL_NOT_APPLICABLE"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_EDRIVE_DRY_RUN_FAILED: + reason = "STATUS_FVE_EDRIVE_DRY_RUN_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_SECUREBOOT_DISABLED: + reason = "STATUS_FVE_SECUREBOOT_DISABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_SECUREBOOT_CONFIG_CHANGE: + reason = "STATUS_FVE_SECUREBOOT_CONFIG_CHANGE"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_DEVICE_LOCKEDOUT: + reason = "STATUS_FVE_DEVICE_LOCKEDOUT"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_VOLUME_EXTEND_PREVENTS_EOW_DECRYPT: + reason = "STATUS_FVE_VOLUME_EXTEND_PREVENTS_EOW_DECRYPT"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_NOT_DE_VOLUME: + reason = "STATUS_FVE_NOT_DE_VOLUME"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_PROTECTION_DISABLED: + reason = "STATUS_FVE_PROTECTION_DISABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_FVE_PROTECTION_CANNOT_BE_DISABLED: + reason = "STATUS_FVE_PROTECTION_CANNOT_BE_DISABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_CALLOUT_NOT_FOUND: + reason = "STATUS_FWP_CALLOUT_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_CONDITION_NOT_FOUND: + reason = "STATUS_FWP_CONDITION_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_FILTER_NOT_FOUND: + reason = "STATUS_FWP_FILTER_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_LAYER_NOT_FOUND: + reason = "STATUS_FWP_LAYER_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_PROVIDER_NOT_FOUND: + reason = "STATUS_FWP_PROVIDER_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_PROVIDER_CONTEXT_NOT_FOUND: + reason = "STATUS_FWP_PROVIDER_CONTEXT_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_SUBLAYER_NOT_FOUND: + reason = "STATUS_FWP_SUBLAYER_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_NOT_FOUND: + reason = "STATUS_FWP_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_ALREADY_EXISTS: + reason = "STATUS_FWP_ALREADY_EXISTS"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_IN_USE: + reason = "STATUS_FWP_IN_USE"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_DYNAMIC_SESSION_IN_PROGRESS: + reason = "STATUS_FWP_DYNAMIC_SESSION_IN_PROGRESS"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_WRONG_SESSION: + reason = "STATUS_FWP_WRONG_SESSION"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_NO_TXN_IN_PROGRESS: + reason = "STATUS_FWP_NO_TXN_IN_PROGRESS"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_TXN_IN_PROGRESS: + reason = "STATUS_FWP_TXN_IN_PROGRESS"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_TXN_ABORTED: + reason = "STATUS_FWP_TXN_ABORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_SESSION_ABORTED: + reason = "STATUS_FWP_SESSION_ABORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_INCOMPATIBLE_TXN: + reason = "STATUS_FWP_INCOMPATIBLE_TXN"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_TIMEOUT: + reason = "STATUS_FWP_TIMEOUT"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_NET_EVENTS_DISABLED: + reason = "STATUS_FWP_NET_EVENTS_DISABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_INCOMPATIBLE_LAYER: + reason = "STATUS_FWP_INCOMPATIBLE_LAYER"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_KM_CLIENTS_ONLY: + reason = "STATUS_FWP_KM_CLIENTS_ONLY"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_LIFETIME_MISMATCH: + reason = "STATUS_FWP_LIFETIME_MISMATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_BUILTIN_OBJECT: + reason = "STATUS_FWP_BUILTIN_OBJECT"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_TOO_MANY_CALLOUTS: + reason = "STATUS_FWP_TOO_MANY_CALLOUTS"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_NOTIFICATION_DROPPED: + reason = "STATUS_FWP_NOTIFICATION_DROPPED"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_TRAFFIC_MISMATCH: + reason = "STATUS_FWP_TRAFFIC_MISMATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_INCOMPATIBLE_SA_STATE: + reason = "STATUS_FWP_INCOMPATIBLE_SA_STATE"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_NULL_POINTER: + reason = "STATUS_FWP_NULL_POINTER"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_INVALID_ENUMERATOR: + reason = "STATUS_FWP_INVALID_ENUMERATOR"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_INVALID_FLAGS: + reason = "STATUS_FWP_INVALID_FLAGS"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_INVALID_NET_MASK: + reason = "STATUS_FWP_INVALID_NET_MASK"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_INVALID_RANGE: + reason = "STATUS_FWP_INVALID_RANGE"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_INVALID_INTERVAL: + reason = "STATUS_FWP_INVALID_INTERVAL"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_ZERO_LENGTH_ARRAY: + reason = "STATUS_FWP_ZERO_LENGTH_ARRAY"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_NULL_DISPLAY_NAME: + reason = "STATUS_FWP_NULL_DISPLAY_NAME"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_INVALID_ACTION_TYPE: + reason = "STATUS_FWP_INVALID_ACTION_TYPE"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_INVALID_WEIGHT: + reason = "STATUS_FWP_INVALID_WEIGHT"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_MATCH_TYPE_MISMATCH: + reason = "STATUS_FWP_MATCH_TYPE_MISMATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_TYPE_MISMATCH: + reason = "STATUS_FWP_TYPE_MISMATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_OUT_OF_BOUNDS: + reason = "STATUS_FWP_OUT_OF_BOUNDS"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_RESERVED: + reason = "STATUS_FWP_RESERVED"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_DUPLICATE_CONDITION: + reason = "STATUS_FWP_DUPLICATE_CONDITION"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_DUPLICATE_KEYMOD: + reason = "STATUS_FWP_DUPLICATE_KEYMOD"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_ACTION_INCOMPATIBLE_WITH_LAYER: + reason = "STATUS_FWP_ACTION_INCOMPATIBLE_WITH_LAYER"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_ACTION_INCOMPATIBLE_WITH_SUBLAYER: + reason = "STATUS_FWP_ACTION_INCOMPATIBLE_WITH_SUBLAYER"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_CONTEXT_INCOMPATIBLE_WITH_LAYER: + reason = "STATUS_FWP_CONTEXT_INCOMPATIBLE_WITH_LAYER"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_CONTEXT_INCOMPATIBLE_WITH_CALLOUT: + reason = "STATUS_FWP_CONTEXT_INCOMPATIBLE_WITH_CALLOUT"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_INCOMPATIBLE_AUTH_METHOD: + reason = "STATUS_FWP_INCOMPATIBLE_AUTH_METHOD"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_INCOMPATIBLE_DH_GROUP: + reason = "STATUS_FWP_INCOMPATIBLE_DH_GROUP"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_EM_NOT_SUPPORTED: + reason = "STATUS_FWP_EM_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_NEVER_MATCH: + reason = "STATUS_FWP_NEVER_MATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_PROVIDER_CONTEXT_MISMATCH: + reason = "STATUS_FWP_PROVIDER_CONTEXT_MISMATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_INVALID_PARAMETER: + reason = "STATUS_FWP_INVALID_PARAMETER"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_TOO_MANY_SUBLAYERS: + reason = "STATUS_FWP_TOO_MANY_SUBLAYERS"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_CALLOUT_NOTIFICATION_FAILED: + reason = "STATUS_FWP_CALLOUT_NOTIFICATION_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_INVALID_AUTH_TRANSFORM: + reason = "STATUS_FWP_INVALID_AUTH_TRANSFORM"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_INVALID_CIPHER_TRANSFORM: + reason = "STATUS_FWP_INVALID_CIPHER_TRANSFORM"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_INCOMPATIBLE_CIPHER_TRANSFORM: + reason = "STATUS_FWP_INCOMPATIBLE_CIPHER_TRANSFORM"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_INVALID_TRANSFORM_COMBINATION: + reason = "STATUS_FWP_INVALID_TRANSFORM_COMBINATION"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_DUPLICATE_AUTH_METHOD: + reason = "STATUS_FWP_DUPLICATE_AUTH_METHOD"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_INVALID_TUNNEL_ENDPOINT: + reason = "STATUS_FWP_INVALID_TUNNEL_ENDPOINT"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_L2_DRIVER_NOT_READY: + reason = "STATUS_FWP_L2_DRIVER_NOT_READY"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_KEY_DICTATOR_ALREADY_REGISTERED: + reason = "STATUS_FWP_KEY_DICTATOR_ALREADY_REGISTERED"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_KEY_DICTATION_INVALID_KEYING_MATERIAL: + reason = "STATUS_FWP_KEY_DICTATION_INVALID_KEYING_MATERIAL"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_CONNECTIONS_DISABLED: + reason = "STATUS_FWP_CONNECTIONS_DISABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_INVALID_DNS_NAME: + reason = "STATUS_FWP_INVALID_DNS_NAME"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_STILL_ON: + reason = "STATUS_FWP_STILL_ON"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_IKEEXT_NOT_RUNNING: + reason = "STATUS_FWP_IKEEXT_NOT_RUNNING"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_TCPIP_NOT_READY: + reason = "STATUS_FWP_TCPIP_NOT_READY"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_INJECT_HANDLE_CLOSING: + reason = "STATUS_FWP_INJECT_HANDLE_CLOSING"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_INJECT_HANDLE_STALE: + reason = "STATUS_FWP_INJECT_HANDLE_STALE"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_CANNOT_PEND: + reason = "STATUS_FWP_CANNOT_PEND"; + break; + case MD_NTSTATUS_WIN_STATUS_FWP_DROP_NOICMP: + reason = "STATUS_FWP_DROP_NOICMP"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_CLOSING: + reason = "STATUS_NDIS_CLOSING"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_BAD_VERSION: + reason = "STATUS_NDIS_BAD_VERSION"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_BAD_CHARACTERISTICS: + reason = "STATUS_NDIS_BAD_CHARACTERISTICS"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_ADAPTER_NOT_FOUND: + reason = "STATUS_NDIS_ADAPTER_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_OPEN_FAILED: + reason = "STATUS_NDIS_OPEN_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_DEVICE_FAILED: + reason = "STATUS_NDIS_DEVICE_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_MULTICAST_FULL: + reason = "STATUS_NDIS_MULTICAST_FULL"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_MULTICAST_EXISTS: + reason = "STATUS_NDIS_MULTICAST_EXISTS"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_MULTICAST_NOT_FOUND: + reason = "STATUS_NDIS_MULTICAST_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_REQUEST_ABORTED: + reason = "STATUS_NDIS_REQUEST_ABORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_RESET_IN_PROGRESS: + reason = "STATUS_NDIS_RESET_IN_PROGRESS"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_INVALID_PACKET: + reason = "STATUS_NDIS_INVALID_PACKET"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_INVALID_DEVICE_REQUEST: + reason = "STATUS_NDIS_INVALID_DEVICE_REQUEST"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_ADAPTER_NOT_READY: + reason = "STATUS_NDIS_ADAPTER_NOT_READY"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_INVALID_LENGTH: + reason = "STATUS_NDIS_INVALID_LENGTH"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_INVALID_DATA: + reason = "STATUS_NDIS_INVALID_DATA"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_BUFFER_TOO_SHORT: + reason = "STATUS_NDIS_BUFFER_TOO_SHORT"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_INVALID_OID: + reason = "STATUS_NDIS_INVALID_OID"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_ADAPTER_REMOVED: + reason = "STATUS_NDIS_ADAPTER_REMOVED"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_UNSUPPORTED_MEDIA: + reason = "STATUS_NDIS_UNSUPPORTED_MEDIA"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_GROUP_ADDRESS_IN_USE: + reason = "STATUS_NDIS_GROUP_ADDRESS_IN_USE"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_FILE_NOT_FOUND: + reason = "STATUS_NDIS_FILE_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_ERROR_READING_FILE: + reason = "STATUS_NDIS_ERROR_READING_FILE"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_ALREADY_MAPPED: + reason = "STATUS_NDIS_ALREADY_MAPPED"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_RESOURCE_CONFLICT: + reason = "STATUS_NDIS_RESOURCE_CONFLICT"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_MEDIA_DISCONNECTED: + reason = "STATUS_NDIS_MEDIA_DISCONNECTED"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_INVALID_ADDRESS: + reason = "STATUS_NDIS_INVALID_ADDRESS"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_PAUSED: + reason = "STATUS_NDIS_PAUSED"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_INTERFACE_NOT_FOUND: + reason = "STATUS_NDIS_INTERFACE_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_UNSUPPORTED_REVISION: + reason = "STATUS_NDIS_UNSUPPORTED_REVISION"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_INVALID_PORT: + reason = "STATUS_NDIS_INVALID_PORT"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_INVALID_PORT_STATE: + reason = "STATUS_NDIS_INVALID_PORT_STATE"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_LOW_POWER_STATE: + reason = "STATUS_NDIS_LOW_POWER_STATE"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_REINIT_REQUIRED: + reason = "STATUS_NDIS_REINIT_REQUIRED"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_NOT_SUPPORTED: + reason = "STATUS_NDIS_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_OFFLOAD_POLICY: + reason = "STATUS_NDIS_OFFLOAD_POLICY"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_OFFLOAD_CONNECTION_REJECTED: + reason = "STATUS_NDIS_OFFLOAD_CONNECTION_REJECTED"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_OFFLOAD_PATH_REJECTED: + reason = "STATUS_NDIS_OFFLOAD_PATH_REJECTED"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_DOT11_AUTO_CONFIG_ENABLED: + reason = "STATUS_NDIS_DOT11_AUTO_CONFIG_ENABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_DOT11_MEDIA_IN_USE: + reason = "STATUS_NDIS_DOT11_MEDIA_IN_USE"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_DOT11_POWER_STATE_INVALID: + reason = "STATUS_NDIS_DOT11_POWER_STATE_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_PM_WOL_PATTERN_LIST_FULL: + reason = "STATUS_NDIS_PM_WOL_PATTERN_LIST_FULL"; + break; + case MD_NTSTATUS_WIN_STATUS_NDIS_PM_PROTOCOL_OFFLOAD_LIST_FULL: + reason = "STATUS_NDIS_PM_PROTOCOL_OFFLOAD_LIST_FULL"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_ERROR_MASK: + reason = "STATUS_TPM_ERROR_MASK"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_AUTHFAIL: + reason = "STATUS_TPM_AUTHFAIL"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_BADINDEX: + reason = "STATUS_TPM_BADINDEX"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_BAD_PARAMETER: + reason = "STATUS_TPM_BAD_PARAMETER"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_AUDITFAILURE: + reason = "STATUS_TPM_AUDITFAILURE"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_CLEAR_DISABLED: + reason = "STATUS_TPM_CLEAR_DISABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_DEACTIVATED: + reason = "STATUS_TPM_DEACTIVATED"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_DISABLED: + reason = "STATUS_TPM_DISABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_DISABLED_CMD: + reason = "STATUS_TPM_DISABLED_CMD"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_FAIL: + reason = "STATUS_TPM_FAIL"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_BAD_ORDINAL: + reason = "STATUS_TPM_BAD_ORDINAL"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_INSTALL_DISABLED: + reason = "STATUS_TPM_INSTALL_DISABLED"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_INVALID_KEYHANDLE: + reason = "STATUS_TPM_INVALID_KEYHANDLE"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_KEYNOTFOUND: + reason = "STATUS_TPM_KEYNOTFOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_INAPPROPRIATE_ENC: + reason = "STATUS_TPM_INAPPROPRIATE_ENC"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_MIGRATEFAIL: + reason = "STATUS_TPM_MIGRATEFAIL"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_INVALID_PCR_INFO: + reason = "STATUS_TPM_INVALID_PCR_INFO"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_NOSPACE: + reason = "STATUS_TPM_NOSPACE"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_NOSRK: + reason = "STATUS_TPM_NOSRK"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_NOTSEALED_BLOB: + reason = "STATUS_TPM_NOTSEALED_BLOB"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_OWNER_SET: + reason = "STATUS_TPM_OWNER_SET"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_RESOURCES: + reason = "STATUS_TPM_RESOURCES"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_SHORTRANDOM: + reason = "STATUS_TPM_SHORTRANDOM"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_SIZE: + reason = "STATUS_TPM_SIZE"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_WRONGPCRVAL: + reason = "STATUS_TPM_WRONGPCRVAL"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_BAD_PARAM_SIZE: + reason = "STATUS_TPM_BAD_PARAM_SIZE"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_SHA_THREAD: + reason = "STATUS_TPM_SHA_THREAD"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_SHA_ERROR: + reason = "STATUS_TPM_SHA_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_FAILEDSELFTEST: + reason = "STATUS_TPM_FAILEDSELFTEST"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_AUTH2FAIL: + reason = "STATUS_TPM_AUTH2FAIL"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_BADTAG: + reason = "STATUS_TPM_BADTAG"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_IOERROR: + reason = "STATUS_TPM_IOERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_ENCRYPT_ERROR: + reason = "STATUS_TPM_ENCRYPT_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_DECRYPT_ERROR: + reason = "STATUS_TPM_DECRYPT_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_INVALID_AUTHHANDLE: + reason = "STATUS_TPM_INVALID_AUTHHANDLE"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_NO_ENDORSEMENT: + reason = "STATUS_TPM_NO_ENDORSEMENT"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_INVALID_KEYUSAGE: + reason = "STATUS_TPM_INVALID_KEYUSAGE"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_WRONG_ENTITYTYPE: + reason = "STATUS_TPM_WRONG_ENTITYTYPE"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_INVALID_POSTINIT: + reason = "STATUS_TPM_INVALID_POSTINIT"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_INAPPROPRIATE_SIG: + reason = "STATUS_TPM_INAPPROPRIATE_SIG"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_BAD_KEY_PROPERTY: + reason = "STATUS_TPM_BAD_KEY_PROPERTY"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_BAD_MIGRATION: + reason = "STATUS_TPM_BAD_MIGRATION"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_BAD_SCHEME: + reason = "STATUS_TPM_BAD_SCHEME"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_BAD_DATASIZE: + reason = "STATUS_TPM_BAD_DATASIZE"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_BAD_MODE: + reason = "STATUS_TPM_BAD_MODE"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_BAD_PRESENCE: + reason = "STATUS_TPM_BAD_PRESENCE"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_BAD_VERSION: + reason = "STATUS_TPM_BAD_VERSION"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_NO_WRAP_TRANSPORT: + reason = "STATUS_TPM_NO_WRAP_TRANSPORT"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_AUDITFAIL_UNSUCCESSFUL: + reason = "STATUS_TPM_AUDITFAIL_UNSUCCESSFUL"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_AUDITFAIL_SUCCESSFUL: + reason = "STATUS_TPM_AUDITFAIL_SUCCESSFUL"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_NOTRESETABLE: + reason = "STATUS_TPM_NOTRESETABLE"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_NOTLOCAL: + reason = "STATUS_TPM_NOTLOCAL"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_BAD_TYPE: + reason = "STATUS_TPM_BAD_TYPE"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_INVALID_RESOURCE: + reason = "STATUS_TPM_INVALID_RESOURCE"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_NOTFIPS: + reason = "STATUS_TPM_NOTFIPS"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_INVALID_FAMILY: + reason = "STATUS_TPM_INVALID_FAMILY"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_NO_NV_PERMISSION: + reason = "STATUS_TPM_NO_NV_PERMISSION"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_REQUIRES_SIGN: + reason = "STATUS_TPM_REQUIRES_SIGN"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_KEY_NOTSUPPORTED: + reason = "STATUS_TPM_KEY_NOTSUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_AUTH_CONFLICT: + reason = "STATUS_TPM_AUTH_CONFLICT"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_AREA_LOCKED: + reason = "STATUS_TPM_AREA_LOCKED"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_BAD_LOCALITY: + reason = "STATUS_TPM_BAD_LOCALITY"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_READ_ONLY: + reason = "STATUS_TPM_READ_ONLY"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_PER_NOWRITE: + reason = "STATUS_TPM_PER_NOWRITE"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_FAMILYCOUNT: + reason = "STATUS_TPM_FAMILYCOUNT"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_WRITE_LOCKED: + reason = "STATUS_TPM_WRITE_LOCKED"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_BAD_ATTRIBUTES: + reason = "STATUS_TPM_BAD_ATTRIBUTES"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_INVALID_STRUCTURE: + reason = "STATUS_TPM_INVALID_STRUCTURE"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_KEY_OWNER_CONTROL: + reason = "STATUS_TPM_KEY_OWNER_CONTROL"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_BAD_COUNTER: + reason = "STATUS_TPM_BAD_COUNTER"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_NOT_FULLWRITE: + reason = "STATUS_TPM_NOT_FULLWRITE"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_CONTEXT_GAP: + reason = "STATUS_TPM_CONTEXT_GAP"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_MAXNVWRITES: + reason = "STATUS_TPM_MAXNVWRITES"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_NOOPERATOR: + reason = "STATUS_TPM_NOOPERATOR"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_RESOURCEMISSING: + reason = "STATUS_TPM_RESOURCEMISSING"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_DELEGATE_LOCK: + reason = "STATUS_TPM_DELEGATE_LOCK"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_DELEGATE_FAMILY: + reason = "STATUS_TPM_DELEGATE_FAMILY"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_DELEGATE_ADMIN: + reason = "STATUS_TPM_DELEGATE_ADMIN"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_TRANSPORT_NOTEXCLUSIVE: + reason = "STATUS_TPM_TRANSPORT_NOTEXCLUSIVE"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_OWNER_CONTROL: + reason = "STATUS_TPM_OWNER_CONTROL"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_DAA_RESOURCES: + reason = "STATUS_TPM_DAA_RESOURCES"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_DAA_INPUT_DATA0: + reason = "STATUS_TPM_DAA_INPUT_DATA0"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_DAA_INPUT_DATA1: + reason = "STATUS_TPM_DAA_INPUT_DATA1"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_DAA_ISSUER_SETTINGS: + reason = "STATUS_TPM_DAA_ISSUER_SETTINGS"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_DAA_TPM_SETTINGS: + reason = "STATUS_TPM_DAA_TPM_SETTINGS"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_DAA_STAGE: + reason = "STATUS_TPM_DAA_STAGE"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_DAA_ISSUER_VALIDITY: + reason = "STATUS_TPM_DAA_ISSUER_VALIDITY"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_DAA_WRONG_W: + reason = "STATUS_TPM_DAA_WRONG_W"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_BAD_HANDLE: + reason = "STATUS_TPM_BAD_HANDLE"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_BAD_DELEGATE: + reason = "STATUS_TPM_BAD_DELEGATE"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_BADCONTEXT: + reason = "STATUS_TPM_BADCONTEXT"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_TOOMANYCONTEXTS: + reason = "STATUS_TPM_TOOMANYCONTEXTS"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_MA_TICKET_SIGNATURE: + reason = "STATUS_TPM_MA_TICKET_SIGNATURE"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_MA_DESTINATION: + reason = "STATUS_TPM_MA_DESTINATION"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_MA_SOURCE: + reason = "STATUS_TPM_MA_SOURCE"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_MA_AUTHORITY: + reason = "STATUS_TPM_MA_AUTHORITY"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_PERMANENTEK: + reason = "STATUS_TPM_PERMANENTEK"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_BAD_SIGNATURE: + reason = "STATUS_TPM_BAD_SIGNATURE"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_NOCONTEXTSPACE: + reason = "STATUS_TPM_NOCONTEXTSPACE"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_COMMAND_BLOCKED: + reason = "STATUS_TPM_COMMAND_BLOCKED"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_INVALID_HANDLE: + reason = "STATUS_TPM_INVALID_HANDLE"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_DUPLICATE_VHANDLE: + reason = "STATUS_TPM_DUPLICATE_VHANDLE"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_EMBEDDED_COMMAND_BLOCKED: + reason = "STATUS_TPM_EMBEDDED_COMMAND_BLOCKED"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_EMBEDDED_COMMAND_UNSUPPORTED: + reason = "STATUS_TPM_EMBEDDED_COMMAND_UNSUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_RETRY: + reason = "STATUS_TPM_RETRY"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_NEEDS_SELFTEST: + reason = "STATUS_TPM_NEEDS_SELFTEST"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_DOING_SELFTEST: + reason = "STATUS_TPM_DOING_SELFTEST"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_DEFEND_LOCK_RUNNING: + reason = "STATUS_TPM_DEFEND_LOCK_RUNNING"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_COMMAND_CANCELED: + reason = "STATUS_TPM_COMMAND_CANCELED"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_TOO_MANY_CONTEXTS: + reason = "STATUS_TPM_TOO_MANY_CONTEXTS"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_NOT_FOUND: + reason = "STATUS_TPM_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_ACCESS_DENIED: + reason = "STATUS_TPM_ACCESS_DENIED"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_INSUFFICIENT_BUFFER: + reason = "STATUS_TPM_INSUFFICIENT_BUFFER"; + break; + case MD_NTSTATUS_WIN_STATUS_TPM_PPI_FUNCTION_UNSUPPORTED: + reason = "STATUS_TPM_PPI_FUNCTION_UNSUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_PCP_ERROR_MASK: + reason = "STATUS_PCP_ERROR_MASK"; + break; + case MD_NTSTATUS_WIN_STATUS_PCP_DEVICE_NOT_READY: + reason = "STATUS_PCP_DEVICE_NOT_READY"; + break; + case MD_NTSTATUS_WIN_STATUS_PCP_INVALID_HANDLE: + reason = "STATUS_PCP_INVALID_HANDLE"; + break; + case MD_NTSTATUS_WIN_STATUS_PCP_INVALID_PARAMETER: + reason = "STATUS_PCP_INVALID_PARAMETER"; + break; + case MD_NTSTATUS_WIN_STATUS_PCP_FLAG_NOT_SUPPORTED: + reason = "STATUS_PCP_FLAG_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_PCP_NOT_SUPPORTED: + reason = "STATUS_PCP_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_PCP_BUFFER_TOO_SMALL: + reason = "STATUS_PCP_BUFFER_TOO_SMALL"; + break; + case MD_NTSTATUS_WIN_STATUS_PCP_INTERNAL_ERROR: + reason = "STATUS_PCP_INTERNAL_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_PCP_AUTHENTICATION_FAILED: + reason = "STATUS_PCP_AUTHENTICATION_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_PCP_AUTHENTICATION_IGNORED: + reason = "STATUS_PCP_AUTHENTICATION_IGNORED"; + break; + case MD_NTSTATUS_WIN_STATUS_PCP_POLICY_NOT_FOUND: + reason = "STATUS_PCP_POLICY_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_PCP_PROFILE_NOT_FOUND: + reason = "STATUS_PCP_PROFILE_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_PCP_VALIDATION_FAILED: + reason = "STATUS_PCP_VALIDATION_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_PCP_DEVICE_NOT_FOUND: + reason = "STATUS_PCP_DEVICE_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_HV_INVALID_HYPERCALL_CODE: + reason = "STATUS_HV_INVALID_HYPERCALL_CODE"; + break; + case MD_NTSTATUS_WIN_STATUS_HV_INVALID_HYPERCALL_INPUT: + reason = "STATUS_HV_INVALID_HYPERCALL_INPUT"; + break; + case MD_NTSTATUS_WIN_STATUS_HV_INVALID_ALIGNMENT: + reason = "STATUS_HV_INVALID_ALIGNMENT"; + break; + case MD_NTSTATUS_WIN_STATUS_HV_INVALID_PARAMETER: + reason = "STATUS_HV_INVALID_PARAMETER"; + break; + case MD_NTSTATUS_WIN_STATUS_HV_ACCESS_DENIED: + reason = "STATUS_HV_ACCESS_DENIED"; + break; + case MD_NTSTATUS_WIN_STATUS_HV_INVALID_PARTITION_STATE: + reason = "STATUS_HV_INVALID_PARTITION_STATE"; + break; + case MD_NTSTATUS_WIN_STATUS_HV_OPERATION_DENIED: + reason = "STATUS_HV_OPERATION_DENIED"; + break; + case MD_NTSTATUS_WIN_STATUS_HV_UNKNOWN_PROPERTY: + reason = "STATUS_HV_UNKNOWN_PROPERTY"; + break; + case MD_NTSTATUS_WIN_STATUS_HV_PROPERTY_VALUE_OUT_OF_RANGE: + reason = "STATUS_HV_PROPERTY_VALUE_OUT_OF_RANGE"; + break; + case MD_NTSTATUS_WIN_STATUS_HV_INSUFFICIENT_MEMORY: + reason = "STATUS_HV_INSUFFICIENT_MEMORY"; + break; + case MD_NTSTATUS_WIN_STATUS_HV_PARTITION_TOO_DEEP: + reason = "STATUS_HV_PARTITION_TOO_DEEP"; + break; + case MD_NTSTATUS_WIN_STATUS_HV_INVALID_PARTITION_ID: + reason = "STATUS_HV_INVALID_PARTITION_ID"; + break; + case MD_NTSTATUS_WIN_STATUS_HV_INVALID_VP_INDEX: + reason = "STATUS_HV_INVALID_VP_INDEX"; + break; + case MD_NTSTATUS_WIN_STATUS_HV_INVALID_PORT_ID: + reason = "STATUS_HV_INVALID_PORT_ID"; + break; + case MD_NTSTATUS_WIN_STATUS_HV_INVALID_CONNECTION_ID: + reason = "STATUS_HV_INVALID_CONNECTION_ID"; + break; + case MD_NTSTATUS_WIN_STATUS_HV_INSUFFICIENT_BUFFERS: + reason = "STATUS_HV_INSUFFICIENT_BUFFERS"; + break; + case MD_NTSTATUS_WIN_STATUS_HV_NOT_ACKNOWLEDGED: + reason = "STATUS_HV_NOT_ACKNOWLEDGED"; + break; + case MD_NTSTATUS_WIN_STATUS_HV_ACKNOWLEDGED: + reason = "STATUS_HV_ACKNOWLEDGED"; + break; + case MD_NTSTATUS_WIN_STATUS_HV_INVALID_SAVE_RESTORE_STATE: + reason = "STATUS_HV_INVALID_SAVE_RESTORE_STATE"; + break; + case MD_NTSTATUS_WIN_STATUS_HV_INVALID_SYNIC_STATE: + reason = "STATUS_HV_INVALID_SYNIC_STATE"; + break; + case MD_NTSTATUS_WIN_STATUS_HV_OBJECT_IN_USE: + reason = "STATUS_HV_OBJECT_IN_USE"; + break; + case MD_NTSTATUS_WIN_STATUS_HV_INVALID_PROXIMITY_DOMAIN_INFO: + reason = "STATUS_HV_INVALID_PROXIMITY_DOMAIN_INFO"; + break; + case MD_NTSTATUS_WIN_STATUS_HV_NO_DATA: + reason = "STATUS_HV_NO_DATA"; + break; + case MD_NTSTATUS_WIN_STATUS_HV_INACTIVE: + reason = "STATUS_HV_INACTIVE"; + break; + case MD_NTSTATUS_WIN_STATUS_HV_NO_RESOURCES: + reason = "STATUS_HV_NO_RESOURCES"; + break; + case MD_NTSTATUS_WIN_STATUS_HV_FEATURE_UNAVAILABLE: + reason = "STATUS_HV_FEATURE_UNAVAILABLE"; + break; + case MD_NTSTATUS_WIN_STATUS_HV_INSUFFICIENT_BUFFER: + reason = "STATUS_HV_INSUFFICIENT_BUFFER"; + break; + case MD_NTSTATUS_WIN_STATUS_HV_INSUFFICIENT_DEVICE_DOMAINS: + reason = "STATUS_HV_INSUFFICIENT_DEVICE_DOMAINS"; + break; + case MD_NTSTATUS_WIN_STATUS_HV_INVALID_LP_INDEX: + reason = "STATUS_HV_INVALID_LP_INDEX"; + break; + case MD_NTSTATUS_WIN_STATUS_HV_NOT_PRESENT: + reason = "STATUS_HV_NOT_PRESENT"; + break; + case MD_NTSTATUS_WIN_STATUS_IPSEC_BAD_SPI: + reason = "STATUS_IPSEC_BAD_SPI"; + break; + case MD_NTSTATUS_WIN_STATUS_IPSEC_SA_LIFETIME_EXPIRED: + reason = "STATUS_IPSEC_SA_LIFETIME_EXPIRED"; + break; + case MD_NTSTATUS_WIN_STATUS_IPSEC_WRONG_SA: + reason = "STATUS_IPSEC_WRONG_SA"; + break; + case MD_NTSTATUS_WIN_STATUS_IPSEC_REPLAY_CHECK_FAILED: + reason = "STATUS_IPSEC_REPLAY_CHECK_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_IPSEC_INVALID_PACKET: + reason = "STATUS_IPSEC_INVALID_PACKET"; + break; + case MD_NTSTATUS_WIN_STATUS_IPSEC_INTEGRITY_CHECK_FAILED: + reason = "STATUS_IPSEC_INTEGRITY_CHECK_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_IPSEC_CLEAR_TEXT_DROP: + reason = "STATUS_IPSEC_CLEAR_TEXT_DROP"; + break; + case MD_NTSTATUS_WIN_STATUS_IPSEC_AUTH_FIREWALL_DROP: + reason = "STATUS_IPSEC_AUTH_FIREWALL_DROP"; + break; + case MD_NTSTATUS_WIN_STATUS_IPSEC_THROTTLE_DROP: + reason = "STATUS_IPSEC_THROTTLE_DROP"; + break; + case MD_NTSTATUS_WIN_STATUS_IPSEC_DOSP_BLOCK: + reason = "STATUS_IPSEC_DOSP_BLOCK"; + break; + case MD_NTSTATUS_WIN_STATUS_IPSEC_DOSP_RECEIVED_MULTICAST: + reason = "STATUS_IPSEC_DOSP_RECEIVED_MULTICAST"; + break; + case MD_NTSTATUS_WIN_STATUS_IPSEC_DOSP_INVALID_PACKET: + reason = "STATUS_IPSEC_DOSP_INVALID_PACKET"; + break; + case MD_NTSTATUS_WIN_STATUS_IPSEC_DOSP_STATE_LOOKUP_FAILED: + reason = "STATUS_IPSEC_DOSP_STATE_LOOKUP_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_IPSEC_DOSP_MAX_ENTRIES: + reason = "STATUS_IPSEC_DOSP_MAX_ENTRIES"; + break; + case MD_NTSTATUS_WIN_STATUS_IPSEC_DOSP_KEYMOD_NOT_ALLOWED: + reason = "STATUS_IPSEC_DOSP_KEYMOD_NOT_ALLOWED"; + break; + case MD_NTSTATUS_WIN_STATUS_IPSEC_DOSP_MAX_PER_IP_RATELIMIT_QUEUES: + reason = "STATUS_IPSEC_DOSP_MAX_PER_IP_RATELIMIT_QUEUES"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_DUPLICATE_HANDLER: + reason = "STATUS_VID_DUPLICATE_HANDLER"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_TOO_MANY_HANDLERS: + reason = "STATUS_VID_TOO_MANY_HANDLERS"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_QUEUE_FULL: + reason = "STATUS_VID_QUEUE_FULL"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_HANDLER_NOT_PRESENT: + reason = "STATUS_VID_HANDLER_NOT_PRESENT"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_INVALID_OBJECT_NAME: + reason = "STATUS_VID_INVALID_OBJECT_NAME"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_PARTITION_NAME_TOO_LONG: + reason = "STATUS_VID_PARTITION_NAME_TOO_LONG"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_MESSAGE_QUEUE_NAME_TOO_LONG: + reason = "STATUS_VID_MESSAGE_QUEUE_NAME_TOO_LONG"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_PARTITION_ALREADY_EXISTS: + reason = "STATUS_VID_PARTITION_ALREADY_EXISTS"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_PARTITION_DOES_NOT_EXIST: + reason = "STATUS_VID_PARTITION_DOES_NOT_EXIST"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_PARTITION_NAME_NOT_FOUND: + reason = "STATUS_VID_PARTITION_NAME_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_MESSAGE_QUEUE_ALREADY_EXISTS: + reason = "STATUS_VID_MESSAGE_QUEUE_ALREADY_EXISTS"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_EXCEEDED_MBP_ENTRY_MAP_LIMIT: + reason = "STATUS_VID_EXCEEDED_MBP_ENTRY_MAP_LIMIT"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_MB_STILL_REFERENCED: + reason = "STATUS_VID_MB_STILL_REFERENCED"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_CHILD_GPA_PAGE_SET_CORRUPTED: + reason = "STATUS_VID_CHILD_GPA_PAGE_SET_CORRUPTED"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_INVALID_NUMA_SETTINGS: + reason = "STATUS_VID_INVALID_NUMA_SETTINGS"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_INVALID_NUMA_NODE_INDEX: + reason = "STATUS_VID_INVALID_NUMA_NODE_INDEX"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_NOTIFICATION_QUEUE_ALREADY_ASSOCIATED: + reason = "STATUS_VID_NOTIFICATION_QUEUE_ALREADY_ASSOCIATED"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_INVALID_MEMORY_BLOCK_HANDLE: + reason = "STATUS_VID_INVALID_MEMORY_BLOCK_HANDLE"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_PAGE_RANGE_OVERFLOW: + reason = "STATUS_VID_PAGE_RANGE_OVERFLOW"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_INVALID_MESSAGE_QUEUE_HANDLE: + reason = "STATUS_VID_INVALID_MESSAGE_QUEUE_HANDLE"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_INVALID_GPA_RANGE_HANDLE: + reason = "STATUS_VID_INVALID_GPA_RANGE_HANDLE"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_NO_MEMORY_BLOCK_NOTIFICATION_QUEUE: + reason = "STATUS_VID_NO_MEMORY_BLOCK_NOTIFICATION_QUEUE"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_MEMORY_BLOCK_LOCK_COUNT_EXCEEDED: + reason = "STATUS_VID_MEMORY_BLOCK_LOCK_COUNT_EXCEEDED"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_INVALID_PPM_HANDLE: + reason = "STATUS_VID_INVALID_PPM_HANDLE"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_MBPS_ARE_LOCKED: + reason = "STATUS_VID_MBPS_ARE_LOCKED"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_MESSAGE_QUEUE_CLOSED: + reason = "STATUS_VID_MESSAGE_QUEUE_CLOSED"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_VIRTUAL_PROCESSOR_LIMIT_EXCEEDED: + reason = "STATUS_VID_VIRTUAL_PROCESSOR_LIMIT_EXCEEDED"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_STOP_PENDING: + reason = "STATUS_VID_STOP_PENDING"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_INVALID_PROCESSOR_STATE: + reason = "STATUS_VID_INVALID_PROCESSOR_STATE"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_EXCEEDED_KM_CONTEXT_COUNT_LIMIT: + reason = "STATUS_VID_EXCEEDED_KM_CONTEXT_COUNT_LIMIT"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_KM_INTERFACE_ALREADY_INITIALIZED: + reason = "STATUS_VID_KM_INTERFACE_ALREADY_INITIALIZED"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_MB_PROPERTY_ALREADY_SET_RESET: + reason = "STATUS_VID_MB_PROPERTY_ALREADY_SET_RESET"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_MMIO_RANGE_DESTROYED: + reason = "STATUS_VID_MMIO_RANGE_DESTROYED"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_INVALID_CHILD_GPA_PAGE_SET: + reason = "STATUS_VID_INVALID_CHILD_GPA_PAGE_SET"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_RESERVE_PAGE_SET_IS_BEING_USED: + reason = "STATUS_VID_RESERVE_PAGE_SET_IS_BEING_USED"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_RESERVE_PAGE_SET_TOO_SMALL: + reason = "STATUS_VID_RESERVE_PAGE_SET_TOO_SMALL"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_MBP_ALREADY_LOCKED_USING_RESERVED_PAGE: + reason = "STATUS_VID_MBP_ALREADY_LOCKED_USING_RESERVED_PAGE"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_MBP_COUNT_EXCEEDED_LIMIT: + reason = "STATUS_VID_MBP_COUNT_EXCEEDED_LIMIT"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_SAVED_STATE_CORRUPT: + reason = "STATUS_VID_SAVED_STATE_CORRUPT"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_SAVED_STATE_UNRECOGNIZED_ITEM: + reason = "STATUS_VID_SAVED_STATE_UNRECOGNIZED_ITEM"; + break; + case MD_NTSTATUS_WIN_STATUS_VID_SAVED_STATE_INCOMPATIBLE: + reason = "STATUS_VID_SAVED_STATE_INCOMPATIBLE"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_DATABASE_FULL: + reason = "STATUS_VOLMGR_DATABASE_FULL"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_CONFIGURATION_CORRUPTED: + reason = "STATUS_VOLMGR_DISK_CONFIGURATION_CORRUPTED"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_CONFIGURATION_NOT_IN_SYNC: + reason = "STATUS_VOLMGR_DISK_CONFIGURATION_NOT_IN_SYNC"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_PACK_CONFIG_UPDATE_FAILED: + reason = "STATUS_VOLMGR_PACK_CONFIG_UPDATE_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_CONTAINS_NON_SIMPLE_VOLUME: + reason = "STATUS_VOLMGR_DISK_CONTAINS_NON_SIMPLE_VOLUME"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_DUPLICATE: + reason = "STATUS_VOLMGR_DISK_DUPLICATE"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_DYNAMIC: + reason = "STATUS_VOLMGR_DISK_DYNAMIC"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_ID_INVALID: + reason = "STATUS_VOLMGR_DISK_ID_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_INVALID: + reason = "STATUS_VOLMGR_DISK_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_LAST_VOTER: + reason = "STATUS_VOLMGR_DISK_LAST_VOTER"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_LAYOUT_INVALID: + reason = "STATUS_VOLMGR_DISK_LAYOUT_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_LAYOUT_NON_BASIC_BETWEEN_BASIC_PARTITIONS: + reason = "STATUS_VOLMGR_DISK_LAYOUT_NON_BASIC_BETWEEN_BASIC_PARTITIONS"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_LAYOUT_NOT_CYLINDER_ALIGNED: + reason = "STATUS_VOLMGR_DISK_LAYOUT_NOT_CYLINDER_ALIGNED"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_LAYOUT_PARTITIONS_TOO_SMALL: + reason = "STATUS_VOLMGR_DISK_LAYOUT_PARTITIONS_TOO_SMALL"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_LAYOUT_PRIMARY_BETWEEN_LOGICAL_PARTITIONS: + reason = "STATUS_VOLMGR_DISK_LAYOUT_PRIMARY_BETWEEN_LOGICAL_PARTITIONS"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_LAYOUT_TOO_MANY_PARTITIONS: + reason = "STATUS_VOLMGR_DISK_LAYOUT_TOO_MANY_PARTITIONS"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_MISSING: + reason = "STATUS_VOLMGR_DISK_MISSING"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_NOT_EMPTY: + reason = "STATUS_VOLMGR_DISK_NOT_EMPTY"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_NOT_ENOUGH_SPACE: + reason = "STATUS_VOLMGR_DISK_NOT_ENOUGH_SPACE"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_REVECTORING_FAILED: + reason = "STATUS_VOLMGR_DISK_REVECTORING_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_SECTOR_SIZE_INVALID: + reason = "STATUS_VOLMGR_DISK_SECTOR_SIZE_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_SET_NOT_CONTAINED: + reason = "STATUS_VOLMGR_DISK_SET_NOT_CONTAINED"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_USED_BY_MULTIPLE_MEMBERS: + reason = "STATUS_VOLMGR_DISK_USED_BY_MULTIPLE_MEMBERS"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_DISK_USED_BY_MULTIPLE_PLEXES: + reason = "STATUS_VOLMGR_DISK_USED_BY_MULTIPLE_PLEXES"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_DYNAMIC_DISK_NOT_SUPPORTED: + reason = "STATUS_VOLMGR_DYNAMIC_DISK_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_EXTENT_ALREADY_USED: + reason = "STATUS_VOLMGR_EXTENT_ALREADY_USED"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_EXTENT_NOT_CONTIGUOUS: + reason = "STATUS_VOLMGR_EXTENT_NOT_CONTIGUOUS"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_EXTENT_NOT_IN_PUBLIC_REGION: + reason = "STATUS_VOLMGR_EXTENT_NOT_IN_PUBLIC_REGION"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_EXTENT_NOT_SECTOR_ALIGNED: + reason = "STATUS_VOLMGR_EXTENT_NOT_SECTOR_ALIGNED"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_EXTENT_OVERLAPS_EBR_PARTITION: + reason = "STATUS_VOLMGR_EXTENT_OVERLAPS_EBR_PARTITION"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_EXTENT_VOLUME_LENGTHS_DO_NOT_MATCH: + reason = "STATUS_VOLMGR_EXTENT_VOLUME_LENGTHS_DO_NOT_MATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_FAULT_TOLERANT_NOT_SUPPORTED: + reason = "STATUS_VOLMGR_FAULT_TOLERANT_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_INTERLEAVE_LENGTH_INVALID: + reason = "STATUS_VOLMGR_INTERLEAVE_LENGTH_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_MAXIMUM_REGISTERED_USERS: + reason = "STATUS_VOLMGR_MAXIMUM_REGISTERED_USERS"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_MEMBER_IN_SYNC: + reason = "STATUS_VOLMGR_MEMBER_IN_SYNC"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_MEMBER_INDEX_DUPLICATE: + reason = "STATUS_VOLMGR_MEMBER_INDEX_DUPLICATE"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_MEMBER_INDEX_INVALID: + reason = "STATUS_VOLMGR_MEMBER_INDEX_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_MEMBER_MISSING: + reason = "STATUS_VOLMGR_MEMBER_MISSING"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_MEMBER_NOT_DETACHED: + reason = "STATUS_VOLMGR_MEMBER_NOT_DETACHED"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_MEMBER_REGENERATING: + reason = "STATUS_VOLMGR_MEMBER_REGENERATING"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_ALL_DISKS_FAILED: + reason = "STATUS_VOLMGR_ALL_DISKS_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_NO_REGISTERED_USERS: + reason = "STATUS_VOLMGR_NO_REGISTERED_USERS"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_NO_SUCH_USER: + reason = "STATUS_VOLMGR_NO_SUCH_USER"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_NOTIFICATION_RESET: + reason = "STATUS_VOLMGR_NOTIFICATION_RESET"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_NUMBER_OF_MEMBERS_INVALID: + reason = "STATUS_VOLMGR_NUMBER_OF_MEMBERS_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_NUMBER_OF_PLEXES_INVALID: + reason = "STATUS_VOLMGR_NUMBER_OF_PLEXES_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_PACK_DUPLICATE: + reason = "STATUS_VOLMGR_PACK_DUPLICATE"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_PACK_ID_INVALID: + reason = "STATUS_VOLMGR_PACK_ID_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_PACK_INVALID: + reason = "STATUS_VOLMGR_PACK_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_PACK_NAME_INVALID: + reason = "STATUS_VOLMGR_PACK_NAME_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_PACK_OFFLINE: + reason = "STATUS_VOLMGR_PACK_OFFLINE"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_PACK_HAS_QUORUM: + reason = "STATUS_VOLMGR_PACK_HAS_QUORUM"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_PACK_WITHOUT_QUORUM: + reason = "STATUS_VOLMGR_PACK_WITHOUT_QUORUM"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_PARTITION_STYLE_INVALID: + reason = "STATUS_VOLMGR_PARTITION_STYLE_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_PARTITION_UPDATE_FAILED: + reason = "STATUS_VOLMGR_PARTITION_UPDATE_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_PLEX_IN_SYNC: + reason = "STATUS_VOLMGR_PLEX_IN_SYNC"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_PLEX_INDEX_DUPLICATE: + reason = "STATUS_VOLMGR_PLEX_INDEX_DUPLICATE"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_PLEX_INDEX_INVALID: + reason = "STATUS_VOLMGR_PLEX_INDEX_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_PLEX_LAST_ACTIVE: + reason = "STATUS_VOLMGR_PLEX_LAST_ACTIVE"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_PLEX_MISSING: + reason = "STATUS_VOLMGR_PLEX_MISSING"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_PLEX_REGENERATING: + reason = "STATUS_VOLMGR_PLEX_REGENERATING"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_PLEX_TYPE_INVALID: + reason = "STATUS_VOLMGR_PLEX_TYPE_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_PLEX_NOT_RAID5: + reason = "STATUS_VOLMGR_PLEX_NOT_RAID5"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_PLEX_NOT_SIMPLE: + reason = "STATUS_VOLMGR_PLEX_NOT_SIMPLE"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_STRUCTURE_SIZE_INVALID: + reason = "STATUS_VOLMGR_STRUCTURE_SIZE_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_TOO_MANY_NOTIFICATION_REQUESTS: + reason = "STATUS_VOLMGR_TOO_MANY_NOTIFICATION_REQUESTS"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_TRANSACTION_IN_PROGRESS: + reason = "STATUS_VOLMGR_TRANSACTION_IN_PROGRESS"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_UNEXPECTED_DISK_LAYOUT_CHANGE: + reason = "STATUS_VOLMGR_UNEXPECTED_DISK_LAYOUT_CHANGE"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_VOLUME_CONTAINS_MISSING_DISK: + reason = "STATUS_VOLMGR_VOLUME_CONTAINS_MISSING_DISK"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_VOLUME_ID_INVALID: + reason = "STATUS_VOLMGR_VOLUME_ID_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_VOLUME_LENGTH_INVALID: + reason = "STATUS_VOLMGR_VOLUME_LENGTH_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_VOLUME_LENGTH_NOT_SECTOR_SIZE_MULTIPLE: + reason = "STATUS_VOLMGR_VOLUME_LENGTH_NOT_SECTOR_SIZE_MULTIPLE"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_VOLUME_NOT_MIRRORED: + reason = "STATUS_VOLMGR_VOLUME_NOT_MIRRORED"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_VOLUME_NOT_RETAINED: + reason = "STATUS_VOLMGR_VOLUME_NOT_RETAINED"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_VOLUME_OFFLINE: + reason = "STATUS_VOLMGR_VOLUME_OFFLINE"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_VOLUME_RETAINED: + reason = "STATUS_VOLMGR_VOLUME_RETAINED"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_NUMBER_OF_EXTENTS_INVALID: + reason = "STATUS_VOLMGR_NUMBER_OF_EXTENTS_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_DIFFERENT_SECTOR_SIZE: + reason = "STATUS_VOLMGR_DIFFERENT_SECTOR_SIZE"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_BAD_BOOT_DISK: + reason = "STATUS_VOLMGR_BAD_BOOT_DISK"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_PACK_CONFIG_OFFLINE: + reason = "STATUS_VOLMGR_PACK_CONFIG_OFFLINE"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_PACK_CONFIG_ONLINE: + reason = "STATUS_VOLMGR_PACK_CONFIG_ONLINE"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_NOT_PRIMARY_PACK: + reason = "STATUS_VOLMGR_NOT_PRIMARY_PACK"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_PACK_LOG_UPDATE_FAILED: + reason = "STATUS_VOLMGR_PACK_LOG_UPDATE_FAILED"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_NUMBER_OF_DISKS_IN_PLEX_INVALID: + reason = "STATUS_VOLMGR_NUMBER_OF_DISKS_IN_PLEX_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_NUMBER_OF_DISKS_IN_MEMBER_INVALID: + reason = "STATUS_VOLMGR_NUMBER_OF_DISKS_IN_MEMBER_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_VOLUME_MIRRORED: + reason = "STATUS_VOLMGR_VOLUME_MIRRORED"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_PLEX_NOT_SIMPLE_SPANNED: + reason = "STATUS_VOLMGR_PLEX_NOT_SIMPLE_SPANNED"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_NO_VALID_LOG_COPIES: + reason = "STATUS_VOLMGR_NO_VALID_LOG_COPIES"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_PRIMARY_PACK_PRESENT: + reason = "STATUS_VOLMGR_PRIMARY_PACK_PRESENT"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_NUMBER_OF_DISKS_INVALID: + reason = "STATUS_VOLMGR_NUMBER_OF_DISKS_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_MIRROR_NOT_SUPPORTED: + reason = "STATUS_VOLMGR_MIRROR_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLMGR_RAID5_NOT_SUPPORTED: + reason = "STATUS_VOLMGR_RAID5_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_BCD_TOO_MANY_ELEMENTS: + reason = "STATUS_BCD_TOO_MANY_ELEMENTS"; + break; + case MD_NTSTATUS_WIN_STATUS_VHD_DRIVE_FOOTER_MISSING: + reason = "STATUS_VHD_DRIVE_FOOTER_MISSING"; + break; + case MD_NTSTATUS_WIN_STATUS_VHD_DRIVE_FOOTER_CHECKSUM_MISMATCH: + reason = "STATUS_VHD_DRIVE_FOOTER_CHECKSUM_MISMATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_VHD_DRIVE_FOOTER_CORRUPT: + reason = "STATUS_VHD_DRIVE_FOOTER_CORRUPT"; + break; + case MD_NTSTATUS_WIN_STATUS_VHD_FORMAT_UNKNOWN: + reason = "STATUS_VHD_FORMAT_UNKNOWN"; + break; + case MD_NTSTATUS_WIN_STATUS_VHD_FORMAT_UNSUPPORTED_VERSION: + reason = "STATUS_VHD_FORMAT_UNSUPPORTED_VERSION"; + break; + case MD_NTSTATUS_WIN_STATUS_VHD_SPARSE_HEADER_CHECKSUM_MISMATCH: + reason = "STATUS_VHD_SPARSE_HEADER_CHECKSUM_MISMATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_VHD_SPARSE_HEADER_UNSUPPORTED_VERSION: + reason = "STATUS_VHD_SPARSE_HEADER_UNSUPPORTED_VERSION"; + break; + case MD_NTSTATUS_WIN_STATUS_VHD_SPARSE_HEADER_CORRUPT: + reason = "STATUS_VHD_SPARSE_HEADER_CORRUPT"; + break; + case MD_NTSTATUS_WIN_STATUS_VHD_BLOCK_ALLOCATION_FAILURE: + reason = "STATUS_VHD_BLOCK_ALLOCATION_FAILURE"; + break; + case MD_NTSTATUS_WIN_STATUS_VHD_BLOCK_ALLOCATION_TABLE_CORRUPT: + reason = "STATUS_VHD_BLOCK_ALLOCATION_TABLE_CORRUPT"; + break; + case MD_NTSTATUS_WIN_STATUS_VHD_INVALID_BLOCK_SIZE: + reason = "STATUS_VHD_INVALID_BLOCK_SIZE"; + break; + case MD_NTSTATUS_WIN_STATUS_VHD_BITMAP_MISMATCH: + reason = "STATUS_VHD_BITMAP_MISMATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_VHD_PARENT_VHD_NOT_FOUND: + reason = "STATUS_VHD_PARENT_VHD_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_VHD_CHILD_PARENT_ID_MISMATCH: + reason = "STATUS_VHD_CHILD_PARENT_ID_MISMATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_VHD_CHILD_PARENT_TIMESTAMP_MISMATCH: + reason = "STATUS_VHD_CHILD_PARENT_TIMESTAMP_MISMATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_VHD_METADATA_READ_FAILURE: + reason = "STATUS_VHD_METADATA_READ_FAILURE"; + break; + case MD_NTSTATUS_WIN_STATUS_VHD_METADATA_WRITE_FAILURE: + reason = "STATUS_VHD_METADATA_WRITE_FAILURE"; + break; + case MD_NTSTATUS_WIN_STATUS_VHD_INVALID_SIZE: + reason = "STATUS_VHD_INVALID_SIZE"; + break; + case MD_NTSTATUS_WIN_STATUS_VHD_INVALID_FILE_SIZE: + reason = "STATUS_VHD_INVALID_FILE_SIZE"; + break; + case MD_NTSTATUS_WIN_STATUS_VIRTDISK_PROVIDER_NOT_FOUND: + reason = "STATUS_VIRTDISK_PROVIDER_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_VIRTDISK_NOT_VIRTUAL_DISK: + reason = "STATUS_VIRTDISK_NOT_VIRTUAL_DISK"; + break; + case MD_NTSTATUS_WIN_STATUS_VHD_PARENT_VHD_ACCESS_DENIED: + reason = "STATUS_VHD_PARENT_VHD_ACCESS_DENIED"; + break; + case MD_NTSTATUS_WIN_STATUS_VHD_CHILD_PARENT_SIZE_MISMATCH: + reason = "STATUS_VHD_CHILD_PARENT_SIZE_MISMATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_VHD_DIFFERENCING_CHAIN_CYCLE_DETECTED: + reason = "STATUS_VHD_DIFFERENCING_CHAIN_CYCLE_DETECTED"; + break; + case MD_NTSTATUS_WIN_STATUS_VHD_DIFFERENCING_CHAIN_ERROR_IN_PARENT: + reason = "STATUS_VHD_DIFFERENCING_CHAIN_ERROR_IN_PARENT"; + break; + case MD_NTSTATUS_WIN_STATUS_VIRTUAL_DISK_LIMITATION: + reason = "STATUS_VIRTUAL_DISK_LIMITATION"; + break; + case MD_NTSTATUS_WIN_STATUS_VHD_INVALID_TYPE: + reason = "STATUS_VHD_INVALID_TYPE"; + break; + case MD_NTSTATUS_WIN_STATUS_VHD_INVALID_STATE: + reason = "STATUS_VHD_INVALID_STATE"; + break; + case MD_NTSTATUS_WIN_STATUS_VIRTDISK_UNSUPPORTED_DISK_SECTOR_SIZE: + reason = "STATUS_VIRTDISK_UNSUPPORTED_DISK_SECTOR_SIZE"; + break; + case MD_NTSTATUS_WIN_STATUS_VIRTDISK_DISK_ALREADY_OWNED: + reason = "STATUS_VIRTDISK_DISK_ALREADY_OWNED"; + break; + case MD_NTSTATUS_WIN_STATUS_VIRTDISK_DISK_ONLINE_AND_WRITABLE: + reason = "STATUS_VIRTDISK_DISK_ONLINE_AND_WRITABLE"; + break; + case MD_NTSTATUS_WIN_STATUS_CTLOG_TRACKING_NOT_INITIALIZED: + reason = "STATUS_CTLOG_TRACKING_NOT_INITIALIZED"; + break; + case MD_NTSTATUS_WIN_STATUS_CTLOG_LOGFILE_SIZE_EXCEEDED_MAXSIZE: + reason = "STATUS_CTLOG_LOGFILE_SIZE_EXCEEDED_MAXSIZE"; + break; + case MD_NTSTATUS_WIN_STATUS_CTLOG_VHD_CHANGED_OFFLINE: + reason = "STATUS_CTLOG_VHD_CHANGED_OFFLINE"; + break; + case MD_NTSTATUS_WIN_STATUS_CTLOG_INVALID_TRACKING_STATE: + reason = "STATUS_CTLOG_INVALID_TRACKING_STATE"; + break; + case MD_NTSTATUS_WIN_STATUS_CTLOG_INCONSISTENT_TRACKING_FILE: + reason = "STATUS_CTLOG_INCONSISTENT_TRACKING_FILE"; + break; + case MD_NTSTATUS_WIN_STATUS_VHD_METADATA_FULL: + reason = "STATUS_VHD_METADATA_FULL"; + break; + case MD_NTSTATUS_WIN_STATUS_RKF_KEY_NOT_FOUND: + reason = "STATUS_RKF_KEY_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_RKF_DUPLICATE_KEY: + reason = "STATUS_RKF_DUPLICATE_KEY"; + break; + case MD_NTSTATUS_WIN_STATUS_RKF_BLOB_FULL: + reason = "STATUS_RKF_BLOB_FULL"; + break; + case MD_NTSTATUS_WIN_STATUS_RKF_STORE_FULL: + reason = "STATUS_RKF_STORE_FULL"; + break; + case MD_NTSTATUS_WIN_STATUS_RKF_FILE_BLOCKED: + reason = "STATUS_RKF_FILE_BLOCKED"; + break; + case MD_NTSTATUS_WIN_STATUS_RKF_ACTIVE_KEY: + reason = "STATUS_RKF_ACTIVE_KEY"; + break; + case MD_NTSTATUS_WIN_STATUS_RDBSS_RESTART_OPERATION: + reason = "STATUS_RDBSS_RESTART_OPERATION"; + break; + case MD_NTSTATUS_WIN_STATUS_RDBSS_CONTINUE_OPERATION: + reason = "STATUS_RDBSS_CONTINUE_OPERATION"; + break; + case MD_NTSTATUS_WIN_STATUS_RDBSS_POST_OPERATION: + reason = "STATUS_RDBSS_POST_OPERATION"; + break; + case MD_NTSTATUS_WIN_STATUS_BTH_ATT_INVALID_HANDLE: + reason = "STATUS_BTH_ATT_INVALID_HANDLE"; + break; + case MD_NTSTATUS_WIN_STATUS_BTH_ATT_READ_NOT_PERMITTED: + reason = "STATUS_BTH_ATT_READ_NOT_PERMITTED"; + break; + case MD_NTSTATUS_WIN_STATUS_BTH_ATT_WRITE_NOT_PERMITTED: + reason = "STATUS_BTH_ATT_WRITE_NOT_PERMITTED"; + break; + case MD_NTSTATUS_WIN_STATUS_BTH_ATT_INVALID_PDU: + reason = "STATUS_BTH_ATT_INVALID_PDU"; + break; + case MD_NTSTATUS_WIN_STATUS_BTH_ATT_INSUFFICIENT_AUTHENTICATION: + reason = "STATUS_BTH_ATT_INSUFFICIENT_AUTHENTICATION"; + break; + case MD_NTSTATUS_WIN_STATUS_BTH_ATT_REQUEST_NOT_SUPPORTED: + reason = "STATUS_BTH_ATT_REQUEST_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_BTH_ATT_INVALID_OFFSET: + reason = "STATUS_BTH_ATT_INVALID_OFFSET"; + break; + case MD_NTSTATUS_WIN_STATUS_BTH_ATT_INSUFFICIENT_AUTHORIZATION: + reason = "STATUS_BTH_ATT_INSUFFICIENT_AUTHORIZATION"; + break; + case MD_NTSTATUS_WIN_STATUS_BTH_ATT_PREPARE_QUEUE_FULL: + reason = "STATUS_BTH_ATT_PREPARE_QUEUE_FULL"; + break; + case MD_NTSTATUS_WIN_STATUS_BTH_ATT_ATTRIBUTE_NOT_FOUND: + reason = "STATUS_BTH_ATT_ATTRIBUTE_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_BTH_ATT_ATTRIBUTE_NOT_LONG: + reason = "STATUS_BTH_ATT_ATTRIBUTE_NOT_LONG"; + break; + case MD_NTSTATUS_WIN_STATUS_BTH_ATT_INSUFFICIENT_ENCRYPTION_KEY_SIZE: + reason = "STATUS_BTH_ATT_INSUFFICIENT_ENCRYPTION_KEY_SIZE"; + break; + case MD_NTSTATUS_WIN_STATUS_BTH_ATT_INVALID_ATTRIBUTE_VALUE_LENGTH: + reason = "STATUS_BTH_ATT_INVALID_ATTRIBUTE_VALUE_LENGTH"; + break; + case MD_NTSTATUS_WIN_STATUS_BTH_ATT_UNLIKELY: + reason = "STATUS_BTH_ATT_UNLIKELY"; + break; + case MD_NTSTATUS_WIN_STATUS_BTH_ATT_INSUFFICIENT_ENCRYPTION: + reason = "STATUS_BTH_ATT_INSUFFICIENT_ENCRYPTION"; + break; + case MD_NTSTATUS_WIN_STATUS_BTH_ATT_UNSUPPORTED_GROUP_TYPE: + reason = "STATUS_BTH_ATT_UNSUPPORTED_GROUP_TYPE"; + break; + case MD_NTSTATUS_WIN_STATUS_BTH_ATT_INSUFFICIENT_RESOURCES: + reason = "STATUS_BTH_ATT_INSUFFICIENT_RESOURCES"; + break; + case MD_NTSTATUS_WIN_STATUS_BTH_ATT_UNKNOWN_ERROR: + reason = "STATUS_BTH_ATT_UNKNOWN_ERROR"; + break; + case MD_NTSTATUS_WIN_STATUS_SECUREBOOT_ROLLBACK_DETECTED: + reason = "STATUS_SECUREBOOT_ROLLBACK_DETECTED"; + break; + case MD_NTSTATUS_WIN_STATUS_SECUREBOOT_POLICY_VIOLATION: + reason = "STATUS_SECUREBOOT_POLICY_VIOLATION"; + break; + case MD_NTSTATUS_WIN_STATUS_SECUREBOOT_INVALID_POLICY: + reason = "STATUS_SECUREBOOT_INVALID_POLICY"; + break; + case MD_NTSTATUS_WIN_STATUS_SECUREBOOT_POLICY_PUBLISHER_NOT_FOUND: + reason = "STATUS_SECUREBOOT_POLICY_PUBLISHER_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_SECUREBOOT_POLICY_NOT_SIGNED: + reason = "STATUS_SECUREBOOT_POLICY_NOT_SIGNED"; + break; + case MD_NTSTATUS_WIN_STATUS_SECUREBOOT_FILE_REPLACED: + reason = "STATUS_SECUREBOOT_FILE_REPLACED"; + break; + case MD_NTSTATUS_WIN_STATUS_AUDIO_ENGINE_NODE_NOT_FOUND: + reason = "STATUS_AUDIO_ENGINE_NODE_NOT_FOUND"; + break; + case MD_NTSTATUS_WIN_STATUS_HDAUDIO_EMPTY_CONNECTION_LIST: + reason = "STATUS_HDAUDIO_EMPTY_CONNECTION_LIST"; + break; + case MD_NTSTATUS_WIN_STATUS_HDAUDIO_CONNECTION_LIST_NOT_SUPPORTED: + reason = "STATUS_HDAUDIO_CONNECTION_LIST_NOT_SUPPORTED"; + break; + case MD_NTSTATUS_WIN_STATUS_HDAUDIO_NO_LOGICAL_DEVICES_CREATED: + reason = "STATUS_HDAUDIO_NO_LOGICAL_DEVICES_CREATED"; + break; + case MD_NTSTATUS_WIN_STATUS_HDAUDIO_NULL_LINKED_LIST_ENTRY: + reason = "STATUS_HDAUDIO_NULL_LINKED_LIST_ENTRY"; + break; + case MD_NTSTATUS_WIN_STATUS_VOLSNAP_BOOTFILE_NOT_VALID: + reason = "STATUS_VOLSNAP_BOOTFILE_NOT_VALID"; + break; + case MD_NTSTATUS_WIN_STATUS_IO_PREEMPTED: + reason = "STATUS_IO_PREEMPTED"; + break; + case MD_NTSTATUS_WIN_STATUS_SVHDX_ERROR_STORED: + reason = "STATUS_SVHDX_ERROR_STORED"; + break; + case MD_NTSTATUS_WIN_STATUS_SVHDX_ERROR_NOT_AVAILABLE: + reason = "STATUS_SVHDX_ERROR_NOT_AVAILABLE"; + break; + case MD_NTSTATUS_WIN_STATUS_SVHDX_UNIT_ATTENTION_AVAILABLE: + reason = "STATUS_SVHDX_UNIT_ATTENTION_AVAILABLE"; + break; + case MD_NTSTATUS_WIN_STATUS_SVHDX_UNIT_ATTENTION_CAPACITY_DATA_CHANGED: + reason = "STATUS_SVHDX_UNIT_ATTENTION_CAPACITY_DATA_CHANGED"; + break; + case MD_NTSTATUS_WIN_STATUS_SVHDX_UNIT_ATTENTION_RESERVATIONS_PREEMPTED: + reason = "STATUS_SVHDX_UNIT_ATTENTION_RESERVATIONS_PREEMPTED"; + break; + case MD_NTSTATUS_WIN_STATUS_SVHDX_UNIT_ATTENTION_RESERVATIONS_RELEASED: + reason = "STATUS_SVHDX_UNIT_ATTENTION_RESERVATIONS_RELEASED"; + break; + case MD_NTSTATUS_WIN_STATUS_SVHDX_UNIT_ATTENTION_REGISTRATIONS_PREEMPTED: + reason = "STATUS_SVHDX_UNIT_ATTENTION_REGISTRATIONS_PREEMPTED"; + break; + case MD_NTSTATUS_WIN_STATUS_SVHDX_UNIT_ATTENTION_OPERATING_DEFINITION_CHANGED: + reason = "STATUS_SVHDX_UNIT_ATTENTION_OPERATING_DEFINITION_CHANGED"; + break; + case MD_NTSTATUS_WIN_STATUS_SVHDX_RESERVATION_CONFLICT: + reason = "STATUS_SVHDX_RESERVATION_CONFLICT"; + break; + case MD_NTSTATUS_WIN_STATUS_SVHDX_WRONG_FILE_TYPE: + reason = "STATUS_SVHDX_WRONG_FILE_TYPE"; + break; + case MD_NTSTATUS_WIN_STATUS_SVHDX_VERSION_MISMATCH: + reason = "STATUS_SVHDX_VERSION_MISMATCH"; + break; + case MD_NTSTATUS_WIN_STATUS_VHD_SHARED: + reason = "STATUS_VHD_SHARED"; + break; + case MD_NTSTATUS_WIN_STATUS_SPACES_RESILIENCY_TYPE_INVALID: + reason = "STATUS_SPACES_RESILIENCY_TYPE_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_SPACES_DRIVE_SECTOR_SIZE_INVALID: + reason = "STATUS_SPACES_DRIVE_SECTOR_SIZE_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_SPACES_INTERLEAVE_LENGTH_INVALID: + reason = "STATUS_SPACES_INTERLEAVE_LENGTH_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_SPACES_NUMBER_OF_COLUMNS_INVALID: + reason = "STATUS_SPACES_NUMBER_OF_COLUMNS_INVALID"; + break; + case MD_NTSTATUS_WIN_STATUS_SPACES_NOT_ENOUGH_DRIVES: + reason = "STATUS_SPACES_NOT_ENOUGH_DRIVES"; + break; + default: { + char reason_string[11]; + std::snprintf(reason_string, sizeof(reason_string), "0x%08x", ntstatus); + reason = reason_string; + break; + } + } + return reason; +} + +} // namespace google_breakpad diff --git a/toolkit/crashreporter/google-breakpad/src/processor/symbolic_constants_win.h b/toolkit/crashreporter/google-breakpad/src/processor/symbolic_constants_win.h new file mode 100644 index 000000000000..c05c91698c9a --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/processor/symbolic_constants_win.h @@ -0,0 +1,50 @@ +// Copyright (c) 2015 Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// ntstatus_reason_win.h: Windows NTSTATUS code to string. +// +// Provides a means to convert NTSTATUS codes to strings. +// +// Author: Ben Wagner + +#ifndef GOOGLE_BREAKPAD_PROCESSOR_SYMBOLIC_CONSTANTS_WIN_H_ +#define GOOGLE_BREAKPAD_PROCESSOR_SYMBOLIC_CONSTANTS_WIN_H_ + +#include + +#include "google_breakpad/common/breakpad_types.h" + +namespace google_breakpad { + +/* Converts a NTSTATUS code to a reason string. */ +std::string NTStatusToString(uint32_t ntstatus); + +} // namespace google_breakpad + +#endif // GOOGLE_BREAKPAD_PROCESSOR_SYMBOLIC_CONSTANTS_WIN_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/processor/synth_minidump.cc b/toolkit/crashreporter/google-breakpad/src/processor/synth_minidump.cc index 377368ac69fe..2cfbb08886d3 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/synth_minidump.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/synth_minidump.cc @@ -77,6 +77,9 @@ SystemInfo::SystemInfo(const Dump &dump, D32(system_info.cpu.x86_cpu_info.version_information); D32(system_info.cpu.x86_cpu_info.feature_information); D32(system_info.cpu.x86_cpu_info.amd_extended_cpu_features); + } else if (system_info.processor_architecture == MD_CPU_ARCHITECTURE_ARM) { + D32(system_info.cpu.arm_cpu_info.cpuid); + D32(system_info.cpu.arm_cpu_info.elf_hwcaps); } else { D64(system_info.cpu.other_cpu_info.processor_features[0]); D64(system_info.cpu.other_cpu_info.processor_features[1]); @@ -192,6 +195,42 @@ Context::Context(const Dump &dump, const MDRawContextARM &context) assert(Size() == sizeof(MDRawContextARM)); } +Context::Context(const Dump &dump, const MDRawContextMIPS &context) + : Section(dump) { + // The caller should have properly set the CPU type flag. + assert(context.context_flags & MD_CONTEXT_MIPS); + D32(context.context_flags); + D32(context._pad0); + + for (int i = 0; i < MD_CONTEXT_MIPS_GPR_COUNT; ++i) + D64(context.iregs[i]); + + D64(context.mdhi); + D64(context.mdlo); + + for (int i = 0; i < MD_CONTEXT_MIPS_DSP_COUNT; ++i) + D32(context.hi[i]); + + for (int i = 0; i < MD_CONTEXT_MIPS_DSP_COUNT; ++i) + D32(context.lo[i]); + + D32(context.dsp_control); + D32(context._pad1); + + D64(context.epc); + D64(context.badvaddr); + D32(context.status); + D32(context.cause); + + for (int i = 0; i < MD_FLOATINGSAVEAREA_MIPS_FPR_COUNT; ++i) + D64(context.float_save.regs[i]); + + D32(context.float_save.fpcsr); + D32(context.float_save.fir); + + assert(Size() == sizeof(MDRawContextMIPS)); +} + Thread::Thread(const Dump &dump, uint32_t thread_id, const Memory &stack, const Context &context, uint32_t suspend_count, uint32_t priority_class, diff --git a/toolkit/crashreporter/google-breakpad/src/processor/synth_minidump.h b/toolkit/crashreporter/google-breakpad/src/processor/synth_minidump.h index fbc1e29bb3ef..8dac8784e581 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/synth_minidump.h +++ b/toolkit/crashreporter/google-breakpad/src/processor/synth_minidump.h @@ -228,6 +228,7 @@ class Context: public Section { // Create a context belonging to DUMP whose contents are a copy of CONTEXT. Context(const Dump &dump, const MDRawContextX86 &context); Context(const Dump &dump, const MDRawContextARM &context); + Context(const Dump &dump, const MDRawContextMIPS &context); // Add an empty context to the dump. Context(const Dump &dump) : Section(dump) {} // Add constructors for other architectures here. Remember to byteswap. diff --git a/toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_read_av.dmp b/toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_read_av.dmp deleted file mode 100755 index 3d2429a622b0..000000000000 Binary files a/toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_read_av.dmp and /dev/null differ diff --git a/toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_read_av_block_write.dmp b/toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_read_av_block_write.dmp deleted file mode 100755 index 265e2b7daeb1..000000000000 Binary files a/toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_read_av_block_write.dmp and /dev/null differ diff --git a/toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_read_av_clobber_write.dmp b/toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_read_av_clobber_write.dmp deleted file mode 100755 index f536c72e5896..000000000000 Binary files a/toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_read_av_clobber_write.dmp and /dev/null differ diff --git a/toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_read_av_conditional.dmp b/toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_read_av_conditional.dmp deleted file mode 100755 index eba8f9e7fb7d..000000000000 Binary files a/toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_read_av_conditional.dmp and /dev/null differ diff --git a/toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_read_av_then_jmp.dmp b/toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_read_av_then_jmp.dmp deleted file mode 100755 index 1124f4006fa5..000000000000 Binary files a/toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_read_av_then_jmp.dmp and /dev/null differ diff --git a/toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_read_av_xchg_write.dmp b/toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_read_av_xchg_write.dmp deleted file mode 100755 index 066ebf122d99..000000000000 Binary files a/toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_read_av_xchg_write.dmp and /dev/null differ diff --git a/toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_write_av.dmp b/toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_write_av.dmp deleted file mode 100755 index 6f3e3bca0b49..000000000000 Binary files a/toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_write_av.dmp and /dev/null differ diff --git a/toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_write_av_arg_to_call.dmp b/toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_write_av_arg_to_call.dmp deleted file mode 100755 index 9c0a21cd7a19..000000000000 Binary files a/toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_write_av_arg_to_call.dmp and /dev/null differ diff --git a/toolkit/crashreporter/google-breakpad/src/processor/testdata/exec_av_on_stack.dmp b/toolkit/crashreporter/google-breakpad/src/processor/testdata/exec_av_on_stack.dmp deleted file mode 100755 index b783c4344635..000000000000 Binary files a/toolkit/crashreporter/google-breakpad/src/processor/testdata/exec_av_on_stack.dmp and /dev/null differ diff --git a/toolkit/crashreporter/google-breakpad/src/processor/testdata/minidump2.dmp b/toolkit/crashreporter/google-breakpad/src/processor/testdata/minidump2.dmp deleted file mode 100644 index 1a6feee7cc1f..000000000000 Binary files a/toolkit/crashreporter/google-breakpad/src/processor/testdata/minidump2.dmp and /dev/null differ diff --git a/toolkit/crashreporter/google-breakpad/src/processor/testdata/minidump2.dump.out b/toolkit/crashreporter/google-breakpad/src/processor/testdata/minidump2.dump.out deleted file mode 100644 index d8816e5dca62..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/processor/testdata/minidump2.dump.out +++ /dev/null @@ -1,705 +0,0 @@ -MDRawHeader - signature = 0x504d444d - version = 0x5128a793 - stream_count = 9 - stream_directory_rva = 0x20 - checksum = 0x0 - time_date_stamp = 0x45d35f73 2007-02-14 19:13:55 - flags = 0x0 - -mDirectory[0] -MDRawDirectory - stream_type = 3 - location.data_size = 100 - location.rva = 0x184 - -mDirectory[1] -MDRawDirectory - stream_type = 4 - location.data_size = 1408 - location.rva = 0x1e8 - -mDirectory[2] -MDRawDirectory - stream_type = 5 - location.data_size = 52 - location.rva = 0x1505 - -mDirectory[3] -MDRawDirectory - stream_type = 6 - location.data_size = 168 - location.rva = 0xdc - -mDirectory[4] -MDRawDirectory - stream_type = 7 - location.data_size = 56 - location.rva = 0x8c - -mDirectory[5] -MDRawDirectory - stream_type = 15 - location.data_size = 24 - location.rva = 0xc4 - -mDirectory[6] -MDRawDirectory - stream_type = 1197932545 - location.data_size = 12 - location.rva = 0x14f9 - -mDirectory[7] -MDRawDirectory - stream_type = 0 - location.data_size = 0 - location.rva = 0x0 - -mDirectory[8] -MDRawDirectory - stream_type = 0 - location.data_size = 0 - location.rva = 0x0 - -Streams: - stream type 0x0 at index 8 - stream type 0x3 at index 0 - stream type 0x4 at index 1 - stream type 0x5 at index 2 - stream type 0x6 at index 3 - stream type 0x7 at index 4 - stream type 0xf at index 5 - stream type 0x47670001 at index 6 - -MinidumpThreadList - thread_count = 2 - -thread[0] -MDRawThread - thread_id = 0xbf4 - suspend_count = 0 - priority_class = 0x0 - priority = 0x0 - teb = 0x7ffdf000 - stack.start_of_memory_range = 0x12f31c - stack.memory.data_size = 0xce4 - stack.memory.rva = 0x1639 - thread_context.data_size = 0x2cc - thread_context.rva = 0xd94 - -MDRawContextX86 - context_flags = 0x1003f - dr0 = 0x0 - dr1 = 0x0 - dr2 = 0x0 - dr3 = 0x0 - dr6 = 0x0 - dr7 = 0x0 - float_save.control_word = 0xffff027f - float_save.status_word = 0xffff0000 - float_save.tag_word = 0xffffffff - float_save.error_offset = 0x0 - float_save.error_selector = 0x220000 - float_save.data_offset = 0x0 - float_save.data_selector = 0xffff0000 - float_save.register_area[80] = 0x0000000018b72200000118b72200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - float_save.cr0_npx_state = 0x0 - gs = 0x0 - fs = 0x3b - es = 0x23 - ds = 0x23 - edi = 0x0 - esi = 0x7b8 - ebx = 0x7c883780 - edx = 0x7c97c0d8 - ecx = 0x7c80b46e - eax = 0x400000 - ebp = 0x12f384 - eip = 0x7c90eb94 - cs = 0x1b - eflags = 0x246 - esp = 0x12f320 - ss = 0x23 - extended_registers[512] = 0x7f0200000000220000000000000000000000000000000000801f0000ffff00000000000018b72200000100000000000018b72200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004509917c4e09917c38b622002400020024b42200020000009041917c0070fd7f0510907cccb22200000000009cb3220018ee907c7009917cc0e4977c6f3e917c623e917c08020000dcb62200b4b622001e000000000000000000000000000000000000002eb42200000000000f000000020000001e00200000fcfd7f2f63796764726976652f632f444f43554d457e312f4d4d454e544f7e312f4c4f43414c537e312f54656d7000000000000000000130b422000000004300000000000000001efcfd7f4509917c4e09917c5ad9000008b32200b4b62200 - -Stack -0x00000000c0e9907ccb25807cb8070000000000000000000034ff1200b0fe12008037887c140000000100000000000000000000001000000027e0907c2e39917c0050fd7f00f0fd7f000000000400000034f312006947c788d4f31200a89a837cf825807c0000000098f312003225807cb8070000ffffffff00000000e4f31200ff1d4000b8070000ffffffffa8fa12008037887c0e1c4000a8fa120000000000ff792a0f64f91200b01b400000004000b0fe12000040020070fa1200084042000000000080fa120080fa12004e30867ca8fa12000000000000000000000000000018000002100000e3ef907c0000000079d900000000000048f41200000014003207917c0500000078071400000014000000000020f412003207917ca05f140018ee907cfa00000074f61200000000009615917ceb06917cf00298000100000000000000384f14009615917ceb06917c7801140008000000404f14000000a659985f1400080000000000000018ee907c90fea700400698003815917c184f1400eb06917c00000000800000000000a65988f69f0090f51200a569917cf8f41200d95c878880f5120043ef907c480485000500000090f5120088fea700a8212400000000000000000080f512002469917cf8fbfd7fa821240008000000f500000000000000384d850078019800a8fa120004000000a05f140096d4917c00000000b0d4917c0000000008069800184f140000000000104f140000000000184f140000004000000000010040020063003a005c0074006500730074005f006100700070002e006500780065000000000000002f00000028000000184f1400780185007801140028000000000000000000140084f3120010000000d8f5120018ee907cf006917cffffffffeb06917ce619917c88e6a7003003000001030000ff1b917c0000980080e6a70080069800400698000000980080e6a70000000000000000000000000080e6a7000818000088e6a700d759927c78019800081800000210000000009800f8f31200280a0000dcf6120018ee907cf006917cffffffffeb06917c0859927c00009800080000005859927c00000000000001000000a659000000005a6202000010000068fe030001000000dffe03000000010000000100fffffe7f0100000001c0c27700008500000000002dc0c27700000000684aaf590000a659241a917c80c0977c0000000000000000cd5c927c0050fd7f0000a65900000100080000004550fd7f0000000000000000000000000050fd7fcd5c927c05000000d4f61200f45c927c80e4977c05000000010000000050fd7f18f712007009917cc0e4977c172e817cff2d817c000000000000a6590000a6590210000000f0fd7f05000000e8f612000806980064f81200a89a837c002e817cffffffffff2d817cc8242400dd8ea75901000000000000004cf712003608a9590000a65901000000000000000100000060f71200e407a9596cf7120000004000000000010040020063003a005c0074006500730074005f006100700070002e0065007800650000006d05917c905f140000000000440d020000000000604f14000c0000007801140000000000a04e1400d84d8700400687004509917c0800000000000000000000004000000078011400a8038700404f14000510907c000000000000000078011400980387000800000008000000c0e4977cd04d8700f835887c7801140010000000a0e7ae591600000030fd1200d39b917c44000000620000000000a65950e9ae59d8eaae59a80387000100000014040000000000000100000002000000f800a659c003870001000000780114009508917c0000a659091b917c020000000900000040000000a2fd12009cfd1200404f1400a2fd1200d04d8700640187000000000000000000d04d870010000000d84d8700384f1400a803870010000000c00300000000870074fb1200404f14006cfe120018ee907cf006917cffffffffeb06917ca09d400000008700000000000400000000000000ffffff3fc04d8700ccfd12009c4d400004000000fa19917cb84d870064018700c04d8700063440000400000018000000c04d870079d90000c0038700fa31400000000000c04d8700c04d87000000000001000000b0fe120082294000c04d87000000000000000000c04d870048fe12008cfe120000000000e224400040fe12008cfe1200c04d8700d84d8700b0fe12008600817c54fa1200d8f9120000000000160018005479420079d90000000000000757917c00000200a4f91200a4f91200a4f91200020000000200000000000000c4f912000000000079d9000014fb12004cfa120014fb1200005a917c00fa1200a0fb120001000000655a917ca405817c74c1977ce705817c00000000f4fd120098fb120000000000a0fb12000000000090fb12000000800070fa120000000000000000000000000016001800547942000000000001000000000000000000000000000000000000003308917ca89a837c0000807c0000807ce800807c2cfa12001fe2907c11fa877cffffffffe06f817c000000006cfa12001c0000000f000000e06f817c8fc60000f0f312000060817cc8fa1200a89a837c7039867cfffffffff0ff1200da36847ca8fa1200099b837cb0fa120000000000b0fa12000000000000000000000000009cfb1200b8fb1200d4fa1200bf37907c9cfb1200e0ff1200b8fb120070fb1200b0ff1200d837907ce0ff120084fb12008b37907c9cfb1200e0ff1200b8fb120070fb1200a89a837c010000009cfb1200e0ff12006078937c9cfb1200e0ff1200b8fb120070fb1200a89a837c280a00009cfb12000200000018ee907c9032917cffffffff8832917c3364917c68fb1200000087003207917c02000000dc31917c1232917c8132917c8832917c1e000000c01e2400080200003807917c54fb12003207917cc4fb120018ee907c9032917c0000130000d01200beb4800088fe1200faea907c00000000b8fb12009cfb1200b8fb1200050000c000000000000000009e4240000200000001000000450000003f0001000000000000000000000000000000000000000000000000007f02ffff0000ffffffffffff0000000000002200000000000000ffff0000000018b72200000118b7220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b0000002300000023000000280a000002000000c1ab807c58bc420094fe12004500000088fe12009e4240001b0000004602010084fe1200230000007f0200000000220000000000000000000000000000000000801f0000ffff00000000000018b72200000100000000000018b72200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004509917c4e09917c38b622002400020024b42200020000009041917c0070fd7f0510907cccb22200000000009cb3220018ee907c7009917cc0e4977c6f3e917c623e917c08020000dcb62200b4b622001e000000000000000000000000000000000000002eb42200000000000f000000020000001e00200000fcfd7f2f63796764726976652f632f444f43554d457e312f4d4d454e544f7e312f4c4f43414c537e312f54656d7000000000000000000130b422000000004300000000000000001efcfd7f4509917c4e09917c5ad9000008b32200b4b622004500000070ff120000424000b8278700dc31917c00000000004c870000000020040000000000000007000000000000004042400000000000000000002e000000000000000cff12007b434100010000000700000084434100004d87002e39917cffffffff24000000240000002700000000000000584d870004000000b1944000244c87002a0000002f000000c0fe1200004d8700584d87000000a659b0b9a859015d400015aa400000000000b4070000784e14000000000001000000f40b00000000000000000000bc070000b8070000f40b0000a8fa120000000000009c4000599c400094b240004f752a0fc0ff1200ec534000010000003039870050398700ff752a0f00002400a02024000050fd7f050000c00100000005000000000000000000240084ff1200acfa1200e0ff1200d06f4000a70b7a0f00000000f0ff1200d76f817c00002400a02024000050fd7f050000c0c8ff1200a8fa1200ffffffffa89a837ce06f817c0000000000000000000000004354400000000000 - -thread[1] -MDRawThread - thread_id = 0x11c0 - suspend_count = 0 - priority_class = 0x0 - priority = 0x0 - teb = 0x7ffde000 - stack.start_of_memory_range = 0x97f6e8 - stack.memory.data_size = 0x918 - stack.memory.rva = 0x231d - thread_context.data_size = 0x2cc - thread_context.rva = 0x1060 - -MDRawContextX86 - context_flags = 0x1003f - dr0 = 0x0 - dr1 = 0x0 - dr2 = 0x0 - dr3 = 0x0 - dr6 = 0x0 - dr7 = 0x0 - float_save.control_word = 0xffff027f - float_save.status_word = 0xffff0000 - float_save.tag_word = 0xffffffff - float_save.error_offset = 0x0 - float_save.error_selector = 0x870000 - float_save.data_offset = 0x0 - float_save.data_selector = 0xffff0000 - float_save.register_area[80] = 0x84fb120000001400320778071400000014000000f4fe1200a0fd120018eeb0fd12003815917c961534ff120034ff12000000e7712a0f2a0000005400ccfb120068514000584d540000002a000000f4fe - float_save.cr0_npx_state = 0x0 - gs = 0x0 - fs = 0x3b - es = 0x23 - ds = 0x23 - edi = 0x145b00 - esi = 0x145aa8 - ebx = 0x145ad0 - edx = 0x7c90eb94 - ecx = 0x7 - eax = 0xa80000 - ebp = 0x97f6fc - eip = 0x7c90eb94 - cs = 0x1b - eflags = 0x246 - esp = 0x97f6ec - ss = 0x23 - extended_registers[512] = 0x7f0200000000870000000000000000000000000000000000801f0000ccfb120084fb1200000014003207917c050000007807140000001400000000005cfb1200f4fe1200a0fd120018ee907c2d020000b0fd12003815917c9615917ceb06917c34ff120034ff12000000000060000000e7712a0f2a0000005400000000000000ccfb120068514000584d870034fc1200540000002a000000f4fe1200f8fe12002c2f4000584d87005e00000034fc12005400000000000000b0fe1200f4fe1200c0fe12005f21400034fc12002a0000003b762a0f91214000303132330000870038393a3b3c3d3e3f4041424300000000070000003bd11e2340061400b858101e5e03e0652e005c00320033003100650064003100780114002d0066003300380034002d0000000000390034002d0062003800350038002d0031003000984e1400350065003000330065003000360035002e0064006d0070000000907c08000000ffffffff8832917cbeb4807c780114001d00f40b784e14000401000044fd120050fd1200c01e240078011400bdb9807ca04e14007c80c2770000000008fd120078011400ecfc1200f0fc1200e6b9807cffffffff7c80c27708fd12001c00000024fd1200e92a867c7c80c277b45a887c8037887c2d0200000080c2770000c17780000000005003000010000020000000780114005cff12001648847c091b917c - -Stack -0x8000108020fa97009fd7907c0000000048f7970005000f0040061400000000004cf7970037b9807c00000000000000003103917c780114000000000061dc907cf1b8807c00000000ffffffff70f79700000000000000000054f797003082140001000000000000000200000000000000000000007cf7970020b9807c0e00000004000000006000000000a80078011400000000000882140092d5907c8b9b807c9c070000d0f89700780114009c07000038821400807f140020dea85910fa9700780114009807000088fb9700e07f14009c0700000000000078011400000000000882140000000000000000000000000078011400ba0300000000000000000000000000000000000000000000000000007801140000000000000000000000000000000000c0030000000000000000000000000000088214005c0057000600000078011400000000005c00730079007300740065006d0033000082140068011400000000000000000000821400d47f1400807f140070f8970061eea859e000a8000000a8001c4e000084f89700bdeea859e000a8000000a8001c4e0000a4f897005fefa8590000a8000000000006000000c4f89700e000a80060fe9700c8f897005abfa8590000a80000000000060000001c000000d47f1400807f1400380000006ce9907c88b9807cffffffff0000a80000000000807f140030fa97007fc3a859a0c4a859b0fb970060fe9700684f1400504500004c010400ca9610410000000000000000e0000e210b01070a00400000003a000000000000f1100000001000000000bf760000000000100000000200000500010005000100040000000000000000b00000000400009ba2000000001400285214000000000034fa97007801140034fa9700910e917c080614006d05917cc84d85005c4e8500684f140000000000b04800002852140078011400e00300003052140000000000000000000000000078011400c403000030821400380000000000000000000000000000000000000000000000000000003882140048050000780200003800000000100000ec000000b8470000400000000000000000000000000000000000140000000000807f140000000000000000000000000000000101a900000060fe9700dcff9700dcff97000050fd7f78fa970054fa9700ad9d917c8cfa9700c2066f7f0e000000000000001c01000078fa9700c84d850068fa970085ae807c78fc970024fc970083dba85978fc97008cfa9700800000008edba85914010000050000000100000096020000b8fc97003815917c9615917ceb06917c60fe970060fe9700c4fd9700d8fa9700000014003207917c21000000b80c14000000140030521400b0fa9700fffffffff4fc970018ee907c3807917cffffffff3207917cab06917ceb06917ccc4f140060fe9700684f1400e0004000e4fa9700a863917c74fb970018ee907c3808917cffffffff3308917c5b2c817c872c817c00000000f4fb9700000000000000000054fd970018ee907c4006140064fd97003815917c00e0fd7feb06917c684f140038821400780114000050fd7facfb970000000000000004000000000090fe97000000000018fb970050531400508b1400a89a837cffe9907cf60d817ca807000000000000ffe9907cf60d817c08000000000000000000000000000000585314003cfc97003882140000000000160e817cc4fd970060fe970058531400208f1400588b1400460f917c50531400208f1400780114003082140000000000b8fc970078011400b8fc9700910e917c080614006d05917c3882140060fe97000000000000000000960200003082140078011400ffe9907c38821400a807000000000000780114005853140058fc9700505314001000000000000000160e817c784e8500c4fd9700388214000000000024010000f00c00001000000044fc970000000000c7e2907ce721807cffffffffe8f69700388214001809000098fc9700acfc9700d2e2a859ffffffffe8f697003882140018090000c4fc97003882140060fe9700c4fd9700ccfc97004ee3a859ffffffffe8f69700000000003882140018090000e0fc9700f4fc970093b2a859ffffffffe8f69700000000003882140018090000c4fd970060fe9700a85a140078fd9700a5b3a85960fe9700c4fd9700684f1400e8f697000000000018090000000000000200000080fd9700c4fd970060fe970000000000f40b000000000000000000000000000000f0fd7f000000001cf3120000000000e40c000039160000cc020000940d00000000000000000000000000000000000002000000ac4f14006010000098fd97005eb7a8593916000000000000684f1400784e85000000000084ff9700d4fe97007bb9a85960fe9700c4fd9700684f14003849140084ff9700010000000000000008ff9700f40b0000090000000000000020000000200000006c0000008c000000380000001e000000c4000000dc000000a80000008401000064000000b801000030000000e801000080050000e8010000680700000000000068070000680700000000000005150000340000002915000039150000fc1600001d23000068070000600300008a070000c80a0000310a00002c130000f91400000c000000352c000000000000ffffffff5c0f0000c84d8500784e8500884e85000000000000000000000000004c010000fc39a6590000000002000000050000000100000000008500280a000001000001cc0200009c0000000b00000050000000040000000010000000000000000000000001000000000000000000000000000034ff970078baa859384914005c0f0000c84d850001000000884e8500684f140008ff970064ff970000000000a8070000b0fe1200f40b00009cfb120000000000b8fb12000000000000000000ae20140000000000884e8500784e8500c84d8500a8fa120011204000ffffffff5c0f0000a80700000000000078ff970064ff970000000000adbf807c2025807cecff97000100000084ff970003000000c0110000f40b0000f40b0000a8fa120000000000010067470c0000006cff9700bc070000ffffffff000000006c1a4000f40b000000fa12000000000000004000a09d4000b0fe120083b6807cb0fe120000004000a09d4000b0fe120000e0fd7f00069c86c0ff9700d8863f86ffffffffa89a837c90b6807c000000000000000000000000301a4000b0fe120000000000 - -MinidumpModuleList - module_count = 13 - -module[0] -MDRawModule - base_of_image = 0x400000 - size_of_image = 0x2d000 - checksum = 0x0 - time_date_stamp = 0x45d35f6c - module_name_rva = 0x78a - version_info.signature = 0x0 - version_info.struct_version = 0x0 - version_info.file_version = 0x0:0x0 - version_info.product_version = 0x0:0x0 - version_info.file_flags_mask = 0x0 - version_info.file_flags = 0x0 - version_info.file_os = 0x0 - version_info.file_type = 0x0 - version_info.file_subtype = 0x0 - version_info.file_date = 0x0:0x0 - cv_record.data_size = 40 - cv_record.rva = 0x132c - misc_record.data_size = 0 - misc_record.rva = 0x0 - (code_file) = "c:\test_app.exe" - (code_identifier) = "45D35F6C2d000" - (cv_record).cv_signature = 0x53445352 - (cv_record).signature = 5a9832e5-2872-41c1-838e-d98914e9b7ff - (cv_record).age = 1 - (cv_record).pdb_file_name = "c:\test_app.pdb" - (misc_record) = (null) - (debug_file) = "c:\test_app.pdb" - (debug_identifier) = "5A9832E5287241C1838ED98914E9B7FF1" - (version) = "" - -module[1] -MDRawModule - base_of_image = 0x7c900000 - size_of_image = 0xb0000 - checksum = 0xaf2f7 - time_date_stamp = 0x411096b4 - module_name_rva = 0x7ae - version_info.signature = 0xfeef04bd - version_info.struct_version = 0x10000 - version_info.file_version = 0x50001:0xa280884 - version_info.product_version = 0x50001:0xa280884 - version_info.file_flags_mask = 0x3f - version_info.file_flags = 0x0 - version_info.file_os = 0x40004 - version_info.file_type = 0x2 - version_info.file_subtype = 0x0 - version_info.file_date = 0x0:0x0 - cv_record.data_size = 34 - cv_record.rva = 0x1354 - misc_record.data_size = 0 - misc_record.rva = 0x0 - (code_file) = "C:\WINDOWS\system32\ntdll.dll" - (code_identifier) = "411096B4b0000" - (cv_record).cv_signature = 0x53445352 - (cv_record).signature = 36515fb5-d043-45e4-91f6-72fa2e2878c0 - (cv_record).age = 2 - (cv_record).pdb_file_name = "ntdll.pdb" - (misc_record) = (null) - (debug_file) = "ntdll.pdb" - (debug_identifier) = "36515FB5D04345E491F672FA2E2878C02" - (version) = "5.1.2600.2180" - -module[2] -MDRawModule - base_of_image = 0x7c800000 - size_of_image = 0xf4000 - checksum = 0xf724d - time_date_stamp = 0x44ab9a84 - module_name_rva = 0x7ee - version_info.signature = 0xfeef04bd - version_info.struct_version = 0x10000 - version_info.file_version = 0x50001:0xa280b81 - version_info.product_version = 0x50001:0xa280b81 - version_info.file_flags_mask = 0x3f - version_info.file_flags = 0x0 - version_info.file_os = 0x40004 - version_info.file_type = 0x2 - version_info.file_subtype = 0x0 - version_info.file_date = 0x0:0x0 - cv_record.data_size = 37 - cv_record.rva = 0x1376 - misc_record.data_size = 0 - misc_record.rva = 0x0 - (code_file) = "C:\WINDOWS\system32\kernel32.dll" - (code_identifier) = "44AB9A84f4000" - (cv_record).cv_signature = 0x53445352 - (cv_record).signature = bce8785c-57b4-4245-a669-896b6a19b954 - (cv_record).age = 2 - (cv_record).pdb_file_name = "kernel32.pdb" - (misc_record) = (null) - (debug_file) = "kernel32.pdb" - (debug_identifier) = "BCE8785C57B44245A669896B6A19B9542" - (version) = "5.1.2600.2945" - -module[3] -MDRawModule - base_of_image = 0x774e0000 - size_of_image = 0x13d000 - checksum = 0x13dc6b - time_date_stamp = 0x42e5be93 - module_name_rva = 0x834 - version_info.signature = 0xfeef04bd - version_info.struct_version = 0x10000 - version_info.file_version = 0x50001:0xa280aa6 - version_info.product_version = 0x50001:0xa280aa6 - version_info.file_flags_mask = 0x3f - version_info.file_flags = 0x0 - version_info.file_os = 0x40004 - version_info.file_type = 0x2 - version_info.file_subtype = 0x0 - version_info.file_date = 0x0:0x0 - cv_record.data_size = 34 - cv_record.rva = 0x139b - misc_record.data_size = 0 - misc_record.rva = 0x0 - (code_file) = "C:\WINDOWS\system32\ole32.dll" - (code_identifier) = "42E5BE9313d000" - (cv_record).cv_signature = 0x53445352 - (cv_record).signature = 683b65b2-46f4-4187-96d2-ee6d4c55eb11 - (cv_record).age = 2 - (cv_record).pdb_file_name = "ole32.pdb" - (misc_record) = (null) - (debug_file) = "ole32.pdb" - (debug_identifier) = "683B65B246F4418796D2EE6D4C55EB112" - (version) = "5.1.2600.2726" - -module[4] -MDRawModule - base_of_image = 0x77dd0000 - size_of_image = 0x9b000 - checksum = 0xa0de4 - time_date_stamp = 0x411096a7 - module_name_rva = 0x874 - version_info.signature = 0xfeef04bd - version_info.struct_version = 0x10000 - version_info.file_version = 0x50001:0xa280884 - version_info.product_version = 0x50001:0xa280884 - version_info.file_flags_mask = 0x3f - version_info.file_flags = 0x0 - version_info.file_os = 0x40004 - version_info.file_type = 0x2 - version_info.file_subtype = 0x0 - version_info.file_date = 0x0:0x0 - cv_record.data_size = 37 - cv_record.rva = 0x13bd - misc_record.data_size = 0 - misc_record.rva = 0x0 - (code_file) = "C:\WINDOWS\system32\advapi32.dll" - (code_identifier) = "411096A79b000" - (cv_record).cv_signature = 0x53445352 - (cv_record).signature = 455d6c5f-184d-45bb-b5c5-f30f82975114 - (cv_record).age = 2 - (cv_record).pdb_file_name = "advapi32.pdb" - (misc_record) = (null) - (debug_file) = "advapi32.pdb" - (debug_identifier) = "455D6C5F184D45BBB5C5F30F829751142" - (version) = "5.1.2600.2180" - -module[5] -MDRawModule - base_of_image = 0x77e70000 - size_of_image = 0x91000 - checksum = 0x9c482 - time_date_stamp = 0x411096ae - module_name_rva = 0x8ba - version_info.signature = 0xfeef04bd - version_info.struct_version = 0x10000 - version_info.file_version = 0x50001:0xa280884 - version_info.product_version = 0x50001:0xa280884 - version_info.file_flags_mask = 0x3f - version_info.file_flags = 0x0 - version_info.file_os = 0x40004 - version_info.file_type = 0x2 - version_info.file_subtype = 0x0 - version_info.file_date = 0x0:0x0 - cv_record.data_size = 35 - cv_record.rva = 0x13e2 - misc_record.data_size = 0 - misc_record.rva = 0x0 - (code_file) = "C:\WINDOWS\system32\rpcrt4.dll" - (code_identifier) = "411096AE91000" - (cv_record).cv_signature = 0x53445352 - (cv_record).signature = bea45a72-1da1-41da-a3ba-86b3a2031153 - (cv_record).age = 2 - (cv_record).pdb_file_name = "rpcrt4.pdb" - (misc_record) = (null) - (debug_file) = "rpcrt4.pdb" - (debug_identifier) = "BEA45A721DA141DAA3BA86B3A20311532" - (version) = "5.1.2600.2180" - -module[6] -MDRawModule - base_of_image = 0x77f10000 - size_of_image = 0x47000 - checksum = 0x4d0d0 - time_date_stamp = 0x43b34feb - module_name_rva = 0x8fc - version_info.signature = 0xfeef04bd - version_info.struct_version = 0x10000 - version_info.file_version = 0x50001:0xa280b02 - version_info.product_version = 0x50001:0xa280b02 - version_info.file_flags_mask = 0x3f - version_info.file_flags = 0x0 - version_info.file_os = 0x40004 - version_info.file_type = 0x2 - version_info.file_subtype = 0x0 - version_info.file_date = 0x0:0x0 - cv_record.data_size = 34 - cv_record.rva = 0x1405 - misc_record.data_size = 0 - misc_record.rva = 0x0 - (code_file) = "C:\WINDOWS\system32\gdi32.dll" - (code_identifier) = "43B34FEB47000" - (cv_record).cv_signature = 0x53445352 - (cv_record).signature = c0ea66be-00a6-4bd7-aef7-9e443a91869c - (cv_record).age = 2 - (cv_record).pdb_file_name = "gdi32.pdb" - (misc_record) = (null) - (debug_file) = "gdi32.pdb" - (debug_identifier) = "C0EA66BE00A64BD7AEF79E443A91869C2" - (version) = "5.1.2600.2818" - -module[7] -MDRawModule - base_of_image = 0x77d40000 - size_of_image = 0x90000 - checksum = 0x9505c - time_date_stamp = 0x42260159 - module_name_rva = 0x93c - version_info.signature = 0xfeef04bd - version_info.struct_version = 0x10000 - version_info.file_version = 0x50001:0xa280a3e - version_info.product_version = 0x50001:0xa280a3e - version_info.file_flags_mask = 0x3f - version_info.file_flags = 0x0 - version_info.file_os = 0x40004 - version_info.file_type = 0x2 - version_info.file_subtype = 0x0 - version_info.file_date = 0x0:0x0 - cv_record.data_size = 35 - cv_record.rva = 0x1427 - misc_record.data_size = 0 - misc_record.rva = 0x0 - (code_file) = "C:\WINDOWS\system32\user32.dll" - (code_identifier) = "4226015990000" - (cv_record).cv_signature = 0x53445352 - (cv_record).signature = ee2b714d-83a3-4c9d-8802-7621272f8326 - (cv_record).age = 2 - (cv_record).pdb_file_name = "user32.pdb" - (misc_record) = (null) - (debug_file) = "user32.pdb" - (debug_identifier) = "EE2B714D83A34C9D88027621272F83262" - (version) = "5.1.2600.2622" - -module[8] -MDRawModule - base_of_image = 0x77c10000 - size_of_image = 0x58000 - checksum = 0x57cd3 - time_date_stamp = 0x41109752 - module_name_rva = 0x97e - version_info.signature = 0xfeef04bd - version_info.struct_version = 0x10000 - version_info.file_version = 0x70000:0xa280884 - version_info.product_version = 0x60001:0x21be0884 - version_info.file_flags_mask = 0x3f - version_info.file_flags = 0x0 - version_info.file_os = 0x40004 - version_info.file_type = 0x1 - version_info.file_subtype = 0x0 - version_info.file_date = 0x0:0x0 - cv_record.data_size = 35 - cv_record.rva = 0x144a - misc_record.data_size = 0 - misc_record.rva = 0x0 - (code_file) = "C:\WINDOWS\system32\msvcrt.dll" - (code_identifier) = "4110975258000" - (cv_record).cv_signature = 0x53445352 - (cv_record).signature = a678f3c3-0ded-426b-8390-32b996987e38 - (cv_record).age = 1 - (cv_record).pdb_file_name = "msvcrt.pdb" - (misc_record) = (null) - (debug_file) = "msvcrt.pdb" - (debug_identifier) = "A678F3C30DED426B839032B996987E381" - (version) = "7.0.2600.2180" - -module[9] -MDRawModule - base_of_image = 0x76390000 - size_of_image = 0x1d000 - checksum = 0x2a024 - time_date_stamp = 0x411096ae - module_name_rva = 0x9c0 - version_info.signature = 0xfeef04bd - version_info.struct_version = 0x10000 - version_info.file_version = 0x50001:0xa280884 - version_info.product_version = 0x50001:0xa280884 - version_info.file_flags_mask = 0x3f - version_info.file_flags = 0x0 - version_info.file_os = 0x40004 - version_info.file_type = 0x2 - version_info.file_subtype = 0x0 - version_info.file_date = 0x0:0x0 - cv_record.data_size = 34 - cv_record.rva = 0x146d - misc_record.data_size = 0 - misc_record.rva = 0x0 - (code_file) = "C:\WINDOWS\system32\imm32.dll" - (code_identifier) = "411096AE1d000" - (cv_record).cv_signature = 0x53445352 - (cv_record).signature = 2c17a49c-251b-4c8e-b9e2-ad13d7d9ea16 - (cv_record).age = 2 - (cv_record).pdb_file_name = "imm32.pdb" - (misc_record) = (null) - (debug_file) = "imm32.pdb" - (debug_identifier) = "2C17A49C251B4C8EB9E2AD13D7D9EA162" - (version) = "5.1.2600.2180" - -module[10] -MDRawModule - base_of_image = 0x59a60000 - size_of_image = 0xa1000 - checksum = 0xa8824 - time_date_stamp = 0x4110969a - module_name_rva = 0xa00 - version_info.signature = 0xfeef04bd - version_info.struct_version = 0x10000 - version_info.file_version = 0x50001:0xa280884 - version_info.product_version = 0x50001:0xa280884 - version_info.file_flags_mask = 0x3f - version_info.file_flags = 0x0 - version_info.file_os = 0x40004 - version_info.file_type = 0x2 - version_info.file_subtype = 0x0 - version_info.file_date = 0x0:0x0 - cv_record.data_size = 36 - cv_record.rva = 0x148f - misc_record.data_size = 0 - misc_record.rva = 0x0 - (code_file) = "C:\WINDOWS\system32\dbghelp.dll" - (code_identifier) = "4110969Aa1000" - (cv_record).cv_signature = 0x53445352 - (cv_record).signature = 39559573-e21b-46f2-8e28-6923be9e6a76 - (cv_record).age = 1 - (cv_record).pdb_file_name = "dbghelp.pdb" - (misc_record) = (null) - (debug_file) = "dbghelp.pdb" - (debug_identifier) = "39559573E21B46F28E286923BE9E6A761" - (version) = "5.1.2600.2180" - -module[11] -MDRawModule - base_of_image = 0x77c00000 - size_of_image = 0x8000 - checksum = 0x11d78 - time_date_stamp = 0x411096b7 - module_name_rva = 0xa44 - version_info.signature = 0xfeef04bd - version_info.struct_version = 0x10000 - version_info.file_version = 0x50001:0xa280884 - version_info.product_version = 0x50001:0xa280884 - version_info.file_flags_mask = 0x3f - version_info.file_flags = 0x0 - version_info.file_os = 0x40004 - version_info.file_type = 0x2 - version_info.file_subtype = 0x0 - version_info.file_date = 0x0:0x0 - cv_record.data_size = 36 - cv_record.rva = 0x14b3 - misc_record.data_size = 0 - misc_record.rva = 0x0 - (code_file) = "C:\WINDOWS\system32\version.dll" - (code_identifier) = "411096B78000" - (cv_record).cv_signature = 0x53445352 - (cv_record).signature = 180a90c4-0384-463e-82dd-c45b2c8ab76e - (cv_record).age = 2 - (cv_record).pdb_file_name = "version.pdb" - (misc_record) = (null) - (debug_file) = "version.pdb" - (debug_identifier) = "180A90C40384463E82DDC45B2C8AB76E2" - (version) = "5.1.2600.2180" - -module[12] -MDRawModule - base_of_image = 0x76bf0000 - size_of_image = 0xb000 - checksum = 0xa29b - time_date_stamp = 0x411096ca - module_name_rva = 0xa88 - version_info.signature = 0xfeef04bd - version_info.struct_version = 0x10000 - version_info.file_version = 0x50001:0xa280884 - version_info.product_version = 0x50001:0xa280884 - version_info.file_flags_mask = 0x3f - version_info.file_flags = 0x0 - version_info.file_os = 0x40004 - version_info.file_type = 0x2 - version_info.file_subtype = 0x0 - version_info.file_date = 0x0:0x0 - cv_record.data_size = 34 - cv_record.rva = 0x14d7 - misc_record.data_size = 0 - misc_record.rva = 0x0 - (code_file) = "C:\WINDOWS\system32\psapi.dll" - (code_identifier) = "411096CAb000" - (cv_record).cv_signature = 0x53445352 - (cv_record).signature = a5c3a1f9-689f-43d8-ad22-8a0929388970 - (cv_record).age = 2 - (cv_record).pdb_file_name = "psapi.pdb" - (misc_record) = (null) - (debug_file) = "psapi.pdb" - (debug_identifier) = "A5C3A1F9689F43D8AD228A09293889702" - (version) = "5.1.2600.2180" - -MinidumpMemoryList - region_count = 3 - -region[0] -MDMemoryDescriptor - start_of_memory_range = 0x7c90eb14 - memory.data_size = 0x100 - memory.rva = 0x1539 -Memory -0xff83c4ec890424c744240401000000895c2408c74424100000000054e877000000c208009090909090558bec83ec508944240c64a1180000008b80a4010000890424c744240400000000c744240800000000c74424100000000054e8380000008b04248be55dc3908da424000000008d490090909090908bd40f349090909090c38da424000000008d64240090909090908d542408cd2ec3558bec9c81ecd00200008985dcfdffff898dd8fdffff8b45088b4d0489480c8d852cfdffff8988b80000008998a40000008990a800000089b0a000000089b89c0000008d4d0c8988c40000008b4d008988b40000008b4dfc8988c00000008c88bc0000008c989800 - -region[1] -MDMemoryDescriptor - start_of_memory_range = 0x12f31c - memory.data_size = 0xce4 - memory.rva = 0x1639 -Memory -0x00000000c0e9907ccb25807cb8070000000000000000000034ff1200b0fe12008037887c140000000100000000000000000000001000000027e0907c2e39917c0050fd7f00f0fd7f000000000400000034f312006947c788d4f31200a89a837cf825807c0000000098f312003225807cb8070000ffffffff00000000e4f31200ff1d4000b8070000ffffffffa8fa12008037887c0e1c4000a8fa120000000000ff792a0f64f91200b01b400000004000b0fe12000040020070fa1200084042000000000080fa120080fa12004e30867ca8fa12000000000000000000000000000018000002100000e3ef907c0000000079d900000000000048f41200000014003207917c0500000078071400000014000000000020f412003207917ca05f140018ee907cfa00000074f61200000000009615917ceb06917cf00298000100000000000000384f14009615917ceb06917c7801140008000000404f14000000a659985f1400080000000000000018ee907c90fea700400698003815917c184f1400eb06917c00000000800000000000a65988f69f0090f51200a569917cf8f41200d95c878880f5120043ef907c480485000500000090f5120088fea700a8212400000000000000000080f512002469917cf8fbfd7fa821240008000000f500000000000000384d850078019800a8fa120004000000a05f140096d4917c00000000b0d4917c0000000008069800184f140000000000104f140000000000184f140000004000000000010040020063003a005c0074006500730074005f006100700070002e006500780065000000000000002f00000028000000184f1400780185007801140028000000000000000000140084f3120010000000d8f5120018ee907cf006917cffffffffeb06917ce619917c88e6a7003003000001030000ff1b917c0000980080e6a70080069800400698000000980080e6a70000000000000000000000000080e6a7000818000088e6a700d759927c78019800081800000210000000009800f8f31200280a0000dcf6120018ee907cf006917cffffffffeb06917c0859927c00009800080000005859927c00000000000001000000a659000000005a6202000010000068fe030001000000dffe03000000010000000100fffffe7f0100000001c0c27700008500000000002dc0c27700000000684aaf590000a659241a917c80c0977c0000000000000000cd5c927c0050fd7f0000a65900000100080000004550fd7f0000000000000000000000000050fd7fcd5c927c05000000d4f61200f45c927c80e4977c05000000010000000050fd7f18f712007009917cc0e4977c172e817cff2d817c000000000000a6590000a6590210000000f0fd7f05000000e8f612000806980064f81200a89a837c002e817cffffffffff2d817cc8242400dd8ea75901000000000000004cf712003608a9590000a65901000000000000000100000060f71200e407a9596cf7120000004000000000010040020063003a005c0074006500730074005f006100700070002e0065007800650000006d05917c905f140000000000440d020000000000604f14000c0000007801140000000000a04e1400d84d8700400687004509917c0800000000000000000000004000000078011400a8038700404f14000510907c000000000000000078011400980387000800000008000000c0e4977cd04d8700f835887c7801140010000000a0e7ae591600000030fd1200d39b917c44000000620000000000a65950e9ae59d8eaae59a80387000100000014040000000000000100000002000000f800a659c003870001000000780114009508917c0000a659091b917c020000000900000040000000a2fd12009cfd1200404f1400a2fd1200d04d8700640187000000000000000000d04d870010000000d84d8700384f1400a803870010000000c00300000000870074fb1200404f14006cfe120018ee907cf006917cffffffffeb06917ca09d400000008700000000000400000000000000ffffff3fc04d8700ccfd12009c4d400004000000fa19917cb84d870064018700c04d8700063440000400000018000000c04d870079d90000c0038700fa31400000000000c04d8700c04d87000000000001000000b0fe120082294000c04d87000000000000000000c04d870048fe12008cfe120000000000e224400040fe12008cfe1200c04d8700d84d8700b0fe12008600817c54fa1200d8f9120000000000160018005479420079d90000000000000757917c00000200a4f91200a4f91200a4f91200020000000200000000000000c4f912000000000079d9000014fb12004cfa120014fb1200005a917c00fa1200a0fb120001000000655a917ca405817c74c1977ce705817c00000000f4fd120098fb120000000000a0fb12000000000090fb12000000800070fa120000000000000000000000000016001800547942000000000001000000000000000000000000000000000000003308917ca89a837c0000807c0000807ce800807c2cfa12001fe2907c11fa877cffffffffe06f817c000000006cfa12001c0000000f000000e06f817c8fc60000f0f312000060817cc8fa1200a89a837c7039867cfffffffff0ff1200da36847ca8fa1200099b837cb0fa120000000000b0fa12000000000000000000000000009cfb1200b8fb1200d4fa1200bf37907c9cfb1200e0ff1200b8fb120070fb1200b0ff1200d837907ce0ff120084fb12008b37907c9cfb1200e0ff1200b8fb120070fb1200a89a837c010000009cfb1200e0ff12006078937c9cfb1200e0ff1200b8fb120070fb1200a89a837c280a00009cfb12000200000018ee907c9032917cffffffff8832917c3364917c68fb1200000087003207917c02000000dc31917c1232917c8132917c8832917c1e000000c01e2400080200003807917c54fb12003207917cc4fb120018ee907c9032917c0000130000d01200beb4800088fe1200faea907c00000000b8fb12009cfb1200b8fb1200050000c000000000000000009e4240000200000001000000450000003f0001000000000000000000000000000000000000000000000000007f02ffff0000ffffffffffff0000000000002200000000000000ffff0000000018b72200000118b7220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b0000002300000023000000280a000002000000c1ab807c58bc420094fe12004500000088fe12009e4240001b0000004602010084fe1200230000007f0200000000220000000000000000000000000000000000801f0000ffff00000000000018b72200000100000000000018b72200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004509917c4e09917c38b622002400020024b42200020000009041917c0070fd7f0510907cccb22200000000009cb3220018ee907c7009917cc0e4977c6f3e917c623e917c08020000dcb62200b4b622001e000000000000000000000000000000000000002eb42200000000000f000000020000001e00200000fcfd7f2f63796764726976652f632f444f43554d457e312f4d4d454e544f7e312f4c4f43414c537e312f54656d7000000000000000000130b422000000004300000000000000001efcfd7f4509917c4e09917c5ad9000008b32200b4b622004500000070ff120000424000b8278700dc31917c00000000004c870000000020040000000000000007000000000000004042400000000000000000002e000000000000000cff12007b434100010000000700000084434100004d87002e39917cffffffff24000000240000002700000000000000584d870004000000b1944000244c87002a0000002f000000c0fe1200004d8700584d87000000a659b0b9a859015d400015aa400000000000b4070000784e14000000000001000000f40b00000000000000000000bc070000b8070000f40b0000a8fa120000000000009c4000599c400094b240004f752a0fc0ff1200ec534000010000003039870050398700ff752a0f00002400a02024000050fd7f050000c00100000005000000000000000000240084ff1200acfa1200e0ff1200d06f4000a70b7a0f00000000f0ff1200d76f817c00002400a02024000050fd7f050000c0c8ff1200a8fa1200ffffffffa89a837ce06f817c0000000000000000000000004354400000000000 - -region[2] -MDMemoryDescriptor - start_of_memory_range = 0x97f6e8 - memory.data_size = 0x918 - memory.rva = 0x231d -Memory -0x8000108020fa97009fd7907c0000000048f7970005000f0040061400000000004cf7970037b9807c00000000000000003103917c780114000000000061dc907cf1b8807c00000000ffffffff70f79700000000000000000054f797003082140001000000000000000200000000000000000000007cf7970020b9807c0e00000004000000006000000000a80078011400000000000882140092d5907c8b9b807c9c070000d0f89700780114009c07000038821400807f140020dea85910fa9700780114009807000088fb9700e07f14009c0700000000000078011400000000000882140000000000000000000000000078011400ba0300000000000000000000000000000000000000000000000000007801140000000000000000000000000000000000c0030000000000000000000000000000088214005c0057000600000078011400000000005c00730079007300740065006d0033000082140068011400000000000000000000821400d47f1400807f140070f8970061eea859e000a8000000a8001c4e000084f89700bdeea859e000a8000000a8001c4e0000a4f897005fefa8590000a8000000000006000000c4f89700e000a80060fe9700c8f897005abfa8590000a80000000000060000001c000000d47f1400807f1400380000006ce9907c88b9807cffffffff0000a80000000000807f140030fa97007fc3a859a0c4a859b0fb970060fe9700684f1400504500004c010400ca9610410000000000000000e0000e210b01070a00400000003a000000000000f1100000001000000000bf760000000000100000000200000500010005000100040000000000000000b00000000400009ba2000000001400285214000000000034fa97007801140034fa9700910e917c080614006d05917cc84d85005c4e8500684f140000000000b04800002852140078011400e00300003052140000000000000000000000000078011400c403000030821400380000000000000000000000000000000000000000000000000000003882140048050000780200003800000000100000ec000000b8470000400000000000000000000000000000000000140000000000807f140000000000000000000000000000000101a900000060fe9700dcff9700dcff97000050fd7f78fa970054fa9700ad9d917c8cfa9700c2066f7f0e000000000000001c01000078fa9700c84d850068fa970085ae807c78fc970024fc970083dba85978fc97008cfa9700800000008edba85914010000050000000100000096020000b8fc97003815917c9615917ceb06917c60fe970060fe9700c4fd9700d8fa9700000014003207917c21000000b80c14000000140030521400b0fa9700fffffffff4fc970018ee907c3807917cffffffff3207917cab06917ceb06917ccc4f140060fe9700684f1400e0004000e4fa9700a863917c74fb970018ee907c3808917cffffffff3308917c5b2c817c872c817c00000000f4fb9700000000000000000054fd970018ee907c4006140064fd97003815917c00e0fd7feb06917c684f140038821400780114000050fd7facfb970000000000000004000000000090fe97000000000018fb970050531400508b1400a89a837cffe9907cf60d817ca807000000000000ffe9907cf60d817c08000000000000000000000000000000585314003cfc97003882140000000000160e817cc4fd970060fe970058531400208f1400588b1400460f917c50531400208f1400780114003082140000000000b8fc970078011400b8fc9700910e917c080614006d05917c3882140060fe97000000000000000000960200003082140078011400ffe9907c38821400a807000000000000780114005853140058fc9700505314001000000000000000160e817c784e8500c4fd9700388214000000000024010000f00c00001000000044fc970000000000c7e2907ce721807cffffffffe8f69700388214001809000098fc9700acfc9700d2e2a859ffffffffe8f697003882140018090000c4fc97003882140060fe9700c4fd9700ccfc97004ee3a859ffffffffe8f69700000000003882140018090000e0fc9700f4fc970093b2a859ffffffffe8f69700000000003882140018090000c4fd970060fe9700a85a140078fd9700a5b3a85960fe9700c4fd9700684f1400e8f697000000000018090000000000000200000080fd9700c4fd970060fe970000000000f40b000000000000000000000000000000f0fd7f000000001cf3120000000000e40c000039160000cc020000940d00000000000000000000000000000000000002000000ac4f14006010000098fd97005eb7a8593916000000000000684f1400784e85000000000084ff9700d4fe97007bb9a85960fe9700c4fd9700684f14003849140084ff9700010000000000000008ff9700f40b0000090000000000000020000000200000006c0000008c000000380000001e000000c4000000dc000000a80000008401000064000000b801000030000000e801000080050000e8010000680700000000000068070000680700000000000005150000340000002915000039150000fc1600001d23000068070000600300008a070000c80a0000310a00002c130000f91400000c000000352c000000000000ffffffff5c0f0000c84d8500784e8500884e85000000000000000000000000004c010000fc39a6590000000002000000050000000100000000008500280a000001000001cc0200009c0000000b00000050000000040000000010000000000000000000000001000000000000000000000000000034ff970078baa859384914005c0f0000c84d850001000000884e8500684f140008ff970064ff970000000000a8070000b0fe1200f40b00009cfb120000000000b8fb12000000000000000000ae20140000000000884e8500784e8500c84d8500a8fa120011204000ffffffff5c0f0000a80700000000000078ff970064ff970000000000adbf807c2025807cecff97000100000084ff970003000000c0110000f40b0000f40b0000a8fa120000000000010067470c0000006cff9700bc070000ffffffff000000006c1a4000f40b000000fa12000000000000004000a09d4000b0fe120083b6807cb0fe120000004000a09d4000b0fe120000e0fd7f00069c86c0ff9700d8863f86ffffffffa89a837c90b6807c000000000000000000000000301a4000b0fe120000000000 - -MDException - thread_id = 0xbf4 - exception_record.exception_code = 0xc0000005 - exception_record.exception_flags = 0x0 - exception_record.exception_record = 0x0 - exception_record.exception_address = 0x40429e - exception_record.number_parameters = 2 - exception_record.exception_information[ 0] = 0x1 - exception_record.exception_information[ 1] = 0x45 - thread_context.data_size = 716 - thread_context.rva = 0xac8 - -MDRawContextX86 - context_flags = 0x1003f - dr0 = 0x0 - dr1 = 0x0 - dr2 = 0x0 - dr3 = 0x0 - dr6 = 0x0 - dr7 = 0x0 - float_save.control_word = 0xffff027f - float_save.status_word = 0xffff0000 - float_save.tag_word = 0xffffffff - float_save.error_offset = 0x0 - float_save.error_selector = 0x220000 - float_save.data_offset = 0x0 - float_save.data_selector = 0xffff0000 - float_save.register_area[80] = 0x0000000018b72200000118b72200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - float_save.cr0_npx_state = 0x0 - gs = 0x0 - fs = 0x3b - es = 0x23 - ds = 0x23 - edi = 0xa28 - esi = 0x2 - ebx = 0x7c80abc1 - edx = 0x42bc58 - ecx = 0x12fe94 - eax = 0x45 - ebp = 0x12fe88 - eip = 0x40429e - cs = 0x1b - eflags = 0x10246 - esp = 0x12fe84 - ss = 0x23 - extended_registers[512] = 0x7f0200000000220000000000000000000000000000000000801f0000ffff00000000000018b72200000100000000000018b72200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004509917c4e09917c38b622002400020024b42200020000009041917c0070fd7f0510907cccb22200000000009cb3220018ee907c7009917cc0e4977c6f3e917c623e917c08020000dcb62200b4b622001e000000000000000000000000000000000000002eb42200000000000f000000020000001e00200000fcfd7f2f63796764726976652f632f444f43554d457e312f4d4d454e544f7e312f4c4f43414c537e312f54656d7000000000000000000130b422000000004300000000000000001efcfd7f4509917c4e09917c5ad9000008b32200b4b62200 - -MDRawSystemInfo - processor_architecture = 0 - processor_level = 6 - processor_revision = 0xd08 - number_of_processors = 1 - product_type = 1 - major_version = 5 - minor_version = 1 - build_number = 2600 - platform_id = 2 - csd_version_rva = 0x768 - suite_mask = 0x100 - cpu.x86_cpu_info.vendor_id[0] = 0x756e6547 - cpu.x86_cpu_info.vendor_id[1] = 0x49656e69 - cpu.x86_cpu_info.vendor_id[2] = 0x6c65746e - cpu.x86_cpu_info.version_information = 0x6d8 - cpu.x86_cpu_info.feature_information = 0xafe9fbff - cpu.x86_cpu_info.amd_extended_cpu_features = 0xffffffff - (csd_version) = "Service Pack 2" - (cpu_vendor) = "GenuineIntel" - -MDRawMiscInfo - size_of_info = 24 - flags1 = 0x3 - process_id = 0xf5c - process_create_time = 0x45d35f73 - process_user_time = 0x0 - process_kernel_time = 0x0 - -MDRawBreakpadInfo - validity = 0x3 - dump_thread_id = 0x11c0 - requesting_thread_id = 0xbf4 - diff --git a/toolkit/crashreporter/google-breakpad/src/processor/testdata/minidump2.stackwalk.machine_readable.out b/toolkit/crashreporter/google-breakpad/src/processor/testdata/minidump2.stackwalk.machine_readable.out deleted file mode 100644 index 60f8af4c6954..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/processor/testdata/minidump2.stackwalk.machine_readable.out +++ /dev/null @@ -1,21 +0,0 @@ -OS|Windows NT|5.1.2600 Service Pack 2 -CPU|x86|GenuineIntel family 6 model 13 stepping 8|1 -Crash|EXCEPTION_ACCESS_VIOLATION_WRITE|0x45|0 -Module|test_app.exe||test_app.pdb|5A9832E5287241C1838ED98914E9B7FF1|0x00400000|0x0042cfff|1 -Module|dbghelp.dll|5.1.2600.2180|dbghelp.pdb|39559573E21B46F28E286923BE9E6A761|0x59a60000|0x59b00fff|0 -Module|imm32.dll|5.1.2600.2180|imm32.pdb|2C17A49C251B4C8EB9E2AD13D7D9EA162|0x76390000|0x763acfff|0 -Module|psapi.dll|5.1.2600.2180|psapi.pdb|A5C3A1F9689F43D8AD228A09293889702|0x76bf0000|0x76bfafff|0 -Module|ole32.dll|5.1.2600.2726|ole32.pdb|683B65B246F4418796D2EE6D4C55EB112|0x774e0000|0x7761cfff|0 -Module|version.dll|5.1.2600.2180|version.pdb|180A90C40384463E82DDC45B2C8AB76E2|0x77c00000|0x77c07fff|0 -Module|msvcrt.dll|7.0.2600.2180|msvcrt.pdb|A678F3C30DED426B839032B996987E381|0x77c10000|0x77c67fff|0 -Module|user32.dll|5.1.2600.2622|user32.pdb|EE2B714D83A34C9D88027621272F83262|0x77d40000|0x77dcffff|0 -Module|advapi32.dll|5.1.2600.2180|advapi32.pdb|455D6C5F184D45BBB5C5F30F829751142|0x77dd0000|0x77e6afff|0 -Module|rpcrt4.dll|5.1.2600.2180|rpcrt4.pdb|BEA45A721DA141DAA3BA86B3A20311532|0x77e70000|0x77f00fff|0 -Module|gdi32.dll|5.1.2600.2818|gdi32.pdb|C0EA66BE00A64BD7AEF79E443A91869C2|0x77f10000|0x77f56fff|0 -Module|kernel32.dll|5.1.2600.2945|kernel32.pdb|BCE8785C57B44245A669896B6A19B9542|0x7c800000|0x7c8f3fff|0 -Module|ntdll.dll|5.1.2600.2180|ntdll.pdb|36515FB5D04345E491F672FA2E2878C02|0x7c900000|0x7c9affff|0 - -0|0|test_app.exe|`anonymous namespace'::CrashFunction|c:\test_app.cc|58|0x3 -0|1|test_app.exe|main|c:\test_app.cc|65|0x5 -0|2|test_app.exe|__tmainCRTStartup|f:\sp\vctools\crt_bld\self_x86\crt\src\crt0.c|327|0x12 -0|3|kernel32.dll|BaseProcessStart|||0x23 diff --git a/toolkit/crashreporter/google-breakpad/src/processor/testdata/minidump2.stackwalk.out b/toolkit/crashreporter/google-breakpad/src/processor/testdata/minidump2.stackwalk.out deleted file mode 100644 index 20d1c4d88f50..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/processor/testdata/minidump2.stackwalk.out +++ /dev/null @@ -1,39 +0,0 @@ -Operating system: Windows NT - 5.1.2600 Service Pack 2 -CPU: x86 - GenuineIntel family 6 model 13 stepping 8 - 1 CPU - -Crash reason: EXCEPTION_ACCESS_VIOLATION_WRITE -Crash address: 0x45 - -Thread 0 (crashed) - 0 test_app.exe!`anonymous namespace'::CrashFunction [test_app.cc : 58 + 0x3] - eip = 0x0040429e esp = 0x0012fe84 ebp = 0x0012fe88 ebx = 0x7c80abc1 - esi = 0x00000002 edi = 0x00000a28 eax = 0x00000045 ecx = 0x0012fe94 - edx = 0x0042bc58 efl = 0x00010246 - Found by: given as instruction pointer in context - 1 test_app.exe!main [test_app.cc : 65 + 0x5] - eip = 0x00404200 esp = 0x0012fe90 ebp = 0x0012ff70 - Found by: call frame info - 2 test_app.exe!__tmainCRTStartup [crt0.c : 327 + 0x12] - eip = 0x004053ec esp = 0x0012ff78 ebp = 0x0012ffc0 - Found by: call frame info - 3 kernel32.dll!BaseProcessStart + 0x23 - eip = 0x7c816fd7 esp = 0x0012ffc8 ebp = 0x0012fff0 - Found by: call frame info - -Loaded modules: -0x00400000 - 0x0042cfff test_app.exe ??? (main) -0x59a60000 - 0x59b00fff dbghelp.dll 5.1.2600.2180 -0x76390000 - 0x763acfff imm32.dll 5.1.2600.2180 -0x76bf0000 - 0x76bfafff psapi.dll 5.1.2600.2180 -0x774e0000 - 0x7761cfff ole32.dll 5.1.2600.2726 -0x77c00000 - 0x77c07fff version.dll 5.1.2600.2180 -0x77c10000 - 0x77c67fff msvcrt.dll 7.0.2600.2180 -0x77d40000 - 0x77dcffff user32.dll 5.1.2600.2622 -0x77dd0000 - 0x77e6afff advapi32.dll 5.1.2600.2180 -0x77e70000 - 0x77f00fff rpcrt4.dll 5.1.2600.2180 -0x77f10000 - 0x77f56fff gdi32.dll 5.1.2600.2818 -0x7c800000 - 0x7c8f3fff kernel32.dll 5.1.2600.2945 -0x7c900000 - 0x7c9affff ntdll.dll 5.1.2600.2180 diff --git a/toolkit/crashreporter/google-breakpad/src/processor/testdata/module0.out b/toolkit/crashreporter/google-breakpad/src/processor/testdata/module0.out deleted file mode 100644 index 72fb4daab964..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/processor/testdata/module0.out +++ /dev/null @@ -1,22151 +0,0 @@ -MODULE windows x86 5A9832E5287241C1838ED98914E9B7FF1 test_app.pdb -FILE 1 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h -FILE 2 c:\program files\microsoft visual studio 8\vc\include\typeinfo -FILE 3 c:\breakpad\trunk\src\common\windows\guid_string.h -FILE 4 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcdce.h -FILE 5 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winreg.h -FILE 6 c:\program files\microsoft visual studio 8\vc\platformsdk\include\objidl.h -FILE 7 c:\program files\microsoft visual studio 8\vc\platformsdk\include\wtypes.h -FILE 8 c:\program files\microsoft visual studio 8\vc\platformsdk\include\tvout.h -FILE 9 c:\program files\microsoft visual studio 8\vc\include\malloc.h -FILE 10 c:\program files\microsoft visual studio 8\vc\platformsdk\include\pshpack2.h -FILE 11 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winuser.h -FILE 12 c:\breakpad\trunk\src\client\windows\handler\exception_handler.cc -FILE 13 c:\program files\microsoft visual studio 8\vc\platformsdk\include\urlmon.h -FILE 14 c:\program files\microsoft visual studio 8\vc\platformsdk\include\wincon.h -FILE 15 c:\program files\microsoft visual studio 8\vc\platformsdk\include\imm.h -FILE 16 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcdcep.h -FILE 17 c:\program files\microsoft visual studio 8\vc\include\xstring -FILE 18 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winver.h -FILE 19 c:\program files\microsoft visual studio 8\vc\include\xmemory -FILE 20 c:\program files\microsoft visual studio 8\vc\include\new -FILE 21 c:\program files\microsoft visual studio 8\vc\platformsdk\include\pshpack4.h -FILE 22 c:\program files\microsoft visual studio 8\vc\platformsdk\include\reason.h -FILE 23 c:\program files\microsoft visual studio 8\vc\include\vector -FILE 24 c:\program files\microsoft visual studio 8\vc\include\memory -FILE 25 c:\program files\microsoft visual studio 8\vc\include\wtime.inl -FILE 26 c:\program files\microsoft visual studio 8\vc\include\iterator -FILE 27 c:\program files\microsoft visual studio 8\vc\platformsdk\include\propidl.h -FILE 28 c:\program files\microsoft visual studio 8\vc\platformsdk\include\pshpack1.h -FILE 29 c:\program files\microsoft visual studio 8\vc\platformsdk\include\specstrings.h -FILE 30 c:\program files\microsoft visual studio 8\vc\platformsdk\include\basetsd.h -FILE 31 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winerror.h -FILE 32 c:\program files\microsoft visual studio 8\vc\include\assert.h -FILE 33 c:\program files\microsoft visual studio 8\vc\platformsdk\include\poppack.h -FILE 34 c:\program files\microsoft visual studio 8\vc\include\cstdio -FILE 35 c:\program files\microsoft visual studio 8\vc\include\stdio.h -FILE 36 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcnterr.h -FILE 37 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcasync.h -FILE 38 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcnsi.h -FILE 39 c:\program files\microsoft visual studio 8\vc\include\stdlib.h -FILE 40 c:\program files\microsoft visual studio 8\vc\platformsdk\include\servprov.h -FILE 41 c:\program files\microsoft visual studio 8\vc\include\limits.h -FILE 42 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcndr.h -FILE 43 c:\breakpad\trunk\src\client\windows\handler\exception_handler.h -FILE 44 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcnsip.h -FILE 45 c:\program files\microsoft visual studio 8\vc\platformsdk\include\dbghelp.h -FILE 46 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winnetwk.h -FILE 47 c:\program files\microsoft visual studio 8\vc\include\share.h -FILE 48 c:\program files\microsoft visual studio 8\vc\platformsdk\include\pshpack8.h -FILE 49 c:\program files\microsoft visual studio 8\vc\platformsdk\include\stralign.h -FILE 50 c:\breakpad\trunk\src\google_breakpad\common\minidump_format.h -FILE 51 c:\breakpad\trunk\src\google_breakpad\common\breakpad_types.h -FILE 52 c:\program files\microsoft visual studio 8\vc\include\xdebug -FILE 53 c:\program files\microsoft visual studio 8\vc\include\stdarg.h -FILE 54 c:\program files\microsoft visual studio 8\vc\platformsdk\include\windef.h -FILE 55 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winsvc.h -FILE 56 c:\program files\microsoft visual studio 8\vc\platformsdk\include\wingdi.h -FILE 57 c:\program files\microsoft visual studio 8\vc\include\xlocinfo -FILE 58 c:\program files\microsoft visual studio 8\vc\include\xlocinfo.h -FILE 59 c:\program files\microsoft visual studio 8\vc\platformsdk\include\oleidl.h -FILE 60 c:\program files\microsoft visual studio 8\vc\include\locale.h -FILE 61 c:\program files\microsoft visual studio 8\vc\include\string -FILE 62 c:\program files\microsoft visual studio 8\vc\include\istream -FILE 63 c:\breakpad\trunk\src\common\windows\string_utils-inl.h -FILE 64 c:\program files\microsoft visual studio 8\vc\include\ostream -FILE 65 c:\program files\microsoft visual studio 8\vc\include\xutility -FILE 66 c:\program files\microsoft visual studio 8\vc\include\wchar.h -FILE 67 c:\program files\microsoft visual studio 8\vc\include\utility -FILE 68 c:\program files\microsoft visual studio 8\vc\include\ios -FILE 69 c:\program files\microsoft visual studio 8\vc\include\xlocnum -FILE 70 c:\program files\microsoft visual studio 8\vc\include\iosfwd -FILE 71 c:\program files\microsoft visual studio 8\vc\include\swprintf.inl -FILE 72 c:\program files\microsoft visual studio 8\vc\platformsdk\include\guiddef.h -FILE 73 c:\program files\microsoft visual studio 8\vc\include\cwchar -FILE 74 c:\program files\microsoft visual studio 8\vc\include\climits -FILE 75 c:\program files\microsoft visual studio 8\vc\include\crtdbg.h -FILE 76 c:\program files\microsoft visual studio 8\vc\include\cstdlib -FILE 77 c:\program files\microsoft visual studio 8\vc\include\streambuf -FILE 78 c:\program files\microsoft visual studio 8\vc\include\xiosbase -FILE 79 c:\program files\microsoft visual studio 8\vc\include\xlocale -FILE 80 c:\program files\microsoft visual studio 8\vc\include\cstring -FILE 81 c:\program files\microsoft visual studio 8\vc\platformsdk\include\mcx.h -FILE 82 c:\program files\microsoft visual studio 8\vc\include\stdexcept -FILE 83 c:\program files\microsoft visual studio 8\vc\include\exception -FILE 84 c:\program files\microsoft visual studio 8\vc\include\xstddef -FILE 85 c:\program files\microsoft visual studio 8\vc\platformsdk\include\objbase.h -FILE 86 c:\program files\microsoft visual studio 8\vc\include\cstddef -FILE 87 c:\program files\microsoft visual studio 8\vc\platformsdk\include\unknwn.h -FILE 88 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpc.h -FILE 89 c:\program files\microsoft visual studio 8\vc\include\stddef.h -FILE 90 c:\program files\microsoft visual studio 8\vc\include\cassert -FILE 91 c:\program files\microsoft visual studio 8\vc\platformsdk\include\ole2.h -FILE 92 c:\program files\microsoft visual studio 8\vc\platformsdk\include\windows.h -FILE 93 c:\program files\microsoft visual studio 8\vc\include\yvals.h -FILE 94 c:\program files\microsoft visual studio 8\vc\platformsdk\include\oleauto.h -FILE 95 c:\program files\microsoft visual studio 8\vc\include\excpt.h -FILE 96 c:\program files\microsoft visual studio 8\vc\include\use_ansi.h -FILE 97 c:\program files\microsoft visual studio 8\vc\platformsdk\include\cguid.h -FILE 98 c:\program files\microsoft visual studio 8\vc\include\crtdefs.h -FILE 99 c:\program files\microsoft visual studio 8\vc\platformsdk\include\msxml.h -FILE 100 c:\program files\microsoft visual studio 8\vc\platformsdk\include\oaidl.h -FILE 101 c:\program files\microsoft visual studio 8\vc\include\sal.h -FILE 102 c:\program files\microsoft visual studio 8\vc\include\vadefs.h -FILE 103 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winnt.h -FILE 104 c:\program files\microsoft visual studio 8\vc\include\ctype.h -FILE 105 c:\program files\microsoft visual studio 8\vc\include\eh.h -FILE 106 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winnls.h -FILE 107 c:\program files\microsoft visual studio 8\vc\include\string.h -FILE 108 c:\program files\microsoft visual studio 8\vc\include\ctype.h -FILE 109 c:\program files\microsoft visual studio 8\vc\include\xutility -FILE 110 c:\program files\microsoft visual studio 8\vc\include\utility -FILE 111 c:\program files\microsoft visual studio 8\vc\include\iosfwd -FILE 112 c:\program files\microsoft visual studio 8\vc\include\cwchar -FILE 113 c:\program files\microsoft visual studio 8\vc\include\crtdbg.h -FILE 114 c:\program files\microsoft visual studio 8\vc\include\stdexcept -FILE 115 c:\program files\microsoft visual studio 8\vc\include\exception -FILE 116 c:\program files\microsoft visual studio 8\vc\include\xstddef -FILE 117 c:\program files\microsoft visual studio 8\vc\include\cstddef -FILE 118 c:\program files\microsoft visual studio 8\vc\include\stddef.h -FILE 119 c:\program files\microsoft visual studio 8\vc\include\eh.h -FILE 120 c:\program files\microsoft visual studio 8\vc\include\streambuf -FILE 121 c:\program files\microsoft visual studio 8\vc\include\xiosbase -FILE 122 c:\program files\microsoft visual studio 8\vc\include\xlocale -FILE 123 c:\program files\microsoft visual studio 8\vc\include\cstring -FILE 124 c:\program files\microsoft visual studio 8\vc\include\string.h -FILE 125 c:\program files\microsoft visual studio 8\vc\include\typeinfo -FILE 126 c:\breakpad\trunk\src\common\windows\guid_string.cc -FILE 127 c:\breakpad\trunk\src\common\windows\string_utils-inl.h -FILE 128 c:\program files\microsoft visual studio 8\vc\include\stdarg.h -FILE 129 c:\program files\microsoft visual studio 8\vc\include\string -FILE 130 c:\program files\microsoft visual studio 8\vc\include\istream -FILE 131 c:\program files\microsoft visual studio 8\vc\include\ostream -FILE 132 c:\program files\microsoft visual studio 8\vc\include\ios -FILE 133 c:\program files\microsoft visual studio 8\vc\include\xlocnum -FILE 134 c:\program files\microsoft visual studio 8\vc\include\climits -FILE 135 c:\program files\microsoft visual studio 8\vc\include\yvals.h -FILE 136 c:\program files\microsoft visual studio 8\vc\include\use_ansi.h -FILE 137 c:\program files\microsoft visual studio 8\vc\include\cstdlib -FILE 138 c:\program files\microsoft visual studio 8\vc\include\stdlib.h -FILE 139 c:\program files\microsoft visual studio 8\vc\include\malloc.h -FILE 140 c:\breakpad\trunk\src\common\windows\guid_string.h -FILE 141 c:\program files\microsoft visual studio 8\vc\platformsdk\include\guiddef.h -FILE 142 c:\program files\microsoft visual studio 8\vc\include\share.h -FILE 143 c:\program files\microsoft visual studio 8\vc\include\xstring -FILE 144 c:\program files\microsoft visual studio 8\vc\include\xmemory -FILE 145 c:\program files\microsoft visual studio 8\vc\include\new -FILE 146 c:\program files\microsoft visual studio 8\vc\include\locale.h -FILE 147 c:\program files\microsoft visual studio 8\vc\include\swprintf.inl -FILE 148 c:\program files\microsoft visual studio 8\vc\include\limits.h -FILE 149 c:\program files\microsoft visual studio 8\vc\include\wchar.h -FILE 150 c:\program files\microsoft visual studio 8\vc\include\cstdio -FILE 151 c:\program files\microsoft visual studio 8\vc\include\crtdefs.h -FILE 152 c:\program files\microsoft visual studio 8\vc\include\stdio.h -FILE 153 c:\program files\microsoft visual studio 8\vc\include\wtime.inl -FILE 154 c:\program files\microsoft visual studio 8\vc\include\sal.h -FILE 155 c:\program files\microsoft visual studio 8\vc\include\xdebug -FILE 156 c:\program files\microsoft visual studio 8\vc\include\vadefs.h -FILE 157 c:\program files\microsoft visual studio 8\vc\include\xlocinfo -FILE 158 c:\program files\microsoft visual studio 8\vc\include\xlocinfo.h -FILE 159 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winnetwk.h -FILE 160 c:\program files\microsoft visual studio 8\vc\platformsdk\include\urlmon.h -FILE 161 c:\program files\microsoft visual studio 8\vc\platformsdk\include\pshpack8.h -FILE 162 c:\program files\microsoft visual studio 8\vc\platformsdk\include\cderr.h -FILE 163 c:\program files\microsoft visual studio 8\vc\platformsdk\include\shellapi.h -FILE 164 c:\program files\microsoft visual studio 8\vc\platformsdk\include\dde.h -FILE 165 c:\program files\microsoft visual studio 8\vc\include\vector -FILE 166 c:\program files\microsoft visual studio 8\vc\include\stdio.h -FILE 167 c:\program files\microsoft visual studio 8\vc\include\memory -FILE 168 c:\program files\microsoft visual studio 8\vc\include\iterator -FILE 169 c:\program files\microsoft visual studio 8\vc\include\malloc.h -FILE 170 c:\program files\microsoft visual studio 8\vc\include\stdarg.h -FILE 171 c:\program files\microsoft visual studio 8\vc\platformsdk\include\windef.h -FILE 172 c:\program files\microsoft visual studio 8\vc\platformsdk\include\wingdi.h -FILE 173 c:\program files\microsoft visual studio 8\vc\platformsdk\include\imm.h -FILE 174 c:\program files\microsoft visual studio 8\vc\platformsdk\include\mmsystem.h -FILE 175 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winioctl.h -FILE 176 c:\program files\microsoft visual studio 8\vc\platformsdk\include\guiddef.h -FILE 177 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winsmcrd.h -FILE 178 c:\test_app.cc -FILE 179 c:\program files\microsoft visual studio 8\vc\platformsdk\include\oaidl.h -FILE 180 c:\program files\microsoft visual studio 8\vc\platformsdk\include\nb30.h -FILE 181 c:\program files\microsoft visual studio 8\vc\include\xstring -FILE 182 c:\program files\microsoft visual studio 8\vc\include\xmemory -FILE 183 c:\program files\microsoft visual studio 8\vc\include\new -FILE 184 c:\program files\microsoft visual studio 8\vc\platformsdk\include\oleidl.h -FILE 185 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winnls.h -FILE 186 c:\breakpad\trunk\src\google_breakpad\common\minidump_format.h -FILE 187 c:\program files\microsoft visual studio 8\vc\include\string.h -FILE 188 c:\breakpad\trunk\src\google_breakpad\common\breakpad_types.h -FILE 189 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winnt.h -FILE 190 c:\program files\microsoft visual studio 8\vc\include\ctype.h -FILE 191 c:\program files\microsoft visual studio 8\vc\include\wtime.inl -FILE 192 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h -FILE 193 c:\program files\microsoft visual studio 8\vc\platformsdk\include\propidl.h -FILE 194 c:\breakpad\trunk\src\client\windows\handler\exception_handler.h -FILE 195 c:\program files\microsoft visual studio 8\vc\include\stdlib.h -FILE 196 c:\program files\microsoft visual studio 8\vc\include\swprintf.inl -FILE 197 c:\program files\microsoft visual studio 8\vc\include\limits.h -FILE 198 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winreg.h -FILE 199 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpc.h -FILE 200 c:\program files\microsoft visual studio 8\vc\platformsdk\include\ole2.h -FILE 201 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winscard.h -FILE 202 c:\program files\microsoft visual studio 8\vc\platformsdk\include\objbase.h -FILE 203 c:\program files\microsoft visual studio 8\vc\platformsdk\include\wtypes.h -FILE 204 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcndr.h -FILE 205 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcdce.h -FILE 206 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcnsip.h -FILE 207 c:\program files\microsoft visual studio 8\vc\include\share.h -FILE 208 c:\program files\microsoft visual studio 8\vc\platformsdk\include\tvout.h -FILE 209 c:\program files\microsoft visual studio 8\vc\include\use_ansi.h -FILE 210 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winefs.h -FILE 211 c:\program files\microsoft visual studio 8\vc\platformsdk\include\pshpack2.h -FILE 212 c:\program files\microsoft visual studio 8\vc\platformsdk\include\commdlg.h -FILE 213 c:\program files\microsoft visual studio 8\vc\platformsdk\include\unknwn.h -FILE 214 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winsock.h -FILE 215 c:\program files\microsoft visual studio 8\vc\platformsdk\include\stralign.h -FILE 216 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winuser.h -FILE 217 c:\program files\microsoft visual studio 8\vc\platformsdk\include\servprov.h -FILE 218 c:\program files\microsoft visual studio 8\vc\include\xdebug -FILE 219 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winsvc.h -FILE 220 c:\program files\microsoft visual studio 8\vc\platformsdk\include\wincon.h -FILE 221 c:\program files\microsoft visual studio 8\vc\include\xlocinfo -FILE 222 c:\program files\microsoft visual studio 8\vc\include\xlocinfo.h -FILE 223 c:\program files\microsoft visual studio 8\vc\include\locale.h -FILE 224 c:\program files\microsoft visual studio 8\vc\platformsdk\include\cguid.h -FILE 225 c:\program files\microsoft visual studio 8\vc\include\string -FILE 226 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winver.h -FILE 227 c:\program files\microsoft visual studio 8\vc\include\istream -FILE 228 c:\program files\microsoft visual studio 8\vc\include\ostream -FILE 229 c:\program files\microsoft visual studio 8\vc\include\xutility -FILE 230 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winperf.h -FILE 231 c:\program files\microsoft visual studio 8\vc\platformsdk\include\pshpack4.h -FILE 232 c:\program files\microsoft visual studio 8\vc\include\utility -FILE 233 c:\program files\microsoft visual studio 8\vc\include\ios -FILE 234 c:\program files\microsoft visual studio 8\vc\include\xlocnum -FILE 235 c:\program files\microsoft visual studio 8\vc\include\crtdbg.h -FILE 236 c:\program files\microsoft visual studio 8\vc\include\iosfwd -FILE 237 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcdcep.h -FILE 238 c:\program files\microsoft visual studio 8\vc\include\cwchar -FILE 239 c:\program files\microsoft visual studio 8\vc\include\climits -FILE 240 c:\program files\microsoft visual studio 8\vc\include\wchar.h -FILE 241 c:\program files\microsoft visual studio 8\vc\include\cstdlib -FILE 242 c:\program files\microsoft visual studio 8\vc\platformsdk\include\mcx.h -FILE 243 c:\program files\microsoft visual studio 8\vc\include\streambuf -FILE 244 c:\program files\microsoft visual studio 8\vc\include\xiosbase -FILE 245 c:\program files\microsoft visual studio 8\vc\platformsdk\include\reason.h -FILE 246 c:\program files\microsoft visual studio 8\vc\include\xlocale -FILE 247 c:\program files\microsoft visual studio 8\vc\platformsdk\include\dlgs.h -FILE 248 c:\program files\microsoft visual studio 8\vc\include\cstring -FILE 249 c:\program files\microsoft visual studio 8\vc\include\stdexcept -FILE 250 c:\program files\microsoft visual studio 8\vc\platformsdk\include\pshpack1.h -FILE 251 c:\program files\microsoft visual studio 8\vc\include\exception -FILE 252 c:\program files\microsoft visual studio 8\vc\include\xstddef -FILE 253 c:\program files\microsoft visual studio 8\vc\platformsdk\include\specstrings.h -FILE 254 c:\program files\microsoft visual studio 8\vc\include\cstddef -FILE 255 c:\program files\microsoft visual studio 8\vc\platformsdk\include\basetsd.h -FILE 256 c:\program files\microsoft visual studio 8\vc\include\stddef.h -FILE 257 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winerror.h -FILE 258 c:\program files\microsoft visual studio 8\vc\platformsdk\include\wincrypt.h -FILE 259 c:\program files\microsoft visual studio 8\vc\platformsdk\include\poppack.h -FILE 260 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winspool.h -FILE 261 c:\program files\microsoft visual studio 8\vc\platformsdk\include\oleauto.h -FILE 262 c:\program files\microsoft visual studio 8\vc\platformsdk\include\prsht.h -FILE 263 c:\program files\microsoft visual studio 8\vc\platformsdk\include\objidl.h -FILE 264 c:\program files\microsoft visual studio 8\vc\include\cstdio -FILE 265 c:\program files\microsoft visual studio 8\vc\include\yvals.h -FILE 266 c:\program files\microsoft visual studio 8\vc\include\eh.h -FILE 267 c:\program files\microsoft visual studio 8\vc\platformsdk\include\lzexpand.h -FILE 268 c:\program files\microsoft visual studio 8\vc\platformsdk\include\ddeml.h -FILE 269 c:\program files\microsoft visual studio 8\vc\include\crtdefs.h -FILE 270 c:\program files\microsoft visual studio 8\vc\include\sal.h -FILE 271 c:\program files\microsoft visual studio 8\vc\include\vadefs.h -FILE 272 c:\program files\microsoft visual studio 8\vc\platformsdk\include\dbghelp.h -FILE 273 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcnterr.h -FILE 274 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcasync.h -FILE 275 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcnsi.h -FILE 276 c:\program files\microsoft visual studio 8\vc\include\typeinfo -FILE 277 c:\program files\microsoft visual studio 8\vc\platformsdk\include\windows.h -FILE 278 c:\program files\microsoft visual studio 8\vc\include\excpt.h -FILE 279 c:\program files\microsoft visual studio 8\vc\platformsdk\include\msxml.h -FILE 280 f:\sp\vctools\crt_bld\self_x86\crt\src\xdebug -FILE 281 f:\sp\vctools\crt_bld\self_x86\crt\src\streambuf -FILE 282 f:\sp\vctools\crt_bld\self_x86\crt\src\xiosbase -FILE 283 f:\sp\vctools\crt_bld\self_x86\crt\src\xlocale -FILE 284 f:\sp\vctools\crt_bld\self_x86\crt\src\cstring -FILE 285 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 286 f:\sp\vctools\crt_bld\self_x86\crt\src\xlocinfo -FILE 287 f:\sp\vctools\crt_bld\self_x86\crt\src\xlocinfo.h -FILE 288 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 289 f:\sp\vctools\crt_bld\self_x86\crt\src\share.h -FILE 290 f:\sp\vctools\crt_bld\self_x86\crt\src\use_ansi.h -FILE 291 f:\sp\vctools\crt_bld\self_x86\crt\src\string.cpp -FILE 292 f:\sp\vctools\crt_bld\self_x86\crt\src\typeinfo -FILE 293 f:\sp\vctools\crt_bld\self_x86\crt\src\xutility -FILE 294 f:\sp\vctools\crt_bld\self_x86\crt\src\utility -FILE 295 f:\sp\vctools\crt_bld\self_x86\crt\src\iosfwd -FILE 296 f:\sp\vctools\crt_bld\self_x86\crt\src\cwchar -FILE 297 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h -FILE 298 f:\sp\vctools\crt_bld\self_x86\crt\src\stdexcept -FILE 299 f:\sp\vctools\crt_bld\self_x86\crt\src\exception -FILE 300 f:\sp\vctools\crt_bld\self_x86\crt\src\xstddef -FILE 301 f:\sp\vctools\crt_bld\self_x86\crt\src\cstddef -FILE 302 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 303 f:\sp\vctools\crt_bld\self_x86\crt\src\istream -FILE 304 f:\sp\vctools\crt_bld\self_x86\crt\src\ostream -FILE 305 f:\sp\vctools\crt_bld\self_x86\crt\src\ios -FILE 306 f:\sp\vctools\crt_bld\self_x86\crt\src\xlocnum -FILE 307 f:\sp\vctools\crt_bld\self_x86\crt\src\eh.h -FILE 308 f:\sp\vctools\crt_bld\self_x86\crt\src\cstdlib -FILE 309 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 310 f:\sp\vctools\crt_bld\self_x86\crt\src\climits -FILE 311 f:\sp\vctools\crt_bld\self_x86\crt\src\yvals.h -FILE 312 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 313 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 314 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 315 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 316 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 317 f:\sp\vctools\crt_bld\self_x86\crt\src\cstdio -FILE 318 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 319 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 320 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 321 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 322 f:\sp\public\sdk\inc\ddbanned.h -FILE 323 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 324 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 325 f:\sp\vctools\crt_bld\self_x86\crt\src\xstring -FILE 326 f:\sp\vctools\crt_bld\self_x86\crt\src\xmemory -FILE 327 f:\sp\vctools\crt_bld\self_x86\crt\src\new -FILE 328 f:\sp\public\sdk\inc\reason.h -FILE 329 f:\sp\public\sdk\inc\wincon.h -FILE 330 f:\sp\public\sdk\inc\pshpack2.h -FILE 331 f:\sp\public\sdk\inc\mcx.h -FILE 332 f:\sp\public\sdk\inc\winuser.h -FILE 333 f:\sp\public\sdk\inc\winnls.h -FILE 334 f:\sp\public\sdk\inc\guiddef.h -FILE 335 f:\sp\public\sdk\inc\specstrings.h -FILE 336 f:\sp\public\sdk\inc\basetsd.h -FILE 337 f:\sp\public\sdk\inc\stralign.h -FILE 338 f:\sp\public\sdk\inc\tvout.h -FILE 339 f:\sp\public\sdk\inc\winsvc.h -FILE 340 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 341 f:\sp\public\sdk\inc\wingdi.h -FILE 342 f:\sp\public\sdk\inc\pshpack4.h -FILE 343 f:\sp\public\sdk\inc\poppack.h -FILE 344 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sect_attribs.h -FILE 345 f:\sp\public\sdk\inc\winnetwk.h -FILE 346 f:\sp\public\sdk\inc\imm.h -FILE 347 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 348 f:\sp\public\sdk\inc\windef.h -FILE 349 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h -FILE 350 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\tran\i386\cpu_disp.c -FILE 351 f:\sp\public\sdk\inc\pshpack1.h -FILE 352 f:\sp\public\sdk\inc\winver.h -FILE 353 f:\sp\public\sdk\inc\windows.h -FILE 354 f:\sp\public\sdk\inc\winnt.h -FILE 355 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 356 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 357 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 358 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 359 f:\sp\public\sdk\inc\ddbanned.h -FILE 360 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 361 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 362 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\errno.h -FILE 363 f:\sp\public\sdk\inc\winreg.h -FILE 364 f:\sp\public\sdk\inc\winbase.h -FILE 365 f:\sp\public\sdk\inc\winerror.h -FILE 366 f:\sp\public\sdk\inc\pshpack8.h -FILE 367 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\internal.h -FILE 368 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 369 f:\sp\public\sdk\inc\reason.h -FILE 370 f:\sp\public\sdk\inc\wincon.h -FILE 371 f:\sp\public\sdk\inc\pshpack2.h -FILE 372 f:\sp\public\sdk\inc\mcx.h -FILE 373 f:\sp\public\sdk\inc\winuser.h -FILE 374 f:\sp\public\sdk\inc\winnls.h -FILE 375 f:\sp\public\sdk\inc\guiddef.h -FILE 376 f:\sp\public\sdk\inc\specstrings.h -FILE 377 f:\sp\public\sdk\inc\basetsd.h -FILE 378 f:\sp\public\sdk\inc\stralign.h -FILE 379 f:\sp\public\sdk\inc\tvout.h -FILE 380 f:\sp\public\sdk\inc\winsvc.h -FILE 381 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 382 f:\sp\public\sdk\inc\wingdi.h -FILE 383 f:\sp\public\sdk\inc\pshpack4.h -FILE 384 f:\sp\public\sdk\inc\poppack.h -FILE 385 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sect_attribs.h -FILE 386 f:\sp\public\sdk\inc\winnetwk.h -FILE 387 f:\sp\public\sdk\inc\imm.h -FILE 388 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 389 f:\sp\public\sdk\inc\windef.h -FILE 390 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h -FILE 391 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\tran\i386\mathfcns.c -FILE 392 f:\sp\public\sdk\inc\pshpack1.h -FILE 393 f:\sp\public\sdk\inc\winver.h -FILE 394 f:\sp\public\sdk\inc\windows.h -FILE 395 f:\sp\public\sdk\inc\winnt.h -FILE 396 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 397 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 398 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 399 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 400 f:\sp\public\sdk\inc\ddbanned.h -FILE 401 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 402 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 403 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\errno.h -FILE 404 f:\sp\public\sdk\inc\winreg.h -FILE 405 f:\sp\public\sdk\inc\winbase.h -FILE 406 f:\sp\public\sdk\inc\winerror.h -FILE 407 f:\sp\public\sdk\inc\pshpack8.h -FILE 408 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\internal.h -FILE 409 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 410 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 411 f:\sp\public\sdk\inc\winreg.h -FILE 412 f:\sp\public\sdk\inc\winbase.h -FILE 413 f:\sp\public\sdk\inc\winerror.h -FILE 414 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 415 f:\sp\public\sdk\inc\windef.h -FILE 416 f:\sp\vctools\crt_bld\self_x86\crt\src\ctime.h -FILE 417 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 418 f:\sp\vctools\crt_bld\self_x86\crt\src\time.h -FILE 419 f:\sp\public\sdk\inc\pshpack8.h -FILE 420 f:\sp\public\sdk\inc\reason.h -FILE 421 f:\sp\public\sdk\inc\wincon.h -FILE 422 f:\sp\vctools\crt_bld\self_x86\crt\src\time.inl -FILE 423 f:\sp\public\sdk\inc\pshpack2.h -FILE 424 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 425 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 426 f:\sp\public\sdk\inc\mcx.h -FILE 427 f:\sp\public\sdk\inc\winuser.h -FILE 428 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 429 f:\sp\public\sdk\inc\winnls.h -FILE 430 f:\sp\public\sdk\inc\guiddef.h -FILE 431 f:\sp\public\sdk\inc\stralign.h -FILE 432 f:\sp\public\sdk\inc\winnt.h -FILE 433 f:\sp\public\sdk\inc\specstrings.h -FILE 434 f:\sp\public\sdk\inc\basetsd.h -FILE 435 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 436 f:\sp\public\sdk\inc\tvout.h -FILE 437 f:\sp\public\sdk\inc\winsvc.h -FILE 438 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 439 f:\sp\public\sdk\inc\wingdi.h -FILE 440 f:\sp\vctools\crt_bld\self_x86\crt\src\tzset.c -FILE 441 f:\sp\public\sdk\inc\pshpack4.h -FILE 442 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 443 f:\sp\public\sdk\inc\poppack.h -FILE 444 f:\sp\public\sdk\inc\winnetwk.h -FILE 445 f:\sp\public\sdk\inc\imm.h -FILE 446 f:\sp\public\sdk\inc\ddbanned.h -FILE 447 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 448 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 449 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 450 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 451 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 452 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 453 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 454 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 455 f:\sp\public\sdk\inc\windows.h -FILE 456 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 457 f:\sp\public\sdk\inc\pshpack1.h -FILE 458 f:\sp\public\sdk\inc\winver.h -FILE 459 f:\sp\vctools\crt_bld\self_x86\crt\src\time.inl -FILE 460 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 461 f:\sp\public\sdk\inc\winnt.h -FILE 462 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 463 f:\sp\public\sdk\inc\winreg.h -FILE 464 f:\sp\public\sdk\inc\winbase.h -FILE 465 f:\sp\public\sdk\inc\winerror.h -FILE 466 f:\sp\public\sdk\inc\pshpack8.h -FILE 467 f:\sp\public\sdk\inc\reason.h -FILE 468 f:\sp\public\sdk\inc\wincon.h -FILE 469 f:\sp\public\sdk\inc\pshpack2.h -FILE 470 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 471 f:\sp\public\sdk\inc\mcx.h -FILE 472 f:\sp\public\sdk\inc\winuser.h -FILE 473 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 474 f:\sp\public\sdk\inc\winnls.h -FILE 475 f:\sp\public\sdk\inc\guiddef.h -FILE 476 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 477 f:\sp\public\sdk\inc\stralign.h -FILE 478 f:\sp\public\sdk\inc\specstrings.h -FILE 479 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 480 f:\sp\public\sdk\inc\basetsd.h -FILE 481 f:\sp\public\sdk\inc\windows.h -FILE 482 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 483 f:\sp\public\sdk\inc\tvout.h -FILE 484 f:\sp\public\sdk\inc\winsvc.h -FILE 485 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 486 f:\sp\public\sdk\inc\wingdi.h -FILE 487 f:\sp\vctools\crt_bld\self_x86\crt\src\timeset.c -FILE 488 f:\sp\public\sdk\inc\pshpack4.h -FILE 489 f:\sp\public\sdk\inc\poppack.h -FILE 490 f:\sp\public\sdk\inc\winnetwk.h -FILE 491 f:\sp\public\sdk\inc\imm.h -FILE 492 f:\sp\public\sdk\inc\ddbanned.h -FILE 493 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 494 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 495 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 496 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 497 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 498 f:\sp\public\sdk\inc\windef.h -FILE 499 f:\sp\public\sdk\inc\pshpack1.h -FILE 500 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 501 f:\sp\vctools\crt_bld\self_x86\crt\src\time.h -FILE 502 f:\sp\public\sdk\inc\winver.h -FILE 503 f:\sp\public\sdk\inc\wincon.h -FILE 504 f:\sp\vctools\crt_bld\self_x86\crt\src\time.h -FILE 505 f:\sp\public\sdk\inc\imm.h -FILE 506 f:\sp\public\sdk\inc\winbase.h -FILE 507 f:\sp\public\sdk\inc\wingdi.h -FILE 508 f:\sp\public\sdk\inc\winver.h -FILE 509 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 510 f:\sp\public\sdk\inc\windows.h -FILE 511 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 512 f:\sp\public\sdk\inc\pshpack2.h -FILE 513 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 514 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 515 f:\sp\public\sdk\inc\reason.h -FILE 516 f:\sp\vctools\crt_bld\self_x86\crt\src\strftime.c -FILE 517 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 518 f:\sp\public\sdk\inc\specstrings.h -FILE 519 f:\sp\public\sdk\inc\basetsd.h -FILE 520 f:\sp\public\sdk\inc\pshpack4.h -FILE 521 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 522 f:\sp\public\sdk\inc\winnetwk.h -FILE 523 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 524 f:\sp\public\sdk\inc\stralign.h -FILE 525 f:\sp\vctools\crt_bld\self_x86\crt\src\time.inl -FILE 526 f:\sp\public\sdk\inc\poppack.h -FILE 527 f:\sp\public\sdk\inc\winsvc.h -FILE 528 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 529 f:\sp\public\sdk\inc\windef.h -FILE 530 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 531 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 532 f:\sp\public\sdk\inc\winuser.h -FILE 533 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 534 f:\sp\public\sdk\inc\mcx.h -FILE 535 f:\sp\public\sdk\inc\pshpack8.h -FILE 536 f:\sp\public\sdk\inc\guiddef.h -FILE 537 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 538 f:\sp\public\sdk\inc\winnt.h -FILE 539 f:\sp\public\sdk\inc\winnls.h -FILE 540 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 541 f:\sp\public\sdk\inc\pshpack1.h -FILE 542 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 543 f:\sp\public\sdk\inc\winerror.h -FILE 544 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 545 f:\sp\public\sdk\inc\winreg.h -FILE 546 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 547 f:\sp\public\sdk\inc\ddbanned.h -FILE 548 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 549 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 550 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 551 f:\sp\public\sdk\inc\tvout.h -FILE 552 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 553 f:\sp\public\sdk\inc\poppack.h -FILE 554 f:\sp\public\sdk\inc\winnetwk.h -FILE 555 f:\sp\public\sdk\inc\imm.h -FILE 556 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 557 f:\sp\public\sdk\inc\windef.h -FILE 558 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 559 f:\sp\public\sdk\inc\pshpack1.h -FILE 560 f:\sp\public\sdk\inc\winver.h -FILE 561 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 562 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 563 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 564 f:\sp\public\sdk\inc\winnt.h -FILE 565 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 566 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 567 f:\sp\public\sdk\inc\winreg.h -FILE 568 f:\sp\vctools\crt_bld\self_x86\crt\src\days.c -FILE 569 f:\sp\public\sdk\inc\winbase.h -FILE 570 f:\sp\public\sdk\inc\winerror.h -FILE 571 f:\sp\public\sdk\inc\pshpack8.h -FILE 572 f:\sp\public\sdk\inc\reason.h -FILE 573 f:\sp\public\sdk\inc\wincon.h -FILE 574 f:\sp\public\sdk\inc\ddbanned.h -FILE 575 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 576 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 577 f:\sp\public\sdk\inc\pshpack2.h -FILE 578 f:\sp\public\sdk\inc\mcx.h -FILE 579 f:\sp\public\sdk\inc\winuser.h -FILE 580 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 581 f:\sp\public\sdk\inc\winnls.h -FILE 582 f:\sp\public\sdk\inc\guiddef.h -FILE 583 f:\sp\public\sdk\inc\windows.h -FILE 584 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 585 f:\sp\public\sdk\inc\specstrings.h -FILE 586 f:\sp\public\sdk\inc\basetsd.h -FILE 587 f:\sp\public\sdk\inc\stralign.h -FILE 588 f:\sp\public\sdk\inc\tvout.h -FILE 589 f:\sp\public\sdk\inc\winsvc.h -FILE 590 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 591 f:\sp\public\sdk\inc\wingdi.h -FILE 592 f:\sp\public\sdk\inc\pshpack4.h -FILE 593 f:\sp\public\sdk\inc\wincon.h -FILE 594 f:\sp\public\sdk\inc\imm.h -FILE 595 f:\sp\public\sdk\inc\winbase.h -FILE 596 f:\sp\public\sdk\inc\wingdi.h -FILE 597 f:\sp\public\sdk\inc\winver.h -FILE 598 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 599 f:\sp\public\sdk\inc\windows.h -FILE 600 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 601 f:\sp\public\sdk\inc\pshpack2.h -FILE 602 f:\sp\public\sdk\inc\reason.h -FILE 603 f:\sp\vctools\crt_bld\self_x86\crt\src\strnicol.c -FILE 604 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 605 f:\sp\public\sdk\inc\specstrings.h -FILE 606 f:\sp\public\sdk\inc\basetsd.h -FILE 607 f:\sp\public\sdk\inc\pshpack4.h -FILE 608 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 609 f:\sp\public\sdk\inc\winnetwk.h -FILE 610 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 611 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 612 f:\sp\public\sdk\inc\stralign.h -FILE 613 f:\sp\public\sdk\inc\poppack.h -FILE 614 f:\sp\public\sdk\inc\winsvc.h -FILE 615 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 616 f:\sp\public\sdk\inc\windef.h -FILE 617 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 618 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 619 f:\sp\public\sdk\inc\winuser.h -FILE 620 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 621 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 622 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 623 f:\sp\public\sdk\inc\mcx.h -FILE 624 f:\sp\public\sdk\inc\pshpack8.h -FILE 625 f:\sp\public\sdk\inc\guiddef.h -FILE 626 f:\sp\public\sdk\inc\winnt.h -FILE 627 f:\sp\public\sdk\inc\winnls.h -FILE 628 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 629 f:\sp\public\sdk\inc\pshpack1.h -FILE 630 f:\sp\public\sdk\inc\winerror.h -FILE 631 f:\sp\public\sdk\inc\winreg.h -FILE 632 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 633 f:\sp\public\sdk\inc\ddbanned.h -FILE 634 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 635 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 636 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 637 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 638 f:\sp\public\sdk\inc\tvout.h -FILE 639 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 640 f:\sp\public\sdk\inc\mcx.h -FILE 641 f:\sp\public\sdk\inc\pshpack8.h -FILE 642 f:\sp\public\sdk\inc\winnt.h -FILE 643 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 644 f:\sp\public\sdk\inc\specstrings.h -FILE 645 f:\sp\public\sdk\inc\basetsd.h -FILE 646 f:\sp\public\sdk\inc\winnls.h -FILE 647 f:\sp\public\sdk\inc\pshpack1.h -FILE 648 f:\sp\public\sdk\inc\winerror.h -FILE 649 f:\sp\public\sdk\inc\winreg.h -FILE 650 f:\sp\vctools\crt_bld\self_x86\crt\src\strnicmp.c -FILE 651 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 652 f:\sp\public\sdk\inc\tvout.h -FILE 653 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 654 f:\sp\public\sdk\inc\wincon.h -FILE 655 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 656 f:\sp\public\sdk\inc\imm.h -FILE 657 f:\sp\public\sdk\inc\guiddef.h -FILE 658 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 659 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 660 f:\sp\public\sdk\inc\winbase.h -FILE 661 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 662 f:\sp\public\sdk\inc\wingdi.h -FILE 663 f:\sp\public\sdk\inc\windows.h -FILE 664 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 665 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 666 f:\sp\public\sdk\inc\winver.h -FILE 667 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 668 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 669 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 670 f:\sp\public\sdk\inc\pshpack2.h -FILE 671 f:\sp\public\sdk\inc\reason.h -FILE 672 f:\sp\public\sdk\inc\pshpack4.h -FILE 673 f:\sp\public\sdk\inc\winnetwk.h -FILE 674 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 675 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 676 f:\sp\public\sdk\inc\stralign.h -FILE 677 f:\sp\public\sdk\inc\windef.h -FILE 678 f:\sp\public\sdk\inc\poppack.h -FILE 679 f:\sp\public\sdk\inc\winsvc.h -FILE 680 f:\sp\public\sdk\inc\ddbanned.h -FILE 681 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 682 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 683 f:\sp\public\sdk\inc\winuser.h -FILE 684 f:\sp\public\sdk\inc\mcx.h -FILE 685 f:\sp\public\sdk\inc\pshpack8.h -FILE 686 f:\sp\public\sdk\inc\winnt.h -FILE 687 f:\sp\public\sdk\inc\specstrings.h -FILE 688 f:\sp\public\sdk\inc\basetsd.h -FILE 689 f:\sp\public\sdk\inc\winnls.h -FILE 690 f:\sp\public\sdk\inc\pshpack1.h -FILE 691 f:\sp\public\sdk\inc\winerror.h -FILE 692 f:\sp\public\sdk\inc\winreg.h -FILE 693 f:\sp\vctools\crt_bld\self_x86\crt\src\stricmp.c -FILE 694 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 695 f:\sp\public\sdk\inc\tvout.h -FILE 696 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 697 f:\sp\public\sdk\inc\wincon.h -FILE 698 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 699 f:\sp\public\sdk\inc\imm.h -FILE 700 f:\sp\public\sdk\inc\guiddef.h -FILE 701 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 702 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 703 f:\sp\public\sdk\inc\winbase.h -FILE 704 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 705 f:\sp\public\sdk\inc\wingdi.h -FILE 706 f:\sp\public\sdk\inc\windows.h -FILE 707 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 708 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 709 f:\sp\public\sdk\inc\winver.h -FILE 710 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 711 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 712 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 713 f:\sp\public\sdk\inc\pshpack2.h -FILE 714 f:\sp\public\sdk\inc\reason.h -FILE 715 f:\sp\public\sdk\inc\pshpack4.h -FILE 716 f:\sp\public\sdk\inc\winnetwk.h -FILE 717 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 718 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 719 f:\sp\public\sdk\inc\stralign.h -FILE 720 f:\sp\public\sdk\inc\windef.h -FILE 721 f:\sp\public\sdk\inc\poppack.h -FILE 722 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 723 f:\sp\public\sdk\inc\winsvc.h -FILE 724 f:\sp\public\sdk\inc\ddbanned.h -FILE 725 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 726 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 727 f:\sp\public\sdk\inc\winuser.h -FILE 728 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 729 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 730 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 731 f:\sp\vctools\crt_bld\self_x86\crt\src\wcslen.c -FILE 732 f:\sp\public\sdk\inc\ddbanned.h -FILE 733 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 734 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 735 f:\sp\public\sdk\inc\winnt.h -FILE 736 f:\sp\public\sdk\inc\pshpack4.h -FILE 737 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 738 f:\sp\public\sdk\inc\poppack.h -FILE 739 f:\sp\vctools\crt_bld\self_x86\crt\src\tcsncpy_s.inl -FILE 740 f:\sp\public\sdk\inc\winnetwk.h -FILE 741 f:\sp\public\sdk\inc\imm.h -FILE 742 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 743 f:\sp\public\sdk\inc\pshpack1.h -FILE 744 f:\sp\public\sdk\inc\winver.h -FILE 745 f:\sp\vctools\crt_bld\self_x86\crt\src\internal_securecrt.h -FILE 746 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 747 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 748 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 749 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 750 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 751 f:\sp\public\sdk\inc\guiddef.h -FILE 752 f:\sp\public\sdk\inc\windows.h -FILE 753 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 754 f:\sp\public\sdk\inc\specstrings.h -FILE 755 f:\sp\public\sdk\inc\basetsd.h -FILE 756 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 757 f:\sp\public\sdk\inc\winreg.h -FILE 758 f:\sp\vctools\crt_bld\self_x86\crt\src\strncpy_s.c -FILE 759 f:\sp\public\sdk\inc\winbase.h -FILE 760 f:\sp\public\sdk\inc\winerror.h -FILE 761 f:\sp\public\sdk\inc\pshpack8.h -FILE 762 f:\sp\public\sdk\inc\reason.h -FILE 763 f:\sp\public\sdk\inc\wincon.h -FILE 764 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 765 f:\sp\public\sdk\inc\ddbanned.h -FILE 766 f:\sp\public\sdk\inc\windef.h -FILE 767 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 768 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 769 f:\sp\public\sdk\inc\pshpack2.h -FILE 770 f:\sp\public\sdk\inc\mcx.h -FILE 771 f:\sp\public\sdk\inc\winuser.h -FILE 772 f:\sp\public\sdk\inc\winnls.h -FILE 773 f:\sp\public\sdk\inc\stralign.h -FILE 774 f:\sp\public\sdk\inc\tvout.h -FILE 775 f:\sp\public\sdk\inc\winsvc.h -FILE 776 f:\sp\public\sdk\inc\wingdi.h -FILE 777 f:\sp\public\sdk\inc\winnt.h -FILE 778 f:\sp\public\sdk\inc\pshpack4.h -FILE 779 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 780 f:\sp\public\sdk\inc\poppack.h -FILE 781 f:\sp\vctools\crt_bld\self_x86\crt\src\tcscpy_s.inl -FILE 782 f:\sp\public\sdk\inc\winnetwk.h -FILE 783 f:\sp\public\sdk\inc\imm.h -FILE 784 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 785 f:\sp\public\sdk\inc\pshpack1.h -FILE 786 f:\sp\public\sdk\inc\winver.h -FILE 787 f:\sp\vctools\crt_bld\self_x86\crt\src\internal_securecrt.h -FILE 788 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 789 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 790 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 791 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 792 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 793 f:\sp\public\sdk\inc\guiddef.h -FILE 794 f:\sp\public\sdk\inc\windows.h -FILE 795 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 796 f:\sp\public\sdk\inc\specstrings.h -FILE 797 f:\sp\public\sdk\inc\basetsd.h -FILE 798 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 799 f:\sp\public\sdk\inc\winreg.h -FILE 800 f:\sp\vctools\crt_bld\self_x86\crt\src\strcpy_s.c -FILE 801 f:\sp\public\sdk\inc\winbase.h -FILE 802 f:\sp\public\sdk\inc\winerror.h -FILE 803 f:\sp\public\sdk\inc\pshpack8.h -FILE 804 f:\sp\public\sdk\inc\reason.h -FILE 805 f:\sp\public\sdk\inc\wincon.h -FILE 806 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 807 f:\sp\public\sdk\inc\ddbanned.h -FILE 808 f:\sp\public\sdk\inc\windef.h -FILE 809 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 810 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 811 f:\sp\public\sdk\inc\pshpack2.h -FILE 812 f:\sp\public\sdk\inc\mcx.h -FILE 813 f:\sp\public\sdk\inc\winuser.h -FILE 814 f:\sp\public\sdk\inc\winnls.h -FILE 815 f:\sp\public\sdk\inc\stralign.h -FILE 816 f:\sp\public\sdk\inc\tvout.h -FILE 817 f:\sp\public\sdk\inc\winsvc.h -FILE 818 f:\sp\public\sdk\inc\wingdi.h -FILE 819 f:\sp\public\sdk\inc\winnt.h -FILE 820 f:\sp\public\sdk\inc\pshpack4.h -FILE 821 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 822 f:\sp\public\sdk\inc\poppack.h -FILE 823 f:\sp\vctools\crt_bld\self_x86\crt\src\tcscat_s.inl -FILE 824 f:\sp\public\sdk\inc\winnetwk.h -FILE 825 f:\sp\public\sdk\inc\imm.h -FILE 826 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 827 f:\sp\public\sdk\inc\pshpack1.h -FILE 828 f:\sp\public\sdk\inc\winver.h -FILE 829 f:\sp\vctools\crt_bld\self_x86\crt\src\internal_securecrt.h -FILE 830 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 831 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 832 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 833 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 834 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 835 f:\sp\public\sdk\inc\guiddef.h -FILE 836 f:\sp\public\sdk\inc\windows.h -FILE 837 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 838 f:\sp\public\sdk\inc\specstrings.h -FILE 839 f:\sp\public\sdk\inc\basetsd.h -FILE 840 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 841 f:\sp\public\sdk\inc\winreg.h -FILE 842 f:\sp\vctools\crt_bld\self_x86\crt\src\strcat_s.c -FILE 843 f:\sp\public\sdk\inc\winbase.h -FILE 844 f:\sp\public\sdk\inc\winerror.h -FILE 845 f:\sp\public\sdk\inc\pshpack8.h -FILE 846 f:\sp\public\sdk\inc\reason.h -FILE 847 f:\sp\public\sdk\inc\wincon.h -FILE 848 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 849 f:\sp\public\sdk\inc\ddbanned.h -FILE 850 f:\sp\public\sdk\inc\windef.h -FILE 851 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 852 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 853 f:\sp\public\sdk\inc\pshpack2.h -FILE 854 f:\sp\public\sdk\inc\mcx.h -FILE 855 f:\sp\public\sdk\inc\winuser.h -FILE 856 f:\sp\public\sdk\inc\winnls.h -FILE 857 f:\sp\public\sdk\inc\stralign.h -FILE 858 f:\sp\public\sdk\inc\tvout.h -FILE 859 f:\sp\public\sdk\inc\winsvc.h -FILE 860 f:\sp\public\sdk\inc\wingdi.h -FILE 861 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 862 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 863 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 864 f:\sp\vctools\crt_bld\self_x86\crt\src\strlen_s.c -FILE 865 f:\sp\public\sdk\inc\ddbanned.h -FILE 866 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 867 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 868 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\strpbrk.asm -FILE 869 F:\SP\vctools\crt_bld\SELF_X86\crt\src\Intel\STRSPN.ASM -FILE 870 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 871 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\_strnicm.asm -FILE 872 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 873 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 874 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 875 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 876 f:\sp\vctools\crt_bld\self_x86\crt\src\intel\strncmp.c -FILE 877 f:\sp\public\sdk\inc\ddbanned.h -FILE 878 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 879 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 880 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\strlen.asm -FILE 881 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 882 f:\sp\public\sdk\inc\pshpack2.h -FILE 883 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 884 f:\sp\public\sdk\inc\mcx.h -FILE 885 f:\sp\public\sdk\inc\winuser.h -FILE 886 f:\sp\public\sdk\inc\winnls.h -FILE 887 f:\sp\public\sdk\inc\stralign.h -FILE 888 f:\sp\public\sdk\inc\tvout.h -FILE 889 f:\sp\public\sdk\inc\winsvc.h -FILE 890 f:\sp\public\sdk\inc\wingdi.h -FILE 891 f:\sp\public\sdk\inc\winnt.h -FILE 892 f:\sp\public\sdk\inc\pshpack4.h -FILE 893 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 894 f:\sp\public\sdk\inc\poppack.h -FILE 895 f:\sp\public\sdk\inc\winnetwk.h -FILE 896 f:\sp\public\sdk\inc\imm.h -FILE 897 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 898 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 899 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 900 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 901 f:\sp\vctools\crt_bld\self_x86\crt\src\strdup.c -FILE 902 f:\sp\public\sdk\inc\pshpack1.h -FILE 903 f:\sp\public\sdk\inc\winver.h -FILE 904 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 905 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 906 f:\sp\public\sdk\inc\guiddef.h -FILE 907 f:\sp\public\sdk\inc\windows.h -FILE 908 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 909 f:\sp\public\sdk\inc\specstrings.h -FILE 910 f:\sp\public\sdk\inc\basetsd.h -FILE 911 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 912 f:\sp\public\sdk\inc\winreg.h -FILE 913 f:\sp\public\sdk\inc\ddbanned.h -FILE 914 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 915 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 916 f:\sp\public\sdk\inc\winbase.h -FILE 917 f:\sp\public\sdk\inc\winerror.h -FILE 918 f:\sp\public\sdk\inc\pshpack8.h -FILE 919 f:\sp\public\sdk\inc\reason.h -FILE 920 f:\sp\public\sdk\inc\wincon.h -FILE 921 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 922 f:\sp\public\sdk\inc\windef.h -FILE 923 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\strcspn.asm -FILE 924 F:\SP\vctools\crt_bld\SELF_X86\crt\src\Intel\STRSPN.ASM -FILE 925 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 926 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\strcmp.asm -FILE 927 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 928 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\strchr.asm -FILE 929 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 930 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\string\i386\p4_memset.c -FILE 931 f:\sp\public\sdk\inc\ddbanned.h -FILE 932 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 933 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 934 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\memset.asm -FILE 935 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 936 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 937 f:\sp\public\sdk\inc\poppack.h -FILE 938 f:\sp\public\sdk\inc\winnetwk.h -FILE 939 f:\sp\public\sdk\inc\imm.h -FILE 940 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 941 f:\sp\public\sdk\inc\pshpack1.h -FILE 942 f:\sp\public\sdk\inc\winver.h -FILE 943 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 944 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 945 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 946 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 947 f:\sp\public\sdk\inc\guiddef.h -FILE 948 f:\sp\public\sdk\inc\windows.h -FILE 949 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 950 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 951 f:\sp\public\sdk\inc\specstrings.h -FILE 952 f:\sp\public\sdk\inc\basetsd.h -FILE 953 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 954 f:\sp\public\sdk\inc\winreg.h -FILE 955 f:\sp\vctools\crt_bld\self_x86\crt\src\memmove_s.c -FILE 956 f:\sp\public\sdk\inc\winbase.h -FILE 957 f:\sp\public\sdk\inc\winerror.h -FILE 958 f:\sp\public\sdk\inc\pshpack8.h -FILE 959 f:\sp\public\sdk\inc\reason.h -FILE 960 f:\sp\public\sdk\inc\wincon.h -FILE 961 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 962 f:\sp\public\sdk\inc\windef.h -FILE 963 f:\sp\public\sdk\inc\ddbanned.h -FILE 964 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 965 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 966 f:\sp\public\sdk\inc\pshpack2.h -FILE 967 f:\sp\public\sdk\inc\mcx.h -FILE 968 f:\sp\public\sdk\inc\winuser.h -FILE 969 f:\sp\public\sdk\inc\winnls.h -FILE 970 f:\sp\public\sdk\inc\stralign.h -FILE 971 f:\sp\public\sdk\inc\tvout.h -FILE 972 f:\sp\public\sdk\inc\winsvc.h -FILE 973 f:\sp\public\sdk\inc\wingdi.h -FILE 974 f:\sp\public\sdk\inc\winnt.h -FILE 975 f:\sp\public\sdk\inc\pshpack4.h -FILE 976 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\memmove.asm -FILE 977 F:\SP\vctools\crt_bld\SELF_X86\crt\src\Intel\MEMCPY.ASM -FILE 978 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 979 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\string\i386\memcmp.c -FILE 980 f:\sp\public\sdk\inc\ddbanned.h -FILE 981 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 982 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 983 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 984 f:\sp\public\sdk\inc\poppack.h -FILE 985 f:\sp\public\sdk\inc\winnetwk.h -FILE 986 f:\sp\public\sdk\inc\imm.h -FILE 987 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 988 f:\sp\public\sdk\inc\pshpack1.h -FILE 989 f:\sp\public\sdk\inc\winver.h -FILE 990 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 991 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 992 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 993 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 994 f:\sp\public\sdk\inc\guiddef.h -FILE 995 f:\sp\public\sdk\inc\windows.h -FILE 996 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 997 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 998 f:\sp\public\sdk\inc\specstrings.h -FILE 999 f:\sp\public\sdk\inc\basetsd.h -FILE 1000 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1001 f:\sp\public\sdk\inc\winreg.h -FILE 1002 f:\sp\vctools\crt_bld\self_x86\crt\src\memcpy_s.c -FILE 1003 f:\sp\public\sdk\inc\winbase.h -FILE 1004 f:\sp\public\sdk\inc\winerror.h -FILE 1005 f:\sp\public\sdk\inc\pshpack8.h -FILE 1006 f:\sp\public\sdk\inc\reason.h -FILE 1007 f:\sp\public\sdk\inc\wincon.h -FILE 1008 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1009 f:\sp\public\sdk\inc\windef.h -FILE 1010 f:\sp\public\sdk\inc\ddbanned.h -FILE 1011 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1012 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1013 f:\sp\public\sdk\inc\pshpack2.h -FILE 1014 f:\sp\public\sdk\inc\mcx.h -FILE 1015 f:\sp\public\sdk\inc\winuser.h -FILE 1016 f:\sp\public\sdk\inc\winnls.h -FILE 1017 f:\sp\public\sdk\inc\stralign.h -FILE 1018 f:\sp\public\sdk\inc\tvout.h -FILE 1019 f:\sp\public\sdk\inc\winsvc.h -FILE 1020 f:\sp\public\sdk\inc\wingdi.h -FILE 1021 f:\sp\public\sdk\inc\winnt.h -FILE 1022 f:\sp\public\sdk\inc\pshpack4.h -FILE 1023 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\string\i386\p4_memcpy.c -FILE 1024 f:\sp\public\sdk\inc\ddbanned.h -FILE 1025 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 1026 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 1027 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\memcpy.asm -FILE 1028 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 1029 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1030 f:\sp\public\sdk\inc\wincon.h -FILE 1031 f:\sp\public\sdk\inc\imm.h -FILE 1032 f:\sp\public\sdk\inc\winbase.h -FILE 1033 f:\sp\public\sdk\inc\wingdi.h -FILE 1034 f:\sp\public\sdk\inc\winver.h -FILE 1035 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1036 f:\sp\public\sdk\inc\windows.h -FILE 1037 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1038 f:\sp\public\sdk\inc\pshpack2.h -FILE 1039 f:\sp\public\sdk\inc\reason.h -FILE 1040 f:\sp\vctools\crt_bld\self_x86\crt\src\woutputs.c -FILE 1041 f:\sp\vctools\crt_bld\self_x86\crt\src\fltintrn.h -FILE 1042 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1043 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1044 f:\sp\public\sdk\inc\specstrings.h -FILE 1045 f:\sp\public\sdk\inc\basetsd.h -FILE 1046 f:\sp\public\sdk\inc\pshpack4.h -FILE 1047 f:\sp\public\sdk\inc\winnetwk.h -FILE 1048 f:\sp\public\sdk\inc\stralign.h -FILE 1049 f:\sp\public\sdk\inc\poppack.h -FILE 1050 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1051 f:\sp\public\sdk\inc\winsvc.h -FILE 1052 f:\sp\public\sdk\inc\windef.h -FILE 1053 f:\sp\vctools\crt_bld\self_x86\crt\src\output.c -FILE 1054 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1055 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1056 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1057 f:\sp\public\sdk\inc\winuser.h -FILE 1058 f:\sp\public\sdk\inc\mcx.h -FILE 1059 f:\sp\public\sdk\inc\pshpack8.h -FILE 1060 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1061 f:\sp\public\sdk\inc\guiddef.h -FILE 1062 f:\sp\public\sdk\inc\winnt.h -FILE 1063 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1064 f:\sp\public\sdk\inc\winnls.h -FILE 1065 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1066 f:\sp\public\sdk\inc\pshpack1.h -FILE 1067 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 1068 f:\sp\public\sdk\inc\winerror.h -FILE 1069 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1070 f:\sp\vctools\crt_bld\self_x86\crt\src\cvt.h -FILE 1071 f:\sp\vctools\crt_bld\self_x86\crt\src\conio.h -FILE 1072 f:\sp\public\sdk\inc\winreg.h -FILE 1073 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1074 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 1075 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 1076 f:\sp\public\sdk\inc\ddbanned.h -FILE 1077 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1078 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1079 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1080 f:\sp\public\sdk\inc\tvout.h -FILE 1081 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 1082 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 1083 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h -FILE 1084 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1085 f:\sp\public\sdk\inc\wincon.h -FILE 1086 f:\sp\public\sdk\inc\imm.h -FILE 1087 f:\sp\public\sdk\inc\winbase.h -FILE 1088 f:\sp\public\sdk\inc\wingdi.h -FILE 1089 f:\sp\public\sdk\inc\winver.h -FILE 1090 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1091 f:\sp\public\sdk\inc\windows.h -FILE 1092 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1093 f:\sp\public\sdk\inc\pshpack2.h -FILE 1094 f:\sp\public\sdk\inc\reason.h -FILE 1095 f:\sp\vctools\crt_bld\self_x86\crt\src\woutputp.c -FILE 1096 f:\sp\vctools\crt_bld\self_x86\crt\src\fltintrn.h -FILE 1097 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1098 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1099 f:\sp\public\sdk\inc\specstrings.h -FILE 1100 f:\sp\public\sdk\inc\basetsd.h -FILE 1101 f:\sp\public\sdk\inc\pshpack4.h -FILE 1102 f:\sp\public\sdk\inc\winnetwk.h -FILE 1103 f:\sp\public\sdk\inc\stralign.h -FILE 1104 f:\sp\public\sdk\inc\poppack.h -FILE 1105 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1106 f:\sp\public\sdk\inc\winsvc.h -FILE 1107 f:\sp\public\sdk\inc\windef.h -FILE 1108 f:\sp\vctools\crt_bld\self_x86\crt\src\output.c -FILE 1109 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1110 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1111 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1112 f:\sp\public\sdk\inc\winuser.h -FILE 1113 f:\sp\public\sdk\inc\mcx.h -FILE 1114 f:\sp\public\sdk\inc\pshpack8.h -FILE 1115 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1116 f:\sp\public\sdk\inc\guiddef.h -FILE 1117 f:\sp\public\sdk\inc\winnt.h -FILE 1118 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1119 f:\sp\public\sdk\inc\winnls.h -FILE 1120 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1121 f:\sp\public\sdk\inc\pshpack1.h -FILE 1122 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 1123 f:\sp\public\sdk\inc\winerror.h -FILE 1124 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1125 f:\sp\vctools\crt_bld\self_x86\crt\src\cvt.h -FILE 1126 f:\sp\vctools\crt_bld\self_x86\crt\src\conio.h -FILE 1127 f:\sp\public\sdk\inc\winreg.h -FILE 1128 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1129 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 1130 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 1131 f:\sp\public\sdk\inc\ddbanned.h -FILE 1132 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1133 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1134 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1135 f:\sp\public\sdk\inc\tvout.h -FILE 1136 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 1137 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 1138 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h -FILE 1139 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1140 f:\sp\public\sdk\inc\wincon.h -FILE 1141 f:\sp\public\sdk\inc\imm.h -FILE 1142 f:\sp\public\sdk\inc\winbase.h -FILE 1143 f:\sp\public\sdk\inc\wingdi.h -FILE 1144 f:\sp\public\sdk\inc\winver.h -FILE 1145 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1146 f:\sp\public\sdk\inc\windows.h -FILE 1147 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1148 f:\sp\public\sdk\inc\pshpack2.h -FILE 1149 f:\sp\public\sdk\inc\reason.h -FILE 1150 f:\sp\vctools\crt_bld\self_x86\crt\src\woutput.c -FILE 1151 f:\sp\vctools\crt_bld\self_x86\crt\src\fltintrn.h -FILE 1152 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1153 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1154 f:\sp\public\sdk\inc\specstrings.h -FILE 1155 f:\sp\public\sdk\inc\basetsd.h -FILE 1156 f:\sp\public\sdk\inc\pshpack4.h -FILE 1157 f:\sp\public\sdk\inc\winnetwk.h -FILE 1158 f:\sp\public\sdk\inc\stralign.h -FILE 1159 f:\sp\public\sdk\inc\poppack.h -FILE 1160 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1161 f:\sp\public\sdk\inc\winsvc.h -FILE 1162 f:\sp\public\sdk\inc\windef.h -FILE 1163 f:\sp\vctools\crt_bld\self_x86\crt\src\output.c -FILE 1164 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1165 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1166 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1167 f:\sp\public\sdk\inc\winuser.h -FILE 1168 f:\sp\public\sdk\inc\mcx.h -FILE 1169 f:\sp\public\sdk\inc\pshpack8.h -FILE 1170 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1171 f:\sp\public\sdk\inc\guiddef.h -FILE 1172 f:\sp\public\sdk\inc\winnt.h -FILE 1173 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1174 f:\sp\public\sdk\inc\winnls.h -FILE 1175 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1176 f:\sp\public\sdk\inc\pshpack1.h -FILE 1177 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 1178 f:\sp\public\sdk\inc\winerror.h -FILE 1179 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1180 f:\sp\vctools\crt_bld\self_x86\crt\src\cvt.h -FILE 1181 f:\sp\vctools\crt_bld\self_x86\crt\src\conio.h -FILE 1182 f:\sp\public\sdk\inc\winreg.h -FILE 1183 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1184 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 1185 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 1186 f:\sp\public\sdk\inc\ddbanned.h -FILE 1187 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1188 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1189 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1190 f:\sp\public\sdk\inc\tvout.h -FILE 1191 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 1192 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 1193 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h -FILE 1194 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1195 f:\sp\public\sdk\inc\wincon.h -FILE 1196 f:\sp\public\sdk\inc\imm.h -FILE 1197 f:\sp\public\sdk\inc\winbase.h -FILE 1198 f:\sp\public\sdk\inc\wingdi.h -FILE 1199 f:\sp\public\sdk\inc\winver.h -FILE 1200 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1201 f:\sp\public\sdk\inc\windows.h -FILE 1202 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1203 f:\sp\public\sdk\inc\pshpack2.h -FILE 1204 f:\sp\public\sdk\inc\reason.h -FILE 1205 f:\sp\vctools\crt_bld\self_x86\crt\src\fltintrn.h -FILE 1206 f:\sp\vctools\crt_bld\self_x86\crt\src\outputs.c -FILE 1207 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1208 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1209 f:\sp\public\sdk\inc\specstrings.h -FILE 1210 f:\sp\public\sdk\inc\basetsd.h -FILE 1211 f:\sp\public\sdk\inc\pshpack4.h -FILE 1212 f:\sp\public\sdk\inc\winnetwk.h -FILE 1213 f:\sp\public\sdk\inc\stralign.h -FILE 1214 f:\sp\public\sdk\inc\poppack.h -FILE 1215 f:\sp\public\sdk\inc\winsvc.h -FILE 1216 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1217 f:\sp\public\sdk\inc\windef.h -FILE 1218 f:\sp\vctools\crt_bld\self_x86\crt\src\output.c -FILE 1219 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1220 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1221 f:\sp\public\sdk\inc\winuser.h -FILE 1222 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1223 f:\sp\public\sdk\inc\mcx.h -FILE 1224 f:\sp\public\sdk\inc\pshpack8.h -FILE 1225 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1226 f:\sp\public\sdk\inc\guiddef.h -FILE 1227 f:\sp\public\sdk\inc\winnt.h -FILE 1228 f:\sp\public\sdk\inc\winnls.h -FILE 1229 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1230 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1231 f:\sp\public\sdk\inc\pshpack1.h -FILE 1232 f:\sp\public\sdk\inc\winerror.h -FILE 1233 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1234 f:\sp\vctools\crt_bld\self_x86\crt\src\cvt.h -FILE 1235 f:\sp\vctools\crt_bld\self_x86\crt\src\conio.h -FILE 1236 f:\sp\public\sdk\inc\winreg.h -FILE 1237 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1238 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 1239 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 1240 f:\sp\public\sdk\inc\ddbanned.h -FILE 1241 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1242 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1243 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1244 f:\sp\public\sdk\inc\tvout.h -FILE 1245 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 1246 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 1247 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1248 f:\sp\public\sdk\inc\wincon.h -FILE 1249 f:\sp\public\sdk\inc\imm.h -FILE 1250 f:\sp\public\sdk\inc\winbase.h -FILE 1251 f:\sp\public\sdk\inc\wingdi.h -FILE 1252 f:\sp\public\sdk\inc\winver.h -FILE 1253 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1254 f:\sp\public\sdk\inc\windows.h -FILE 1255 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1256 f:\sp\public\sdk\inc\pshpack2.h -FILE 1257 f:\sp\public\sdk\inc\reason.h -FILE 1258 f:\sp\vctools\crt_bld\self_x86\crt\src\fltintrn.h -FILE 1259 f:\sp\vctools\crt_bld\self_x86\crt\src\outputp.c -FILE 1260 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1261 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1262 f:\sp\public\sdk\inc\specstrings.h -FILE 1263 f:\sp\public\sdk\inc\basetsd.h -FILE 1264 f:\sp\public\sdk\inc\pshpack4.h -FILE 1265 f:\sp\public\sdk\inc\winnetwk.h -FILE 1266 f:\sp\public\sdk\inc\stralign.h -FILE 1267 f:\sp\public\sdk\inc\poppack.h -FILE 1268 f:\sp\public\sdk\inc\winsvc.h -FILE 1269 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1270 f:\sp\public\sdk\inc\windef.h -FILE 1271 f:\sp\vctools\crt_bld\self_x86\crt\src\output.c -FILE 1272 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1273 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1274 f:\sp\public\sdk\inc\winuser.h -FILE 1275 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1276 f:\sp\public\sdk\inc\mcx.h -FILE 1277 f:\sp\public\sdk\inc\pshpack8.h -FILE 1278 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1279 f:\sp\public\sdk\inc\guiddef.h -FILE 1280 f:\sp\public\sdk\inc\winnt.h -FILE 1281 f:\sp\public\sdk\inc\winnls.h -FILE 1282 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1283 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1284 f:\sp\public\sdk\inc\pshpack1.h -FILE 1285 f:\sp\public\sdk\inc\winerror.h -FILE 1286 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1287 f:\sp\vctools\crt_bld\self_x86\crt\src\cvt.h -FILE 1288 f:\sp\vctools\crt_bld\self_x86\crt\src\conio.h -FILE 1289 f:\sp\public\sdk\inc\winreg.h -FILE 1290 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1291 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 1292 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 1293 f:\sp\public\sdk\inc\ddbanned.h -FILE 1294 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1295 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1296 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1297 f:\sp\public\sdk\inc\tvout.h -FILE 1298 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 1299 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 1300 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1301 f:\sp\public\sdk\inc\wincon.h -FILE 1302 f:\sp\public\sdk\inc\imm.h -FILE 1303 f:\sp\public\sdk\inc\winbase.h -FILE 1304 f:\sp\public\sdk\inc\wingdi.h -FILE 1305 f:\sp\public\sdk\inc\winver.h -FILE 1306 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1307 f:\sp\public\sdk\inc\windows.h -FILE 1308 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1309 f:\sp\public\sdk\inc\pshpack2.h -FILE 1310 f:\sp\public\sdk\inc\reason.h -FILE 1311 f:\sp\vctools\crt_bld\self_x86\crt\src\fltintrn.h -FILE 1312 f:\sp\vctools\crt_bld\self_x86\crt\src\output.c -FILE 1313 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1314 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1315 f:\sp\public\sdk\inc\specstrings.h -FILE 1316 f:\sp\public\sdk\inc\basetsd.h -FILE 1317 f:\sp\public\sdk\inc\pshpack4.h -FILE 1318 f:\sp\public\sdk\inc\winnetwk.h -FILE 1319 f:\sp\public\sdk\inc\stralign.h -FILE 1320 f:\sp\public\sdk\inc\poppack.h -FILE 1321 f:\sp\public\sdk\inc\winsvc.h -FILE 1322 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1323 f:\sp\public\sdk\inc\windef.h -FILE 1324 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1325 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1326 f:\sp\public\sdk\inc\winuser.h -FILE 1327 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1328 f:\sp\public\sdk\inc\mcx.h -FILE 1329 f:\sp\public\sdk\inc\pshpack8.h -FILE 1330 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1331 f:\sp\public\sdk\inc\guiddef.h -FILE 1332 f:\sp\public\sdk\inc\winnt.h -FILE 1333 f:\sp\public\sdk\inc\winnls.h -FILE 1334 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1335 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1336 f:\sp\public\sdk\inc\pshpack1.h -FILE 1337 f:\sp\public\sdk\inc\winerror.h -FILE 1338 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1339 f:\sp\vctools\crt_bld\self_x86\crt\src\cvt.h -FILE 1340 f:\sp\vctools\crt_bld\self_x86\crt\src\conio.h -FILE 1341 f:\sp\public\sdk\inc\winreg.h -FILE 1342 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1343 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 1344 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 1345 f:\sp\public\sdk\inc\ddbanned.h -FILE 1346 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1347 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1348 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1349 f:\sp\public\sdk\inc\tvout.h -FILE 1350 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 1351 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 1352 f:\sp\public\sdk\inc\stralign.h -FILE 1353 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1354 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1355 f:\sp\public\sdk\inc\tvout.h -FILE 1356 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1357 f:\sp\public\sdk\inc\windows.h -FILE 1358 f:\sp\public\sdk\inc\winsvc.h -FILE 1359 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1360 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 1361 f:\sp\public\sdk\inc\wingdi.h -FILE 1362 f:\sp\public\sdk\inc\pshpack4.h -FILE 1363 f:\sp\public\sdk\inc\poppack.h -FILE 1364 f:\sp\public\sdk\inc\winnetwk.h -FILE 1365 f:\sp\public\sdk\inc\imm.h -FILE 1366 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1367 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1368 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h -FILE 1369 f:\sp\public\sdk\inc\windef.h -FILE 1370 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1371 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1372 f:\sp\public\sdk\inc\pshpack1.h -FILE 1373 f:\sp\public\sdk\inc\winver.h -FILE 1374 f:\sp\vctools\crt_bld\self_x86\crt\src\vswprnc.c -FILE 1375 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1376 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1377 f:\sp\public\sdk\inc\winnt.h -FILE 1378 f:\sp\public\sdk\inc\winreg.h -FILE 1379 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1380 f:\sp\vctools\crt_bld\self_x86\crt\src\vswprint.c -FILE 1381 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1382 f:\sp\public\sdk\inc\winbase.h -FILE 1383 f:\sp\public\sdk\inc\winerror.h -FILE 1384 f:\sp\public\sdk\inc\ddbanned.h -FILE 1385 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1386 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1387 f:\sp\public\sdk\inc\pshpack8.h -FILE 1388 f:\sp\public\sdk\inc\guiddef.h -FILE 1389 f:\sp\public\sdk\inc\specstrings.h -FILE 1390 f:\sp\public\sdk\inc\basetsd.h -FILE 1391 f:\sp\public\sdk\inc\reason.h -FILE 1392 f:\sp\public\sdk\inc\wincon.h -FILE 1393 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 1394 f:\sp\public\sdk\inc\pshpack2.h -FILE 1395 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1396 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1397 f:\sp\public\sdk\inc\mcx.h -FILE 1398 f:\sp\public\sdk\inc\winuser.h -FILE 1399 f:\sp\public\sdk\inc\winnls.h -FILE 1400 f:\sp\public\sdk\inc\pshpack1.h -FILE 1401 f:\sp\public\sdk\inc\winver.h -FILE 1402 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1403 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1404 f:\sp\public\sdk\inc\winnt.h -FILE 1405 f:\sp\public\sdk\inc\winreg.h -FILE 1406 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1407 f:\sp\public\sdk\inc\winbase.h -FILE 1408 f:\sp\public\sdk\inc\winerror.h -FILE 1409 f:\sp\public\sdk\inc\pshpack8.h -FILE 1410 f:\sp\public\sdk\inc\guiddef.h -FILE 1411 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1412 f:\sp\public\sdk\inc\specstrings.h -FILE 1413 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1414 f:\sp\public\sdk\inc\basetsd.h -FILE 1415 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1416 f:\sp\public\sdk\inc\reason.h -FILE 1417 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 1418 f:\sp\public\sdk\inc\wincon.h -FILE 1419 f:\sp\public\sdk\inc\pshpack2.h -FILE 1420 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1421 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1422 f:\sp\public\sdk\inc\mcx.h -FILE 1423 f:\sp\public\sdk\inc\winuser.h -FILE 1424 f:\sp\public\sdk\inc\winnls.h -FILE 1425 f:\sp\vctools\crt_bld\self_x86\crt\src\vswprint.c -FILE 1426 f:\sp\public\sdk\inc\stralign.h -FILE 1427 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1428 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1429 f:\sp\public\sdk\inc\tvout.h -FILE 1430 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1431 f:\sp\public\sdk\inc\windows.h -FILE 1432 f:\sp\public\sdk\inc\winsvc.h -FILE 1433 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1434 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 1435 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1436 f:\sp\public\sdk\inc\wingdi.h -FILE 1437 f:\sp\public\sdk\inc\pshpack4.h -FILE 1438 f:\sp\public\sdk\inc\poppack.h -FILE 1439 f:\sp\public\sdk\inc\ddbanned.h -FILE 1440 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1441 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1442 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h -FILE 1443 f:\sp\public\sdk\inc\winnetwk.h -FILE 1444 f:\sp\public\sdk\inc\imm.h -FILE 1445 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1446 f:\sp\public\sdk\inc\windef.h -FILE 1447 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1448 f:\sp\public\sdk\inc\windef.h -FILE 1449 f:\sp\public\sdk\inc\pshpack1.h -FILE 1450 f:\sp\public\sdk\inc\winver.h -FILE 1451 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1452 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1453 f:\sp\public\sdk\inc\winnt.h -FILE 1454 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1455 f:\sp\public\sdk\inc\winreg.h -FILE 1456 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1457 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1458 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1459 f:\sp\public\sdk\inc\winbase.h -FILE 1460 f:\sp\public\sdk\inc\winerror.h -FILE 1461 f:\sp\public\sdk\inc\pshpack8.h -FILE 1462 f:\sp\vctools\crt_bld\self_x86\crt\src\vfprintf.c -FILE 1463 f:\sp\public\sdk\inc\reason.h -FILE 1464 f:\sp\public\sdk\inc\wincon.h -FILE 1465 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1466 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1467 f:\sp\public\sdk\inc\pshpack2.h -FILE 1468 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1469 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h -FILE 1470 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1471 f:\sp\public\sdk\inc\mcx.h -FILE 1472 f:\sp\public\sdk\inc\winuser.h -FILE 1473 f:\sp\public\sdk\inc\winnls.h -FILE 1474 f:\sp\public\sdk\inc\guiddef.h -FILE 1475 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1476 f:\sp\public\sdk\inc\windows.h -FILE 1477 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1478 f:\sp\public\sdk\inc\specstrings.h -FILE 1479 f:\sp\public\sdk\inc\basetsd.h -FILE 1480 f:\sp\public\sdk\inc\stralign.h -FILE 1481 f:\sp\public\sdk\inc\tvout.h -FILE 1482 f:\sp\public\sdk\inc\ddbanned.h -FILE 1483 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1484 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 1485 f:\sp\public\sdk\inc\winsvc.h -FILE 1486 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1487 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1488 f:\sp\public\sdk\inc\wingdi.h -FILE 1489 f:\sp\public\sdk\inc\pshpack4.h -FILE 1490 f:\sp\public\sdk\inc\poppack.h -FILE 1491 f:\sp\public\sdk\inc\winnetwk.h -FILE 1492 f:\sp\public\sdk\inc\imm.h -FILE 1493 f:\sp\public\sdk\inc\windef.h -FILE 1494 f:\sp\public\sdk\inc\pshpack1.h -FILE 1495 f:\sp\public\sdk\inc\winver.h -FILE 1496 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1497 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1498 f:\sp\public\sdk\inc\winnt.h -FILE 1499 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1500 f:\sp\public\sdk\inc\winreg.h -FILE 1501 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1502 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1503 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1504 f:\sp\public\sdk\inc\winbase.h -FILE 1505 f:\sp\public\sdk\inc\winerror.h -FILE 1506 f:\sp\public\sdk\inc\pshpack8.h -FILE 1507 f:\sp\vctools\crt_bld\self_x86\crt\src\vprintf.c -FILE 1508 f:\sp\public\sdk\inc\reason.h -FILE 1509 f:\sp\public\sdk\inc\wincon.h -FILE 1510 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h -FILE 1511 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1512 f:\sp\public\sdk\inc\pshpack2.h -FILE 1513 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1514 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1515 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1516 f:\sp\public\sdk\inc\mcx.h -FILE 1517 f:\sp\public\sdk\inc\winuser.h -FILE 1518 f:\sp\public\sdk\inc\winnls.h -FILE 1519 f:\sp\public\sdk\inc\guiddef.h -FILE 1520 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1521 f:\sp\public\sdk\inc\windows.h -FILE 1522 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1523 f:\sp\public\sdk\inc\specstrings.h -FILE 1524 f:\sp\public\sdk\inc\basetsd.h -FILE 1525 f:\sp\public\sdk\inc\stralign.h -FILE 1526 f:\sp\public\sdk\inc\tvout.h -FILE 1527 f:\sp\public\sdk\inc\ddbanned.h -FILE 1528 f:\sp\public\sdk\inc\winsvc.h -FILE 1529 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1530 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 1531 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1532 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1533 f:\sp\public\sdk\inc\wingdi.h -FILE 1534 f:\sp\public\sdk\inc\pshpack4.h -FILE 1535 f:\sp\public\sdk\inc\poppack.h -FILE 1536 f:\sp\public\sdk\inc\winnetwk.h -FILE 1537 f:\sp\public\sdk\inc\imm.h -FILE 1538 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1539 f:\sp\public\sdk\inc\pshpack1.h -FILE 1540 f:\sp\public\sdk\inc\winver.h -FILE 1541 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1542 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1543 f:\sp\public\sdk\inc\winnt.h -FILE 1544 f:\sp\public\sdk\inc\winreg.h -FILE 1545 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1546 f:\sp\public\sdk\inc\winbase.h -FILE 1547 f:\sp\public\sdk\inc\winerror.h -FILE 1548 f:\sp\public\sdk\inc\pshpack8.h -FILE 1549 f:\sp\public\sdk\inc\guiddef.h -FILE 1550 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1551 f:\sp\public\sdk\inc\specstrings.h -FILE 1552 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1553 f:\sp\public\sdk\inc\basetsd.h -FILE 1554 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1555 f:\sp\public\sdk\inc\reason.h -FILE 1556 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 1557 f:\sp\public\sdk\inc\wincon.h -FILE 1558 f:\sp\public\sdk\inc\pshpack2.h -FILE 1559 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1560 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1561 f:\sp\public\sdk\inc\mcx.h -FILE 1562 f:\sp\public\sdk\inc\winuser.h -FILE 1563 f:\sp\public\sdk\inc\winnls.h -FILE 1564 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.c -FILE 1565 f:\sp\public\sdk\inc\stralign.h -FILE 1566 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1567 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1568 f:\sp\public\sdk\inc\tvout.h -FILE 1569 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1570 f:\sp\public\sdk\inc\windows.h -FILE 1571 f:\sp\public\sdk\inc\winsvc.h -FILE 1572 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1573 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 1574 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1575 f:\sp\public\sdk\inc\wingdi.h -FILE 1576 f:\sp\public\sdk\inc\pshpack4.h -FILE 1577 f:\sp\public\sdk\inc\poppack.h -FILE 1578 f:\sp\public\sdk\inc\ddbanned.h -FILE 1579 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1580 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1581 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h -FILE 1582 f:\sp\public\sdk\inc\winnetwk.h -FILE 1583 f:\sp\public\sdk\inc\imm.h -FILE 1584 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1585 f:\sp\public\sdk\inc\windef.h -FILE 1586 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1587 f:\sp\public\sdk\inc\windef.h -FILE 1588 f:\sp\public\sdk\inc\pshpack1.h -FILE 1589 f:\sp\public\sdk\inc\winver.h -FILE 1590 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1591 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1592 f:\sp\public\sdk\inc\winnt.h -FILE 1593 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1594 f:\sp\public\sdk\inc\winreg.h -FILE 1595 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1596 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1597 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1598 f:\sp\public\sdk\inc\winbase.h -FILE 1599 f:\sp\public\sdk\inc\winerror.h -FILE 1600 f:\sp\public\sdk\inc\pshpack8.h -FILE 1601 f:\sp\vctools\crt_bld\self_x86\crt\src\printf.c -FILE 1602 f:\sp\public\sdk\inc\reason.h -FILE 1603 f:\sp\public\sdk\inc\wincon.h -FILE 1604 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1605 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1606 f:\sp\public\sdk\inc\pshpack2.h -FILE 1607 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1608 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h -FILE 1609 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1610 f:\sp\public\sdk\inc\mcx.h -FILE 1611 f:\sp\public\sdk\inc\winuser.h -FILE 1612 f:\sp\public\sdk\inc\winnls.h -FILE 1613 f:\sp\public\sdk\inc\guiddef.h -FILE 1614 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1615 f:\sp\public\sdk\inc\windows.h -FILE 1616 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1617 f:\sp\public\sdk\inc\specstrings.h -FILE 1618 f:\sp\public\sdk\inc\basetsd.h -FILE 1619 f:\sp\public\sdk\inc\stralign.h -FILE 1620 f:\sp\public\sdk\inc\tvout.h -FILE 1621 f:\sp\public\sdk\inc\ddbanned.h -FILE 1622 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1623 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 1624 f:\sp\public\sdk\inc\winsvc.h -FILE 1625 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1626 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1627 f:\sp\vctools\crt_bld\self_x86\crt\src\process.h -FILE 1628 f:\sp\public\sdk\inc\wingdi.h -FILE 1629 f:\sp\public\sdk\inc\pshpack4.h -FILE 1630 f:\sp\public\sdk\inc\poppack.h -FILE 1631 f:\sp\public\sdk\inc\winnetwk.h -FILE 1632 f:\sp\public\sdk\inc\imm.h -FILE 1633 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1634 f:\sp\public\sdk\inc\windef.h -FILE 1635 f:\sp\public\sdk\inc\pshpack1.h -FILE 1636 f:\sp\public\sdk\inc\winver.h -FILE 1637 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1638 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1639 f:\sp\public\sdk\inc\winnt.h -FILE 1640 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1641 f:\sp\public\sdk\inc\winreg.h -FILE 1642 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1643 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1644 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1645 f:\sp\public\sdk\inc\winbase.h -FILE 1646 f:\sp\public\sdk\inc\winerror.h -FILE 1647 f:\sp\public\sdk\inc\pshpack8.h -FILE 1648 f:\sp\vctools\crt_bld\self_x86\crt\src\fprintf.c -FILE 1649 f:\sp\public\sdk\inc\reason.h -FILE 1650 f:\sp\public\sdk\inc\wincon.h -FILE 1651 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1652 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1653 f:\sp\public\sdk\inc\pshpack2.h -FILE 1654 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1655 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h -FILE 1656 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1657 f:\sp\public\sdk\inc\mcx.h -FILE 1658 f:\sp\public\sdk\inc\winuser.h -FILE 1659 f:\sp\public\sdk\inc\winnls.h -FILE 1660 f:\sp\public\sdk\inc\guiddef.h -FILE 1661 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1662 f:\sp\public\sdk\inc\windows.h -FILE 1663 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1664 f:\sp\public\sdk\inc\specstrings.h -FILE 1665 f:\sp\public\sdk\inc\basetsd.h -FILE 1666 f:\sp\public\sdk\inc\stralign.h -FILE 1667 f:\sp\public\sdk\inc\tvout.h -FILE 1668 f:\sp\public\sdk\inc\ddbanned.h -FILE 1669 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1670 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 1671 f:\sp\public\sdk\inc\winsvc.h -FILE 1672 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1673 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1674 f:\sp\public\sdk\inc\wingdi.h -FILE 1675 f:\sp\public\sdk\inc\pshpack4.h -FILE 1676 f:\sp\public\sdk\inc\poppack.h -FILE 1677 f:\sp\public\sdk\inc\winnetwk.h -FILE 1678 f:\sp\public\sdk\inc\imm.h -FILE 1679 f:\sp\public\sdk\inc\pshpack1.h -FILE 1680 f:\sp\public\sdk\inc\winver.h -FILE 1681 f:\sp\public\sdk\inc\winnt.h -FILE 1682 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1683 f:\sp\public\sdk\inc\winreg.h -FILE 1684 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1685 f:\sp\public\sdk\inc\winbase.h -FILE 1686 f:\sp\public\sdk\inc\winerror.h -FILE 1687 f:\sp\public\sdk\inc\pshpack8.h -FILE 1688 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h -FILE 1689 f:\sp\public\sdk\inc\reason.h -FILE 1690 f:\sp\public\sdk\inc\wincon.h -FILE 1691 f:\sp\public\sdk\inc\pshpack2.h -FILE 1692 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1693 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1694 f:\sp\public\sdk\inc\mcx.h -FILE 1695 f:\sp\public\sdk\inc\winuser.h -FILE 1696 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1697 f:\sp\public\sdk\inc\winnls.h -FILE 1698 f:\sp\public\sdk\inc\guiddef.h -FILE 1699 f:\sp\public\sdk\inc\windows.h -FILE 1700 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1701 f:\sp\public\sdk\inc\specstrings.h -FILE 1702 f:\sp\public\sdk\inc\basetsd.h -FILE 1703 f:\sp\public\sdk\inc\stralign.h -FILE 1704 f:\sp\vctools\crt_bld\self_x86\crt\src\fflush.c -FILE 1705 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h -FILE 1706 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h -FILE 1707 f:\sp\public\sdk\inc\tvout.h -FILE 1708 f:\sp\public\sdk\inc\winsvc.h -FILE 1709 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1710 f:\sp\public\sdk\inc\wingdi.h -FILE 1711 f:\sp\public\sdk\inc\pshpack4.h -FILE 1712 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1713 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1714 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1715 f:\sp\public\sdk\inc\poppack.h -FILE 1716 f:\sp\public\sdk\inc\ddbanned.h -FILE 1717 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1718 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1719 f:\sp\public\sdk\inc\winnetwk.h -FILE 1720 f:\sp\public\sdk\inc\imm.h -FILE 1721 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1722 f:\sp\public\sdk\inc\windef.h -FILE 1723 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1724 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1725 f:\sp\public\sdk\inc\pshpack8.h -FILE 1726 f:\sp\public\sdk\inc\reason.h -FILE 1727 f:\sp\public\sdk\inc\wincon.h -FILE 1728 f:\sp\public\sdk\inc\pshpack2.h -FILE 1729 f:\sp\public\sdk\inc\mcx.h -FILE 1730 f:\sp\public\sdk\inc\winuser.h -FILE 1731 f:\sp\public\sdk\inc\winnls.h -FILE 1732 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1733 f:\sp\public\sdk\inc\windef.h -FILE 1734 f:\sp\public\sdk\inc\stralign.h -FILE 1735 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h -FILE 1736 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1737 f:\sp\public\sdk\inc\tvout.h -FILE 1738 f:\sp\public\sdk\inc\winsvc.h -FILE 1739 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1740 f:\sp\public\sdk\inc\wingdi.h -FILE 1741 f:\sp\public\sdk\inc\pshpack4.h -FILE 1742 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1743 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1744 f:\sp\public\sdk\inc\poppack.h -FILE 1745 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1746 f:\sp\public\sdk\inc\winnt.h -FILE 1747 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1748 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1749 f:\sp\public\sdk\inc\winnetwk.h -FILE 1750 f:\sp\public\sdk\inc\imm.h -FILE 1751 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1752 f:\sp\vctools\crt_bld\self_x86\crt\src\fclose.c -FILE 1753 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1754 f:\sp\public\sdk\inc\pshpack1.h -FILE 1755 f:\sp\public\sdk\inc\winver.h -FILE 1756 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1757 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1758 f:\sp\public\sdk\inc\guiddef.h -FILE 1759 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1760 f:\sp\public\sdk\inc\ddbanned.h -FILE 1761 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1762 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1763 f:\sp\public\sdk\inc\specstrings.h -FILE 1764 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1765 f:\sp\public\sdk\inc\basetsd.h -FILE 1766 f:\sp\public\sdk\inc\windows.h -FILE 1767 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1768 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h -FILE 1769 f:\sp\public\sdk\inc\winreg.h -FILE 1770 f:\sp\public\sdk\inc\winbase.h -FILE 1771 f:\sp\public\sdk\inc\winerror.h -FILE 1772 f:\sp\public\sdk\inc\poppack.h -FILE 1773 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h -FILE 1774 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1775 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1776 f:\sp\public\sdk\inc\winnetwk.h -FILE 1777 f:\sp\public\sdk\inc\imm.h -FILE 1778 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1779 f:\sp\public\sdk\inc\windef.h -FILE 1780 f:\sp\public\sdk\inc\pshpack1.h -FILE 1781 f:\sp\public\sdk\inc\winver.h -FILE 1782 f:\sp\public\sdk\inc\windows.h -FILE 1783 f:\sp\public\sdk\inc\winnt.h -FILE 1784 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1785 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1786 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1787 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1788 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 1789 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1790 f:\sp\public\sdk\inc\winreg.h -FILE 1791 f:\sp\public\sdk\inc\winbase.h -FILE 1792 f:\sp\vctools\crt_bld\self_x86\crt\src\closeall.c -FILE 1793 f:\sp\public\sdk\inc\winerror.h -FILE 1794 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1795 f:\sp\public\sdk\inc\pshpack8.h -FILE 1796 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1797 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1798 f:\sp\public\sdk\inc\reason.h -FILE 1799 f:\sp\public\sdk\inc\wincon.h -FILE 1800 f:\sp\public\sdk\inc\ddbanned.h -FILE 1801 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1802 f:\sp\public\sdk\inc\pshpack2.h -FILE 1803 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1804 f:\sp\public\sdk\inc\mcx.h -FILE 1805 f:\sp\public\sdk\inc\winuser.h -FILE 1806 f:\sp\public\sdk\inc\winnls.h -FILE 1807 f:\sp\public\sdk\inc\guiddef.h -FILE 1808 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1809 f:\sp\public\sdk\inc\specstrings.h -FILE 1810 f:\sp\public\sdk\inc\basetsd.h -FILE 1811 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1812 f:\sp\public\sdk\inc\stralign.h -FILE 1813 f:\sp\public\sdk\inc\tvout.h -FILE 1814 f:\sp\public\sdk\inc\winsvc.h -FILE 1815 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1816 f:\sp\public\sdk\inc\wingdi.h -FILE 1817 f:\sp\public\sdk\inc\pshpack4.h -FILE 1818 f:\sp\public\sdk\inc\pshpack8.h -FILE 1819 f:\sp\public\sdk\inc\reason.h -FILE 1820 f:\sp\public\sdk\inc\wincon.h -FILE 1821 f:\sp\public\sdk\inc\pshpack2.h -FILE 1822 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1823 f:\sp\public\sdk\inc\mcx.h -FILE 1824 f:\sp\public\sdk\inc\winuser.h -FILE 1825 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1826 f:\sp\public\sdk\inc\winnls.h -FILE 1827 f:\sp\public\sdk\inc\guiddef.h -FILE 1828 f:\sp\public\sdk\inc\windows.h -FILE 1829 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1830 f:\sp\public\sdk\inc\specstrings.h -FILE 1831 f:\sp\public\sdk\inc\basetsd.h -FILE 1832 f:\sp\public\sdk\inc\stralign.h -FILE 1833 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h -FILE 1834 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h -FILE 1835 f:\sp\public\sdk\inc\tvout.h -FILE 1836 f:\sp\public\sdk\inc\winsvc.h -FILE 1837 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1838 f:\sp\public\sdk\inc\wingdi.h -FILE 1839 f:\sp\public\sdk\inc\pshpack4.h -FILE 1840 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 1841 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1842 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1843 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1844 f:\sp\public\sdk\inc\poppack.h -FILE 1845 f:\sp\public\sdk\inc\winnetwk.h -FILE 1846 f:\sp\public\sdk\inc\imm.h -FILE 1847 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1848 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1849 f:\sp\public\sdk\inc\windef.h -FILE 1850 f:\sp\vctools\crt_bld\self_x86\crt\src\_sftbuf.c -FILE 1851 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1852 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1853 f:\sp\public\sdk\inc\pshpack1.h -FILE 1854 f:\sp\public\sdk\inc\winver.h -FILE 1855 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1856 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1857 f:\sp\public\sdk\inc\ddbanned.h -FILE 1858 f:\sp\public\sdk\inc\winnt.h -FILE 1859 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1860 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1861 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1862 f:\sp\public\sdk\inc\winreg.h -FILE 1863 f:\sp\public\sdk\inc\winbase.h -FILE 1864 f:\sp\public\sdk\inc\winerror.h -FILE 1865 f:\sp\public\sdk\inc\pshpack1.h -FILE 1866 f:\sp\public\sdk\inc\winver.h -FILE 1867 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1868 f:\sp\public\sdk\inc\winnt.h -FILE 1869 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1870 f:\sp\public\sdk\inc\winreg.h -FILE 1871 f:\sp\public\sdk\inc\winbase.h -FILE 1872 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h -FILE 1873 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 1874 f:\sp\public\sdk\inc\winerror.h -FILE 1875 f:\sp\public\sdk\inc\pshpack8.h -FILE 1876 f:\sp\public\sdk\inc\reason.h -FILE 1877 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1878 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1879 f:\sp\public\sdk\inc\wincon.h -FILE 1880 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1881 f:\sp\public\sdk\inc\pshpack2.h -FILE 1882 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1883 f:\sp\public\sdk\inc\mcx.h -FILE 1884 f:\sp\public\sdk\inc\winuser.h -FILE 1885 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1886 f:\sp\public\sdk\inc\winnls.h -FILE 1887 f:\sp\public\sdk\inc\guiddef.h -FILE 1888 f:\sp\public\sdk\inc\windows.h -FILE 1889 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1890 f:\sp\public\sdk\inc\specstrings.h -FILE 1891 f:\sp\public\sdk\inc\basetsd.h -FILE 1892 f:\sp\public\sdk\inc\stralign.h -FILE 1893 f:\sp\vctools\crt_bld\self_x86\crt\src\_getbuf.c -FILE 1894 f:\sp\public\sdk\inc\tvout.h -FILE 1895 f:\sp\public\sdk\inc\winsvc.h -FILE 1896 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1897 f:\sp\public\sdk\inc\wingdi.h -FILE 1898 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1899 f:\sp\public\sdk\inc\pshpack4.h -FILE 1900 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1901 f:\sp\public\sdk\inc\poppack.h -FILE 1902 f:\sp\public\sdk\inc\ddbanned.h -FILE 1903 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1904 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1905 f:\sp\public\sdk\inc\winnetwk.h -FILE 1906 f:\sp\public\sdk\inc\imm.h -FILE 1907 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1908 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1909 f:\sp\public\sdk\inc\windef.h -FILE 1910 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1911 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1912 f:\sp\public\sdk\inc\windef.h -FILE 1913 f:\sp\public\sdk\inc\pshpack1.h -FILE 1914 f:\sp\public\sdk\inc\winver.h -FILE 1915 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h -FILE 1916 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1917 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1918 f:\sp\public\sdk\inc\winnt.h -FILE 1919 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1920 f:\sp\public\sdk\inc\winreg.h -FILE 1921 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1922 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1923 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1924 f:\sp\public\sdk\inc\winbase.h -FILE 1925 f:\sp\public\sdk\inc\winerror.h -FILE 1926 f:\sp\public\sdk\inc\pshpack8.h -FILE 1927 f:\sp\vctools\crt_bld\self_x86\crt\src\_freebuf.c -FILE 1928 f:\sp\public\sdk\inc\reason.h -FILE 1929 f:\sp\public\sdk\inc\wincon.h -FILE 1930 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1931 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1932 f:\sp\public\sdk\inc\pshpack2.h -FILE 1933 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1934 f:\sp\public\sdk\inc\mcx.h -FILE 1935 f:\sp\public\sdk\inc\winuser.h -FILE 1936 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1937 f:\sp\public\sdk\inc\winnls.h -FILE 1938 f:\sp\public\sdk\inc\guiddef.h -FILE 1939 f:\sp\public\sdk\inc\windows.h -FILE 1940 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1941 f:\sp\public\sdk\inc\specstrings.h -FILE 1942 f:\sp\public\sdk\inc\basetsd.h -FILE 1943 f:\sp\public\sdk\inc\stralign.h -FILE 1944 f:\sp\public\sdk\inc\tvout.h -FILE 1945 f:\sp\public\sdk\inc\ddbanned.h -FILE 1946 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1947 f:\sp\public\sdk\inc\winsvc.h -FILE 1948 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1949 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1950 f:\sp\public\sdk\inc\wingdi.h -FILE 1951 f:\sp\public\sdk\inc\pshpack4.h -FILE 1952 f:\sp\public\sdk\inc\poppack.h -FILE 1953 f:\sp\public\sdk\inc\winnetwk.h -FILE 1954 f:\sp\public\sdk\inc\imm.h -FILE 1955 f:\sp\public\sdk\inc\specstrings.h -FILE 1956 f:\sp\public\sdk\inc\basetsd.h -FILE 1957 f:\sp\public\sdk\inc\reason.h -FILE 1958 f:\sp\public\sdk\inc\wincon.h -FILE 1959 f:\sp\public\sdk\inc\pshpack2.h -FILE 1960 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1961 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1962 f:\sp\public\sdk\inc\mcx.h -FILE 1963 f:\sp\public\sdk\inc\winuser.h -FILE 1964 f:\sp\public\sdk\inc\winnls.h -FILE 1965 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1966 f:\sp\public\sdk\inc\stralign.h -FILE 1967 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1968 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1969 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1970 f:\sp\public\sdk\inc\windows.h -FILE 1971 f:\sp\public\sdk\inc\tvout.h -FILE 1972 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1973 f:\sp\public\sdk\inc\winsvc.h -FILE 1974 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 1975 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h -FILE 1976 f:\sp\public\sdk\inc\wingdi.h -FILE 1977 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h -FILE 1978 f:\sp\public\sdk\inc\pshpack4.h -FILE 1979 f:\sp\public\sdk\inc\poppack.h -FILE 1980 f:\sp\vctools\crt_bld\self_x86\crt\src\_flsbuf.c -FILE 1981 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1982 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1983 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1984 f:\sp\public\sdk\inc\winnetwk.h -FILE 1985 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 1986 f:\sp\public\sdk\inc\imm.h -FILE 1987 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1988 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1989 f:\sp\vctools\crt_bld\self_x86\crt\src\_flswbuf.c -FILE 1990 f:\sp\public\sdk\inc\windef.h -FILE 1991 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 1992 f:\sp\public\sdk\inc\pshpack1.h -FILE 1993 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1994 f:\sp\public\sdk\inc\winver.h -FILE 1995 f:\sp\public\sdk\inc\ddbanned.h -FILE 1996 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1997 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1998 f:\sp\public\sdk\inc\winnt.h -FILE 1999 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2000 f:\sp\public\sdk\inc\winreg.h -FILE 2001 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h -FILE 2002 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h -FILE 2003 f:\sp\public\sdk\inc\winbase.h -FILE 2004 f:\sp\public\sdk\inc\winerror.h -FILE 2005 f:\sp\public\sdk\inc\pshpack8.h -FILE 2006 f:\sp\public\sdk\inc\guiddef.h -FILE 2007 f:\sp\public\sdk\inc\basetsd.h -FILE 2008 f:\sp\public\sdk\inc\reason.h -FILE 2009 f:\sp\public\sdk\inc\wincon.h -FILE 2010 f:\sp\public\sdk\inc\pshpack2.h -FILE 2011 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2012 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2013 f:\sp\public\sdk\inc\mcx.h -FILE 2014 f:\sp\public\sdk\inc\winuser.h -FILE 2015 f:\sp\public\sdk\inc\winnls.h -FILE 2016 f:\sp\public\sdk\inc\stralign.h -FILE 2017 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2018 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2019 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2020 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2021 f:\sp\public\sdk\inc\tvout.h -FILE 2022 f:\sp\public\sdk\inc\windows.h -FILE 2023 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2024 f:\sp\public\sdk\inc\winsvc.h -FILE 2025 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 2026 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 2027 f:\sp\public\sdk\inc\wingdi.h -FILE 2028 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h -FILE 2029 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h -FILE 2030 f:\sp\public\sdk\inc\pshpack4.h -FILE 2031 f:\sp\public\sdk\inc\poppack.h -FILE 2032 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 2033 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2034 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2035 f:\sp\public\sdk\inc\winnetwk.h -FILE 2036 f:\sp\public\sdk\inc\imm.h -FILE 2037 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 2038 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2039 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2040 f:\sp\public\sdk\inc\windef.h -FILE 2041 f:\sp\vctools\crt_bld\self_x86\crt\src\_flsbuf.c -FILE 2042 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 2043 f:\sp\public\sdk\inc\pshpack1.h -FILE 2044 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 2045 f:\sp\public\sdk\inc\winver.h -FILE 2046 f:\sp\public\sdk\inc\ddbanned.h -FILE 2047 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2048 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2049 f:\sp\public\sdk\inc\winnt.h -FILE 2050 f:\sp\public\sdk\inc\winreg.h -FILE 2051 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2052 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h -FILE 2053 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h -FILE 2054 f:\sp\public\sdk\inc\winbase.h -FILE 2055 f:\sp\public\sdk\inc\winerror.h -FILE 2056 f:\sp\public\sdk\inc\pshpack8.h -FILE 2057 f:\sp\public\sdk\inc\guiddef.h -FILE 2058 f:\sp\public\sdk\inc\specstrings.h -FILE 2059 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 2060 f:\sp\public\sdk\inc\reason.h -FILE 2061 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2062 f:\sp\public\sdk\inc\wincon.h -FILE 2063 f:\sp\public\sdk\inc\pshpack2.h -FILE 2064 f:\sp\public\sdk\inc\mcx.h -FILE 2065 f:\sp\public\sdk\inc\winuser.h -FILE 2066 f:\sp\public\sdk\inc\winnls.h -FILE 2067 f:\sp\public\sdk\inc\guiddef.h -FILE 2068 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2069 f:\sp\public\sdk\inc\specstrings.h -FILE 2070 f:\sp\public\sdk\inc\basetsd.h -FILE 2071 f:\sp\public\sdk\inc\stralign.h -FILE 2072 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2073 f:\sp\public\sdk\inc\tvout.h -FILE 2074 f:\sp\public\sdk\inc\winsvc.h -FILE 2075 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2076 f:\sp\public\sdk\inc\wingdi.h -FILE 2077 f:\sp\public\sdk\inc\pshpack4.h -FILE 2078 f:\sp\public\sdk\inc\poppack.h -FILE 2079 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h -FILE 2080 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h -FILE 2081 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2082 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2083 f:\sp\public\sdk\inc\winnetwk.h -FILE 2084 f:\sp\public\sdk\inc\imm.h -FILE 2085 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2086 f:\sp\public\sdk\inc\windef.h -FILE 2087 f:\sp\vctools\crt_bld\self_x86\crt\src\_file.c -FILE 2088 f:\sp\public\sdk\inc\pshpack1.h -FILE 2089 f:\sp\public\sdk\inc\winver.h -FILE 2090 f:\sp\public\sdk\inc\windows.h -FILE 2091 f:\sp\public\sdk\inc\winnt.h -FILE 2092 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2093 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2094 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2095 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2096 f:\sp\public\sdk\inc\ddbanned.h -FILE 2097 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2098 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 2099 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2100 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 2101 f:\sp\public\sdk\inc\winreg.h -FILE 2102 f:\sp\public\sdk\inc\winbase.h -FILE 2103 f:\sp\public\sdk\inc\winerror.h -FILE 2104 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2105 f:\sp\public\sdk\inc\pshpack8.h -FILE 2106 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 2107 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2108 f:\sp\public\sdk\inc\windef.h -FILE 2109 f:\sp\public\sdk\inc\pshpack1.h -FILE 2110 f:\sp\public\sdk\inc\winver.h -FILE 2111 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2112 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2113 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2114 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2115 f:\sp\public\sdk\inc\winnt.h -FILE 2116 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2117 f:\sp\public\sdk\inc\winreg.h -FILE 2118 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 2119 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2120 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2121 f:\sp\public\sdk\inc\winbase.h -FILE 2122 f:\sp\public\sdk\inc\winerror.h -FILE 2123 f:\sp\public\sdk\inc\pshpack8.h -FILE 2124 f:\sp\vctools\crt_bld\self_x86\crt\src\fputwc.c -FILE 2125 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2126 f:\sp\public\sdk\inc\reason.h -FILE 2127 f:\sp\public\sdk\inc\wincon.h -FILE 2128 f:\sp\public\sdk\inc\pshpack2.h -FILE 2129 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 2130 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 2131 f:\sp\public\sdk\inc\mcx.h -FILE 2132 f:\sp\public\sdk\inc\winuser.h -FILE 2133 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 2134 f:\sp\public\sdk\inc\winnls.h -FILE 2135 f:\sp\public\sdk\inc\guiddef.h -FILE 2136 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h -FILE 2137 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h -FILE 2138 f:\sp\public\sdk\inc\stralign.h -FILE 2139 f:\sp\public\sdk\inc\specstrings.h -FILE 2140 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h -FILE 2141 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2142 f:\sp\public\sdk\inc\basetsd.h -FILE 2143 f:\sp\public\sdk\inc\windows.h -FILE 2144 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2145 f:\sp\public\sdk\inc\tvout.h -FILE 2146 f:\sp\public\sdk\inc\ddbanned.h -FILE 2147 f:\sp\public\sdk\inc\winsvc.h -FILE 2148 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2149 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2150 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2151 f:\sp\public\sdk\inc\wingdi.h -FILE 2152 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 2153 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2154 f:\sp\public\sdk\inc\pshpack4.h -FILE 2155 f:\sp\public\sdk\inc\poppack.h -FILE 2156 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 2157 f:\sp\public\sdk\inc\winnetwk.h -FILE 2158 f:\sp\public\sdk\inc\imm.h -FILE 2159 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2160 f:\sp\public\sdk\inc\poppack.h -FILE 2161 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 2162 f:\sp\public\sdk\inc\winnetwk.h -FILE 2163 f:\sp\public\sdk\inc\imm.h -FILE 2164 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2165 f:\sp\public\sdk\inc\windef.h -FILE 2166 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2167 f:\sp\public\sdk\inc\pshpack1.h -FILE 2168 f:\sp\public\sdk\inc\winver.h -FILE 2169 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2170 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2171 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2172 f:\sp\public\sdk\inc\winnt.h -FILE 2173 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2174 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2175 f:\sp\public\sdk\inc\winreg.h -FILE 2176 f:\sp\vctools\crt_bld\self_x86\crt\src\fileno.c -FILE 2177 f:\sp\public\sdk\inc\winbase.h -FILE 2178 f:\sp\public\sdk\inc\winerror.h -FILE 2179 f:\sp\public\sdk\inc\pshpack8.h -FILE 2180 f:\sp\public\sdk\inc\reason.h -FILE 2181 f:\sp\public\sdk\inc\wincon.h -FILE 2182 f:\sp\public\sdk\inc\ddbanned.h -FILE 2183 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2184 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2185 f:\sp\public\sdk\inc\pshpack2.h -FILE 2186 f:\sp\public\sdk\inc\mcx.h -FILE 2187 f:\sp\public\sdk\inc\winuser.h -FILE 2188 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2189 f:\sp\public\sdk\inc\winnls.h -FILE 2190 f:\sp\public\sdk\inc\guiddef.h -FILE 2191 f:\sp\public\sdk\inc\windows.h -FILE 2192 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2193 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 2194 f:\sp\public\sdk\inc\specstrings.h -FILE 2195 f:\sp\public\sdk\inc\basetsd.h -FILE 2196 f:\sp\public\sdk\inc\stralign.h -FILE 2197 f:\sp\public\sdk\inc\tvout.h -FILE 2198 f:\sp\public\sdk\inc\winsvc.h -FILE 2199 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2200 f:\sp\public\sdk\inc\wingdi.h -FILE 2201 f:\sp\public\sdk\inc\pshpack4.h -FILE 2202 f:\sp\public\sdk\inc\pshpack2.h -FILE 2203 f:\sp\public\sdk\inc\winreg.h -FILE 2204 f:\sp\public\sdk\inc\guiddef.h -FILE 2205 f:\sp\public\sdk\inc\windows.h -FILE 2206 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2207 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 2208 f:\sp\public\sdk\inc\specstrings.h -FILE 2209 f:\sp\public\sdk\inc\basetsd.h -FILE 2210 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2211 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2212 f:\sp\public\sdk\inc\pshpack4.h -FILE 2213 f:\sp\public\sdk\inc\reason.h -FILE 2214 f:\sp\public\sdk\inc\wincon.h -FILE 2215 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2216 f:\sp\public\sdk\inc\poppack.h -FILE 2217 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2218 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h -FILE 2219 f:\sp\public\sdk\inc\mcx.h -FILE 2220 f:\sp\public\sdk\inc\winuser.h -FILE 2221 f:\sp\public\sdk\inc\winnls.h -FILE 2222 f:\sp\public\sdk\inc\stralign.h -FILE 2223 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2224 f:\sp\public\sdk\inc\windef.h -FILE 2225 f:\sp\public\sdk\inc\tvout.h -FILE 2226 f:\sp\public\sdk\inc\winsvc.h -FILE 2227 f:\sp\vctools\crt_bld\self_x86\crt\src\tidtable.c -FILE 2228 f:\sp\public\sdk\inc\wingdi.h -FILE 2229 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2230 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2231 f:\sp\public\sdk\inc\winnt.h -FILE 2232 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2233 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2234 f:\sp\public\sdk\inc\winnetwk.h -FILE 2235 f:\sp\public\sdk\inc\imm.h -FILE 2236 f:\sp\public\sdk\inc\ddbanned.h -FILE 2237 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2238 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2239 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 2240 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2241 f:\sp\public\sdk\inc\winbase.h -FILE 2242 f:\sp\public\sdk\inc\winerror.h -FILE 2243 f:\sp\public\sdk\inc\pshpack1.h -FILE 2244 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 2245 f:\sp\vctools\crt_bld\self_x86\crt\src\memory.h -FILE 2246 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2247 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h -FILE 2248 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 2249 f:\sp\public\sdk\inc\pshpack8.h -FILE 2250 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2251 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2252 f:\sp\public\sdk\inc\winver.h -FILE 2253 f:\sp\public\sdk\inc\pshpack4.h -FILE 2254 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 2255 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2256 f:\sp\public\sdk\inc\poppack.h -FILE 2257 f:\sp\public\sdk\inc\winnt.h -FILE 2258 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2259 f:\sp\public\sdk\inc\winnetwk.h -FILE 2260 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 2261 f:\sp\public\sdk\inc\imm.h -FILE 2262 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 2263 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2264 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2265 f:\sp\public\sdk\inc\pshpack1.h -FILE 2266 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2267 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2268 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2269 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2270 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2271 f:\sp\public\sdk\inc\winver.h -FILE 2272 f:\sp\public\sdk\inc\guiddef.h -FILE 2273 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2274 f:\sp\public\sdk\inc\specstrings.h -FILE 2275 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2276 f:\sp\public\sdk\inc\basetsd.h -FILE 2277 f:\sp\public\sdk\inc\windows.h -FILE 2278 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2279 f:\sp\public\sdk\inc\winreg.h -FILE 2280 f:\sp\vctools\crt_bld\self_x86\crt\src\stdenvp.c -FILE 2281 f:\sp\public\sdk\inc\winbase.h -FILE 2282 f:\sp\public\sdk\inc\winerror.h -FILE 2283 f:\sp\public\sdk\inc\pshpack8.h -FILE 2284 f:\sp\public\sdk\inc\reason.h -FILE 2285 f:\sp\public\sdk\inc\ddbanned.h -FILE 2286 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2287 f:\sp\public\sdk\inc\wincon.h -FILE 2288 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2289 f:\sp\public\sdk\inc\pshpack2.h -FILE 2290 f:\sp\public\sdk\inc\mcx.h -FILE 2291 f:\sp\public\sdk\inc\winuser.h -FILE 2292 f:\sp\public\sdk\inc\winnls.h -FILE 2293 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2294 f:\sp\public\sdk\inc\windef.h -FILE 2295 f:\sp\public\sdk\inc\stralign.h -FILE 2296 f:\sp\public\sdk\inc\tvout.h -FILE 2297 f:\sp\public\sdk\inc\winsvc.h -FILE 2298 f:\sp\public\sdk\inc\wingdi.h -FILE 2299 f:\sp\public\sdk\inc\poppack.h -FILE 2300 f:\sp\vctools\crt_bld\self_x86\crt\src\dos.h -FILE 2301 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2302 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 2303 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2304 f:\sp\public\sdk\inc\winnetwk.h -FILE 2305 f:\sp\public\sdk\inc\imm.h -FILE 2306 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2307 f:\sp\public\sdk\inc\windef.h -FILE 2308 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2309 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2310 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 2311 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 2312 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h -FILE 2313 f:\sp\public\sdk\inc\pshpack1.h -FILE 2314 f:\sp\public\sdk\inc\winver.h -FILE 2315 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2316 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2317 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2318 f:\sp\public\sdk\inc\winnt.h -FILE 2319 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2320 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2321 f:\sp\public\sdk\inc\winreg.h -FILE 2322 f:\sp\vctools\crt_bld\self_x86\crt\src\stdargv.c -FILE 2323 f:\sp\public\sdk\inc\winbase.h -FILE 2324 f:\sp\public\sdk\inc\winerror.h -FILE 2325 f:\sp\public\sdk\inc\pshpack8.h -FILE 2326 f:\sp\public\sdk\inc\reason.h -FILE 2327 f:\sp\public\sdk\inc\wincon.h -FILE 2328 f:\sp\public\sdk\inc\ddbanned.h -FILE 2329 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2330 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2331 f:\sp\public\sdk\inc\pshpack2.h -FILE 2332 f:\sp\public\sdk\inc\mcx.h -FILE 2333 f:\sp\public\sdk\inc\winuser.h -FILE 2334 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2335 f:\sp\public\sdk\inc\winnls.h -FILE 2336 f:\sp\public\sdk\inc\guiddef.h -FILE 2337 f:\sp\public\sdk\inc\windows.h -FILE 2338 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2339 f:\sp\public\sdk\inc\specstrings.h -FILE 2340 f:\sp\public\sdk\inc\basetsd.h -FILE 2341 f:\sp\public\sdk\inc\stralign.h -FILE 2342 f:\sp\public\sdk\inc\tvout.h -FILE 2343 f:\sp\public\sdk\inc\winsvc.h -FILE 2344 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2345 f:\sp\public\sdk\inc\wingdi.h -FILE 2346 f:\sp\public\sdk\inc\pshpack4.h -FILE 2347 f:\sp\public\sdk\inc\reason.h -FILE 2348 f:\sp\public\sdk\inc\wincon.h -FILE 2349 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2350 f:\sp\public\sdk\inc\poppack.h -FILE 2351 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2352 f:\sp\public\sdk\inc\mcx.h -FILE 2353 f:\sp\public\sdk\inc\winuser.h -FILE 2354 f:\sp\public\sdk\inc\winnls.h -FILE 2355 f:\sp\public\sdk\inc\stralign.h -FILE 2356 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2357 f:\sp\public\sdk\inc\windef.h -FILE 2358 f:\sp\public\sdk\inc\tvout.h -FILE 2359 f:\sp\public\sdk\inc\winsvc.h -FILE 2360 f:\sp\public\sdk\inc\wingdi.h -FILE 2361 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2362 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2363 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2364 f:\sp\public\sdk\inc\winnt.h -FILE 2365 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2366 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2367 f:\sp\public\sdk\inc\winnetwk.h -FILE 2368 f:\sp\public\sdk\inc\imm.h -FILE 2369 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h -FILE 2370 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2371 f:\sp\vctools\crt_bld\self_x86\crt\src\mlock.c -FILE 2372 f:\sp\public\sdk\inc\winbase.h -FILE 2373 f:\sp\public\sdk\inc\winerror.h -FILE 2374 f:\sp\public\sdk\inc\pshpack1.h -FILE 2375 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 2376 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2377 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 2378 f:\sp\public\sdk\inc\pshpack8.h -FILE 2379 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 2380 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 2381 f:\sp\public\sdk\inc\winver.h -FILE 2382 f:\sp\public\sdk\inc\ddbanned.h -FILE 2383 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2384 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2385 f:\sp\public\sdk\inc\pshpack2.h -FILE 2386 f:\sp\public\sdk\inc\winreg.h -FILE 2387 f:\sp\public\sdk\inc\guiddef.h -FILE 2388 f:\sp\public\sdk\inc\windows.h -FILE 2389 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2390 f:\sp\public\sdk\inc\specstrings.h -FILE 2391 f:\sp\public\sdk\inc\basetsd.h -FILE 2392 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2393 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 2394 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2395 f:\sp\public\sdk\inc\pshpack4.h -FILE 2396 f:\sp\public\sdk\inc\poppack.h -FILE 2397 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 2398 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 2399 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2400 f:\sp\public\sdk\inc\winnetwk.h -FILE 2401 f:\sp\public\sdk\inc\imm.h -FILE 2402 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2403 f:\sp\public\sdk\inc\windef.h -FILE 2404 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2405 f:\sp\public\sdk\inc\pshpack1.h -FILE 2406 f:\sp\public\sdk\inc\winver.h -FILE 2407 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2408 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2409 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2410 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 2411 f:\sp\public\sdk\inc\winnt.h -FILE 2412 f:\sp\vctools\crt_bld\self_x86\crt\src\cmsgs.h -FILE 2413 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2414 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 2415 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2416 f:\sp\public\sdk\inc\winreg.h -FILE 2417 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2418 f:\sp\vctools\crt_bld\self_x86\crt\src\crt0msg.c -FILE 2419 f:\sp\public\sdk\inc\winbase.h -FILE 2420 f:\sp\public\sdk\inc\winerror.h -FILE 2421 f:\sp\public\sdk\inc\pshpack8.h -FILE 2422 f:\sp\public\sdk\inc\reason.h -FILE 2423 f:\sp\public\sdk\inc\wincon.h -FILE 2424 f:\sp\public\sdk\inc\ddbanned.h -FILE 2425 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2426 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2427 f:\sp\public\sdk\inc\pshpack2.h -FILE 2428 f:\sp\public\sdk\inc\mcx.h -FILE 2429 f:\sp\public\sdk\inc\winuser.h -FILE 2430 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2431 f:\sp\public\sdk\inc\winnls.h -FILE 2432 f:\sp\public\sdk\inc\guiddef.h -FILE 2433 f:\sp\public\sdk\inc\windows.h -FILE 2434 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 2435 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2436 f:\sp\public\sdk\inc\specstrings.h -FILE 2437 f:\sp\public\sdk\inc\basetsd.h -FILE 2438 f:\sp\public\sdk\inc\stralign.h -FILE 2439 f:\sp\public\sdk\inc\tvout.h -FILE 2440 f:\sp\public\sdk\inc\winsvc.h -FILE 2441 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2442 f:\sp\public\sdk\inc\wingdi.h -FILE 2443 f:\sp\public\sdk\inc\pshpack4.h -FILE 2444 f:\sp\public\sdk\inc\pshpack1.h -FILE 2445 f:\sp\public\sdk\inc\winver.h -FILE 2446 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2447 f:\sp\public\sdk\inc\winnt.h -FILE 2448 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2449 f:\sp\public\sdk\inc\winreg.h -FILE 2450 f:\sp\public\sdk\inc\winbase.h -FILE 2451 f:\sp\public\sdk\inc\winerror.h -FILE 2452 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h -FILE 2453 f:\sp\public\sdk\inc\pshpack8.h -FILE 2454 f:\sp\public\sdk\inc\reason.h -FILE 2455 f:\sp\public\sdk\inc\wincon.h -FILE 2456 f:\sp\public\sdk\inc\pshpack2.h -FILE 2457 f:\sp\vctools\crt_bld\self_x86\crt\src\crt0init.c -FILE 2458 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2459 f:\sp\public\sdk\inc\mcx.h -FILE 2460 f:\sp\public\sdk\inc\winuser.h -FILE 2461 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2462 f:\sp\public\sdk\inc\winnls.h -FILE 2463 f:\sp\public\sdk\inc\guiddef.h -FILE 2464 f:\sp\public\sdk\inc\windows.h -FILE 2465 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2466 f:\sp\public\sdk\inc\specstrings.h -FILE 2467 f:\sp\public\sdk\inc\basetsd.h -FILE 2468 f:\sp\public\sdk\inc\stralign.h -FILE 2469 f:\sp\public\sdk\inc\tvout.h -FILE 2470 f:\sp\public\sdk\inc\winsvc.h -FILE 2471 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2472 f:\sp\public\sdk\inc\wingdi.h -FILE 2473 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 2474 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2475 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2476 f:\sp\public\sdk\inc\pshpack4.h -FILE 2477 f:\sp\public\sdk\inc\ddbanned.h -FILE 2478 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2479 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2480 f:\sp\public\sdk\inc\poppack.h -FILE 2481 f:\sp\public\sdk\inc\winnetwk.h -FILE 2482 f:\sp\public\sdk\inc\imm.h -FILE 2483 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2484 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2485 f:\sp\public\sdk\inc\windef.h -FILE 2486 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 2487 f:\sp\public\sdk\inc\poppack.h -FILE 2488 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 2489 f:\sp\public\sdk\inc\winnetwk.h -FILE 2490 f:\sp\public\sdk\inc\imm.h -FILE 2491 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2492 f:\sp\public\sdk\inc\windef.h -FILE 2493 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2494 f:\sp\public\sdk\inc\pshpack1.h -FILE 2495 f:\sp\public\sdk\inc\winver.h -FILE 2496 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2497 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2498 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2499 f:\sp\public\sdk\inc\winnt.h -FILE 2500 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2501 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2502 f:\sp\public\sdk\inc\winreg.h -FILE 2503 f:\sp\vctools\crt_bld\self_x86\crt\src\crt0fp.c -FILE 2504 f:\sp\public\sdk\inc\winbase.h -FILE 2505 f:\sp\public\sdk\inc\winerror.h -FILE 2506 f:\sp\public\sdk\inc\pshpack8.h -FILE 2507 f:\sp\public\sdk\inc\reason.h -FILE 2508 f:\sp\public\sdk\inc\wincon.h -FILE 2509 f:\sp\public\sdk\inc\ddbanned.h -FILE 2510 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2511 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2512 f:\sp\public\sdk\inc\pshpack2.h -FILE 2513 f:\sp\public\sdk\inc\mcx.h -FILE 2514 f:\sp\public\sdk\inc\winuser.h -FILE 2515 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2516 f:\sp\public\sdk\inc\winnls.h -FILE 2517 f:\sp\public\sdk\inc\guiddef.h -FILE 2518 f:\sp\public\sdk\inc\windows.h -FILE 2519 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2520 f:\sp\public\sdk\inc\specstrings.h -FILE 2521 f:\sp\public\sdk\inc\basetsd.h -FILE 2522 f:\sp\public\sdk\inc\stralign.h -FILE 2523 f:\sp\public\sdk\inc\tvout.h -FILE 2524 f:\sp\public\sdk\inc\winsvc.h -FILE 2525 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2526 f:\sp\public\sdk\inc\wingdi.h -FILE 2527 f:\sp\public\sdk\inc\pshpack4.h -FILE 2528 f:\sp\vctools\crt_bld\self_x86\crt\src\process.h -FILE 2529 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2530 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2531 f:\sp\public\sdk\inc\pshpack4.h -FILE 2532 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2533 f:\sp\public\sdk\inc\reason.h -FILE 2534 f:\sp\public\sdk\inc\wincon.h -FILE 2535 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2536 f:\sp\public\sdk\inc\poppack.h -FILE 2537 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h -FILE 2538 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2539 f:\sp\public\sdk\inc\mcx.h -FILE 2540 f:\sp\public\sdk\inc\winuser.h -FILE 2541 f:\sp\public\sdk\inc\winnls.h -FILE 2542 f:\sp\public\sdk\inc\stralign.h -FILE 2543 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2544 f:\sp\public\sdk\inc\windef.h -FILE 2545 f:\sp\public\sdk\inc\tvout.h -FILE 2546 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2547 f:\sp\public\sdk\inc\winsvc.h -FILE 2548 f:\sp\public\sdk\inc\wingdi.h -FILE 2549 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h -FILE 2550 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcapi.h -FILE 2551 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2552 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2553 f:\sp\vctools\crt_bld\self_x86\crt\src\mbdata.h -FILE 2554 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h -FILE 2555 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 2556 f:\sp\public\sdk\inc\winnt.h -FILE 2557 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2558 f:\sp\public\sdk\inc\winnetwk.h -FILE 2559 f:\sp\public\sdk\inc\imm.h -FILE 2560 f:\sp\vctools\crt_bld\self_x86\crt\src\crt0dat.c -FILE 2561 f:\sp\public\sdk\inc\winbase.h -FILE 2562 f:\sp\public\sdk\inc\winerror.h -FILE 2563 f:\sp\public\sdk\inc\pshpack1.h -FILE 2564 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 2565 f:\sp\public\sdk\inc\pshpack8.h -FILE 2566 f:\sp\public\sdk\inc\winver.h -FILE 2567 f:\sp\public\sdk\inc\ddbanned.h -FILE 2568 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2569 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2570 f:\sp\vctools\crt_bld\self_x86\crt\src\dos.h -FILE 2571 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2572 f:\sp\public\sdk\inc\pshpack2.h -FILE 2573 f:\sp\public\sdk\inc\winreg.h -FILE 2574 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2575 f:\sp\public\sdk\inc\guiddef.h -FILE 2576 f:\sp\public\sdk\inc\windows.h -FILE 2577 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2578 f:\sp\public\sdk\inc\specstrings.h -FILE 2579 f:\sp\public\sdk\inc\basetsd.h -FILE 2580 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2581 f:\sp\public\sdk\inc\tvout.h -FILE 2582 f:\sp\public\sdk\inc\winsvc.h -FILE 2583 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2584 f:\sp\public\sdk\inc\wingdi.h -FILE 2585 f:\sp\public\sdk\inc\pshpack4.h -FILE 2586 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 2587 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 2588 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcapi.h -FILE 2589 f:\sp\public\sdk\inc\poppack.h -FILE 2590 f:\sp\vctools\crt_bld\self_x86\crt\src\process.h -FILE 2591 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 2592 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 2593 f:\sp\public\sdk\inc\winnetwk.h -FILE 2594 f:\sp\public\sdk\inc\imm.h -FILE 2595 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2596 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2597 f:\sp\public\sdk\inc\windef.h -FILE 2598 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2599 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2600 f:\sp\vctools\crt_bld\self_x86\crt\src\dos.h -FILE 2601 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2602 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2603 f:\sp\public\sdk\inc\pshpack1.h -FILE 2604 f:\sp\public\sdk\inc\winver.h -FILE 2605 f:\sp\public\sdk\inc\winnt.h -FILE 2606 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2607 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 2608 f:\sp\vctools\crt_bld\self_x86\crt\src\crt0.c -FILE 2609 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2610 f:\sp\public\sdk\inc\winreg.h -FILE 2611 f:\sp\public\sdk\inc\winbase.h -FILE 2612 f:\sp\public\sdk\inc\winerror.h -FILE 2613 f:\sp\public\sdk\inc\ddbanned.h -FILE 2614 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2615 f:\sp\public\sdk\inc\pshpack8.h -FILE 2616 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2617 f:\sp\public\sdk\inc\reason.h -FILE 2618 f:\sp\public\sdk\inc\wincon.h -FILE 2619 f:\sp\public\sdk\inc\pshpack2.h -FILE 2620 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2621 f:\sp\public\sdk\inc\mcx.h -FILE 2622 f:\sp\public\sdk\inc\winuser.h -FILE 2623 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2624 f:\sp\public\sdk\inc\winnls.h -FILE 2625 f:\sp\public\sdk\inc\guiddef.h -FILE 2626 f:\sp\public\sdk\inc\windows.h -FILE 2627 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2628 f:\sp\public\sdk\inc\specstrings.h -FILE 2629 f:\sp\public\sdk\inc\basetsd.h -FILE 2630 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h -FILE 2631 f:\sp\public\sdk\inc\stralign.h -FILE 2632 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\alloca16.asm -FILE 2633 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 2634 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\chkstk.asm -FILE 2635 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 2636 f:\sp\public\sdk\inc\wincon.h -FILE 2637 f:\sp\public\sdk\inc\imm.h -FILE 2638 f:\sp\public\sdk\inc\winbase.h -FILE 2639 f:\sp\public\sdk\inc\wingdi.h -FILE 2640 f:\sp\public\sdk\inc\winver.h -FILE 2641 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 2642 f:\sp\public\sdk\inc\windows.h -FILE 2643 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 2644 f:\sp\public\sdk\inc\pshpack2.h -FILE 2645 f:\sp\public\sdk\inc\reason.h -FILE 2646 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\rtc\initsect.cpp -FILE 2647 f:\sp\public\sdk\inc\specstrings.h -FILE 2648 f:\sp\public\sdk\inc\basetsd.h -FILE 2649 f:\sp\public\sdk\inc\pshpack4.h -FILE 2650 f:\sp\public\sdk\inc\winnetwk.h -FILE 2651 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\errno.h -FILE 2652 f:\sp\public\sdk\inc\stralign.h -FILE 2653 f:\sp\public\sdk\inc\poppack.h -FILE 2654 f:\sp\public\sdk\inc\winsvc.h -FILE 2655 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 2656 f:\sp\public\sdk\inc\windef.h -FILE 2657 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\internal.h -FILE 2658 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 2659 f:\sp\public\sdk\inc\winuser.h -FILE 2660 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 2661 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sect_attribs.h -FILE 2662 f:\sp\public\sdk\inc\mcx.h -FILE 2663 f:\sp\public\sdk\inc\pshpack8.h -FILE 2664 f:\sp\public\sdk\inc\guiddef.h -FILE 2665 f:\sp\public\sdk\inc\winnt.h -FILE 2666 f:\sp\public\sdk\inc\winnls.h -FILE 2667 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 2668 f:\sp\public\sdk\inc\pshpack1.h -FILE 2669 f:\sp\public\sdk\inc\winerror.h -FILE 2670 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\rtcapi.h -FILE 2671 f:\sp\public\sdk\inc\winreg.h -FILE 2672 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 2673 f:\sp\public\sdk\inc\ddbanned.h -FILE 2674 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 2675 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 2676 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\rtcpriv.h -FILE 2677 f:\sp\public\sdk\inc\tvout.h -FILE 2678 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\malloc.h -FILE 2679 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h -FILE 2680 f:\sp\public\sdk\inc\poppack.h -FILE 2681 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2682 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2683 f:\sp\public\sdk\inc\winnetwk.h -FILE 2684 f:\sp\public\sdk\inc\imm.h -FILE 2685 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2686 f:\sp\public\sdk\inc\windef.h -FILE 2687 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2688 f:\sp\public\sdk\inc\pshpack1.h -FILE 2689 f:\sp\public\sdk\inc\winver.h -FILE 2690 f:\sp\public\sdk\inc\windows.h -FILE 2691 f:\sp\public\sdk\inc\winnt.h -FILE 2692 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2693 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2694 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2695 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2696 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2697 f:\sp\public\sdk\inc\winreg.h -FILE 2698 f:\sp\public\sdk\inc\winbase.h -FILE 2699 f:\sp\vctools\crt_bld\self_x86\crt\src\wtombenv.c -FILE 2700 f:\sp\public\sdk\inc\winerror.h -FILE 2701 f:\sp\public\sdk\inc\pshpack8.h -FILE 2702 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2703 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2704 f:\sp\public\sdk\inc\reason.h -FILE 2705 f:\sp\public\sdk\inc\wincon.h -FILE 2706 f:\sp\public\sdk\inc\ddbanned.h -FILE 2707 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2708 f:\sp\public\sdk\inc\pshpack2.h -FILE 2709 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2710 f:\sp\public\sdk\inc\mcx.h -FILE 2711 f:\sp\public\sdk\inc\winuser.h -FILE 2712 f:\sp\public\sdk\inc\winnls.h -FILE 2713 f:\sp\public\sdk\inc\guiddef.h -FILE 2714 f:\sp\public\sdk\inc\specstrings.h -FILE 2715 f:\sp\public\sdk\inc\basetsd.h -FILE 2716 f:\sp\public\sdk\inc\stralign.h -FILE 2717 f:\sp\public\sdk\inc\tvout.h -FILE 2718 f:\sp\public\sdk\inc\winsvc.h -FILE 2719 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2720 f:\sp\public\sdk\inc\wingdi.h -FILE 2721 f:\sp\public\sdk\inc\pshpack4.h -FILE 2722 f:\sp\public\sdk\inc\winnt.h -FILE 2723 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2724 f:\sp\public\sdk\inc\winreg.h -FILE 2725 f:\sp\public\sdk\inc\winbase.h -FILE 2726 f:\sp\public\sdk\inc\winerror.h -FILE 2727 f:\sp\public\sdk\inc\pshpack8.h -FILE 2728 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2729 f:\sp\public\sdk\inc\reason.h -FILE 2730 f:\sp\public\sdk\inc\wincon.h -FILE 2731 f:\sp\vctools\crt_bld\self_x86\crt\src\float.h -FILE 2732 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2733 f:\sp\public\sdk\inc\pshpack2.h -FILE 2734 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2735 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2736 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2737 f:\sp\public\sdk\inc\mcx.h -FILE 2738 f:\sp\public\sdk\inc\winuser.h -FILE 2739 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2740 f:\sp\public\sdk\inc\winnls.h -FILE 2741 f:\sp\public\sdk\inc\guiddef.h -FILE 2742 f:\sp\public\sdk\inc\windows.h -FILE 2743 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2744 f:\sp\public\sdk\inc\specstrings.h -FILE 2745 f:\sp\public\sdk\inc\basetsd.h -FILE 2746 f:\sp\public\sdk\inc\stralign.h -FILE 2747 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2748 f:\sp\vctools\crt_bld\self_x86\crt\src\signal.h -FILE 2749 f:\sp\public\sdk\inc\tvout.h -FILE 2750 f:\sp\public\sdk\inc\winsvc.h -FILE 2751 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2752 f:\sp\vctools\crt_bld\self_x86\crt\src\winxfltr.c -FILE 2753 f:\sp\public\sdk\inc\wingdi.h -FILE 2754 f:\sp\public\sdk\inc\pshpack4.h -FILE 2755 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 2756 f:\sp\public\sdk\inc\poppack.h -FILE 2757 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2758 f:\sp\public\sdk\inc\winnetwk.h -FILE 2759 f:\sp\public\sdk\inc\imm.h -FILE 2760 f:\sp\public\sdk\inc\ddbanned.h -FILE 2761 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2762 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2763 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2764 f:\sp\public\sdk\inc\windef.h -FILE 2765 f:\sp\vctools\crt_bld\self_x86\crt\src\crtwrn.h -FILE 2766 f:\sp\public\sdk\inc\pshpack1.h -FILE 2767 f:\sp\public\sdk\inc\winver.h -FILE 2768 f:\sp\public\sdk\inc\winnetwk.h -FILE 2769 f:\sp\public\sdk\inc\imm.h -FILE 2770 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2771 f:\sp\public\sdk\inc\windef.h -FILE 2772 f:\sp\public\sdk\inc\pshpack1.h -FILE 2773 f:\sp\public\sdk\inc\winver.h -FILE 2774 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2775 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2776 f:\sp\public\sdk\inc\winnt.h -FILE 2777 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2778 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2779 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2780 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2781 f:\sp\public\sdk\inc\winreg.h -FILE 2782 f:\sp\public\sdk\inc\winbase.h -FILE 2783 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 2784 f:\sp\public\sdk\inc\winerror.h -FILE 2785 f:\sp\vctools\crt_bld\self_x86\crt\src\winsig.c -FILE 2786 f:\sp\public\sdk\inc\pshpack8.h -FILE 2787 f:\sp\public\sdk\inc\reason.h -FILE 2788 f:\sp\public\sdk\inc\wincon.h -FILE 2789 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2790 f:\sp\public\sdk\inc\pshpack2.h -FILE 2791 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2792 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2793 f:\sp\public\sdk\inc\mcx.h -FILE 2794 f:\sp\public\sdk\inc\winuser.h -FILE 2795 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2796 f:\sp\public\sdk\inc\winnls.h -FILE 2797 f:\sp\public\sdk\inc\guiddef.h -FILE 2798 f:\sp\public\sdk\inc\windows.h -FILE 2799 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2800 f:\sp\public\sdk\inc\specstrings.h -FILE 2801 f:\sp\public\sdk\inc\ddbanned.h -FILE 2802 f:\sp\public\sdk\inc\basetsd.h -FILE 2803 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2804 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2805 f:\sp\public\sdk\inc\stralign.h -FILE 2806 f:\sp\vctools\crt_bld\self_x86\crt\src\signal.h -FILE 2807 f:\sp\public\sdk\inc\tvout.h -FILE 2808 f:\sp\public\sdk\inc\winsvc.h -FILE 2809 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2810 f:\sp\public\sdk\inc\wingdi.h -FILE 2811 f:\sp\vctools\crt_bld\self_x86\crt\src\float.h -FILE 2812 f:\sp\vctools\crt_bld\self_x86\crt\src\crtwrn.h -FILE 2813 f:\sp\public\sdk\inc\pshpack4.h -FILE 2814 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 2815 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2816 f:\sp\public\sdk\inc\poppack.h -FILE 2817 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 2818 f:\sp\public\sdk\inc\wincon.h -FILE 2819 f:\sp\public\sdk\inc\imm.h -FILE 2820 f:\sp\public\sdk\inc\winbase.h -FILE 2821 f:\sp\public\sdk\inc\wingdi.h -FILE 2822 f:\sp\public\sdk\inc\winver.h -FILE 2823 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2824 f:\sp\public\sdk\inc\windows.h -FILE 2825 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2826 f:\sp\public\sdk\inc\pshpack2.h -FILE 2827 f:\sp\public\sdk\inc\reason.h -FILE 2828 f:\sp\vctools\crt_bld\self_x86\crt\src\w_str.c -FILE 2829 f:\sp\public\sdk\inc\specstrings.h -FILE 2830 f:\sp\public\sdk\inc\basetsd.h -FILE 2831 f:\sp\public\sdk\inc\pshpack4.h -FILE 2832 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 2833 f:\sp\public\sdk\inc\winnetwk.h -FILE 2834 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2835 f:\sp\public\sdk\inc\stralign.h -FILE 2836 f:\sp\public\sdk\inc\poppack.h -FILE 2837 f:\sp\public\sdk\inc\winsvc.h -FILE 2838 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2839 f:\sp\public\sdk\inc\windef.h -FILE 2840 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2841 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2842 f:\sp\public\sdk\inc\winuser.h -FILE 2843 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2844 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2845 f:\sp\public\sdk\inc\mcx.h -FILE 2846 f:\sp\public\sdk\inc\pshpack8.h -FILE 2847 f:\sp\public\sdk\inc\guiddef.h -FILE 2848 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 2849 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2850 f:\sp\public\sdk\inc\winnt.h -FILE 2851 f:\sp\public\sdk\inc\winnls.h -FILE 2852 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2853 f:\sp\public\sdk\inc\pshpack1.h -FILE 2854 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 2855 f:\sp\public\sdk\inc\winerror.h -FILE 2856 f:\sp\public\sdk\inc\winreg.h -FILE 2857 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2858 f:\sp\public\sdk\inc\ddbanned.h -FILE 2859 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2860 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2861 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2862 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2863 f:\sp\public\sdk\inc\tvout.h -FILE 2864 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2865 f:\sp\public\sdk\inc\wincon.h -FILE 2866 f:\sp\public\sdk\inc\imm.h -FILE 2867 f:\sp\public\sdk\inc\winbase.h -FILE 2868 f:\sp\public\sdk\inc\wingdi.h -FILE 2869 f:\sp\public\sdk\inc\winver.h -FILE 2870 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2871 f:\sp\public\sdk\inc\windows.h -FILE 2872 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2873 f:\sp\public\sdk\inc\pshpack2.h -FILE 2874 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 2875 f:\sp\public\sdk\inc\reason.h -FILE 2876 f:\sp\vctools\crt_bld\self_x86\crt\src\w_loc.c -FILE 2877 f:\sp\public\sdk\inc\specstrings.h -FILE 2878 f:\sp\public\sdk\inc\basetsd.h -FILE 2879 f:\sp\public\sdk\inc\pshpack4.h -FILE 2880 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 2881 f:\sp\public\sdk\inc\winnetwk.h -FILE 2882 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2883 f:\sp\public\sdk\inc\stralign.h -FILE 2884 f:\sp\public\sdk\inc\poppack.h -FILE 2885 f:\sp\public\sdk\inc\winsvc.h -FILE 2886 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2887 f:\sp\public\sdk\inc\windef.h -FILE 2888 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2889 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2890 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2891 f:\sp\public\sdk\inc\winuser.h -FILE 2892 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2893 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2894 f:\sp\public\sdk\inc\mcx.h -FILE 2895 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 2896 f:\sp\public\sdk\inc\pshpack8.h -FILE 2897 f:\sp\public\sdk\inc\guiddef.h -FILE 2898 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 2899 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2900 f:\sp\public\sdk\inc\winnt.h -FILE 2901 f:\sp\public\sdk\inc\winnls.h -FILE 2902 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2903 f:\sp\public\sdk\inc\pshpack1.h -FILE 2904 f:\sp\public\sdk\inc\winerror.h -FILE 2905 f:\sp\public\sdk\inc\winreg.h -FILE 2906 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2907 f:\sp\public\sdk\inc\ddbanned.h -FILE 2908 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2909 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2910 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2911 f:\sp\public\sdk\inc\tvout.h -FILE 2912 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2913 f:\sp\public\sdk\inc\poppack.h -FILE 2914 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 2915 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2916 f:\sp\public\sdk\inc\winnetwk.h -FILE 2917 f:\sp\public\sdk\inc\imm.h -FILE 2918 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2919 f:\sp\public\sdk\inc\windef.h -FILE 2920 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2921 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h -FILE 2922 f:\sp\public\sdk\inc\pshpack1.h -FILE 2923 f:\sp\public\sdk\inc\winver.h -FILE 2924 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2925 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 2926 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2927 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2928 f:\sp\public\sdk\inc\winnt.h -FILE 2929 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 2930 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2931 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2932 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2933 f:\sp\public\sdk\inc\winreg.h -FILE 2934 f:\sp\vctools\crt_bld\self_x86\crt\src\convrtcp.c -FILE 2935 f:\sp\public\sdk\inc\winbase.h -FILE 2936 f:\sp\public\sdk\inc\winerror.h -FILE 2937 f:\sp\public\sdk\inc\pshpack8.h -FILE 2938 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 2939 f:\sp\public\sdk\inc\reason.h -FILE 2940 f:\sp\public\sdk\inc\wincon.h -FILE 2941 f:\sp\public\sdk\inc\ddbanned.h -FILE 2942 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2943 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2944 f:\sp\public\sdk\inc\pshpack2.h -FILE 2945 f:\sp\public\sdk\inc\mcx.h -FILE 2946 f:\sp\public\sdk\inc\winuser.h -FILE 2947 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2948 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 2949 f:\sp\public\sdk\inc\winnls.h -FILE 2950 f:\sp\public\sdk\inc\guiddef.h -FILE 2951 f:\sp\public\sdk\inc\windows.h -FILE 2952 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2953 f:\sp\public\sdk\inc\specstrings.h -FILE 2954 f:\sp\public\sdk\inc\basetsd.h -FILE 2955 f:\sp\public\sdk\inc\stralign.h -FILE 2956 f:\sp\public\sdk\inc\tvout.h -FILE 2957 f:\sp\public\sdk\inc\winsvc.h -FILE 2958 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2959 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2960 f:\sp\public\sdk\inc\wingdi.h -FILE 2961 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 2962 f:\sp\public\sdk\inc\pshpack4.h -FILE 2963 f:\sp\public\sdk\inc\winerror.h -FILE 2964 f:\sp\public\sdk\inc\pshpack8.h -FILE 2965 f:\sp\public\sdk\inc\reason.h -FILE 2966 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 2967 f:\sp\public\sdk\inc\wincon.h -FILE 2968 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 2969 f:\sp\public\sdk\inc\pshpack2.h -FILE 2970 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2971 f:\sp\public\sdk\inc\mcx.h -FILE 2972 f:\sp\public\sdk\inc\winuser.h -FILE 2973 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2974 f:\sp\public\sdk\inc\winnls.h -FILE 2975 f:\sp\public\sdk\inc\guiddef.h -FILE 2976 f:\sp\public\sdk\inc\windows.h -FILE 2977 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h -FILE 2978 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2979 f:\sp\public\sdk\inc\specstrings.h -FILE 2980 f:\sp\public\sdk\inc\basetsd.h -FILE 2981 f:\sp\public\sdk\inc\stralign.h -FILE 2982 f:\sp\public\sdk\inc\tvout.h -FILE 2983 f:\sp\public\sdk\inc\winsvc.h -FILE 2984 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2985 f:\sp\public\sdk\inc\wingdi.h -FILE 2986 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 2987 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 2988 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2989 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2990 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2991 f:\sp\public\sdk\inc\pshpack4.h -FILE 2992 f:\sp\public\sdk\inc\poppack.h -FILE 2993 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 2994 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2995 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.c -FILE 2996 f:\sp\public\sdk\inc\winnetwk.h -FILE 2997 f:\sp\public\sdk\inc\imm.h -FILE 2998 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2999 f:\sp\public\sdk\inc\windef.h -FILE 3000 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3001 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3002 f:\sp\public\sdk\inc\pshpack1.h -FILE 3003 f:\sp\public\sdk\inc\ddbanned.h -FILE 3004 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3005 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3006 f:\sp\public\sdk\inc\winver.h -FILE 3007 f:\sp\public\sdk\inc\winnt.h -FILE 3008 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3009 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3010 f:\sp\public\sdk\inc\winreg.h -FILE 3011 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 3012 f:\sp\public\sdk\inc\winbase.h -FILE 3013 f:\sp\public\sdk\inc\poppack.h -FILE 3014 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 3015 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 3016 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3017 f:\sp\public\sdk\inc\winnetwk.h -FILE 3018 f:\sp\public\sdk\inc\imm.h -FILE 3019 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3020 f:\sp\public\sdk\inc\windef.h -FILE 3021 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 3022 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 3023 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3024 f:\sp\public\sdk\inc\pshpack1.h -FILE 3025 f:\sp\public\sdk\inc\winver.h -FILE 3026 f:\sp\public\sdk\inc\windows.h -FILE 3027 f:\sp\public\sdk\inc\winnt.h -FILE 3028 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3029 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 3030 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3031 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3032 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3033 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3034 f:\sp\public\sdk\inc\winreg.h -FILE 3035 f:\sp\public\sdk\inc\winbase.h -FILE 3036 f:\sp\vctools\crt_bld\self_x86\crt\src\setenv.c -FILE 3037 f:\sp\public\sdk\inc\winerror.h -FILE 3038 f:\sp\public\sdk\inc\pshpack8.h -FILE 3039 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3040 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3041 f:\sp\public\sdk\inc\reason.h -FILE 3042 f:\sp\public\sdk\inc\wincon.h -FILE 3043 f:\sp\public\sdk\inc\ddbanned.h -FILE 3044 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3045 f:\sp\public\sdk\inc\pshpack2.h -FILE 3046 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3047 f:\sp\public\sdk\inc\mcx.h -FILE 3048 f:\sp\public\sdk\inc\winuser.h -FILE 3049 f:\sp\public\sdk\inc\winnls.h -FILE 3050 f:\sp\public\sdk\inc\guiddef.h -FILE 3051 f:\sp\public\sdk\inc\specstrings.h -FILE 3052 f:\sp\public\sdk\inc\basetsd.h -FILE 3053 f:\sp\public\sdk\inc\stralign.h -FILE 3054 f:\sp\public\sdk\inc\tvout.h -FILE 3055 f:\sp\public\sdk\inc\winsvc.h -FILE 3056 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3057 f:\sp\public\sdk\inc\wingdi.h -FILE 3058 f:\sp\public\sdk\inc\pshpack4.h -FILE 3059 f:\sp\public\sdk\inc\poppack.h -FILE 3060 f:\sp\public\sdk\inc\winnetwk.h -FILE 3061 f:\sp\public\sdk\inc\imm.h -FILE 3062 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3063 f:\sp\public\sdk\inc\windef.h -FILE 3064 f:\sp\public\sdk\inc\pshpack1.h -FILE 3065 f:\sp\public\sdk\inc\winver.h -FILE 3066 f:\sp\public\sdk\inc\windows.h -FILE 3067 f:\sp\public\sdk\inc\winnt.h -FILE 3068 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3069 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3070 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3071 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3072 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3073 f:\sp\public\sdk\inc\winreg.h -FILE 3074 f:\sp\public\sdk\inc\winbase.h -FILE 3075 f:\sp\vctools\crt_bld\self_x86\crt\src\rand_s.c -FILE 3076 f:\sp\public\sdk\inc\winerror.h -FILE 3077 f:\sp\public\sdk\inc\pshpack8.h -FILE 3078 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3079 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3080 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3081 f:\sp\public\sdk\inc\reason.h -FILE 3082 f:\sp\public\sdk\inc\wincon.h -FILE 3083 f:\sp\public\sdk\inc\ddbanned.h -FILE 3084 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3085 f:\sp\public\sdk\inc\pshpack2.h -FILE 3086 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3087 f:\sp\public\sdk\inc\mcx.h -FILE 3088 f:\sp\public\sdk\inc\winuser.h -FILE 3089 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 3090 f:\sp\public\sdk\inc\winnls.h -FILE 3091 f:\sp\public\sdk\inc\guiddef.h -FILE 3092 f:\sp\public\sdk\inc\specstrings.h -FILE 3093 f:\sp\public\sdk\inc\basetsd.h -FILE 3094 f:\sp\public\sdk\inc\stralign.h -FILE 3095 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3096 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3097 f:\sp\public\sdk\inc\tvout.h -FILE 3098 f:\sp\public\sdk\inc\winsvc.h -FILE 3099 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3100 f:\sp\public\sdk\inc\wingdi.h -FILE 3101 f:\sp\public\sdk\inc\pshpack4.h -FILE 3102 f:\sp\public\sdk\inc\poppack.h -FILE 3103 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 3104 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3105 f:\sp\public\sdk\inc\winnetwk.h -FILE 3106 f:\sp\public\sdk\inc\imm.h -FILE 3107 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3108 f:\sp\public\sdk\inc\windef.h -FILE 3109 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3110 f:\sp\public\sdk\inc\pshpack1.h -FILE 3111 f:\sp\public\sdk\inc\winver.h -FILE 3112 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3113 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3114 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3115 f:\sp\public\sdk\inc\winnt.h -FILE 3116 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3117 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3118 f:\sp\public\sdk\inc\winreg.h -FILE 3119 f:\sp\vctools\crt_bld\self_x86\crt\src\purevirt.c -FILE 3120 f:\sp\public\sdk\inc\winbase.h -FILE 3121 f:\sp\public\sdk\inc\winerror.h -FILE 3122 f:\sp\public\sdk\inc\pshpack8.h -FILE 3123 f:\sp\public\sdk\inc\reason.h -FILE 3124 f:\sp\public\sdk\inc\wincon.h -FILE 3125 f:\sp\public\sdk\inc\ddbanned.h -FILE 3126 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3127 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3128 f:\sp\public\sdk\inc\pshpack2.h -FILE 3129 f:\sp\public\sdk\inc\mcx.h -FILE 3130 f:\sp\public\sdk\inc\winuser.h -FILE 3131 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3132 f:\sp\public\sdk\inc\winnls.h -FILE 3133 f:\sp\public\sdk\inc\guiddef.h -FILE 3134 f:\sp\public\sdk\inc\windows.h -FILE 3135 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3136 f:\sp\public\sdk\inc\specstrings.h -FILE 3137 f:\sp\public\sdk\inc\basetsd.h -FILE 3138 f:\sp\public\sdk\inc\stralign.h -FILE 3139 f:\sp\public\sdk\inc\tvout.h -FILE 3140 f:\sp\public\sdk\inc\winsvc.h -FILE 3141 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3142 f:\sp\public\sdk\inc\wingdi.h -FILE 3143 f:\sp\public\sdk\inc\pshpack4.h -FILE 3144 f:\sp\public\sdk\inc\poppack.h -FILE 3145 f:\sp\public\sdk\inc\winnetwk.h -FILE 3146 f:\sp\public\sdk\inc\imm.h -FILE 3147 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3148 f:\sp\public\sdk\inc\windef.h -FILE 3149 f:\sp\public\sdk\inc\pshpack1.h -FILE 3150 f:\sp\public\sdk\inc\winver.h -FILE 3151 f:\sp\public\sdk\inc\windows.h -FILE 3152 f:\sp\public\sdk\inc\winnt.h -FILE 3153 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3154 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3155 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3156 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3157 f:\sp\public\sdk\inc\winreg.h -FILE 3158 f:\sp\public\sdk\inc\winbase.h -FILE 3159 f:\sp\vctools\crt_bld\self_x86\crt\src\pesect.c -FILE 3160 f:\sp\public\sdk\inc\winerror.h -FILE 3161 f:\sp\public\sdk\inc\pshpack8.h -FILE 3162 f:\sp\public\sdk\inc\reason.h -FILE 3163 f:\sp\public\sdk\inc\wincon.h -FILE 3164 f:\sp\public\sdk\inc\ddbanned.h -FILE 3165 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3166 f:\sp\public\sdk\inc\pshpack2.h -FILE 3167 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3168 f:\sp\public\sdk\inc\mcx.h -FILE 3169 f:\sp\public\sdk\inc\winuser.h -FILE 3170 f:\sp\public\sdk\inc\winnls.h -FILE 3171 f:\sp\public\sdk\inc\guiddef.h -FILE 3172 f:\sp\public\sdk\inc\specstrings.h -FILE 3173 f:\sp\public\sdk\inc\basetsd.h -FILE 3174 f:\sp\public\sdk\inc\stralign.h -FILE 3175 f:\sp\public\sdk\inc\tvout.h -FILE 3176 f:\sp\public\sdk\inc\winsvc.h -FILE 3177 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3178 f:\sp\public\sdk\inc\wingdi.h -FILE 3179 f:\sp\public\sdk\inc\pshpack4.h -FILE 3180 f:\sp\public\sdk\inc\winerror.h -FILE 3181 f:\sp\public\sdk\inc\pshpack1.h -FILE 3182 f:\sp\public\sdk\inc\pshpack8.h -FILE 3183 f:\sp\public\sdk\inc\winver.h -FILE 3184 f:\sp\public\sdk\inc\pshpack2.h -FILE 3185 f:\sp\public\sdk\inc\winreg.h -FILE 3186 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 3187 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 3188 f:\sp\public\sdk\inc\guiddef.h -FILE 3189 f:\sp\public\sdk\inc\windows.h -FILE 3190 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3191 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h -FILE 3192 f:\sp\public\sdk\inc\specstrings.h -FILE 3193 f:\sp\public\sdk\inc\basetsd.h -FILE 3194 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3195 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 3196 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3197 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3198 f:\sp\public\sdk\inc\pshpack4.h -FILE 3199 f:\sp\public\sdk\inc\reason.h -FILE 3200 f:\sp\public\sdk\inc\wincon.h -FILE 3201 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3202 f:\sp\public\sdk\inc\poppack.h -FILE 3203 f:\sp\public\sdk\inc\mcx.h -FILE 3204 f:\sp\public\sdk\inc\winuser.h -FILE 3205 f:\sp\public\sdk\inc\winnls.h -FILE 3206 f:\sp\vctools\crt_bld\self_x86\crt\src\nlsdata2.c -FILE 3207 f:\sp\public\sdk\inc\stralign.h -FILE 3208 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3209 f:\sp\public\sdk\inc\windef.h -FILE 3210 f:\sp\public\sdk\inc\tvout.h -FILE 3211 f:\sp\public\sdk\inc\winsvc.h -FILE 3212 f:\sp\public\sdk\inc\wingdi.h -FILE 3213 f:\sp\public\sdk\inc\ddbanned.h -FILE 3214 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3215 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3216 f:\sp\public\sdk\inc\winnt.h -FILE 3217 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3218 f:\sp\public\sdk\inc\winnetwk.h -FILE 3219 f:\sp\public\sdk\inc\imm.h -FILE 3220 f:\sp\public\sdk\inc\winbase.h -FILE 3221 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3222 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3223 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3224 f:\sp\vctools\crt_bld\self_x86\crt\src\nlsdata1.c -FILE 3225 f:\sp\public\sdk\inc\ddbanned.h -FILE 3226 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3227 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3228 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3229 f:\sp\vctools\crt_bld\self_x86\crt\src\nlsint.h -FILE 3230 f:\sp\public\sdk\inc\reason.h -FILE 3231 f:\sp\public\sdk\inc\wincon.h -FILE 3232 f:\sp\public\sdk\inc\pshpack2.h -FILE 3233 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3234 f:\sp\public\sdk\inc\mcx.h -FILE 3235 f:\sp\public\sdk\inc\winuser.h -FILE 3236 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3237 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 3238 f:\sp\public\sdk\inc\winnls.h -FILE 3239 f:\sp\public\sdk\inc\guiddef.h -FILE 3240 f:\sp\public\sdk\inc\windows.h -FILE 3241 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 3242 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3243 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3244 f:\sp\public\sdk\inc\specstrings.h -FILE 3245 f:\sp\public\sdk\inc\basetsd.h -FILE 3246 f:\sp\public\sdk\inc\stralign.h -FILE 3247 f:\sp\public\sdk\inc\tvout.h -FILE 3248 f:\sp\public\sdk\inc\winsvc.h -FILE 3249 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3250 f:\sp\public\sdk\inc\wingdi.h -FILE 3251 f:\sp\public\sdk\inc\pshpack4.h -FILE 3252 f:\sp\public\sdk\inc\poppack.h -FILE 3253 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h -FILE 3254 f:\sp\public\sdk\inc\winnetwk.h -FILE 3255 f:\sp\public\sdk\inc\imm.h -FILE 3256 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3257 f:\sp\public\sdk\inc\windef.h -FILE 3258 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 3259 f:\sp\vctools\crt_bld\self_x86\crt\src\onexit.c -FILE 3260 f:\sp\public\sdk\inc\pshpack1.h -FILE 3261 f:\sp\public\sdk\inc\winver.h -FILE 3262 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3263 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3264 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3265 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3266 f:\sp\public\sdk\inc\winnt.h -FILE 3267 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3268 f:\sp\public\sdk\inc\ddbanned.h -FILE 3269 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3270 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3271 f:\sp\public\sdk\inc\winreg.h -FILE 3272 f:\sp\public\sdk\inc\winbase.h -FILE 3273 f:\sp\public\sdk\inc\winerror.h -FILE 3274 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3275 f:\sp\public\sdk\inc\pshpack8.h -FILE 3276 f:\sp\public\sdk\inc\winbase.h -FILE 3277 f:\sp\public\sdk\inc\winerror.h -FILE 3278 f:\sp\public\sdk\inc\pshpack1.h -FILE 3279 f:\sp\public\sdk\inc\pshpack8.h -FILE 3280 f:\sp\public\sdk\inc\winver.h -FILE 3281 f:\sp\public\sdk\inc\pshpack2.h -FILE 3282 f:\sp\public\sdk\inc\winreg.h -FILE 3283 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 3284 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 3285 f:\sp\public\sdk\inc\guiddef.h -FILE 3286 f:\sp\public\sdk\inc\windows.h -FILE 3287 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3288 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3289 f:\sp\public\sdk\inc\specstrings.h -FILE 3290 f:\sp\public\sdk\inc\basetsd.h -FILE 3291 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3292 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3293 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3294 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3295 f:\sp\public\sdk\inc\pshpack4.h -FILE 3296 f:\sp\public\sdk\inc\reason.h -FILE 3297 f:\sp\public\sdk\inc\wincon.h -FILE 3298 f:\sp\public\sdk\inc\poppack.h -FILE 3299 f:\sp\public\sdk\inc\mcx.h -FILE 3300 f:\sp\public\sdk\inc\winuser.h -FILE 3301 f:\sp\public\sdk\inc\winnls.h -FILE 3302 f:\sp\vctools\crt_bld\self_x86\crt\src\lconv.c -FILE 3303 f:\sp\public\sdk\inc\stralign.h -FILE 3304 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3305 f:\sp\public\sdk\inc\windef.h -FILE 3306 f:\sp\public\sdk\inc\tvout.h -FILE 3307 f:\sp\public\sdk\inc\winsvc.h -FILE 3308 f:\sp\public\sdk\inc\wingdi.h -FILE 3309 f:\sp\public\sdk\inc\ddbanned.h -FILE 3310 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3311 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3312 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 3313 f:\sp\public\sdk\inc\winnt.h -FILE 3314 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3315 f:\sp\public\sdk\inc\winnetwk.h -FILE 3316 f:\sp\public\sdk\inc\imm.h -FILE 3317 f:\sp\public\sdk\inc\guiddef.h -FILE 3318 f:\sp\public\sdk\inc\winnt.h -FILE 3319 f:\sp\public\sdk\inc\winnls.h -FILE 3320 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3321 f:\sp\public\sdk\inc\pshpack1.h -FILE 3322 f:\sp\public\sdk\inc\winerror.h -FILE 3323 f:\sp\public\sdk\inc\winreg.h -FILE 3324 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3325 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 3326 f:\sp\public\sdk\inc\tvout.h -FILE 3327 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3328 f:\sp\vctools\crt_bld\self_x86\crt\src\invarg.c -FILE 3329 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3330 f:\sp\public\sdk\inc\wincon.h -FILE 3331 f:\sp\public\sdk\inc\imm.h -FILE 3332 f:\sp\public\sdk\inc\winbase.h -FILE 3333 f:\sp\public\sdk\inc\wingdi.h -FILE 3334 f:\sp\public\sdk\inc\winver.h -FILE 3335 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3336 f:\sp\public\sdk\inc\windows.h -FILE 3337 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3338 f:\sp\public\sdk\inc\pshpack2.h -FILE 3339 f:\sp\public\sdk\inc\reason.h -FILE 3340 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h -FILE 3341 f:\sp\public\sdk\inc\specstrings.h -FILE 3342 f:\sp\public\sdk\inc\basetsd.h -FILE 3343 f:\sp\public\sdk\inc\pshpack4.h -FILE 3344 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 3345 f:\sp\public\sdk\inc\winnetwk.h -FILE 3346 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3347 f:\sp\public\sdk\inc\stralign.h -FILE 3348 f:\sp\public\sdk\inc\poppack.h -FILE 3349 f:\sp\public\sdk\inc\winsvc.h -FILE 3350 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3351 f:\sp\public\sdk\inc\windef.h -FILE 3352 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3353 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3354 f:\sp\public\sdk\inc\winuser.h -FILE 3355 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3356 f:\sp\public\sdk\inc\ddbanned.h -FILE 3357 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3358 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3359 f:\sp\public\sdk\inc\mcx.h -FILE 3360 f:\sp\public\sdk\inc\pshpack8.h -FILE 3361 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3362 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 3363 f:\sp\public\sdk\inc\pshpack4.h -FILE 3364 f:\sp\public\sdk\inc\poppack.h -FILE 3365 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 3366 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 3367 f:\sp\public\sdk\inc\winnetwk.h -FILE 3368 f:\sp\public\sdk\inc\imm.h -FILE 3369 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3370 f:\sp\public\sdk\inc\windef.h -FILE 3371 f:\sp\public\sdk\inc\pshpack1.h -FILE 3372 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3373 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3374 f:\sp\public\sdk\inc\winver.h -FILE 3375 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3376 f:\sp\public\sdk\inc\winnt.h -FILE 3377 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3378 f:\sp\public\sdk\inc\winreg.h -FILE 3379 f:\sp\vctools\crt_bld\self_x86\crt\src\inittime.c -FILE 3380 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 3381 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3382 f:\sp\public\sdk\inc\winbase.h -FILE 3383 f:\sp\public\sdk\inc\winerror.h -FILE 3384 f:\sp\public\sdk\inc\pshpack8.h -FILE 3385 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 3386 f:\sp\public\sdk\inc\reason.h -FILE 3387 f:\sp\public\sdk\inc\ddbanned.h -FILE 3388 f:\sp\public\sdk\inc\wincon.h -FILE 3389 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3390 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3391 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3392 f:\sp\public\sdk\inc\pshpack2.h -FILE 3393 f:\sp\public\sdk\inc\mcx.h -FILE 3394 f:\sp\public\sdk\inc\winuser.h -FILE 3395 f:\sp\public\sdk\inc\winnls.h -FILE 3396 f:\sp\public\sdk\inc\guiddef.h -FILE 3397 f:\sp\public\sdk\inc\stralign.h -FILE 3398 f:\sp\public\sdk\inc\specstrings.h -FILE 3399 f:\sp\public\sdk\inc\basetsd.h -FILE 3400 f:\sp\public\sdk\inc\windows.h -FILE 3401 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3402 f:\sp\public\sdk\inc\tvout.h -FILE 3403 f:\sp\public\sdk\inc\winsvc.h -FILE 3404 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3405 f:\sp\public\sdk\inc\wingdi.h -FILE 3406 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 3407 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3408 f:\sp\public\sdk\inc\pshpack4.h -FILE 3409 f:\sp\public\sdk\inc\poppack.h -FILE 3410 f:\sp\public\sdk\inc\winnt.h -FILE 3411 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3412 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 3413 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 3414 f:\sp\public\sdk\inc\winnetwk.h -FILE 3415 f:\sp\public\sdk\inc\imm.h -FILE 3416 f:\sp\public\sdk\inc\pshpack1.h -FILE 3417 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3418 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3419 f:\sp\public\sdk\inc\winver.h -FILE 3420 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3421 f:\sp\public\sdk\inc\guiddef.h -FILE 3422 f:\sp\public\sdk\inc\specstrings.h -FILE 3423 f:\sp\public\sdk\inc\basetsd.h -FILE 3424 f:\sp\public\sdk\inc\windows.h -FILE 3425 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3426 f:\sp\public\sdk\inc\winreg.h -FILE 3427 f:\sp\vctools\crt_bld\self_x86\crt\src\initnum.c -FILE 3428 f:\sp\vctools\crt_bld\self_x86\crt\src\nlsint.h -FILE 3429 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 3430 f:\sp\public\sdk\inc\winbase.h -FILE 3431 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3432 f:\sp\public\sdk\inc\winerror.h -FILE 3433 f:\sp\public\sdk\inc\pshpack8.h -FILE 3434 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 3435 f:\sp\public\sdk\inc\reason.h -FILE 3436 f:\sp\public\sdk\inc\ddbanned.h -FILE 3437 f:\sp\public\sdk\inc\wincon.h -FILE 3438 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3439 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3440 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3441 f:\sp\public\sdk\inc\pshpack2.h -FILE 3442 f:\sp\public\sdk\inc\mcx.h -FILE 3443 f:\sp\public\sdk\inc\winuser.h -FILE 3444 f:\sp\public\sdk\inc\winnls.h -FILE 3445 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3446 f:\sp\public\sdk\inc\windef.h -FILE 3447 f:\sp\public\sdk\inc\stralign.h -FILE 3448 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3449 f:\sp\public\sdk\inc\tvout.h -FILE 3450 f:\sp\public\sdk\inc\winsvc.h -FILE 3451 f:\sp\public\sdk\inc\wingdi.h -FILE 3452 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3453 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 3454 f:\sp\public\sdk\inc\pshpack4.h -FILE 3455 f:\sp\public\sdk\inc\poppack.h -FILE 3456 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 3457 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 3458 f:\sp\public\sdk\inc\winnetwk.h -FILE 3459 f:\sp\public\sdk\inc\imm.h -FILE 3460 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3461 f:\sp\public\sdk\inc\windef.h -FILE 3462 f:\sp\public\sdk\inc\pshpack1.h -FILE 3463 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3464 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3465 f:\sp\public\sdk\inc\winver.h -FILE 3466 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3467 f:\sp\public\sdk\inc\winnt.h -FILE 3468 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3469 f:\sp\public\sdk\inc\winreg.h -FILE 3470 f:\sp\vctools\crt_bld\self_x86\crt\src\initmon.c -FILE 3471 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 3472 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3473 f:\sp\public\sdk\inc\winbase.h -FILE 3474 f:\sp\public\sdk\inc\winerror.h -FILE 3475 f:\sp\public\sdk\inc\pshpack8.h -FILE 3476 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 3477 f:\sp\public\sdk\inc\reason.h -FILE 3478 f:\sp\public\sdk\inc\ddbanned.h -FILE 3479 f:\sp\public\sdk\inc\wincon.h -FILE 3480 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3481 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3482 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3483 f:\sp\public\sdk\inc\pshpack2.h -FILE 3484 f:\sp\public\sdk\inc\mcx.h -FILE 3485 f:\sp\public\sdk\inc\winuser.h -FILE 3486 f:\sp\public\sdk\inc\winnls.h -FILE 3487 f:\sp\public\sdk\inc\guiddef.h -FILE 3488 f:\sp\public\sdk\inc\stralign.h -FILE 3489 f:\sp\public\sdk\inc\specstrings.h -FILE 3490 f:\sp\public\sdk\inc\basetsd.h -FILE 3491 f:\sp\public\sdk\inc\windows.h -FILE 3492 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3493 f:\sp\public\sdk\inc\tvout.h -FILE 3494 f:\sp\public\sdk\inc\winsvc.h -FILE 3495 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3496 f:\sp\public\sdk\inc\wingdi.h -FILE 3497 f:\sp\public\sdk\inc\winbase.h -FILE 3498 f:\sp\public\sdk\inc\winerror.h -FILE 3499 f:\sp\public\sdk\inc\pshpack1.h -FILE 3500 f:\sp\public\sdk\inc\pshpack8.h -FILE 3501 f:\sp\public\sdk\inc\winver.h -FILE 3502 f:\sp\public\sdk\inc\pshpack2.h -FILE 3503 f:\sp\public\sdk\inc\winreg.h -FILE 3504 f:\sp\public\sdk\inc\guiddef.h -FILE 3505 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 3506 f:\sp\public\sdk\inc\specstrings.h -FILE 3507 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 3508 f:\sp\public\sdk\inc\basetsd.h -FILE 3509 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 3510 f:\sp\public\sdk\inc\windows.h -FILE 3511 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3512 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3513 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3514 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3515 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 3516 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3517 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3518 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3519 f:\sp\public\sdk\inc\pshpack4.h -FILE 3520 f:\sp\public\sdk\inc\reason.h -FILE 3521 f:\sp\public\sdk\inc\wincon.h -FILE 3522 f:\sp\public\sdk\inc\poppack.h -FILE 3523 f:\sp\vctools\crt_bld\self_x86\crt\src\inithelp.c -FILE 3524 f:\sp\public\sdk\inc\mcx.h -FILE 3525 f:\sp\public\sdk\inc\winuser.h -FILE 3526 f:\sp\public\sdk\inc\winnls.h -FILE 3527 f:\sp\public\sdk\inc\stralign.h -FILE 3528 f:\sp\public\sdk\inc\tvout.h -FILE 3529 f:\sp\public\sdk\inc\winsvc.h -FILE 3530 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3531 f:\sp\public\sdk\inc\wingdi.h -FILE 3532 f:\sp\public\sdk\inc\windef.h -FILE 3533 f:\sp\public\sdk\inc\ddbanned.h -FILE 3534 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3535 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3536 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3537 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3538 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3539 f:\sp\public\sdk\inc\winnetwk.h -FILE 3540 f:\sp\public\sdk\inc\imm.h -FILE 3541 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 3542 f:\sp\public\sdk\inc\winnt.h -FILE 3543 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3544 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 3545 f:\sp\public\sdk\inc\pshpack4.h -FILE 3546 f:\sp\public\sdk\inc\poppack.h -FILE 3547 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3548 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 3549 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 3550 f:\sp\public\sdk\inc\winnetwk.h -FILE 3551 f:\sp\public\sdk\inc\imm.h -FILE 3552 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3553 f:\sp\public\sdk\inc\windef.h -FILE 3554 f:\sp\public\sdk\inc\pshpack1.h -FILE 3555 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3556 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3557 f:\sp\public\sdk\inc\winver.h -FILE 3558 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3559 f:\sp\public\sdk\inc\winnt.h -FILE 3560 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3561 f:\sp\public\sdk\inc\winreg.h -FILE 3562 f:\sp\vctools\crt_bld\self_x86\crt\src\initctyp.c -FILE 3563 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 3564 f:\sp\public\sdk\inc\winbase.h -FILE 3565 f:\sp\public\sdk\inc\winerror.h -FILE 3566 f:\sp\public\sdk\inc\pshpack8.h -FILE 3567 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 3568 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 3569 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3570 f:\sp\public\sdk\inc\reason.h -FILE 3571 f:\sp\public\sdk\inc\ddbanned.h -FILE 3572 f:\sp\public\sdk\inc\wincon.h -FILE 3573 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3574 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3575 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3576 f:\sp\public\sdk\inc\pshpack2.h -FILE 3577 f:\sp\public\sdk\inc\mcx.h -FILE 3578 f:\sp\public\sdk\inc\winuser.h -FILE 3579 f:\sp\public\sdk\inc\winnls.h -FILE 3580 f:\sp\public\sdk\inc\guiddef.h -FILE 3581 f:\sp\public\sdk\inc\stralign.h -FILE 3582 f:\sp\public\sdk\inc\specstrings.h -FILE 3583 f:\sp\public\sdk\inc\basetsd.h -FILE 3584 f:\sp\public\sdk\inc\windows.h -FILE 3585 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3586 f:\sp\public\sdk\inc\tvout.h -FILE 3587 f:\sp\public\sdk\inc\winsvc.h -FILE 3588 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3589 f:\sp\public\sdk\inc\wingdi.h -FILE 3590 f:\sp\public\sdk\inc\poppack.h -FILE 3591 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 3592 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3593 f:\sp\public\sdk\inc\winnetwk.h -FILE 3594 f:\sp\public\sdk\inc\imm.h -FILE 3595 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3596 f:\sp\public\sdk\inc\windef.h -FILE 3597 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3598 f:\sp\public\sdk\inc\pshpack1.h -FILE 3599 f:\sp\public\sdk\inc\winver.h -FILE 3600 f:\sp\public\sdk\inc\windows.h -FILE 3601 f:\sp\public\sdk\inc\winnt.h -FILE 3602 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3603 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3604 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3605 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3606 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3607 f:\sp\public\sdk\inc\winreg.h -FILE 3608 f:\sp\public\sdk\inc\winbase.h -FILE 3609 f:\sp\vctools\crt_bld\self_x86\crt\src\initcrit.c -FILE 3610 f:\sp\public\sdk\inc\winerror.h -FILE 3611 f:\sp\public\sdk\inc\pshpack8.h -FILE 3612 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3613 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3614 f:\sp\public\sdk\inc\reason.h -FILE 3615 f:\sp\public\sdk\inc\wincon.h -FILE 3616 f:\sp\public\sdk\inc\ddbanned.h -FILE 3617 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3618 f:\sp\public\sdk\inc\pshpack2.h -FILE 3619 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3620 f:\sp\public\sdk\inc\mcx.h -FILE 3621 f:\sp\public\sdk\inc\winuser.h -FILE 3622 f:\sp\public\sdk\inc\winnls.h -FILE 3623 f:\sp\public\sdk\inc\guiddef.h -FILE 3624 f:\sp\public\sdk\inc\specstrings.h -FILE 3625 f:\sp\public\sdk\inc\basetsd.h -FILE 3626 f:\sp\public\sdk\inc\stralign.h -FILE 3627 f:\sp\public\sdk\inc\tvout.h -FILE 3628 f:\sp\public\sdk\inc\winsvc.h -FILE 3629 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3630 f:\sp\public\sdk\inc\wingdi.h -FILE 3631 f:\sp\public\sdk\inc\pshpack4.h -FILE 3632 f:\sp\public\sdk\inc\poppack.h -FILE 3633 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 3634 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 3635 f:\sp\public\sdk\inc\winnetwk.h -FILE 3636 f:\sp\public\sdk\inc\imm.h -FILE 3637 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3638 f:\sp\public\sdk\inc\windef.h -FILE 3639 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3640 f:\sp\public\sdk\inc\pshpack1.h -FILE 3641 f:\sp\public\sdk\inc\winver.h -FILE 3642 f:\sp\public\sdk\inc\windows.h -FILE 3643 f:\sp\public\sdk\inc\winnt.h -FILE 3644 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3645 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3646 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3647 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3648 f:\sp\public\sdk\inc\winreg.h -FILE 3649 f:\sp\public\sdk\inc\winbase.h -FILE 3650 f:\sp\vctools\crt_bld\self_x86\crt\src\initcoll.c -FILE 3651 f:\sp\public\sdk\inc\winerror.h -FILE 3652 f:\sp\public\sdk\inc\pshpack8.h -FILE 3653 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 3654 f:\sp\public\sdk\inc\reason.h -FILE 3655 f:\sp\public\sdk\inc\wincon.h -FILE 3656 f:\sp\public\sdk\inc\ddbanned.h -FILE 3657 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3658 f:\sp\public\sdk\inc\pshpack2.h -FILE 3659 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3660 f:\sp\public\sdk\inc\mcx.h -FILE 3661 f:\sp\public\sdk\inc\winuser.h -FILE 3662 f:\sp\public\sdk\inc\winnls.h -FILE 3663 f:\sp\public\sdk\inc\guiddef.h -FILE 3664 f:\sp\public\sdk\inc\specstrings.h -FILE 3665 f:\sp\public\sdk\inc\basetsd.h -FILE 3666 f:\sp\public\sdk\inc\stralign.h -FILE 3667 f:\sp\public\sdk\inc\tvout.h -FILE 3668 f:\sp\public\sdk\inc\winsvc.h -FILE 3669 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3670 f:\sp\public\sdk\inc\wingdi.h -FILE 3671 f:\sp\public\sdk\inc\pshpack4.h -FILE 3672 f:\sp\public\sdk\inc\poppack.h -FILE 3673 f:\sp\public\sdk\inc\winnetwk.h -FILE 3674 f:\sp\public\sdk\inc\imm.h -FILE 3675 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3676 f:\sp\public\sdk\inc\windef.h -FILE 3677 f:\binaries.x86ret\vcboot\inc\mm3dnow.h -FILE 3678 f:\sp\public\sdk\inc\pshpack1.h -FILE 3679 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 3680 f:\sp\public\sdk\inc\winver.h -FILE 3681 f:\sp\public\sdk\inc\windows.h -FILE 3682 f:\sp\public\sdk\inc\winnt.h -FILE 3683 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3684 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3685 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3686 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3687 f:\sp\public\sdk\inc\winreg.h -FILE 3688 f:\sp\public\sdk\inc\winbase.h -FILE 3689 f:\sp\vctools\crt_bld\self_x86\crt\src\gs_support.c -FILE 3690 f:\sp\public\sdk\inc\winerror.h -FILE 3691 f:\sp\public\sdk\inc\pshpack8.h -FILE 3692 f:\sp\vctools\crt_bld\self_x86\crt\src\intrin.h -FILE 3693 f:\sp\vctools\crt_bld\self_x86\crt\src\setjmp.h -FILE 3694 f:\sp\public\sdk\inc\reason.h -FILE 3695 f:\sp\public\sdk\inc\wincon.h -FILE 3696 f:\sp\public\sdk\inc\ddbanned.h -FILE 3697 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3698 f:\sp\public\sdk\inc\pshpack2.h -FILE 3699 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3700 f:\sp\public\sdk\inc\mcx.h -FILE 3701 f:\sp\public\sdk\inc\winuser.h -FILE 3702 f:\sp\public\sdk\inc\winnls.h -FILE 3703 f:\sp\public\sdk\inc\guiddef.h -FILE 3704 f:\sp\public\sdk\inc\specstrings.h -FILE 3705 f:\sp\public\sdk\inc\basetsd.h -FILE 3706 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 3707 f:\sp\public\sdk\inc\stralign.h -FILE 3708 f:\sp\public\sdk\inc\tvout.h -FILE 3709 f:\sp\public\sdk\inc\winsvc.h -FILE 3710 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3711 f:\sp\public\sdk\inc\wingdi.h -FILE 3712 f:\binaries.x86ret\vcboot\inc\emmintrin.h -FILE 3713 f:\binaries.x86ret\vcboot\inc\xmmintrin.h -FILE 3714 f:\binaries.x86ret\vcboot\inc\mmintrin.h -FILE 3715 f:\sp\public\sdk\inc\pshpack4.h -FILE 3716 f:\sp\public\sdk\inc\poppack.h -FILE 3717 f:\sp\public\sdk\inc\winnetwk.h -FILE 3718 f:\sp\public\sdk\inc\imm.h -FILE 3719 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3720 f:\sp\public\sdk\inc\windef.h -FILE 3721 f:\sp\public\sdk\inc\pshpack1.h -FILE 3722 f:\sp\public\sdk\inc\winver.h -FILE 3723 f:\sp\public\sdk\inc\windows.h -FILE 3724 f:\sp\public\sdk\inc\winnt.h -FILE 3725 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3726 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3727 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3728 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3729 f:\sp\public\sdk\inc\winreg.h -FILE 3730 f:\sp\public\sdk\inc\winbase.h -FILE 3731 f:\sp\vctools\crt_bld\self_x86\crt\src\gs_report.c -FILE 3732 f:\sp\public\sdk\inc\winerror.h -FILE 3733 f:\sp\public\sdk\inc\pshpack8.h -FILE 3734 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 3735 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3736 f:\sp\public\sdk\inc\reason.h -FILE 3737 f:\sp\public\sdk\inc\wincon.h -FILE 3738 f:\sp\public\sdk\inc\ddbanned.h -FILE 3739 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3740 f:\sp\public\sdk\inc\pshpack2.h -FILE 3741 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3742 f:\sp\public\sdk\inc\mcx.h -FILE 3743 f:\sp\public\sdk\inc\winuser.h -FILE 3744 f:\sp\public\sdk\inc\winnls.h -FILE 3745 f:\sp\public\sdk\inc\guiddef.h -FILE 3746 f:\sp\public\sdk\inc\specstrings.h -FILE 3747 f:\sp\public\sdk\inc\basetsd.h -FILE 3748 f:\sp\public\sdk\inc\stralign.h -FILE 3749 f:\sp\public\sdk\inc\tvout.h -FILE 3750 f:\sp\public\sdk\inc\winsvc.h -FILE 3751 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3752 f:\sp\public\sdk\inc\wingdi.h -FILE 3753 f:\sp\public\sdk\inc\pshpack4.h -FILE 3754 f:\sp\public\sdk\inc\poppack.h -FILE 3755 f:\sp\public\sdk\inc\winnetwk.h -FILE 3756 f:\sp\public\sdk\inc\imm.h -FILE 3757 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3758 f:\sp\public\sdk\inc\windef.h -FILE 3759 f:\sp\public\sdk\inc\pshpack1.h -FILE 3760 f:\sp\public\sdk\inc\winver.h -FILE 3761 f:\sp\public\sdk\inc\windows.h -FILE 3762 f:\sp\public\sdk\inc\winnt.h -FILE 3763 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3764 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3765 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3766 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3767 f:\sp\public\sdk\inc\winreg.h -FILE 3768 f:\sp\public\sdk\inc\winbase.h -FILE 3769 f:\sp\vctools\crt_bld\self_x86\crt\src\gs_cookie.c -FILE 3770 f:\sp\public\sdk\inc\winerror.h -FILE 3771 f:\sp\public\sdk\inc\pshpack8.h -FILE 3772 f:\sp\public\sdk\inc\reason.h -FILE 3773 f:\sp\public\sdk\inc\wincon.h -FILE 3774 f:\sp\public\sdk\inc\ddbanned.h -FILE 3775 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3776 f:\sp\public\sdk\inc\pshpack2.h -FILE 3777 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3778 f:\sp\public\sdk\inc\mcx.h -FILE 3779 f:\sp\public\sdk\inc\winuser.h -FILE 3780 f:\sp\public\sdk\inc\winnls.h -FILE 3781 f:\sp\public\sdk\inc\guiddef.h -FILE 3782 f:\sp\public\sdk\inc\specstrings.h -FILE 3783 f:\sp\public\sdk\inc\basetsd.h -FILE 3784 f:\sp\public\sdk\inc\stralign.h -FILE 3785 f:\sp\public\sdk\inc\tvout.h -FILE 3786 f:\sp\public\sdk\inc\winsvc.h -FILE 3787 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3788 f:\sp\public\sdk\inc\wingdi.h -FILE 3789 f:\sp\public\sdk\inc\pshpack4.h -FILE 3790 f:\sp\public\sdk\inc\winerror.h -FILE 3791 f:\sp\public\sdk\inc\pshpack1.h -FILE 3792 f:\sp\public\sdk\inc\pshpack8.h -FILE 3793 f:\sp\public\sdk\inc\winver.h -FILE 3794 f:\sp\public\sdk\inc\pshpack2.h -FILE 3795 f:\sp\public\sdk\inc\winreg.h -FILE 3796 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 3797 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 3798 f:\sp\public\sdk\inc\guiddef.h -FILE 3799 f:\sp\public\sdk\inc\windows.h -FILE 3800 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3801 f:\sp\public\sdk\inc\specstrings.h -FILE 3802 f:\sp\public\sdk\inc\basetsd.h -FILE 3803 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3804 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 3805 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3806 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3807 f:\sp\public\sdk\inc\pshpack4.h -FILE 3808 f:\sp\public\sdk\inc\reason.h -FILE 3809 f:\sp\public\sdk\inc\wincon.h -FILE 3810 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3811 f:\sp\public\sdk\inc\poppack.h -FILE 3812 f:\sp\public\sdk\inc\mcx.h -FILE 3813 f:\sp\public\sdk\inc\winuser.h -FILE 3814 f:\sp\public\sdk\inc\winnls.h -FILE 3815 f:\sp\vctools\crt_bld\self_x86\crt\src\glstatus.c -FILE 3816 f:\sp\public\sdk\inc\stralign.h -FILE 3817 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3818 f:\sp\public\sdk\inc\windef.h -FILE 3819 f:\sp\public\sdk\inc\tvout.h -FILE 3820 f:\sp\public\sdk\inc\winsvc.h -FILE 3821 f:\sp\public\sdk\inc\wingdi.h -FILE 3822 f:\sp\public\sdk\inc\ddbanned.h -FILE 3823 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3824 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3825 f:\sp\public\sdk\inc\winnt.h -FILE 3826 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3827 f:\sp\public\sdk\inc\winnetwk.h -FILE 3828 f:\sp\public\sdk\inc\imm.h -FILE 3829 f:\sp\public\sdk\inc\winbase.h -FILE 3830 f:\sp\public\sdk\inc\pshpack4.h -FILE 3831 f:\sp\public\sdk\inc\poppack.h -FILE 3832 f:\sp\public\sdk\inc\winnt.h -FILE 3833 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3834 f:\sp\public\sdk\inc\winnetwk.h -FILE 3835 f:\sp\public\sdk\inc\imm.h -FILE 3836 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3837 f:\sp\public\sdk\inc\pshpack1.h -FILE 3838 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3839 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3840 f:\sp\public\sdk\inc\winver.h -FILE 3841 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3842 f:\sp\public\sdk\inc\guiddef.h -FILE 3843 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3844 f:\sp\public\sdk\inc\specstrings.h -FILE 3845 f:\sp\public\sdk\inc\basetsd.h -FILE 3846 f:\sp\public\sdk\inc\windows.h -FILE 3847 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3848 f:\sp\public\sdk\inc\winreg.h -FILE 3849 f:\sp\vctools\crt_bld\self_x86\crt\src\getqloc.c -FILE 3850 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 3851 f:\sp\public\sdk\inc\winbase.h -FILE 3852 f:\sp\public\sdk\inc\winerror.h -FILE 3853 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3854 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3855 f:\sp\public\sdk\inc\pshpack8.h -FILE 3856 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 3857 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 3858 f:\sp\public\sdk\inc\reason.h -FILE 3859 f:\sp\public\sdk\inc\ddbanned.h -FILE 3860 f:\sp\public\sdk\inc\wincon.h -FILE 3861 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3862 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3863 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3864 f:\sp\public\sdk\inc\pshpack2.h -FILE 3865 f:\sp\public\sdk\inc\mcx.h -FILE 3866 f:\sp\public\sdk\inc\winuser.h -FILE 3867 f:\sp\public\sdk\inc\winnls.h -FILE 3868 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3869 f:\sp\public\sdk\inc\windef.h -FILE 3870 f:\sp\public\sdk\inc\stralign.h -FILE 3871 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3872 f:\sp\public\sdk\inc\tvout.h -FILE 3873 f:\sp\public\sdk\inc\winsvc.h -FILE 3874 f:\sp\public\sdk\inc\wingdi.h -FILE 3875 f:\sp\public\sdk\inc\reason.h -FILE 3876 f:\sp\public\sdk\inc\wincon.h -FILE 3877 f:\sp\public\sdk\inc\pshpack2.h -FILE 3878 f:\sp\public\sdk\inc\mcx.h -FILE 3879 f:\sp\public\sdk\inc\winuser.h -FILE 3880 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3881 f:\sp\public\sdk\inc\winnls.h -FILE 3882 f:\sp\public\sdk\inc\guiddef.h -FILE 3883 f:\sp\public\sdk\inc\windows.h -FILE 3884 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3885 f:\sp\public\sdk\inc\specstrings.h -FILE 3886 f:\sp\public\sdk\inc\basetsd.h -FILE 3887 f:\sp\public\sdk\inc\stralign.h -FILE 3888 f:\sp\public\sdk\inc\tvout.h -FILE 3889 f:\sp\public\sdk\inc\winsvc.h -FILE 3890 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3891 f:\sp\public\sdk\inc\wingdi.h -FILE 3892 f:\sp\public\sdk\inc\pshpack4.h -FILE 3893 f:\sp\public\sdk\inc\poppack.h -FILE 3894 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h -FILE 3895 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3896 f:\sp\public\sdk\inc\winnetwk.h -FILE 3897 f:\sp\public\sdk\inc\imm.h -FILE 3898 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3899 f:\sp\public\sdk\inc\windef.h -FILE 3900 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 3901 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 3902 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3903 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3904 f:\sp\vctools\crt_bld\self_x86\crt\src\getenv.c -FILE 3905 f:\sp\public\sdk\inc\pshpack1.h -FILE 3906 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 3907 f:\sp\public\sdk\inc\winver.h -FILE 3908 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3909 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3910 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3911 f:\sp\public\sdk\inc\winnt.h -FILE 3912 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3913 f:\sp\public\sdk\inc\ddbanned.h -FILE 3914 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3915 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3916 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3917 f:\sp\public\sdk\inc\winreg.h -FILE 3918 f:\sp\public\sdk\inc\winbase.h -FILE 3919 f:\sp\public\sdk\inc\winerror.h -FILE 3920 f:\sp\public\sdk\inc\pshpack8.h -FILE 3921 f:\sp\public\sdk\inc\poppack.h -FILE 3922 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3923 f:\sp\public\sdk\inc\winnetwk.h -FILE 3924 f:\sp\public\sdk\inc\imm.h -FILE 3925 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3926 f:\sp\public\sdk\inc\windef.h -FILE 3927 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3928 f:\sp\public\sdk\inc\pshpack1.h -FILE 3929 f:\sp\public\sdk\inc\winver.h -FILE 3930 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3931 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3932 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3933 f:\sp\public\sdk\inc\winnt.h -FILE 3934 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3935 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3936 f:\sp\public\sdk\inc\winreg.h -FILE 3937 f:\sp\vctools\crt_bld\self_x86\crt\src\errmode.c -FILE 3938 f:\sp\public\sdk\inc\winbase.h -FILE 3939 f:\sp\public\sdk\inc\winerror.h -FILE 3940 f:\sp\public\sdk\inc\pshpack8.h -FILE 3941 f:\sp\public\sdk\inc\reason.h -FILE 3942 f:\sp\public\sdk\inc\wincon.h -FILE 3943 f:\sp\public\sdk\inc\ddbanned.h -FILE 3944 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3945 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3946 f:\sp\public\sdk\inc\pshpack2.h -FILE 3947 f:\sp\public\sdk\inc\mcx.h -FILE 3948 f:\sp\public\sdk\inc\winuser.h -FILE 3949 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3950 f:\sp\public\sdk\inc\winnls.h -FILE 3951 f:\sp\public\sdk\inc\guiddef.h -FILE 3952 f:\sp\public\sdk\inc\windows.h -FILE 3953 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3954 f:\sp\public\sdk\inc\specstrings.h -FILE 3955 f:\sp\public\sdk\inc\basetsd.h -FILE 3956 f:\sp\public\sdk\inc\stralign.h -FILE 3957 f:\sp\public\sdk\inc\tvout.h -FILE 3958 f:\sp\public\sdk\inc\winsvc.h -FILE 3959 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3960 f:\sp\public\sdk\inc\wingdi.h -FILE 3961 f:\sp\public\sdk\inc\pshpack4.h -FILE 3962 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 3963 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3964 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3965 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3966 f:\sp\vctools\crt_bld\self_x86\crt\src\dbghook.c -FILE 3967 f:\sp\public\sdk\inc\ddbanned.h -FILE 3968 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3969 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3970 f:\sp\public\sdk\inc\poppack.h -FILE 3971 f:\sp\public\sdk\inc\winnetwk.h -FILE 3972 f:\sp\public\sdk\inc\imm.h -FILE 3973 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3974 f:\sp\public\sdk\inc\windef.h -FILE 3975 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3976 f:\sp\public\sdk\inc\pshpack1.h -FILE 3977 f:\sp\public\sdk\inc\winver.h -FILE 3978 f:\sp\public\sdk\inc\windows.h -FILE 3979 f:\sp\public\sdk\inc\winnt.h -FILE 3980 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3981 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3982 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3983 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3984 f:\sp\public\sdk\inc\winreg.h -FILE 3985 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h -FILE 3986 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.c -FILE 3987 f:\sp\public\sdk\inc\winbase.h -FILE 3988 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 3989 f:\sp\public\sdk\inc\winerror.h -FILE 3990 f:\sp\public\sdk\inc\pshpack8.h -FILE 3991 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 3992 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 3993 f:\sp\public\sdk\inc\reason.h -FILE 3994 f:\sp\public\sdk\inc\wincon.h -FILE 3995 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3996 f:\sp\public\sdk\inc\ddbanned.h -FILE 3997 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3998 f:\sp\public\sdk\inc\pshpack2.h -FILE 3999 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4000 f:\sp\public\sdk\inc\mcx.h -FILE 4001 f:\sp\public\sdk\inc\winuser.h -FILE 4002 f:\sp\public\sdk\inc\winnls.h -FILE 4003 f:\sp\public\sdk\inc\guiddef.h -FILE 4004 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 4005 f:\sp\public\sdk\inc\specstrings.h -FILE 4006 f:\sp\public\sdk\inc\basetsd.h -FILE 4007 f:\sp\public\sdk\inc\stralign.h -FILE 4008 f:\sp\public\sdk\inc\tvout.h -FILE 4009 f:\sp\public\sdk\inc\winsvc.h -FILE 4010 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4011 f:\sp\public\sdk\inc\wingdi.h -FILE 4012 f:\sp\public\sdk\inc\pshpack4.h -FILE 4013 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4014 f:\sp\public\sdk\inc\mcx.h -FILE 4015 f:\sp\public\sdk\inc\winuser.h -FILE 4016 f:\sp\public\sdk\inc\winnls.h -FILE 4017 f:\sp\public\sdk\inc\stralign.h -FILE 4018 f:\sp\public\sdk\inc\tvout.h -FILE 4019 f:\sp\public\sdk\inc\winsvc.h -FILE 4020 f:\sp\public\sdk\inc\wingdi.h -FILE 4021 f:\sp\public\sdk\inc\pshpack4.h -FILE 4022 f:\sp\public\sdk\inc\winnt.h -FILE 4023 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4024 f:\sp\public\sdk\inc\poppack.h -FILE 4025 f:\sp\public\sdk\inc\winnetwk.h -FILE 4026 f:\sp\public\sdk\inc\imm.h -FILE 4027 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 4028 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 4029 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4030 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4031 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4032 f:\sp\public\sdk\inc\pshpack1.h -FILE 4033 f:\sp\vctools\crt_bld\self_x86\crt\src\crtmbox.c -FILE 4034 f:\sp\public\sdk\inc\winver.h -FILE 4035 f:\sp\public\sdk\inc\guiddef.h -FILE 4036 f:\sp\public\sdk\inc\windows.h -FILE 4037 f:\sp\public\sdk\inc\specstrings.h -FILE 4038 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4039 f:\sp\public\sdk\inc\basetsd.h -FILE 4040 f:\sp\public\sdk\inc\winreg.h -FILE 4041 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4042 f:\sp\public\sdk\inc\winbase.h -FILE 4043 f:\sp\public\sdk\inc\ddbanned.h -FILE 4044 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4045 f:\sp\public\sdk\inc\winerror.h -FILE 4046 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4047 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4048 f:\sp\public\sdk\inc\pshpack8.h -FILE 4049 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4050 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4051 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 4052 f:\sp\public\sdk\inc\reason.h -FILE 4053 f:\sp\public\sdk\inc\wincon.h -FILE 4054 f:\sp\public\sdk\inc\pshpack2.h -FILE 4055 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4056 f:\sp\public\sdk\inc\windef.h -FILE 4057 f:\sp\public\sdk\inc\poppack.h -FILE 4058 f:\sp\vctools\crt_bld\self_x86\crt\src\fltintrn.h -FILE 4059 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4060 f:\sp\public\sdk\inc\winnetwk.h -FILE 4061 f:\sp\public\sdk\inc\imm.h -FILE 4062 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4063 f:\sp\public\sdk\inc\windef.h -FILE 4064 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4065 f:\sp\public\sdk\inc\pshpack1.h -FILE 4066 f:\sp\public\sdk\inc\winver.h -FILE 4067 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4068 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4069 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4070 f:\sp\public\sdk\inc\winnt.h -FILE 4071 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4072 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4073 f:\sp\public\sdk\inc\winreg.h -FILE 4074 f:\sp\vctools\crt_bld\self_x86\crt\src\cmiscdat.c -FILE 4075 f:\sp\public\sdk\inc\winbase.h -FILE 4076 f:\sp\public\sdk\inc\winerror.h -FILE 4077 f:\sp\public\sdk\inc\pshpack8.h -FILE 4078 f:\sp\public\sdk\inc\reason.h -FILE 4079 f:\sp\public\sdk\inc\wincon.h -FILE 4080 f:\sp\public\sdk\inc\ddbanned.h -FILE 4081 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4082 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4083 f:\sp\public\sdk\inc\pshpack2.h -FILE 4084 f:\sp\public\sdk\inc\mcx.h -FILE 4085 f:\sp\public\sdk\inc\winuser.h -FILE 4086 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4087 f:\sp\public\sdk\inc\winnls.h -FILE 4088 f:\sp\public\sdk\inc\guiddef.h -FILE 4089 f:\sp\public\sdk\inc\windows.h -FILE 4090 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4091 f:\sp\public\sdk\inc\specstrings.h -FILE 4092 f:\sp\public\sdk\inc\basetsd.h -FILE 4093 f:\sp\public\sdk\inc\stralign.h -FILE 4094 f:\sp\public\sdk\inc\tvout.h -FILE 4095 f:\sp\public\sdk\inc\winsvc.h -FILE 4096 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4097 f:\sp\public\sdk\inc\wingdi.h -FILE 4098 f:\sp\public\sdk\inc\pshpack4.h -FILE 4099 f:\sp\public\sdk\inc\pshpack4.h -FILE 4100 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 4101 f:\sp\vctools\crt_bld\self_x86\crt\src\signal.h -FILE 4102 f:\sp\public\sdk\inc\poppack.h -FILE 4103 f:\sp\public\sdk\inc\winnetwk.h -FILE 4104 f:\sp\public\sdk\inc\imm.h -FILE 4105 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4106 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4107 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4108 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4109 f:\sp\public\sdk\inc\windef.h -FILE 4110 f:\sp\public\sdk\inc\pshpack1.h -FILE 4111 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4112 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4113 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4114 f:\sp\public\sdk\inc\winver.h -FILE 4115 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4116 f:\sp\public\sdk\inc\winnt.h -FILE 4117 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4118 f:\sp\public\sdk\inc\winreg.h -FILE 4119 f:\sp\vctools\crt_bld\self_x86\crt\src\abort.c -FILE 4120 f:\sp\public\sdk\inc\winbase.h -FILE 4121 f:\sp\public\sdk\inc\winerror.h -FILE 4122 f:\sp\public\sdk\inc\pshpack8.h -FILE 4123 f:\sp\public\sdk\inc\reason.h -FILE 4124 f:\sp\public\sdk\inc\ddbanned.h -FILE 4125 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4126 f:\sp\public\sdk\inc\wincon.h -FILE 4127 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4128 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4129 f:\sp\public\sdk\inc\pshpack2.h -FILE 4130 f:\sp\public\sdk\inc\mcx.h -FILE 4131 f:\sp\public\sdk\inc\winuser.h -FILE 4132 f:\sp\public\sdk\inc\winnls.h -FILE 4133 f:\sp\public\sdk\inc\guiddef.h -FILE 4134 f:\sp\public\sdk\inc\stralign.h -FILE 4135 f:\sp\public\sdk\inc\specstrings.h -FILE 4136 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4137 f:\sp\public\sdk\inc\basetsd.h -FILE 4138 f:\sp\public\sdk\inc\windows.h -FILE 4139 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4140 f:\sp\public\sdk\inc\tvout.h -FILE 4141 f:\sp\public\sdk\inc\winsvc.h -FILE 4142 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4143 f:\sp\public\sdk\inc\wingdi.h -FILE 4144 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 4145 f:\sp\public\sdk\inc\wincon.h -FILE 4146 f:\sp\public\sdk\inc\imm.h -FILE 4147 f:\sp\public\sdk\inc\winbase.h -FILE 4148 f:\sp\public\sdk\inc\wingdi.h -FILE 4149 f:\sp\public\sdk\inc\winver.h -FILE 4150 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4151 f:\sp\public\sdk\inc\windows.h -FILE 4152 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4153 f:\sp\public\sdk\inc\pshpack2.h -FILE 4154 f:\sp\public\sdk\inc\reason.h -FILE 4155 f:\sp\vctools\crt_bld\self_x86\crt\src\a_str.c -FILE 4156 f:\sp\public\sdk\inc\specstrings.h -FILE 4157 f:\sp\public\sdk\inc\basetsd.h -FILE 4158 f:\sp\public\sdk\inc\pshpack4.h -FILE 4159 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 4160 f:\sp\public\sdk\inc\winnetwk.h -FILE 4161 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4162 f:\sp\public\sdk\inc\stralign.h -FILE 4163 f:\sp\public\sdk\inc\poppack.h -FILE 4164 f:\sp\public\sdk\inc\winsvc.h -FILE 4165 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4166 f:\sp\public\sdk\inc\windef.h -FILE 4167 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4168 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4169 f:\sp\public\sdk\inc\winuser.h -FILE 4170 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4171 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4172 f:\sp\public\sdk\inc\mcx.h -FILE 4173 f:\sp\public\sdk\inc\pshpack8.h -FILE 4174 f:\sp\public\sdk\inc\guiddef.h -FILE 4175 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 4176 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4177 f:\sp\public\sdk\inc\winnt.h -FILE 4178 f:\sp\public\sdk\inc\winnls.h -FILE 4179 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4180 f:\sp\public\sdk\inc\pshpack1.h -FILE 4181 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 4182 f:\sp\public\sdk\inc\winerror.h -FILE 4183 f:\sp\public\sdk\inc\winreg.h -FILE 4184 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4185 f:\sp\public\sdk\inc\ddbanned.h -FILE 4186 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4187 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4188 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 4189 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4190 f:\sp\public\sdk\inc\tvout.h -FILE 4191 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4192 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 4193 f:\sp\public\sdk\inc\wincon.h -FILE 4194 f:\sp\public\sdk\inc\imm.h -FILE 4195 f:\sp\public\sdk\inc\winbase.h -FILE 4196 f:\sp\public\sdk\inc\wingdi.h -FILE 4197 f:\sp\public\sdk\inc\winver.h -FILE 4198 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4199 f:\sp\public\sdk\inc\windows.h -FILE 4200 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4201 f:\sp\public\sdk\inc\pshpack2.h -FILE 4202 f:\sp\public\sdk\inc\reason.h -FILE 4203 f:\sp\vctools\crt_bld\self_x86\crt\src\a_map.c -FILE 4204 f:\sp\public\sdk\inc\specstrings.h -FILE 4205 f:\sp\public\sdk\inc\basetsd.h -FILE 4206 f:\sp\public\sdk\inc\pshpack4.h -FILE 4207 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 4208 f:\sp\public\sdk\inc\winnetwk.h -FILE 4209 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4210 f:\sp\public\sdk\inc\stralign.h -FILE 4211 f:\sp\public\sdk\inc\poppack.h -FILE 4212 f:\sp\public\sdk\inc\winsvc.h -FILE 4213 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4214 f:\sp\public\sdk\inc\windef.h -FILE 4215 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4216 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4217 f:\sp\public\sdk\inc\winuser.h -FILE 4218 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4219 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4220 f:\sp\public\sdk\inc\mcx.h -FILE 4221 f:\sp\public\sdk\inc\pshpack8.h -FILE 4222 f:\sp\public\sdk\inc\guiddef.h -FILE 4223 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 4224 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4225 f:\sp\public\sdk\inc\winnt.h -FILE 4226 f:\sp\public\sdk\inc\winnls.h -FILE 4227 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4228 f:\sp\public\sdk\inc\pshpack1.h -FILE 4229 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 4230 f:\sp\public\sdk\inc\winerror.h -FILE 4231 f:\sp\public\sdk\inc\winreg.h -FILE 4232 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4233 f:\sp\public\sdk\inc\ddbanned.h -FILE 4234 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4235 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4236 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 4237 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4238 f:\sp\public\sdk\inc\tvout.h -FILE 4239 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4240 f:\sp\public\sdk\inc\wincon.h -FILE 4241 f:\sp\public\sdk\inc\imm.h -FILE 4242 f:\sp\public\sdk\inc\winbase.h -FILE 4243 f:\sp\public\sdk\inc\wingdi.h -FILE 4244 f:\sp\public\sdk\inc\winver.h -FILE 4245 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4246 f:\sp\public\sdk\inc\windows.h -FILE 4247 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4248 f:\sp\public\sdk\inc\pshpack2.h -FILE 4249 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 4250 f:\sp\public\sdk\inc\reason.h -FILE 4251 f:\sp\vctools\crt_bld\self_x86\crt\src\a_loc.c -FILE 4252 f:\sp\public\sdk\inc\specstrings.h -FILE 4253 f:\sp\public\sdk\inc\basetsd.h -FILE 4254 f:\sp\public\sdk\inc\pshpack4.h -FILE 4255 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 4256 f:\sp\public\sdk\inc\winnetwk.h -FILE 4257 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4258 f:\sp\public\sdk\inc\stralign.h -FILE 4259 f:\sp\public\sdk\inc\poppack.h -FILE 4260 f:\sp\public\sdk\inc\winsvc.h -FILE 4261 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4262 f:\sp\public\sdk\inc\windef.h -FILE 4263 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4264 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4265 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 4266 f:\sp\public\sdk\inc\winuser.h -FILE 4267 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4268 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4269 f:\sp\public\sdk\inc\mcx.h -FILE 4270 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 4271 f:\sp\public\sdk\inc\pshpack8.h -FILE 4272 f:\sp\public\sdk\inc\guiddef.h -FILE 4273 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 4274 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4275 f:\sp\public\sdk\inc\winnt.h -FILE 4276 f:\sp\public\sdk\inc\winnls.h -FILE 4277 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4278 f:\sp\public\sdk\inc\pshpack1.h -FILE 4279 f:\sp\public\sdk\inc\winerror.h -FILE 4280 f:\sp\public\sdk\inc\winreg.h -FILE 4281 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4282 f:\sp\public\sdk\inc\ddbanned.h -FILE 4283 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4284 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4285 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4286 f:\sp\public\sdk\inc\tvout.h -FILE 4287 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4288 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 4289 f:\sp\public\sdk\inc\poppack.h -FILE 4290 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 4291 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4292 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4293 f:\sp\public\sdk\inc\winnetwk.h -FILE 4294 f:\sp\public\sdk\inc\imm.h -FILE 4295 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4296 f:\sp\public\sdk\inc\windef.h -FILE 4297 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4298 f:\sp\public\sdk\inc\pshpack1.h -FILE 4299 f:\sp\public\sdk\inc\winver.h -FILE 4300 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4301 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4302 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4303 f:\sp\public\sdk\inc\winnt.h -FILE 4304 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4305 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4306 f:\sp\public\sdk\inc\winreg.h -FILE 4307 f:\sp\vctools\crt_bld\self_x86\crt\src\a_env.c -FILE 4308 f:\sp\public\sdk\inc\winbase.h -FILE 4309 f:\sp\public\sdk\inc\winerror.h -FILE 4310 f:\sp\public\sdk\inc\pshpack8.h -FILE 4311 f:\sp\public\sdk\inc\reason.h -FILE 4312 f:\sp\public\sdk\inc\wincon.h -FILE 4313 f:\sp\public\sdk\inc\ddbanned.h -FILE 4314 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4315 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4316 f:\sp\public\sdk\inc\pshpack2.h -FILE 4317 f:\sp\public\sdk\inc\mcx.h -FILE 4318 f:\sp\public\sdk\inc\winuser.h -FILE 4319 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4320 f:\sp\public\sdk\inc\winnls.h -FILE 4321 f:\sp\public\sdk\inc\guiddef.h -FILE 4322 f:\sp\public\sdk\inc\windows.h -FILE 4323 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4324 f:\sp\public\sdk\inc\specstrings.h -FILE 4325 f:\sp\public\sdk\inc\basetsd.h -FILE 4326 f:\sp\public\sdk\inc\stralign.h -FILE 4327 f:\sp\public\sdk\inc\tvout.h -FILE 4328 f:\sp\public\sdk\inc\winsvc.h -FILE 4329 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4330 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 4331 f:\sp\public\sdk\inc\wingdi.h -FILE 4332 f:\sp\public\sdk\inc\pshpack4.h -FILE 4333 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 4334 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4335 f:\sp\public\sdk\inc\wincon.h -FILE 4336 f:\sp\public\sdk\inc\imm.h -FILE 4337 f:\sp\public\sdk\inc\winbase.h -FILE 4338 f:\sp\public\sdk\inc\wingdi.h -FILE 4339 f:\sp\public\sdk\inc\winver.h -FILE 4340 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4341 f:\sp\public\sdk\inc\windows.h -FILE 4342 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4343 f:\sp\public\sdk\inc\pshpack2.h -FILE 4344 f:\sp\public\sdk\inc\reason.h -FILE 4345 f:\sp\vctools\crt_bld\self_x86\crt\src\a_cmp.c -FILE 4346 f:\sp\public\sdk\inc\specstrings.h -FILE 4347 f:\sp\public\sdk\inc\basetsd.h -FILE 4348 f:\sp\public\sdk\inc\pshpack4.h -FILE 4349 f:\sp\public\sdk\inc\winnetwk.h -FILE 4350 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4351 f:\sp\public\sdk\inc\stralign.h -FILE 4352 f:\sp\public\sdk\inc\poppack.h -FILE 4353 f:\sp\public\sdk\inc\winsvc.h -FILE 4354 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4355 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 4356 f:\sp\public\sdk\inc\windef.h -FILE 4357 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4358 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4359 f:\sp\public\sdk\inc\winuser.h -FILE 4360 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4361 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4362 f:\sp\public\sdk\inc\mcx.h -FILE 4363 f:\sp\public\sdk\inc\pshpack8.h -FILE 4364 f:\sp\public\sdk\inc\guiddef.h -FILE 4365 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 4366 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4367 f:\sp\public\sdk\inc\winnt.h -FILE 4368 f:\sp\public\sdk\inc\winnls.h -FILE 4369 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4370 f:\sp\public\sdk\inc\pshpack1.h -FILE 4371 f:\sp\public\sdk\inc\winerror.h -FILE 4372 f:\sp\public\sdk\inc\winreg.h -FILE 4373 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4374 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 4375 f:\sp\public\sdk\inc\ddbanned.h -FILE 4376 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4377 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4378 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 4379 f:\sp\public\sdk\inc\tvout.h -FILE 4380 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4381 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\misc\i386\sehprolg4.asm -FILE 4382 f:\sp\public\sdk\inc\poppack.h -FILE 4383 f:\sp\public\sdk\inc\winnetwk.h -FILE 4384 f:\sp\public\sdk\inc\imm.h -FILE 4385 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4386 f:\sp\public\sdk\inc\windef.h -FILE 4387 f:\sp\public\sdk\inc\pshpack1.h -FILE 4388 f:\sp\public\sdk\inc\winver.h -FILE 4389 f:\sp\public\sdk\inc\windows.h -FILE 4390 f:\sp\public\sdk\inc\winnt.h -FILE 4391 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4392 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4393 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4394 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4395 f:\sp\public\sdk\inc\winreg.h -FILE 4396 f:\sp\public\sdk\inc\winbase.h -FILE 4397 f:\sp\vctools\crt_bld\self_x86\crt\src\intel\secchk.c -FILE 4398 f:\sp\public\sdk\inc\winerror.h -FILE 4399 f:\sp\public\sdk\inc\pshpack8.h -FILE 4400 f:\sp\vctools\crt_bld\self_x86\crt\src\process.h -FILE 4401 f:\sp\public\sdk\inc\reason.h -FILE 4402 f:\sp\public\sdk\inc\wincon.h -FILE 4403 f:\sp\public\sdk\inc\ddbanned.h -FILE 4404 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4405 f:\sp\public\sdk\inc\pshpack2.h -FILE 4406 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4407 f:\sp\public\sdk\inc\mcx.h -FILE 4408 f:\sp\public\sdk\inc\winuser.h -FILE 4409 f:\sp\public\sdk\inc\winnls.h -FILE 4410 f:\sp\public\sdk\inc\guiddef.h -FILE 4411 f:\sp\public\sdk\inc\specstrings.h -FILE 4412 f:\sp\public\sdk\inc\basetsd.h -FILE 4413 f:\sp\public\sdk\inc\stralign.h -FILE 4414 f:\sp\public\sdk\inc\tvout.h -FILE 4415 f:\sp\public\sdk\inc\winsvc.h -FILE 4416 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4417 f:\sp\public\sdk\inc\wingdi.h -FILE 4418 f:\sp\public\sdk\inc\pshpack4.h -FILE 4419 f:\sp\public\sdk\inc\poppack.h -FILE 4420 f:\sp\public\sdk\inc\winnetwk.h -FILE 4421 f:\sp\public\sdk\inc\imm.h -FILE 4422 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4423 f:\sp\public\sdk\inc\windef.h -FILE 4424 f:\sp\public\sdk\inc\pshpack1.h -FILE 4425 f:\sp\public\sdk\inc\winver.h -FILE 4426 f:\sp\public\sdk\inc\windows.h -FILE 4427 f:\sp\public\sdk\inc\winnt.h -FILE 4428 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4429 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4430 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4431 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4432 f:\sp\public\sdk\inc\winreg.h -FILE 4433 f:\sp\public\sdk\inc\winbase.h -FILE 4434 f:\sp\vctools\crt_bld\self_x86\crt\src\intel\loadcfg.c -FILE 4435 f:\sp\public\sdk\inc\winerror.h -FILE 4436 f:\sp\public\sdk\inc\pshpack8.h -FILE 4437 f:\sp\public\sdk\inc\reason.h -FILE 4438 f:\sp\public\sdk\inc\wincon.h -FILE 4439 f:\sp\public\sdk\inc\ddbanned.h -FILE 4440 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4441 f:\sp\public\sdk\inc\pshpack2.h -FILE 4442 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4443 f:\sp\public\sdk\inc\mcx.h -FILE 4444 f:\sp\public\sdk\inc\winuser.h -FILE 4445 f:\sp\public\sdk\inc\winnls.h -FILE 4446 f:\sp\public\sdk\inc\guiddef.h -FILE 4447 f:\sp\public\sdk\inc\specstrings.h -FILE 4448 f:\sp\public\sdk\inc\basetsd.h -FILE 4449 f:\sp\public\sdk\inc\stralign.h -FILE 4450 f:\sp\public\sdk\inc\tvout.h -FILE 4451 f:\sp\public\sdk\inc\winsvc.h -FILE 4452 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4453 f:\sp\public\sdk\inc\wingdi.h -FILE 4454 f:\sp\public\sdk\inc\pshpack4.h -FILE 4455 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\misc\i386\exsup4.asm -FILE 4456 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\h\exsup.inc -FILE 4457 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\misc\i386\exsup.asm -FILE 4458 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\h\pversion.inc -FILE 4459 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\h\cmacros.inc -FILE 4460 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\h\exsup.inc -FILE 4461 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\misc\i386\nlgsupp.asm -FILE 4462 f:\sp\public\sdk\inc\ntldr.h -FILE 4463 f:\sp\public\sdk\inc\ntpoapi.h -FILE 4464 f:\sp\public\sdk\inc\ntexapi.h -FILE 4465 f:\sp\public\sdk\inc\pshpack1.h -FILE 4466 f:\sp\public\sdk\inc\pshpack8.h -FILE 4467 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 4468 f:\sp\public\sdk\inc\ntdef.h -FILE 4469 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 4470 f:\sp\public\sdk\inc\mce.h -FILE 4471 f:\sp\public\sdk\inc\poppack.h -FILE 4472 f:\sp\public\sdk\inc\ntimage.h -FILE 4473 f:\sp\public\sdk\inc\pshpack2.h -FILE 4474 f:\sp\public\sdk\inc\ntpsapi.h -FILE 4475 f:\sp\public\sdk\inc\nti386.h -FILE 4476 f:\sp\public\sdk\inc\nt.h -FILE 4477 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 4478 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 4479 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 4480 f:\sp\public\sdk\inc\specstrings.h -FILE 4481 f:\sp\public\sdk\inc\basetsd.h -FILE 4482 f:\sp\public\sdk\inc\ntxcapi.h -FILE 4483 f:\sp\public\sdk\inc\guiddef.h -FILE 4484 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\misc\i386\chandler4.c -FILE 4485 f:\sp\public\sdk\inc\ntstatus.h -FILE 4486 f:\sp\public\sdk\inc\ntkeapi.h -FILE 4487 f:\sp\public\sdk\inc\ntconfig.h -FILE 4488 f:\sp\public\sdk\inc\ntregapi.h -FILE 4489 f:\sp\public\sdk\inc\ntmmapi.h -FILE 4490 f:\sp\public\sdk\inc\ntobapi.h -FILE 4491 f:\sp\public\sdk\inc\nxi386.h -FILE 4492 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\process.h -FILE 4493 f:\sp\public\sdk\inc\ntioapi.h -FILE 4494 f:\sp\public\sdk\inc\devioctl.h -FILE 4495 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 4496 f:\sp\public\sdk\inc\ntseapi.h -FILE 4497 f:\sp\public\sdk\inc\ddbanned.h -FILE 4498 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 4499 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 4500 f:\sp\public\sdk\inc\ntnls.h -FILE 4501 f:\sp\public\sdk\inc\ntelfapi.h -FILE 4502 f:\sp\public\sdk\inc\pshpack4.h -FILE 4503 f:\sp\public\sdk\inc\ntiolog.h -FILE 4504 f:\sp\public\sdk\inc\ntlpcapi.h -FILE 4505 f:\sp\public\sdk\inc\ntpnpapi.h -FILE 4506 f:\sp\public\sdk\inc\cfg.h -FILE 4507 f:\sp\public\sdk\inc\pebteb.h -FILE 4508 f:\sp\public\sdk\inc\wincon.h -FILE 4509 f:\sp\public\sdk\inc\imm.h -FILE 4510 f:\sp\public\sdk\inc\winbase.h -FILE 4511 f:\sp\public\sdk\inc\wingdi.h -FILE 4512 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4513 f:\sp\public\sdk\inc\winver.h -FILE 4514 f:\sp\public\sdk\inc\pshpack2.h -FILE 4515 f:\sp\public\sdk\inc\reason.h -FILE 4516 f:\sp\vctools\crt_bld\self_x86\crt\src\mbdata.h -FILE 4517 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4518 f:\sp\vctools\crt_bld\self_x86\crt\src\mbsnbico.c -FILE 4519 f:\sp\public\sdk\inc\specstrings.h -FILE 4520 f:\sp\public\sdk\inc\basetsd.h -FILE 4521 f:\sp\public\sdk\inc\pshpack4.h -FILE 4522 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 4523 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h -FILE 4524 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4525 f:\sp\public\sdk\inc\winnetwk.h -FILE 4526 f:\sp\public\sdk\inc\stralign.h -FILE 4527 f:\sp\public\sdk\inc\poppack.h -FILE 4528 f:\sp\public\sdk\inc\winsvc.h -FILE 4529 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4530 f:\sp\public\sdk\inc\windef.h -FILE 4531 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 4532 f:\sp\public\sdk\inc\winuser.h -FILE 4533 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4534 f:\sp\public\sdk\inc\windows.h -FILE 4535 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4536 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4537 f:\sp\public\sdk\inc\mcx.h -FILE 4538 f:\sp\public\sdk\inc\pshpack8.h -FILE 4539 f:\sp\public\sdk\inc\guiddef.h -FILE 4540 f:\sp\public\sdk\inc\winnt.h -FILE 4541 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4542 f:\sp\public\sdk\inc\winnls.h -FILE 4543 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4544 f:\sp\public\sdk\inc\pshpack1.h -FILE 4545 f:\sp\public\sdk\inc\winerror.h -FILE 4546 f:\sp\public\sdk\inc\winreg.h -FILE 4547 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4548 f:\sp\public\sdk\inc\ddbanned.h -FILE 4549 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4550 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4551 f:\sp\public\sdk\inc\tvout.h -FILE 4552 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4553 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4554 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 4555 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 4556 f:\sp\public\sdk\inc\wincon.h -FILE 4557 f:\sp\public\sdk\inc\imm.h -FILE 4558 f:\sp\public\sdk\inc\winbase.h -FILE 4559 f:\sp\public\sdk\inc\wingdi.h -FILE 4560 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h -FILE 4561 f:\sp\public\sdk\inc\winver.h -FILE 4562 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4563 f:\sp\public\sdk\inc\windows.h -FILE 4564 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4565 f:\sp\public\sdk\inc\pshpack2.h -FILE 4566 f:\sp\public\sdk\inc\reason.h -FILE 4567 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 4568 f:\sp\vctools\crt_bld\self_x86\crt\src\mbschr.c -FILE 4569 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4570 f:\sp\public\sdk\inc\specstrings.h -FILE 4571 f:\sp\public\sdk\inc\basetsd.h -FILE 4572 f:\sp\public\sdk\inc\pshpack4.h -FILE 4573 f:\sp\public\sdk\inc\winnetwk.h -FILE 4574 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4575 f:\sp\public\sdk\inc\stralign.h -FILE 4576 f:\sp\public\sdk\inc\poppack.h -FILE 4577 f:\sp\public\sdk\inc\winsvc.h -FILE 4578 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4579 f:\sp\public\sdk\inc\windef.h -FILE 4580 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4581 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4582 f:\sp\public\sdk\inc\winuser.h -FILE 4583 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4584 f:\sp\public\sdk\inc\mcx.h -FILE 4585 f:\sp\public\sdk\inc\pshpack8.h -FILE 4586 f:\sp\public\sdk\inc\guiddef.h -FILE 4587 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 4588 f:\sp\public\sdk\inc\winnt.h -FILE 4589 f:\sp\public\sdk\inc\winnls.h -FILE 4590 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4591 f:\sp\public\sdk\inc\pshpack1.h -FILE 4592 f:\sp\public\sdk\inc\winerror.h -FILE 4593 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 4594 f:\sp\public\sdk\inc\winreg.h -FILE 4595 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4596 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 4597 f:\sp\public\sdk\inc\ddbanned.h -FILE 4598 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4599 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4600 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4601 f:\sp\public\sdk\inc\tvout.h -FILE 4602 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4603 f:\sp\vctools\crt_bld\self_x86\crt\src\mbdata.h -FILE 4604 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 4605 f:\sp\public\sdk\inc\wincon.h -FILE 4606 f:\sp\public\sdk\inc\imm.h -FILE 4607 f:\sp\public\sdk\inc\winbase.h -FILE 4608 f:\sp\public\sdk\inc\wingdi.h -FILE 4609 f:\sp\public\sdk\inc\winver.h -FILE 4610 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 4611 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4612 f:\sp\public\sdk\inc\pshpack2.h -FILE 4613 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 4614 f:\sp\public\sdk\inc\reason.h -FILE 4615 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.c -FILE 4616 f:\sp\public\sdk\inc\specstrings.h -FILE 4617 f:\sp\public\sdk\inc\basetsd.h -FILE 4618 f:\sp\public\sdk\inc\pshpack4.h -FILE 4619 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 4620 f:\sp\public\sdk\inc\winnetwk.h -FILE 4621 f:\sp\public\sdk\inc\stralign.h -FILE 4622 f:\sp\public\sdk\inc\poppack.h -FILE 4623 f:\sp\public\sdk\inc\winsvc.h -FILE 4624 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4625 f:\sp\public\sdk\inc\windef.h -FILE 4626 f:\sp\public\sdk\inc\winuser.h -FILE 4627 f:\sp\public\sdk\inc\windows.h -FILE 4628 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4629 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4630 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4631 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4632 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4633 f:\sp\public\sdk\inc\mcx.h -FILE 4634 f:\sp\public\sdk\inc\pshpack8.h -FILE 4635 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4636 f:\sp\public\sdk\inc\guiddef.h -FILE 4637 f:\sp\public\sdk\inc\winnt.h -FILE 4638 f:\sp\public\sdk\inc\winnls.h -FILE 4639 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4640 f:\sp\vctools\crt_bld\self_x86\crt\src\mbdata.h -FILE 4641 f:\sp\public\sdk\inc\pshpack1.h -FILE 4642 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 4643 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 4644 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4645 f:\sp\public\sdk\inc\winerror.h -FILE 4646 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h -FILE 4647 f:\sp\public\sdk\inc\winreg.h -FILE 4648 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4649 f:\sp\public\sdk\inc\ddbanned.h -FILE 4650 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 4651 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4652 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h -FILE 4653 f:\sp\public\sdk\inc\tvout.h -FILE 4654 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4655 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4656 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4657 f:\sp\public\sdk\inc\wincon.h -FILE 4658 f:\sp\public\sdk\inc\imm.h -FILE 4659 f:\sp\public\sdk\inc\winbase.h -FILE 4660 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4661 f:\sp\public\sdk\inc\wingdi.h -FILE 4662 f:\sp\public\sdk\inc\windef.h -FILE 4663 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h -FILE 4664 f:\sp\public\sdk\inc\winver.h -FILE 4665 f:\sp\public\sdk\inc\pshpack2.h -FILE 4666 f:\sp\public\sdk\inc\reason.h -FILE 4667 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 4668 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4669 f:\sp\vctools\crt_bld\self_x86\crt\src\ismbbyte.c -FILE 4670 f:\sp\public\sdk\inc\winnt.h -FILE 4671 f:\sp\public\sdk\inc\specstrings.h -FILE 4672 f:\sp\public\sdk\inc\basetsd.h -FILE 4673 f:\sp\public\sdk\inc\pshpack4.h -FILE 4674 f:\sp\public\sdk\inc\winnetwk.h -FILE 4675 f:\sp\public\sdk\inc\stralign.h -FILE 4676 f:\sp\public\sdk\inc\poppack.h -FILE 4677 f:\sp\public\sdk\inc\winsvc.h -FILE 4678 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4679 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4680 f:\sp\public\sdk\inc\winuser.h -FILE 4681 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4682 f:\sp\public\sdk\inc\mcx.h -FILE 4683 f:\sp\public\sdk\inc\pshpack8.h -FILE 4684 f:\sp\public\sdk\inc\guiddef.h -FILE 4685 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4686 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 4687 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4688 f:\sp\public\sdk\inc\windows.h -FILE 4689 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4690 f:\sp\public\sdk\inc\winnls.h -FILE 4691 f:\sp\public\sdk\inc\pshpack1.h -FILE 4692 f:\sp\public\sdk\inc\winerror.h -FILE 4693 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 4694 f:\sp\public\sdk\inc\winreg.h -FILE 4695 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4696 f:\sp\public\sdk\inc\ddbanned.h -FILE 4697 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4698 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4699 f:\sp\public\sdk\inc\tvout.h -FILE 4700 f:\sp\vctools\crt_bld\self_x86\crt\src\mbdata.h -FILE 4701 f:\sp\public\sdk\inc\winnetwk.h -FILE 4702 f:\sp\public\sdk\inc\imm.h -FILE 4703 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h -FILE 4704 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4705 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 4706 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4707 f:\sp\public\sdk\inc\windef.h -FILE 4708 f:\sp\public\sdk\inc\pshpack1.h -FILE 4709 f:\sp\public\sdk\inc\winver.h -FILE 4710 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 4711 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4712 f:\sp\public\sdk\inc\winnt.h -FILE 4713 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4714 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4715 f:\sp\public\sdk\inc\winreg.h -FILE 4716 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4717 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4718 f:\sp\public\sdk\inc\winbase.h -FILE 4719 f:\sp\public\sdk\inc\winerror.h -FILE 4720 f:\sp\public\sdk\inc\pshpack8.h -FILE 4721 f:\sp\vctools\crt_bld\self_x86\crt\src\putwch.c -FILE 4722 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4723 f:\sp\public\sdk\inc\reason.h -FILE 4724 f:\sp\public\sdk\inc\wincon.h -FILE 4725 f:\sp\public\sdk\inc\pshpack2.h -FILE 4726 f:\sp\public\sdk\inc\mcx.h -FILE 4727 f:\sp\public\sdk\inc\winuser.h -FILE 4728 f:\sp\public\sdk\inc\winnls.h -FILE 4729 f:\sp\public\sdk\inc\guiddef.h -FILE 4730 f:\sp\public\sdk\inc\stralign.h -FILE 4731 f:\sp\public\sdk\inc\ddbanned.h -FILE 4732 f:\sp\public\sdk\inc\specstrings.h -FILE 4733 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h -FILE 4734 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4735 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4736 f:\sp\public\sdk\inc\basetsd.h -FILE 4737 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 4738 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4739 f:\sp\public\sdk\inc\windows.h -FILE 4740 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4741 f:\sp\public\sdk\inc\tvout.h -FILE 4742 f:\sp\public\sdk\inc\winsvc.h -FILE 4743 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4744 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4745 f:\sp\public\sdk\inc\wingdi.h -FILE 4746 f:\sp\public\sdk\inc\pshpack4.h -FILE 4747 f:\sp\vctools\crt_bld\self_x86\crt\src\conio.h -FILE 4748 f:\sp\public\sdk\inc\poppack.h -FILE 4749 f:\sp\public\sdk\inc\reason.h -FILE 4750 f:\sp\public\sdk\inc\wincon.h -FILE 4751 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h -FILE 4752 f:\sp\public\sdk\inc\poppack.h -FILE 4753 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4754 f:\sp\public\sdk\inc\mcx.h -FILE 4755 f:\sp\public\sdk\inc\winuser.h -FILE 4756 f:\sp\public\sdk\inc\winnls.h -FILE 4757 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h -FILE 4758 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4759 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4760 f:\sp\public\sdk\inc\stralign.h -FILE 4761 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4762 f:\sp\public\sdk\inc\windef.h -FILE 4763 f:\sp\public\sdk\inc\tvout.h -FILE 4764 f:\sp\public\sdk\inc\winsvc.h -FILE 4765 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 4766 f:\sp\public\sdk\inc\wingdi.h -FILE 4767 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 4768 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4769 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4770 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4771 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4772 f:\sp\public\sdk\inc\winnt.h -FILE 4773 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4774 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4775 f:\sp\public\sdk\inc\winnetwk.h -FILE 4776 f:\sp\public\sdk\inc\imm.h -FILE 4777 f:\sp\vctools\crt_bld\self_x86\crt\src\write.c -FILE 4778 f:\sp\public\sdk\inc\winbase.h -FILE 4779 f:\sp\public\sdk\inc\winerror.h -FILE 4780 f:\sp\public\sdk\inc\pshpack1.h -FILE 4781 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 4782 f:\sp\public\sdk\inc\pshpack8.h -FILE 4783 f:\sp\public\sdk\inc\winver.h -FILE 4784 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h -FILE 4785 f:\sp\public\sdk\inc\ddbanned.h -FILE 4786 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4787 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4788 f:\sp\public\sdk\inc\pshpack2.h -FILE 4789 f:\sp\public\sdk\inc\winreg.h -FILE 4790 f:\sp\public\sdk\inc\guiddef.h -FILE 4791 f:\sp\public\sdk\inc\windows.h -FILE 4792 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4793 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 4794 f:\sp\public\sdk\inc\specstrings.h -FILE 4795 f:\sp\public\sdk\inc\basetsd.h -FILE 4796 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4797 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4798 f:\sp\public\sdk\inc\pshpack4.h -FILE 4799 f:\sp\public\sdk\inc\reason.h -FILE 4800 f:\sp\public\sdk\inc\wincon.h -FILE 4801 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4802 f:\sp\public\sdk\inc\poppack.h -FILE 4803 f:\sp\public\sdk\inc\mcx.h -FILE 4804 f:\sp\public\sdk\inc\winuser.h -FILE 4805 f:\sp\public\sdk\inc\winnls.h -FILE 4806 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4807 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4808 f:\sp\public\sdk\inc\stralign.h -FILE 4809 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4810 f:\sp\public\sdk\inc\windef.h -FILE 4811 f:\sp\public\sdk\inc\tvout.h -FILE 4812 f:\sp\public\sdk\inc\winsvc.h -FILE 4813 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 4814 f:\sp\public\sdk\inc\wingdi.h -FILE 4815 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4816 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4817 f:\sp\public\sdk\inc\winnt.h -FILE 4818 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4819 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4820 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h -FILE 4821 f:\sp\public\sdk\inc\winnetwk.h -FILE 4822 f:\sp\public\sdk\inc\imm.h -FILE 4823 f:\sp\vctools\crt_bld\self_x86\crt\src\fcntl.h -FILE 4824 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 4825 f:\sp\vctools\crt_bld\self_x86\crt\src\osfinfo.c -FILE 4826 f:\sp\public\sdk\inc\winbase.h -FILE 4827 f:\sp\public\sdk\inc\winerror.h -FILE 4828 f:\sp\public\sdk\inc\pshpack1.h -FILE 4829 f:\sp\public\sdk\inc\pshpack8.h -FILE 4830 f:\sp\public\sdk\inc\winver.h -FILE 4831 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4832 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h -FILE 4833 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4834 f:\sp\public\sdk\inc\ddbanned.h -FILE 4835 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4836 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4837 f:\sp\public\sdk\inc\pshpack2.h -FILE 4838 f:\sp\public\sdk\inc\winreg.h -FILE 4839 f:\sp\public\sdk\inc\guiddef.h -FILE 4840 f:\sp\public\sdk\inc\windows.h -FILE 4841 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4842 f:\sp\public\sdk\inc\specstrings.h -FILE 4843 f:\sp\public\sdk\inc\basetsd.h -FILE 4844 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4845 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4846 f:\sp\public\sdk\inc\pshpack4.h -FILE 4847 f:\sp\public\sdk\inc\reason.h -FILE 4848 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4849 f:\sp\public\sdk\inc\wincon.h -FILE 4850 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4851 f:\sp\public\sdk\inc\poppack.h -FILE 4852 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4853 f:\sp\public\sdk\inc\mcx.h -FILE 4854 f:\sp\public\sdk\inc\winuser.h -FILE 4855 f:\sp\public\sdk\inc\winnls.h -FILE 4856 f:\sp\public\sdk\inc\stralign.h -FILE 4857 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4858 f:\sp\public\sdk\inc\windef.h -FILE 4859 f:\sp\public\sdk\inc\tvout.h -FILE 4860 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h -FILE 4861 f:\sp\public\sdk\inc\winsvc.h -FILE 4862 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4863 f:\sp\public\sdk\inc\wingdi.h -FILE 4864 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 4865 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4866 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4867 f:\sp\public\sdk\inc\winnt.h -FILE 4868 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4869 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4870 f:\sp\public\sdk\inc\winnetwk.h -FILE 4871 f:\sp\public\sdk\inc\imm.h -FILE 4872 f:\sp\vctools\crt_bld\self_x86\crt\src\lseeki64.c -FILE 4873 f:\sp\public\sdk\inc\winbase.h -FILE 4874 f:\sp\public\sdk\inc\winerror.h -FILE 4875 f:\sp\public\sdk\inc\pshpack1.h -FILE 4876 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h -FILE 4877 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 4878 f:\sp\public\sdk\inc\pshpack8.h -FILE 4879 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4880 f:\sp\public\sdk\inc\winver.h -FILE 4881 f:\sp\public\sdk\inc\ddbanned.h -FILE 4882 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4883 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4884 f:\sp\public\sdk\inc\pshpack2.h -FILE 4885 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4886 f:\sp\public\sdk\inc\winreg.h -FILE 4887 f:\sp\public\sdk\inc\guiddef.h -FILE 4888 f:\sp\public\sdk\inc\windows.h -FILE 4889 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4890 f:\sp\public\sdk\inc\specstrings.h -FILE 4891 f:\sp\public\sdk\inc\basetsd.h -FILE 4892 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4893 f:\sp\public\sdk\inc\pshpack4.h -FILE 4894 f:\sp\public\sdk\inc\pshpack4.h -FILE 4895 f:\sp\public\sdk\inc\poppack.h -FILE 4896 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h -FILE 4897 f:\sp\public\sdk\inc\winnetwk.h -FILE 4898 f:\sp\public\sdk\inc\imm.h -FILE 4899 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4900 f:\sp\public\sdk\inc\windef.h -FILE 4901 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4902 f:\sp\public\sdk\inc\pshpack1.h -FILE 4903 f:\sp\public\sdk\inc\winver.h -FILE 4904 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h -FILE 4905 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4906 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4907 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4908 f:\sp\public\sdk\inc\winnt.h -FILE 4909 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4910 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4911 f:\sp\public\sdk\inc\winreg.h -FILE 4912 f:\sp\vctools\crt_bld\self_x86\crt\src\isatty.c -FILE 4913 f:\sp\public\sdk\inc\winbase.h -FILE 4914 f:\sp\public\sdk\inc\winerror.h -FILE 4915 f:\sp\public\sdk\inc\pshpack8.h -FILE 4916 f:\sp\public\sdk\inc\reason.h -FILE 4917 f:\sp\public\sdk\inc\wincon.h -FILE 4918 f:\sp\public\sdk\inc\ddbanned.h -FILE 4919 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4920 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4921 f:\sp\public\sdk\inc\pshpack2.h -FILE 4922 f:\sp\public\sdk\inc\mcx.h -FILE 4923 f:\sp\public\sdk\inc\winuser.h -FILE 4924 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4925 f:\sp\public\sdk\inc\winnls.h -FILE 4926 f:\sp\public\sdk\inc\guiddef.h -FILE 4927 f:\sp\public\sdk\inc\windows.h -FILE 4928 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4929 f:\sp\public\sdk\inc\specstrings.h -FILE 4930 f:\sp\public\sdk\inc\basetsd.h -FILE 4931 f:\sp\public\sdk\inc\stralign.h -FILE 4932 f:\sp\public\sdk\inc\tvout.h -FILE 4933 f:\sp\public\sdk\inc\winsvc.h -FILE 4934 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4935 f:\sp\public\sdk\inc\wingdi.h -FILE 4936 f:\sp\public\sdk\inc\poppack.h -FILE 4937 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 4938 f:\sp\public\sdk\inc\winnetwk.h -FILE 4939 f:\sp\public\sdk\inc\imm.h -FILE 4940 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4941 f:\sp\public\sdk\inc\windef.h -FILE 4942 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4943 f:\sp\public\sdk\inc\pshpack1.h -FILE 4944 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h -FILE 4945 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 4946 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 4947 f:\sp\public\sdk\inc\winver.h -FILE 4948 f:\sp\public\sdk\inc\windows.h -FILE 4949 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4950 f:\sp\public\sdk\inc\winnt.h -FILE 4951 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4952 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4953 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4954 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4955 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4956 f:\sp\public\sdk\inc\winreg.h -FILE 4957 f:\sp\public\sdk\inc\winbase.h -FILE 4958 f:\sp\vctools\crt_bld\self_x86\crt\src\ioinit.c -FILE 4959 f:\sp\public\sdk\inc\winerror.h -FILE 4960 f:\sp\public\sdk\inc\pshpack8.h -FILE 4961 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4962 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4963 f:\sp\public\sdk\inc\reason.h -FILE 4964 f:\sp\public\sdk\inc\wincon.h -FILE 4965 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 4966 f:\sp\public\sdk\inc\ddbanned.h -FILE 4967 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4968 f:\sp\public\sdk\inc\pshpack2.h -FILE 4969 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4970 f:\sp\public\sdk\inc\mcx.h -FILE 4971 f:\sp\public\sdk\inc\winuser.h -FILE 4972 f:\sp\public\sdk\inc\winnls.h -FILE 4973 f:\sp\public\sdk\inc\guiddef.h -FILE 4974 f:\sp\public\sdk\inc\specstrings.h -FILE 4975 f:\sp\public\sdk\inc\basetsd.h -FILE 4976 f:\sp\public\sdk\inc\stralign.h -FILE 4977 f:\sp\public\sdk\inc\tvout.h -FILE 4978 f:\sp\public\sdk\inc\winsvc.h -FILE 4979 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4980 f:\sp\public\sdk\inc\wingdi.h -FILE 4981 f:\sp\public\sdk\inc\pshpack4.h -FILE 4982 f:\sp\public\sdk\inc\reason.h -FILE 4983 f:\sp\public\sdk\inc\wincon.h -FILE 4984 f:\sp\public\sdk\inc\pshpack2.h -FILE 4985 f:\sp\public\sdk\inc\mcx.h -FILE 4986 f:\sp\public\sdk\inc\winuser.h -FILE 4987 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4988 f:\sp\public\sdk\inc\winnls.h -FILE 4989 f:\sp\public\sdk\inc\guiddef.h -FILE 4990 f:\sp\public\sdk\inc\windows.h -FILE 4991 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4992 f:\sp\public\sdk\inc\specstrings.h -FILE 4993 f:\sp\public\sdk\inc\basetsd.h -FILE 4994 f:\sp\public\sdk\inc\stralign.h -FILE 4995 f:\sp\public\sdk\inc\tvout.h -FILE 4996 f:\sp\public\sdk\inc\winsvc.h -FILE 4997 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4998 f:\sp\public\sdk\inc\wingdi.h -FILE 4999 f:\sp\public\sdk\inc\pshpack4.h -FILE 5000 f:\sp\public\sdk\inc\poppack.h -FILE 5001 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h -FILE 5002 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 5003 f:\sp\public\sdk\inc\winnetwk.h -FILE 5004 f:\sp\public\sdk\inc\imm.h -FILE 5005 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 5006 f:\sp\public\sdk\inc\windef.h -FILE 5007 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 5008 f:\sp\vctools\crt_bld\self_x86\crt\src\initcon.c -FILE 5009 f:\sp\public\sdk\inc\pshpack1.h -FILE 5010 f:\sp\public\sdk\inc\winver.h -FILE 5011 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 5012 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 5013 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 5014 f:\sp\public\sdk\inc\winnt.h -FILE 5015 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 5016 f:\sp\public\sdk\inc\ddbanned.h -FILE 5017 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 5018 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 5019 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 5020 f:\sp\public\sdk\inc\winreg.h -FILE 5021 f:\sp\public\sdk\inc\winbase.h -FILE 5022 f:\sp\public\sdk\inc\winerror.h -FILE 5023 f:\sp\public\sdk\inc\pshpack8.h -FILE 5024 f:\sp\public\sdk\inc\poppack.h -FILE 5025 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h -FILE 5026 f:\sp\public\sdk\inc\winnetwk.h -FILE 5027 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 5028 f:\sp\public\sdk\inc\imm.h -FILE 5029 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 5030 f:\sp\public\sdk\inc\windef.h -FILE 5031 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 5032 f:\sp\public\sdk\inc\pshpack1.h -FILE 5033 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 5034 f:\sp\public\sdk\inc\winver.h -FILE 5035 f:\sp\public\sdk\inc\windows.h -FILE 5036 f:\sp\public\sdk\inc\winnt.h -FILE 5037 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 5038 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 5039 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 5040 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 5041 f:\sp\public\sdk\inc\winreg.h -FILE 5042 f:\sp\public\sdk\inc\winbase.h -FILE 5043 f:\sp\vctools\crt_bld\self_x86\crt\src\commit.c -FILE 5044 f:\sp\public\sdk\inc\winerror.h -FILE 5045 f:\sp\public\sdk\inc\pshpack8.h -FILE 5046 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 5047 f:\sp\public\sdk\inc\reason.h -FILE 5048 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h -FILE 5049 f:\sp\public\sdk\inc\wincon.h -FILE 5050 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 5051 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 5052 f:\sp\public\sdk\inc\ddbanned.h -FILE 5053 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 5054 f:\sp\public\sdk\inc\pshpack2.h -FILE 5055 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 5056 f:\sp\public\sdk\inc\mcx.h -FILE 5057 f:\sp\public\sdk\inc\winuser.h -FILE 5058 f:\sp\public\sdk\inc\winnls.h -FILE 5059 f:\sp\public\sdk\inc\guiddef.h -FILE 5060 f:\sp\public\sdk\inc\specstrings.h -FILE 5061 f:\sp\public\sdk\inc\basetsd.h -FILE 5062 f:\sp\public\sdk\inc\stralign.h -FILE 5063 f:\sp\public\sdk\inc\tvout.h -FILE 5064 f:\sp\public\sdk\inc\winsvc.h -FILE 5065 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 5066 f:\sp\public\sdk\inc\wingdi.h -FILE 5067 f:\sp\public\sdk\inc\pshpack4.h -FILE 5068 f:\sp\public\sdk\inc\reason.h -FILE 5069 f:\sp\public\sdk\inc\wincon.h -FILE 5070 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h -FILE 5071 f:\sp\public\sdk\inc\poppack.h -FILE 5072 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 5073 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 5074 f:\sp\public\sdk\inc\mcx.h -FILE 5075 f:\sp\public\sdk\inc\winuser.h -FILE 5076 f:\sp\public\sdk\inc\winnls.h -FILE 5077 f:\sp\public\sdk\inc\stralign.h -FILE 5078 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 5079 f:\sp\public\sdk\inc\windef.h -FILE 5080 f:\sp\public\sdk\inc\tvout.h -FILE 5081 f:\sp\public\sdk\inc\winsvc.h -FILE 5082 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 5083 f:\sp\public\sdk\inc\wingdi.h -FILE 5084 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h -FILE 5085 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 5086 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 5087 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 5088 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 5089 f:\sp\public\sdk\inc\winnt.h -FILE 5090 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 5091 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 5092 f:\sp\public\sdk\inc\winnetwk.h -FILE 5093 f:\sp\public\sdk\inc\imm.h -FILE 5094 f:\sp\vctools\crt_bld\self_x86\crt\src\close.c -FILE 5095 f:\sp\public\sdk\inc\winbase.h -FILE 5096 f:\sp\public\sdk\inc\winerror.h -FILE 5097 f:\sp\public\sdk\inc\pshpack1.h -FILE 5098 f:\sp\public\sdk\inc\pshpack8.h -FILE 5099 f:\sp\public\sdk\inc\winver.h -FILE 5100 f:\sp\public\sdk\inc\ddbanned.h -FILE 5101 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 5102 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 5103 f:\sp\public\sdk\inc\pshpack2.h -FILE 5104 f:\sp\public\sdk\inc\winreg.h -FILE 5105 f:\sp\public\sdk\inc\guiddef.h -FILE 5106 f:\sp\public\sdk\inc\windows.h -FILE 5107 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 5108 f:\sp\public\sdk\inc\specstrings.h -FILE 5109 f:\sp\public\sdk\inc\basetsd.h -FILE 5110 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 5111 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 5112 f:\sp\public\sdk\inc\pshpack4.h -FILE 5113 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\ulldvrm.asm -FILE 5114 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 5115 F:\SP\vctools\crt_bld\SELF_X86\crt\src\mm.inc -FILE 5116 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\llmul.asm -FILE 5117 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 5118 F:\SP\vctools\crt_bld\SELF_X86\crt\src\mm.inc -FILE 5119 f:\sp\vctools\crt_bld\self_x86\crt\src\use_ansi.h -FILE 5120 f:\sp\vctools\crt_bld\self_x86\crt\src\new -FILE 5121 f:\sp\vctools\crt_bld\self_x86\crt\src\exception -FILE 5122 f:\sp\vctools\crt_bld\self_x86\crt\src\xstddef -FILE 5123 f:\sp\vctools\crt_bld\self_x86\crt\src\new.cpp -FILE 5124 f:\sp\vctools\crt_bld\self_x86\crt\src\cstddef -FILE 5125 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 5126 f:\sp\vctools\crt_bld\self_x86\crt\src\eh.h -FILE 5127 f:\sp\vctools\crt_bld\self_x86\crt\src\cstdlib -FILE 5128 f:\sp\vctools\crt_bld\self_x86\crt\src\yvals.h -FILE 5129 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 5130 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 5131 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 5132 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 5133 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 5134 f:\sp\public\sdk\inc\ddbanned.h -FILE 5135 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 5136 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 5137 f:\sp\public\sdk\inc\poppack.h -FILE 5138 f:\sp\public\sdk\inc\winnetwk.h -FILE 5139 f:\sp\public\sdk\inc\imm.h -FILE 5140 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 5141 f:\sp\public\sdk\inc\windef.h -FILE 5142 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 5143 f:\sp\public\sdk\inc\pshpack1.h -FILE 5144 f:\sp\public\sdk\inc\winver.h -FILE 5145 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 5146 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 5147 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 5148 f:\sp\public\sdk\inc\winnt.h -FILE 5149 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 5150 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 5151 f:\sp\public\sdk\inc\winreg.h -FILE 5152 f:\sp\vctools\crt_bld\self_x86\crt\src\_newmode.c -FILE 5153 f:\sp\public\sdk\inc\winbase.h -FILE 5154 f:\sp\public\sdk\inc\winerror.h -FILE 5155 f:\sp\public\sdk\inc\pshpack8.h -FILE 5156 f:\sp\public\sdk\inc\reason.h -FILE 5157 f:\sp\public\sdk\inc\wincon.h -FILE 5158 f:\sp\public\sdk\inc\ddbanned.h -FILE 5159 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 5160 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 5161 f:\sp\public\sdk\inc\pshpack2.h -FILE 5162 f:\sp\public\sdk\inc\mcx.h -FILE 5163 f:\sp\public\sdk\inc\winuser.h -FILE 5164 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 5165 f:\sp\public\sdk\inc\winnls.h -FILE 5166 f:\sp\public\sdk\inc\guiddef.h -FILE 5167 f:\sp\public\sdk\inc\windows.h -FILE 5168 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 5169 f:\sp\public\sdk\inc\specstrings.h -FILE 5170 f:\sp\public\sdk\inc\basetsd.h -FILE 5171 f:\sp\public\sdk\inc\stralign.h -FILE 5172 f:\sp\public\sdk\inc\tvout.h -FILE 5173 f:\sp\public\sdk\inc\winsvc.h -FILE 5174 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 5175 f:\sp\public\sdk\inc\wingdi.h -FILE 5176 f:\sp\public\sdk\inc\pshpack4.h -FILE 5177 f:\sp\vctools\crt_bld\self_x86\crt\src\new.h -FILE 5178 f:\sp\public\sdk\inc\winerror.h -FILE 5179 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcsup.h -FILE 5180 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcapi.h -FILE 5181 f:\sp\public\sdk\inc\winreg.h -FILE 5182 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 5183 f:\sp\public\sdk\inc\tvout.h -FILE 5184 f:\sp\vctools\crt_bld\self_x86\crt\src\delete.cpp -FILE 5185 f:\sp\public\sdk\inc\wincon.h -FILE 5186 f:\sp\public\sdk\inc\imm.h -FILE 5187 f:\sp\public\sdk\inc\winbase.h -FILE 5188 f:\sp\public\sdk\inc\wingdi.h -FILE 5189 f:\sp\public\sdk\inc\winver.h -FILE 5190 f:\sp\public\sdk\inc\windows.h -FILE 5191 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 5192 f:\sp\public\sdk\inc\pshpack2.h -FILE 5193 f:\sp\public\sdk\inc\reason.h -FILE 5194 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 5195 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 5196 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 5197 f:\sp\public\sdk\inc\specstrings.h -FILE 5198 f:\sp\public\sdk\inc\basetsd.h -FILE 5199 f:\sp\public\sdk\inc\pshpack4.h -FILE 5200 f:\sp\public\sdk\inc\winnetwk.h -FILE 5201 f:\sp\public\sdk\inc\stralign.h -FILE 5202 f:\sp\public\sdk\inc\poppack.h -FILE 5203 f:\sp\public\sdk\inc\winsvc.h -FILE 5204 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 5205 f:\sp\public\sdk\inc\windef.h -FILE 5206 f:\sp\public\sdk\inc\winuser.h -FILE 5207 f:\sp\public\sdk\inc\mcx.h -FILE 5208 f:\sp\public\sdk\inc\pshpack8.h -FILE 5209 f:\sp\public\sdk\inc\ddbanned.h -FILE 5210 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 5211 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 5212 f:\sp\public\sdk\inc\guiddef.h -FILE 5213 f:\sp\public\sdk\inc\winnt.h -FILE 5214 f:\sp\public\sdk\inc\winnls.h -FILE 5215 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 5216 f:\sp\public\sdk\inc\pshpack1.h -FILE 5217 f:\sp\public\sdk\inc\tvout.h -FILE 5218 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 5219 f:\sp\vctools\crt_bld\self_x86\crt\src\process.h -FILE 5220 f:\sp\public\sdk\inc\wincon.h -FILE 5221 f:\sp\public\sdk\inc\imm.h -FILE 5222 f:\sp\public\sdk\inc\winbase.h -FILE 5223 f:\sp\public\sdk\inc\wingdi.h -FILE 5224 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 5225 f:\sp\public\sdk\inc\winver.h -FILE 5226 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 5227 f:\sp\public\sdk\inc\windows.h -FILE 5228 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 5229 f:\sp\public\sdk\inc\pshpack2.h -FILE 5230 f:\sp\vctools\crt_bld\self_x86\crt\src\handler.cpp -FILE 5231 f:\sp\public\sdk\inc\reason.h -FILE 5232 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 5233 f:\sp\public\sdk\inc\specstrings.h -FILE 5234 f:\sp\public\sdk\inc\basetsd.h -FILE 5235 f:\sp\public\sdk\inc\pshpack4.h -FILE 5236 f:\sp\public\sdk\inc\winnetwk.h -FILE 5237 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 5238 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 5239 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 5240 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 5241 f:\sp\public\sdk\inc\stralign.h -FILE 5242 f:\sp\public\sdk\inc\poppack.h -FILE 5243 f:\sp\public\sdk\inc\winsvc.h -FILE 5244 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 5245 f:\sp\public\sdk\inc\windef.h -FILE 5246 f:\sp\public\sdk\inc\winuser.h -FILE 5247 f:\sp\public\sdk\inc\mcx.h -FILE 5248 f:\sp\public\sdk\inc\pshpack8.h -FILE 5249 f:\sp\public\sdk\inc\guiddef.h -FILE 5250 f:\sp\public\sdk\inc\winnt.h -FILE 5251 f:\sp\public\sdk\inc\winnls.h -FILE 5252 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 5253 f:\sp\public\sdk\inc\pshpack1.h -FILE 5254 f:\sp\public\sdk\inc\winerror.h -FILE 5255 f:\sp\public\sdk\inc\ddbanned.h -FILE 5256 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 5257 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 5258 f:\sp\public\sdk\inc\winreg.h -FILE 5259 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 5260 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 5261 f:\sp\vctools\crt_bld\self_x86\crt\src\new.h -FILE 5262 f:\sp\public\sdk\inc\winsvc.h -FILE 5263 f:\sp\public\sdk\inc\wingdi.h -FILE 5264 f:\sp\public\sdk\inc\pshpack4.h -FILE 5265 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 5266 f:\sp\public\sdk\inc\poppack.h -FILE 5267 f:\sp\public\sdk\inc\winnt.h -FILE 5268 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 5269 f:\sp\public\sdk\inc\winnetwk.h -FILE 5270 f:\sp\public\sdk\inc\imm.h -FILE 5271 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 5272 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 5273 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 5274 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 5275 f:\sp\public\sdk\inc\pshpack1.h -FILE 5276 f:\sp\public\sdk\inc\winver.h -FILE 5277 f:\sp\public\sdk\inc\guiddef.h -FILE 5278 f:\sp\public\sdk\inc\specstrings.h -FILE 5279 f:\sp\public\sdk\inc\basetsd.h -FILE 5280 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h -FILE 5281 f:\sp\vctools\crt_bld\self_x86\crt\src\sbheap.c -FILE 5282 f:\sp\public\sdk\inc\windows.h -FILE 5283 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 5284 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 5285 f:\sp\public\sdk\inc\winreg.h -FILE 5286 f:\sp\public\sdk\inc\winbase.h -FILE 5287 f:\sp\public\sdk\inc\winerror.h -FILE 5288 f:\sp\public\sdk\inc\pshpack8.h -FILE 5289 f:\sp\public\sdk\inc\ddbanned.h -FILE 5290 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 5291 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 5292 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 5293 f:\sp\public\sdk\inc\reason.h -FILE 5294 f:\sp\public\sdk\inc\wincon.h -FILE 5295 f:\sp\public\sdk\inc\pshpack2.h -FILE 5296 f:\sp\public\sdk\inc\mcx.h -FILE 5297 f:\sp\public\sdk\inc\winuser.h -FILE 5298 f:\sp\public\sdk\inc\winnls.h -FILE 5299 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 5300 f:\sp\public\sdk\inc\windef.h -FILE 5301 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 5302 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 5303 f:\sp\public\sdk\inc\stralign.h -FILE 5304 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 5305 f:\sp\public\sdk\inc\tvout.h -FILE 5306 f:\sp\public\sdk\inc\winver.h -FILE 5307 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcsup.h -FILE 5308 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcapi.h -FILE 5309 f:\sp\public\sdk\inc\guiddef.h -FILE 5310 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 5311 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 5312 f:\sp\public\sdk\inc\specstrings.h -FILE 5313 f:\sp\public\sdk\inc\basetsd.h -FILE 5314 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h -FILE 5315 f:\sp\public\sdk\inc\windows.h -FILE 5316 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 5317 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 5318 f:\sp\public\sdk\inc\winreg.h -FILE 5319 f:\sp\public\sdk\inc\winbase.h -FILE 5320 f:\sp\public\sdk\inc\winerror.h -FILE 5321 f:\sp\public\sdk\inc\pshpack8.h -FILE 5322 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 5323 f:\sp\public\sdk\inc\reason.h -FILE 5324 f:\sp\public\sdk\inc\wincon.h -FILE 5325 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 5326 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 5327 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 5328 f:\sp\public\sdk\inc\pshpack2.h -FILE 5329 f:\sp\public\sdk\inc\mcx.h -FILE 5330 f:\sp\public\sdk\inc\winuser.h -FILE 5331 f:\sp\public\sdk\inc\winnls.h -FILE 5332 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 5333 f:\sp\public\sdk\inc\windef.h -FILE 5334 f:\sp\public\sdk\inc\stralign.h -FILE 5335 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 5336 f:\sp\public\sdk\inc\tvout.h -FILE 5337 f:\sp\public\sdk\inc\winsvc.h -FILE 5338 f:\sp\vctools\crt_bld\self_x86\crt\src\realloc.c -FILE 5339 f:\sp\public\sdk\inc\wingdi.h -FILE 5340 f:\sp\public\sdk\inc\pshpack4.h -FILE 5341 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 5342 f:\sp\public\sdk\inc\poppack.h -FILE 5343 f:\sp\public\sdk\inc\winnt.h -FILE 5344 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 5345 f:\sp\public\sdk\inc\winnetwk.h -FILE 5346 f:\sp\public\sdk\inc\ddbanned.h -FILE 5347 f:\sp\public\sdk\inc\imm.h -FILE 5348 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 5349 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 5350 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 5351 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 5352 f:\sp\public\sdk\inc\pshpack1.h -FILE 5353 f:\sp\public\sdk\inc\pshpack2.h -FILE 5354 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h -FILE 5355 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 5356 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 5357 f:\sp\public\sdk\inc\mcx.h -FILE 5358 f:\sp\public\sdk\inc\winuser.h -FILE 5359 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 5360 f:\sp\public\sdk\inc\winnls.h -FILE 5361 f:\sp\public\sdk\inc\guiddef.h -FILE 5362 f:\sp\public\sdk\inc\windows.h -FILE 5363 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 5364 f:\sp\public\sdk\inc\specstrings.h -FILE 5365 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 5366 f:\sp\public\sdk\inc\basetsd.h -FILE 5367 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 5368 f:\sp\public\sdk\inc\stralign.h -FILE 5369 f:\sp\public\sdk\inc\tvout.h -FILE 5370 f:\sp\public\sdk\inc\winsvc.h -FILE 5371 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 5372 f:\sp\public\sdk\inc\wingdi.h -FILE 5373 f:\sp\public\sdk\inc\pshpack4.h -FILE 5374 f:\sp\public\sdk\inc\poppack.h -FILE 5375 f:\sp\public\sdk\inc\winnetwk.h -FILE 5376 f:\sp\public\sdk\inc\imm.h -FILE 5377 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 5378 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 5379 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 5380 f:\sp\public\sdk\inc\windef.h -FILE 5381 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 5382 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 5383 f:\sp\vctools\crt_bld\self_x86\crt\src\msize.c -FILE 5384 f:\sp\public\sdk\inc\pshpack1.h -FILE 5385 f:\sp\public\sdk\inc\winver.h -FILE 5386 f:\sp\public\sdk\inc\winnt.h -FILE 5387 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 5388 f:\sp\public\sdk\inc\winreg.h -FILE 5389 f:\sp\public\sdk\inc\ddbanned.h -FILE 5390 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 5391 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 5392 f:\sp\public\sdk\inc\winbase.h -FILE 5393 f:\sp\public\sdk\inc\winerror.h -FILE 5394 f:\sp\public\sdk\inc\pshpack8.h -FILE 5395 f:\sp\public\sdk\inc\reason.h -FILE 5396 f:\sp\public\sdk\inc\wincon.h -FILE 5397 f:\sp\public\sdk\inc\pshpack2.h -FILE 5398 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 5399 f:\sp\public\sdk\inc\mcx.h -FILE 5400 f:\sp\public\sdk\inc\winuser.h -FILE 5401 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 5402 f:\sp\public\sdk\inc\winnls.h -FILE 5403 f:\sp\public\sdk\inc\guiddef.h -FILE 5404 f:\sp\public\sdk\inc\windows.h -FILE 5405 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 5406 f:\sp\public\sdk\inc\specstrings.h -FILE 5407 f:\sp\public\sdk\inc\basetsd.h -FILE 5408 f:\sp\public\sdk\inc\stralign.h -FILE 5409 f:\sp\public\sdk\inc\tvout.h -FILE 5410 f:\sp\public\sdk\inc\winsvc.h -FILE 5411 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 5412 f:\sp\public\sdk\inc\wingdi.h -FILE 5413 f:\sp\public\sdk\inc\pshpack4.h -FILE 5414 f:\sp\public\sdk\inc\poppack.h -FILE 5415 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 5416 f:\sp\public\sdk\inc\winnetwk.h -FILE 5417 f:\sp\public\sdk\inc\imm.h -FILE 5418 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 5419 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 5420 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 5421 f:\sp\public\sdk\inc\windef.h -FILE 5422 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 5423 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 5424 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 5425 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.c -FILE 5426 f:\sp\public\sdk\inc\pshpack1.h -FILE 5427 f:\sp\public\sdk\inc\winver.h -FILE 5428 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcsup.h -FILE 5429 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcapi.h -FILE 5430 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 5431 f:\sp\public\sdk\inc\winnt.h -FILE 5432 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h -FILE 5433 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 5434 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 5435 f:\sp\public\sdk\inc\winreg.h -FILE 5436 f:\sp\public\sdk\inc\ddbanned.h -FILE 5437 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 5438 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 5439 f:\sp\public\sdk\inc\winbase.h -FILE 5440 f:\sp\public\sdk\inc\winerror.h -FILE 5441 f:\sp\public\sdk\inc\pshpack8.h -FILE 5442 f:\sp\public\sdk\inc\reason.h -FILE 5443 f:\sp\public\sdk\inc\wincon.h -FILE 5444 f:\sp\public\sdk\inc\winver.h -FILE 5445 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 5446 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 5447 f:\sp\public\sdk\inc\winnt.h -FILE 5448 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 5449 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 5450 f:\sp\public\sdk\inc\winreg.h -FILE 5451 f:\sp\public\sdk\inc\winbase.h -FILE 5452 f:\sp\public\sdk\inc\winerror.h -FILE 5453 f:\sp\public\sdk\inc\pshpack8.h -FILE 5454 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 5455 f:\sp\public\sdk\inc\reason.h -FILE 5456 f:\sp\public\sdk\inc\wincon.h -FILE 5457 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 5458 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 5459 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 5460 f:\sp\public\sdk\inc\pshpack2.h -FILE 5461 f:\sp\public\sdk\inc\mcx.h -FILE 5462 f:\sp\public\sdk\inc\winuser.h -FILE 5463 f:\sp\public\sdk\inc\winnls.h -FILE 5464 f:\sp\public\sdk\inc\guiddef.h -FILE 5465 f:\sp\public\sdk\inc\stralign.h -FILE 5466 f:\sp\public\sdk\inc\specstrings.h -FILE 5467 f:\sp\public\sdk\inc\basetsd.h -FILE 5468 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h -FILE 5469 f:\sp\public\sdk\inc\windows.h -FILE 5470 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 5471 f:\sp\public\sdk\inc\tvout.h -FILE 5472 f:\sp\public\sdk\inc\winsvc.h -FILE 5473 f:\sp\vctools\crt_bld\self_x86\crt\src\heapinit.c -FILE 5474 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 5475 f:\sp\public\sdk\inc\wingdi.h -FILE 5476 f:\sp\public\sdk\inc\pshpack4.h -FILE 5477 f:\sp\public\sdk\inc\poppack.h -FILE 5478 f:\sp\public\sdk\inc\winnetwk.h -FILE 5479 f:\sp\public\sdk\inc\ddbanned.h -FILE 5480 f:\sp\public\sdk\inc\imm.h -FILE 5481 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 5482 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 5483 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 5484 f:\sp\public\sdk\inc\windef.h -FILE 5485 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 5486 f:\sp\public\sdk\inc\pshpack1.h -FILE 5487 f:\sp\public\sdk\inc\pshpack2.h -FILE 5488 f:\sp\public\sdk\inc\mcx.h -FILE 5489 f:\sp\public\sdk\inc\winuser.h -FILE 5490 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h -FILE 5491 f:\sp\public\sdk\inc\winnls.h -FILE 5492 f:\sp\public\sdk\inc\guiddef.h -FILE 5493 f:\sp\public\sdk\inc\windows.h -FILE 5494 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 5495 f:\sp\public\sdk\inc\specstrings.h -FILE 5496 f:\sp\public\sdk\inc\basetsd.h -FILE 5497 f:\sp\public\sdk\inc\stralign.h -FILE 5498 f:\sp\public\sdk\inc\tvout.h -FILE 5499 f:\sp\public\sdk\inc\winsvc.h -FILE 5500 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 5501 f:\sp\public\sdk\inc\wingdi.h -FILE 5502 f:\sp\public\sdk\inc\pshpack4.h -FILE 5503 f:\sp\public\sdk\inc\poppack.h -FILE 5504 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 5505 f:\sp\public\sdk\inc\winnetwk.h -FILE 5506 f:\sp\public\sdk\inc\imm.h -FILE 5507 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 5508 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 5509 f:\sp\public\sdk\inc\windef.h -FILE 5510 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 5511 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 5512 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 5513 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 5514 f:\sp\public\sdk\inc\pshpack1.h -FILE 5515 f:\sp\vctools\crt_bld\self_x86\crt\src\free.c -FILE 5516 f:\sp\public\sdk\inc\winver.h -FILE 5517 f:\sp\public\sdk\inc\winnt.h -FILE 5518 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 5519 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcsup.h -FILE 5520 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcapi.h -FILE 5521 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 5522 f:\sp\public\sdk\inc\winreg.h -FILE 5523 f:\sp\public\sdk\inc\ddbanned.h -FILE 5524 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 5525 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 5526 f:\sp\public\sdk\inc\winbase.h -FILE 5527 f:\sp\public\sdk\inc\winerror.h -FILE 5528 f:\sp\public\sdk\inc\pshpack8.h -FILE 5529 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 5530 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 5531 f:\sp\public\sdk\inc\reason.h -FILE 5532 f:\sp\public\sdk\inc\wincon.h -FILE 5533 f:\sp\public\sdk\inc\pshpack2.h -FILE 5534 f:\sp\public\sdk\inc\mcx.h -FILE 5535 f:\sp\public\sdk\inc\winuser.h -FILE 5536 f:\sp\public\sdk\inc\winnls.h -FILE 5537 f:\sp\public\sdk\inc\guiddef.h -FILE 5538 f:\sp\public\sdk\inc\windows.h -FILE 5539 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 5540 f:\sp\public\sdk\inc\specstrings.h -FILE 5541 f:\sp\public\sdk\inc\basetsd.h -FILE 5542 f:\sp\public\sdk\inc\stralign.h -FILE 5543 f:\sp\public\sdk\inc\tvout.h -FILE 5544 f:\sp\public\sdk\inc\winsvc.h -FILE 5545 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 5546 f:\sp\public\sdk\inc\wingdi.h -FILE 5547 f:\sp\public\sdk\inc\pshpack4.h -FILE 5548 f:\sp\public\sdk\inc\poppack.h -FILE 5549 f:\sp\public\sdk\inc\winnetwk.h -FILE 5550 f:\sp\public\sdk\inc\imm.h -FILE 5551 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 5552 f:\sp\public\sdk\inc\windef.h -FILE 5553 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 5554 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 5555 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 5556 f:\sp\public\sdk\inc\pshpack1.h -FILE 5557 f:\sp\vctools\crt_bld\self_x86\crt\src\crtheap.c -FILE 5558 f:\sp\public\sdk\inc\winver.h -FILE 5559 f:\sp\public\sdk\inc\winnt.h -FILE 5560 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 5561 f:\sp\public\sdk\inc\winreg.h -FILE 5562 f:\sp\public\sdk\inc\ddbanned.h -FILE 5563 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 5564 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 5565 f:\sp\public\sdk\inc\winbase.h -FILE 5566 f:\sp\public\sdk\inc\winerror.h -FILE 5567 f:\sp\public\sdk\inc\pshpack8.h -FILE 5568 f:\sp\public\sdk\inc\reason.h -FILE 5569 f:\sp\public\sdk\inc\wincon.h -FILE 5570 f:\sp\public\sdk\inc\pshpack2.h -FILE 5571 f:\sp\public\sdk\inc\mcx.h -FILE 5572 f:\sp\public\sdk\inc\winuser.h -FILE 5573 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 5574 f:\sp\public\sdk\inc\winnls.h -FILE 5575 f:\sp\public\sdk\inc\stralign.h -FILE 5576 f:\sp\public\sdk\inc\tvout.h -FILE 5577 f:\sp\public\sdk\inc\winsvc.h -FILE 5578 f:\sp\public\sdk\inc\wingdi.h -FILE 5579 f:\sp\public\sdk\inc\winnt.h -FILE 5580 f:\sp\public\sdk\inc\pshpack4.h -FILE 5581 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 5582 f:\sp\public\sdk\inc\poppack.h -FILE 5583 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 5584 f:\sp\public\sdk\inc\winnetwk.h -FILE 5585 f:\sp\public\sdk\inc\imm.h -FILE 5586 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 5587 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 5588 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 5589 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 5590 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 5591 f:\sp\public\sdk\inc\pshpack1.h -FILE 5592 f:\sp\vctools\crt_bld\self_x86\crt\src\calloc.c -FILE 5593 f:\sp\public\sdk\inc\winver.h -FILE 5594 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h -FILE 5595 f:\sp\public\sdk\inc\guiddef.h -FILE 5596 f:\sp\public\sdk\inc\windows.h -FILE 5597 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 5598 f:\sp\public\sdk\inc\specstrings.h -FILE 5599 f:\sp\public\sdk\inc\basetsd.h -FILE 5600 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcsup.h -FILE 5601 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcapi.h -FILE 5602 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 5603 f:\sp\public\sdk\inc\winreg.h -FILE 5604 f:\sp\public\sdk\inc\ddbanned.h -FILE 5605 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 5606 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 5607 f:\sp\public\sdk\inc\winbase.h -FILE 5608 f:\sp\public\sdk\inc\winerror.h -FILE 5609 f:\sp\public\sdk\inc\pshpack8.h -FILE 5610 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 5611 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 5612 f:\sp\public\sdk\inc\reason.h -FILE 5613 f:\sp\public\sdk\inc\wincon.h -FILE 5614 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 5615 f:\sp\public\sdk\inc\windef.h -FILE 5616 f:\sp\public\sdk\inc\wincon.h -FILE 5617 f:\sp\public\sdk\inc\imm.h -FILE 5618 f:\sp\public\sdk\inc\winbase.h -FILE 5619 f:\sp\public\sdk\inc\wingdi.h -FILE 5620 f:\sp\public\sdk\inc\winver.h -FILE 5621 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehhooks.h -FILE 5622 f:\sp\public\sdk\inc\pshpack2.h -FILE 5623 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\internal.h -FILE 5624 f:\sp\public\sdk\inc\reason.h -FILE 5625 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehassert.h -FILE 5626 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\setjmp.h -FILE 5627 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\i386\trnsctrl.cpp -FILE 5628 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\process.h -FILE 5629 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h -FILE 5630 f:\sp\public\sdk\inc\specstrings.h -FILE 5631 f:\sp\public\sdk\inc\basetsd.h -FILE 5632 f:\sp\public\sdk\inc\pshpack4.h -FILE 5633 f:\sp\public\sdk\inc\winnetwk.h -FILE 5634 f:\sp\public\sdk\inc\stralign.h -FILE 5635 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\trnsctrl.h -FILE 5636 f:\sp\public\sdk\inc\poppack.h -FILE 5637 f:\sp\public\sdk\inc\winsvc.h -FILE 5638 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 5639 f:\sp\public\sdk\inc\windef.h -FILE 5640 f:\sp\public\sdk\inc\winuser.h -FILE 5641 f:\sp\public\sdk\inc\windows.h -FILE 5642 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 5643 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 5644 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 5645 f:\sp\public\sdk\inc\mcx.h -FILE 5646 f:\sp\public\sdk\inc\pshpack8.h -FILE 5647 f:\sp\public\sdk\inc\guiddef.h -FILE 5648 f:\sp\public\sdk\inc\winnt.h -FILE 5649 f:\sp\public\sdk\inc\winnls.h -FILE 5650 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 5651 f:\sp\public\sdk\inc\pshpack1.h -FILE 5652 f:\sp\public\sdk\inc\winerror.h -FILE 5653 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\mtdll.h -FILE 5654 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 5655 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\errno.h -FILE 5656 f:\sp\public\sdk\inc\winreg.h -FILE 5657 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 5658 f:\sp\public\sdk\inc\ddbanned.h -FILE 5659 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 5660 f:\sp\public\sdk\inc\tvout.h -FILE 5661 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 5662 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\eh.h -FILE 5663 f:\sp\vctools\langapi\include\ehdata.h -FILE 5664 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stddef.h -FILE 5665 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\eh\i386\lowhelpr.asm -FILE 5666 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\h\cruntime.inc -FILE 5667 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\h\exsup.inc -FILE 5668 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\process.h -FILE 5669 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 5670 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 5671 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\i386\ehprolg3.c -FILE 5672 f:\sp\public\sdk\inc\ddbanned.h -FILE 5673 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 5674 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 5675 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehassert.h -FILE 5676 f:\sp\public\sdk\inc\wincon.h -FILE 5677 f:\sp\public\sdk\inc\imm.h -FILE 5678 f:\sp\public\sdk\inc\winbase.h -FILE 5679 f:\sp\public\sdk\inc\wingdi.h -FILE 5680 f:\sp\public\sdk\inc\winver.h -FILE 5681 f:\sp\public\sdk\inc\pshpack2.h -FILE 5682 f:\sp\public\sdk\inc\reason.h -FILE 5683 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\validate.cpp -FILE 5684 f:\sp\public\sdk\inc\specstrings.h -FILE 5685 f:\sp\public\sdk\inc\basetsd.h -FILE 5686 f:\sp\public\sdk\inc\pshpack4.h -FILE 5687 f:\sp\public\sdk\inc\winnetwk.h -FILE 5688 f:\sp\public\sdk\inc\stralign.h -FILE 5689 f:\sp\public\sdk\inc\poppack.h -FILE 5690 f:\sp\public\sdk\inc\winsvc.h -FILE 5691 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 5692 f:\sp\public\sdk\inc\windef.h -FILE 5693 f:\sp\public\sdk\inc\winuser.h -FILE 5694 f:\sp\public\sdk\inc\windows.h -FILE 5695 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 5696 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 5697 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 5698 f:\sp\public\sdk\inc\mcx.h -FILE 5699 f:\sp\public\sdk\inc\pshpack8.h -FILE 5700 f:\sp\public\sdk\inc\guiddef.h -FILE 5701 f:\sp\public\sdk\inc\winnt.h -FILE 5702 f:\sp\public\sdk\inc\winnls.h -FILE 5703 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 5704 f:\sp\public\sdk\inc\pshpack1.h -FILE 5705 f:\sp\public\sdk\inc\winerror.h -FILE 5706 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\eh.h -FILE 5707 f:\sp\public\sdk\inc\winreg.h -FILE 5708 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 5709 f:\sp\public\sdk\inc\ddbanned.h -FILE 5710 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 5711 f:\sp\public\sdk\inc\tvout.h -FILE 5712 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 5713 f:\sp\public\sdk\inc\wincon.h -FILE 5714 f:\sp\public\sdk\inc\imm.h -FILE 5715 f:\sp\public\sdk\inc\winbase.h -FILE 5716 f:\sp\public\sdk\inc\wingdi.h -FILE 5717 f:\sp\public\sdk\inc\winver.h -FILE 5718 f:\sp\public\sdk\inc\pshpack2.h -FILE 5719 f:\sp\public\sdk\inc\reason.h -FILE 5720 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sect_attribs.h -FILE 5721 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\unhandld.cpp -FILE 5722 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\eh.h -FILE 5723 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\errno.h -FILE 5724 f:\sp\public\sdk\inc\specstrings.h -FILE 5725 f:\sp\public\sdk\inc\basetsd.h -FILE 5726 f:\sp\public\sdk\inc\pshpack4.h -FILE 5727 f:\sp\public\sdk\inc\winnetwk.h -FILE 5728 f:\sp\public\sdk\inc\stralign.h -FILE 5729 f:\sp\public\sdk\inc\poppack.h -FILE 5730 f:\sp\public\sdk\inc\winsvc.h -FILE 5731 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 5732 f:\sp\public\sdk\inc\windef.h -FILE 5733 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehhooks.h -FILE 5734 f:\sp\public\sdk\inc\winuser.h -FILE 5735 f:\sp\public\sdk\inc\windows.h -FILE 5736 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 5737 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 5738 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 5739 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehassert.h -FILE 5740 f:\sp\public\sdk\inc\mcx.h -FILE 5741 f:\sp\public\sdk\inc\pshpack8.h -FILE 5742 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\internal.h -FILE 5743 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 5744 f:\sp\public\sdk\inc\guiddef.h -FILE 5745 f:\sp\public\sdk\inc\winnt.h -FILE 5746 f:\sp\public\sdk\inc\winnls.h -FILE 5747 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 5748 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdlib.h -FILE 5749 f:\sp\public\sdk\inc\pshpack1.h -FILE 5750 f:\sp\public\sdk\inc\winerror.h -FILE 5751 f:\sp\vctools\langapi\include\ehdata.h -FILE 5752 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stddef.h -FILE 5753 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h -FILE 5754 f:\sp\public\sdk\inc\winreg.h -FILE 5755 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 5756 f:\sp\public\sdk\inc\ddbanned.h -FILE 5757 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 5758 f:\sp\public\sdk\inc\tvout.h -FILE 5759 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 5760 f:\sp\public\sdk\inc\specstrings.h -FILE 5761 f:\sp\public\sdk\inc\basetsd.h -FILE 5762 f:\sp\public\sdk\inc\pshpack4.h -FILE 5763 f:\sp\public\sdk\inc\winnetwk.h -FILE 5764 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 5765 f:\sp\public\sdk\inc\stralign.h -FILE 5766 f:\sp\public\sdk\inc\poppack.h -FILE 5767 f:\sp\public\sdk\inc\winsvc.h -FILE 5768 f:\sp\public\sdk\inc\winuser.h -FILE 5769 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 5770 f:\sp\public\sdk\inc\windef.h -FILE 5771 f:\sp\vctools\langapi\undname\undname.cxx -FILE 5772 f:\sp\public\sdk\inc\mcx.h -FILE 5773 f:\sp\public\sdk\inc\pshpack8.h -FILE 5774 f:\sp\public\sdk\inc\guiddef.h -FILE 5775 f:\sp\vctools\langapi\undname\utf8.h -FILE 5776 f:\sp\public\sdk\inc\winnls.h -FILE 5777 f:\sp\public\sdk\inc\pshpack1.h -FILE 5778 f:\sp\public\sdk\inc\winnt.h -FILE 5779 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 5780 f:\sp\public\sdk\inc\winerror.h -FILE 5781 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\swprintf.inl -FILE 5782 f:\sp\vctools\langapi\undname\undname.hxx -FILE 5783 f:\sp\vctools\langapi\undname\undname.h -FILE 5784 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdlib.h -FILE 5785 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 5786 f:\sp\public\sdk\inc\winreg.h -FILE 5787 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 5788 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 5789 f:\sp\public\sdk\inc\tvout.h -FILE 5790 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdio.h -FILE 5791 f:\sp\public\sdk\inc\wincon.h -FILE 5792 f:\sp\public\sdk\inc\imm.h -FILE 5793 f:\sp\public\sdk\inc\winbase.h -FILE 5794 f:\sp\public\sdk\inc\wingdi.h -FILE 5795 f:\sp\public\sdk\inc\winver.h -FILE 5796 f:\sp\public\sdk\inc\pshpack2.h -FILE 5797 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\mtdll.h -FILE 5798 f:\sp\public\sdk\inc\windows.h -FILE 5799 f:\sp\public\sdk\inc\reason.h -FILE 5800 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 5801 f:\sp\public\sdk\inc\ddbanned.h -FILE 5802 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 5803 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 5804 f:\sp\vctools\langapi\undname\undname.inl -FILE 5805 f:\sp\public\sdk\inc\guiddef.h -FILE 5806 f:\sp\public\sdk\inc\winnt.h -FILE 5807 f:\sp\public\sdk\inc\winnls.h -FILE 5808 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 5809 f:\sp\public\sdk\inc\pshpack1.h -FILE 5810 f:\sp\public\sdk\inc\winerror.h -FILE 5811 f:\sp\public\sdk\inc\winreg.h -FILE 5812 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 5813 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdlib.h -FILE 5814 f:\sp\public\sdk\inc\tvout.h -FILE 5815 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\typname.cpp -FILE 5816 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h -FILE 5817 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\cstddef -FILE 5818 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stddef.h -FILE 5819 f:\sp\public\sdk\inc\wincon.h -FILE 5820 f:\sp\public\sdk\inc\imm.h -FILE 5821 f:\sp\public\sdk\inc\winbase.h -FILE 5822 f:\sp\public\sdk\inc\wingdi.h -FILE 5823 f:\sp\public\sdk\inc\winver.h -FILE 5824 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 5825 f:\sp\public\sdk\inc\windows.h -FILE 5826 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 5827 f:\sp\public\sdk\inc\pshpack2.h -FILE 5828 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\mtdll.h -FILE 5829 f:\sp\public\sdk\inc\reason.h -FILE 5830 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sect_attribs.h -FILE 5831 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\dbgint.h -FILE 5832 f:\sp\public\sdk\inc\specstrings.h -FILE 5833 f:\sp\public\sdk\inc\basetsd.h -FILE 5834 f:\sp\public\sdk\inc\pshpack4.h -FILE 5835 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\typeinfo.h -FILE 5836 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\typeinfo -FILE 5837 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\exception -FILE 5838 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\xstddef -FILE 5839 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\eh.h -FILE 5840 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\yvals.h -FILE 5841 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\use_ansi.h -FILE 5842 f:\sp\public\sdk\inc\winnetwk.h -FILE 5843 f:\sp\vctools\langapi\undname\undname.h -FILE 5844 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\errno.h -FILE 5845 f:\sp\public\sdk\inc\stralign.h -FILE 5846 f:\sp\public\sdk\inc\poppack.h -FILE 5847 f:\sp\public\sdk\inc\winsvc.h -FILE 5848 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 5849 f:\sp\public\sdk\inc\windef.h -FILE 5850 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\internal.h -FILE 5851 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 5852 f:\sp\public\sdk\inc\winuser.h -FILE 5853 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 5854 f:\sp\public\sdk\inc\ddbanned.h -FILE 5855 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 5856 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 5857 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\malloc.h -FILE 5858 f:\sp\public\sdk\inc\mcx.h -FILE 5859 f:\sp\public\sdk\inc\pshpack8.h -FILE 5860 f:\sp\public\sdk\inc\winnls.h -FILE 5861 f:\sp\public\sdk\inc\pshpack1.h -FILE 5862 f:\sp\public\sdk\inc\winnt.h -FILE 5863 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 5864 f:\sp\public\sdk\inc\winerror.h -FILE 5865 f:\sp\public\sdk\inc\winreg.h -FILE 5866 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 5867 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 5868 f:\sp\public\sdk\inc\tvout.h -FILE 5869 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\dbgint.h -FILE 5870 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h -FILE 5871 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\cstddef -FILE 5872 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stddef.h -FILE 5873 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\typinfo.cpp -FILE 5874 f:\sp\public\sdk\inc\wincon.h -FILE 5875 f:\sp\public\sdk\inc\imm.h -FILE 5876 f:\sp\public\sdk\inc\winbase.h -FILE 5877 f:\sp\public\sdk\inc\wingdi.h -FILE 5878 f:\sp\public\sdk\inc\winver.h -FILE 5879 f:\sp\public\sdk\inc\pshpack2.h -FILE 5880 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\mtdll.h -FILE 5881 f:\sp\public\sdk\inc\reason.h -FILE 5882 f:\sp\public\sdk\inc\windows.h -FILE 5883 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 5884 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdlib.h -FILE 5885 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 5886 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 5887 f:\sp\public\sdk\inc\specstrings.h -FILE 5888 f:\sp\public\sdk\inc\basetsd.h -FILE 5889 f:\sp\public\sdk\inc\pshpack4.h -FILE 5890 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\typeinfo -FILE 5891 f:\sp\public\sdk\inc\winnetwk.h -FILE 5892 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\exception -FILE 5893 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\xstddef -FILE 5894 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\eh.h -FILE 5895 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\yvals.h -FILE 5896 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\use_ansi.h -FILE 5897 f:\sp\public\sdk\inc\stralign.h -FILE 5898 f:\sp\public\sdk\inc\poppack.h -FILE 5899 f:\sp\public\sdk\inc\winsvc.h -FILE 5900 f:\sp\public\sdk\inc\winuser.h -FILE 5901 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 5902 f:\sp\public\sdk\inc\windef.h -FILE 5903 f:\sp\vctools\langapi\undname\undname.h -FILE 5904 f:\sp\public\sdk\inc\ddbanned.h -FILE 5905 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\malloc.h -FILE 5906 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 5907 f:\sp\public\sdk\inc\mcx.h -FILE 5908 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 5909 f:\sp\public\sdk\inc\pshpack8.h -FILE 5910 f:\sp\public\sdk\inc\guiddef.h -FILE 5911 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\eh.h -FILE 5912 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\typeinfo -FILE 5913 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 5914 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\exception -FILE 5915 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\xstddef -FILE 5916 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\stdexcpt.cpp -FILE 5917 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\yvals.h -FILE 5918 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\use_ansi.h -FILE 5919 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdlib.h -FILE 5920 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 5921 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 5922 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 5923 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\cstddef -FILE 5924 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stddef.h -FILE 5925 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\malloc.h -FILE 5926 f:\sp\public\sdk\inc\ddbanned.h -FILE 5927 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 5928 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 5929 f:\sp\vctools\langapi\include\ehdata.h -FILE 5930 f:\sp\public\sdk\inc\wincon.h -FILE 5931 f:\sp\public\sdk\inc\imm.h -FILE 5932 f:\sp\public\sdk\inc\winbase.h -FILE 5933 f:\sp\public\sdk\inc\wingdi.h -FILE 5934 f:\sp\public\sdk\inc\winver.h -FILE 5935 f:\sp\public\sdk\inc\windows.h -FILE 5936 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 5937 f:\sp\public\sdk\inc\pshpack2.h -FILE 5938 f:\sp\public\sdk\inc\reason.h -FILE 5939 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\throw.cpp -FILE 5940 f:\sp\public\sdk\inc\specstrings.h -FILE 5941 f:\sp\public\sdk\inc\basetsd.h -FILE 5942 f:\sp\public\sdk\inc\pshpack4.h -FILE 5943 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\eh.h -FILE 5944 f:\sp\public\sdk\inc\winnetwk.h -FILE 5945 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stddef.h -FILE 5946 f:\sp\public\sdk\inc\stralign.h -FILE 5947 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 5948 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 5949 f:\sp\public\sdk\inc\poppack.h -FILE 5950 f:\sp\public\sdk\inc\winsvc.h -FILE 5951 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 5952 f:\sp\public\sdk\inc\windef.h -FILE 5953 f:\sp\public\sdk\inc\winuser.h -FILE 5954 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehhooks.h -FILE 5955 f:\sp\public\sdk\inc\mcx.h -FILE 5956 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehassert.h -FILE 5957 f:\sp\public\sdk\inc\pshpack8.h -FILE 5958 f:\sp\public\sdk\inc\guiddef.h -FILE 5959 f:\sp\public\sdk\inc\winnt.h -FILE 5960 f:\sp\public\sdk\inc\winnls.h -FILE 5961 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 5962 f:\sp\public\sdk\inc\pshpack1.h -FILE 5963 f:\sp\public\sdk\inc\winerror.h -FILE 5964 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\mtdll.h -FILE 5965 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 5966 f:\sp\public\sdk\inc\ddbanned.h -FILE 5967 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 5968 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 5969 f:\sp\public\sdk\inc\winreg.h -FILE 5970 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 5971 f:\sp\public\sdk\inc\tvout.h -FILE 5972 f:\sp\public\sdk\inc\poppack.h -FILE 5973 f:\sp\public\sdk\inc\winsvc.h -FILE 5974 f:\sp\public\sdk\inc\windows.h -FILE 5975 f:\sp\public\sdk\inc\winuser.h -FILE 5976 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 5977 f:\sp\public\sdk\inc\windef.h -FILE 5978 f:\sp\public\sdk\inc\mcx.h -FILE 5979 f:\sp\public\sdk\inc\pshpack8.h -FILE 5980 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdlib.h -FILE 5981 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 5982 f:\sp\public\sdk\inc\guiddef.h -FILE 5983 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\hooks.cpp -FILE 5984 f:\sp\public\sdk\inc\winnls.h -FILE 5985 f:\sp\public\sdk\inc\pshpack1.h -FILE 5986 f:\sp\public\sdk\inc\winnt.h -FILE 5987 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 5988 f:\sp\public\sdk\inc\winerror.h -FILE 5989 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\mtdll.h -FILE 5990 f:\sp\public\sdk\inc\winreg.h -FILE 5991 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 5992 f:\sp\public\sdk\inc\tvout.h -FILE 5993 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\eh.h -FILE 5994 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\errno.h -FILE 5995 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stddef.h -FILE 5996 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 5997 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 5998 f:\sp\public\sdk\inc\wincon.h -FILE 5999 f:\sp\public\sdk\inc\imm.h -FILE 6000 f:\sp\public\sdk\inc\winbase.h -FILE 6001 f:\sp\public\sdk\inc\wingdi.h -FILE 6002 f:\sp\public\sdk\inc\winver.h -FILE 6003 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehhooks.h -FILE 6004 f:\sp\public\sdk\inc\pshpack2.h -FILE 6005 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 6006 f:\sp\public\sdk\inc\reason.h -FILE 6007 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehassert.h -FILE 6008 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\internal.h -FILE 6009 f:\sp\public\sdk\inc\specstrings.h -FILE 6010 f:\sp\public\sdk\inc\basetsd.h -FILE 6011 f:\sp\public\sdk\inc\pshpack4.h -FILE 6012 f:\sp\public\sdk\inc\ddbanned.h -FILE 6013 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 6014 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 6015 f:\sp\public\sdk\inc\winnetwk.h -FILE 6016 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h -FILE 6017 f:\sp\public\sdk\inc\stralign.h -FILE 6018 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h -FILE 6019 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehassert.h -FILE 6020 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\malloc.h -FILE 6021 f:\sp\public\sdk\inc\wincon.h -FILE 6022 f:\sp\public\sdk\inc\imm.h -FILE 6023 f:\sp\public\sdk\inc\guiddef.h -FILE 6024 f:\sp\public\sdk\inc\winbase.h -FILE 6025 f:\sp\public\sdk\inc\wingdi.h -FILE 6026 f:\sp\vctools\langapi\include\ehdata.h -FILE 6027 f:\sp\public\sdk\inc\winver.h -FILE 6028 f:\sp\public\sdk\inc\winnt.h -FILE 6029 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 6030 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdlib.h -FILE 6031 f:\sp\public\sdk\inc\pshpack2.h -FILE 6032 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 6033 f:\sp\public\sdk\inc\reason.h -FILE 6034 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\frame.cpp -FILE 6035 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\exception -FILE 6036 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\typeinfo.h -FILE 6037 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\typeinfo -FILE 6038 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\xstddef -FILE 6039 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\yvals.h -FILE 6040 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\use_ansi.h -FILE 6041 f:\sp\public\sdk\inc\pshpack4.h -FILE 6042 f:\sp\public\sdk\inc\winnetwk.h -FILE 6043 f:\sp\public\sdk\inc\stralign.h -FILE 6044 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\errno.h -FILE 6045 f:\sp\public\sdk\inc\poppack.h -FILE 6046 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stddef.h -FILE 6047 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 6048 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 6049 f:\sp\public\sdk\inc\winsvc.h -FILE 6050 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehstate.h -FILE 6051 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\eh.h -FILE 6052 f:\sp\public\sdk\inc\winuser.h -FILE 6053 f:\sp\public\sdk\inc\windows.h -FILE 6054 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 6055 f:\sp\public\sdk\inc\mcx.h -FILE 6056 f:\sp\public\sdk\inc\pshpack8.h -FILE 6057 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 6058 f:\sp\public\sdk\inc\specstrings.h -FILE 6059 f:\sp\public\sdk\inc\basetsd.h -FILE 6060 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehhooks.h -FILE 6061 f:\sp\public\sdk\inc\winnls.h -FILE 6062 f:\sp\public\sdk\inc\pshpack1.h -FILE 6063 f:\sp\public\sdk\inc\winerror.h -FILE 6064 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\trnsctrl.h -FILE 6065 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\internal.h -FILE 6066 f:\sp\public\sdk\inc\winreg.h -FILE 6067 f:\sp\public\sdk\inc\ddbanned.h -FILE 6068 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 6069 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\cstddef -FILE 6070 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 6071 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\mtdll.h -FILE 6072 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 6073 f:\sp\public\sdk\inc\windef.h -FILE 6074 f:\sp\public\sdk\inc\tvout.h -FILE 6075 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 6076 f:\sp\public\sdk\inc\pshpack4.h -FILE 6077 f:\sp\public\sdk\inc\reason.h -FILE 6078 f:\sp\public\sdk\inc\wincon.h -FILE 6079 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 6080 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 6081 f:\sp\public\sdk\inc\poppack.h -FILE 6082 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 6083 f:\sp\public\sdk\inc\mcx.h -FILE 6084 f:\sp\public\sdk\inc\winuser.h -FILE 6085 f:\sp\public\sdk\inc\winnls.h -FILE 6086 f:\sp\public\sdk\inc\stralign.h -FILE 6087 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 6088 f:\sp\public\sdk\inc\windef.h -FILE 6089 f:\sp\public\sdk\inc\tvout.h -FILE 6090 f:\sp\public\sdk\inc\winsvc.h -FILE 6091 f:\sp\public\sdk\inc\wingdi.h -FILE 6092 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 6093 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 6094 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 6095 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 6096 f:\sp\public\sdk\inc\winnt.h -FILE 6097 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 6098 f:\sp\public\sdk\inc\winnetwk.h -FILE 6099 f:\sp\public\sdk\inc\imm.h -FILE 6100 f:\sp\vctools\crt_bld\self_x86\crt\src\dosmap.c -FILE 6101 f:\sp\public\sdk\inc\winbase.h -FILE 6102 f:\sp\public\sdk\inc\winerror.h -FILE 6103 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 6104 f:\sp\public\sdk\inc\pshpack1.h -FILE 6105 f:\sp\public\sdk\inc\pshpack8.h -FILE 6106 f:\sp\public\sdk\inc\winver.h -FILE 6107 f:\sp\public\sdk\inc\ddbanned.h -FILE 6108 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 6109 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 6110 f:\sp\public\sdk\inc\pshpack2.h -FILE 6111 f:\sp\public\sdk\inc\winreg.h -FILE 6112 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 6113 f:\sp\public\sdk\inc\guiddef.h -FILE 6114 f:\sp\public\sdk\inc\windows.h -FILE 6115 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 6116 f:\sp\public\sdk\inc\specstrings.h -FILE 6117 f:\sp\public\sdk\inc\basetsd.h -FILE 6118 f:\sp\public\sdk\inc\winver.h -FILE 6119 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 6120 f:\sp\public\sdk\inc\pshpack2.h -FILE 6121 f:\sp\public\sdk\inc\windows.h -FILE 6122 f:\sp\public\sdk\inc\reason.h -FILE 6123 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 6124 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 6125 f:\sp\public\sdk\inc\specstrings.h -FILE 6126 f:\sp\public\sdk\inc\basetsd.h -FILE 6127 f:\sp\public\sdk\inc\pshpack4.h -FILE 6128 f:\sp\vctools\crt_bld\self_x86\crt\src\wctomb.c -FILE 6129 f:\sp\public\sdk\inc\winnetwk.h -FILE 6130 f:\sp\public\sdk\inc\stralign.h -FILE 6131 f:\sp\public\sdk\inc\poppack.h -FILE 6132 f:\sp\public\sdk\inc\winsvc.h -FILE 6133 f:\sp\public\sdk\inc\winuser.h -FILE 6134 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 6135 f:\sp\public\sdk\inc\windef.h -FILE 6136 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 6137 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 6138 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 6139 f:\sp\public\sdk\inc\mcx.h -FILE 6140 f:\sp\public\sdk\inc\pshpack8.h -FILE 6141 f:\sp\public\sdk\inc\guiddef.h -FILE 6142 f:\sp\public\sdk\inc\winnls.h -FILE 6143 f:\sp\public\sdk\inc\pshpack1.h -FILE 6144 f:\sp\public\sdk\inc\winnt.h -FILE 6145 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 6146 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 6147 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 6148 f:\sp\public\sdk\inc\winerror.h -FILE 6149 f:\sp\public\sdk\inc\winreg.h -FILE 6150 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 6151 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 6152 f:\sp\public\sdk\inc\tvout.h -FILE 6153 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 6154 f:\sp\public\sdk\inc\ddbanned.h -FILE 6155 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 6156 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 6157 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 6158 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 6159 f:\sp\public\sdk\inc\wincon.h -FILE 6160 f:\sp\public\sdk\inc\imm.h -FILE 6161 f:\sp\public\sdk\inc\winbase.h -FILE 6162 f:\sp\public\sdk\inc\wingdi.h -FILE 6163 f:\sp\public\sdk\inc\winsvc.h -FILE 6164 f:\sp\public\sdk\inc\winuser.h -FILE 6165 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 6166 f:\sp\public\sdk\inc\mcx.h -FILE 6167 f:\sp\public\sdk\inc\pshpack8.h -FILE 6168 f:\sp\public\sdk\inc\guiddef.h -FILE 6169 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 6170 f:\sp\public\sdk\inc\windows.h -FILE 6171 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 6172 f:\sp\public\sdk\inc\winnls.h -FILE 6173 f:\sp\vctools\crt_bld\self_x86\crt\src\wcstol.c -FILE 6174 f:\sp\public\sdk\inc\pshpack1.h -FILE 6175 f:\sp\public\sdk\inc\winerror.h -FILE 6176 f:\sp\public\sdk\inc\winreg.h -FILE 6177 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 6178 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 6179 f:\sp\public\sdk\inc\tvout.h -FILE 6180 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 6181 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 6182 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 6183 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 6184 f:\sp\public\sdk\inc\wincon.h -FILE 6185 f:\sp\public\sdk\inc\imm.h -FILE 6186 f:\sp\public\sdk\inc\winbase.h -FILE 6187 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 6188 f:\sp\public\sdk\inc\wingdi.h -FILE 6189 f:\sp\public\sdk\inc\windef.h -FILE 6190 f:\sp\public\sdk\inc\winver.h -FILE 6191 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 6192 f:\sp\public\sdk\inc\pshpack2.h -FILE 6193 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 6194 f:\sp\public\sdk\inc\reason.h -FILE 6195 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 6196 f:\sp\public\sdk\inc\winnt.h -FILE 6197 f:\sp\public\sdk\inc\specstrings.h -FILE 6198 f:\sp\public\sdk\inc\basetsd.h -FILE 6199 f:\sp\public\sdk\inc\pshpack4.h -FILE 6200 f:\sp\public\sdk\inc\ddbanned.h -FILE 6201 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 6202 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 6203 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 6204 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 6205 f:\sp\public\sdk\inc\winnetwk.h -FILE 6206 f:\sp\public\sdk\inc\stralign.h -FILE 6207 f:\sp\public\sdk\inc\poppack.h -FILE 6208 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 6209 f:\sp\public\sdk\inc\mcx.h -FILE 6210 f:\sp\public\sdk\inc\pshpack8.h -FILE 6211 f:\sp\public\sdk\inc\guiddef.h -FILE 6212 f:\sp\public\sdk\inc\winnt.h -FILE 6213 f:\sp\public\sdk\inc\winnls.h -FILE 6214 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 6215 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 6216 f:\sp\public\sdk\inc\pshpack1.h -FILE 6217 f:\sp\public\sdk\inc\winerror.h -FILE 6218 f:\sp\vctools\crt_bld\self_x86\crt\src\tolower.c -FILE 6219 f:\sp\public\sdk\inc\winreg.h -FILE 6220 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 6221 f:\sp\public\sdk\inc\tvout.h -FILE 6222 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 6223 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 6224 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 6225 f:\sp\public\sdk\inc\wincon.h -FILE 6226 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 6227 f:\sp\public\sdk\inc\imm.h -FILE 6228 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 6229 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 6230 f:\sp\public\sdk\inc\winbase.h -FILE 6231 f:\sp\public\sdk\inc\wingdi.h -FILE 6232 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 6233 f:\sp\public\sdk\inc\winver.h -FILE 6234 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 6235 f:\sp\public\sdk\inc\windows.h -FILE 6236 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 6237 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 6238 f:\sp\public\sdk\inc\pshpack2.h -FILE 6239 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 6240 f:\sp\public\sdk\inc\reason.h -FILE 6241 f:\sp\public\sdk\inc\specstrings.h -FILE 6242 f:\sp\public\sdk\inc\basetsd.h -FILE 6243 f:\sp\public\sdk\inc\pshpack4.h -FILE 6244 f:\sp\public\sdk\inc\winnetwk.h -FILE 6245 f:\sp\public\sdk\inc\ddbanned.h -FILE 6246 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 6247 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 6248 f:\sp\public\sdk\inc\stralign.h -FILE 6249 f:\sp\public\sdk\inc\poppack.h -FILE 6250 f:\sp\public\sdk\inc\winsvc.h -FILE 6251 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 6252 f:\sp\public\sdk\inc\windef.h -FILE 6253 f:\sp\public\sdk\inc\winuser.h -FILE 6254 f:\sp\public\sdk\inc\winsvc.h -FILE 6255 f:\sp\public\sdk\inc\winuser.h -FILE 6256 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 6257 f:\sp\public\sdk\inc\mcx.h -FILE 6258 f:\sp\public\sdk\inc\pshpack8.h -FILE 6259 f:\sp\public\sdk\inc\guiddef.h -FILE 6260 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 6261 f:\sp\public\sdk\inc\windows.h -FILE 6262 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 6263 f:\sp\public\sdk\inc\winnls.h -FILE 6264 f:\sp\vctools\crt_bld\self_x86\crt\src\strtoq.c -FILE 6265 f:\sp\public\sdk\inc\pshpack1.h -FILE 6266 f:\sp\public\sdk\inc\winerror.h -FILE 6267 f:\sp\public\sdk\inc\winreg.h -FILE 6268 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 6269 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 6270 f:\sp\public\sdk\inc\tvout.h -FILE 6271 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 6272 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 6273 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 6274 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 6275 f:\sp\public\sdk\inc\wincon.h -FILE 6276 f:\sp\public\sdk\inc\imm.h -FILE 6277 f:\sp\public\sdk\inc\winbase.h -FILE 6278 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 6279 f:\sp\public\sdk\inc\wingdi.h -FILE 6280 f:\sp\public\sdk\inc\windef.h -FILE 6281 f:\sp\public\sdk\inc\winver.h -FILE 6282 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 6283 f:\sp\public\sdk\inc\pshpack2.h -FILE 6284 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 6285 f:\sp\public\sdk\inc\reason.h -FILE 6286 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 6287 f:\sp\public\sdk\inc\winnt.h -FILE 6288 f:\sp\public\sdk\inc\specstrings.h -FILE 6289 f:\sp\public\sdk\inc\basetsd.h -FILE 6290 f:\sp\public\sdk\inc\pshpack4.h -FILE 6291 f:\sp\public\sdk\inc\ddbanned.h -FILE 6292 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 6293 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 6294 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 6295 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 6296 f:\sp\public\sdk\inc\winnetwk.h -FILE 6297 f:\sp\public\sdk\inc\stralign.h -FILE 6298 f:\sp\public\sdk\inc\poppack.h -FILE 6299 f:\sp\public\sdk\inc\winsvc.h -FILE 6300 f:\sp\public\sdk\inc\winuser.h -FILE 6301 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 6302 f:\sp\public\sdk\inc\mcx.h -FILE 6303 f:\sp\public\sdk\inc\pshpack8.h -FILE 6304 f:\sp\public\sdk\inc\guiddef.h -FILE 6305 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 6306 f:\sp\public\sdk\inc\windows.h -FILE 6307 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 6308 f:\sp\public\sdk\inc\winnls.h -FILE 6309 f:\sp\vctools\crt_bld\self_x86\crt\src\strtol.c -FILE 6310 f:\sp\public\sdk\inc\pshpack1.h -FILE 6311 f:\sp\public\sdk\inc\winerror.h -FILE 6312 f:\sp\public\sdk\inc\winreg.h -FILE 6313 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 6314 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 6315 f:\sp\public\sdk\inc\tvout.h -FILE 6316 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 6317 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 6318 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 6319 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 6320 f:\sp\public\sdk\inc\wincon.h -FILE 6321 f:\sp\public\sdk\inc\imm.h -FILE 6322 f:\sp\public\sdk\inc\winbase.h -FILE 6323 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 6324 f:\sp\public\sdk\inc\wingdi.h -FILE 6325 f:\sp\public\sdk\inc\windef.h -FILE 6326 f:\sp\public\sdk\inc\winver.h -FILE 6327 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 6328 f:\sp\public\sdk\inc\pshpack2.h -FILE 6329 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 6330 f:\sp\public\sdk\inc\reason.h -FILE 6331 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 6332 f:\sp\public\sdk\inc\winnt.h -FILE 6333 f:\sp\public\sdk\inc\specstrings.h -FILE 6334 f:\sp\public\sdk\inc\basetsd.h -FILE 6335 f:\sp\public\sdk\inc\pshpack4.h -FILE 6336 f:\sp\public\sdk\inc\ddbanned.h -FILE 6337 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 6338 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 6339 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 6340 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 6341 f:\sp\public\sdk\inc\winnetwk.h -FILE 6342 f:\sp\public\sdk\inc\stralign.h -FILE 6343 f:\sp\public\sdk\inc\poppack.h -FILE 6344 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 6345 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 6346 f:\sp\public\sdk\inc\tvout.h -FILE 6347 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 6348 f:\sp\public\sdk\inc\wincon.h -FILE 6349 f:\sp\public\sdk\inc\imm.h -FILE 6350 f:\sp\public\sdk\inc\winbase.h -FILE 6351 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 6352 f:\sp\public\sdk\inc\wingdi.h -FILE 6353 f:\sp\public\sdk\inc\windef.h -FILE 6354 f:\sp\public\sdk\inc\winver.h -FILE 6355 f:\sp\vctools\crt_bld\self_x86\crt\src\mbtowc.c -FILE 6356 f:\sp\public\sdk\inc\pshpack2.h -FILE 6357 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 6358 f:\sp\public\sdk\inc\reason.h -FILE 6359 f:\sp\public\sdk\inc\winnt.h -FILE 6360 f:\sp\public\sdk\inc\specstrings.h -FILE 6361 f:\sp\public\sdk\inc\basetsd.h -FILE 6362 f:\sp\public\sdk\inc\pshpack4.h -FILE 6363 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 6364 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 6365 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 6366 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 6367 f:\sp\public\sdk\inc\winnetwk.h -FILE 6368 f:\sp\public\sdk\inc\stralign.h -FILE 6369 f:\sp\public\sdk\inc\poppack.h -FILE 6370 f:\sp\public\sdk\inc\winsvc.h -FILE 6371 f:\sp\public\sdk\inc\winuser.h -FILE 6372 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 6373 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 6374 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 6375 f:\sp\public\sdk\inc\mcx.h -FILE 6376 f:\sp\public\sdk\inc\pshpack8.h -FILE 6377 f:\sp\public\sdk\inc\guiddef.h -FILE 6378 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 6379 f:\sp\public\sdk\inc\windows.h -FILE 6380 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 6381 f:\sp\public\sdk\inc\winnls.h -FILE 6382 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 6383 f:\sp\public\sdk\inc\pshpack1.h -FILE 6384 f:\sp\public\sdk\inc\ddbanned.h -FILE 6385 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 6386 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 6387 f:\sp\public\sdk\inc\winerror.h -FILE 6388 f:\sp\public\sdk\inc\winreg.h -FILE 6389 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 6390 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 6391 f:\sp\public\sdk\inc\winreg.h -FILE 6392 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 6393 f:\sp\public\sdk\inc\tvout.h -FILE 6394 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 6395 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 6396 f:\sp\public\sdk\inc\wincon.h -FILE 6397 f:\sp\public\sdk\inc\imm.h -FILE 6398 f:\sp\public\sdk\inc\winbase.h -FILE 6399 f:\sp\vctools\crt_bld\self_x86\crt\src\isctype.c -FILE 6400 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 6401 f:\sp\public\sdk\inc\wingdi.h -FILE 6402 f:\sp\public\sdk\inc\windef.h -FILE 6403 f:\sp\public\sdk\inc\winver.h -FILE 6404 f:\sp\public\sdk\inc\pshpack2.h -FILE 6405 f:\sp\public\sdk\inc\reason.h -FILE 6406 f:\sp\public\sdk\inc\winnt.h -FILE 6407 f:\sp\public\sdk\inc\specstrings.h -FILE 6408 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 6409 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 6410 f:\sp\public\sdk\inc\basetsd.h -FILE 6411 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 6412 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 6413 f:\sp\public\sdk\inc\pshpack4.h -FILE 6414 f:\sp\public\sdk\inc\winnetwk.h -FILE 6415 f:\sp\public\sdk\inc\stralign.h -FILE 6416 f:\sp\public\sdk\inc\poppack.h -FILE 6417 f:\sp\public\sdk\inc\winsvc.h -FILE 6418 f:\sp\public\sdk\inc\winuser.h -FILE 6419 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 6420 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 6421 f:\sp\public\sdk\inc\mcx.h -FILE 6422 f:\sp\public\sdk\inc\pshpack8.h -FILE 6423 f:\sp\public\sdk\inc\guiddef.h -FILE 6424 f:\sp\public\sdk\inc\ddbanned.h -FILE 6425 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 6426 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 6427 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 6428 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 6429 f:\sp\public\sdk\inc\windows.h -FILE 6430 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 6431 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 6432 f:\sp\public\sdk\inc\winnls.h -FILE 6433 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 6434 f:\sp\public\sdk\inc\pshpack1.h -FILE 6435 f:\sp\public\sdk\inc\winerror.h -FILE 6436 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 6437 f:\sp\public\sdk\inc\winreg.h -FILE 6438 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 6439 f:\sp\public\sdk\inc\tvout.h -FILE 6440 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 6441 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 6442 f:\sp\public\sdk\inc\wincon.h -FILE 6443 f:\sp\public\sdk\inc\imm.h -FILE 6444 f:\sp\public\sdk\inc\winbase.h -FILE 6445 f:\sp\vctools\crt_bld\self_x86\crt\src\iswctype.c -FILE 6446 f:\sp\public\sdk\inc\wingdi.h -FILE 6447 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 6448 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 6449 f:\sp\public\sdk\inc\winver.h -FILE 6450 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 6451 f:\sp\public\sdk\inc\windows.h -FILE 6452 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 6453 f:\sp\public\sdk\inc\pshpack2.h -FILE 6454 f:\sp\public\sdk\inc\reason.h -FILE 6455 f:\sp\public\sdk\inc\specstrings.h -FILE 6456 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 6457 f:\sp\public\sdk\inc\basetsd.h -FILE 6458 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 6459 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 6460 f:\sp\public\sdk\inc\pshpack4.h -FILE 6461 f:\sp\public\sdk\inc\winnetwk.h -FILE 6462 f:\sp\public\sdk\inc\stralign.h -FILE 6463 f:\sp\public\sdk\inc\poppack.h -FILE 6464 f:\sp\public\sdk\inc\winsvc.h -FILE 6465 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 6466 f:\sp\public\sdk\inc\windef.h -FILE 6467 f:\sp\public\sdk\inc\winuser.h -FILE 6468 f:\sp\public\sdk\inc\mcx.h -FILE 6469 f:\sp\public\sdk\inc\pshpack8.h -FILE 6470 f:\sp\public\sdk\inc\guiddef.h -FILE 6471 f:\sp\public\sdk\inc\ddbanned.h -FILE 6472 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 6473 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 6474 f:\sp\public\sdk\inc\winnt.h -FILE 6475 f:\sp\public\sdk\inc\winnls.h -FILE 6476 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 6477 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 6478 f:\sp\public\sdk\inc\pshpack1.h -FILE 6479 f:\sp\public\sdk\inc\winerror.h -FILE 6480 f:\sp\public\sdk\inc\winsvc.h -FILE 6481 f:\sp\public\sdk\inc\winuser.h -FILE 6482 f:\sp\public\sdk\inc\mcx.h -FILE 6483 f:\sp\public\sdk\inc\pshpack8.h -FILE 6484 f:\sp\public\sdk\inc\guiddef.h -FILE 6485 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 6486 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 6487 f:\sp\public\sdk\inc\windows.h -FILE 6488 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 6489 f:\sp\public\sdk\inc\winnls.h -FILE 6490 f:\sp\vctools\crt_bld\self_x86\crt\src\_wctype.c -FILE 6491 f:\sp\public\sdk\inc\pshpack1.h -FILE 6492 f:\sp\public\sdk\inc\winerror.h -FILE 6493 f:\sp\public\sdk\inc\winreg.h -FILE 6494 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 6495 f:\sp\public\sdk\inc\tvout.h -FILE 6496 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 6497 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 6498 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 6499 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 6500 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 6501 f:\sp\public\sdk\inc\wincon.h -FILE 6502 f:\sp\public\sdk\inc\imm.h -FILE 6503 f:\sp\public\sdk\inc\winbase.h -FILE 6504 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 6505 f:\sp\public\sdk\inc\wingdi.h -FILE 6506 f:\sp\public\sdk\inc\windef.h -FILE 6507 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h -FILE 6508 f:\sp\public\sdk\inc\winver.h -FILE 6509 f:\sp\public\sdk\inc\pshpack2.h -FILE 6510 f:\sp\public\sdk\inc\reason.h -FILE 6511 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 6512 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 6513 f:\sp\public\sdk\inc\winnt.h -FILE 6514 f:\sp\public\sdk\inc\specstrings.h -FILE 6515 f:\sp\public\sdk\inc\basetsd.h -FILE 6516 f:\sp\public\sdk\inc\pshpack4.h -FILE 6517 f:\sp\public\sdk\inc\ddbanned.h -FILE 6518 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 6519 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 6520 f:\sp\public\sdk\inc\winnetwk.h -FILE 6521 f:\sp\public\sdk\inc\stralign.h -FILE 6522 f:\sp\public\sdk\inc\poppack.h -FILE 6523 f:\sp\public\sdk\inc\mcx.h -FILE 6524 f:\sp\public\sdk\inc\pshpack8.h -FILE 6525 f:\sp\public\sdk\inc\guiddef.h -FILE 6526 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 6527 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 6528 f:\sp\public\sdk\inc\windows.h -FILE 6529 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 6530 f:\sp\public\sdk\inc\winnls.h -FILE 6531 f:\sp\public\sdk\inc\pshpack1.h -FILE 6532 f:\sp\public\sdk\inc\winerror.h -FILE 6533 f:\sp\public\sdk\inc\winreg.h -FILE 6534 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 6535 f:\sp\vctools\crt_bld\self_x86\crt\src\_ctype.c -FILE 6536 f:\sp\public\sdk\inc\tvout.h -FILE 6537 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 6538 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 6539 f:\sp\public\sdk\inc\wincon.h -FILE 6540 f:\sp\public\sdk\inc\imm.h -FILE 6541 f:\sp\public\sdk\inc\winbase.h -FILE 6542 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 6543 f:\sp\public\sdk\inc\wingdi.h -FILE 6544 f:\sp\public\sdk\inc\windef.h -FILE 6545 f:\sp\public\sdk\inc\winver.h -FILE 6546 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 6547 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 6548 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 6549 f:\sp\public\sdk\inc\pshpack2.h -FILE 6550 f:\sp\public\sdk\inc\reason.h -FILE 6551 f:\sp\public\sdk\inc\winnt.h -FILE 6552 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 6553 f:\sp\public\sdk\inc\specstrings.h -FILE 6554 f:\sp\public\sdk\inc\basetsd.h -FILE 6555 f:\sp\public\sdk\inc\pshpack4.h -FILE 6556 f:\sp\public\sdk\inc\winnetwk.h -FILE 6557 f:\sp\public\sdk\inc\stralign.h -FILE 6558 f:\sp\public\sdk\inc\poppack.h -FILE 6559 f:\sp\public\sdk\inc\winsvc.h -FILE 6560 f:\sp\public\sdk\inc\ddbanned.h -FILE 6561 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 6562 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 6563 f:\sp\public\sdk\inc\winuser.h -FILE 6564 f:\sp\public\sdk\inc\pshpack2.h -FILE 6565 f:\sp\public\sdk\inc\mcx.h -FILE 6566 f:\sp\public\sdk\inc\winuser.h -FILE 6567 f:\sp\public\sdk\inc\winnls.h -FILE 6568 f:\sp\public\sdk\inc\stralign.h -FILE 6569 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 6570 f:\sp\public\sdk\inc\windef.h -FILE 6571 f:\sp\public\sdk\inc\tvout.h -FILE 6572 f:\sp\public\sdk\inc\winsvc.h -FILE 6573 f:\sp\vctools\crt_bld\self_x86\crt\src\internal_securecrt.h -FILE 6574 f:\sp\public\sdk\inc\wingdi.h -FILE 6575 f:\sp\public\sdk\inc\pshpack4.h -FILE 6576 f:\sp\public\sdk\inc\poppack.h -FILE 6577 f:\sp\public\sdk\inc\winnt.h -FILE 6578 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 6579 f:\sp\public\sdk\inc\winnetwk.h -FILE 6580 f:\sp\public\sdk\inc\imm.h -FILE 6581 f:\sp\vctools\crt_bld\self_x86\crt\src\xtoa.c -FILE 6582 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 6583 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 6584 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 6585 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 6586 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 6587 f:\sp\vctools\crt_bld\self_x86\crt\src\xtoas.c -FILE 6588 f:\sp\public\sdk\inc\pshpack1.h -FILE 6589 f:\sp\public\sdk\inc\winver.h -FILE 6590 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 6591 f:\sp\public\sdk\inc\guiddef.h -FILE 6592 f:\sp\public\sdk\inc\specstrings.h -FILE 6593 f:\sp\public\sdk\inc\basetsd.h -FILE 6594 f:\sp\public\sdk\inc\winreg.h -FILE 6595 f:\sp\public\sdk\inc\ddbanned.h -FILE 6596 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 6597 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 6598 f:\sp\public\sdk\inc\windows.h -FILE 6599 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 6600 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 6601 f:\sp\public\sdk\inc\winbase.h -FILE 6602 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 6603 f:\sp\public\sdk\inc\winerror.h -FILE 6604 f:\sp\public\sdk\inc\pshpack8.h -FILE 6605 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 6606 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 6607 f:\sp\public\sdk\inc\reason.h -FILE 6608 f:\sp\public\sdk\inc\wincon.h -FILE 6609 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 6610 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h -FILE 6611 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 6612 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 6613 f:\sp\vctools\crt_bld\self_x86\crt\src\wchtodig.c -FILE 6614 f:\sp\public\sdk\inc\ddbanned.h -FILE 6615 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 6616 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 6617 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 6618 f:\sp\public\sdk\inc\poppack.h -FILE 6619 f:\sp\public\sdk\inc\winnetwk.h -FILE 6620 f:\sp\public\sdk\inc\imm.h -FILE 6621 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 6622 f:\sp\public\sdk\inc\windef.h -FILE 6623 f:\sp\public\sdk\inc\pshpack1.h -FILE 6624 f:\sp\public\sdk\inc\winver.h -FILE 6625 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 6626 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 6627 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 6628 f:\sp\public\sdk\inc\winnt.h -FILE 6629 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 6630 f:\sp\public\sdk\inc\winreg.h -FILE 6631 f:\sp\vctools\crt_bld\self_x86\crt\src\atox.c -FILE 6632 f:\sp\public\sdk\inc\winbase.h -FILE 6633 f:\sp\public\sdk\inc\winerror.h -FILE 6634 f:\sp\public\sdk\inc\pshpack8.h -FILE 6635 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 6636 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 6637 f:\sp\public\sdk\inc\reason.h -FILE 6638 f:\sp\public\sdk\inc\wincon.h -FILE 6639 f:\sp\public\sdk\inc\ddbanned.h -FILE 6640 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 6641 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 6642 f:\sp\public\sdk\inc\pshpack2.h -FILE 6643 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 6644 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 6645 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 6646 f:\sp\public\sdk\inc\mcx.h -FILE 6647 f:\sp\public\sdk\inc\winuser.h -FILE 6648 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 6649 f:\sp\public\sdk\inc\winnls.h -FILE 6650 f:\sp\public\sdk\inc\guiddef.h -FILE 6651 f:\sp\public\sdk\inc\windows.h -FILE 6652 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 6653 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h -FILE 6654 f:\sp\public\sdk\inc\specstrings.h -FILE 6655 f:\sp\public\sdk\inc\basetsd.h -FILE 6656 f:\sp\public\sdk\inc\stralign.h -FILE 6657 f:\sp\public\sdk\inc\tvout.h -FILE 6658 f:\sp\public\sdk\inc\winsvc.h -FILE 6659 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 6660 f:\sp\public\sdk\inc\wingdi.h -FILE 6661 f:\sp\public\sdk\inc\pshpack4.h -FUNC 1000 13 4 vswprintf -1000 0 50 71 -1000 12 51 71 -1012 1 52 71 -FUNC 1020 1b 10 wmemcpy_s -1020 0 1230 66 -1020 1b 1233 66 -FUNC 1040 1b 10 wmemmove_s -1040 0 1250 66 -1040 1b 1253 66 -FUNC 1060 19 4 std::bad_alloc::bad_alloc(char const *) -1060 13 371 83 -1073 6 372 83 -FUNC 1080 b 0 std::bad_alloc::~bad_alloc() -1080 6 380 83 -1086 5 381 83 -FUNC 1090 24 0 std::bad_alloc::`vector deleting destructor'(unsigned int) -FUNC 10c0 f 8 std::char_traits::assign(wchar_t &,wchar_t const &) -10c0 0 302 70 -10c0 e 303 70 -10ce 1 304 70 -FUNC 10d0 17 4 std::char_traits::length(wchar_t const *) -10d0 0 325 70 -10d0 16 327 70 -10e6 1 328 70 -FUNC 10f0 27 10 std::char_traits::_Copy_s(wchar_t *,unsigned int,wchar_t const *,unsigned int) -10f0 0 340 70 -10f0 23 343 70 -1113 3 344 70 -1116 1 345 70 -FUNC 1120 27 10 std::char_traits::_Move_s(wchar_t *,unsigned int,wchar_t const *,unsigned int) -1120 0 364 70 -1120 23 367 70 -1143 3 368 70 -1146 1 369 70 -FUNC 1150 d 8 std::char_traits::assign(char &,char const &) -1150 0 417 70 -1150 c 418 70 -115c 1 419 70 -FUNC 1160 13 4 std::char_traits::length(char const *) -1160 0 440 70 -1160 12 442 70 -1172 1 443 70 -FUNC 1180 21 10 std::char_traits::_Copy_s(char *,unsigned int,char const *,unsigned int) -1180 0 455 70 -1180 1d 458 70 -119d 3 459 70 -11a0 1 460 70 -FUNC 11b0 21 10 std::char_traits::_Move_s(char *,unsigned int,char const *,unsigned int) -11b0 0 479 70 -11b0 1d 482 70 -11cd 3 483 70 -11d0 1 484 70 -FUNC 11e0 7 0 std::_Iterator_base::_Iterator_base() -11e0 6 441 65 -11e6 1 442 65 -FUNC 11f0 6b 4 std::logic_error::logic_error(std::basic_string,std::allocator > const &) -11f0 56 27 82 -1246 15 28 82 -FUNC 1260 32 0 std::logic_error::~logic_error() -1260 9 31 82 -1269 29 32 82 -FUNC 12a0 e 0 std::logic_error::what() -12a0 0 35 82 -12a0 9 36 82 -12a9 1 37 82 -12aa 3 36 82 -12ad 1 37 82 -FUNC 12b0 47 0 std::logic_error::`scalar deleting destructor'(unsigned int) -FUNC 1300 19 4 std::length_error::length_error(std::basic_string,std::allocator > const &) -1300 13 106 82 -1313 6 107 82 -FUNC 1320 32 0 std::length_error::~length_error() -1320 3 110 82 -1323 2f 111 82 -FUNC 1360 47 0 std::length_error::`vector deleting destructor'(unsigned int) -FUNC 13b0 19 4 std::out_of_range::out_of_range(std::basic_string,std::allocator > const &) -13b0 13 130 82 -13c3 6 131 82 -FUNC 13d0 32 0 std::out_of_range::~out_of_range() -13d0 3 134 82 -13d3 2f 135 82 -FUNC 1410 47 0 std::out_of_range::`vector deleting destructor'(unsigned int) -FUNC 1460 19 4 std::out_of_range::out_of_range(std::out_of_range const &) -FUNC 1480 71 4 std::logic_error::logic_error(std::logic_error const &) -FUNC 1500 1b 8 google_breakpad::WindowsStringUtils::safe_swprintf(wchar_t *,unsigned int,wchar_t const *,...) -1500 0 94 63 -1500 1a 97 63 -151a 1 105 63 -FUNC 1520 35 0 google_breakpad::ExceptionHandler::set_dump_path(std::basic_string,std::allocator > const &) -1520 4 137 43 -1524 f 138 43 -1533 c 139 43 -153f 7 140 43 -1546 1 141 43 -1547 6 139 43 -154d 7 140 43 -1554 1 141 43 -FUNC 1560 20b 14 google_breakpad::ExceptionHandler::ExceptionHandler(std::basic_string,std::allocator > const &,bool (*)(void *,_EXCEPTION_POINTERS *,MDRawAssertionInfo *),bool (*)(wchar_t const *,wchar_t const *,void *,_EXCEPTION_POINTERS *,MDRawAssertionInfo *,bool),void *,bool) -1560 6d 75 12 -15cd 90 78 12 -165d 9 86 12 -1666 d 87 12 -1673 d 88 12 -1680 1e 96 12 -169e 11 98 12 -16af 7 99 12 -16b6 f 101 12 -16c5 a 104 12 -16cf 8 105 12 -16d7 7 106 12 -16de 7 107 12 -16e5 b 110 12 -16f0 8 114 12 -16f8 25 115 12 -171d d 117 12 -172a b 118 12 -1735 10 121 12 -1745 e 124 12 -1753 18 126 12 -FUNC 1770 274 0 google_breakpad::ExceptionHandler::~ExceptionHandler() -1770 e 128 12 -177e a 129 12 -1788 7 130 12 -178f a 133 12 -1799 b 134 12 -17a4 a 136 12 -17ae 9 139 12 -17b7 63 142 12 -181a 23 143 12 -183d 5 144 12 -1842 13 147 12 -1855 2b 149 12 -1880 2a 151 12 -18aa 17 152 12 -18c1 2c 153 12 -18ed 19 151 12 -1906 11 158 12 -1917 23 161 12 -193a 6 162 12 -1940 d 165 12 -194d f 169 12 -195c d 170 12 -1969 f 171 12 -1978 9 172 12 -1981 63 173 12 -FUNC 19f0 31 0 std::vector >::`scalar deleting destructor'(unsigned int) -FUNC 1a30 51 4 google_breakpad::ExceptionHandler::ExceptionHandlerThreadMain(void *) -1a30 13 176 12 -1a43 f 182 12 -1a52 1a 185 12 -1a6c 13 188 12 -1a7f 2 190 12 -FUNC 1a90 c7 4 google_breakpad::AutoExceptionHandler::AutoExceptionHandler() -1a90 7 204 12 -1a97 b 221 12 -1aa2 82 224 12 -1b24 d 225 12 -1b31 c 229 12 -1b3d e 231 12 -1b4b c 233 12 -FUNC 1b60 36 0 google_breakpad::AutoExceptionHandler::~AutoExceptionHandler() -1b60 0 235 12 -1b60 b 237 12 -1b6b d 239 12 -1b78 b 242 12 -1b83 7 243 12 -1b8a b 244 12 -1b95 1 245 12 -FUNC 1ba0 3 0 google_breakpad::AutoExceptionHandler::get_handler() -1ba0 3 247 12 -FUNC 1bb0 c4 4 google_breakpad::ExceptionHandler::HandleException(_EXCEPTION_POINTERS *) -1bb0 2b 254 12 -1bdb a 255 12 -1be5 f 262 12 -1bf4 1e 265 12 -1c12 5 273 12 -1c17 2 274 12 -1c19 7 283 12 -1c20 5 284 12 -1c25 2 285 12 -1c27 2 286 12 -1c29 37 290 12 -1c60 14 291 12 -FUNC 1c80 121 14 google_breakpad::ExceptionHandler::HandleInvalidParameter(wchar_t const *,wchar_t const *,wchar_t const *,unsigned int,unsigned int) -1c80 40 299 12 -1cc0 b7 319 12 -1d77 7 320 12 -1d7e 14 323 12 -1d92 2 324 12 -1d94 5 337 12 -1d99 8 345 12 -FUNC 1db0 81 8 google_breakpad::ExceptionHandler::WriteMinidumpOnHandlerThread(_EXCEPTION_POINTERS *,MDRawAssertionInfo *) -1db0 2 350 12 -1db2 d 351 12 -1dbf 6 354 12 -1dc5 2b 359 12 -1df0 f 362 12 -1dff 6 363 12 -1e05 26 370 12 -1e2b 3 372 12 -1e2e 3 373 12 -FUNC 1e40 1d 0 google_breakpad::ExceptionHandler::WriteMinidump() -1e40 3 375 12 -1e43 b 376 12 -1e4e b 377 12 -1e59 3 378 12 -1e5c 1 379 12 -FUNC 1e60 a2 4 google_breakpad::ExceptionHandler::WriteMinidump(std::basic_string,std::allocator > const &,bool (*)(wchar_t const *,wchar_t const *,void *,_EXCEPTION_POINTERS *,MDRawAssertionInfo *,bool),void *) -1e60 41 384 12 -1ea1 10 385 12 -1eb1 2a 386 12 -1edb 27 387 12 -FUNC 1f10 142 c google_breakpad::ExceptionHandler::WriteMinidumpWithException(unsigned long,_EXCEPTION_POINTERS *,MDRawAssertionInfo *) -1f10 0 392 12 -1f10 22 399 12 -1f32 7 466 12 -1f39 2 403 12 -1f3b e 404 12 -1f49 1f 411 12 -1f68 9 412 12 -1f71 8 414 12 -1f79 4 415 12 -1f7d 8 416 12 -1f85 8 426 12 -1f8d a 427 12 -1f97 34 440 12 -1fcb 8 441 12 -1fd3 8 442 12 -1fdb 4 443 12 -1fdf 8 444 12 -1fe7 30 454 12 -2017 c 456 12 -2023 7 460 12 -202a 1e 462 12 -2048 4 465 12 -204c 6 466 12 -FUNC 2060 138 0 google_breakpad::ExceptionHandler::UpdateNextID() -2060 38 468 12 -2098 b 470 12 -20a3 4a 471 12 -20ed 25 472 12 -2112 1c 477 12 -212e 31 478 12 -215f 14 479 12 -2173 25 480 12 -FUNC 21a0 3b 4 std::basic_string,std::allocator >::basic_string,std::allocator >(char const *) -21a0 0 650 17 -21a0 35 652 17 -21d5 6 653 17 -FUNC 21e0 25 4 std::basic_string,std::allocator >::basic_string,std::allocator >(std::basic_string,std::allocator > const &) -21e0 1 720 17 -21e1 4 721 17 -21e5 1a 722 17 -21ff 6 723 17 -FUNC 2210 26 0 std::basic_string,std::allocator >::~basic_string,std::allocator >() -2210 3 904 17 -2213 22 905 17 -2235 1 906 17 -FUNC 2240 e 0 std::basic_string,std::allocator >::c_str() -2240 0 1621 17 -2240 9 1622 17 -2249 1 1623 17 -224a 3 1622 17 -224d 1 1623 17 -FUNC 2250 4 0 std::basic_string,std::allocator >::size() -2250 0 1636 17 -2250 3 1637 17 -2253 1 1638 17 -FUNC 2260 11 0 std::basic_string,std::allocator >::basic_string,std::allocator >() -2260 0 564 17 -2260 10 565 17 -2270 1 566 17 -FUNC 2280 27 0 std::basic_string,std::allocator >::~basic_string,std::allocator >() -2280 3 904 17 -2283 23 905 17 -22a6 1 906 17 -FUNC 22b0 b 0 std::basic_string,std::allocator >::operator=(std::basic_string,std::allocator > const &) -22b0 0 914 17 -22b0 a 915 17 -22ba 1 916 17 -FUNC 22c0 24 4 std::basic_string,std::allocator >::operator=(wchar_t const *) -22c0 0 919 17 -22c0 21 920 17 -22e1 3 921 17 -FUNC 22f0 e 0 std::basic_string,std::allocator >::c_str() -22f0 0 1621 17 -22f0 9 1622 17 -22f9 1 1623 17 -22fa 3 1622 17 -22fd 1 1623 17 -FUNC 2300 c 0 std::vector >::vector >() -2300 0 457 23 -2300 b 458 23 -230b 1 459 23 -FUNC 2310 26 0 std::vector >::~vector >() -2310 0 545 23 -2310 25 546 23 -2335 1 547 23 -FUNC 2340 1d 0 std::vector >::begin() -2340 1 627 23 -2341 1b 628 23 -235c 1 629 23 -FUNC 2360 1d 0 std::vector >::end() -2360 1 637 23 -2361 1b 638 23 -237c 1 639 23 -FUNC 2380 13 0 std::vector >::size() -2380 0 702 23 -2380 9 703 23 -2389 1 704 23 -238a 8 703 23 -2392 1 704 23 -FUNC 23a0 23 0 std::vector >::empty() -23a0 0 712 23 -23a0 10 713 23 -23b0 1 714 23 -23b1 11 713 23 -23c2 1 714 23 -FUNC 23d0 56 0 std::vector >::at(unsigned int) -23d0 b 729 23 -23db 15 730 23 -23f0 5 731 23 -23f5 29 732 23 -241e 8 733 23 -FUNC 2430 47 0 std::vector >::back() -2430 c 776 23 -243c 32 777 23 -246e 9 778 23 -FUNC 2480 68 0 std::vector >::push_back(google_breakpad::ExceptionHandler * const &) -2480 10 786 23 -2490 24 787 23 -24b4 d 796 23 -24c1 6 801 23 -24c7 1b 800 23 -24e2 6 801 23 -FUNC 24f0 23 0 std::vector >::pop_back() -24f0 6 818 23 -24f6 15 819 23 -250b 6 822 23 -2511 2 824 23 -FUNC 2520 3f 8 std::vector >::erase(std::_Vector_iterator >) -2520 7 996 23 -2527 24 998 23 -254b 11 1001 23 -255c 3 1002 23 -FUNC 2560 20 0 std::_Vector_iterator >::operator*() -2560 0 325 23 -2560 1c 326 23 -257c 1 327 23 -257d 2 326 23 -257f 1 327 23 -FUNC 2580 20 0 std::_Vector_iterator >::operator++() -2580 0 335 23 -2580 1d 336 23 -259d 2 337 23 -259f 1 338 23 -FUNC 25a0 1d 0 std::_Vector_const_iterator >::operator!=(std::_Vector_const_iterator > const &) -25a0 0 202 23 -25a0 1c 203 23 -25bc 1 204 23 -FUNC 25c0 da c std::basic_string,std::allocator >::assign(std::basic_string,std::allocator > const &,unsigned int,unsigned int) -25c0 1 1038 17 -25c1 12 1039 17 -25d3 5 1040 17 -25d8 3 1041 17 -25db a 1042 17 -25e5 2 1043 17 -25e7 4 1045 17 -25eb 17 1046 17 -2602 5 1052 17 -2607 3 1053 17 -260a 21 1047 17 -262b b 1049 17 -2636 13 1047 17 -2649 5 1052 17 -264e 3 1053 17 -2651 7 1047 17 -2658 5 1052 17 -265d 3 1053 17 -2660 22 1049 17 -2682 10 1050 17 -2692 5 1052 17 -2697 3 1053 17 -FUNC 26a0 27 4 std::basic_string,std::allocator >::assign(char const *) -26a0 1 1069 17 -26a1 23 1070 17 -26c4 3 1071 17 -FUNC 26d0 4a 8 std::basic_string,std::allocator >::_Tidy(bool,unsigned int) -26d0 0 2066 17 -26d0 f 2067 17 -26df 6 2069 17 -26e5 a 2072 17 -26ef d 2073 17 -26fc a 2074 17 -2706 11 2077 17 -2717 3 2078 17 -FUNC 2720 e 0 std::basic_string,std::allocator >::_Myptr() -2720 0 2092 17 -2720 9 2093 17 -2729 1 2094 17 -272a 3 2093 17 -272d 1 2094 17 -FUNC 2730 5 4 std::_String_val >::_String_val >(std::allocator) -2730 2 471 17 -2732 3 472 17 -FUNC 2740 5 4 std::_String_val >::_String_val >(std::_String_val > const &) -2740 2 477 17 -2742 3 484 17 -FUNC 2750 3 0 std::allocator::allocator() -2750 2 120 19 -2752 1 122 19 -FUNC 2760 b 0 std::basic_string,std::allocator >::assign(std::basic_string,std::allocator > const &) -2760 0 1032 17 -2760 a 1033 17 -276a 1 1034 17 -FUNC 2770 ef c std::basic_string,std::allocator >::assign(std::basic_string,std::allocator > const &,unsigned int,unsigned int) -2770 1 1038 17 -2771 12 1039 17 -2783 5 1040 17 -2788 3 1041 17 -278b a 1042 17 -2795 2 1043 17 -2797 4 1045 17 -279b 17 1046 17 -27b2 5 1052 17 -27b7 3 1053 17 -27ba 24 1047 17 -27de b 1049 17 -27e9 13 1047 17 -27fc 5 1052 17 -2801 3 1053 17 -2804 9 1047 17 -280d 5 1052 17 -2812 3 1053 17 -2815 2f 1049 17 -2844 13 1050 17 -2857 5 1052 17 -285c 3 1053 17 -FUNC 2860 2b 4 std::basic_string,std::allocator >::assign(wchar_t const *) -2860 1 1069 17 -2861 27 1070 17 -2888 3 1071 17 -FUNC 2890 4f 8 std::basic_string,std::allocator >::_Tidy(bool,unsigned int) -2890 0 2066 17 -2890 f 2067 17 -289f 6 2069 17 -28a5 a 2072 17 -28af 10 2073 17 -28bf a 2074 17 -28c9 13 2077 17 -28dc 3 2078 17 -FUNC 28e0 e 0 std::basic_string,std::allocator >::_Myptr() -28e0 0 2092 17 -28e0 9 2093 17 -28e9 1 2094 17 -28ea 3 2093 17 -28ed 1 2094 17 -FUNC 28f0 5 4 std::_String_val >::_String_val >(std::allocator) -28f0 2 471 17 -28f2 3 472 17 -FUNC 2900 3 0 std::allocator::allocator() -2900 2 120 19 -2902 1 122 19 -FUNC 2910 13 0 std::vector >::capacity() -2910 0 621 23 -2910 9 622 23 -2919 1 623 23 -291a 8 622 23 -2922 1 623 23 -FUNC 2930 86 c std::vector >::insert(std::_Vector_iterator >,google_breakpad::ExceptionHandler * const &) -2930 3 852 23 -2933 3e 853 23 -2971 11 854 23 -2982 2a 855 23 -29ac a 856 23 -FUNC 29c0 23 0 std::vector >::_Buy(unsigned int) -29c0 0 1066 23 -29c0 8 1070 23 -29c8 5 1071 23 -29cd a 1074 23 -29d7 3 1075 23 -29da 6 1076 23 -29e0 2 1078 23 -29e2 1 1079 23 -FUNC 29f0 1 0 std::vector >::_Destroy(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *) -29f0 0 1082 23 -29f0 1 1084 23 -FUNC 2a00 26 0 std::vector >::_Tidy() -2a00 0 1087 23 -2a00 7 1088 23 -2a07 9 1096 23 -2a10 15 1098 23 -2a25 1 1099 23 -FUNC 2a30 23 0 std::vector >::_Ufill(google_breakpad::ExceptionHandler * *,unsigned int,google_breakpad::ExceptionHandler * const &) -2a30 0 1207 23 -2a30 1f 1208 23 -2a4f 3 1209 23 -2a52 1 1210 23 -FUNC 2a60 76 0 std::vector >::_Xran() -2a60 23 1218 23 -2a83 53 1219 23 -FUNC 2ae0 3 4 std::_Vector_val >::_Vector_val >(std::allocator) -2ae0 0 412 23 -2ae0 3 413 23 -FUNC 2af0 1 0 std::allocator::allocator() -2af0 0 120 19 -2af0 1 122 19 -FUNC 2b00 21 0 std::_Vector_iterator >::_Vector_iterator >(google_breakpad::ExceptionHandler * *,std::_Container_base const *) -2b00 1e 314 23 -2b1e 3 315 23 -FUNC 2b30 32 4 std::_Vector_iterator >::operator+(int) -2b30 1 367 23 -2b31 2 368 23 -2b33 26 369 23 -2b59 9 370 23 -FUNC 2b70 2f 0 std::_Vector_iterator >::operator-(int) -2b70 1 378 23 -2b71 2 379 23 -2b73 25 380 23 -2b98 7 381 23 -FUNC 2ba0 20 0 std::_Vector_const_iterator >::operator*() -2ba0 0 92 23 -2ba0 a 103 23 -2baa f 104 23 -2bb9 3 107 23 -2bbc 1 108 23 -2bbd 2 107 23 -2bbf 1 108 23 -FUNC 2bc0 20 0 std::_Vector_const_iterator >::operator++() -2bc0 0 116 23 -2bc0 a 117 23 -2bca f 118 23 -2bd9 4 119 23 -2bdd 2 120 23 -2bdf 1 121 23 -FUNC 2be0 1d 0 std::_Vector_const_iterator >::operator==(std::_Vector_const_iterator > const &) -2be0 0 190 23 -2be0 f 195 23 -2bef d 198 23 -2bfc 1 199 23 -FUNC 2c00 c1 8 std::basic_string,std::allocator >::assign(char const *,unsigned int) -2c00 5 1056 17 -2c05 2d 1057 17 -2c32 1a 1058 17 -2c4c 4 1066 17 -2c50 25 1060 17 -2c75 c 1062 17 -2c81 f 1060 17 -2c90 8 1065 17 -2c98 3 1066 17 -2c9b e 1062 17 -2ca9 10 1063 17 -2cb9 5 1065 17 -2cbe 3 1066 17 -FUNC 2cd0 83 8 std::basic_string,std::allocator >::erase(unsigned int,unsigned int) -2cd0 1 1240 17 -2cd1 d 1241 17 -2cde 5 1242 17 -2ce3 d 1243 17 -2cf0 2 1244 17 -2cf2 4 1245 17 -2cf6 3c 1248 17 -2d32 8 1249 17 -2d3a 12 1250 17 -2d4c 4 1252 17 -2d50 3 1253 17 -FUNC 2d60 1f 4 std::basic_string,std::allocator >::_Eos(unsigned int) -2d60 0 2030 17 -2d60 14 2031 17 -2d74 3 2032 17 -2d77 5 2031 17 -2d7c 3 2032 17 -FUNC 2d80 bc 8 std::basic_string,std::allocator >::_Grow(unsigned int,bool) -2d80 1 2036 17 -2d81 c 2037 17 -2d8d 5 2038 17 -2d92 7 2039 17 -2d99 c 2040 17 -2da5 a 2046 17 -2daf 3 2047 17 -2db2 d 2041 17 -2dbf 39 2043 17 -2df8 10 2046 17 -2e08 3 2047 17 -2e0b 4 2044 17 -2e0f b 2045 17 -2e1a c 2046 17 -2e26 3 2047 17 -2e29 6 2045 17 -2e2f a 2046 17 -2e39 3 2047 17 -FUNC 2e40 e 0 std::basic_string,std::allocator >::_Myptr() -2e40 0 2087 17 -2e40 9 2088 17 -2e49 1 2089 17 -2e4a 3 2088 17 -2e4d 1 2089 17 -FUNC 2e50 5 4 std::allocator::allocator(std::allocator const &) -2e50 2 124 19 -2e52 3 126 19 -FUNC 2e60 e 8 std::allocator::deallocate(char *,unsigned int) -2e60 0 140 19 -2e60 b 141 19 -2e6b 3 142 19 -FUNC 2e70 da 8 std::basic_string,std::allocator >::assign(wchar_t const *,unsigned int) -2e70 4 1056 17 -2e74 31 1057 17 -2ea5 1d 1058 17 -2ec2 3 1066 17 -2ec5 28 1060 17 -2eed d 1062 17 -2efa 10 1060 17 -2f0a a 1065 17 -2f14 3 1066 17 -2f17 18 1062 17 -2f2f 14 1063 17 -2f43 4 1065 17 -2f47 3 1066 17 -FUNC 2f50 97 8 std::basic_string,std::allocator >::erase(unsigned int,unsigned int) -2f50 1 1240 17 -2f51 d 1241 17 -2f5e 5 1242 17 -2f63 d 1243 17 -2f70 2 1244 17 -2f72 4 1245 17 -2f76 4d 1248 17 -2fc3 8 1249 17 -2fcb 15 1250 17 -2fe0 4 1252 17 -2fe4 3 1253 17 -FUNC 2ff0 4 0 std::basic_string,std::allocator >::size() -2ff0 0 1636 17 -2ff0 3 1637 17 -2ff3 1 1638 17 -FUNC 3000 23 4 std::basic_string,std::allocator >::_Eos(unsigned int) -3000 0 2030 17 -3000 16 2031 17 -3016 3 2032 17 -3019 7 2031 17 -3020 3 2032 17 -FUNC 3030 c7 8 std::basic_string,std::allocator >::_Grow(unsigned int,bool) -3030 1 2036 17 -3031 f 2037 17 -3040 5 2038 17 -3045 7 2039 17 -304c c 2040 17 -3058 a 2046 17 -3062 3 2047 17 -3065 d 2041 17 -3072 3c 2043 17 -30ae 12 2046 17 -30c0 3 2047 17 -30c3 4 2044 17 -30c7 b 2045 17 -30d2 d 2046 17 -30df 3 2047 17 -30e2 8 2045 17 -30ea a 2046 17 -30f4 3 2047 17 -FUNC 3100 e 0 std::basic_string,std::allocator >::_Myptr() -3100 0 2087 17 -3100 9 2088 17 -3109 1 2089 17 -310a 3 2088 17 -310d 1 2089 17 -FUNC 3110 5 4 std::allocator::allocator(std::allocator const &) -3110 2 124 19 -3112 3 126 19 -FUNC 3120 e 8 std::allocator::deallocate(wchar_t *,unsigned int) -3120 0 140 19 -3120 b 141 19 -312b 3 142 19 -FUNC 3130 6 0 std::vector >::max_size() -3130 0 707 23 -3130 5 708 23 -3135 1 709 23 -FUNC 3140 208 8 std::vector >::_Insert_n(std::_Vector_iterator >,unsigned int,google_breakpad::ExceptionHandler * const &) -3140 6 1117 23 -3146 2 1125 23 -3148 1c 1126 23 -3164 1c 1130 23 -3180 5 1131 23 -3185 1b 1132 23 -31a0 23 1135 23 -31c3 17 1136 23 -31da 19 1137 23 -31f3 7 1138 23 -31fa 25 1143 23 -321f 7 1144 23 -3226 1e 1145 23 -3244 13 1152 23 -3257 4 1153 23 -325b 9 1156 23 -3264 7 1163 23 -326b a 1164 23 -3275 3 1165 23 -3278 a 1204 23 -3282 13 1167 23 -3295 17 1170 23 -32ac 1a 1174 23 -32c6 7 1180 23 -32cd 16 1187 23 -32e3 a 1204 23 -32ed 2a 1193 23 -3317 e 1200 23 -3325 19 1202 23 -333e a 1204 23 -FUNC 3350 7c 0 std::vector >::_Xlen() -3350 29 1213 23 -3379 53 1214 23 -FUNC 33d0 1 0 std::allocator::allocator(std::allocator const &) -33d0 0 124 19 -33d0 1 126 19 -FUNC 33e0 8 0 std::allocator::deallocate(google_breakpad::ExceptionHandler * *,unsigned int) -33e0 0 140 19 -33e0 7 141 19 -33e7 1 142 19 -FUNC 33f0 56 0 std::allocator::allocate(unsigned int) -33f0 3 145 19 -33f3 16 146 19 -3409 4 147 19 -340d 39 146 19 -FUNC 3450 32 4 std::_Vector_iterator >::operator+=(int) -3450 0 361 23 -3450 2c 362 23 -347c 3 363 23 -347f 3 364 23 -FUNC 3490 28 0 std::_Vector_iterator >::operator-=(int) -3490 0 373 23 -3490 27 374 23 -34b7 1 375 23 -FUNC 34c0 19 0 std::_Vector_iterator >::operator-(std::_Vector_const_iterator > const &) -34c0 0 384 23 -34c0 18 385 23 -34d8 1 386 23 -FUNC 34e0 21 0 std::_Vector_const_iterator >::_Vector_const_iterator >(google_breakpad::ExceptionHandler * *,std::_Container_base const *) -34e0 0 77 23 -34e0 19 79 23 -34f9 2 80 23 -34fb 3 81 23 -34fe 3 82 23 -FUNC 3510 19 4 std::length_error::length_error(std::length_error const &) -FUNC 3530 7 0 std::_Ranit::_Ranit() -FUNC 3540 6 0 std::basic_string,std::allocator >::max_size() -3540 0 1641 17 -3540 5 1643 17 -3545 1 1644 17 -FUNC 3550 171 8 std::basic_string,std::allocator >::_Copy(unsigned int,unsigned int) -3550 30 2000 17 -3580 8 2001 17 -3588 5 2002 17 -358d 2 2003 17 -358f 2 2004 17 -3591 1f 2005 17 -35b0 3 2006 17 -35b3 2 2009 17 -35b5 18 2010 17 -35cd 2 2019 17 -35cf 30 2010 17 -35ff 3 2012 17 -3602 19 2014 17 -361b c 2019 17 -3627 7 2021 17 -362e 20 2022 17 -364e 12 2023 17 -3660 1c 2026 17 -367c 14 2027 17 -3690 15 2016 17 -36a5 1c 2017 17 -FUNC 36d0 39 4 std::basic_string,std::allocator >::_Inside(char const *) -36d0 1 2050 17 -36d1 2b 2052 17 -36fc 3 2055 17 -36ff 4 2056 17 -3703 3 2053 17 -3706 3 2056 17 -FUNC 3710 6 0 std::basic_string,std::allocator >::max_size() -3710 0 1641 17 -3710 5 1643 17 -3715 1 1644 17 -FUNC 3720 17b 8 std::basic_string,std::allocator >::_Copy(unsigned int,unsigned int) -3720 30 2000 17 -3750 8 2001 17 -3758 8 2002 17 -3760 2 2003 17 -3762 2 2004 17 -3764 1f 2005 17 -3783 3 2006 17 -3786 2 2009 17 -3788 1b 2010 17 -37a3 2 2019 17 -37a5 30 2010 17 -37d5 3 2012 17 -37d8 19 2014 17 -37f1 c 2019 17 -37fd 7 2021 17 -3804 24 2022 17 -3828 12 2023 17 -383a 20 2026 17 -385a 14 2027 17 -386e 17 2016 17 -3885 16 2017 17 -FUNC 38a0 3a 4 std::basic_string,std::allocator >::_Inside(wchar_t const *) -38a0 1 2050 17 -38a1 2c 2052 17 -38cd 3 2055 17 -38d0 4 2056 17 -38d4 3 2053 17 -38d7 3 2056 17 -FUNC 38e0 6 0 std::allocator::max_size() -38e0 0 165 19 -38e0 5 167 19 -38e5 1 168 19 -FUNC 38f0 32 4 std::_Vector_const_iterator >::operator+=(int) -38f0 0 146 23 -38f0 a 147 23 -38fa 1a 148 23 -3914 5 150 23 -3919 3 151 23 -391c 3 152 23 -391f 3 153 23 -FUNC 3930 19 0 std::_Vector_const_iterator >::operator-(std::_Vector_const_iterator > const &) -3930 0 173 23 -3930 f 178 23 -393f 9 181 23 -3948 1 182 23 -FUNC 3950 56 4 std::allocator::allocate(unsigned int) -3950 0 145 19 -3950 16 146 19 -3966 6 147 19 -396c 3a 146 19 -FUNC 39b0 4 0 std::allocator::max_size() -39b0 0 165 19 -39b0 3 167 19 -39b3 1 168 19 -FUNC 39c0 59 4 std::allocator::allocate(unsigned int) -39c0 0 145 19 -39c0 19 146 19 -39d9 6 147 19 -39df 3a 146 19 -FUNC 3a20 6 0 std::allocator::max_size() -3a20 0 165 19 -3a20 5 167 19 -3a25 1 168 19 -FUNC 3a30 21 10 std::_Traits_helper::copy_s >(char *,unsigned int,char const *,unsigned int) -3a30 0 581 70 -3a30 20 582 70 -3a50 1 583 70 -FUNC 3a60 27 10 std::_Traits_helper::copy_s >(wchar_t *,unsigned int,wchar_t const *,unsigned int) -3a60 0 581 70 -3a60 26 582 70 -3a86 1 583 70 -FUNC 3a90 24 0 stdext::unchecked_copy(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *) -3a90 0 3407 65 -3a90 23 3409 65 -3ab3 1 3410 65 -FUNC 3ac0 1 0 std::_Destroy_range >(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::allocator &) -3ac0 0 225 19 -3ac0 1 227 19 -FUNC 3ad0 15 0 stdext::unchecked_uninitialized_fill_n >(google_breakpad::ExceptionHandler * *,unsigned int,google_breakpad::ExceptionHandler * const &,std::allocator &) -3ad0 0 914 24 -3ad0 14 916 24 -3ae4 1 917 24 -FUNC 3af0 21 10 std::_Traits_helper::move_s >(char *,unsigned int,char const *,unsigned int) -3af0 0 608 70 -3af0 20 609 70 -3b10 1 610 70 -FUNC 3b20 27 10 std::_Traits_helper::move_s >(wchar_t *,unsigned int,wchar_t const *,unsigned int) -3b20 0 608 70 -3b20 26 609 70 -3b46 1 610 70 -FUNC 3b50 22 0 std::vector >::_Umove(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *) -3b50 0 1109 23 -3b50 21 1112 23 -3b71 1 1113 23 -FUNC 3b80 10 0 std::fill(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * const &) -3b80 0 2976 65 -3b80 f 2977 65 -3b8f 1 2978 65 -FUNC 3b90 25 0 stdext::_Unchecked_move_backward(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *) -3b90 0 3497 65 -3b90 24 3499 65 -3bb4 1 3500 65 -FUNC 3bc0 4f 0 std::_Allocate(unsigned int,google_breakpad::ExceptionHandler * *) -3bc0 0 37 19 -3bc0 f 40 19 -3bcf 2c 41 19 -3bfb 10 44 19 -3c0b 4 45 19 -FUNC 3c10 54 8 std::_Allocate(unsigned int,char *) -3c10 0 37 19 -3c10 b 38 19 -3c1b 2 39 19 -3c1d 9 44 19 -3c26 4 45 19 -3c2a c 40 19 -3c36 2e 41 19 -FUNC 3c70 57 8 std::_Allocate(unsigned int,wchar_t *) -3c70 0 37 19 -3c70 b 38 19 -3c7b 2 39 19 -3c7d c 44 19 -3c89 4 45 19 -3c8d c 40 19 -3c99 2e 41 19 -FUNC 3cd0 19 4 std::bad_alloc::bad_alloc(std::bad_alloc const &) -FUNC 3cf0 7 0 std::_Char_traits_cat >() -3cf0 1 568 70 -3cf1 4 570 70 -3cf5 2 571 70 -FUNC 3d00 21 14 std::_Traits_helper::copy_s >(char *,unsigned int,char const *,unsigned int,std::_Secure_char_traits_tag) -3d00 0 589 70 -3d00 20 590 70 -3d20 1 591 70 -FUNC 3d30 7 0 std::_Char_traits_cat >() -3d30 1 568 70 -3d31 4 570 70 -3d35 2 571 70 -FUNC 3d40 27 14 std::_Traits_helper::copy_s >(wchar_t *,unsigned int,wchar_t const *,unsigned int,std::_Secure_char_traits_tag) -3d40 0 589 70 -3d40 26 590 70 -3d66 1 591 70 -FUNC 3d70 3 0 std::_Checked_base(google_breakpad::ExceptionHandler * * &) -3d70 0 1009 65 -3d70 2 1011 65 -3d72 1 1012 65 -FUNC 3d80 1 0 std::_Iter_random(google_breakpad::ExceptionHandler * * const &,google_breakpad::ExceptionHandler * * const &) -3d80 0 839 65 -3d80 1 844 65 -FUNC 3d90 7 0 std::_Ptr_cat(google_breakpad::ExceptionHandler * * &,google_breakpad::ExceptionHandler * * &) -3d90 1 1329 65 -3d91 4 1331 65 -3d95 2 1332 65 -FUNC 3da0 15 4 std::_Copy_opt(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::random_access_iterator_tag,std::_Scalar_ptr_iterator_tag,std::_Range_checked_iterator_tag) -3da0 0 2288 65 -3da0 d 2300 65 -3dad 7 2301 65 -3db4 1 2302 65 -FUNC 3dc0 1 4 std::_Destroy_range >(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::allocator &,std::_Scalar_ptr_iterator_tag) -3dc0 0 242 19 -3dc0 1 243 19 -FUNC 3dd0 15 8 std::_Uninit_fill_n >(google_breakpad::ExceptionHandler * *,unsigned int,google_breakpad::ExceptionHandler * const &,std::allocator &,std::_Scalar_ptr_iterator_tag,std::_Range_checked_iterator_tag) -3dd0 0 415 24 -3dd0 14 416 24 -3de4 1 417 24 -FUNC 3df0 21 14 std::_Traits_helper::move_s >(char *,unsigned int,char const *,unsigned int,std::_Secure_char_traits_tag) -3df0 0 616 70 -3df0 20 617 70 -3e10 1 618 70 -FUNC 3e20 27 14 std::_Traits_helper::move_s >(wchar_t *,unsigned int,wchar_t const *,unsigned int,std::_Secure_char_traits_tag) -3e20 0 616 70 -3e20 26 617 70 -3e46 1 618 70 -FUNC 3e50 22 0 stdext::_Unchecked_uninitialized_move >(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::allocator &) -3e50 0 843 24 -3e50 21 845 24 -3e71 1 846 24 -FUNC 3e80 10 0 std::_Fill(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * const &) -3e80 0 2946 65 -3e80 6 2948 65 -3e86 9 2949 65 -3e8f 1 2950 65 -FUNC 3e90 7 0 std::_Move_cat(google_breakpad::ExceptionHandler * * const &) -3e90 1 1046 65 -3e91 4 1048 65 -3e95 2 1049 65 -FUNC 3ea0 25 c std::_Move_backward_opt(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::random_access_iterator_tag,std::_Undefined_move_tag,std::_Range_checked_iterator_tag) -3ea0 0 2546 65 -3ea0 24 2548 65 -3ec4 1 2549 65 -FUNC 3ed0 3 4 std::_Checked_base(google_breakpad::ExceptionHandler * * &,std::_Unchanged_checked_iterator_base_type_tag) -3ed0 0 992 65 -3ed0 2 993 65 -3ed2 1 994 65 -FUNC 3ee0 15 0 stdext::unchecked_fill_n(google_breakpad::ExceptionHandler * *,unsigned int,google_breakpad::ExceptionHandler * const &) -3ee0 0 3523 65 -3ee0 14 3524 65 -3ef4 1 3525 65 -FUNC 3f00 22 8 std::_Uninit_move,std::_Undefined_move_tag>(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::allocator &,std::_Undefined_move_tag,std::_Range_checked_iterator_tag) -3f00 0 205 24 -3f00 21 206 24 -3f21 1 207 24 -FUNC 3f30 13 0 std::_Copy_backward_opt(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::random_access_iterator_tag,std::_Scalar_ptr_iterator_tag,std::_Range_checked_iterator_tag) -3f30 0 2492 65 -3f30 10 2506 65 -3f40 2 2507 65 -3f42 1 2508 65 -FUNC 3f50 1 0 std::_Iter_cat(google_breakpad::ExceptionHandler * * const &) -3f50 0 798 65 -3f50 1 801 65 -FUNC 3f60 15 8 std::_Fill_n(google_breakpad::ExceptionHandler * *,unsigned int,google_breakpad::ExceptionHandler * const &,std::random_access_iterator_tag,std::_Range_checked_iterator_tag) -3f60 0 3040 65 -3f60 14 3044 65 -3f74 1 3045 65 -FUNC 3f80 22 0 stdext::unchecked_uninitialized_copy >(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::allocator &) -3f80 0 803 24 -3f80 21 805 24 -3fa1 1 806 24 -FUNC 3fb0 15 4 std::_Fill_n(google_breakpad::ExceptionHandler * *,unsigned int,google_breakpad::ExceptionHandler * const &,std::_Range_checked_iterator_tag) -3fb0 0 2986 65 -3fb0 5 2987 65 -3fb5 f 2988 65 -3fc4 1 2989 65 -FUNC 3fd0 15 4 std::_Uninit_copy >(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::allocator &,std::_Scalar_ptr_iterator_tag,std::_Range_checked_iterator_tag) -3fd0 0 144 24 -3fd0 d 150 24 -3fdd 7 151 24 -3fe4 1 152 24 -FUNC 3ff0 13 4 vswprintf -3ff0 0 50 147 -3ff0 12 51 147 -4002 1 52 147 -FUNC 4010 ae 4 google_breakpad::GUIDString::GUIDToWString(_GUID *) -4010 12 43 126 -4022 51 51 126 -4073 3a 52 126 -40ad 11 53 126 -FUNC 40c0 ae 4 google_breakpad::GUIDString::GUIDToSymbolServerWString(_GUID *) -40c0 12 56 126 -40d2 51 64 126 -4123 3a 65 126 -415d 11 66 126 -FUNC 4170 40 4 std::basic_string,std::allocator >::basic_string,std::allocator >(wchar_t const *) -4170 0 650 143 -4170 3a 652 143 -41aa 6 653 143 -FUNC 41b0 86 8 main -41b0 13 63 178 -41c3 38 64 178 -41fb 5 65 178 -4200 d 66 178 -420d 1b 67 178 -4228 e 68 178 -FUNC 4240 41 18 `anonymous namespace'::callback -4240 3 45 178 -4243 8 46 178 -424b 11 47 178 -425c 2 48 178 -425e d 49 178 -426b 11 51 178 -427c 3 53 178 -427f 2 54 178 -FUNC 4290 18 0 `anonymous namespace'::CrashFunction -4290 4 56 178 -4294 7 57 178 -429b 9 58 178 -42a4 4 59 178 -FUNC 42ae 18 4 std::invalid_argument::invalid_argument(std::basic_string,std::allocator > const &) -42ae 12 82 298 -42c0 6 83 298 -FUNC 42c6 b 0 std::invalid_argument::~invalid_argument() -42c6 6 86 298 -42cc 5 87 298 -FUNC 42d1 22 0 std::invalid_argument::`vector deleting destructor'(unsigned int) -FUNC 42f3 3f 0 std::_String_base::_Xlen() -42f3 c 12 291 -42ff 33 13 291 -FUNC 4332 3f 0 std::_String_base::_Xran() -4332 c 17 291 -433e 33 18 291 -FUNC 4371 3f 0 std::_String_base::_Xinvarg() -4371 c 22 291 -437d 33 23 291 -FUNC 43b0 18 4 std::invalid_argument::invalid_argument(std::invalid_argument const &) -FUNC 43c8 af 4 printf -43c8 c 49 1601 -43d4 2b 54 1601 -43ff 14 58 1601 -4413 3 59 1601 -4416 10 61 1601 -4426 18 63 1601 -443e 11 65 1601 -444f c 68 1601 -445b 3 72 1601 -445e 6 73 1601 -4464 13 69 1601 -FUNC 4477 16 8 _printf_l -4477 0 80 1601 -4477 15 85 1601 -448c 1 86 1601 -FUNC 448d 16 8 _printf_s_l -448d 0 94 1601 -448d 15 99 1601 -44a2 1 100 1601 -FUNC 44a3 14 4 printf_s -44a3 0 106 1601 -44a3 13 111 1601 -44b6 1 112 1601 -FUNC 44b7 16 8 _printf_p_l -44b7 0 119 1601 -44b7 15 124 1601 -44cc 1 125 1601 -FUNC 44cd 14 4 _printf_p -44cd 0 131 1601 -44cd 13 136 1601 -44e0 1 137 1601 -FUNC 44e1 25 4 _set_printf_count_output -44e1 0 154 1601 -44e1 6 155 1601 -44e7 1e 156 1601 -4505 1 158 1601 -FUNC 4506 16 0 _get_printf_count_output -4506 0 167 1601 -4506 15 168 1601 -451b 1 169 1601 -FUNC 451c f 0 __security_check_cookie -451c 0 52 4397 -451c 6 55 4397 -4522 2 56 4397 -4524 2 57 4397 -4526 5 59 4397 -FUNC 452b 62 4 _flush -452b 2 142 1704 -452d 25 152 1704 -4552 16 154 1704 -4568 7 158 1704 -456f 6 159 1704 -4575 2 161 1704 -4577 4 162 1704 -457b 4 163 1704 -457f 3 167 1704 -4582 7 168 1704 -4589 3 170 1704 -458c 1 171 1704 -FUNC 458d 42 4 _fflush_nolock -458d 1 98 1704 -458e 8 102 1704 -4596 8 103 1704 -459e 1 116 1704 -459f b 106 1704 -45aa 4 108 1704 -45ae 1 116 1704 -45af 8 112 1704 -45b7 13 113 1704 -45ca 1 116 1704 -45cb 3 115 1704 -45ce 1 116 1704 -FUNC 45cf da 4 flsall -45cf c 228 1704 -45db 5 230 1704 -45e0 3 231 1704 -45e3 8 233 1704 -45eb 3 234 1704 -45ee 11 236 1704 -45ff 14 238 1704 -4613 9 246 1704 -461c 6 248 1704 -4622 10 254 1704 -4632 5 256 1704 -4637 c 262 1704 -4643 3 266 1704 -4646 2 268 1704 -4648 a 269 1704 -4652 c 275 1704 -465e 3 276 1704 -4661 8 281 1704 -4669 3 236 1704 -466c 5 281 1704 -4671 11 282 1704 -4682 c 288 1704 -468e 4 292 1704 -4692 3 293 1704 -4695 2 292 1704 -4697 3 295 1704 -469a 6 296 1704 -46a0 9 289 1704 -FUNC 46a9 53 4 fflush -46a9 c 57 1704 -46b5 7 62 1704 -46bc 9 63 1704 -46c5 9 65 1704 -46ce 3 67 1704 -46d1 c 68 1704 -46dd c 70 1704 -46e9 3 74 1704 -46ec 6 75 1704 -46f2 a 71 1704 -FUNC 46fc 9 0 _flushall -46fc 0 193 1704 -46fc 8 194 1704 -4704 1 195 1704 -FUNC 4705 6 0 __iob_func -4705 0 53 2087 -4705 5 54 2087 -470a 1 55 2087 -FUNC 470b b1 0 __initstdio -470b 0 113 2087 -470b d 122 2087 -4718 7 123 2087 -471f 4 124 2087 -4723 7 125 2087 -472a 13 134 2087 -473d 19 137 2087 -4756 4 138 2087 -475a 1 163 2087 -475b e 145 2087 -4769 11 146 2087 -477a b 148 2087 -4785 24 151 2087 -47a9 2 158 2087 -47ab d 148 2087 -47b8 3 162 2087 -47bb 1 163 2087 -FUNC 47bc 20 0 __endstdio -47bc 0 191 2087 -47bc 5 193 2087 -47c1 9 196 2087 -47ca 5 197 2087 -47cf c 198 2087 -47db 1 199 2087 -FUNC 47dc 3c 4 _lock_file -47dc 1 221 2087 -47dd 15 226 2087 -47f2 10 231 2087 -4802 9 233 2087 -480b 1 242 2087 -480c b 241 2087 -4817 1 242 2087 -FUNC 4818 2e 8 _lock_file2 -4818 0 264 2087 -4818 9 269 2087 -4821 9 274 2087 -482a c 276 2087 -4836 1 285 2087 -4837 e 284 2087 -4845 1 285 2087 -FUNC 4846 36 4 _unlock_file -4846 0 306 2087 -4846 14 311 2087 -485a 7 317 2087 -4861 f 318 2087 -4870 1 327 2087 -4871 a 326 2087 -487b 1 327 2087 -FUNC 487c 2a 8 _unlock_file2 -487c 0 349 2087 -487c 7 354 2087 -4883 d 360 2087 -4890 a 361 2087 -489a 1 370 2087 -489b a 369 2087 -48a5 1 370 2087 -FUNC 48a6 16 4 wcslen -48a6 0 41 731 -48a6 4 42 731 -48aa a 44 731 -48b4 7 46 731 -48bb 1 47 731 -FUNC 48bc 5 4 operator delete(void *) -48bc 0 20 5184 -48bc 5 23 5184 -FUNC 48c1 30 8 _JumpToContinuation(void *,EHRegistrationNode *) -48c1 5 77 5627 -48c6 9 84 5627 -48cf 7 93 5627 -48d6 2 94 5627 -48d8 6 95 5627 -48de 3 100 5627 -48e1 3 101 5627 -48e4 3 102 5627 -48e7 3 103 5627 -48ea 2 104 5627 -48ec 5 106 5627 -FUNC 48f1 7 8 _CallMemberFunction0(void *,void *) -48f1 0 118 5627 -48f1 1 120 5627 -48f2 1 121 5627 -48f3 3 122 5627 -48f6 2 123 5627 -FUNC 48f8 7 c _CallMemberFunction1(void *,void *,void *) -48f8 0 139 5627 -48f8 1 141 5627 -48f9 1 142 5627 -48fa 3 143 5627 -48fd 2 144 5627 -FUNC 48ff 7 10 _CallMemberFunction2(void *,void *,void *,int) -48ff 0 161 5627 -48ff 1 163 5627 -4900 1 164 5627 -4901 3 165 5627 -4904 2 166 5627 -FUNC 4906 52 8 _UnwindNestedFrames(EHRegistrationNode *,EHExceptionRecord *) -4906 8 218 5627 -490e 7 232 5627 -4915 3 233 5627 -4918 7 236 5627 -491f 10 237 5627 -492f f 241 5627 -493e 7 247 5627 -4945 3 248 5627 -4948 2 249 5627 -494a 7 250 5627 -4951 7 256 5627 -FUNC 4958 36 10 __CxxFrameHandler -4958 0 287 5627 -4958 1 295 5627 -4959 2 296 5627 -495b 3 297 5627 -495e 1 298 5627 -495f 1 299 5627 -4960 1 300 5627 -4961 1 301 5627 -4962 3 306 5627 -4965 1f 311 5627 -4984 1 316 5627 -4985 1 317 5627 -4986 1 318 5627 -4987 3 319 5627 -498a 2 320 5627 -498c 1 321 5627 -498d 1 322 5627 -FUNC 498e 36 10 __CxxFrameHandler3 -498e 0 341 5627 -498e 1 349 5627 -498f 2 350 5627 -4991 3 351 5627 -4994 1 352 5627 -4995 1 353 5627 -4996 1 354 5627 -4997 1 355 5627 -4998 3 360 5627 -499b 1f 365 5627 -49ba 1 370 5627 -49bb 1 371 5627 -49bc 1 372 5627 -49bd 3 373 5627 -49c0 2 374 5627 -49c2 1 375 5627 -49c3 1 376 5627 -FUNC 49c4 36 10 __CxxFrameHandler2 -49c4 0 391 5627 -49c4 1 399 5627 -49c5 2 400 5627 -49c7 3 401 5627 -49ca 1 402 5627 -49cb 1 403 5627 -49cc 1 404 5627 -49cd 1 405 5627 -49ce 3 410 5627 -49d1 1f 415 5627 -49f0 1 420 5627 -49f1 1 421 5627 -49f2 1 422 5627 -49f3 3 423 5627 -49f6 2 424 5627 -49f8 1 425 5627 -49f9 1 426 5627 -FUNC 49fa 1a 4 __CxxLongjmpUnwind -49fa 0 443 5627 -49fa 17 449 5627 -4a11 3 452 5627 -FUNC 4a14 30 10 CatchGuardHandler -4a14 1 545 5627 -4a15 1 551 5627 -4a16 e 557 5627 -4a24 1f 567 5627 -4a43 1 572 5627 -FUNC 4a44 d5 1c _CallSETranslator(EHExceptionRecord *,EHRegistrationNode *,void *,void *,_s_FuncInfo const *,int,EHRegistrationNode *) -4a44 7 637 5627 -4a4b 9 642 5627 -4a54 5 644 5627 -4a59 3 645 5627 -4a5c 2 646 5627 -4a5e 8 648 5627 -4a66 4 656 5627 -4a6a 7 657 5627 -4a71 d 658 5627 -4a7e 6 659 5627 -4a84 6 660 5627 -4a8a 6 661 5627 -4a90 6 662 5627 -4a96 4 663 5627 -4a9a 4 664 5627 -4a9e 4 669 5627 -4aa2 3 675 5627 -4aa5 3 676 5627 -4aa8 6 681 5627 -4aae 3 682 5627 -4ab1 3 683 5627 -4ab4 6 684 5627 -4aba 7 690 5627 -4ac1 6 692 5627 -4ac7 6 693 5627 -4acd e 697 5627 -4adb e 701 5627 -4ae9 4 707 5627 -4aed 6 715 5627 -4af3 7 724 5627 -4afa 2 725 5627 -4afc 3 726 5627 -4aff 2 727 5627 -4b01 7 728 5627 -4b08 2 731 5627 -4b0a 3 737 5627 -4b0d 6 738 5627 -4b13 3 744 5627 -4b16 3 745 5627 -FUNC 4b19 9d 10 TranslatorGuardHandler -4b19 5 770 5627 -4b1e 1 776 5627 -4b1f e 782 5627 -4b2d b 784 5627 -4b38 a 786 5627 -4b42 5 790 5627 -4b47 2 792 5627 -4b49 2a 796 5627 -4b73 9 798 5627 -4b7c b 802 5627 -4b87 1b 811 5627 -4ba2 3 818 5627 -4ba5 3 819 5627 -4ba8 3 820 5627 -4bab 3 821 5627 -4bae 2 822 5627 -4bb0 3 826 5627 -4bb3 3 828 5627 -FUNC 4bb6 73 14 _GetRangeOfTrysToCheck(_s_FuncInfo const *,int,int,unsigned int *,unsigned int *) -4bb6 7 848 5627 -4bbd 6 849 5627 -4bc3 6 850 5627 -4bc9 2 851 5627 -4bcb 2 852 5627 -4bcd a 855 5627 -4bd7 1d 859 5627 -4bf4 3 860 5627 -4bf7 3 861 5627 -4bfa 3 862 5627 -4bfd 6 854 5627 -4c03 6 866 5627 -4c09 5 867 5627 -4c0e e 869 5627 -4c1c b 871 5627 -4c27 2 872 5627 -FUNC 4c29 28 8 _CreateFrameInfo -4c29 0 889 5627 -4c29 b 890 5627 -4c34 e 891 5627 -4c42 b 892 5627 -4c4d 3 893 5627 -4c50 1 894 5627 -FUNC 4c51 21 4 _IsExceptionObjectToBeDestroyed -4c51 0 907 5627 -4c51 d 910 5627 -4c5e 8 911 5627 -4c66 7 910 5627 -4c6d 1 915 5627 -4c6e 1 916 5627 -4c6f 2 912 5627 -4c71 1 916 5627 -FUNC 4c72 4c 4 _FindAndUnlinkFrame -4c72 1 926 5627 -4c73 11 927 5627 -4c84 f 928 5627 -4c93 1 944 5627 -4c94 d 931 5627 -4ca1 7 935 5627 -4ca8 9 933 5627 -4cb1 5 943 5627 -4cb6 7 936 5627 -4cbd 1 944 5627 -FUNC 4cbe 5e 14 _CallCatchBlock2(EHRegistrationNode *,_s_FuncInfo const *,void *,int,unsigned long) -4cbe 6 485 5627 -4cc4 e 493 5627 -4cd2 c 495 5627 -4cde 11 500 5627 -4cef 6 503 5627 -4cf5 3 504 5627 -4cf8 3 505 5627 -4cfb 6 506 5627 -4d01 e 512 5627 -4d0f 3 518 5627 -4d12 6 519 5627 -4d18 2 524 5627 -4d1a 2 525 5627 -FUNC 4d1c 4a 8 _CxxThrowException -4d1c 6 95 5939 -4d22 15 117 5939 -4d37 3 118 5939 -4d3a 9 134 5939 -4d43 5 136 5939 -4d48 7 138 5939 -4d4f 13 159 5939 -4d62 4 161 5939 -FUNC 4d66 19 0 std::bad_alloc::bad_alloc() -4d66 15 382 5121 -4d7b 4 383 5121 -FUNC 4d7f 6a 4 operator new(unsigned int) -4d7f 6 57 5123 -4d85 2 59 5123 -4d87 d 60 5123 -4d94 d 59 5123 -4da1 2 67 5123 -4da3 27 62 5123 -4dca 1f 63 5123 -FUNC 4de9 f 4 type_info::name(__type_info_node *) -4de9 0 44 5873 -4de9 c 45 5873 -4df5 3 46 5873 -FUNC 4df8 e 0 type_info::~type_info() -4df8 0 49 5873 -4df8 d 50 5873 -4e05 1 51 5873 -FUNC 4e06 1c 0 type_info::`scalar deleting destructor'(unsigned int) -FUNC 4e22 f 4 type_info::_name_internal_method(__type_info_node *) -4e22 0 54 5873 -4e22 c 55 5873 -4e2e 3 56 5873 -FUNC 4e31 8 0 type_info::_type_info_dtor_internal_method() -4e31 0 59 5873 -4e31 7 60 5873 -4e38 1 61 5873 -FUNC 4e39 1b 4 type_info::operator==(type_info const &) -4e39 0 89 5873 -4e39 18 90 5873 -4e51 3 91 5873 -FUNC 4e54 1c 4 type_info::operator!=(type_info const &) -4e54 0 98 5873 -4e54 19 99 5873 -4e6d 3 100 5873 -FUNC 4e70 1f 4 type_info::before(type_info const &) -4e70 0 103 5873 -4e70 1c 104 5873 -4e8c 3 105 5873 -FUNC 4e8f 4 0 type_info::raw_name() -4e8f 0 108 5873 -4e8f 3 109 5873 -4e92 1 110 5873 -FUNC 4e93 b 4 type_info::type_info(type_info const &) -4e93 8 113 5873 -4e9b 3 123 5873 -FUNC 4e9e 5 4 type_info::operator=(type_info const &) -4e9e 2 127 5873 -4ea0 3 135 5873 -FUNC 4ea3 11 0 std::exception::exception() -4ea3 2 68 5916 -4ea5 4 69 5916 -4ea9 a 70 5916 -4eb3 1 71 5916 -FUNC 4eb4 4e 4 std::exception::exception(char const * const &) -4eb4 1 77 5916 -4eb5 14 78 5916 -4ec9 9 80 5916 -4ed2 6 81 5916 -4ed8 9 82 5916 -4ee1 c 84 5916 -4eed 2 87 5916 -4eef 4 89 5916 -4ef3 7 91 5916 -4efa 8 92 5916 -FUNC 4f02 18 8 std::exception::exception(char const * const &,int) -4f02 2 98 5916 -4f04 c 99 5916 -4f10 7 100 5916 -4f17 3 101 5916 -FUNC 4f1a 58 4 std::exception::exception(std::exception const &) -4f1a 1 107 5916 -4f1b 13 108 5916 -4f2e 2 109 5916 -4f30 a 111 5916 -4f3a 9 113 5916 -4f43 6 114 5916 -4f49 9 115 5916 -4f52 d 117 5916 -4f5f 2 120 5916 -4f61 4 122 5916 -4f65 2 125 5916 -4f67 4 126 5916 -4f6b 7 127 5916 -FUNC 4f72 56 4 std::exception::operator=(std::exception const &) -4f72 1 133 5916 -4f73 c 134 5916 -4f7f 6 136 5916 -4f85 2 137 5916 -4f87 9 139 5916 -4f90 9 141 5916 -4f99 6 144 5916 -4f9f 9 146 5916 -4fa8 d 148 5916 -4fb5 2 151 5916 -4fb7 4 153 5916 -4fbb 2 156 5916 -4fbd 3 157 5916 -4fc0 5 159 5916 -4fc5 3 160 5916 -FUNC 4fc8 16 0 std::exception::~exception() -4fc8 0 167 5916 -4fc8 c 168 5916 -4fd4 9 169 5916 -4fdd 1 170 5916 -FUNC 4fde d 0 std::exception::what() -4fde 0 180 5916 -4fde 5 181 5916 -4fe3 2 182 5916 -4fe5 5 184 5916 -4fea 1 185 5916 -FUNC 4feb 19 4 std::bad_cast::bad_cast(char const *) -4feb 13 194 5916 -4ffe 6 195 5916 -FUNC 5004 18 4 std::bad_cast::bad_cast(std::bad_cast const &) -5004 12 199 5916 -5016 6 200 5916 -FUNC 501c b 0 std::bad_cast::~bad_cast() -501c 6 203 5916 -5022 5 204 5916 -FUNC 5027 19 4 std::bad_typeid::bad_typeid(char const *) -5027 13 229 5916 -503a 6 230 5916 -FUNC 5040 18 4 std::bad_typeid::bad_typeid(std::bad_typeid const &) -5040 12 234 5916 -5052 6 235 5916 -FUNC 5058 b 0 std::bad_typeid::~bad_typeid() -5058 6 238 5916 -505e 5 239 5916 -FUNC 5063 18 4 std::__non_rtti_object::__non_rtti_object(char const *) -5063 12 248 5916 -5075 6 249 5916 -FUNC 507b 18 4 std::__non_rtti_object::__non_rtti_object(std::__non_rtti_object const &) -507b 12 253 5916 -508d 6 254 5916 -FUNC 5093 b 0 std::__non_rtti_object::~__non_rtti_object() -5093 0 257 5916 -5093 b 258 5916 -FUNC 509e 1c 0 std::exception::`vector deleting destructor'(unsigned int) -FUNC 50ba 22 0 std::bad_cast::`vector deleting destructor'(unsigned int) -FUNC 50dc 22 0 std::bad_typeid::`scalar deleting destructor'(unsigned int) -FUNC 50fe 22 0 std::__non_rtti_object::`scalar deleting destructor'(unsigned int) -FUNC 5120 7b 10 memcpy_s -5120 4 47 1002 -5124 a 48 1002 -512e 4 51 1002 -5132 20 55 1002 -5152 a 56 1002 -515c f 67 1002 -516b 2 68 1002 -516d f 59 1002 -517c 5 61 1002 -5181 13 62 1002 -5194 5 64 1002 -5199 2 69 1002 -FUNC 519b 5b 10 memmove_s -519b 3 46 955 -519e 9 47 955 -51a7 2 50 955 -51a9 20 54 955 -51c9 5 55 955 -51ce 13 56 955 -51e1 f 58 955 -51f0 4 59 955 -51f4 2 60 955 -FUNC 51f6 a 4 _set_osplatform -51f6 a 385 2595 -FUNC 5200 a 4 _set_osver -5200 a 386 2595 -FUNC 520a a 4 _set_winver -520a a 387 2595 -FUNC 5214 a 4 _set_winmajor -5214 a 388 2595 -FUNC 521e a 4 _set_winminor -521e a 389 2595 -FUNC 5228 24 4 fast_error_exit -5228 0 375 2608 -5228 9 384 2608 -5231 5 386 2608 -5236 9 388 2608 -523f c 389 2608 -524b 1 390 2608 -FUNC 524c 41 0 check_managed_app -524c 0 413 2608 -524c b 418 2608 -5257 5 422 2608 -525c a 424 2608 -5266 2 425 2608 -5268 9 427 2608 -5271 2 428 2608 -5273 7 433 2608 -527a 2 434 2608 -527c d 437 2608 -5289 1 438 2608 -528a 2 419 2608 -528c 1 438 2608 -FUNC 528d 1b6 0 __tmainCRTStartup -528d c 203 2608 -5299 19 233 2608 -52b2 4 234 2608 -52b6 8 235 2608 -52be a 236 2608 -52c8 2 242 2608 -52ca 7 243 2608 -52d1 3 244 2608 -52d4 4 243 2608 -52d8 9 244 2608 -52e1 2 245 2608 -52e3 6 248 2608 -52e9 6 249 2608 -52ef 6 250 2608 -52f5 9 256 2608 -52fe 9 257 2608 -5307 8 258 2608 -530f 6 259 2608 -5315 d 260 2608 -5322 6 262 2608 -5328 5 263 2608 -532d 6 264 2608 -5333 6 265 2608 -5339 6 266 2608 -533f 8 271 2608 -5347 c 273 2608 -5353 8 274 2608 -535b 9 276 2608 -5364 8 277 2608 -536c 5 286 2608 -5371 4 294 2608 -5375 9 296 2608 -537e 8 297 2608 -5386 b 300 2608 -5391 a 303 2608 -539b 9 305 2608 -53a4 8 306 2608 -53ac 9 307 2608 -53b5 8 308 2608 -53bd 8 310 2608 -53c5 4 311 2608 -53c9 7 312 2608 -53d0 a 326 2608 -53da 18 327 2608 -53f2 6 330 2608 -53f8 6 331 2608 -53fe 5 333 2608 -5403 2 335 2608 -5405 17 336 2608 -541c 6 342 2608 -5422 6 344 2608 -5428 6 345 2608 -542e 5 347 2608 -5433 7 349 2608 -543a 3 351 2608 -543d 6 352 2608 -FUNC 5443 a 0 mainCRTStartup -5443 0 186 2608 -5443 5 193 2608 -5448 5 195 2608 -FUNC 544d a 4 _initp_misc_invarg -544d 0 38 3328 -544d 9 39 3328 -5456 1 40 3328 -FUNC 5457 fc 14 _invoke_watson -5457 1c 111 3328 -5473 6 128 3328 -5479 6 129 3328 -547f 6 130 3328 -5485 3 131 3328 -5488 3 132 3328 -548b 3 133 3328 -548e 7 134 3328 -5495 7 135 3328 -549c 4 136 3328 -54a0 4 137 3328 -54a4 4 138 3328 -54a8 4 139 3328 -54ac 1 140 3328 -54ad 6 141 3328 -54b3 6 147 3328 -54b9 19 148 3328 -54d2 3 150 3328 -54d5 13 163 3328 -54e8 6 168 3328 -54ee 13 169 3328 -5501 6 171 3328 -5507 a 174 3328 -5511 a 176 3328 -551b 8 180 3328 -5523 8 181 3328 -552b 12 184 3328 -553d 16 185 3328 -FUNC 5553 22 4 _set_invalid_parameter_handler -5553 1 207 3328 -5554 b 211 3328 -555f d 212 3328 -556c 5 214 3328 -5571 3 216 3328 -5574 1 217 3328 -FUNC 5575 d 0 _get_invalid_parameter_handler -5575 0 221 3328 -5575 c 225 3328 -5581 1 228 3328 -FUNC 5582 9 14 _invoke_watson(unsigned short const *,unsigned short const *,unsigned short const *,unsigned int,unsigned int) -5582 3 266 3328 -5585 1 274 3328 -5586 5 273 3328 -FUNC 558b 24 14 _invalid_parameter -558b 3 70 3328 -558e b 77 3328 -5599 5 78 3328 -559e 1 89 3328 -559f 2 80 3328 -55a1 8 86 3328 -55a9 1 89 3328 -55aa 5 88 3328 -FUNC 55af 10 0 _invalid_parameter_noinfo -55af 0 98 3328 -55af f 99 3328 -55be 1 100 3328 -FUNC 55bf 9 14 _invalid_parameter(unsigned short const *,unsigned short const *,unsigned short const *,unsigned int,unsigned int) -55bf 3 249 3328 -55c2 1 257 3328 -55c3 5 256 3328 -FUNC 55c8 96 8 _swprintf -55c8 7 122 1564 -55cf 24 128 1564 -55f3 8 133 1564 -55fb 6 138 1564 -5601 22 153 1564 -5623 1d 160 1564 -5640 18 161 1564 -5658 4 163 1564 -565c 2 171 1564 -FUNC 565e 1a c __swprintf_l -565e 0 181 1564 -565e 19 186 1564 -5677 1 188 1564 -FUNC 5678 1c c swprintf_s -5678 0 238 1564 -5678 1b 243 1564 -5693 1 244 1564 -FUNC 5694 1f 10 _snwprintf_s -5694 3 253 1564 -5697 1a 258 1564 -56b1 2 259 1564 -FUNC 56b3 1c c _swprintf_p -56b3 0 267 1564 -56b3 1b 272 1564 -56ce 1 273 1564 -FUNC 56cf 1d 10 _swprintf_s_l -56cf 3 282 1564 -56d2 18 287 1564 -56ea 2 288 1564 -FUNC 56ec 20 14 _snwprintf_s_l -56ec 3 298 1564 -56ef 1b 303 1564 -570a 2 304 1564 -FUNC 570c 1d 10 _swprintf_p_l -570c 3 313 1564 -570f 18 318 1564 -5727 2 319 1564 -FUNC 5729 11 4 _scwprintf -5729 0 347 1564 -5729 10 352 1564 -5739 1 353 1564 -FUNC 573a 11 4 _scwprintf_p -573a 0 359 1564 -573a 10 364 1564 -574a 1 365 1564 -FUNC 574b 16 8 _scwprintf_l -574b 0 372 1564 -574b 15 376 1564 -5760 1 377 1564 -FUNC 5761 16 8 _scwprintf_p_l -5761 0 384 1564 -5761 15 389 1564 -5776 1 390 1564 -FUNC 5777 14f 8 fprintf -5777 c 49 1648 -5783 5 53 1648 -5788 2e 55 1648 -57b6 c 56 1648 -57c2 3 61 1648 -57c5 7 63 1648 -57cc 3 64 1648 -57cf b0 66 1648 -587f 5 67 1648 -5884 8 69 1648 -588c 11 70 1648 -589d a 71 1648 -58a7 c 75 1648 -58b3 3 79 1648 -58b6 6 80 1648 -58bc a 76 1648 -FUNC 58c6 1a c _fprintf_l -58c6 0 88 1648 -58c6 19 93 1648 -58df 1 94 1648 -FUNC 58e0 1a c _fprintf_s_l -58e0 0 102 1648 -58e0 19 107 1648 -58f9 1 108 1648 -FUNC 58fa 18 8 fprintf_s -58fa 0 115 1648 -58fa 17 120 1648 -5911 1 121 1648 -FUNC 5912 1a c _fprintf_p_l -5912 0 129 1648 -5912 19 134 1648 -592b 1 135 1648 -FUNC 592c 18 8 _fprintf_p -592c 0 142 1648 -592c 17 147 1648 -5943 1 148 1648 -FUNC 5944 f6 18 _vswprintf_helper -5944 7 125 1380 -594b 28 130 1380 -5973 2f 133 1380 -59a2 15 143 1380 -59b7 7 146 1380 -59be 2 148 1380 -59c0 6 150 1380 -59c6 13 157 1380 -59d9 5 160 1380 -59de 2 162 1380 -59e0 41 171 1380 -5a21 5 172 1380 -5a26 12 175 1380 -5a38 2 183 1380 -FUNC 5a3a 27 10 _vswprintf_c -5a3a 0 241 1380 -5a3a 1f 242 1380 -5a59 7 243 1380 -5a60 1 244 1380 -FUNC 5a61 28 14 _vswprintf_c_l -5a61 3 253 1380 -5a64 1c 254 1380 -5a80 7 255 1380 -5a87 2 256 1380 -FUNC 5a89 87 14 _vswprintf_s_l -5a89 4 265 1380 -5a8d 25 269 1380 -5ab2 19 270 1380 -5acb 1a 272 1380 -5ae5 4 273 1380 -5ae9 3 275 1380 -5aec 5 278 1380 -5af1 1d 280 1380 -5b0e 2 288 1380 -FUNC 5b10 1b 10 vswprintf_s -5b10 0 296 1380 -5b10 1a 297 1380 -5b2a 1 298 1380 -FUNC 5b2b 107 18 _vsnwprintf_s_l -5b2b 5 308 1380 -5b30 27 313 1380 -5b57 13 314 1380 -5b6a 7 317 1380 -5b71 1b 319 1380 -5b8c 8 323 1380 -5b94 20 324 1380 -5bb4 5 325 1380 -5bb9 a 329 1380 -5bc3 7 331 1380 -5bca 2 333 1380 -5bcc 2 338 1380 -5bce 12 339 1380 -5be0 10 342 1380 -5bf0 a 344 1380 -5bfa a 346 1380 -5c04 2 348 1380 -5c06 4 352 1380 -5c0a 8 356 1380 -5c12 18 358 1380 -5c2a 6 360 1380 -5c30 2 366 1380 -FUNC 5c32 1e 14 _vsnwprintf_s -5c32 3 375 1380 -5c35 19 376 1380 -5c4e 2 377 1380 -FUNC 5c50 27 10 _vswprintf_p -5c50 0 385 1380 -5c50 1f 386 1380 -5c6f 7 387 1380 -5c76 1 388 1380 -FUNC 5c77 28 14 _vswprintf_p_l -5c77 3 397 1380 -5c7a 1c 398 1380 -5c96 7 399 1380 -5c9d 2 400 1380 -FUNC 5c9f 24 4 _amsg_exit -5c9f 0 446 2560 -5c9f 5 449 2560 -5ca4 9 450 2560 -5cad b 451 2560 -5cb8 a 452 2560 -5cc2 1 453 2560 -FUNC 5cc3 26 4 __crtCorExitProcess -5cc3 0 650 2560 -5cc3 b 654 2560 -5cce 4 655 2560 -5cd2 c 656 2560 -5cde 4 657 2560 -5ce2 6 658 2560 -5ce8 1 668 2560 -FUNC 5ce9 15 4 __crtExitProcess -5ce9 0 673 2560 -5ce9 a 674 2560 -5cf3 b 683 2560 -FUNC 5cfe 9 0 _lockexit -5cfe 0 733 2560 -5cfe 8 734 2560 -5d06 1 735 2560 -FUNC 5d07 9 0 _unlockexit -5d07 0 759 2560 -5d07 8 760 2560 -5d0f 1 761 2560 -FUNC 5d10 18 4 _initterm -5d10 3 841 2560 -5d13 2 855 2560 -5d15 6 853 2560 -5d1b 2 854 2560 -5d1d 3 855 2560 -5d20 7 848 2560 -5d27 1 857 2560 -FUNC 5d28 20 8 _initterm_e -5d28 1 890 2560 -5d29 c 899 2560 -5d35 6 904 2560 -5d3b 2 905 2560 -5d3d 3 906 2560 -5d40 7 899 2560 -5d47 1 910 2560 -FUNC 5d48 37 4 _get_osplatform -5d48 0 929 2560 -5d48 27 931 2560 -5d6f 1 939 2560 -5d70 9 934 2560 -5d79 2 936 2560 -5d7b 3 938 2560 -5d7e 1 939 2560 -FUNC 5d7f 3c 4 _get_osver -5d7f 0 958 2560 -5d7f 27 960 2560 -5da6 1 968 2560 -5da7 8 963 2560 -5daf 8 965 2560 -5db7 3 967 2560 -5dba 1 968 2560 -FUNC 5dbb 3c 4 _get_winver -5dbb 0 987 2560 -5dbb 27 989 2560 -5de2 1 997 2560 -5de3 8 992 2560 -5deb 8 994 2560 -5df3 3 996 2560 -5df6 1 997 2560 -FUNC 5df7 3c 4 _get_winmajor -5df7 0 1016 2560 -5df7 27 1018 2560 -5e1e 1 1026 2560 -5e1f 8 1021 2560 -5e27 8 1023 2560 -5e2f 3 1025 2560 -5e32 1 1026 2560 -FUNC 5e33 3c 4 _get_winminor -5e33 0 1045 2560 -5e33 27 1047 2560 -5e5a 1 1055 2560 -5e5b 8 1050 2560 -5e63 8 1052 2560 -5e6b 3 1054 2560 -5e6e 1 1055 2560 -FUNC 5e6f 37 4 _get_wpgmptr -5e6f 0 1074 2560 -5e6f 27 1076 2560 -5e96 1 1085 2560 -5e97 9 1080 2560 -5ea0 2 1082 2560 -5ea2 3 1084 2560 -5ea5 1 1085 2560 -FUNC 5ea6 37 4 _get_pgmptr -5ea6 0 1104 2560 -5ea6 27 1106 2560 -5ecd 1 1115 2560 -5ece 9 1110 2560 -5ed7 2 1112 2560 -5ed9 3 1114 2560 -5edc 1 1115 2560 -FUNC 5edd 92 4 _cinit -5edd 0 263 2560 -5edd 18 273 2560 -5ef5 b 275 2560 -5f00 5 277 2560 -5f05 f 283 2560 -5f14 4 284 2560 -5f18 4 285 2560 -5f1c a 288 2560 -5f26 20 293 2560 -5f46 1a 306 2560 -5f60 c 308 2560 -5f6c 2 312 2560 -5f6e 1 313 2560 -FUNC 5f6f e2 c doexit -5f6f c 499 2560 -5f7b 8 517 2560 -5f83 5 518 2560 -5f88 b 520 2560 -5f93 6 521 2560 -5f99 8 524 2560 -5fa1 5 526 2560 -5fa6 e 542 2560 -5fb4 12 543 2560 -5fc6 5 545 2560 -5fcb b 546 2560 -5fd6 10 551 2560 -5fe6 9 552 2560 -5fef 2 553 2560 -5ff1 10 558 2560 -6001 10 566 2560 -6011 c 584 2560 -601d 6 588 2560 -6023 6 592 2560 -6029 8 594 2560 -6031 8 596 2560 -6039 3 584 2560 -603c 6 585 2560 -6042 9 586 2560 -604b 6 597 2560 -FUNC 6051 11 4 exit -6051 0 397 2560 -6051 10 398 2560 -6061 1 399 2560 -FUNC 6062 11 4 _exit -6062 0 405 2560 -6062 10 406 2560 -6072 1 407 2560 -FUNC 6073 f 0 _cexit -6073 0 412 2560 -6073 e 413 2560 -6081 1 414 2560 -FUNC 6082 f 0 _c_exit -6082 0 419 2560 -6082 e 420 2560 -6090 1 421 2560 -FUNC 6091 4c 0 _init_pointers -6091 1 786 2560 -6092 7 787 2560 -6099 6 789 2560 -609f 6 790 2560 -60a5 6 791 2560 -60ab 6 792 2560 -60b1 6 793 2560 -60b7 6 794 2560 -60bd 6 795 2560 -60c3 6 796 2560 -60c9 13 799 2560 -60dc 1 800 2560 -FUNC 60e0 8b 4 strlen -60e0 0 54 880 -60e0 4 63 880 -60e4 6 64 880 -60ea 2 65 880 -60ec 2 69 880 -60ee 3 70 880 -60f1 2 71 880 -60f3 2 72 880 -60f5 6 73 880 -60fb 2 74 880 -60fd 13 76 880 -6110 2 81 880 -6112 5 82 880 -6117 2 83 880 -6119 3 84 880 -611c 2 85 880 -611e 3 86 880 -6121 5 87 880 -6126 2 88 880 -6128 3 90 880 -612b 2 91 880 -612d 2 92 880 -612f 2 93 880 -6131 2 94 880 -6133 5 95 880 -6138 2 96 880 -613a 5 97 880 -613f 2 98 880 -6141 2 99 880 -6143 3 103 880 -6146 4 104 880 -614a 2 105 880 -614c 1 106 880 -614d 3 108 880 -6150 4 109 880 -6154 2 110 880 -6156 1 111 880 -6157 3 113 880 -615a 4 114 880 -615e 2 115 880 -6160 1 116 880 -6161 3 118 880 -6164 4 119 880 -6168 2 120 880 -616a 1 121 880 -FUNC 616b 33 4 _EH_prolog3 -616b 0 93 5671 -616b 1 101 5671 -616c 7 103 5671 -6173 4 112 5671 -6177 4 113 5671 -617b 1 114 5671 -617c 1 115 5671 -617d 1 116 5671 -617e 2 117 5671 -6180 2 118 5671 -6182 5 131 5671 -6187 2 132 5671 -6189 1 133 5671 -618a 3 134 5671 -618d 7 135 5671 -6194 3 150 5671 -6197 6 151 5671 -619d 1 153 5671 -FUNC 619e 36 4 _EH_prolog3_catch -619e 0 206 5671 -619e 1 214 5671 -619f 7 216 5671 -61a6 4 225 5671 -61aa 4 226 5671 -61ae 1 228 5671 -61af 1 229 5671 -61b0 1 230 5671 -61b1 2 231 5671 -61b3 2 232 5671 -61b5 5 246 5671 -61ba 2 247 5671 -61bc 1 248 5671 -61bd 3 249 5671 -61c0 3 250 5671 -61c3 7 251 5671 -61ca 3 267 5671 -61cd 6 268 5671 -61d3 1 270 5671 -FUNC 61d4 36 4 _EH_prolog3_GS -61d4 0 322 5671 -61d4 1 330 5671 -61d5 7 332 5671 -61dc 4 341 5671 -61e0 4 342 5671 -61e4 1 344 5671 -61e5 1 345 5671 -61e6 1 346 5671 -61e7 2 347 5671 -61e9 2 348 5671 -61eb 5 362 5671 -61f0 2 363 5671 -61f2 1 364 5671 -61f3 3 365 5671 -61f6 3 366 5671 -61f9 7 367 5671 -6200 3 384 5671 -6203 6 385 5671 -6209 1 387 5671 -FUNC 620a 39 4 _EH_prolog3_catch_GS -620a 0 441 5671 -620a 1 449 5671 -620b 7 451 5671 -6212 4 460 5671 -6216 4 461 5671 -621a 1 463 5671 -621b 1 464 5671 -621c 1 465 5671 -621d 2 466 5671 -621f 2 467 5671 -6221 5 482 5671 -6226 2 483 5671 -6228 1 484 5671 -6229 3 485 5671 -622c 3 486 5671 -622f 3 487 5671 -6232 7 488 5671 -6239 3 505 5671 -623c 6 506 5671 -6242 1 508 5671 -FUNC 6243 14 0 _EH_epilog3 -6243 0 534 5671 -6243 3 537 5671 -6246 7 538 5671 -624d 1 539 5671 -624e 1 540 5671 -624f 1 541 5671 -6250 1 542 5671 -6251 1 543 5671 -6252 2 544 5671 -6254 1 545 5671 -6255 1 546 5671 -6256 1 547 5671 -FUNC 6257 f 0 _EH_epilog3_GS -6257 0 575 5671 -6257 3 578 5671 -625a 2 579 5671 -625c 5 580 5671 -6261 5 581 5671 -FUNC 6266 f 0 _EH_epilog3_catch_GS -6266 0 609 5671 -6266 3 612 5671 -6269 2 613 5671 -626b 5 614 5671 -6270 5 615 5671 -FUNC 6275 96 4 _stbuf -6275 1 59 1850 -6276 14 69 1850 -628a 2 70 1850 -628c c 73 1850 -6298 4 74 1850 -629c c 75 1850 -62a8 3 76 1850 -62ab 6 82 1850 -62b1 6 86 1850 -62b7 4 87 1850 -62bb 1e 91 1850 -62d9 3 93 1850 -62dc e 94 1850 -62ea 2 96 1850 -62ec 7 98 1850 -62f3 6 99 1850 -62f9 8 102 1850 -6301 5 104 1850 -6306 1 105 1850 -6307 3 78 1850 -630a 1 105 1850 -FUNC 630b 2f 8 _ftbuf -630b 0 138 1850 -630b 8 146 1850 -6313 c 148 1850 -631f 6 151 1850 -6325 7 152 1850 -632c 4 153 1850 -6330 9 154 1850 -6339 1 166 1850 -FUNC 633a 82 4 _LocaleUpdate::_LocaleUpdate(localeinfo_struct *) -633a 0 261 1343 -633a f 262 1343 -6349 8 264 1343 -6351 5 265 1343 -6356 6 266 1343 -635c 1c 268 1343 -6378 21 269 1343 -6399 9 270 1343 -63a2 4 272 1343 -63a6 4 273 1343 -63aa 2 276 1343 -63ac a 278 1343 -63b6 6 280 1343 -FUNC 63bc e 0 _LocaleUpdate::~_LocaleUpdate() -63bc 0 282 1343 -63bc 6 283 1343 -63c2 7 284 1343 -63c9 1 285 1343 -FUNC 63ca 3 0 _LocaleUpdate::GetLocaleT() -63ca 2 287 1343 -63cc 1 289 1343 -FUNC 63cd 33 0 write_char -63cd 0 2433 1312 -63cd a 2434 1312 -63d7 2 2437 1312 -63d9 21 2442 1312 -63fa 2 2444 1312 -63fc 1 2447 1312 -63fd 2 2446 1312 -63ff 1 2447 1312 -FUNC 6400 24 c write_multi_char -6400 6 2498 1312 -6406 2 2501 1312 -6408 e 2500 1312 -6416 5 2501 1312 -641b 7 2499 1312 -6422 2 2504 1312 -FUNC 6424 4a 4 write_string -6424 0 2563 1312 -6424 12 2564 1312 -6436 6 2566 1312 -643c 2 2567 1312 -643e e 2570 1312 -644c 5 2571 1312 -6451 a 2573 1312 -645b 9 2574 1312 -6464 9 2569 1312 -646d 1 2579 1312 -FUNC 646e d 4 get_int_arg -646e 0 2602 1312 -646e c 2603 1312 -647a 1 2604 1312 -FUNC 647b 10 4 get_int64_arg -647b 0 2644 1312 -647b f 2645 1312 -648a 1 2646 1312 -FUNC 648b e 4 get_short_arg -648b 0 2671 1312 -648b d 2672 1312 -6498 1 2673 1312 -FUNC 6499 994 10 _output_l -6499 1b 975 1312 -64b4 45 1036 1312 -64f9 2d 1031 1312 -6526 b1 1033 1312 -65d7 8 1036 1312 -65df 26 1073 1312 -6605 1d 1075 1312 -6622 8 1076 1312 -662a 18 1131 1312 -6642 13 1173 1312 -6655 3 1174 1312 -6658 5 1175 1312 -665d 1f 1179 1312 -667c 4 1193 1312 -6680 5 1194 1312 -6685 4 1181 1312 -6689 5 1182 1312 -668e 4 1184 1312 -6692 5 1185 1312 -6697 7 1190 1312 -669e 5 1191 1312 -66a3 4 1187 1312 -66a7 5 1196 1312 -66ac 5 1200 1312 -66b1 9 1206 1312 -66ba b 1233 1312 -66c5 4 1235 1312 -66c9 3 1236 1312 -66cc 5 1239 1312 -66d1 10 1241 1312 -66e1 5 1243 1312 -66e6 3 1248 1312 -66e9 5 1249 1312 -66ee 5 1253 1312 -66f3 9 1259 1312 -66fc b 1284 1312 -6707 4 1285 1312 -670b 5 1287 1312 -6710 10 1289 1312 -6720 5 1291 1312 -6725 18 1295 1312 -673d 7 1362 1312 -6744 5 1363 1312 -6749 5 1301 1312 -674e 1 1303 1312 -674f a 1304 1312 -6759 5 1306 1312 -675e 4 1308 1312 -6762 5 1310 1312 -6767 4 1358 1312 -676b 5 1359 1312 -6770 c 1322 1312 -677c 2 1324 1312 -677e f 1325 1312 -678d a 1327 1312 -6797 2 1329 1312 -6799 a 1330 1312 -67a3 5 1332 1312 -67a8 30 1337 1312 -67d8 3 1352 1312 -67db 13 1158 1312 -67ee 11 1160 1312 -67ff 3 1161 1312 -6802 b 1163 1312 -680d b 1166 1312 -6818 5 1167 1312 -681d 32 1378 1312 -684f d 1716 1312 -685c 4 1724 1312 -6860 17 1749 1312 -6877 c 1750 1312 -6883 8 1381 1312 -688b 9 1385 1312 -6894 8 1561 1312 -689c 7 1562 1312 -68a3 d 1584 1312 -68b0 3 1589 1312 -68b3 15 1635 1312 -68c8 4 1636 1312 -68cc 8 1637 1312 -68d4 f 1639 1312 -68e3 1d 1378 1312 -6900 12 1448 1312 -6912 16 1467 1312 -6928 4 1470 1312 -692c 7 1471 1312 -6933 2 1472 1312 -6935 6 1499 1312 -693b 7 1500 1312 -6942 6 1503 1312 -6948 5 1506 1312 -694d 5 1523 1312 -6952 e 1541 1312 -6960 6 1546 1312 -6966 d 1548 1312 -6973 7 1549 1312 -697a 5 1550 1312 -697f 3 1551 1312 -6982 5 1553 1312 -6987 8 1543 1312 -698f 7 1544 1312 -6996 5 1557 1312 -699b 34 1378 1312 -69cf d 1908 1312 -69dc 9 1910 1312 -69e5 8 1668 1312 -69ed d 1688 1312 -69fa 6 1702 1312 -6a00 7 1703 1312 -6a07 2 1704 1312 -6a09 5 1706 1312 -6a0e 7 1708 1312 -6a15 5 1710 1312 -6a1a 4 1864 1312 -6a1e 7 1869 1312 -6a25 c 1933 1312 -6a31 8 1939 1312 -6a39 5 1958 1312 -6a3e 7 1751 1312 -6a45 9 1752 1312 -6a4e 5 1753 1312 -6a53 3 1754 1312 -6a56 9 1756 1312 -6a5f f 1759 1312 -6a6e 2 1760 1312 -6a70 13 1765 1312 -6a83 9 1767 1312 -6a8c e 1809 1312 -6a9a 27 1828 1312 -6ac1 13 1838 1312 -6ad4 15 1840 1312 -6ae9 a 1844 1312 -6af3 15 1846 1312 -6b08 5 1852 1312 -6b0d 7 1853 1312 -6b14 4 1854 1312 -6b18 1 1857 1312 -6b19 5 1859 1312 -6b1e 7 1877 1312 -6b25 3 1887 1312 -6b28 2 1888 1312 -6b2a 1a 1378 1312 -6b44 7 1892 1312 -6b4b 11 1897 1312 -6b5c c 1900 1312 -6b68 7 1901 1312 -6b6f 5 1903 1312 -6b74 5 1961 1312 -6b79 6 1987 1312 -6b7f 14 2026 1312 -6b93 2 2045 1312 -6b95 5 2051 1312 -6b9a 2 2071 1312 -6b9c 3 2074 1312 -6b9f 6 2080 1312 -6ba5 2 2099 1312 -6ba7 5 2105 1312 -6bac f 2128 1312 -6bbb 7 2129 1312 -6bc2 7 2130 1312 -6bc9 c 2136 1312 -6bd5 2 2142 1312 -6bd7 6 2148 1312 -6bdd 7 2149 1312 -6be4 2 2150 1312 -6be6 4 2151 1312 -6bea a 2152 1312 -6bf4 3 2153 1312 -6bf7 6 2157 1312 -6bfd 3 2158 1312 -6c00 6 2163 1312 -6c06 10 2165 1312 -6c16 10 2166 1312 -6c26 c 2168 1312 -6c32 3 2170 1312 -6c35 3 2172 1312 -6c38 2 2173 1312 -6c3a 8 2175 1312 -6c42 1 2176 1312 -6c43 19 2180 1312 -6c5c 9 2181 1312 -6c65 1 2182 1312 -6c66 2 2185 1312 -6c68 6 1640 1312 -6c6e 2 1641 1312 -6c70 4 1640 1312 -6c74 5 1642 1312 -6c79 2 1644 1312 -6c7b 4 1645 1312 -6c7f 8 1646 1312 -6c87 5 1647 1312 -6c8c 6 1648 1312 -6c92 1 1649 1312 -6c93 4 1648 1312 -6c97 6 1650 1312 -6c9d a 2201 1312 -6ca7 7 2204 1312 -6cae 6 2205 1312 -6cb4 4 2207 1312 -6cb8 2 2208 1312 -6cba 4 2210 1312 -6cbe 4 2212 1312 -6cc2 2 2213 1312 -6cc4 4 2215 1312 -6cc8 4 2217 1312 -6ccc 7 2218 1312 -6cd3 9 2224 1312 -6cdc 6 2228 1312 -6ce2 11 2230 1312 -6cf3 11 2234 1312 -6d04 d 2236 1312 -6d11 f 2238 1312 -6d20 d 2243 1312 -6d2d 3 2249 1312 -6d30 3 2250 1312 -6d33 1e 2252 1312 -6d51 9 2253 1312 -6d5a 18 2257 1312 -6d72 2 1690 1312 -6d74 4 2254 1312 -6d78 2 2259 1312 -6d7a d 2260 1312 -6d87 c 2290 1312 -6d93 f 2292 1312 -6da2 6 2297 1312 -6da8 8 2298 1312 -6db0 1e 2299 1312 -6dce 17 1163 1312 -6de5 10 2376 1312 -6df5 38 2377 1312 -FUNC 6e2d 3b 4 _get_errno_from_oserr -6e2d 0 119 6100 -6e2d 6 123 6100 -6e33 f 124 6100 -6e42 8 133 6100 -6e4a 3 134 6100 -6e4d 1 139 6100 -6e4e 7 125 6100 -6e55 1 139 6100 -6e56 11 135 6100 -6e67 1 139 6100 -FUNC 6e68 13 0 _errno -6e68 0 280 6100 -6e68 5 281 6100 -6e6d 4 282 6100 -6e71 5 283 6100 -6e76 1 288 6100 -6e77 3 285 6100 -6e7a 1 288 6100 -FUNC 6e7b 13 0 __doserrno -6e7b 0 293 6100 -6e7b 5 294 6100 -6e80 4 295 6100 -6e84 5 296 6100 -6e89 1 300 6100 -6e8a 3 298 6100 -6e8d 1 300 6100 -FUNC 6e8e 1e 4 _dosmaperr -6e8e 1 110 6100 -6e8f 9 111 6100 -6e98 13 113 6100 -6eab 1 114 6100 -FUNC 6eac 1b 4 _set_errno -6eac 0 157 6100 -6eac 5 158 6100 -6eb1 4 159 6100 -6eb5 3 161 6100 -6eb8 1 168 6100 -6eb9 b 165 6100 -6ec4 2 166 6100 -6ec6 1 168 6100 -FUNC 6ec7 2a 4 _get_errno -6ec7 1 187 6100 -6ec8 1b 189 6100 -6ee3 1 195 6100 -6ee4 9 193 6100 -6eed 3 194 6100 -6ef0 1 195 6100 -FUNC 6ef1 1b 4 _set_doserrno -6ef1 0 213 6100 -6ef1 5 214 6100 -6ef6 4 215 6100 -6efa 3 217 6100 -6efd 1 224 6100 -6efe b 221 6100 -6f09 2 222 6100 -6f0b 1 224 6100 -FUNC 6f0c 2a 4 _get_doserrno -6f0c 1 243 6100 -6f0d 1b 245 6100 -6f28 1 251 6100 -6f29 9 249 6100 -6f32 3 250 6100 -6f35 1 251 6100 -FUNC 6f38 45 0 _SEH_prolog4 -FUNC 6f7d 14 0 _SEH_epilog4 -FUNC 6fa0 24 0 ValidateLocalCookies -FUNC 6fd0 196 10 _except_handler4 -FUNC 7166 90 10 vprintf_helper -7166 c 47 1507 -7172 d 48 1507 -717f 2b 52 1507 -71aa 7 55 1507 -71b1 3 56 1507 -71b4 8 58 1507 -71bc 10 59 1507 -71cc a 60 1507 -71d6 c 63 1507 -71e2 3 67 1507 -71e5 6 68 1507 -71eb 3 63 1507 -71ee 8 64 1507 -FUNC 71f6 1a c _vprintf_l -71f6 0 75 1507 -71f6 19 76 1507 -720f 1 77 1507 -FUNC 7210 1a c _vprintf_s_l -7210 0 84 1507 -7210 19 85 1507 -7229 1 86 1507 -FUNC 722a 1a c _vprintf_p_l -722a 0 93 1507 -722a 19 94 1507 -7243 1 95 1507 -FUNC 7244 18 8 vprintf -7244 0 101 1507 -7244 17 102 1507 -725b 1 103 1507 -FUNC 725c 18 8 vprintf_s -725c 0 109 1507 -725c 17 110 1507 -7273 1 111 1507 -FUNC 7274 18 8 _vprintf_p -7274 0 117 1507 -7274 17 118 1507 -728b 1 119 1507 -FUNC 728c 104 0 __report_gsfailure -728c 9 140 3731 -7295 5 170 3731 -729a 6 171 3731 -72a0 6 172 3731 -72a6 6 173 3731 -72ac 6 174 3731 -72b2 6 175 3731 -72b8 7 176 3731 -72bf 7 177 3731 -72c6 7 178 3731 -72cd 7 179 3731 -72d4 7 180 3731 -72db 7 181 3731 -72e2 1 182 3731 -72e3 6 183 3731 -72e9 3 190 3731 -72ec 5 191 3731 -72f1 3 192 3731 -72f4 5 193 3731 -72f9 3 194 3731 -72fc 5 195 3731 -7301 6 201 3731 -7307 a 204 3731 -7311 a 206 3731 -731b a 285 3731 -7325 a 286 3731 -732f b 293 3731 -733a b 294 3731 -7345 b 297 3731 -7350 8 298 3731 -7358 8 302 3731 -7360 b 304 3731 -736b 9 313 3731 -7374 8 315 3731 -737c 12 319 3731 -738e 2 320 3731 -FUNC 7390 5c6 c _write_nolock -7390 22 95 4777 -73b2 2 106 4777 -73b4 11 108 4777 -73c5 7 109 4777 -73cc 2b 111 4777 -73f7 27 113 4777 -741e 10 116 4777 -742e 33 119 4777 -7461 6 122 4777 -7467 f 126 4777 -7476 1c 143 4777 -7492 5 146 4777 -7497 8 147 4777 -749f 14 148 4777 -74b3 16 152 4777 -74c9 6 153 4777 -74cf 4 157 4777 -74d3 16 160 4777 -74e9 9 153 4777 -74f2 b 163 4777 -74fd 9 164 4777 -7506 11 170 4777 -7517 18 171 4777 -752f 2 173 4777 -7531 14 174 4777 -7545 18 175 4777 -755d 4 181 4777 -7561 2e 205 4777 -758f 21 212 4777 -75b0 6 213 4777 -75b6 8 214 4777 -75be a 222 4777 -75c8 29 229 4777 -75f1 a 230 4777 -75fb 3 232 4777 -75fe 3 233 4777 -7601 2 238 4777 -7603 8 186 4777 -760b 3 191 4777 -760e 9 192 4777 -7617 f 193 4777 -7626 8 240 4777 -762e 13 242 4777 -7641 3 244 4777 -7644 6 251 4777 -764a 3 254 4777 -764d 14 255 4777 -7661 3 257 4777 -7664 12 258 4777 -7676 5 236 4777 -767b e 268 4777 -7689 12 277 4777 -769b f 278 4777 -76aa d 279 4777 -76b7 8 283 4777 -76bf 9 284 4777 -76c8 5 285 4777 -76cd 3 286 4777 -76d0 7 287 4777 -76d7 f 289 4777 -76e6 25 297 4777 -770b 6 299 4777 -7711 16 300 4777 -7727 f 308 4777 -7736 f 314 4777 -7745 b 315 4777 -7750 8 319 4777 -7758 c 320 4777 -7764 6 321 4777 -776a 4 322 4777 -776e c 323 4777 -777a f 325 4777 -7789 25 333 4777 -77ae 6 335 4777 -77b4 1a 336 4777 -77ce 5 344 4777 -77d3 f 359 4777 -77e2 13 361 4777 -77f5 8 365 4777 -77fd b 366 4777 -7808 6 367 4777 -780e a 369 4777 -7818 11 371 4777 -7829 2f 382 4777 -7858 4 384 4777 -785c 25 406 4777 -7881 3 407 4777 -7884 6 412 4777 -788a 9 409 4777 -7893 4 419 4777 -7897 15 423 4777 -78ac 2 428 4777 -78ae 1b 434 4777 -78c9 a 437 4777 -78d3 2 439 4777 -78d5 9 440 4777 -78de a 443 4777 -78e8 7 447 4777 -78ef 8 449 4777 -78f7 b 452 4777 -7902 2 455 4777 -7904 9 456 4777 -790d 2 457 4777 -790f 11 459 4777 -7920 4 460 4777 -7924 b 462 4777 -792f 7 463 4777 -7936 5 464 4777 -793b 5 469 4777 -7940 16 470 4777 -FUNC 7956 dc c _write -7956 c 61 4777 -7962 23 66 4777 -7985 2f 67 4777 -79b4 20 68 4777 -79d4 7 70 4777 -79db 3 72 4777 -79de 9 73 4777 -79e7 14 74 4777 -79fb 2 75 4777 -79fd b 76 4777 -7a08 7 77 4777 -7a0f 4 78 4777 -7a13 c 82 4777 -7a1f 3 86 4777 -7a22 6 87 4777 -7a28 a 83 4777 -FUNC 7a32 2d 4 _fileno -7a32 0 40 2176 -7a32 27 41 2176 -7a59 1 43 2176 -7a5a 4 42 2176 -7a5e 1 43 2176 -FUNC 7a5f e1 4 _commit -7a5f c 39 5043 -7a6b 1b 43 5043 -7a86 28 44 5043 -7aae 20 45 5043 -7ace 7 47 5043 -7ad5 3 48 5043 -7ad8 9 49 5043 -7ae1 14 51 5043 -7af5 9 52 5043 -7afe 2 54 5043 -7b00 3 55 5043 -7b03 5 59 5043 -7b08 a 62 5043 -7b12 b 66 5043 -7b1d 4 67 5043 -7b21 c 72 5043 -7b2d 3 75 5043 -7b30 6 76 5043 -7b36 a 73 5043 -FUNC 7b40 49 0 _mtinitlocks -7b40 2 137 2371 -7b42 7 144 2371 -7b49 11 145 2371 -7b5a 2 146 2371 -7b5c 15 148 2371 -7b71 6 144 2371 -7b77 5 157 2371 -7b7c d 158 2371 -FUNC 7b89 55 0 _mtdeletelocks -7b89 1 188 2371 -7b8a d 194 2371 -7b97 c 196 2371 -7ba3 3 200 2371 -7ba6 6 206 2371 -7bac f 207 2371 -7bbb 6 215 2371 -7bc1 c 217 2371 -7bcd 10 221 2371 -7bdd 1 224 2371 -FUNC 7bde 15 4 _unlock -7bde 3 371 2371 -7be1 10 375 2371 -7bf1 2 376 2371 -FUNC 7bf3 18 4 _lockerr_exit -7bf3 0 403 2371 -7bf3 c 404 2371 -7bff b 405 2371 -7c0a 1 406 2371 -FUNC 7c0b c3 4 _mtinitlocknum -7c0b c 259 2371 -7c17 6 261 2371 -7c1d a 269 2371 -7c27 5 270 2371 -7c2c 7 271 2371 -7c33 c 272 2371 -7c3f e 276 2371 -7c4d 4 277 2371 -7c51 e 279 2371 -7c5f b 280 2371 -7c6a 4 281 2371 -7c6e 8 284 2371 -7c76 3 285 2371 -7c79 4 287 2371 -7c7d 11 288 2371 -7c8e 7 289 2371 -7c95 b 290 2371 -7ca0 3 291 2371 -7ca3 2 292 2371 -7ca5 2 293 2371 -7ca7 2 296 2371 -7ca9 7 297 2371 -7cb0 c 300 2371 -7cbc 3 304 2371 -7cbf 6 305 2371 -7cc5 9 301 2371 -FUNC 7cce 31 4 _lock -7cce 3 333 2371 -7cd1 10 338 2371 -7ce1 b 340 2371 -7cec 8 341 2371 -7cf4 9 348 2371 -7cfd 2 349 2371 -FUNC 7cff 240 0 _ioinit -7cff c 111 4958 -7d0b 5 122 4958 -7d10 a 127 4958 -7d1a 7 128 4958 -7d21 f 137 4958 -7d30 6 139 4958 -7d36 5 142 4958 -7d3b 6 143 4958 -7d41 8 145 4958 -7d49 4 146 4958 -7d4d 3 147 4958 -7d50 4 148 4958 -7d54 3 149 4958 -7d57 4 151 4958 -7d5b 4 152 4958 -7d5f 4 153 4958 -7d63 13 145 4958 -7d76 15 161 4958 -7d8b 2 166 4958 -7d8d 3 172 4958 -7d90 6 173 4958 -7d96 b 179 4958 -7da1 5 185 4958 -7da6 f 191 4958 -7db5 9 204 4958 -7dbe 7 205 4958 -7dc5 8 207 4958 -7dcd 4 208 4958 -7dd1 3 209 4958 -7dd4 4 210 4958 -7dd8 4 211 4958 -7ddc 4 212 4958 -7de0 4 213 4958 -7de4 4 214 4958 -7de8 f 207 4958 -7df7 9 185 4958 -7e00 2 284 4958 -7e02 6 197 4958 -7e08 8 221 4958 -7e10 24 234 4958 -7e34 15 236 4958 -7e49 7 237 4958 -7e50 5 238 4958 -7e55 18 241 4958 -7e6d 3 243 4958 -7e70 d 221 4958 -7e7d 2 253 4958 -7e7f b 255 4958 -7e8a c 258 4958 -7e96 6 306 4958 -7e9c 4 262 4958 -7ea0 30 266 4958 -7ed0 2 271 4958 -7ed2 a 277 4958 -7edc 6 278 4958 -7ee2 5 279 4958 -7ee7 4 280 4958 -7eeb 14 284 4958 -7eff 3 286 4958 -7f02 2 288 4958 -7f04 4 297 4958 -7f08 6 298 4958 -7f0e a 253 4958 -7f18 c 313 4958 -7f24 4 315 4958 -7f28 7 128 4958 -7f2f a 129 4958 -7f39 6 316 4958 -FUNC 7f3f 4c 0 _ioterm -7f3f 2 341 4958 -7f41 5 345 4958 -7f46 6 347 4958 -7f4c 8 353 4958 -7f54 9 355 4958 -7f5d 11 356 4958 -7f6e 4 353 4958 -7f72 7 361 4958 -7f79 11 362 4958 -7f8a 1 365 4958 -FUNC 7f8b 21 4 wait_a_bit -7f8b 1 18 5557 -7f8c b 19 5557 -7f97 6 20 5557 -7f9d 8 21 5557 -7fa5 3 22 5557 -7fa8 3 23 5557 -7fab 1 24 5557 -FUNC 7fac 10 4 _set_malloc_crt_max_wait -7fac 0 32 5557 -7fac f 34 5557 -7fbb 1 36 5557 -FUNC 7fbc 40 4 _malloc_crt -7fbc 2 39 5557 -7fbe 2 40 5557 -7fc0 b 44 5557 -7fcb d 45 5557 -7fd8 18 46 5557 -7ff0 7 47 5557 -7ff7 4 50 5557 -7ffb 1 51 5557 -FUNC 7ffc 48 8 _calloc_crt -7ffc 2 54 5557 -7ffe 2 55 5557 -8000 14 61 5557 -8014 c 62 5557 -8020 18 63 5557 -8038 7 64 5557 -803f 4 67 5557 -8043 1 68 5557 -FUNC 8044 4b 8 _realloc_crt -8044 2 71 5557 -8046 2 72 5557 -8048 f 76 5557 -8057 14 77 5557 -806b 18 78 5557 -8083 7 79 5557 -808a 4 82 5557 -808e 1 83 5557 -FUNC 808f 50 c _recalloc_crt -808f 2 86 5557 -8091 2 87 5557 -8093 16 91 5557 -80a9 12 92 5557 -80bb 18 94 5557 -80d3 7 95 5557 -80da 4 100 5557 -80de 1 101 5557 -FUNC 80df 8 0 _malloc_crt_fastcall -80df 0 105 5557 -80df 7 106 5557 -80e6 1 107 5557 -FUNC 80e7 a 0 _calloc_crt_fastcall -80e7 0 110 5557 -80e7 9 111 5557 -80f0 1 112 5557 -FUNC 80f1 a 0 _realloc_crt_fastcall -80f1 0 115 5557 -80f1 9 116 5557 -80fa 1 117 5557 -FUNC 80fb 8e 4 free -80fb c 42 5515 -8107 7 47 5515 -810e 9 53 5515 -8117 8 57 5515 -811f 4 58 5515 -8123 e 60 5515 -8131 9 61 5515 -813a c 64 5515 -8146 6 68 5515 -814c 3 70 5515 -814f 2 106 5515 -8151 9 65 5515 -815a f 109 5515 -8169 4 110 5515 -816d 16 112 5515 -8183 6 115 5515 -FUNC 8189 9f 0 _fcloseall -8189 c 43 1792 -8195 5 44 1792 -819a 8 47 1792 -81a2 3 48 1792 -81a5 e 50 1792 -81b3 10 52 1792 -81c3 14 57 1792 -81d7 3 58 1792 -81da 5 63 1792 -81df 12 65 1792 -81f1 e 66 1792 -81ff 8 67 1792 -8207 3 50 1792 -820a c 73 1792 -8216 3 77 1792 -8219 6 78 1792 -821f 9 74 1792 -FUNC 8228 19 4 std::bad_exception::bad_exception(char const *) -8228 13 351 6035 -823b 6 352 6035 -FUNC 8241 b 0 std::bad_exception::~bad_exception() -8241 6 355 6035 -8247 5 356 6035 -FUNC 824c 22 0 std::bad_exception::`vector deleting destructor'(unsigned int) -FUNC 826e 5c c __TypeMatch -826e 2 999 6034 -8270 13 1001 6034 -8283 1b 1008 6034 -829e 4 1009 6034 -82a2 22 1023 6034 -82c4 5 1002 6034 -82c9 1 1024 6034 -FUNC 82ca 44 4 __FrameUnwindFilter -82ca 0 1035 6034 -82ca 6 1038 6034 -82d0 e 1040 6034 -82de 13 1076 6034 -82f1 e 1068 6034 -82ff c 1070 6034 -830b 2 1072 6034 -830d 1 1078 6034 -FUNC 830e e1 10 __FrameUnwindToState -830e c 1105 6034 -831a 1b 1112 6034 -8335 c 1114 6034 -8341 4 1115 6034 -8345 5 1119 6034 -834a f 1123 6034 -8359 f 1126 6034 -8368 7 1128 6034 -836f 6 1131 6034 -8375 3 1138 6034 -8378 12 1145 6034 -838a 6 1149 6034 -8390 d 1151 6034 -839d d 1153 6034 -83aa 3 1155 6034 -83ad 2 1156 6034 -83af c 1157 6034 -83bb a 1169 6034 -83c5 3 1176 6034 -83c8 6 1180 6034 -83ce 6 1157 6034 -83d4 e 1158 6034 -83e2 d 1159 6034 -FUNC 83ef 45 0 ExFilterRethrow -83ef 0 1533 6034 -83ef 2 1535 6034 -83f1 2f 1538 6034 -8420 e 1542 6034 -842e 2 1543 6034 -8430 1 1547 6034 -8431 2 1545 6034 -8433 1 1547 6034 -FUNC 8434 54 8 __DestructExceptionObject -8434 c 1791 6034 -8440 f 1794 6034 -844f e 1801 6034 -845d 4 1803 6034 -8461 9 1810 6034 -846a 7 1814 6034 -8471 6 1824 6034 -8477 c 1815 6034 -8483 5 1819 6034 -FUNC 8488 25 8 __AdjustPointer -8488 0 1842 6034 -8488 d 1843 6034 -8495 6 1845 6034 -849b 3 1850 6034 -849e e 1852 6034 -84ac 1 1856 6034 -FUNC 84ad 13 0 __uncaught_exception() -84ad 0 1867 6034 -84ad 12 1868 6034 -84bf 1 1869 6034 -FUNC 84c0 b3 8 __CxxRegisterExceptionObject -84c0 0 2077 6034 -84c0 14 2085 6034 -84d4 26 2087 6034 -84fa 6 2088 6034 -8500 b 2090 6034 -850b b 2093 6034 -8516 e 2094 6034 -8524 e 2095 6034 -8532 b 2096 6034 -853d 2 2097 6034 -853f 4 2098 6034 -8543 4 2099 6034 -8547 c 2101 6034 -8553 10 2102 6034 -8563 c 2103 6034 -856f 3 2104 6034 -8572 1 2105 6034 -FUNC 8573 4c 4 __CxxDetectRethrow -8573 0 2117 6034 -8573 6 2119 6034 -8579 2 2120 6034 -857b 2 2121 6034 -857d 2f 2122 6034 -85ac c 2123 6034 -85b8 3 2124 6034 -85bb 1 2127 6034 -85bc 2 2126 6034 -85be 1 2127 6034 -FUNC 85bf 139 8 __CxxUnregisterExceptionObject -85bf 1 2139 6034 -85c0 4 2143 6034 -85c4 d 2145 6034 -85d1 6 2146 6034 -85d7 85 2149 6034 -865c 14 2150 6034 -8670 5b 2152 6034 -86cb c 2153 6034 -86d7 e 2154 6034 -86e5 12 2155 6034 -86f7 1 2157 6034 -FUNC 86f8 4 0 __CxxQueryExceptionSize -86f8 0 2167 6034 -86f8 3 2168 6034 -86fb 1 2169 6034 -FUNC 86fc 32 8 __CxxCallUnwindDtor -86fc c 2189 6034 -8708 4 2190 6034 -870c 6 2192 6034 -8712 2 2193 6034 -8714 d 2194 6034 -8721 7 2197 6034 -8728 6 2198 6034 -FUNC 872e 33 8 __CxxCallUnwindDelDtor -872e c 2218 6034 -873a 4 2219 6034 -873e 7 2221 6034 -8745 2 2222 6034 -8747 d 2223 6034 -8754 7 2226 6034 -875b 6 2227 6034 -FUNC 8761 32 8 __CxxCallUnwindStdDelDtor -8761 c 2247 6034 -876d 4 2248 6034 -8771 6 2250 6034 -8777 2 2251 6034 -8779 d 2252 6034 -8786 7 2255 6034 -878d 6 2256 6034 -FUNC 8793 3b 14 __CxxCallUnwindVecDtor -8793 c 2282 6034 -879f 4 2283 6034 -87a3 f 2285 6034 -87b2 2 2286 6034 -87b4 d 2287 6034 -87c1 7 2290 6034 -87c8 6 2291 6034 -FUNC 87ce 79 4 IsInExceptionSpec -87ce 6 2302 6034 -87d4 9 2303 6034 -87dd 5 2307 6034 -87e2 f 2323 6034 -87f1 9 2326 6034 -87fa 2 2327 6034 -87fc 10 2328 6034 -880c 26 2335 6034 -8832 4 2337 6034 -8836 c 2323 6034 -8842 3 2343 6034 -8845 2 2344 6034 -FUNC 8847 49 4 CallUnexpected -8847 c 2379 6034 -8853 13 2380 6034 -8866 4 2383 6034 -886a 5 2384 6034 -886f 4 2391 6034 -8873 5 2392 6034 -8878 8 2388 6034 -8880 10 2390 6034 -FUNC 8890 30 0 Is_bad_exception_allowed -8890 2 2399 6034 -8892 8 2400 6034 -889a 1d 2402 6034 -88b7 4 2408 6034 -88bb 1 2409 6034 -88bc 4 2404 6034 -FUNC 88c0 82 8 _is_exception_typeof(type_info const &,_EXCEPTION_POINTERS *) -88c0 1 2416 6034 -88c1 e 2417 6034 -88cf 2 2419 6034 -88d1 9 2422 6034 -88da 2b 2423 6034 -8905 6 2432 6034 -890b 7 2433 6034 -8912 2 2445 6034 -8914 20 2446 6034 -8934 4 2439 6034 -8938 4 2454 6034 -893c 6 2455 6034 -FUNC 8942 19c 18 CallCatchBlock -8942 14 1431 6034 -8956 3 1437 6034 -8959 4 1439 6034 -895d 6 1443 6034 -8963 11 1447 6034 -8974 e 1451 6034 -8982 e 1452 6034 -8990 b 1454 6034 -899b e 1455 6034 -89a9 a 1457 6034 -89b3 3 1458 6034 -89b6 16 1463 6034 -89cc 12 1464 6034 -89de c 1465 6034 -89ea 3 1470 6034 -89ed 15 1471 6034 -8a02 3 1472 6034 -8a05 c 1474 6034 -8a11 11 1476 6034 -8a22 7 1478 6034 -8a29 d 1482 6034 -8a36 b 1486 6034 -8a41 13 1488 6034 -8a54 3 1517 6034 -8a57 6 1518 6034 -8a5d 5 1474 6034 -8a62 6 1488 6034 -8a68 6 1494 6034 -8a6e 9 1497 6034 -8a77 e 1500 6034 -8a85 e 1501 6034 -8a93 3f 1510 6034 -8ad2 c 1511 6034 -FUNC 8ade 17f 10 __BuildCatchObjectHelper -8ade c 1575 6034 -8aea 5 1576 6034 -8aef 2a 1582 6034 -8b19 2 1588 6034 -8b1b 3 1590 6034 -8b1e 2 1588 6034 -8b20 2 1592 6034 -8b22 4 1611 6034 -8b26 3 1614 6034 -8b29 4 1622 6034 -8b2d 4 1615 6034 -8b31 26 1622 6034 -8b57 5 1623 6034 -8b5c 11 1625 6034 -8b6d 5 1628 6034 -8b72 3 1629 6034 -8b75 6 1636 6034 -8b7b 4 1629 6034 -8b7f 20 1636 6034 -8b9f 12 1637 6034 -8bb1 10 1639 6034 -8bc1 4 1641 6034 -8bc5 2 1646 6034 -8bc7 5 1649 6034 -8bcc 18 1654 6034 -8be4 1e 1656 6034 -8c02 2 1660 6034 -8c04 25 1668 6034 -8c29 d 1672 6034 -8c36 2 1677 6034 -8c38 5 1678 6034 -8c3d 7 1681 6034 -8c44 5 1688 6034 -8c49 7 1682 6034 -8c50 5 1684 6034 -8c55 2 1584 6034 -8c57 6 1689 6034 -FUNC 8c5d 91 10 __BuildCatchObject -8c5d c 1712 6034 -8c69 b 1716 6034 -8c74 3 1718 6034 -8c77 2 1720 6034 -8c79 a 1739 6034 -8c83 4 1743 6034 -8c87 1a 1744 6034 -8ca1 1a 1756 6034 -8cbb 2 1757 6034 -8cbd 18 1750 6034 -8cd5 7 1762 6034 -8cdc 6 1769 6034 -8ce2 7 1763 6034 -8ce9 5 1765 6034 -FUNC 8cee 143 10 __CxxExceptionFilter -8cee 3 1973 6034 -8cf1 a 1985 6034 -8cfb 3 2065 6034 -8cfe 2a 1993 6034 -8d28 32 2008 6034 -8d5a 6 2010 6034 -8d60 c 2011 6034 -8d6c 6 2012 6034 -8d72 b 2013 6034 -8d7d f 2040 6034 -8d8c a 2041 6034 -8d96 2 2047 6034 -8d98 1b 2050 6034 -8db3 4 2042 6034 -8db7 2 2050 6034 -8db9 c 2052 6034 -8dc5 6 2053 6034 -8dcb 13 2054 6034 -8dde 2 2055 6034 -8de0 25 1995 6034 -8e05 6 1997 6034 -8e0b e 1999 6034 -8e19 4 2000 6034 -8e1d c 2004 6034 -8e29 6 2005 6034 -8e2f 2 2065 6034 -FUNC 8e31 6c 20 CatchIt -8e31 3 1217 6034 -8e34 6 1233 6034 -8e3a 10 1234 6034 -8e4a 4 1253 6034 -8e4e 6 1254 6034 -8e54 2 1255 6034 -8e56 8 1256 6034 -8e5e e 1259 6034 -8e6c 3 1265 6034 -8e6f 21 1273 6034 -8e90 4 1278 6034 -8e94 7 1280 6034 -8e9b 2 1286 6034 -FUNC 8e9d f2 20 FindHandlerForForeignException -8e9d 6 913 6034 -8ea3 10 920 6034 -8eb3 2a 926 6034 -8edd 23 934 6034 -8f00 e 940 6034 -8f0e 17 945 6034 -8f25 c 948 6034 -8f31 29 954 6034 -8f5a 33 974 6034 -8f8d 2 984 6034 -FUNC 8f8f 356 20 FindHandler -8f8f 6 569 6034 -8f95 20 632 6034 -8fb5 11 634 6034 -8fc6 42 637 6034 -9008 12 639 6034 -901a e 645 6034 -9028 b 646 6034 -9033 16 652 6034 -9049 2a 653 6034 -9073 12 659 6034 -9085 b 661 6034 -9090 5 662 6034 -9095 15 666 6034 -90aa 23 676 6034 -90cd 5 692 6034 -90d2 c 686 6034 -90de 30 688 6034 -910e 2b 698 6034 -9139 d 707 6034 -9146 19 715 6034 -915f c 718 6034 -916b 10 729 6034 -917b 6 735 6034 -9181 3 736 6034 -9184 7 737 6034 -918b 9 740 6034 -9194 2 741 6034 -9196 7 742 6034 -919d 23 750 6034 -91c0 d 737 6034 -91cd 2 676 6034 -91cf 33 774 6034 -9202 3 718 6034 -9205 6 795 6034 -920b a 804 6034 -9215 27 812 6034 -923c f 814 6034 -924b 5 840 6034 -9250 5 841 6034 -9255 b 843 6034 -9260 5 844 6034 -9265 d 846 6034 -9272 6 847 6034 -9278 2 848 6034 -927a 8 849 6034 -9282 14 851 6034 -9296 b 853 6034 -92a1 6 863 6034 -92a7 a 864 6034 -92b1 1c 866 6034 -92cd 16 877 6034 -92e3 2 880 6034 -FUNC 92e5 18 4 std::bad_exception::bad_exception(std::bad_exception const &) -FUNC 92fd e4 20 __InternalCxxFrameHandler -92fd 6 412 6034 -9303 3d 426 6034 -9340 6 432 6034 -9346 6 435 6034 -934c 10 440 6034 -935c 11 479 6034 -936d 2 482 6034 -936f 18 489 6034 -9387 19 499 6034 -93a0 1d 513 6034 -93bd 1c 524 6034 -93d9 6 533 6034 -93df 2 535 6034 -FUNC 93e1 6c 0 _use_encode_pointer -93e1 7 66 2227 -93e8 2 72 2227 -93ea 12 75 2227 -93fc 7 76 2227 -9403 5 78 2227 -9408 7 82 2227 -940f 5 85 2227 -9414 e 91 2227 -9422 1f 93 2227 -9441 4 95 2227 -9445 6 100 2227 -944b 2 101 2227 -FUNC 944d 6e 4 _encode_pointer -944d 1 120 2227 -944e 2b 129 2227 -9479 8 145 2227 -9481 d 133 2227 -948e d 135 2227 -949b c 138 2227 -94a7 4 148 2227 -94ab a 150 2227 -94b5 5 153 2227 -94ba 1 154 2227 -FUNC 94bb 9 0 _encoded_null -94bb 0 173 2227 -94bb 8 174 2227 -94c3 1 175 2227 -FUNC 94c4 6e 4 _decode_pointer -94c4 1 194 2227 -94c5 2b 203 2227 -94f0 8 219 2227 -94f8 d 207 2227 -9505 d 209 2227 -9512 c 212 2227 -951e 4 222 2227 -9522 a 224 2227 -952c 5 227 2227 -9531 1 228 2227 -FUNC 9532 9 4 __crtTlsAlloc -9532 0 240 2227 -9532 6 241 2227 -9538 3 242 2227 -FUNC 953b 15 4 __fls_getvalue -953b 0 258 2227 -953b 12 259 2227 -954d 3 260 2227 -FUNC 9550 6 0 __get_flsindex -9550 0 272 2227 -9550 5 273 2227 -9555 1 274 2227 -FUNC 9556 32 0 __set_flsgetvalue -9556 1 286 2227 -9557 e 288 2227 -9565 4 289 2227 -9569 e 291 2227 -9577 d 292 2227 -9584 3 294 2227 -9587 1 298 2227 -FUNC 9588 19 8 __fls_setvalue -9588 0 315 2227 -9588 16 316 2227 -959e 3 317 2227 -FUNC 95a1 3d 0 _mtterm -95a1 0 473 2227 -95a1 a 480 2227 -95ab f 481 2227 -95ba 7 482 2227 -95c1 a 485 2227 -95cb 7 486 2227 -95d2 7 487 2227 -95d9 5 494 2227 -FUNC 95de bf 8 _initptd -95de c 521 2227 -95ea e 522 2227 -95f8 a 524 2227 -9602 6 525 2227 -9608 4 527 2227 -960c 9 529 2227 -9615 16 532 2227 -962b 10 533 2227 -963b 3 540 2227 -963e 7 544 2227 -9645 7 545 2227 -964c 8 546 2227 -9654 7 547 2227 -965b 8 551 2227 -9663 4 552 2227 -9667 6 553 2227 -966d 4 561 2227 -9671 8 562 2227 -9679 9 563 2227 -9682 c 565 2227 -968e 6 568 2227 -9694 9 566 2227 -FUNC 969d 77 0 _getptd_noexit -969d 2 588 2227 -969f 6 592 2227 -96a5 15 600 2227 -96ba 14 608 2227 -96ce 19 610 2227 -96e7 a 616 2227 -96f1 6 618 2227 -96f7 6 619 2227 -96fd 2 621 2227 -96ff 7 627 2227 -9706 2 628 2227 -9708 8 633 2227 -9710 3 635 2227 -9713 1 636 2227 -FUNC 9714 18 0 _getptd -9714 1 657 2227 -9715 7 658 2227 -971c 4 659 2227 -9720 8 660 2227 -9728 3 662 2227 -972b 1 663 2227 -FUNC 972c 121 4 _freefls -972c c 691 2227 -9738 b 702 2227 -9743 7 703 2227 -974a 7 704 2227 -9751 7 706 2227 -9758 7 707 2227 -975f 7 709 2227 -9766 7 710 2227 -976d 7 712 2227 -9774 7 713 2227 -977b 7 715 2227 -9782 7 716 2227 -9789 7 718 2227 -9790 7 719 2227 -9797 a 721 2227 -97a1 7 722 2227 -97a8 8 724 2227 -97b0 4 725 2227 -97b4 1a 728 2227 -97ce 7 729 2227 -97d5 c 731 2227 -97e1 8 735 2227 -97e9 7 737 2227 -97f0 7 738 2227 -97f7 7 740 2227 -97fe 15 743 2227 -9813 7 744 2227 -981a c 747 2227 -9826 7 751 2227 -982d 8 754 2227 -9835 3 731 2227 -9838 9 732 2227 -9841 3 747 2227 -9844 9 748 2227 -FUNC 984d 69 4 _freeptd -984d 0 778 2227 -984d a 783 2227 -9857 1b 795 2227 -9872 13 796 2227 -9885 16 802 2227 -989b 7 804 2227 -98a2 a 807 2227 -98ac 9 811 2227 -98b5 1 813 2227 -FUNC 98b6 6 0 __threadid -98b6 0 837 2227 -98b6 6 838 2227 -FUNC 98bc 6 0 __threadhandle -98bc 0 844 2227 -98bc 6 845 2227 -FUNC 98c2 184 0 _mtinit -98c2 1 346 2227 -98c3 d 355 2227 -98d0 4 356 2227 -98d4 5 357 2227 -98d9 3 358 2227 -98dc 2 444 2227 -98de e 362 2227 -98ec d 365 2227 -98f9 d 368 2227 -9906 d 371 2227 -9913 2a 372 2227 -993d a 375 2227 -9947 1a 379 2227 -9961 25 388 2227 -9986 5 393 2227 -998b b 400 2227 -9996 10 401 2227 -99a6 10 402 2227 -99b6 18 403 2227 -99ce 7 410 2227 -99d5 2 412 2227 -99d7 1b 418 2227 -99f2 2 420 2227 -99f4 2d 428 2227 -9a21 a 438 2227 -9a2b 6 440 2227 -9a31 6 441 2227 -9a37 5 443 2227 -9a3c 5 430 2227 -9a41 4 389 2227 -9a45 1 444 2227 -FUNC 9a46 39 0 terminate() -9a46 c 94 5983 -9a52 8 107 5983 -9a5a 4 111 5983 -9a5e 4 116 5983 -9a62 2 120 5983 -9a64 2 121 5983 -9a66 7 122 5983 -9a6d 7 127 5983 -9a74 5 135 5983 -9a79 6 136 5983 -FUNC 9a7f 13 0 unexpected() -9a7f 0 149 5983 -9a7f 8 159 5983 -9a87 4 163 5983 -9a8b 2 167 5983 -9a8d 5 173 5983 -FUNC 9a92 37 0 _inconsistency() -9a92 c 187 5983 -9a9e c 196 5983 -9aaa 4 197 5983 -9aae 4 202 5983 -9ab2 2 203 5983 -9ab4 2 204 5983 -9ab6 7 205 5983 -9abd 7 211 5983 -9ac4 5 217 5983 -FUNC 9ac9 11 4 _initp_eh_hooks -9ac9 0 74 5983 -9ac9 10 80 5983 -9ad9 1 81 5983 -FUNC 9ae0 4c c _CallSettingFrame -9ae0 3 48 5665 -9ae3 3 57 5665 -9ae6 1 58 5665 -9ae7 1 59 5665 -9ae8 3 60 5665 -9aeb 3 61 5665 -9aee 3 62 5665 -9af1 3 63 5665 -9af4 1 64 5665 -9af5 3 65 5665 -9af8 3 66 5665 -9afb 3 67 5665 -9afe 5 68 5665 -9b03 1 69 5665 -9b04 1 70 5665 -9b05 2 71 5665 -9b07 1 73 5665 -9b08 1 74 5665 -9b09 2 75 5665 -9b0b 1 76 5665 -9b0c 3 77 5665 -9b0f 1 78 5665 -9b10 2 79 5665 -9b12 6 80 5665 -9b18 2 81 5665 -9b1a 5 82 5665 -9b1f 1 84 5665 -9b20 5 85 5665 -9b25 1 86 5665 -9b26 1 87 5665 -9b27 1 88 5665 -9b28 4 89 5665 -PUBLIC 9b07 0 _NLG_Return -FUNC 9b2c b9 4 _onexit_nolock -9b2c 5 104 3259 -9b31 b 107 3259 -9b3c 13 108 3259 -9b4f 16 112 3259 -9b65 d 122 3259 -9b72 d 127 3259 -9b7f 14 129 3259 -9b93 3 134 3259 -9b96 14 136 3259 -9baa 3 147 3259 -9bad f 149 3259 -9bbc e 156 3259 -9bca c 157 3259 -9bd6 7 159 3259 -9bdd 6 114 3259 -9be3 2 160 3259 -FUNC 9be5 2f 0 __onexitinit -9be5 1 205 3259 -9be6 b 208 3259 -9bf1 9 209 3259 -9bfa e 211 3259 -9c08 4 216 3259 -9c0c 1 221 3259 -9c0d 3 218 3259 -9c10 3 220 3259 -9c13 1 221 3259 -FUNC 9c14 3c 4 _onexit -9c14 c 85 3259 -9c20 5 88 3259 -9c25 4 90 3259 -9c29 c 91 3259 -9c35 c 93 3259 -9c41 3 97 3259 -9c44 6 98 3259 -9c4a 6 94 3259 -FUNC 9c50 12 4 atexit -9c50 0 165 3259 -9c50 11 166 3259 -9c61 1 167 3259 -FUNC 9c62 4f 4 V6_HeapAlloc -9c62 c 27 5425 -9c6e 4 28 5425 -9c72 b 29 5425 -9c7d 8 31 5425 -9c85 4 32 5425 -9c89 a 33 5425 -9c93 c 35 5425 -9c9f 3 39 5425 -9ca2 6 40 5425 -9ca8 9 36 5425 -FUNC 9cb1 75 4 _heap_alloc -9cb1 0 90 5425 -9cb1 9 95 5425 -9cba 5 96 5425 -9cbf 7 97 5425 -9cc6 c 98 5425 -9cd2 a 104 5425 -9cdc 18 105 5425 -9cf4 1 129 5425 -9cf5 a 107 5425 -9cff 9 108 5425 -9d08 2 109 5425 -9d0a 4 121 5425 -9d0e 1 122 5425 -9d0f 6 124 5425 -9d15 10 126 5425 -9d25 1 129 5425 -FUNC 9d26 c3 4 malloc -9d26 1 155 5425 -9d27 16 159 5425 -9d3d 65 163 5425 -9da2 4 168 5425 -9da6 b 172 5425 -9db1 b 179 5425 -9dbc 2 183 5425 -9dbe 7 174 5425 -9dc5 8 193 5425 -9dcd 5 195 5425 -9dd2 1 196 5425 -9dd3 7 185 5425 -9dda b 186 5425 -9de5 3 187 5425 -9de8 1 196 5425 -FUNC 9de9 a 4 _initp_heap_handler -9de9 0 31 5230 -9de9 9 32 5230 -9df2 1 33 5230 -FUNC 9df3 31 4 _set_new_handler(int (*)(unsigned int)) -9df3 1 53 5230 -9df4 7 57 5230 -9dfb b 59 5230 -9e06 b 60 5230 -9e11 f 63 5230 -9e20 3 65 5230 -9e23 1 66 5230 -FUNC 9e24 9 4 _set_new_handler(int) -9e24 0 86 5230 -9e24 8 89 5230 -9e2c 1 90 5230 -FUNC 9e2d d 0 _query_new_handler() -9e2d 0 110 5230 -9e2d c 111 5230 -9e39 1 112 5230 -FUNC 9e3a 22 4 _callnewh -9e3a 0 131 5230 -9e3a b 133 5230 -9e45 10 135 5230 -9e55 3 138 5230 -9e58 1 139 5230 -9e59 2 136 5230 -9e5b 1 139 5230 -FUNC 9e5c 22 18 _invoke_watson_if_error -9e5c 3 754 5850 -9e5f 6 755 5850 -9e65 17 759 5850 -9e7c 2 760 5850 -FUNC 9e7e 70 4 type_info::_Type_info_dtor(type_info *) -9e7e c 62 5815 -9e8a 8 63 5815 -9e92 4 64 5815 -9e96 a 65 5815 -9ea0 d 70 5815 -9ead 4 72 5815 -9eb1 4 74 5815 -9eb5 6 79 5815 -9ebb 7 80 5815 -9ec2 9 94 5815 -9ecb 4 101 5815 -9ecf c 103 5815 -9edb 6 107 5815 -9ee1 2 83 5815 -9ee3 2 72 5815 -9ee5 9 104 5815 -FUNC 9eee f5 8 type_info::_Name_base(type_info const *,__type_info_node *) -9eee c 109 5815 -9efa e 113 5815 -9f08 24 124 5815 -9f2c 7 125 5815 -9f33 16 132 5815 -9f49 2 133 5815 -9f4b 5 132 5815 -9f50 b 136 5815 -9f5b 5 142 5815 -9f60 a 149 5815 -9f6a 4 150 5815 -9f6e 11 157 5815 -9f7f 20 158 5815 -9f9f 5 159 5815 -9fa4 9 165 5815 -9fad 3 166 5815 -9fb0 2 167 5815 -9fb2 7 173 5815 -9fb9 9 180 5815 -9fc2 c 181 5815 -9fce 3 188 5815 -9fd1 6 189 5815 -9fd7 3 181 5815 -9fda 9 182 5815 -FUNC 9fe3 70 4 type_info::_Type_info_dtor_internal(type_info *) -9fe3 c 197 5815 -9fef 8 198 5815 -9ff7 4 199 5815 -9ffb a 200 5815 -a005 d 205 5815 -a012 4 207 5815 -a016 4 209 5815 -a01a 6 214 5815 -a020 7 215 5815 -a027 9 229 5815 -a030 4 236 5815 -a034 c 238 5815 -a040 6 242 5815 -a046 2 218 5815 -a048 2 207 5815 -a04a 9 239 5815 -FUNC a053 31 10 __unDNameHelper -a053 3 249 5815 -a056 7 250 5815 -a05d 7 252 5815 -a064 1e 260 5815 -a082 2 261 5815 -FUNC a084 eb 8 type_info::_Name_base_internal(type_info const *,__type_info_node *) -a084 c 265 5815 -a090 e 269 5815 -a09e 1a 273 5815 -a0b8 7 274 5815 -a0bf 16 281 5815 -a0d5 2 282 5815 -a0d7 5 281 5815 -a0dc b 285 5815 -a0e7 5 291 5815 -a0ec a 298 5815 -a0f6 4 299 5815 -a0fa 11 306 5815 -a10b 20 307 5815 -a12b 5 308 5815 -a130 9 314 5815 -a139 3 315 5815 -a13c 2 316 5815 -a13e 7 322 5815 -a145 9 329 5815 -a14e c 330 5815 -a15a 3 337 5815 -a15d 6 338 5815 -a163 3 330 5815 -a166 9 331 5815 -FUNC a16f 53 4 __clean_type_info_names_internal -a16f c 346 5815 -a17b 8 347 5815 -a183 4 348 5815 -a187 6 352 5815 -a18d 4 354 5815 -a191 3 356 5815 -a194 7 357 5815 -a19b 8 358 5815 -a1a3 4 354 5815 -a1a7 c 359 5815 -a1b3 6 363 5815 -a1b9 9 361 5815 -FUNC a1d0 88 8 strcmp -a1d0 0 65 926 -a1d0 4 73 926 -a1d4 4 74 926 -a1d8 6 76 926 -a1de 2 77 926 -a1e0 2 81 926 -a1e2 2 83 926 -a1e4 2 84 926 -a1e6 2 85 926 -a1e8 2 86 926 -a1ea 3 87 926 -a1ed 2 88 926 -a1ef 2 89 926 -a1f1 2 90 926 -a1f3 3 92 926 -a1f6 3 94 926 -a1f9 2 95 926 -a1fb 2 96 926 -a1fd 2 97 926 -a1ff 3 98 926 -a202 2 99 926 -a204 3 100 926 -a207 3 101 926 -a20a 2 102 926 -a20c 4 103 926 -a210 2 107 926 -a212 2 108 926 -a214 2 115 926 -a216 2 116 926 -a218 3 117 926 -a21b 1 118 926 -a21c 6 122 926 -a222 2 123 926 -a224 2 125 926 -a226 3 126 926 -a229 2 127 926 -a22b 2 128 926 -a22d 3 129 926 -a230 2 130 926 -a232 2 131 926 -a234 6 133 926 -a23a 2 134 926 -a23c 3 139 926 -a23f 3 140 926 -a242 2 141 926 -a244 2 142 926 -a246 2 143 926 -a248 2 144 926 -a24a 3 145 926 -a24d 2 146 926 -a24f 2 147 926 -a251 2 148 926 -a253 3 149 926 -a256 2 150 926 -FUNC a258 65 c strcpy_s -a258 0 13 781 -a258 30 18 781 -a288 c 19 781 -a294 2 21 781 -a296 d 23 781 -a2a3 4 27 781 -a2a7 2 29 781 -a2a9 e 30 781 -a2b7 5 33 781 -a2bc 1 34 781 -FUNC a2c0 7a c memset -a2c0 0 59 934 -a2c0 4 68 934 -a2c4 4 69 934 -a2c8 2 71 934 -a2ca 2 72 934 -a2cc 2 74 934 -a2ce 4 75 934 -a2d2 2 78 934 -a2d4 2 79 934 -a2d6 6 80 934 -a2dc 2 81 934 -a2de 7 82 934 -a2e5 2 83 934 -a2e7 5 85 934 -a2ec 1 91 934 -a2ed 2 92 934 -a2ef 3 94 934 -a2f2 2 95 934 -a2f4 2 97 934 -a2f6 3 98 934 -a2f9 2 99 934 -a2fb 2 101 934 -a2fd 2 103 934 -a2ff 3 104 934 -a302 3 105 934 -a305 2 106 934 -a307 2 110 934 -a309 3 111 934 -a30c 2 113 934 -a30e 2 115 934 -a310 3 117 934 -a313 2 119 934 -a315 2 122 934 -a317 3 123 934 -a31a 3 124 934 -a31d 2 125 934 -a31f 2 127 934 -a321 2 129 934 -a323 2 130 934 -a325 2 134 934 -a327 3 135 934 -a32a 3 137 934 -a32d 2 138 934 -a32f 4 142 934 -a333 1 143 934 -a334 1 145 934 -a335 4 148 934 -a339 1 150 934 -FUNC a340 365 c memcpy -a340 3 101 1027 -a343 1 113 1027 -a344 1 114 1027 -a345 3 116 1027 -a348 3 117 1027 -a34b 3 119 1027 -a34e 2 129 1027 -a350 2 131 1027 -a352 2 132 1027 -a354 2 134 1027 -a356 2 135 1027 -a358 2 137 1027 -a35a 6 138 1027 -a360 6 147 1027 -a366 2 148 1027 -a368 7 150 1027 -a36f 2 151 1027 -a371 1 153 1027 -a372 1 154 1027 -a373 3 155 1027 -a376 3 156 1027 -a379 2 157 1027 -a37b 1 158 1027 -a37c 1 159 1027 -a37d 2 160 1027 -a37f 1 163 1027 -a380 1 164 1027 -a381 1 165 1027 -a382 5 166 1027 -a387 6 179 1027 -a38d 2 180 1027 -a38f 3 182 1027 -a392 3 183 1027 -a395 3 185 1027 -a398 2 186 1027 -a39a 2 188 1027 -a39c 8 190 1027 -a3a4 2 208 1027 -a3a6 5 209 1027 -a3ab 3 211 1027 -a3ae 2 212 1027 -a3b0 3 214 1027 -a3b3 2 215 1027 -a3b5 7 217 1027 -a3bc 8 221 1027 -a3c4 14 225 1027 -a3d8 2 232 1027 -a3da 2 233 1027 -a3dc 2 235 1027 -a3de 3 236 1027 -a3e1 3 238 1027 -a3e4 3 239 1027 -a3e7 3 241 1027 -a3ea 3 242 1027 -a3ed 3 244 1027 -a3f0 3 245 1027 -a3f3 3 247 1027 -a3f6 2 248 1027 -a3f8 2 250 1027 -a3fa a 252 1027 -a404 2 256 1027 -a406 2 257 1027 -a408 2 259 1027 -a40a 3 260 1027 -a40d 3 262 1027 -a410 3 263 1027 -a413 3 265 1027 -a416 3 266 1027 -a419 3 268 1027 -a41c 2 269 1027 -a41e 2 271 1027 -a420 8 273 1027 -a428 2 277 1027 -a42a 2 278 1027 -a42c 2 280 1027 -a42e 3 281 1027 -a431 3 283 1027 -a434 3 284 1027 -a437 3 286 1027 -a43a 2 287 1027 -a43c 2 289 1027 -a43e 2a 291 1027 -a468 4 298 1027 -a46c 4 300 1027 -a470 4 302 1027 -a474 4 304 1027 -a478 4 306 1027 -a47c 4 308 1027 -a480 4 310 1027 -a484 4 312 1027 -a488 4 314 1027 -a48c 4 316 1027 -a490 4 318 1027 -a494 4 320 1027 -a498 4 322 1027 -a49c 4 324 1027 -a4a0 7 326 1027 -a4a7 2 328 1027 -a4a9 2 329 1027 -a4ab 19 331 1027 -a4c4 3 340 1027 -a4c7 1 341 1027 -a4c8 1 342 1027 -a4c9 3 344 1027 -a4cc 2 348 1027 -a4ce 2 350 1027 -a4d0 3 351 1027 -a4d3 1 352 1027 -a4d4 1 353 1027 -a4d5 3 354 1027 -a4d8 2 358 1027 -a4da 2 360 1027 -a4dc 3 361 1027 -a4df 3 362 1027 -a4e2 3 363 1027 -a4e5 1 364 1027 -a4e6 1 365 1027 -a4e7 5 366 1027 -a4ec 2 370 1027 -a4ee 2 372 1027 -a4f0 3 373 1027 -a4f3 3 374 1027 -a4f6 3 375 1027 -a4f9 3 376 1027 -a4fc 3 377 1027 -a4ff 1 378 1027 -a500 1 379 1027 -a501 3 380 1027 -a504 4 391 1027 -a508 4 392 1027 -a50c 6 397 1027 -a512 2 398 1027 -a514 3 400 1027 -a517 3 401 1027 -a51a 3 403 1027 -a51d 2 404 1027 -a51f 1 406 1027 -a520 2 407 1027 -a522 1 408 1027 -a523 9 410 1027 -a52c 2 414 1027 -a52e a 417 1027 -a538 2 422 1027 -a53a 5 423 1027 -a53f 3 425 1027 -a542 2 426 1027 -a544 3 428 1027 -a547 2 429 1027 -a549 7 431 1027 -a550 14 435 1027 -a564 3 442 1027 -a567 2 443 1027 -a569 3 445 1027 -a56c 3 446 1027 -a56f 3 448 1027 -a572 3 449 1027 -a575 3 451 1027 -a578 2 452 1027 -a57a 1 454 1027 -a57b 2 455 1027 -a57d 1 456 1027 -a57e a 458 1027 -a588 3 462 1027 -a58b 2 463 1027 -a58d 3 465 1027 -a590 3 466 1027 -a593 3 468 1027 -a596 3 469 1027 -a599 3 471 1027 -a59c 3 472 1027 -a59f 3 474 1027 -a5a2 2 475 1027 -a5a4 1 477 1027 -a5a5 2 478 1027 -a5a7 1 479 1027 -a5a8 8 481 1027 -a5b0 3 485 1027 -a5b3 2 486 1027 -a5b5 3 488 1027 -a5b8 3 489 1027 -a5bb 3 491 1027 -a5be 3 492 1027 -a5c1 3 494 1027 -a5c4 3 495 1027 -a5c7 3 497 1027 -a5ca 3 498 1027 -a5cd 3 500 1027 -a5d0 6 501 1027 -a5d6 1 503 1027 -a5d7 2 504 1027 -a5d9 1 505 1027 -a5da 2a 507 1027 -a604 4 516 1027 -a608 4 518 1027 -a60c 4 520 1027 -a610 4 522 1027 -a614 4 524 1027 -a618 4 526 1027 -a61c 4 528 1027 -a620 4 530 1027 -a624 4 532 1027 -a628 4 534 1027 -a62c 4 536 1027 -a630 4 538 1027 -a634 4 540 1027 -a638 4 542 1027 -a63c 7 544 1027 -a643 2 546 1027 -a645 2 547 1027 -a647 19 549 1027 -a660 3 558 1027 -a663 1 560 1027 -a664 1 561 1027 -a665 3 562 1027 -a668 3 566 1027 -a66b 3 568 1027 -a66e 3 569 1027 -a671 1 570 1027 -a672 1 571 1027 -a673 5 572 1027 -a678 3 576 1027 -a67b 3 578 1027 -a67e 3 579 1027 -a681 3 580 1027 -a684 3 581 1027 -a687 1 582 1027 -a688 1 583 1027 -a689 3 584 1027 -a68c 3 588 1027 -a68f 3 590 1027 -a692 3 591 1027 -a695 3 592 1027 -a698 3 593 1027 -a69b 3 594 1027 -a69e 3 595 1027 -a6a1 1 596 1027 -a6a2 1 597 1027 -a6a3 2 598 1027 -FUNC a6b0 365 c memmove -a6b0 3 101 977 -a6b3 1 113 977 -a6b4 1 114 977 -a6b5 3 116 977 -a6b8 3 117 977 -a6bb 3 119 977 -a6be 2 129 977 -a6c0 2 131 977 -a6c2 2 132 977 -a6c4 2 134 977 -a6c6 2 135 977 -a6c8 2 137 977 -a6ca 6 138 977 -a6d0 6 147 977 -a6d6 2 148 977 -a6d8 7 150 977 -a6df 2 151 977 -a6e1 1 153 977 -a6e2 1 154 977 -a6e3 3 155 977 -a6e6 3 156 977 -a6e9 2 157 977 -a6eb 1 158 977 -a6ec 1 159 977 -a6ed 2 160 977 -a6ef 1 163 977 -a6f0 1 164 977 -a6f1 1 165 977 -a6f2 5 166 977 -a6f7 6 179 977 -a6fd 2 180 977 -a6ff 3 182 977 -a702 3 183 977 -a705 3 185 977 -a708 2 186 977 -a70a 2 188 977 -a70c 8 190 977 -a714 2 208 977 -a716 5 209 977 -a71b 3 211 977 -a71e 2 212 977 -a720 3 214 977 -a723 2 215 977 -a725 7 217 977 -a72c 8 221 977 -a734 14 225 977 -a748 2 232 977 -a74a 2 233 977 -a74c 2 235 977 -a74e 3 236 977 -a751 3 238 977 -a754 3 239 977 -a757 3 241 977 -a75a 3 242 977 -a75d 3 244 977 -a760 3 245 977 -a763 3 247 977 -a766 2 248 977 -a768 2 250 977 -a76a a 252 977 -a774 2 256 977 -a776 2 257 977 -a778 2 259 977 -a77a 3 260 977 -a77d 3 262 977 -a780 3 263 977 -a783 3 265 977 -a786 3 266 977 -a789 3 268 977 -a78c 2 269 977 -a78e 2 271 977 -a790 8 273 977 -a798 2 277 977 -a79a 2 278 977 -a79c 2 280 977 -a79e 3 281 977 -a7a1 3 283 977 -a7a4 3 284 977 -a7a7 3 286 977 -a7aa 2 287 977 -a7ac 2 289 977 -a7ae 2a 291 977 -a7d8 4 298 977 -a7dc 4 300 977 -a7e0 4 302 977 -a7e4 4 304 977 -a7e8 4 306 977 -a7ec 4 308 977 -a7f0 4 310 977 -a7f4 4 312 977 -a7f8 4 314 977 -a7fc 4 316 977 -a800 4 318 977 -a804 4 320 977 -a808 4 322 977 -a80c 4 324 977 -a810 7 326 977 -a817 2 328 977 -a819 2 329 977 -a81b 19 331 977 -a834 3 340 977 -a837 1 341 977 -a838 1 342 977 -a839 3 344 977 -a83c 2 348 977 -a83e 2 350 977 -a840 3 351 977 -a843 1 352 977 -a844 1 353 977 -a845 3 354 977 -a848 2 358 977 -a84a 2 360 977 -a84c 3 361 977 -a84f 3 362 977 -a852 3 363 977 -a855 1 364 977 -a856 1 365 977 -a857 5 366 977 -a85c 2 370 977 -a85e 2 372 977 -a860 3 373 977 -a863 3 374 977 -a866 3 375 977 -a869 3 376 977 -a86c 3 377 977 -a86f 1 378 977 -a870 1 379 977 -a871 3 380 977 -a874 4 391 977 -a878 4 392 977 -a87c 6 397 977 -a882 2 398 977 -a884 3 400 977 -a887 3 401 977 -a88a 3 403 977 -a88d 2 404 977 -a88f 1 406 977 -a890 2 407 977 -a892 1 408 977 -a893 9 410 977 -a89c 2 414 977 -a89e a 417 977 -a8a8 2 422 977 -a8aa 5 423 977 -a8af 3 425 977 -a8b2 2 426 977 -a8b4 3 428 977 -a8b7 2 429 977 -a8b9 7 431 977 -a8c0 14 435 977 -a8d4 3 442 977 -a8d7 2 443 977 -a8d9 3 445 977 -a8dc 3 446 977 -a8df 3 448 977 -a8e2 3 449 977 -a8e5 3 451 977 -a8e8 2 452 977 -a8ea 1 454 977 -a8eb 2 455 977 -a8ed 1 456 977 -a8ee a 458 977 -a8f8 3 462 977 -a8fb 2 463 977 -a8fd 3 465 977 -a900 3 466 977 -a903 3 468 977 -a906 3 469 977 -a909 3 471 977 -a90c 3 472 977 -a90f 3 474 977 -a912 2 475 977 -a914 1 477 977 -a915 2 478 977 -a917 1 479 977 -a918 8 481 977 -a920 3 485 977 -a923 2 486 977 -a925 3 488 977 -a928 3 489 977 -a92b 3 491 977 -a92e 3 492 977 -a931 3 494 977 -a934 3 495 977 -a937 3 497 977 -a93a 3 498 977 -a93d 3 500 977 -a940 6 501 977 -a946 1 503 977 -a947 2 504 977 -a949 1 505 977 -a94a 2a 507 977 -a974 4 516 977 -a978 4 518 977 -a97c 4 520 977 -a980 4 522 977 -a984 4 524 977 -a988 4 526 977 -a98c 4 528 977 -a990 4 530 977 -a994 4 532 977 -a998 4 534 977 -a99c 4 536 977 -a9a0 4 538 977 -a9a4 4 540 977 -a9a8 4 542 977 -a9ac 7 544 977 -a9b3 2 546 977 -a9b5 2 547 977 -a9b7 19 549 977 -a9d0 3 558 977 -a9d3 1 560 977 -a9d4 1 561 977 -a9d5 3 562 977 -a9d8 3 566 977 -a9db 3 568 977 -a9de 3 569 977 -a9e1 1 570 977 -a9e2 1 571 977 -a9e3 5 572 977 -a9e8 3 576 977 -a9eb 3 578 977 -a9ee 3 579 977 -a9f1 3 580 977 -a9f4 3 581 977 -a9f7 1 582 977 -a9f8 1 583 977 -a9f9 3 584 977 -a9fc 3 588 977 -a9ff 3 590 977 -aa02 3 591 977 -aa05 3 592 977 -aa08 3 593 977 -aa0b 3 594 977 -aa0e 3 595 977 -aa11 1 596 977 -aa12 1 597 977 -aa13 2 598 977 -FUNC aa15 3d 4 __CxxUnhandledExceptionFilter(_EXCEPTION_POINTERS *) -aa15 0 67 5721 -aa15 33 68 5721 -aa48 5 69 5721 -aa4d 2 72 5721 -aa4f 3 73 5721 -FUNC aa52 e 0 __CxxSetUnhandledExceptionFilter -aa52 0 86 5721 -aa52 b 89 5721 -aa5d 2 90 5721 -aa5f 1 91 5721 -FUNC aa60 1a0 4 _NMSG_WRITE -aa60 2 174 2418 -aa62 a 178 2418 -aa6c f 179 2418 -aa7b a 182 2418 -aa85 2a 203 2418 -aaaf c 215 2418 -aabb 2a 224 2418 -aae5 1e 227 2418 -ab03 26 228 2418 -ab29 d 231 2418 -ab36 b 233 2418 -ab41 2f 234 2418 -ab70 20 237 2418 -ab90 22 238 2418 -abb2 15 242 2418 -abc7 a 205 2418 -abd1 9 206 2418 -abda 24 212 2418 -abfe 2 245 2418 -FUNC ac00 20 4 _GET_RTERRMSG -ac00 0 268 2418 -ac00 2 271 2418 -ac02 13 272 2418 -ac15 2 275 2418 -ac17 1 276 2418 -ac18 7 273 2418 -ac1f 1 276 2418 -FUNC ac20 39 0 _FF_MSGBANNER -ac20 0 141 2418 -ac20 22 145 2418 -ac42 a 147 2418 -ac4c c 148 2418 -ac58 1 150 2418 -FUNC ac59 1 4 _initp_misc_winxfltr -ac59 0 105 2752 -ac59 1 106 2752 -FUNC ac5a 32 4 xcptlookup -ac5a 0 410 2752 -ac5a b 411 2752 -ac65 14 418 2752 -ac79 e 425 2752 -ac87 2 428 2752 -ac89 2 426 2752 -ac8b 1 429 2752 -FUNC ac8c 15e 8 _XcptFilter -ac8c 6 206 2752 -ac92 7 213 2752 -ac99 8 214 2752 -aca1 34 219 2752 -acd5 2 221 2752 -acd7 2 225 2752 -acd9 3 227 2752 -acdc 7 234 2752 -ace3 7 235 2752 -acea 5 243 2752 -acef 4 248 2752 -acf3 8 249 2752 -acfb 3 255 2752 -acfe 6 259 2752 -ad04 6 273 2752 -ad0a 6 274 2752 -ad10 c 283 2752 -ad1c 17 291 2752 -ad33 1e 294 2752 -ad51 3 291 2752 -ad54 c 321 2752 -ad60 9 323 2752 -ad69 7 325 2752 -ad70 9 327 2752 -ad79 7 329 2752 -ad80 9 331 2752 -ad89 7 333 2752 -ad90 9 335 2752 -ad99 7 337 2752 -ada0 9 339 2752 -ada9 7 341 2752 -adb0 9 343 2752 -adb9 7 345 2752 -adc0 7 347 2752 -adc7 8 356 2752 -adcf 3 361 2752 -add2 2 363 2752 -add4 4 368 2752 -add8 3 369 2752 -addb 7 375 2752 -ade2 6 377 2752 -ade8 2 379 2752 -FUNC adea 1b 8 __CppXcptFilter -adea 0 145 2752 -adea b 146 2752 -adf5 c 147 2752 -ae01 1 151 2752 -ae02 2 149 2752 -ae04 1 151 2752 -FUNC ae05 db 0 _setenvp -ae05 1 77 2280 -ae06 c 85 2280 -ae12 5 86 2280 -ae17 8 91 2280 -ae1f 4 98 2280 -ae23 8 99 2280 -ae2b 4 110 2280 -ae2f 1 111 2280 -ae30 11 112 2280 -ae41 15 117 2280 -ae56 2 118 2280 -ae58 9 121 2280 -ae61 9 123 2280 -ae6a 6 125 2280 -ae70 10 127 2280 -ae80 1c 133 2280 -ae9c 3 134 2280 -ae9f 6 121 2280 -aea5 b 138 2280 -aeb0 6 139 2280 -aeb6 2 142 2280 -aeb8 a 149 2280 -aec2 7 152 2280 -aec9 17 153 2280 -FUNC aee0 a 4 _set_pgmptr -aee0 a 334 2303 -FUNC aeea 198 c parse_cmdline -aeea 4 218 2322 -aeee 6 226 2322 -aef4 8 230 2322 -aefc 14 231 2322 -af10 3 250 2322 -af13 5 252 2322 -af18 5 254 2322 -af1d 9 255 2322 -af26 2 256 2322 -af28 2 258 2322 -af2a 4 259 2322 -af2e 8 260 2322 -af36 2 262 2322 -af38 f 264 2322 -af47 2 265 2322 -af49 6 266 2322 -af4f a 267 2322 -af59 1 268 2322 -af5a 1a 272 2322 -af74 4 277 2322 -af78 4 278 2322 -af7c 4 281 2322 -af80 9 286 2322 -af89 a 287 2322 -af93 3 288 2322 -af96 1 275 2322 -af97 2 276 2322 -af99 9 291 2322 -afa2 6 295 2322 -afa8 9 296 2322 -afb1 2 297 2322 -afb3 3 311 2322 -afb6 4 315 2322 -afba 1 318 2322 -afbb 1 319 2322 -afbc 5 316 2322 -afc1 5 321 2322 -afc6 5 324 2322 -afcb e 325 2322 -afd9 2 326 2322 -afdb 2 327 2322 -afdd d 329 2322 -afea 2 332 2322 -afec 5 336 2322 -aff1 4 337 2322 -aff5 4 338 2322 -aff9 6 339 2322 -afff 3 338 2322 -b002 14 343 2322 -b016 4 348 2322 -b01a 2 349 2322 -b01c 10 350 2322 -b02c b 351 2322 -b037 2 352 2322 -b039 a 354 2322 -b043 2 355 2322 -b045 a 356 2322 -b04f 1 357 2322 -b050 2 358 2322 -b052 5 361 2322 -b057 1 363 2322 -b058 5 372 2322 -b05d 4 376 2322 -b061 7 377 2322 -b068 2 378 2322 -b06a 8 379 2322 -b072 9 382 2322 -b07b 3 383 2322 -b07e 2 384 2322 -b080 2 385 2322 -FUNC b082 b9 0 _setargv -b082 7 88 2322 -b089 c 97 2322 -b095 5 98 2322 -b09a 18 104 2322 -b0b2 19 120 2322 -b0cb 11 127 2322 -b0dc 15 132 2322 -b0f1 a 136 2322 -b0fb 2 138 2322 -b0fd 8 140 2322 -b105 3 141 2322 -b108 2 142 2322 -b10a 13 149 2322 -b11d c 153 2322 -b129 6 157 2322 -b12f 4 172 2322 -b133 6 134 2322 -b139 2 173 2322 -FUNC b13b 135 0 __crtGetEnvironmentStringsA -b13b 2 43 4307 -b13d 1a 57 4307 -b157 8 59 4307 -b15f c 60 4307 -b16b b 62 4307 -b176 e 63 4307 -b184 9 68 4307 -b18d 4 71 4307 -b191 8 72 4307 -b199 7 73 4307 -b1a0 7 77 4307 -b1a7 7 78 4307 -b1ae 7 79 4307 -b1b5 1b 93 4307 -b1d0 13 97 4307 -b1e3 11 111 4307 -b1f4 a 113 4307 -b1fe 8 114 4307 -b206 7 99 4307 -b20d 4 100 4307 -b211 6 123 4307 -b217 2 152 4307 -b219 a 126 4307 -b223 6 127 4307 -b229 4 133 4307 -b22d 5 134 4307 -b232 5 135 4307 -b237 5 138 4307 -b23c d 140 4307 -b249 7 141 4307 -b250 5 142 4307 -b255 b 145 4307 -b260 7 147 4307 -b267 6 149 4307 -b26d 3 153 4307 -FUNC b270 24 0 _RTC_Initialize -FUNC b294 24 0 _RTC_Terminate -FUNC b2b8 5b 0 __heap_select -b2b8 6 70 5473 -b2be 23 143 5473 -b2e1 1b 144 5473 -b2fc d 145 5473 -b309 3 146 5473 -b30c 2 164 5473 -b30e 3 161 5473 -b311 2 164 5473 -FUNC b313 5a 4 _heap_init -b313 0 192 5473 -b313 20 199 5473 -b333 2 200 5473 -b335 1 240 5473 -b336 5 204 5473 -b33b a 206 5473 -b345 f 209 5473 -b354 c 211 5473 -b360 7 212 5473 -b367 2 213 5473 -b369 3 239 5473 -b36c 1 240 5473 -FUNC b36d 74 0 _heap_term -b36d 1 261 5473 -b36e c 264 5473 -b37a 1b 270 5473 -b395 f 273 5473 -b3a4 b 276 5473 -b3af d 278 5473 -b3bc 11 281 5473 -b3cd c 300 5473 -b3d9 7 301 5473 -b3e0 1 302 5473 -FUNC b3e1 6 0 _get_heap_handle -b3e1 0 320 5473 -b3e1 5 322 5473 -b3e6 1 323 5473 -FUNC b3e7 94 0 __security_init_cookie -b3e7 6 97 3689 -b3ed 21 114 3689 -b40e 7 116 3689 -b415 3 117 3689 -b418 a 127 3689 -b422 6 132 3689 -b428 8 135 3689 -b430 8 136 3689 -b438 8 137 3689 -b440 10 139 3689 -b450 2 144 3689 -b452 4 161 3689 -b456 7 163 3689 -b45d 4 166 3689 -b461 7 168 3689 -b468 6 172 3689 -b46e b 173 3689 -b479 2 175 3689 -FUNC b47b 8 4 _crt_debugger_hook -b47b 0 62 3966 -b47b 7 65 3966 -b482 1 66 3966 -FUNC b483 160 8 _flsbuf -b483 5 93 2041 -b488 c 104 2041 -b494 8 106 2041 -b49c b 107 2041 -b4a7 4 108 2041 -b4ab 8 109 2041 -b4b3 4 110 2041 -b4b7 b 111 2041 -b4c2 3 113 2041 -b4c5 6 124 2041 -b4cb b 126 2041 -b4d6 3 127 2041 -b4d9 8 128 2041 -b4e1 9 137 2041 -b4ea f 141 2041 -b4f9 25 151 2041 -b51e 7 153 2041 -b525 d 158 2041 -b532 5 162 2041 -b537 5 163 2041 -b53c 6 164 2041 -b542 7 166 2041 -b549 10 167 2041 -b559 2 168 2041 -b55b 6 131 2041 -b561 5 132 2041 -b566 2e 169 2041 -b594 12 171 2041 -b5a6 2 174 2041 -b5a8 8 179 2041 -b5b0 2 186 2041 -b5b2 3 187 2041 -b5b5 13 189 2041 -b5c8 5 201 2041 -b5cd 4 202 2041 -b5d1 5 203 2041 -b5d6 b 207 2041 -b5e1 2 212 2041 -FUNC b5e3 25 4 write_char -b5e3 0 2433 1163 -b5e3 a 2434 1163 -b5ed 2 2437 1163 -b5ef 12 2440 1163 -b601 3 2444 1163 -b604 1 2447 1163 -b605 2 2446 1163 -b607 1 2447 1163 -FUNC b608 25 c write_multi_char -b608 6 2498 1163 -b60e 2 2501 1163 -b610 e 2500 1163 -b61e 6 2501 1163 -b624 7 2499 1163 -b62b 2 2504 1163 -FUNC b62d 4f 4 write_string -b62d 0 2563 1163 -b62d 12 2564 1163 -b63f 6 2566 1163 -b645 2 2567 1163 -b647 11 2570 1163 -b658 6 2571 1163 -b65e a 2573 1163 -b668 a 2574 1163 -b672 9 2569 1163 -b67b 1 2579 1163 -FUNC b67c 910 10 _woutput_l -b67c 1b 975 1163 -b697 72 1031 1163 -b709 4 1036 1163 -b70d 2c 1073 1163 -b739 1a 1075 1163 -b753 8 1076 1163 -b75b 18 1131 1163 -b773 2 1171 1163 -b775 13 1173 1163 -b788 3 1174 1163 -b78b 5 1175 1163 -b790 1f 1179 1163 -b7af 4 1193 1163 -b7b3 5 1194 1163 -b7b8 4 1181 1163 -b7bc 5 1182 1163 -b7c1 4 1184 1163 -b7c5 5 1185 1163 -b7ca 7 1190 1163 -b7d1 5 1191 1163 -b7d6 3 1187 1163 -b7d9 5 1196 1163 -b7de 6 1200 1163 -b7e4 9 1206 1163 -b7ed b 1233 1163 -b7f8 4 1235 1163 -b7fc 3 1236 1163 -b7ff 5 1239 1163 -b804 10 1241 1163 -b814 5 1243 1163 -b819 4 1248 1163 -b81d 5 1249 1163 -b822 6 1253 1163 -b828 9 1259 1163 -b831 b 1284 1163 -b83c 4 1285 1163 -b840 5 1287 1163 -b845 10 1289 1163 -b855 5 1291 1163 -b85a 1b 1295 1163 -b875 7 1362 1163 -b87c 5 1363 1163 -b881 6 1301 1163 -b887 2 1303 1163 -b889 a 1304 1163 -b893 5 1306 1163 -b898 4 1308 1163 -b89c 5 1310 1163 -b8a1 4 1358 1163 -b8a5 5 1359 1163 -b8aa 10 1322 1163 -b8ba 3 1324 1163 -b8bd f 1325 1163 -b8cc d 1327 1163 -b8d9 3 1329 1163 -b8dc a 1330 1163 -b8e6 5 1332 1163 -b8eb 3c 1337 1163 -b927 4 1352 1163 -b92b 13 1166 1163 -b93e 5 1167 1163 -b943 32 1378 1163 -b975 d 1716 1163 -b982 4 1724 1163 -b986 18 1749 1163 -b99e c 1750 1163 -b9aa c 1381 1163 -b9b6 9 1383 1163 -b9bf 8 1564 1163 -b9c7 4 1565 1163 -b9cb d 1584 1163 -b9d8 3 1589 1163 -b9db 13 1610 1163 -b9ee 4 1611 1163 -b9f2 8 1612 1163 -b9fa 19 1614 1163 -ba13 13 1618 1163 -ba26 1 1620 1163 -ba27 9 1621 1163 -ba30 5 1622 1163 -ba35 1d 1378 1163 -ba52 9 1397 1163 -ba5b f 1415 1163 -ba6a 3 1420 1163 -ba6d 25 1430 1163 -ba92 3 1434 1163 -ba95 2 1436 1163 -ba97 4 1437 1163 -ba9b 6 1439 1163 -baa1 3 1440 1163 -baa4 5 1506 1163 -baa9 5 1523 1163 -baae e 1541 1163 -babc 6 1546 1163 -bac2 b 1548 1163 -bacd 7 1549 1163 -bad4 5 1550 1163 -bad9 4 1551 1163 -badd 5 1553 1163 -bae2 8 1543 1163 -baea 7 1544 1163 -baf1 5 1557 1163 -baf6 34 1378 1163 -bb2a d 1908 1163 -bb37 9 1910 1163 -bb40 8 1668 1163 -bb48 d 1688 1163 -bb55 6 1702 1163 -bb5b 7 1703 1163 -bb62 2 1704 1163 -bb64 5 1706 1163 -bb69 7 1708 1163 -bb70 5 1710 1163 -bb75 4 1864 1163 -bb79 7 1869 1163 -bb80 c 1933 1163 -bb8c 8 1939 1163 -bb94 5 1958 1163 -bb99 8 1751 1163 -bba1 9 1752 1163 -bbaa 5 1753 1163 -bbaf 3 1754 1163 -bbb2 9 1756 1163 -bbbb f 1759 1163 -bbca 2 1760 1163 -bbcc 13 1765 1163 -bbdf 7 1767 1163 -bbe6 e 1809 1163 -bbf4 27 1828 1163 -bc1b 14 1838 1163 -bc2f 15 1840 1163 -bc44 b 1844 1163 -bc4f 15 1846 1163 -bc64 5 1852 1163 -bc69 7 1853 1163 -bc70 4 1854 1163 -bc74 1 1857 1163 -bc75 5 1859 1163 -bc7a 7 1877 1163 -bc81 3 1887 1163 -bc84 2 1888 1163 -bc86 1a 1378 1163 -bca0 7 1892 1163 -bca7 11 1897 1163 -bcb8 10 1900 1163 -bcc8 3 1901 1163 -bccb 5 1903 1163 -bcd0 6 1961 1163 -bcd6 6 1987 1163 -bcdc 16 2026 1163 -bcf2 2 2045 1163 -bcf4 5 2051 1163 -bcf9 2 2071 1163 -bcfb 4 2074 1163 -bcff 6 2080 1163 -bd05 2 2099 1163 -bd07 5 2105 1163 -bd0c 10 2128 1163 -bd1c 7 2129 1163 -bd23 7 2130 1163 -bd2a c 2136 1163 -bd36 2 2142 1163 -bd38 6 2148 1163 -bd3e 7 2149 1163 -bd45 2 2150 1163 -bd47 4 2151 1163 -bd4b a 2152 1163 -bd55 3 2153 1163 -bd58 6 2157 1163 -bd5e 3 2158 1163 -bd61 6 2163 1163 -bd67 10 2165 1163 -bd77 10 2166 1163 -bd87 c 2168 1163 -bd93 3 2170 1163 -bd96 3 2172 1163 -bd99 2 2173 1163 -bd9b 8 2175 1163 -bda3 1 2176 1163 -bda4 19 2180 1163 -bdbd 9 2181 1163 -bdc6 1 2182 1163 -bdc7 2 2185 1163 -bdc9 4 1625 1163 -bdcd 8 1626 1163 -bdd5 c 1628 1163 -bde1 7 1629 1163 -bde8 2 1630 1163 -bdea 4 1629 1163 -bdee 8 1631 1163 -bdf6 a 2201 1163 -be00 7 2204 1163 -be07 6 2205 1163 -be0d 6 2207 1163 -be13 2 2208 1163 -be15 4 2210 1163 -be19 6 2212 1163 -be1f 2 2213 1163 -be21 4 2215 1163 -be25 6 2217 1163 -be2b 7 2218 1163 -be32 b 2224 1163 -be3d 6 2228 1163 -be43 11 2230 1163 -be54 11 2234 1163 -be65 d 2236 1163 -be72 f 2238 1163 -be81 a 2263 1163 -be8b 3 2267 1163 -be8e 3 2268 1163 -be91 3 2269 1163 -be94 1a 2276 1163 -beae 7 2278 1163 -beb5 e 2282 1163 -bec3 a 2283 1163 -becd 2 1690 1163 -becf 4 2279 1163 -bed3 2 2285 1163 -bed5 d 2286 1163 -bee2 c 2290 1163 -beee 11 2292 1163 -beff 6 2297 1163 -bf05 8 2298 1163 -bf0d 4 2299 1163 -bf11 1 2298 1163 -bf12 1b 1073 1163 -bf2d 17 1690 1163 -bf44 10 2376 1163 -bf54 38 2377 1163 -FUNC bf8c 97 10 _vswprintf_l -bf8c 7 125 1425 -bf93 24 130 1425 -bfb7 8 135 1425 -bfbf 29 155 1425 -bfe8 1d 166 1425 -c005 18 167 1425 -c01d 4 169 1425 -c021 2 183 1425 -FUNC c023 17 c _vswprintf -c023 0 192 1425 -c023 16 195 1425 -c039 1 197 1425 -FUNC c03a 5 10 __vswprintf_l -c03a 0 205 1425 -c03a 5 208 1425 -FUNC c03f 55 10 _vscwprintf_helper -c03f 7 430 1425 -c046 24 435 1425 -c06a 28 441 1425 -c092 2 443 1425 -FUNC c094 18 8 _vscwprintf -c094 0 449 1425 -c094 17 450 1425 -c0ab 1 451 1425 -FUNC c0ac 1a c _vscwprintf_l -c0ac 0 458 1425 -c0ac 19 459 1425 -c0c5 1 460 1425 -FUNC c0c6 18 8 _vscwprintf_p -c0c6 0 466 1425 -c0c6 17 467 1425 -c0dd 1 468 1425 -FUNC c0de 1a c _vscwprintf_p_l -c0de 0 475 1425 -c0de 19 476 1425 -c0f7 1 477 1425 -FUNC c0f8 14e 14 vfprintf_helper -c0f8 c 51 1462 -c104 5 54 1462 -c109 2e 56 1462 -c137 c 57 1462 -c143 3 60 1462 -c146 7 62 1462 -c14d 3 63 1462 -c150 b0 65 1462 -c200 5 66 1462 -c205 8 68 1462 -c20d 10 69 1462 -c21d a 70 1462 -c227 c 74 1462 -c233 3 78 1462 -c236 6 79 1462 -c23c a 75 1462 -FUNC c246 1e 10 _vfprintf_l -c246 0 87 1462 -c246 1d 88 1462 -c263 1 89 1462 -FUNC c264 1e 10 _vfprintf_s_l -c264 0 97 1462 -c264 1d 98 1462 -c281 1 99 1462 -FUNC c282 1e 10 _vfprintf_p_l -c282 0 107 1462 -c282 1d 108 1462 -c29f 1 109 1462 -FUNC c2a0 1c c vfprintf -c2a0 0 116 1462 -c2a0 1b 117 1462 -c2bb 1 118 1462 -FUNC c2bc 1c c vfprintf_s -c2bc 0 125 1462 -c2bc 1b 126 1462 -c2d7 1 127 1462 -FUNC c2d8 1c c _vfprintf_p -c2d8 0 134 1462 -c2d8 1b 135 1462 -c2f3 1 136 1462 -FUNC c2f4 25 4 write_char -c2f4 0 2433 1053 -c2f4 a 2434 1053 -c2fe 2 2437 1053 -c300 12 2440 1053 -c312 3 2444 1053 -c315 1 2447 1053 -c316 2 2446 1053 -c318 1 2447 1053 -FUNC c319 25 c write_multi_char -c319 6 2498 1053 -c31f 2 2501 1053 -c321 e 2500 1053 -c32f 6 2501 1053 -c335 7 2499 1053 -c33c 2 2504 1053 -FUNC c33e 4f 4 write_string -c33e 0 2563 1053 -c33e 12 2564 1053 -c350 6 2566 1053 -c356 2 2567 1053 -c358 11 2570 1053 -c369 6 2571 1053 -c36f a 2573 1053 -c379 a 2574 1053 -c383 9 2569 1053 -c38c 1 2579 1053 -FUNC c38d 91c 10 _woutput_s_l -c38d 29 975 1053 -c3b6 3 976 1053 -c3b9 f 1007 1053 -c3c8 24 2172 1053 -c3ec 2f 1031 1053 -c41b 18 1036 1053 -c433 2e 1073 1053 -c461 16 1078 1053 -c477 e 1079 1053 -c485 11 1124 1053 -c496 10 1131 1053 -c4a6 2 1171 1053 -c4a8 13 1173 1053 -c4bb 3 1174 1053 -c4be 5 1175 1053 -c4c3 1e 1179 1053 -c4e1 3 1193 1053 -c4e4 5 1194 1053 -c4e9 4 1181 1053 -c4ed 5 1182 1053 -c4f2 4 1184 1053 -c4f6 5 1185 1053 -c4fb 7 1190 1053 -c502 5 1191 1053 -c507 3 1187 1053 -c50a 5 1196 1053 -c50f 6 1200 1053 -c515 5 1206 1053 -c51a e 1233 1053 -c528 4 1235 1053 -c52c 3 1236 1053 -c52f 5 1239 1053 -c534 10 1241 1053 -c544 5 1243 1053 -c549 4 1248 1053 -c54d 5 1249 1053 -c552 6 1253 1053 -c558 5 1259 1053 -c55d e 1284 1053 -c56b 4 1285 1053 -c56f 5 1287 1053 -c574 10 1289 1053 -c584 5 1291 1053 -c589 1b 1295 1053 -c5a4 7 1362 1053 -c5ab 5 1363 1053 -c5b0 6 1301 1053 -c5b6 2 1303 1053 -c5b8 7 1304 1053 -c5bf 5 1306 1053 -c5c4 4 1308 1053 -c5c8 5 1310 1053 -c5cd 4 1358 1053 -c5d1 5 1359 1053 -c5d6 10 1322 1053 -c5e6 3 1324 1053 -c5e9 c 1325 1053 -c5f5 d 1327 1053 -c602 3 1329 1053 -c605 7 1330 1053 -c60c 5 1332 1053 -c611 3c 1337 1053 -c64d 4 1352 1053 -c651 14 1166 1053 -c665 5 1167 1053 -c66a 32 1378 1053 -c69c d 1716 1053 -c6a9 4 1724 1053 -c6ad 18 1749 1053 -c6c5 c 1750 1053 -c6d1 c 1381 1053 -c6dd 9 1383 1053 -c6e6 8 1564 1053 -c6ee 4 1565 1053 -c6f2 d 1584 1053 -c6ff 3 1589 1053 -c702 13 1610 1053 -c715 4 1611 1053 -c719 8 1612 1053 -c721 19 1614 1053 -c73a 13 1618 1053 -c74d 1 1620 1053 -c74e 9 1621 1053 -c757 5 1622 1053 -c75c 1e 1378 1053 -c77a 9 1397 1053 -c783 f 1415 1053 -c792 3 1420 1053 -c795 25 1430 1053 -c7ba 3 1434 1053 -c7bd 2 1436 1053 -c7bf 4 1437 1053 -c7c3 6 1439 1053 -c7c9 3 1440 1053 -c7cc 5 1506 1053 -c7d1 5 1523 1053 -c7d6 e 1541 1053 -c7e4 6 1546 1053 -c7ea b 1548 1053 -c7f5 7 1549 1053 -c7fc 5 1550 1053 -c801 4 1551 1053 -c805 5 1553 1053 -c80a 8 1543 1053 -c812 7 1544 1053 -c819 5 1557 1053 -c81e 34 1378 1053 -c852 9 1908 1053 -c85b 9 1910 1053 -c864 8 1668 1053 -c86c d 1688 1053 -c879 6 1702 1053 -c87f 7 1703 1053 -c886 2 1704 1053 -c888 5 1706 1053 -c88d 7 1708 1053 -c894 5 1710 1053 -c899 4 1864 1053 -c89d 7 1869 1053 -c8a4 c 1933 1053 -c8b0 8 1939 1053 -c8b8 5 1958 1053 -c8bd 8 1751 1053 -c8c5 9 1752 1053 -c8ce 5 1753 1053 -c8d3 3 1754 1053 -c8d6 9 1756 1053 -c8df f 1759 1053 -c8ee 3 1760 1053 -c8f1 15 1765 1053 -c906 7 1767 1053 -c90d e 1809 1053 -c91b 27 1828 1053 -c942 14 1838 1053 -c956 15 1840 1053 -c96b b 1844 1053 -c976 15 1846 1053 -c98b 5 1852 1053 -c990 7 1853 1053 -c997 4 1854 1053 -c99b 1 1857 1053 -c99c 5 1859 1053 -c9a1 3 1877 1053 -c9a4 7 1887 1053 -c9ab 2 1888 1053 -c9ad 1a 1378 1053 -c9c7 7 1892 1053 -c9ce 11 1897 1053 -c9df 10 1900 1053 -c9ef 3 1901 1053 -c9f2 5 1903 1053 -c9f7 6 1961 1053 -c9fd 6 1987 1053 -ca03 16 2026 1053 -ca19 2 2045 1053 -ca1b 5 2051 1053 -ca20 2 2071 1053 -ca22 4 2074 1053 -ca26 6 2080 1053 -ca2c 2 2099 1053 -ca2e 5 2105 1053 -ca33 10 2128 1053 -ca43 7 2129 1053 -ca4a 7 2130 1053 -ca51 c 2136 1053 -ca5d 2 2142 1053 -ca5f 6 2148 1053 -ca65 7 2149 1053 -ca6c 2 2150 1053 -ca6e 4 2151 1053 -ca72 a 2152 1053 -ca7c 3 2153 1053 -ca7f 6 2157 1053 -ca85 3 2158 1053 -ca88 6 2163 1053 -ca8e 10 2165 1053 -ca9e 10 2166 1053 -caae c 2168 1053 -caba 3 2170 1053 -cabd 3 2172 1053 -cac0 2 2173 1053 -cac2 8 2175 1053 -caca 1 2176 1053 -cacb 19 2180 1053 -cae4 9 2181 1053 -caed 1 2182 1053 -caee 2 2185 1053 -caf0 4 1625 1053 -caf4 8 1626 1053 -cafc c 1628 1053 -cb08 7 1629 1053 -cb0f 2 1630 1053 -cb11 4 1629 1053 -cb15 8 1631 1053 -cb1d a 2201 1053 -cb27 7 2204 1053 -cb2e 6 2205 1053 -cb34 6 2207 1053 -cb3a 2 2208 1053 -cb3c 4 2210 1053 -cb40 6 2212 1053 -cb46 2 2213 1053 -cb48 4 2215 1053 -cb4c 6 2217 1053 -cb52 7 2218 1053 -cb59 b 2224 1053 -cb64 6 2228 1053 -cb6a 11 2230 1053 -cb7b 11 2234 1053 -cb8c d 2236 1053 -cb99 f 2238 1053 -cba8 a 2263 1053 -cbb2 3 2267 1053 -cbb5 3 2268 1053 -cbb8 3 2269 1053 -cbbb 1a 2276 1053 -cbd5 7 2278 1053 -cbdc e 2282 1053 -cbea a 2283 1053 -cbf4 2 1690 1053 -cbf6 4 2279 1053 -cbfa 2 2285 1053 -cbfc d 2286 1053 -cc09 c 2290 1053 -cc15 11 2292 1053 -cc26 6 2297 1053 -cc2c 8 2298 1053 -cc34 16 2299 1053 -cc4a 7 1073 1053 -cc51 10 2310 1053 -cc61 10 2376 1053 -cc71 38 2377 1053 -FUNC cca9 154 10 _validate_param_reuseW -cca9 3 606 1108 -ccac 21 610 1108 -cccd 13 617 1108 -cce0 13 618 1108 -ccf3 10 620 1108 -cd03 4a 629 1108 -cd4d 54 632 1108 -cda1 2 633 1108 -cda3 1a 639 1108 -cdbd f 645 1108 -cdcc 23 626 1108 -cdef c 614 1108 -cdfb 2 646 1108 -FUNC cdfd 25 4 write_char -cdfd 0 2433 1108 -cdfd a 2434 1108 -ce07 2 2437 1108 -ce09 12 2440 1108 -ce1b 3 2444 1108 -ce1e 1 2447 1108 -ce1f 2 2446 1108 -ce21 1 2447 1108 -FUNC ce22 25 c write_multi_char -ce22 6 2498 1108 -ce28 2 2501 1108 -ce2a e 2500 1108 -ce38 6 2501 1108 -ce3e 7 2499 1108 -ce45 2 2504 1108 -FUNC ce47 4f 4 write_string -ce47 0 2563 1108 -ce47 12 2564 1108 -ce59 6 2566 1108 -ce5f 2 2567 1108 -ce61 11 2570 1108 -ce72 6 2571 1108 -ce78 a 2573 1108 -ce82 a 2574 1108 -ce8c 9 2569 1108 -ce95 1 2579 1108 -FUNC ce96 f60 10 _woutput_p_l -ce96 1b 975 1108 -ceb1 20 1013 1108 -ced1 28 2172 1108 -cef9 2c 1031 1108 -cf25 4 1036 1108 -cf29 3 1038 1108 -cf2c 3 1041 1108 -cf2f 3 1043 1108 -cf32 f 1046 1108 -cf41 44 1073 1108 -cf85 1a 1078 1108 -cf9f 11 1079 1108 -cfb0 16 1082 1108 -cfc6 6 1084 1108 -cfcc 1c 1087 1108 -cfe8 6 1089 1108 -cfee 16 1091 1108 -d004 7 1093 1108 -d00b 2 1095 1108 -d00d 7 1097 1108 -d014 6 1101 1108 -d01a c 1103 1108 -d026 7 1104 1108 -d02d f 1106 1108 -d03c 1d 1109 1108 -d059 8 1112 1108 -d061 5 1131 1108 -d066 3 1117 1108 -d069 7 1131 1108 -d070 9 1120 1108 -d079 b 1131 1108 -d084 24 1137 1108 -d0a8 5 1145 1108 -d0ad 2 1171 1108 -d0af 16 1173 1108 -d0c5 3 1174 1108 -d0c8 5 1175 1108 -d0cd 1f 1179 1108 -d0ec 7 1193 1108 -d0f3 5 1194 1108 -d0f8 7 1181 1108 -d0ff 5 1182 1108 -d104 7 1184 1108 -d10b 5 1185 1108 -d110 a 1190 1108 -d11a 5 1191 1108 -d11f 6 1187 1108 -d125 5 1196 1108 -d12a a 1200 1108 -d134 6 1203 1108 -d13a a 1206 1108 -d144 2 1209 1108 -d146 c 1211 1108 -d152 6 1212 1108 -d158 e 1214 1108 -d166 1c 1216 1108 -d182 8 1219 1108 -d18a 12 1221 1108 -d19c a 1274 1108 -d1a6 5 1275 1108 -d1ab c 1228 1108 -d1b7 b 1233 1108 -d1c2 7 1235 1108 -d1c9 3 1236 1108 -d1cc 5 1239 1108 -d1d1 10 1241 1108 -d1e1 5 1243 1108 -d1e6 4 1248 1108 -d1ea 5 1249 1108 -d1ef 6 1253 1108 -d1f5 6 1256 1108 -d1fb a 1259 1108 -d205 2 1262 1108 -d207 c 1264 1108 -d213 6 1265 1108 -d219 12 1267 1108 -d22b c 1280 1108 -d237 b 1284 1108 -d242 4 1285 1108 -d246 5 1287 1108 -d24b 22 1274 1108 -d26d 10 1289 1108 -d27d 5 1291 1108 -d282 1b 1295 1108 -d29d a 1362 1108 -d2a7 5 1363 1108 -d2ac 6 1301 1108 -d2b2 2 1303 1108 -d2b4 d 1304 1108 -d2c1 5 1306 1108 -d2c6 7 1308 1108 -d2cd 5 1310 1108 -d2d2 7 1358 1108 -d2d9 5 1359 1108 -d2de 10 1322 1108 -d2ee 3 1324 1108 -d2f1 12 1325 1108 -d303 d 1327 1108 -d310 3 1329 1108 -d313 d 1330 1108 -d320 5 1332 1108 -d325 24 1337 1108 -d349 4 1352 1108 -d34d 13 1166 1108 -d360 5 1167 1108 -d365 a 1342 1108 -d36f 5 1366 1108 -d374 36 1378 1108 -d3aa d 1716 1108 -d3b7 7 1724 1108 -d3be 14 1726 1108 -d3d2 9 1728 1108 -d3db 2a 1739 1108 -d405 b 1381 1108 -d410 9 1383 1108 -d419 b 1564 1108 -d424 7 1565 1108 -d42b d 1584 1108 -d438 b 1586 1108 -d443 a 1589 1108 -d44d 5 1592 1108 -d452 22 1378 1108 -d474 d 1394 1108 -d481 b 1397 1108 -d48c 2 1400 1108 -d48e 9 1402 1108 -d497 6 1404 1108 -d49d 24 1406 1108 -d4c1 5 1407 1108 -d4c6 d 1411 1108 -d4d3 c 1415 1108 -d4df 3 1420 1108 -d4e2 28 1430 1108 -d50a 7 1434 1108 -d511 2 1436 1108 -d513 7 1437 1108 -d51a 9 1439 1108 -d523 7 1440 1108 -d52a 5 1506 1108 -d52f 6 1520 1108 -d535 a 1523 1108 -d53f 2 1526 1108 -d541 9 1528 1108 -d54a 4 1530 1108 -d54e 6 1533 1108 -d554 c 1537 1108 -d560 b 1541 1108 -d56b 9 1546 1108 -d574 b 1548 1108 -d57f 7 1549 1108 -d586 5 1550 1108 -d58b 4 1551 1108 -d58f 5 1553 1108 -d594 8 1543 1108 -d59c 7 1544 1108 -d5a3 5 1557 1108 -d5a8 38 1378 1108 -d5e0 15 1908 1108 -d5f5 11 1910 1108 -d606 6 1665 1108 -d60c a 1668 1108 -d616 2 1671 1108 -d618 9 1673 1108 -d621 6 1675 1108 -d627 1f 1677 1108 -d646 5 1678 1108 -d64b c 1682 1108 -d657 d 1688 1108 -d664 9 1702 1108 -d66d 7 1703 1108 -d674 2 1704 1108 -d676 5 1706 1108 -d67b 7 1708 1108 -d682 5 1710 1108 -d687 7 1864 1108 -d68e 7 1869 1108 -d695 6 1910 1108 -d69b 9 1933 1108 -d6a4 a 1936 1108 -d6ae f 1939 1108 -d6bd 5 1942 1108 -d6c2 1a 1739 1108 -d6dc 21 1109 1108 -d6fd 17 1749 1108 -d714 9 1750 1108 -d71d 8 1751 1108 -d725 9 1752 1108 -d72e 5 1753 1108 -d733 3 1754 1108 -d736 a 1756 1108 -d740 f 1759 1108 -d74f 2 1760 1108 -d751 13 1765 1108 -d764 3 1767 1108 -d767 7 1806 1108 -d76e 9 1809 1108 -d777 2 1812 1108 -d779 a 1818 1108 -d783 6 1821 1108 -d789 16 1822 1108 -d79f 24 1828 1108 -d7c3 16 1838 1108 -d7d9 15 1840 1108 -d7ee b 1844 1108 -d7f9 15 1846 1108 -d80e 5 1852 1108 -d813 a 1853 1108 -d81d 4 1854 1108 -d821 1 1857 1108 -d822 5 1859 1108 -d827 7 1877 1108 -d82e 7 1887 1108 -d835 2 1888 1108 -d837 1a 1378 1108 -d851 7 1892 1108 -d858 14 1897 1108 -d86c 10 1900 1108 -d87c 3 1901 1108 -d87f 5 1903 1108 -d884 9 1944 1108 -d88d 28 1948 1108 -d8b5 5 1949 1108 -d8ba 7 1961 1108 -d8c1 4 1964 1108 -d8c5 6 1970 1108 -d8cb 9 1972 1108 -d8d4 28 1976 1108 -d8fc 5 1977 1108 -d901 c 1981 1108 -d90d 5 1987 1108 -d912 5 2019 1108 -d917 5 2020 1108 -d91c 6 2023 1108 -d922 b 2026 1108 -d92d 5 2029 1108 -d932 9 2031 1108 -d93b 4 2033 1108 -d93f 2 2036 1108 -d941 d 2040 1108 -d94e 5 2045 1108 -d953 6 2048 1108 -d959 b 2051 1108 -d964 5 2054 1108 -d969 9 2056 1108 -d972 4 2058 1108 -d976 2 2061 1108 -d978 d 2065 1108 -d985 2 2071 1108 -d987 5 2074 1108 -d98c 6 2077 1108 -d992 a 2080 1108 -d99c 2 2083 1108 -d99e 9 2085 1108 -d9a7 6 2087 1108 -d9ad 17 2089 1108 -d9c4 15 2114 1108 -d9d9 5 2115 1108 -d9de d 2094 1108 -d9eb 2 2099 1108 -d9ed 6 2102 1108 -d9f3 a 2105 1108 -d9fd 2 2108 1108 -d9ff 9 2110 1108 -da08 6 2112 1108 -da0e e 2119 1108 -da1c f 2128 1108 -da2b 7 2129 1108 -da32 c 2130 1108 -da3e c 2136 1108 -da4a 4 2142 1108 -da4e 6 2148 1108 -da54 7 2149 1108 -da5b 2 2150 1108 -da5d 1a 2114 1108 -da77 3 2151 1108 -da7a 10 2152 1108 -da8a 3 2153 1108 -da8d 7 2157 1108 -da94 3 2158 1108 -da97 6 2163 1108 -da9d 11 2165 1108 -daae 12 2166 1108 -dac0 d 2168 1108 -dacd 3 2170 1108 -dad0 b 2173 1108 -dadb 8 2175 1108 -dae3 1 2176 1108 -dae4 20 2180 1108 -db04 9 2181 1108 -db0d 1 2182 1108 -db0e 5 2185 1108 -db13 9 1594 1108 -db1c 9 1596 1108 -db25 c 1603 1108 -db31 c 1610 1108 -db3d 4 1611 1108 -db41 8 1612 1108 -db49 11 1614 1108 -db5a 13 1618 1108 -db6d 1 1620 1108 -db6e 9 1621 1108 -db77 2 1622 1108 -db79 19 1598 1108 -db92 5 1625 1108 -db97 8 1626 1108 -db9f c 1628 1108 -dbab 6 1629 1108 -dbb1 2 1630 1108 -dbb3 4 1629 1108 -dbb7 8 1631 1108 -dbbf 10 2189 1108 -dbcf a 2201 1108 -dbd9 a 2204 1108 -dbe3 6 2205 1108 -dbe9 6 2207 1108 -dbef 2 2208 1108 -dbf1 4 2210 1108 -dbf5 6 2212 1108 -dbfb 2 2213 1108 -dbfd 4 2215 1108 -dc01 6 2217 1108 -dc07 7 2218 1108 -dc0e b 2224 1108 -dc19 9 2228 1108 -dc22 11 2230 1108 -dc33 11 2234 1108 -dc44 13 2236 1108 -dc57 f 2238 1108 -dc66 a 2263 1108 -dc70 3 2267 1108 -dc73 3 2268 1108 -dc76 3 2269 1108 -dc79 1a 2276 1108 -dc93 7 2278 1108 -dc9a e 2282 1108 -dca8 a 2283 1108 -dcb2 2 2310 1108 -dcb4 4 2279 1108 -dcb8 2 2285 1108 -dcba d 2286 1108 -dcc7 f 2290 1108 -dcd6 11 2292 1108 -dce7 6 2297 1108 -dced 8 2298 1108 -dcf5 4 2299 1108 -dcf9 1 2298 1108 -dcfa 12 1073 1108 -dd0c c 2310 1108 -dd18 c 2314 1108 -dd24 10 2319 1108 -dd34 16 2321 1108 -dd4a 2 2360 1108 -dd4c 9 2361 1108 -dd55 6 2362 1108 -dd5b 2 2344 1108 -dd5d 3 2345 1108 -dd60 2 2346 1108 -dd62 2 2324 1108 -dd64 6 2325 1108 -dd6a 9 2319 1108 -dd73 13 1043 1108 -dd86 17 1121 1108 -dd9d f 1818 1108 -ddac 10 2376 1108 -ddbc 3a 2377 1108 -FUNC ddf6 1f 0 _initp_misc_cfltcvt_tab -ddf6 2 54 4074 -ddf8 8 56 4074 -de00 14 58 4074 -de14 1 60 4074 -FUNC de20 29 4 _ValidateImageBase -de20 0 44 3159 -de20 b 50 3159 -de2b 2 52 3159 -de2d 1 68 3159 -de2e 5 55 3159 -de33 6 56 3159 -de39 2 58 3159 -de3b d 62 3159 -de48 1 68 3159 -FUNC de50 42 8 _FindPESection -de50 0 92 3159 -de50 9 99 3159 -de59 19 108 3159 -de72 10 111 3159 -de82 a 108 3159 -de8c 5 123 3159 -de91 1 124 3159 -FUNC dea0 bb 4 _IsNonwritableInCurrentImage -dea0 33 149 3159 -ded3 7 156 3159 -deda f 164 3159 -dee9 2 166 3159 -deeb 8 174 3159 -def3 e 175 3159 -df01 2 176 3159 -df03 2 178 3159 -df05 12 185 3159 -df17 12 195 3159 -df29 17 187 3159 -df40 9 193 3159 -df49 12 195 3159 -FUNC df5b 19 4 _initp_misc_winsig -df5b 0 57 2785 -df5b 9 58 2785 -df64 5 59 2785 -df69 5 60 2785 -df6e 5 61 2785 -df73 1 62 2785 -FUNC df74 9b 4 ctrlevent_capture -df74 c 89 2785 -df80 9 94 2785 -df89 3 95 2785 -df8c 5 102 2785 -df91 5 103 2785 -df96 e 104 2785 -dfa4 7 105 2785 -dfab 2 107 2785 -dfad 5 108 2785 -dfb2 e 109 2785 -dfc0 7 110 2785 -dfc7 1 109 2785 -dfc8 9 113 2785 -dfd1 7 117 2785 -dfd8 c 120 2785 -dfe4 5 124 2785 -dfe9 4 128 2785 -dfed 2 120 2785 -dfef 8 121 2785 -dff7 6 130 2785 -dffd 7 131 2785 -e004 3 138 2785 -e007 8 139 2785 -FUNC e00f 34 4 siglookup -e00f 0 634 2785 -e00f b 635 2785 -e01a 15 645 2785 -e02f f 649 2785 -e03e 2 653 2785 -e040 2 658 2785 -e042 1 659 2785 -FUNC e043 d 0 __get_sigabrt -e043 0 676 2785 -e043 c 677 2785 -e04f 1 678 2785 -FUNC e050 9 0 __fpecode -e050 0 699 2785 -e050 8 700 2785 -e058 1 701 2785 -FUNC e059 9 0 __pxcptinfoptrs -e059 0 721 2785 -e059 8 722 2785 -e061 1 723 2785 -FUNC e062 23d 8 signal -e062 c 219 2785 -e06e 4 224 2785 -e072 3 230 2785 -e075 3 244 2785 -e078 12 230 2785 -e08a 2f 244 2785 -e0b9 13 327 2785 -e0cc 7 334 2785 -e0d3 8 335 2785 -e0db a 342 2785 -e0e5 17 346 2785 -e0fc 10 352 2785 -e10c 13 367 2785 -e11f 3 380 2785 -e122 e 382 2785 -e130 3 395 2785 -e133 17 401 2785 -e14a 5 390 2785 -e14f 5 401 2785 -e154 8 246 2785 -e15c 4 247 2785 -e160 12 254 2785 -e172 14 257 2785 -e186 6 259 2785 -e18c 2 261 2785 -e18e f 263 2785 -e19d a 264 2785 -e1a7 18 268 2785 -e1bf f 288 2785 -e1ce 4 289 2785 -e1d2 b 291 2785 -e1dd 2 293 2785 -e1df f 279 2785 -e1ee 4 280 2785 -e1f2 b 282 2785 -e1fd 2 284 2785 -e1ff f 296 2785 -e20e 4 297 2785 -e212 b 299 2785 -e21d 2 301 2785 -e21f f 271 2785 -e22e 4 272 2785 -e232 c 274 2785 -e23e c 305 2785 -e24a 9 309 2785 -e253 4 407 2785 -e257 3 305 2785 -e25a 9 306 2785 -e263 19 410 2785 -e27c 1a 419 2785 -e296 3 417 2785 -e299 6 423 2785 -FUNC e29f 1b0 4 raise -e29f c 452 2785 -e2ab 5 459 2785 -e2b0 3 460 2785 -e2b3 1f 462 2785 -e2d2 a 488 2785 -e2dc 4 489 2785 -e2e0 8 490 2785 -e2e8 a 465 2785 -e2f2 2 467 2785 -e2f4 11 492 2785 -e305 2 493 2785 -e307 f 462 2785 -e316 1c 500 2785 -e332 a 476 2785 -e33c 2 478 2785 -e33e a 470 2785 -e348 2 472 2785 -e34a a 481 2785 -e354 7 482 2785 -e35b a 502 2785 -e365 2 510 2785 -e367 4 509 2785 -e36b 6 510 2785 -e371 5 515 2785 -e376 7 520 2785 -e37d 5 527 2785 -e382 7 528 2785 -e389 5 530 2785 -e38e f 543 2785 -e39d 6 544 2785 -e3a3 3 545 2785 -e3a6 5 551 2785 -e3ab 6 552 2785 -e3b1 7 553 2785 -e3b8 5 561 2785 -e3bd 1c 568 2785 -e3d9 d 571 2785 -e3e6 5 568 2785 -e3eb 7 574 2785 -e3f2 c 577 2785 -e3fe 5 582 2785 -e403 8 588 2785 -e40b 2 589 2785 -e40d 6 577 2785 -e413 6 578 2785 -e419 9 579 2785 -e422 5 590 2785 -e427 f 597 2785 -e436 6 598 2785 -e43c 5 603 2785 -e441 6 604 2785 -e447 2 607 2785 -e449 6 608 2785 -FUNC e44f a 4 _initp_misc_rand_s -e44f 0 58 3075 -e44f 9 59 3075 -e458 1 60 3075 -FUNC e459 104 4 rand_s -e459 3 66 3075 -e45c b 67 3075 -e467 2b 68 3075 -e492 c 71 3075 -e49e d 77 3075 -e4ab 4 78 3075 -e4af 1e 80 3075 -e4cd e 83 3075 -e4db 4 84 3075 -e4df 2f 86 3075 -e50e 9 88 3075 -e517 5 89 3075 -e51c 16 94 3075 -e532 7 103 3075 -e539 9 107 3075 -e542 b 109 3075 -e54d 9 110 3075 -e556 6 112 3075 -e55c 1 113 3075 -FUNC e55d 15a 14 __getlocaleinfo -e55d 1d 70 3523 -e57a 7 76 3523 -e581 87 109 3523 -e608 13 103 3523 -e61b 5 114 3523 -e620 7 115 3523 -e627 3 141 3523 -e62a 12 142 3523 -e63c 20 106 3523 -e65c 5 108 3523 -e661 7 109 3523 -e668 4 111 3523 -e66c 5 118 3523 -e671 1a 126 3523 -e68b 2 127 3523 -e68d 2 129 3523 -e68f 10 134 3523 -e69f 16 135 3523 -e6b5 2 139 3523 -FUNC e6b7 a 4 _initp_misc_purevirt -e6b7 0 166 3523 -e6b7 9 167 3523 -e6c0 1 168 3523 -FUNC e6c1 a 4 _initp_misc_initcrit -e6c1 0 47 3609 -e6c1 9 48 3609 -e6ca 1 49 3609 -FUNC e6cb 10 8 __crtInitCritSecNoSpinCount -e6cb 0 76 3609 -e6cb a 77 3609 -e6d5 3 78 3609 -e6d8 3 79 3609 -FUNC e6db c5 8 __crtInitCritSecAndSpinCount -e6db c 109 3609 -e6e7 5 111 3609 -e6ec e 112 3609 -e6fa 4 114 3609 -e6fe 1b 120 3609 -e719 4 121 3609 -e71d 2 129 3609 -e71f b 130 3609 -e72a 4 131 3609 -e72e e 134 3609 -e73c 4 136 3609 -e740 5 149 3609 -e745 c 152 3609 -e751 3 155 3609 -e754 b 161 3609 -e75f 2 162 3609 -e761 1a 163 3609 -e77b 9 170 3609 -e784 8 171 3609 -e78c 4 173 3609 -e790 7 174 3609 -e797 3 176 3609 -e79a 6 177 3609 -FUNC e7a0 5e 4 _isatty -e7a0 0 37 4912 -e7a0 16 44 4912 -e7b6 2 59 4912 -e7b8 29 45 4912 -e7e1 1 59 4912 -e7e2 1b 58 4912 -e7fd 1 59 4912 -FUNC e7fe 2f 0 CPtoLCID -e7fe 0 329 4615 -e7fe 14 330 4615 -e812 2 345 4615 -e814 1 346 4615 -e815 5 342 4615 -e81a 1 346 4615 -e81b 5 339 4615 -e820 1 346 4615 -e821 5 336 4615 -e826 1 346 4615 -e827 5 333 4615 -e82c 1 346 4615 -FUNC e82d 55 0 setSBCS -e82d 4 363 4615 -e831 14 368 4615 -e845 3 371 4615 -e848 3 374 4615 -e84b 3 376 4615 -e84e 8 379 4615 -e856 a 381 4615 -e860 9 382 4615 -e869 b 384 4615 -e874 d 385 4615 -e881 1 386 4615 -FUNC e882 18a 0 setSBUpLow -e882 1d 402 4615 -e89f f 412 4615 -e8ae d 415 4615 -e8bb c 416 4615 -e8c7 e 420 4615 -e8d5 3 419 4615 -e8d8 28 421 4615 -e900 1d 427 4615 -e91d 23 432 4615 -e940 25 437 4615 -e965 2 442 4615 -e967 a 443 4615 -e971 5 445 4615 -e976 9 446 4615 -e97f 5 448 4615 -e984 5 450 4615 -e989 e 451 4615 -e997 2 453 4615 -e999 8 454 4615 -e9a1 5 442 4615 -e9a6 8 456 4615 -e9ae 2c 472 4615 -e9da 5 466 4615 -e9df 5 468 4615 -e9e4 7 469 4615 -e9eb 2 471 4615 -e9ed 3 472 4615 -e9f0 5 460 4615 -e9f5 17 474 4615 -FUNC ea0c a4 0 __updatetmbcinfo -ea0c c 496 4615 -ea18 7 499 4615 -ea1f 10 500 4615 -ea2f 3 533 4615 -ea32 4 536 4615 -ea36 8 538 4615 -ea3e 2 541 4615 -ea40 6 542 4615 -ea46 8 501 4615 -ea4e 4 503 4615 -ea52 e 506 4615 -ea60 17 512 4615 -ea77 7 517 4615 -ea7e 11 524 4615 -ea8f 7 525 4615 -ea96 11 528 4615 -eaa7 9 530 4615 -FUNC eab0 7a 0 getSystemCP -eab0 7 282 4615 -eab7 b 284 4615 -eac2 b 289 4615 -eacd a 291 4615 -ead7 14 292 4615 -eaeb 5 295 4615 -eaf0 a 297 4615 -eafa 8 298 4615 -eb02 5 302 4615 -eb07 12 305 4615 -eb19 f 308 4615 -eb28 2 309 4615 -FUNC eb2a 1d9 8 _setmbcp_nolock -eb2a 15 686 4615 -eb3f b 693 4615 -eb4a 9 696 4615 -eb53 7 698 4615 -eb5a 7 699 4615 -eb61 3 703 4615 -eb64 2 705 4615 -eb66 19 708 4615 -eb7f 2a 743 4615 -eba9 13 751 4615 -ebbc f 756 4615 -ebcb 15 761 4615 -ebe0 17 764 4615 -ebf7 c 766 4615 -ec03 f 712 4615 -ec12 15 715 4615 -ec27 9 720 4615 -ec30 8 723 4615 -ec38 12 724 4615 -ec4a 9 723 4615 -ec53 5 720 4615 -ec58 12 715 4615 -ec6a 20 731 4615 -ec8a d 733 4615 -ec97 7 736 4615 -ec9e 5 737 4615 -eca3 6 767 4615 -eca9 10 766 4615 -ecb9 8 771 4615 -ecc1 7 772 4615 -ecc8 b 775 4615 -ecd3 3 778 4615 -ecd6 2 780 4615 -ecd8 3 782 4615 -ecdb 8 785 4615 -ece3 2 789 4615 -ece5 6 794 4615 -eceb 6 797 4615 -ecf1 3 746 4615 -ecf4 f 802 4615 -FUNC ed03 3c 0 _getmbcp -ed03 6 819 4615 -ed09 a 821 4615 -ed13 9 822 4615 -ed1c 10 823 4615 -ed2c 2 826 4615 -ed2e f 825 4615 -ed3d 2 826 4615 -FUNC ed3f 19a 4 _setmbcp -ed3f c 574 4615 -ed4b 4 575 4615 -ed4f a 579 4615 -ed59 5 581 4615 -ed5e 3 582 4615 -ed61 b 585 4615 -ed6c 9 587 4615 -ed75 d 593 4615 -ed82 8 595 4615 -ed8a c 597 4615 -ed96 3 607 4615 -ed99 16 612 4615 -edaf 1a 614 4615 -edc9 7 615 4615 -edd0 3 619 4615 -edd3 9 620 4615 -eddc 17 622 4615 -edf3 8 624 4615 -edfb 4 625 4615 -edff 8 630 4615 -ee07 8 631 4615 -ee0f 8 632 4615 -ee17 a 633 4615 -ee21 d 634 4615 -ee2e 3 633 4615 -ee31 c 635 4615 -ee3d a 636 4615 -ee47 3 635 4615 -ee4a c 637 4615 -ee56 d 638 4615 -ee63 3 637 4615 -ee66 1c 640 4615 -ee82 7 641 4615 -ee89 6 645 4615 -ee8f 3 646 4615 -ee92 e 648 4615 -eea0 9 650 4615 -eea9 2 653 4615 -eeab 5 654 4615 -eeb0 8 660 4615 -eeb8 7 661 4615 -eebf b 662 4615 -eeca 2 668 4615 -eecc 4 673 4615 -eed0 3 682 4615 -eed3 6 683 4615 -FUNC eed9 1e 0 __initmbctable -eed9 0 843 4615 -eed9 9 853 4615 -eee2 8 854 4615 -eeea a 855 4615 -eef4 2 860 4615 -eef6 1 861 4615 -FUNC eef7 6 0 ___setlc_active_func -eef7 0 90 2995 -eef7 5 91 2995 -eefc 1 92 2995 -FUNC eefd 6 0 ___unguarded_readlc_active_add_func -eefd 0 104 2995 -eefd 5 105 2995 -ef02 1 106 2995 -FUNC ef03 140 4 __freetlocinfo -ef03 3 144 2995 -ef06 26 152 2995 -ef2c e 155 2995 -ef3a 6 157 2995 -ef40 d 158 2995 -ef4d e 162 2995 -ef5b 6 164 2995 -ef61 d 165 2995 -ef6e b 168 2995 -ef79 d 169 2995 -ef86 e 176 2995 -ef94 11 178 2995 -efa5 13 179 2995 -efb8 e 180 2995 -efc6 e 181 2995 -efd4 17 188 2995 -efeb 6 190 2995 -eff1 9 191 2995 -effa 6 194 2995 -f000 13 197 2995 -f013 7 199 2995 -f01a 10 205 2995 -f02a d 207 2995 -f037 b 214 2995 -f042 1 215 2995 -FUNC f043 86 4 __addlocaleref -f043 3 225 2995 -f046 e 227 2995 -f054 a 228 2995 -f05e 3 229 2995 -f061 a 231 2995 -f06b 3 232 2995 -f06e a 234 2995 -f078 3 235 2995 -f07b a 237 2995 -f085 3 238 2995 -f088 6 240 2995 -f08e f 242 2995 -f09d 3 243 2995 -f0a0 d 245 2995 -f0ad 9 246 2995 -f0b6 12 248 2995 -f0c8 1 249 2995 -FUNC f0c9 8c 4 __removelocaleref -f0c9 1 259 2995 -f0ca b 261 2995 -f0d5 9 263 2995 -f0de a 265 2995 -f0e8 3 266 2995 -f0eb a 268 2995 -f0f5 3 269 2995 -f0f8 a 271 2995 -f102 3 272 2995 -f105 a 274 2995 -f10f 3 275 2995 -f112 6 277 2995 -f118 f 279 2995 -f127 3 280 2995 -f12a d 282 2995 -f137 9 283 2995 -f140 11 285 2995 -f151 3 287 2995 -f154 1 288 2995 -FUNC f155 24 0 _copytlocinfo_nolock -f155 3 302 2995 -f158 d 303 2995 -f165 7 304 2995 -f16c 3 305 2995 -f16f 9 306 2995 -f178 1 308 2995 -FUNC f179 3e 0 _updatetlocinfoEx_nolock -f179 0 321 2995 -f179 9 324 2995 -f182 2 326 2995 -f184 4 327 2995 -f188 8 334 2995 -f190 5 339 2995 -f195 6 341 2995 -f19b e 350 2995 -f1a9 7 351 2995 -f1b0 3 355 2995 -f1b3 1 356 2995 -f1b4 2 325 2995 -f1b6 1 356 2995 -FUNC f1b7 76 0 __updatetlocinfo -f1b7 c 382 2995 -f1c3 7 384 2995 -f1ca 10 386 2995 -f1da 8 397 2995 -f1e2 4 399 2995 -f1e6 8 401 2995 -f1ee 2 404 2995 -f1f0 6 405 2995 -f1f6 8 387 2995 -f1fe 4 388 2995 -f202 11 390 2995 -f213 e 392 2995 -f221 8 394 2995 -f229 4 395 2995 -FUNC f22d 66 4 _configthreadlocale -f22d 2 420 2995 -f22f 5 434 2995 -f234 10 435 2995 -f244 19 437 2995 -f25d 1d 456 2995 -f27a 3 444 2995 -f27d 2 445 2995 -f27f 6 440 2995 -f285 2 441 2995 -f287 7 452 2995 -f28e 4 460 2995 -f292 1 462 2995 -FUNC f293 53 0 sync_legacy_variables_lk -f293 0 489 2995 -f293 e 490 2995 -f2a1 9 491 2995 -f2aa c 492 2995 -f2b6 c 493 2995 -f2c2 c 494 2995 -f2ce c 495 2995 -f2da b 496 2995 -f2e5 1 497 2995 -FUNC f2e6 96 4 _free_locale -f2e6 c 517 2995 -f2f2 9 518 2995 -f2fb 1c 522 2995 -f317 7 524 2995 -f31e 4 526 2995 -f322 8 534 2995 -f32a 3 535 2995 -f32d 8 537 2995 -f335 11 540 2995 -f346 7 541 2995 -f34d c 543 2995 -f359 7 552 2995 -f360 3 553 2995 -f363 7 554 2995 -f36a 6 556 2995 -f370 3 543 2995 -f373 9 545 2995 -FUNC f37c 5 4 __free_locale -f37c 0 562 2995 -f37c 5 563 2995 -FUNC f381 88 0 _get_current_locale -f381 c 687 2995 -f38d 7 689 2995 -f394 14 691 2995 -f3a8 b 693 2995 -f3b3 4 694 2995 -f3b7 5 697 2995 -f3bc 5 698 2995 -f3c1 5 706 2995 -f3c6 6 707 2995 -f3cc 8 708 2995 -f3d4 4 709 2995 -f3d8 8 710 2995 -f3e0 c 712 2995 -f3ec 9 715 2995 -f3f5 2 717 2995 -f3f7 6 718 2995 -f3fd 3 712 2995 -f400 9 713 2995 -FUNC f409 5 0 __get_current_locale -f409 0 722 2995 -f409 5 723 2995 -FUNC f40e 3 4 __init_dummy -f40e 0 1283 2995 -f40e 2 1284 2995 -f410 1 1285 2995 -FUNC f411 3e c _strcats -f411 2 1288 2995 -f413 f 1294 2995 -f422 26 1296 2995 -f448 6 1294 2995 -f44e 1 1299 2995 -FUNC f44f 129 8 __lc_strtolc -f44f 6 1302 2995 -f455 11 1307 2995 -f466 c 1309 2995 -f472 7 1310 2995 -f479 b 1313 2995 -f484 25 1315 2995 -f4a9 6 1317 2995 -f4af 2 1318 2995 -f4b1 15 1323 2995 -f4c6 1d 1328 2995 -f4e3 9 1329 2995 -f4ec 10 1331 2995 -f4fc c 1332 2995 -f508 14 1334 2995 -f51c 28 1335 2995 -f544 9 1340 2995 -f54d b 1348 2995 -f558 18 1350 2995 -f570 6 1338 2995 -f576 2 1353 2995 -FUNC f578 6b c __lc_lctostr -f578 5 1356 2995 -f57d 25 1357 2995 -f5a2 7 1358 2995 -f5a9 16 1359 2995 -f5bf c 1360 2995 -f5cb 16 1361 2995 -f5e1 2 1362 2995 -FUNC f5e3 171 0 _setlocale_get_all -f5e3 4 1124 2995 -f5e7 3 1126 2995 -f5ea 1d 1134 2995 -f607 3 1137 2995 -f60a 3 1139 2995 -f60d 2 1140 2995 -f60f 2f 1143 2995 -f63e 26 1146 2995 -f664 10 1147 2995 -f674 5 1148 2995 -f679 4 1141 2995 -f67d 2f 1143 2995 -f6ac a 1144 2995 -f6b6 8 1152 2995 -f6be 14 1154 2995 -f6d2 9 1156 2995 -f6db e 1159 2995 -f6e9 9 1161 2995 -f6f2 7 1165 2995 -f6f9 7 1166 2995 -f700 9 1168 2995 -f709 15 1170 2995 -f71e 9 1172 2995 -f727 e 1175 2995 -f735 9 1177 2995 -f73e 12 1183 2995 -f750 4 1187 2995 -FUNC f754 1d4 18 _expandlocale -f754 15 1198 2995 -f769 41 1230 2995 -f7aa 14 1211 2995 -f7be b 1216 2995 -f7c9 26 1219 2995 -f7ef 4 1220 2995 -f7f3 3 1222 2995 -f7f6 4 1223 2995 -f7fa 4 1224 2995 -f7fe 7 1226 2995 -f805 2 1228 2995 -f807 8 1230 2995 -f80f 6 1234 2995 -f815 2f 1236 2995 -f844 4 1241 2995 -f848 e 1243 2995 -f856 6 1244 2995 -f85c 10 1246 2995 -f86c 6 1247 2995 -f872 9 1251 2995 -f87b 10 1253 2995 -f88b a 1255 2995 -f895 2 1260 2995 -f897 8 1263 2995 -f89f 26 1267 2995 -f8c5 5 1271 2995 -f8ca e 1272 2995 -f8d8 5 1273 2995 -f8dd 10 1274 2995 -f8ed 22 1276 2995 -f90f 5 1277 2995 -f914 2 1212 2995 -f916 12 1278 2995 -FUNC f928 2f6 4 _setlocale_set_cat -f928 19 980 2995 -f941 5 993 2995 -f946 2f 998 2995 -f975 7 1000 2995 -f97c 19 1002 2995 -f995 6 1004 2995 -f99b c 1007 2995 -f9a7 16 1008 2995 -f9bd 2 1010 2995 -f9bf 3 1013 2995 -f9c2 d 1014 2995 -f9cf 2c 1015 2995 -f9fb 3 1016 2995 -f9fe 39 1019 2995 -fa37 6 1020 2995 -fa3d 15 1021 2995 -fa52 17 1022 2995 -fa69 a 1029 2995 -fa73 6 1031 2995 -fa79 18 1037 2995 -fa91 7 1039 2995 -fa98 8 1053 2995 -faa0 14 1054 2995 -fab4 18 1055 2995 -facc 2 1039 2995 -face a 1044 2995 -fad8 d 1046 2995 -fae5 b 1047 2995 -faf0 9 1058 2995 -faf9 26 1066 2995 -fb1f 2 1069 2995 -fb21 10 1071 2995 -fb31 22 1072 2995 -fb53 2 1081 2995 -fb55 4 1082 2995 -fb59 5 1083 2995 -fb5e 9 1085 2995 -fb67 6 1088 2995 -fb6d 9 1089 2995 -fb76 12 1091 2995 -fb88 6 1094 2995 -fb8e e 1095 2995 -fb9c f 1096 2995 -fbab 9 1097 2995 -fbb4 5 1099 2995 -fbb9 24 1106 2995 -fbdd 7 1109 2995 -fbe4 8 1110 2995 -fbec 6 1111 2995 -fbf2 18 1116 2995 -fc0a 3 1118 2995 -fc0d 11 1119 2995 -FUNC fc1e 1ce 4 _setlocale_nolock -fc1e 1a 873 2995 -fc38 7 877 2995 -fc3f 5 904 2995 -fc44 17 880 2995 -fc5b 5 882 2995 -fc60 12 888 2995 -fc72 1d 890 2995 -fc8f 2 894 2995 -fc91 d 898 2995 -fc9e 1e 900 2995 -fcbc 11 904 2995 -fccd 1d 907 2995 -fcea e 904 2995 -fcf8 1b 913 2995 -fd13 6 916 2995 -fd19 24 918 2995 -fd3d 18 922 2995 -fd55 3 923 2995 -fd58 7 925 2995 -fd5f 1 926 2995 -fd60 9 928 2995 -fd69 c 930 2995 -fd75 4 901 2995 -fd79 19 935 2995 -fd92 3 937 2995 -fd95 4 939 2995 -fd99 11 941 2995 -fdaa c 943 2995 -fdb6 2 947 2995 -fdb8 3 949 2995 -fdbb 2 952 2995 -fdbd 3 953 2995 -fdc0 9 937 2995 -fdc9 5 956 2995 -fdce 2 961 2995 -fdd0 3 962 2995 -fdd3 2 965 2995 -fdd5 5 966 2995 -fdda 12 972 2995 -FUNC fdec f3 8 _create_locale -fdec 0 605 2995 -fdec 10 609 2995 -fdfc 13 612 2995 -fe0f b 614 2995 -fe1a 4 610 2995 -fe1e c 658 2995 -fe2a 8 617 2995 -fe32 7 619 2995 -fe39 2 621 2995 -fe3b 14 623 2995 -fe4f 7 625 2995 -fe56 7 626 2995 -fe5d 2 628 2995 -fe5f c 630 2995 -fe6b 14 632 2995 -fe7f 7 634 2995 -fe86 7 635 2995 -fe8d 9 637 2995 -fe96 2 640 2995 -fe98 13 642 2995 -feab 8 644 2995 -feb3 7 645 2995 -feba 7 646 2995 -fec1 9 647 2995 -feca 2 648 2995 -fecc 2 650 2995 -fece 5 652 2995 -fed3 5 653 2995 -fed8 7 657 2995 -FUNC fedf 5 8 __create_locale -fedf 0 665 2995 -fedf 5 666 2995 -FUNC fee4 170 8 setlocale -fee4 c 791 2995 -fef0 5 792 2995 -fef5 25 797 2995 -ff1a a 799 2995 -ff24 5 801 2995 -ff29 4 806 2995 -ff2d 3 807 2995 -ff30 1b 808 2995 -ff4b 8 818 2995 -ff53 7 819 2995 -ff5a a 820 2995 -ff64 8 822 2995 -ff6c 19 826 2995 -ff85 18 834 2995 -ff9d a 836 2995 -ffa7 8 839 2995 -ffaf 7 840 2995 -ffb6 a 841 2995 -ffc0 7 842 2995 -ffc7 f 846 2995 -ffd6 c 847 2995 -ffe2 18 849 2995 -fffa 5 850 2995 -ffff b 852 2995 -1000a 8 822 2995 -10012 9 823 2995 -1001b 3 852 2995 -1001e 9 853 2995 -10027 2 855 2995 -10029 6 856 2995 -1002f 8 857 2995 -10037 c 860 2995 -10043 3 865 2995 -10046 6 866 2995 -1004c 3 860 2995 -1004f 5 862 2995 -FUNC 10054 15f 14 _wctomb_s_l -10054 8 56 6128 -1005c 11 57 6128 -1006d 7 60 6128 -10074 2 62 6128 -10076 4 64 6128 -1007a 7 67 6128 -10081 3 69 6128 -10084 23 74 6128 -100a7 b 77 6128 -100b2 c 79 6128 -100be a 81 6128 -100c8 8 83 6128 -100d0 b 85 6128 -100db b 125 6128 -100e6 13 126 6128 -100f9 5 136 6128 -100fe 4 91 6128 -10102 2c 93 6128 -1012e 2 94 6128 -10130 7 96 6128 -10137 6 98 6128 -1013d 15 100 6128 -10152 27 115 6128 -10179 7 129 6128 -10180 2 131 6128 -10182 2 133 6128 -10184 f 117 6128 -10193 10 119 6128 -101a3 b 121 6128 -101ae 5 123 6128 -FUNC 101b3 1b 10 wctomb_s -101b3 0 144 6128 -101b3 1a 145 6128 -101cd 1 146 6128 -FUNC 101ce 4f c _wctomb_l -101ce 6 178 6128 -101d4 f 181 6128 -101e3 1f 183 6128 -10202 19 184 6128 -1021b 2 185 6128 -FUNC 1021d 30 8 wctomb -1021d 4 191 6128 -10221 4 192 6128 -10225 1a 195 6128 -1023f 7 196 6128 -10246 2 197 6128 -10248 3 196 6128 -1024b 2 197 6128 -FUNC 1024d 36 8 _isleadbyte_l -1024d 6 55 6490 -10253 b 56 6490 -1025e 23 57 6490 -10281 2 58 6490 -FUNC 10283 e 4 isleadbyte -10283 0 63 6490 -10283 d 64 6490 -10290 1 65 6490 -FUNC 10291 16 8 _iswalpha_l -10291 0 71 6490 -10291 15 72 6490 -102a6 1 73 6490 -FUNC 102a7 11 4 iswalpha -102a7 0 78 6490 -102a7 10 79 6490 -102b7 1 80 6490 -FUNC 102b8 13 8 _iswupper_l -102b8 0 86 6490 -102b8 12 87 6490 -102ca 1 88 6490 -FUNC 102cb e 4 iswupper -102cb 0 93 6490 -102cb d 94 6490 -102d8 1 95 6490 -FUNC 102d9 13 8 _iswlower_l -102d9 0 101 6490 -102d9 12 102 6490 -102eb 1 103 6490 -FUNC 102ec e 4 iswlower -102ec 0 108 6490 -102ec d 109 6490 -102f9 1 110 6490 -FUNC 102fa 13 8 _iswdigit_l -102fa 0 116 6490 -102fa 12 117 6490 -1030c 1 118 6490 -FUNC 1030d e 4 iswdigit -1030d 0 123 6490 -1030d d 124 6490 -1031a 1 125 6490 -FUNC 1031b 16 8 _iswxdigit_l -1031b 0 131 6490 -1031b 15 132 6490 -10330 1 133 6490 -FUNC 10331 11 4 iswxdigit -10331 0 138 6490 -10331 10 139 6490 -10341 1 140 6490 -FUNC 10342 13 8 _iswspace_l -10342 0 146 6490 -10342 12 147 6490 -10354 1 148 6490 -FUNC 10355 e 4 iswspace -10355 0 153 6490 -10355 d 154 6490 -10362 1 155 6490 -FUNC 10363 13 8 _iswpunct_l -10363 0 161 6490 -10363 12 162 6490 -10375 1 163 6490 -FUNC 10376 e 4 iswpunct -10376 0 168 6490 -10376 d 169 6490 -10383 1 170 6490 -FUNC 10384 16 8 _iswalnum_l -10384 0 176 6490 -10384 15 177 6490 -10399 1 178 6490 -FUNC 1039a 11 4 iswalnum -1039a 0 183 6490 -1039a 10 184 6490 -103aa 1 185 6490 -FUNC 103ab 16 8 _iswprint_l -103ab 0 191 6490 -103ab 15 192 6490 -103c0 1 193 6490 -FUNC 103c1 11 4 iswprint -103c1 0 198 6490 -103c1 10 199 6490 -103d1 1 200 6490 -FUNC 103d2 16 8 _iswgraph_l -103d2 0 206 6490 -103d2 15 207 6490 -103e7 1 208 6490 -FUNC 103e8 11 4 iswgraph -103e8 0 213 6490 -103e8 10 214 6490 -103f8 1 215 6490 -FUNC 103f9 13 8 _iswcntrl_l -103f9 0 221 6490 -103f9 12 222 6490 -1040b 1 223 6490 -FUNC 1040c e 4 iswcntrl -1040c 0 228 6490 -1040c d 229 6490 -10419 1 230 6490 -FUNC 1041a c 4 iswascii -1041a 0 235 6490 -1041a b 236 6490 -10425 1 237 6490 -FUNC 10426 26 8 _iswcsym_l -10426 0 243 6490 -10426 21 244 6490 -10447 1 245 6490 -10448 3 244 6490 -1044b 1 245 6490 -FUNC 1044c 21 4 __iswcsym -1044c 0 250 6490 -1044c 1c 251 6490 -10468 1 252 6490 -10469 3 251 6490 -1046c 1 252 6490 -FUNC 1046d 26 8 _iswcsymf_l -1046d 0 258 6490 -1046d 21 259 6490 -1048e 1 260 6490 -1048f 3 259 6490 -10492 1 260 6490 -FUNC 10493 21 4 __iswcsymf -10493 0 265 6490 -10493 1c 266 6490 -104af 1 267 6490 -104b0 3 266 6490 -104b3 1 267 6490 -FUNC 104c0 95 0 _aulldvrm -104c0 0 45 5113 -104c0 1 47 5113 -104c1 4 79 5113 -104c5 2 80 5113 -104c7 2 81 5113 -104c9 4 82 5113 -104cd 4 83 5113 -104d1 2 84 5113 -104d3 2 85 5113 -104d5 2 86 5113 -104d7 4 87 5113 -104db 2 88 5113 -104dd 2 89 5113 -104df 2 94 5113 -104e1 4 95 5113 -104e5 2 96 5113 -104e7 2 97 5113 -104e9 4 98 5113 -104ed 2 99 5113 -104ef 2 100 5113 -104f1 2 107 5113 -104f3 4 108 5113 -104f7 4 109 5113 -104fb 4 110 5113 -104ff 2 112 5113 -10501 2 113 5113 -10503 2 114 5113 -10505 2 115 5113 -10507 2 116 5113 -10509 2 117 5113 -1050b 2 118 5113 -1050d 2 119 5113 -1050f 4 128 5113 -10513 2 129 5113 -10515 4 130 5113 -10519 2 131 5113 -1051b 2 132 5113 -1051d 2 133 5113 -1051f 4 141 5113 -10523 2 142 5113 -10525 2 143 5113 -10527 4 144 5113 -1052b 2 145 5113 -1052d 1 147 5113 -1052e 4 148 5113 -10532 4 149 5113 -10536 2 151 5113 -10538 4 160 5113 -1053c 4 161 5113 -10540 2 162 5113 -10542 2 163 5113 -10544 3 164 5113 -10547 2 169 5113 -10549 2 170 5113 -1054b 2 171 5113 -1054d 2 172 5113 -1054f 2 173 5113 -10551 1 179 5113 -10552 3 181 5113 -FUNC 10558 90 0 _local_unwind4 -FUNC 105e8 46 0 _unwind_handler4 -FUNC 1062e 1c 4 _seh_longjmp_unwind4 -FUNC 1064a 17 0 _EH4_CallFilterFunc -FUNC 10661 19 0 _EH4_TransferToHandler -FUNC 1067a 1a 0 _EH4_GlobalUnwind -FUNC 10694 17 8 _EH4_LocalUnwind -FUNC 106ab 33 0 write_char -106ab 0 2433 1218 -106ab a 2434 1218 -106b5 2 2437 1218 -106b7 21 2442 1218 -106d8 2 2444 1218 -106da 1 2447 1218 -106db 2 2446 1218 -106dd 1 2447 1218 -FUNC 106de 24 c write_multi_char -106de 6 2498 1218 -106e4 2 2501 1218 -106e6 e 2500 1218 -106f4 5 2501 1218 -106f9 7 2499 1218 -10700 2 2504 1218 -FUNC 10702 4a 4 write_string -10702 0 2563 1218 -10702 12 2564 1218 -10714 6 2566 1218 -1071a 2 2567 1218 -1071c e 2570 1218 -1072a 5 2571 1218 -1072f a 2573 1218 -10739 9 2574 1218 -10742 9 2569 1218 -1074b 1 2579 1218 -FUNC 1074c 9b0 10 _output_s_l -1074c 1b 975 1218 -10767 45 1036 1218 -107ac 2d 1031 1218 -107d9 b1 1033 1218 -1088a 8 1036 1218 -10892 28 1073 1218 -108ba 17 1078 1218 -108d1 e 1079 1218 -108df 11 1124 1218 -108f0 12 1131 1218 -10902 2 1171 1218 -10904 13 1173 1218 -10917 3 1174 1218 -1091a 5 1175 1218 -1091f 1e 1179 1218 -1093d 3 1193 1218 -10940 5 1194 1218 -10945 4 1181 1218 -10949 5 1182 1218 -1094e 4 1184 1218 -10952 5 1185 1218 -10957 7 1190 1218 -1095e 5 1191 1218 -10963 4 1187 1218 -10967 5 1196 1218 -1096c 5 1200 1218 -10971 9 1206 1218 -1097a b 1233 1218 -10985 4 1235 1218 -10989 3 1236 1218 -1098c 5 1239 1218 -10991 10 1241 1218 -109a1 5 1243 1218 -109a6 4 1248 1218 -109aa 5 1249 1218 -109af 5 1253 1218 -109b4 9 1259 1218 -109bd b 1284 1218 -109c8 4 1285 1218 -109cc 5 1287 1218 -109d1 10 1289 1218 -109e1 5 1291 1218 -109e6 18 1295 1218 -109fe 7 1362 1218 -10a05 5 1363 1218 -10a0a 5 1301 1218 -10a0f 1 1303 1218 -10a10 a 1304 1218 -10a1a 5 1306 1218 -10a1f 4 1308 1218 -10a23 5 1310 1218 -10a28 4 1358 1218 -10a2c 5 1359 1218 -10a31 c 1322 1218 -10a3d 2 1324 1218 -10a3f f 1325 1218 -10a4e a 1327 1218 -10a58 2 1329 1218 -10a5a a 1330 1218 -10a64 5 1332 1218 -10a69 30 1337 1218 -10a99 4 1352 1218 -10a9d 4 1154 1218 -10aa1 10 1158 1218 -10ab1 11 1160 1218 -10ac2 3 1161 1218 -10ac5 b 1163 1218 -10ad0 b 1166 1218 -10adb 5 1167 1218 -10ae0 32 1378 1218 -10b12 d 1716 1218 -10b1f 4 1724 1218 -10b23 18 1749 1218 -10b3b c 1750 1218 -10b47 8 1381 1218 -10b4f 9 1385 1218 -10b58 8 1561 1218 -10b60 7 1562 1218 -10b67 d 1584 1218 -10b74 3 1589 1218 -10b77 15 1635 1218 -10b8c 4 1636 1218 -10b90 8 1637 1218 -10b98 f 1639 1218 -10ba7 1d 1378 1218 -10bc4 12 1448 1218 -10bd6 16 1467 1218 -10bec 4 1470 1218 -10bf0 7 1471 1218 -10bf7 2 1472 1218 -10bf9 6 1499 1218 -10bff 7 1500 1218 -10c06 6 1503 1218 -10c0c 5 1506 1218 -10c11 5 1523 1218 -10c16 e 1541 1218 -10c24 6 1546 1218 -10c2a d 1548 1218 -10c37 7 1549 1218 -10c3e 5 1550 1218 -10c43 4 1551 1218 -10c47 5 1553 1218 -10c4c 8 1543 1218 -10c54 7 1544 1218 -10c5b 5 1557 1218 -10c60 34 1378 1218 -10c94 9 1908 1218 -10c9d 9 1910 1218 -10ca6 8 1668 1218 -10cae d 1688 1218 -10cbb 6 1702 1218 -10cc1 7 1703 1218 -10cc8 2 1704 1218 -10cca 5 1706 1218 -10ccf 7 1708 1218 -10cd6 5 1710 1218 -10cdb 4 1864 1218 -10cdf 7 1869 1218 -10ce6 c 1933 1218 -10cf2 8 1939 1218 -10cfa 5 1958 1218 -10cff 7 1751 1218 -10d06 9 1752 1218 -10d0f 5 1753 1218 -10d14 3 1754 1218 -10d17 9 1756 1218 -10d20 f 1759 1218 -10d2f 2 1760 1218 -10d31 15 1765 1218 -10d46 8 1767 1218 -10d4e e 1809 1218 -10d5c 27 1828 1218 -10d83 14 1838 1218 -10d97 15 1840 1218 -10dac a 1844 1218 -10db6 15 1846 1218 -10dcb 5 1852 1218 -10dd0 7 1853 1218 -10dd7 4 1854 1218 -10ddb 1 1857 1218 -10ddc 5 1859 1218 -10de1 3 1877 1218 -10de4 3 1887 1218 -10de7 2 1888 1218 -10de9 1a 1378 1218 -10e03 7 1892 1218 -10e0a 11 1897 1218 -10e1b c 1900 1218 -10e27 7 1901 1218 -10e2e 5 1903 1218 -10e33 5 1961 1218 -10e38 6 1987 1218 -10e3e 14 2026 1218 -10e52 2 2045 1218 -10e54 5 2051 1218 -10e59 2 2071 1218 -10e5b 3 2074 1218 -10e5e 6 2080 1218 -10e64 2 2099 1218 -10e66 5 2105 1218 -10e6b f 2128 1218 -10e7a 7 2129 1218 -10e81 7 2130 1218 -10e88 c 2136 1218 -10e94 2 2142 1218 -10e96 6 2148 1218 -10e9c 7 2149 1218 -10ea3 2 2150 1218 -10ea5 4 2151 1218 -10ea9 a 2152 1218 -10eb3 3 2153 1218 -10eb6 6 2157 1218 -10ebc 3 2158 1218 -10ebf 6 2163 1218 -10ec5 10 2165 1218 -10ed5 10 2166 1218 -10ee5 c 2168 1218 -10ef1 3 2170 1218 -10ef4 3 2172 1218 -10ef7 2 2173 1218 -10ef9 8 2175 1218 -10f01 1 2176 1218 -10f02 19 2180 1218 -10f1b 9 2181 1218 -10f24 1 2182 1218 -10f25 2 2185 1218 -10f27 7 1640 1218 -10f2e 2 1641 1218 -10f30 4 1640 1218 -10f34 5 1642 1218 -10f39 2 1644 1218 -10f3b 4 1645 1218 -10f3f 8 1646 1218 -10f47 5 1647 1218 -10f4c 6 1648 1218 -10f52 1 1649 1218 -10f53 4 1648 1218 -10f57 6 1650 1218 -10f5d a 2201 1218 -10f67 7 2204 1218 -10f6e 6 2205 1218 -10f74 4 2207 1218 -10f78 2 2208 1218 -10f7a 4 2210 1218 -10f7e 4 2212 1218 -10f82 2 2213 1218 -10f84 4 2215 1218 -10f88 4 2217 1218 -10f8c 7 2218 1218 -10f93 9 2224 1218 -10f9c 6 2228 1218 -10fa2 11 2230 1218 -10fb3 11 2234 1218 -10fc4 d 2236 1218 -10fd1 f 2238 1218 -10fe0 d 2243 1218 -10fed 3 2249 1218 -10ff0 3 2250 1218 -10ff3 1e 2252 1218 -11011 9 2253 1218 -1101a 18 2257 1218 -11032 2 1690 1218 -11034 4 2254 1218 -11038 2 2259 1218 -1103a d 2260 1218 -11047 c 2290 1218 -11053 f 2292 1218 -11062 6 2297 1218 -11068 8 2298 1218 -11070 1b 2299 1218 -1108b 17 1125 1218 -110a2 2 1690 1218 -110a4 f 2310 1218 -110b3 10 2376 1218 -110c3 39 2377 1218 -FUNC 110fc 129 10 _validate_param_reuseA -110fc 3 606 1271 -110ff 1c 610 1271 -1111b f 617 1271 -1112a 11 618 1271 -1113b 10 620 1271 -1114b 36 629 1271 -11181 46 632 1271 -111c7 2 633 1271 -111c9 17 639 1271 -111e0 c 645 1271 -111ec 2c 626 1271 -11218 b 614 1271 -11223 2 646 1271 -FUNC 11225 33 0 write_char -11225 0 2433 1271 -11225 a 2434 1271 -1122f 2 2437 1271 -11231 21 2442 1271 -11252 2 2444 1271 -11254 1 2447 1271 -11255 2 2446 1271 -11257 1 2447 1271 -FUNC 11258 24 c write_multi_char -11258 6 2498 1271 -1125e 2 2501 1271 -11260 e 2500 1271 -1126e 5 2501 1271 -11273 7 2499 1271 -1127a 2 2504 1271 -FUNC 1127c 4a 4 write_string -1127c 0 2563 1271 -1127c 12 2564 1271 -1128e 6 2566 1271 -11294 2 2567 1271 -11296 e 2570 1271 -112a4 5 2571 1271 -112a9 a 2573 1271 -112b3 9 2574 1271 -112bc 9 2569 1271 -112c5 1 2579 1271 -FUNC 112c6 10 4 get_crtdouble_arg -112c6 0 2684 1271 -112c6 f 2685 1271 -112d5 1 2686 1271 -FUNC 112d6 f88 10 _output_p_l -112d6 1b 975 1271 -112f1 15 986 1271 -11306 b 1007 1271 -11311 2b 2172 1271 -1133c 2c 1031 1271 -11368 9b 1033 1271 -11403 8 1036 1271 -1140b 3 1038 1271 -1140e 3 1041 1271 -11411 3 1043 1271 -11414 11 1046 1271 -11425 7 1061 1271 -1142c 4 1062 1271 -11430 7 1069 1271 -11437 32 1073 1271 -11469 19 1078 1271 -11482 e 1079 1271 -11490 1a 1082 1271 -114aa 6 1084 1271 -114b0 1b 1087 1271 -114cb 5 1089 1271 -114d0 15 1091 1271 -114e5 3 1093 1271 -114e8 2 1095 1271 -114ea 6 1097 1271 -114f0 5 1101 1271 -114f5 c 1103 1271 -11501 7 1104 1271 -11508 e 1106 1271 -11516 1a 1109 1271 -11530 8 1112 1271 -11538 f 1131 1271 -11547 9 1120 1271 -11550 b 1131 1271 -1155b 21 1137 1271 -1157c 5 1145 1271 -11581 16 1173 1271 -11597 3 1174 1271 -1159a 5 1175 1271 -1159f 1f 1179 1271 -115be 7 1193 1271 -115c5 5 1194 1271 -115ca 7 1181 1271 -115d1 5 1182 1271 -115d6 6 1184 1271 -115dc 5 1185 1271 -115e1 a 1190 1271 -115eb 5 1191 1271 -115f0 7 1187 1271 -115f7 5 1196 1271 -115fc 9 1200 1271 -11605 5 1203 1271 -1160a a 1206 1271 -11614 2 1209 1271 -11616 c 1211 1271 -11622 7 1212 1271 -11629 b 1214 1271 -11634 1b 1216 1271 -1164f 8 1219 1271 -11657 12 1221 1271 -11669 9 1274 1271 -11672 5 1275 1271 -11677 c 1228 1271 -11683 b 1233 1271 -1168e 7 1235 1271 -11695 3 1236 1271 -11698 5 1239 1271 -1169d 10 1241 1271 -116ad 5 1243 1271 -116b2 3 1248 1271 -116b5 5 1249 1271 -116ba 5 1253 1271 -116bf 5 1256 1271 -116c4 a 1259 1271 -116ce 2 1262 1271 -116d0 c 1264 1271 -116dc 7 1265 1271 -116e3 f 1267 1271 -116f2 c 1280 1271 -116fe b 1284 1271 -11709 4 1285 1271 -1170d 5 1287 1271 -11712 1c 1274 1271 -1172e 10 1289 1271 -1173e 5 1291 1271 -11743 18 1295 1271 -1175b a 1362 1271 -11765 5 1363 1271 -1176a 5 1301 1271 -1176f 1 1303 1271 -11770 d 1304 1271 -1177d 5 1306 1271 -11782 7 1308 1271 -11789 5 1310 1271 -1178e 7 1358 1271 -11795 5 1359 1271 -1179a c 1322 1271 -117a6 2 1324 1271 -117a8 12 1325 1271 -117ba a 1327 1271 -117c4 2 1329 1271 -117c6 d 1330 1271 -117d3 5 1332 1271 -117d8 18 1337 1271 -117f0 3 1352 1271 -117f3 13 1158 1271 -11806 11 1160 1271 -11817 8 1161 1271 -1181f 8 1163 1271 -11827 b 1166 1271 -11832 5 1167 1271 -11837 a 1342 1271 -11841 5 1366 1271 -11846 39 1378 1271 -1187f 9 1716 1271 -11888 7 1724 1271 -1188f 12 1726 1271 -118a1 a 1728 1271 -118ab 27 1739 1271 -118d2 b 1381 1271 -118dd c 1385 1271 -118e9 b 1561 1271 -118f4 a 1562 1271 -118fe d 1584 1271 -1190b 9 1586 1271 -11914 a 1589 1271 -1191e 5 1592 1271 -11923 25 1378 1271 -11948 b 1442 1271 -11953 5 1445 1271 -11958 b 1448 1271 -11963 2 1451 1271 -11965 a 1453 1271 -1196f 27 1457 1271 -11996 5 1458 1271 -1199b a 1462 1271 -119a5 19 1467 1271 -119be 4 1470 1271 -119c2 3 1471 1271 -119c5 2 1472 1271 -119c7 5 1477 1271 -119cc b 1480 1271 -119d7 2 1483 1271 -119d9 a 1485 1271 -119e3 f 1489 1271 -119f2 a 1494 1271 -119fc 6 1499 1271 -11a02 3 1500 1271 -11a05 9 1503 1271 -11a0e 5 1506 1271 -11a13 5 1520 1271 -11a18 a 1523 1271 -11a22 2 1526 1271 -11a24 a 1528 1271 -11a2e 9 1532 1271 -11a37 6 1533 1271 -11a3d 9 1537 1271 -11a46 b 1541 1271 -11a51 9 1546 1271 -11a5a d 1548 1271 -11a67 3 1549 1271 -11a6a 5 1550 1271 -11a6f 3 1551 1271 -11a72 5 1553 1271 -11a77 8 1543 1271 -11a7f 7 1544 1271 -11a86 5 1557 1271 -11a8b 38 1378 1271 -11ac3 14 1908 1271 -11ad7 f 1910 1271 -11ae6 5 1665 1271 -11aeb a 1668 1271 -11af5 2 1671 1271 -11af7 a 1673 1271 -11b01 25 1677 1271 -11b26 5 1678 1271 -11b2b 9 1682 1271 -11b34 9 1688 1271 -11b3d 9 1702 1271 -11b46 7 1703 1271 -11b4d 2 1704 1271 -11b4f 5 1706 1271 -11b54 3 1708 1271 -11b57 5 1710 1271 -11b5c 7 1864 1271 -11b63 7 1869 1271 -11b6a f 1933 1271 -11b79 9 1936 1271 -11b82 e 1939 1271 -11b90 5 1942 1271 -11b95 1c 1739 1271 -11bb1 21 1109 1271 -11bd2 16 1749 1271 -11be8 9 1750 1271 -11bf1 7 1751 1271 -11bf8 3 1767 1271 -11bfb 5 1806 1271 -11c00 9 1809 1271 -11c09 2 1812 1271 -11c0b 5 1753 1271 -11c10 3 1754 1271 -11c13 a 1756 1271 -11c1d f 1759 1271 -11c2c 2 1760 1271 -11c2e 11 1765 1271 -11c3f a 1818 1271 -11c49 6 1821 1271 -11c4f 16 1822 1271 -11c65 26 1828 1271 -11c8b 16 1838 1271 -11ca1 17 1840 1271 -11cb8 a 1844 1271 -11cc2 17 1846 1271 -11cd9 8 1852 1271 -11ce1 a 1853 1271 -11ceb 3 1854 1271 -11cee 3 1857 1271 -11cf1 5 1859 1271 -11cf6 7 1877 1271 -11cfd 7 1887 1271 -11d04 2 1888 1271 -11d06 1a 1378 1271 -11d20 7 1892 1271 -11d27 14 1897 1271 -11d3b c 1900 1271 -11d47 7 1901 1271 -11d4e 5 1903 1271 -11d53 a 1944 1271 -11d5d 2c 1948 1271 -11d89 5 1949 1271 -11d8e 6 1961 1271 -11d94 3 1964 1271 -11d97 6 1970 1271 -11d9d a 1972 1271 -11da7 2c 1976 1271 -11dd3 5 1977 1271 -11dd8 c 1981 1271 -11de4 5 1987 1271 -11de9 4 2019 1271 -11ded 4 2020 1271 -11df1 5 2023 1271 -11df6 b 2026 1271 -11e01 5 2029 1271 -11e06 a 2031 1271 -11e10 f 2035 1271 -11e1f a 2040 1271 -11e29 2 2045 1271 -11e2b 5 2048 1271 -11e30 b 2051 1271 -11e3b 2 2054 1271 -11e3d a 2056 1271 -11e47 b 2060 1271 -11e52 a 2065 1271 -11e5c 2 2071 1271 -11e5e 4 2074 1271 -11e62 5 2077 1271 -11e67 a 2080 1271 -11e71 2 2083 1271 -11e73 a 2085 1271 -11e7d b 2089 1271 -11e88 a 2094 1271 -11e92 2 2099 1271 -11e94 5 2102 1271 -11e99 a 2105 1271 -11ea3 2 2108 1271 -11ea5 a 2110 1271 -11eaf 38 2114 1271 -11ee7 5 2115 1271 -11eec b 2119 1271 -11ef7 13 2128 1271 -11f0a 7 2129 1271 -11f11 a 2130 1271 -11f1b f 2136 1271 -11f2a 2 2142 1271 -11f2c 6 2148 1271 -11f32 7 2149 1271 -11f39 2 2150 1271 -11f3b 7 2151 1271 -11f42 a 2152 1271 -11f4c 3 2153 1271 -11f4f 6 2157 1271 -11f55 3 2158 1271 -11f58 6 2163 1271 -11f5e 10 2165 1271 -11f6e 10 2166 1271 -11f7e c 2168 1271 -11f8a 3 2170 1271 -11f8d 3 2172 1271 -11f90 2 2173 1271 -11f92 8 2175 1271 -11f9a 1 2176 1271 -11f9b 24 2180 1271 -11fbf 9 2181 1271 -11fc8 1 2182 1271 -11fc9 5 2185 1271 -11fce c 1594 1271 -11fda c 1598 1271 -11fe6 9 1603 1271 -11fef e 1635 1271 -11ffd 4 1636 1271 -12001 8 1637 1271 -12009 8 1639 1271 -12011 1c 1598 1271 -1202d 6 1640 1271 -12033 2 1641 1271 -12035 4 1640 1271 -12039 5 1642 1271 -1203e 2 1644 1271 -12040 5 1645 1271 -12045 8 1646 1271 -1204d 5 1647 1271 -12052 6 1648 1271 -12058 1 1649 1271 -12059 4 1648 1271 -1205d 6 1650 1271 -12063 10 2189 1271 -12073 a 2201 1271 -1207d a 2204 1271 -12087 6 2205 1271 -1208d 4 2207 1271 -12091 2 2208 1271 -12093 4 2210 1271 -12097 4 2212 1271 -1209b 2 2213 1271 -1209d 4 2215 1271 -120a1 4 2217 1271 -120a5 7 2218 1271 -120ac 9 2224 1271 -120b5 4 2228 1271 -120b9 11 2230 1271 -120ca 11 2234 1271 -120db 13 2236 1271 -120ee f 2238 1271 -120fd d 2243 1271 -1210a 3 2249 1271 -1210d 3 2250 1271 -12110 1e 2252 1271 -1212e 9 2253 1271 -12137 18 2257 1271 -1214f 2 2310 1271 -12151 4 2254 1271 -12155 2 2259 1271 -12157 d 2260 1271 -12164 f 2290 1271 -12173 f 2292 1271 -12182 6 2297 1271 -12188 8 2298 1271 -12190 15 2299 1271 -121a5 2 1073 1271 -121a7 f 2310 1271 -121b6 b 2314 1271 -121c1 10 2319 1271 -121d1 1d 2321 1271 -121ee 2 2360 1271 -121f0 3 2361 1271 -121f3 2 2362 1271 -121f5 2 2324 1271 -121f7 f 2325 1271 -12206 10 1043 1271 -12216 10 2376 1271 -12226 38 2377 1271 -FUNC 1225e c2 4 _putwch_nolock -1225e 11 84 4721 -1226f a 89 4721 -12279 9 91 4721 -12282 5 92 4721 -12287 a 96 4721 -12291 6 97 4721 -12297 16 103 4721 -122ad 14 105 4721 -122c1 6 106 4721 -122c7 1c 123 4721 -122e3 1e 129 4721 -12301 2 131 4721 -12303 4 133 4721 -12307 d 134 4721 -12314 a 110 4721 -1231e 2 113 4721 -FUNC 12320 9b 4 _cputws -12320 c 151 4721 -1232c 5 153 4721 -12331 30 155 4721 -12361 b 157 4721 -1236c 9 158 4721 -12375 3 159 4721 -12378 a 160 4721 -12382 17 162 4721 -12399 4 164 4721 -1239d c 169 4721 -123a9 3 172 4721 -123ac 6 173 4721 -123b2 9 170 4721 -FUNC 123bb 46 4 _putwch -123bb c 49 4721 -123c7 8 52 4721 -123cf 4 53 4721 -123d3 f 55 4721 -123e2 c 58 4721 -123ee 4 62 4721 -123f2 6 63 4721 -123f8 9 59 4721 -FUNC 12401 113 10 _mbtowc_l -12401 8 55 6355 -12409 e 56 6355 -12417 4 61 6355 -1241b 7 64 6355 -12422 3 65 6355 -12425 4 59 6355 -12429 2 116 6355 -1242b b 70 6355 -12436 8 73 6355 -1243e 7 75 6355 -12445 7 76 6355 -1244c 11 77 6355 -1245d 13 80 6355 -12470 33 90 6355 -124a3 10 93 6355 -124b3 1b 99 6355 -124ce b 95 6355 -124d9 14 96 6355 -124ed 25 108 6355 -12512 2 111 6355 -FUNC 12514 17 c mbtowc -12514 0 123 6355 -12514 16 124 6355 -1252a 1 125 6355 -FUNC 1252b 83 10 _lseeki64_nolock -1252b 5 120 4872 -12530 4 126 4872 -12534 1b 134 4872 -1254f b 136 4872 -1255a 6 138 4872 -12560 22 146 4872 -12582 7 148 4872 -12589 2 149 4872 -1258b 19 152 4872 -125a4 8 153 4872 -125ac 2 154 4872 -FUNC 125ae 119 10 _lseeki64 -125ae c 73 4872 -125ba 9 74 4872 -125c3 24 77 4872 -125e7 2f 78 4872 -12616 46 79 4872 -1265c 7 81 4872 -12663 3 82 4872 -12666 9 84 4872 -1266f 1a 85 4872 -12689 2 86 4872 -1268b b 87 4872 -12696 7 88 4872 -1269d 8 89 4872 -126a5 c 93 4872 -126b1 6 97 4872 -126b7 6 98 4872 -126bd a 94 4872 -FUNC 126c7 7d 8 _set_osfhnd -126c7 0 213 4825 -126c7 2e 216 4825 -126f5 e 217 4825 -12703 b 218 4825 -1270e 3 226 4825 -12711 2 227 4825 -12713 3 223 4825 -12716 2 224 4825 -12718 9 220 4825 -12721 5 231 4825 -12726 5 232 4825 -1272b b 234 4825 -12736 8 235 4825 -1273e 5 236 4825 -12743 1 238 4825 -FUNC 12744 81 4 _free_osfhnd -12744 0 263 4825 -12744 38 266 4825 -1277c 9 268 4825 -12785 a 269 4825 -1278f 3 277 4825 -12792 2 278 4825 -12794 3 274 4825 -12797 2 275 4825 -12799 9 271 4825 -127a2 6 282 4825 -127a8 4 283 4825 -127ac b 285 4825 -127b7 7 286 4825 -127be 6 287 4825 -127c4 1 289 4825 -FUNC 127c5 71 4 _get_osfhandle -127c5 0 312 4825 -127c5 1f 313 4825 -127e4 2 318 4825 -127e6 e 314 4825 -127f4 3d 315 4825 -12831 1 318 4825 -12832 3 317 4825 -12835 1 318 4825 -FUNC 12836 a0 4 __lock_fhandle -12836 c 437 4825 -12842 17 438 4825 -12859 7 439 4825 -12860 7 444 4825 -12867 8 446 4825 -1286f 3 447 4825 -12872 5 448 4825 -12877 14 449 4825 -1288b 3 453 4825 -1288e 3 455 4825 -12891 c 457 4825 -1289d 5 462 4825 -128a2 1d 464 4825 -128bf 3 467 4825 -128c2 6 468 4825 -128c8 5 457 4825 -128cd 9 458 4825 -FUNC 128d6 22 4 _unlock_fhandle -128d6 0 489 4825 -128d6 21 490 4825 -128f7 1 491 4825 -FUNC 128f8 19f 0 _alloc_osfhnd -128f8 c 52 4825 -12904 4 53 4825 -12908 5 56 4825 -1290d c 58 4825 -12919 8 59 4825 -12921 8 61 4825 -12929 3 62 4825 -1292c c 71 4825 -12938 f 77 4825 -12947 17 83 4825 -1295e 6 85 4825 -12964 6 89 4825 -1296a 8 90 4825 -12972 6 91 4825 -12978 6 92 4825 -1297e 14 93 4825 -12992 3 99 4825 -12995 2 101 4825 -12997 3 103 4825 -1299a 9 106 4825 -129a3 6 111 4825 -129a9 a 113 4825 -129b3 6 119 4825 -129b9 7 120 4825 -129c0 5 83 4825 -129c5 6 106 4825 -129cb 9 107 4825 -129d4 6 124 4825 -129da 4 126 4825 -129de 3 127 4825 -129e1 19 128 4825 -129fa 6 137 4825 -12a00 6 71 4825 -12a06 12 145 4825 -12a18 9 151 4825 -12a21 7 152 4825 -12a28 c 154 4825 -12a34 4 155 4825 -12a38 3 156 4825 -12a3b 4 157 4825 -12a3f 4 158 4825 -12a43 8 154 4825 -12a4b 6 165 4825 -12a51 19 166 4825 -12a6a b 167 4825 -12a75 4 171 4825 -12a79 c 178 4825 -12a85 3 186 4825 -12a88 6 187 4825 -12a8e 9 179 4825 -FUNC 12a97 115 8 _open_osfhandle -12a97 c 343 4825 -12aa3 5 347 4825 -12aa8 2 351 4825 -12aaa 6 353 4825 -12ab0 3 354 4825 -12ab3 8 356 4825 -12abb 3 357 4825 -12abe 6 359 4825 -12ac4 3 360 4825 -12ac7 9 364 4825 -12ad0 4 365 4825 -12ad4 d 367 4825 -12ae1 3 409 4825 -12ae4 6 410 4825 -12aea 5 372 4825 -12aef 5 373 4825 -12af4 5 374 4825 -12af9 3 375 4825 -12afc f 380 4825 -12b0b b 381 4825 -12b16 7 382 4825 -12b1d 2 383 4825 -12b1f 3 385 4825 -12b22 b 391 4825 -12b2d 3 393 4825 -12b30 1a 395 4825 -12b4a 9 396 4825 -12b53 9 397 4825 -12b5c 7 399 4825 -12b63 c 401 4825 -12b6f 10 409 4825 -12b7f 5 401 4825 -12b84 5 402 4825 -12b89 1b 404 4825 -12ba4 8 406 4825 -FUNC 12bac 11e c _calloc_impl -12bac c 23 5592 -12bb8 9 28 5592 -12bc1 2e 30 5592 -12bef 9 32 5592 -12bf8 4 36 5592 -12bfc 3 37 5592 -12bff 5 41 5592 -12c04 5 43 5592 -12c09 9 46 5592 -12c12 9 50 5592 -12c1b b 52 5592 -12c26 8 56 5592 -12c2e 3 57 5592 -12c31 c 58 5592 -12c3d c 60 5592 -12c49 7 64 5592 -12c50 d 65 5592 -12c5d 4 93 5592 -12c61 11 94 5592 -12c72 c 97 5592 -12c7e f 109 5592 -12c8d b 111 5592 -12c98 6 112 5592 -12c9e 5 113 5592 -12ca3 5 60 5592 -12ca8 9 61 5592 -12cb1 4 100 5592 -12cb5 7 102 5592 -12cbc 6 103 5592 -12cc2 2 105 5592 -12cc4 6 119 5592 -FUNC 12cca 3f 8 calloc -12cca 4 145 5592 -12cce 5 146 5592 -12cd3 14 147 5592 -12ce7 15 149 5592 -12cfc 8 151 5592 -12d04 3 153 5592 -12d07 2 154 5592 -FUNC 12d09 21b 8 realloc -12d09 c 64 5338 -12d15 7 69 5338 -12d1c e 70 5338 -12d2a 7 73 5338 -12d31 7 75 5338 -12d38 5 76 5338 -12d3d d 81 5338 -12d4a 5 88 5338 -12d4f 9 89 5338 -12d58 8 91 5338 -12d60 3 92 5338 -12d63 12 96 5338 -12d75 8 100 5338 -12d7d f 102 5338 -12d8c 5 103 5338 -12d91 e 104 5338 -12d9f 4 107 5338 -12da3 10 108 5338 -12db3 9 110 5338 -12dbc a 111 5338 -12dc6 5 118 5338 -12dcb 4 120 5338 -12dcf 6 121 5338 -12dd5 9 123 5338 -12dde 15 124 5338 -12df3 4 127 5338 -12df7 10 128 5338 -12e07 c 129 5338 -12e13 c 135 5338 -12e1f 6 142 5338 -12e25 4 144 5338 -12e29 1 145 5338 -12e2a 9 147 5338 -12e33 14 148 5338 -12e47 6 135 5338 -12e4d 9 137 5338 -12e56 3 148 5338 -12e59 10 158 5338 -12e69 f 181 5338 -12e78 5 186 5338 -12e7d 5 183 5338 -12e82 11 186 5338 -12e93 2 188 5338 -12e95 8 160 5338 -12e9d 5 170 5338 -12ea2 3 167 5338 -12ea5 2 172 5338 -12ea7 6 174 5338 -12ead 2 155 5338 -12eaf 4 321 5338 -12eb3 1 322 5338 -12eb4 12 323 5338 -12ec6 c 332 5338 -12ed2 b 347 5338 -12edd 5 319 5338 -12ee2 7 327 5338 -12ee9 b 328 5338 -12ef4 2 329 5338 -12ef6 6 356 5338 -12efc 5 349 5338 -12f01 5 350 5338 -12f06 4 334 5338 -12f0a 16 341 5338 -12f20 4 343 5338 -FUNC 12f24 79 c _recalloc -12f24 3 744 5338 -12f27 a 749 5338 -12f31 28 751 5338 -12f59 4 753 5338 -12f5d 9 754 5338 -12f66 b 755 5338 -12f71 b 756 5338 -12f7c a 757 5338 -12f86 10 759 5338 -12f96 5 761 5338 -12f9b 2 762 5338 -FUNC 12f9d 21 0 _get_sbh_threshold -12f9d 0 61 5281 -12f9d 9 64 5281 -12fa6 2 66 5281 -12fa8 1 81 5281 -12fa9 14 69 5281 -12fbd 1 81 5281 -FUNC 12fbe 46 4 _set_amblksiz -12fbe 0 214 5281 -12fbe 2b 216 5281 -12fe9 1 224 5281 -12fea 11 217 5281 -12ffb 5 220 5281 -13000 3 223 5281 -13003 1 224 5281 -FUNC 13004 3c 4 _get_amblksiz -13004 0 243 5281 -13004 27 245 5281 -1302b 1 253 5281 -1302c 8 246 5281 -13034 8 249 5281 -1303c 3 252 5281 -1303f 1 253 5281 -FUNC 13040 48 4 __sbh_heap_init -13040 0 274 5281 -13040 1c 275 5281 -1305c 1 285 5281 -1305d 4 278 5281 -13061 7 280 5281 -13068 c 281 5281 -13074 13 284 5281 -13087 1 285 5281 -FUNC 13088 2b 4 __sbh_find_block -13088 0 306 5281 -13088 12 307 5281 -1309a 7 316 5281 -130a1 8 317 5281 -130a9 3 319 5281 -130ac 4 314 5281 -130b0 2 321 5281 -130b2 1 322 5281 -FUNC 130b3 314 8 __sbh_free_block -130b3 6 381 5281 -130b9 7 399 5281 -130c0 9 402 5281 -130c9 18 407 5281 -130e1 3 408 5281 -130e4 d 412 5281 -130f1 3 416 5281 -130f4 5 417 5281 -130f9 6 420 5281 -130ff b 424 5281 -1310a 4 429 5281 -1310e 5 430 5281 -13113 3 431 5281 -13116 8 434 5281 -1311e 3 439 5281 -13121 b 441 5281 -1312c e 442 5281 -1313a 5 443 5281 -1313f 2 445 5281 -13141 5 448 5281 -13146 11 449 5281 -13157 9 450 5281 -13160 9 455 5281 -13169 15 459 5281 -1317e 6 463 5281 -13184 5 464 5281 -13189 3 465 5281 -1318c f 468 5281 -1319b 3 474 5281 -1319e 6 477 5281 -131a4 b 478 5281 -131af 2 479 5281 -131b1 3 483 5281 -131b4 6 484 5281 -131ba 7 485 5281 -131c1 2 486 5281 -131c3 4 489 5281 -131c7 b 493 5281 -131d2 3 498 5281 -131d5 11 501 5281 -131e6 6 502 5281 -131ec 5 503 5281 -131f1 2 505 5281 -131f3 e 508 5281 -13201 6 509 5281 -13207 6 511 5281 -1320d c 516 5281 -13219 c 517 5281 -13225 8 520 5281 -1322d e 524 5281 -1323b 6 528 5281 -13241 3 529 5281 -13244 6 530 5281 -1324a 3 531 5281 -1324d 6 532 5281 -13253 8 535 5281 -1325b 18 541 5281 -13273 e 542 5281 -13281 f 543 5281 -13290 2 545 5281 -13292 6 547 5281 -13298 10 548 5281 -132a8 13 550 5281 -132bb 5 556 5281 -132c0 4 558 5281 -132c4 b 561 5281 -132cf d 564 5281 -132dc 6 568 5281 -132e2 1a 569 5281 -132fc 15 573 5281 -13311 16 577 5281 -13327 19 578 5281 -13340 9 579 5281 -13349 6 583 5281 -1334f 8 586 5281 -13357 16 589 5281 -1336d 25 595 5281 -13392 14 599 5281 -133a6 4 600 5281 -133aa a 603 5281 -133b4 8 608 5281 -133bc 9 609 5281 -133c5 2 611 5281 -FUNC 133c7 b0 0 __sbh_alloc_new_region -133c7 0 891 5281 -133c7 13 897 5281 -133da 1e 900 5281 -133f8 4 901 5281 -133fc 12 905 5281 -1340e 9 909 5281 -13417 18 913 5281 -1342f 2 914 5281 -13431 1a 918 5281 -1344b 10 920 5281 -1345b 2 921 5281 -1345d 9 927 5281 -13466 6 930 5281 -1346c 6 933 5281 -13472 4 935 5281 -13476 1 936 5281 -FUNC 13477 106 4 __sbh_alloc_new_group -13477 5 958 5281 -1347c 3 959 5281 -1347f 9 972 5281 -13488 4 973 5281 -1348c 2 976 5281 -1348e 1 977 5281 -1348f 4 974 5281 -13493 15 981 5281 -134a8 c 986 5281 -134b4 1f 993 5281 -134d3 8 994 5281 -134db 6 998 5281 -134e1 12 1001 5281 -134f3 4 1004 5281 -134f7 7 1005 5281 -134fe 8 1011 5281 -13506 10 1013 5281 -13516 12 1016 5281 -13528 3 1001 5281 -1352b 8 1021 5281 -13533 6 1023 5281 -13539 3 1024 5281 -1353c 6 1027 5281 -13542 3 1028 5281 -13545 5 1030 5281 -1354a a 1031 5281 -13554 9 1032 5281 -1355d b 1033 5281 -13568 e 1036 5281 -13576 5 1038 5281 -1357b 2 1039 5281 -FUNC 1357d 2df c __sbh_resize_block -1357d 6 1061 5281 -13583 c 1080 5281 -1358f b 1083 5281 -1359a 3 1084 5281 -1359d 12 1085 5281 -135af 7 1089 5281 -135b6 14 1096 5281 -135ca 13 1099 5281 -135dd 7 1105 5281 -135e4 8 1106 5281 -135ec 6 1107 5281 -135f2 8 1110 5281 -135fa 3 1115 5281 -135fd 9 1117 5281 -13606 11 1118 5281 -13617 5 1119 5281 -1361c 2 1121 5281 -1361e 5 1124 5281 -13623 14 1125 5281 -13637 6 1126 5281 -1363d 9 1131 5281 -13646 9 1132 5281 -1364f 12 1135 5281 -13661 a 1141 5281 -1366b 9 1142 5281 -13674 3 1143 5281 -13677 9 1147 5281 -13680 6 1148 5281 -13686 6 1149 5281 -1368c 3 1150 5281 -1368f 6 1151 5281 -13695 8 1154 5281 -1369d 18 1160 5281 -136b5 e 1161 5281 -136c3 6 1162 5281 -136c9 2 1164 5281 -136cb 6 1166 5281 -136d1 10 1167 5281 -136e1 13 1169 5281 -136f4 c 1174 5281 -13700 9 1176 5281 -13709 6 1180 5281 -1370f 9 1182 5281 -13718 7 1100 5281 -1371f 6 1186 5281 -13725 3 1189 5281 -13728 d 1195 5281 -13735 7 1198 5281 -1373c b 1199 5281 -13747 3 1200 5281 -1374a a 1203 5281 -13754 7 1208 5281 -1375b 5 1209 5281 -13760 3 1210 5281 -13763 8 1213 5281 -1376b 3 1218 5281 -1376e b 1221 5281 -13779 e 1222 5281 -13787 5 1223 5281 -1378c 2 1225 5281 -1378e 5 1228 5281 -13793 11 1229 5281 -137a4 9 1231 5281 -137ad 9 1236 5281 -137b6 9 1237 5281 -137bf 9 1240 5281 -137c8 4 1241 5281 -137cc 5 1242 5281 -137d1 3 1243 5281 -137d4 6 1249 5281 -137da 3 1250 5281 -137dd 6 1251 5281 -137e3 3 1252 5281 -137e6 6 1253 5281 -137ec 8 1256 5281 -137f4 18 1262 5281 -1380c e 1263 5281 -1381a 6 1264 5281 -13820 2 1266 5281 -13822 6 1268 5281 -13828 10 1269 5281 -13838 13 1271 5281 -1384b 5 1276 5281 -13850 4 1278 5281 -13854 6 1281 5281 -1385a 2 1282 5281 -FUNC 1385c cd 0 __sbh_heapmin -1385c 0 1302 5281 -1385c d 1306 5281 -13869 6 1310 5281 -1386f 17 1311 5281 -13886 15 1314 5281 -1389b 16 1318 5281 -138b1 19 1319 5281 -138ca 9 1320 5281 -138d3 f 1325 5281 -138e2 11 1328 5281 -138f3 28 1333 5281 -1391b 6 1334 5281 -13921 7 1338 5281 -13928 1 1340 5281 -FUNC 13929 2e2 0 __sbh_heap_check -13929 3 1361 5281 -1392c 12 1391 5281 -1393e 8 1393 5281 -13946 16 1398 5281 -1395c 3 1401 5281 -1395f 8 1402 5281 -13967 6 1406 5281 -1396d 9 1407 5281 -13976 c 1408 5281 -13982 3 1409 5281 -13985 3 1410 5281 -13988 6 1411 5281 -1398e 4 1418 5281 -13992 1b 1421 5281 -139ad 9 1424 5281 -139b6 9 1428 5281 -139bf 1c 1438 5281 -139db 2 1445 5281 -139dd 7 1446 5281 -139e4 1 1449 5281 -139e5 c 1452 5281 -139f1 3 1456 5281 -139f4 2 1458 5281 -139f6 6 1462 5281 -139fc 5 1463 5281 -13a01 3 1464 5281 -13a04 9 1465 5281 -13a0d 1e 1470 5281 -13a2b c 1475 5281 -13a37 2 1479 5281 -13a39 4 1481 5281 -13a3d 6 1484 5281 -13a43 10 1488 5281 -13a53 e 1492 5281 -13a61 2 1498 5281 -13a63 4 1502 5281 -13a67 20 1505 5281 -13a87 19 1509 5281 -13aa0 8 1514 5281 -13aa8 3 1518 5281 -13aab 6 1520 5281 -13ab1 8 1524 5281 -13ab9 4 1527 5281 -13abd e 1532 5281 -13acb 8 1536 5281 -13ad3 6 1541 5281 -13ad9 5 1542 5281 -13ade 3 1543 5281 -13ae1 8 1544 5281 -13ae9 c 1549 5281 -13af5 11 1554 5281 -13b06 6 1559 5281 -13b0c 3 1561 5281 -13b0f e 1563 5281 -13b1d 3 1564 5281 -13b20 2 1566 5281 -13b22 8 1568 5281 -13b2a 3 1569 5281 -13b2d 1c 1575 5281 -13b49 c 1580 5281 -13b55 10 1585 5281 -13b65 17 1591 5281 -13b7c 7 1595 5281 -13b83 7 1596 5281 -13b8a 16 1597 5281 -13ba0 f 1602 5281 -13baf 18 1606 5281 -13bc7 5 1608 5281 -13bcc 2 1609 5281 -13bce 4 1403 5281 -13bd2 4 1425 5281 -13bd6 4 1453 5281 -13bda 4 1485 5281 -13bde 4 1471 5281 -13be2 4 1439 5281 -13be6 4 1493 5281 -13bea 4 1537 5281 -13bee 4 1545 5281 -13bf2 4 1550 5281 -13bf6 4 1510 5281 -13bfa 4 1581 5281 -13bfe 4 1576 5281 -13c02 4 1592 5281 -13c06 5 1603 5281 -FUNC 13c0b a8 4 _set_sbh_threshold -13c0b 1 102 5281 -13c0c a 104 5281 -13c16 3 106 5281 -13c19 1 195 5281 -13c1a a 109 5281 -13c24 25 112 5281 -13c49 5 113 5281 -13c4e 4 114 5281 -13c52 2 195 5281 -13c54 6 173 5281 -13c5a 2 175 5281 -13c5c 5 179 5281 -13c61 2d 185 5281 -13c8e 6 186 5281 -13c94 a 187 5281 -13c9e 5 188 5281 -13ca3 b 193 5281 -13cae 4 194 5281 -13cb2 1 195 5281 -FUNC 13cb3 2e3 4 __sbh_alloc_block -13cb3 6 632 5281 -13cb9 5 633 5281 -13cbe 15 650 5281 -13cd3 5 668 5281 -13cd8 7 669 5281 -13cdf 5 671 5281 -13ce4 4 672 5281 -13ce8 2 674 5281 -13cea d 677 5281 -13cf7 a 682 5281 -13d01 e 686 5281 -13d0f 3 688 5281 -13d12 2 683 5281 -13d14 5 688 5281 -13d19 4 692 5281 -13d1d 8 694 5281 -13d25 e 698 5281 -13d33 3 700 5281 -13d36 2 695 5281 -13d38 5 700 5281 -13d3d 6 705 5281 -13d43 6 709 5281 -13d49 6 711 5281 -13d4f 4 707 5281 -13d53 4 715 5281 -13d57 8 717 5281 -13d5f 6 720 5281 -13d65 3 722 5281 -13d68 2 718 5281 -13d6a 5 722 5281 -13d6f 4 726 5281 -13d73 e 727 5281 -13d81 7 728 5281 -13d88 12 733 5281 -13d9a 2 734 5281 -13d9c 6 737 5281 -13da2 3 739 5281 -13da5 2 740 5281 -13da7 1c 745 5281 -13dc3 4 749 5281 -13dc7 14 751 5281 -13ddb e 752 5281 -13de9 3 751 5281 -13dec 12 754 5281 -13dfe a 760 5281 -13e08 d 763 5281 -13e15 2 768 5281 -13e17 2 767 5281 -13e19 1 768 5281 -13e1a 4 765 5281 -13e1e 7 770 5281 -13e25 5 775 5281 -13e2a 6 776 5281 -13e30 8 777 5281 -13e38 3 778 5281 -13e3b 8 781 5281 -13e43 8 784 5281 -13e4b 3 788 5281 -13e4e e 791 5281 -13e5c 15 792 5281 -13e71 8 793 5281 -13e79 2 795 5281 -13e7b f 798 5281 -13e8a f 799 5281 -13e99 e 800 5281 -13ea7 1c 809 5281 -13ec3 6 813 5281 -13ec9 3 814 5281 -13ecc 6 815 5281 -13ed2 3 816 5281 -13ed5 6 817 5281 -13edb 8 820 5281 -13ee3 18 826 5281 -13efb b 827 5281 -13f06 10 829 5281 -13f16 2 831 5281 -13f18 6 833 5281 -13f1e d 835 5281 -13f2b 16 837 5281 -13f41 3 831 5281 -13f44 4 844 5281 -13f48 2 846 5281 -13f4a 9 848 5281 -13f53 a 853 5281 -13f5d 4 855 5281 -13f61 e 858 5281 -13f6f 13 862 5281 -13f82 7 863 5281 -13f89 5 866 5281 -13f8e 6 868 5281 -13f94 2 869 5281 -FUNC 13f96 72 4 _fclose_nolock -13f96 2 86 1752 -13f98 2a 90 1752 -13fc2 6 96 1752 -13fc8 6 105 1752 -13fce 8 106 1752 -13fd6 13 108 1752 -13fe9 5 109 1752 -13fee 7 111 1752 -13ff5 7 120 1752 -13ffc 3 121 1752 -13fff 3 126 1752 -14002 5 127 1752 -14007 1 128 1752 -FUNC 14008 7c 4 fclose -14008 c 44 1752 -14014 4 45 1752 -14018 2d 47 1752 -14045 6 50 1752 -1404b 3 51 1752 -1404e 3 64 1752 -14051 6 65 1752 -14057 7 55 1752 -1405e 3 56 1752 -14061 a 57 1752 -1406b 11 59 1752 -1407c 8 60 1752 -FUNC 14084 d 8 _ValidateRead(void const *,unsigned int) -14084 0 63 5683 -14084 3 64 5683 -14087 7 65 5683 -1408e 2 68 5683 -14090 1 71 5683 -FUNC 14091 d 8 _ValidateWrite(void *,unsigned int) -14091 0 74 5683 -14091 3 75 5683 -14094 7 76 5683 -1409b 2 79 5683 -1409d 1 82 5683 -FUNC 1409e d 4 _ValidateExecute(int (*)(void)) -1409e 0 85 5683 -1409e 3 86 5683 -140a1 7 87 5683 -140a8 2 90 5683 -140aa 1 93 5683 -FUNC 140ab f3 0 abort -140ab 1b 53 4119 -140c6 a 56 4119 -140d0 8 59 4119 -140d8 5 68 4119 -140dd 4 69 4119 -140e1 8 71 4119 -140e9 d 78 4119 -140f6 6 87 4119 -140fc 6 88 4119 -14102 6 89 4119 -14108 3 90 4119 -1410b 3 91 4119 -1410e 3 92 4119 -14111 7 93 4119 -14118 7 94 4119 -1411f 4 95 4119 -14123 4 96 4119 -14127 4 97 4119 -1412b 4 98 4119 -1412f 1 99 4119 -14130 6 100 4119 -14136 6 106 4119 -1413c 19 107 4119 -14155 3 109 4119 -14158 13 117 4119 -1416b 9 122 4119 -14174 3 123 4119 -14177 15 126 4119 -1418c a 128 4119 -14196 8 137 4119 -FUNC 1419e 1e 8 _set_abort_behavior -1419e 0 158 4119 -1419e 1d 160 4119 -141bb 1 162 4119 -FUNC 141bc 20 0 _global_unwind2 -FUNC 141dc 45 0 __unwind_handler -FUNC 14221 84 0 _local_unwind2 -FUNC 142a5 23 0 _abnormal_termination -FUNC 142c8 9 0 _NLG_Notify1 -FUNC 142d1 1f 0 _NLG_Notify -PUBLIC 142e8 0 _NLG_Dispatch2 -FUNC 142f0 3 0 _NLG_Call -PUBLIC 142f2 0 _NLG_Return2 -FUNC 142f3 a3 4 _msize -142f3 c 43 5383 -142ff 2d 47 5383 -1432c 9 51 5383 -14335 8 55 5383 -1433d 3 56 5383 -14340 e 57 5383 -1434e e 59 5383 -1435c c 61 5383 -14368 5 64 5383 -1436d 10 88 5383 -1437d 2 91 5383 -1437f 6 93 5383 -14385 8 61 5383 -1438d 9 62 5383 -FUNC 14396 6 0 HeapManager::Block::Block() -14396 6 90 5771 -FUNC 1439c 1b 8 HeapManager::Constructor(void * (*)(unsigned int),void (*)(void *)) -1439c 6 100 5771 -143a2 7 101 5771 -143a9 5 102 5771 -143ae 3 103 5771 -143b1 3 104 5771 -143b4 3 105 5771 -FUNC 143b7 26 0 HeapManager::Destructor() -143b7 9 110 5771 -143c0 2 111 5771 -143c2 5 113 5771 -143c7 15 115 5771 -143dc 1 118 5771 -FUNC 143dd 63 0 UnDecorator::getNumberOfDimensions() -143dd 0 1663 5771 -143dd c 1664 5771 -143e9 2 1665 5771 -143eb 1 1696 5771 -143ec a 1666 5771 -143f6 d 1667 5771 -14403 1 1696 5771 -14404 4 1670 5771 -14408 4 1677 5771 -1440c a 1679 5771 -14416 6 1680 5771 -1441c d 1684 5771 -14429 5 1675 5771 -1442e e 1690 5771 -1443c 3 1691 5771 -1443f 1 1696 5771 -FUNC 14440 474 0 UnDecorator::getTypeEncoding() -14440 f 2335 5771 -1444f 2 2336 5771 -14451 5 2341 5771 -14456 9 2345 5771 -1445f c 2351 5771 -1446b 9 2423 5771 -14474 2 2426 5771 -14476 2a 2427 5771 -144a0 8 2450 5771 -144a8 2 2451 5771 -144aa 24 2454 5771 -144ce 7 2462 5771 -144d5 5 2463 5771 -144da 6 2353 5771 -144e0 8 2358 5771 -144e8 b 2362 5771 -144f3 5 2363 5771 -144f8 2 2364 5771 -144fa 5 2365 5771 -144ff 9 2369 5771 -14508 1b 2373 5771 -14523 11 2377 5771 -14534 a 2393 5771 -1453e 10 2388 5771 -1454e 2 2389 5771 -14550 18 2384 5771 -14568 2 2385 5771 -1456a 12 2380 5771 -1457c 16 2399 5771 -14592 11 2418 5771 -145a3 a 2406 5771 -145ad 5 2407 5771 -145b2 15 2410 5771 -145c7 5 2422 5771 -145cc 1b 2427 5771 -145e7 a 2430 5771 -145f1 5 2431 5771 -145f6 7 2472 5771 -145fd a 2478 5771 -14607 c 2483 5771 -14613 5 2485 5771 -14618 5 2486 5771 -1461d 5 2487 5771 -14622 5 2490 5771 -14627 5 2505 5771 -1462c 5 2508 5771 -14631 5 2509 5771 -14636 5 2434 5771 -1463b 5 2435 5771 -14640 1a 2427 5771 -1465a 30 2568 5771 -1468a 5 2529 5771 -1468f 4 2530 5771 -14693 a 2531 5771 -1469d 2 2532 5771 -1469f a 2533 5771 -146a9 5 2537 5771 -146ae 5 2538 5771 -146b3 2 2539 5771 -146b5 5 2540 5771 -146ba e 2544 5771 -146c8 6 2560 5771 -146ce 10 2555 5771 -146de 2 2556 5771 -146e0 18 2551 5771 -146f8 2 2552 5771 -146fa 12 2547 5771 -1470c 2 2564 5771 -1470e a 2442 5771 -14718 2 2443 5771 -1471a a 2438 5771 -14724 2 2439 5771 -14726 5 2445 5771 -1472b c 2574 5771 -14737 14 2577 5771 -1474b a 2579 5771 -14755 18 2586 5771 -1476d 1a 2589 5771 -14787 1b 2590 5771 -147a2 5 2591 5771 -147a7 1a 2594 5771 -147c1 1b 2595 5771 -147dc 5 2596 5771 -147e1 1a 2599 5771 -147fb 10 2600 5771 -1480b 2 2601 5771 -1480d 7 2604 5771 -14814 2 2605 5771 -14816 a 2608 5771 -14820 2 2609 5771 -14822 a 2612 5771 -1482c 2 2613 5771 -1482e a 2616 5771 -14838 2 2617 5771 -1483a a 2620 5771 -14844 2 2621 5771 -14846 a 2624 5771 -14850 7 2634 5771 -14857 7 2635 5771 -1485e 7 2637 5771 -14865 10 2639 5771 -14875 3f 2648 5771 -FUNC 148b4 b 0 UnDecorator::doUnderScore() -148b4 b 4259 5771 -FUNC 148bf d 0 UnDecorator::doMSKeywords() -148bf d 4260 5771 -FUNC 148cc e 0 UnDecorator::doPtr64() -148cc e 4261 5771 -FUNC 148da e 0 UnDecorator::doFunctionReturns() -148da e 4262 5771 -FUNC 148e8 e 0 UnDecorator::doAllocationModel() -148e8 e 4263 5771 -FUNC 148f6 e 0 UnDecorator::doAllocationLanguage() -148f6 e 4264 5771 -FUNC 14904 12 0 UnDecorator::doThisTypes() -14904 12 4271 5771 -FUNC 14916 e 0 UnDecorator::doAccessSpecifiers() -14916 e 4272 5771 -FUNC 14924 e 0 UnDecorator::doThrowTypes() -14924 e 4273 5771 -FUNC 14932 e 0 UnDecorator::doMemberTypes() -14932 e 4274 5771 -FUNC 14940 b 0 UnDecorator::doNameOnly() -14940 b 4279 5771 -FUNC 1494b b 0 UnDecorator::doTypeOnly() -1494b b 4280 5771 -FUNC 14956 b 0 UnDecorator::haveTemplateParameters() -14956 b 4281 5771 -FUNC 14961 e 0 UnDecorator::doEcsu() -14961 e 4282 5771 -FUNC 1496f b 0 UnDecorator::doNoIdentCharCheck() -1496f b 4283 5771 -FUNC 1497a e 0 UnDecorator::doEllipsis() -1497a e 4284 5771 -FUNC 14988 19 4 UnDecorator::UScore(Tokens) -14988 0 4288 5771 -14988 9 4293 5771 -14991 d 4294 5771 -1499e 2 4296 5771 -149a0 1 4298 5771 -FUNC 149a1 84 8 HeapManager::getMemory(unsigned int,int) -149a1 2 134 5804 -149a3 a 137 5804 -149ad 9 139 5804 -149b6 6 140 5804 -149bc 4 146 5804 -149c0 3 147 5804 -149c3 8 149 5804 -149cb 7 153 5804 -149d2 2 154 5804 -149d4 1c 159 5804 -149f0 4 164 5804 -149f4 7 168 5804 -149fb 2 169 5804 -149fd 2 170 5804 -149ff 3 171 5804 -14a02 8 175 5804 -14a0a 2 182 5804 -14a0c 4 179 5804 -14a10 5 183 5804 -14a15 d 187 5804 -14a22 3 190 5804 -FUNC 14a25 d 0 DName::DName() -14a25 2 210 5804 -14a27 3 211 5804 -14a2a 7 220 5804 -14a31 1 221 5804 -FUNC 14a32 12 4 DName::DName(DNameNode *) -14a32 2 224 5804 -14a34 4 225 5804 -14a38 9 234 5804 -14a41 3 235 5804 -FUNC 14a44 9c 4 DName::DName(DName const &) -14a44 2 259 5804 -14a46 17 260 5804 -14a5d 10 261 5804 -14a6d d 262 5804 -14a7a d 263 5804 -14a87 10 264 5804 -14a97 4 265 5804 -14a9b e 266 5804 -14aa9 13 267 5804 -14abc 10 268 5804 -14acc 11 269 5804 -14add 3 270 5804 -FUNC 14ae0 a 0 DName::status() -14ae0 a 481 5804 -FUNC 14aea 5 0 DName::clearStatus() -14aea 5 482 5804 -FUNC 14aef 7 0 DName::setPtrRef() -14aef 7 484 5804 -FUNC 14af6 a 0 DName::isPtrRef() -14af6 a 485 5804 -FUNC 14b00 8 0 DName::setIsArray() -14b00 8 490 5804 -FUNC 14b08 a 0 DName::isArray() -14b08 a 491 5804 -FUNC 14b12 a 0 DName::isNoTE() -14b12 a 492 5804 -FUNC 14b1c 8 0 DName::setIsNoTE() -14b1c 8 493 5804 -FUNC 14b24 a 0 DName::isPinPtr() -14b24 a 494 5804 -FUNC 14b2e 8 0 DName::setIsPinPtr() -14b2e 8 495 5804 -FUNC 14b36 a 0 DName::isComArray() -14b36 a 496 5804 -FUNC 14b40 8 0 DName::setIsComArray() -14b40 8 497 5804 -FUNC 14b48 a 0 DName::isVCallThunk() -14b48 a 498 5804 -FUNC 14b52 8 0 DName::setIsVCallThunk() -14b52 8 499 5804 -FUNC 14b5a 7b 4 DName::operator=(DName const &) -14b5a 3 879 5804 -14b5d 12 880 5804 -14b6f 17 882 5804 -14b86 d 883 5804 -14b93 d 884 5804 -14ba0 d 885 5804 -14bad 10 886 5804 -14bbd 10 887 5804 -14bcd 5 889 5804 -14bd2 3 897 5804 -FUNC 14bd5 9 0 Replicator::isFull() -14bd5 9 1001 5804 -FUNC 14bde 25 4 Replicator::operator[](int) -14bde 0 1028 5804 -14bde 9 1029 5804 -14be7 b 1031 5804 -14bf2 6 1034 5804 -14bf8 5 1032 5804 -14bfd 3 1030 5804 -14c00 3 1036 5804 -FUNC 14c03 d 0 DNameNode::DNameNode() -14c03 d 1048 5804 -FUNC 14c10 4 0 DNameNode::nextNode() -14c10 4 1052 5804 -FUNC 14c14 29 4 DNameNode::operator+=(DNameNode *) -14c14 2 1131 5804 -14c16 8 1132 5804 -14c1e 8 1134 5804 -14c26 b 1139 5804 -14c31 4 1144 5804 -14c35 2 1147 5804 -14c37 3 1148 5804 -14c3a 3 1156 5804 -FUNC 14c3d 16 4 charNode::charNode(char) -14c3d 16 1166 5804 -FUNC 14c53 4 0 charNode::length() -14c53 4 1168 5804 -FUNC 14c57 4 0 charNode::getLastChar() -14c57 4 1170 5804 -FUNC 14c5b 1b 8 charNode::getString(char *,int) -14c5b 0 1173 5804 -14c5b f 1174 5804 -14c6a 5 1175 5804 -14c6f 2 1176 5804 -14c71 2 1177 5804 -14c73 3 1183 5804 -FUNC 14c76 4 0 pcharNode::length() -14c76 4 1189 5804 -FUNC 14c7a 2f 4 pDNameNode::pDNameNode(DName *) -14c7a 2f 1244 5804 -FUNC 14ca9 25 4 DNameStatusNode::DNameStatusNode(DNameStatus) -14ca9 25 1261 5804 -FUNC 14cce 4 0 DNameStatusNode::length() -14cce 4 1263 5804 -FUNC 14cd2 d 0 DNameStatusNode::getLastChar() -14cd2 d 1266 5804 -FUNC 14cdf e 0 und_strlen -14cdf 0 1283 5804 -14cdf 6 1286 5804 -14ce5 7 1287 5804 -14cec 1 1291 5804 -FUNC 14ced 20 8 und_strncpy -14ced 0 1295 5804 -14ced 1b 1296 5804 -14d08 4 1299 5804 -14d0c 1 1301 5804 -FUNC 14d0d 25 4 und_strncmp -14d0d 0 1304 5804 -14d0d 7 1305 5804 -14d14 2 1306 5804 -14d16 1 1315 5804 -14d17 a 1308 5804 -14d21 1 1310 5804 -14d22 1 1311 5804 -14d23 6 1308 5804 -14d29 8 1314 5804 -14d31 1 1315 5804 -FUNC 14d32 33 0 UnDecorator::getDataIndirectType() -14d32 33 4033 5771 -FUNC 14d65 34 0 UnDecorator::getThisType() -14d65 34 4034 5771 -FUNC 14d99 13 c operator new(unsigned int,HeapManager &,int) -14d99 13 131 5804 -FUNC 14dac 56 4 DName::DName(DName *) -14dac 0 274 5804 -14dac a 275 5804 -14db6 23 277 5804 -14dd9 13 278 5804 -14dec 2 281 5804 -14dee 4 283 5804 -14df2 3 284 5804 -14df5 7 295 5804 -14dfc 6 296 5804 -FUNC 14e02 61 4 DName::DName(DNameStatus) -14e02 2 457 5804 -14e04 21 458 5804 -14e25 1e 459 5804 -14e43 7 467 5804 -14e4a 9 469 5804 -14e53 a 470 5804 -14e5d 6 472 5804 -FUNC 14e63 17 0 DName::isValid() -14e63 17 478 5804 -FUNC 14e7a 15 0 DName::isEmpty() -14e7a 15 479 5804 -FUNC 14e8f 14 0 DName::isUDC() -14e8f 14 486 5804 -FUNC 14ea3 e 0 DName::setIsUDC() -14ea3 e 487 5804 -FUNC 14eb1 14 0 DName::isUDTThunk() -14eb1 14 488 5804 -FUNC 14ec5 25 0 DName::length() -14ec5 1 502 5804 -14ec6 2 503 5804 -14ec8 a 506 5804 -14ed2 4 507 5804 -14ed6 b 508 5804 -14ee1 5 507 5804 -14ee6 3 510 5804 -14ee9 1 512 5804 -FUNC 14eea 38 0 DName::getLastChar() -14eea 2 516 5804 -14eec 2 517 5804 -14eee 9 519 5804 -14ef7 6 520 5804 -14efd a 521 5804 -14f07 2 522 5804 -14f09 7 520 5804 -14f10 11 524 5804 -14f21 1 526 5804 -FUNC 14f22 91 8 DName::getString(char *,int) -14f22 7 530 5804 -14f29 9 531 5804 -14f32 5 535 5804 -14f37 7 537 5804 -14f3e e 538 5804 -14f4c c 544 5804 -14f58 d 550 5804 -14f65 4 553 5804 -14f69 8 555 5804 -14f71 4 561 5804 -14f75 6 565 5804 -14f7b 2 566 5804 -14f7d b 570 5804 -14f88 4 574 5804 -14f8c 2 578 5804 -14f8e 3 579 5804 -14f91 3 586 5804 -14f94 4 553 5804 -14f98 4 590 5804 -14f9c 2 593 5804 -14f9e 6 594 5804 -14fa4 6 595 5804 -14faa 5 599 5804 -14faf 4 601 5804 -FUNC 14fb3 35 4 DName::operator|=(DName const &) -14fb3 3 832 5804 -14fb6 19 835 5804 -14fcf 13 836 5804 -14fe2 3 840 5804 -14fe5 3 842 5804 -FUNC 14fe8 81 4 DName::operator=(DNameStatus) -14fe8 2 928 5804 -14fea 10 929 5804 -14ffa 12 937 5804 -1500c 26 945 5804 -15032 6 947 5804 -15038 e 948 5804 -15046 10 933 5804 -15056 d 934 5804 -15063 3 954 5804 -15066 3 956 5804 -FUNC 15069 1e 0 Replicator::Replicator() -15069 1e 1004 5804 -FUNC 15087 47 4 Replicator::operator+=(DName const &) -15087 3 1009 5804 -1508a 12 1010 5804 -1509c 20 1012 5804 -150bc 4 1017 5804 -150c0 8 1018 5804 -150c8 3 1022 5804 -150cb 3 1024 5804 -FUNC 150ce 47 0 DNameNode::clone() -150ce 3 1055 5804 -150d1 43 1056 5804 -15114 1 1057 5804 -FUNC 15115 65 8 pcharNode::pcharNode(char const *,int) -15115 1 1197 5804 -15116 1f 1200 5804 -15135 c 1201 5804 -15141 8 1205 5804 -15149 c 1207 5804 -15155 a 1210 5804 -1515f b 1211 5804 -1516a 2 1214 5804 -1516c 3 1216 5804 -1516f 4 1217 5804 -15173 7 1220 5804 -FUNC 1517a 12 0 pcharNode::getLastChar() -1517a 12 1191 5804 -FUNC 1518c 31 8 pcharNode::getString(char *,int) -1518c 0 1224 5804 -1518c b 1227 5804 -15197 2 1228 5804 -15199 21 1232 5804 -151ba 3 1234 5804 -FUNC 151bd f 0 pDNameNode::length() -151bd f 1246 5804 -FUNC 151cc f 0 pDNameNode::getLastChar() -151cc f 1248 5804 -FUNC 151db 1d 8 pDNameNode::getString(char *,int) -151db 1d 1251 5804 -FUNC 151f8 33 8 DNameStatusNode::getString(char *,int) -151f8 0 1269 5804 -151f8 b 1272 5804 -15203 2 1273 5804 -15205 23 1277 5804 -15228 3 1279 5804 -FUNC 1522b 73 14 UnDecorator::UnDecorator(char *,char const *,int,char * (*)(long),unsigned long) -1522b 16 736 5771 -15241 8 737 5771 -15249 5 738 5771 -1524e 9 740 5771 -15257 a 741 5771 -15261 5 745 5771 -15266 2 747 5771 -15268 6 748 5771 -1526e 6 749 5771 -15274 8 754 5771 -1527c 15 755 5771 -15291 d 758 5771 -FUNC 1529e 2f 4 UnDecorator::getReturnType(DName *) -1529e 3 2906 5771 -152a1 8 2907 5771 -152a9 15 2911 5771 -152be d 2915 5771 -152cb 2 2917 5771 -FUNC 152cd f 0 UnDecorator::getStorageConvention() -152cd f 4032 5771 -FUNC 152dc 79 4 DName::operator+=(DNameStatus) -152dc 4 799 5804 -152e0 17 800 5804 -152f7 20 804 5804 -15317 4 807 5804 -1531b 7 809 5804 -15322 6 811 5804 -15328 8 812 5804 -15330 2 815 5804 -15332 3 816 5804 -15335 5 818 5804 -1533a e 819 5804 -15348 7 801 5804 -1534f 3 825 5804 -15352 3 827 5804 -FUNC 15355 68 4 DName::operator=(DName *) -15355 3 901 5804 -15358 12 902 5804 -1536a 7 903 5804 -15371 29 911 5804 -1539a 6 913 5804 -153a0 c 914 5804 -153ac 2 917 5804 -153ae 9 918 5804 -153b7 3 922 5804 -153ba 3 924 5804 -FUNC 153bd a6 8 DName::doPchar(char const *,int) -153bd 3 962 5804 -153c0 1e 963 5804 -153de 6 964 5804 -153e4 c 965 5804 -153f0 10 966 5804 -15400 5 970 5804 -15405 23 984 5804 -15428 6 986 5804 -1542e 9 987 5804 -15437 2 988 5804 -15439 1b 977 5804 -15454 c 993 5804 -15460 3 995 5804 -FUNC 15463 26 4 DName::DName(char) -15463 3 238 5804 -15466 3 244 5804 -15469 7 248 5804 -15470 7 252 5804 -15477 c 253 5804 -15483 6 255 5804 -FUNC 15489 31 4 DName::DName(char const *) -15489 0 300 5804 -15489 16 312 5804 -1549f 15 313 5804 -154b4 6 315 5804 -FUNC 154ba d0 8 DName::DName(char const * &,char) -154ba 7 319 5804 -154c1 d 329 5804 -154ce f 333 5804 -154dd 8 334 5804 -154e5 9 342 5804 -154ee 40 343 5804 -1552e b 344 5804 -15539 9 355 5804 -15542 8 359 5804 -1554a 8 361 5804 -15552 9 363 5804 -1555b 3 364 5804 -1555e 2 367 5804 -15560 3 347 5804 -15563 a 378 5804 -1556d 8 380 5804 -15575 6 368 5804 -1557b 7 371 5804 -15582 6 372 5804 -15588 2 375 5804 -FUNC 1558a 69 8 DName::DName(unsigned __int64) -1558a 15 384 5804 -1559f 3 390 5804 -155a2 a 398 5804 -155ac 4 402 5804 -155b0 13 406 5804 -155c3 3 407 5804 -155c6 c 409 5804 -155d2 e 411 5804 -155e0 13 413 5804 -FUNC 155f3 96 8 DName::DName(__int64) -155f3 10 416 5804 -15603 26 436 5804 -15629 15 438 5804 -1563e 10 443 5804 -1564e 5 444 5804 -15653 c 446 5804 -1565f 6 448 5804 -15665 4 449 5804 -15669 e 452 5804 -15677 12 453 5804 -FUNC 15689 2e 4 DName::operator+(DNameStatus) -15689 1 675 5804 -1568a c 676 5804 -15696 9 679 5804 -1569f b 680 5804 -156aa 2 681 5804 -156ac 5 682 5804 -156b1 3 686 5804 -156b4 3 688 5804 -FUNC 156b7 62 4 DName::operator+=(DName const &) -156b7 2 739 5804 -156b9 f 740 5804 -156c8 13 741 5804 -156db 2 742 5804 -156dd 9 743 5804 -156e6 6 744 5804 -156ec 2 745 5804 -156ee 7 747 5804 -156f5 6 749 5804 -156fb 9 750 5804 -15704 2 751 5804 -15706 d 752 5804 -15713 3 758 5804 -15716 3 760 5804 -FUNC 15719 8b 4 DName::operator+=(DName *) -15719 2 764 5804 -1571b a 765 5804 -15725 9 766 5804 -1572e 8 767 5804 -15736 10 768 5804 -15746 8 789 5804 -1574e 20 770 5804 -1576e 4 773 5804 -15772 7 775 5804 -15779 6 777 5804 -1577f 8 778 5804 -15787 2 781 5804 -15789 3 782 5804 -1578c 5 784 5804 -15791 d 785 5804 -1579e 3 793 5804 -157a1 3 795 5804 -FUNC 157a4 1c 4 DName::operator=(char) -157a4 1 847 5804 -157a5 15 854 5804 -157ba 3 856 5804 -157bd 3 858 5804 -FUNC 157c0 2a 4 DName::operator=(char const *) -157c0 0 862 5804 -157c0 24 869 5804 -157e4 3 873 5804 -157e7 3 875 5804 -FUNC 157ea a6 0 UnDecorator::getCallingConvention() -157ea 5 2825 5771 -157ef f 2826 5771 -157fe c 2828 5771 -1580a 5 2835 5771 -1580f 1a 2845 5771 -15829 20 2852 5771 -15849 2 2875 5771 -1584b 2 2876 5771 -1584d 2 2871 5771 -1584f 2 2872 5771 -15851 2 2867 5771 -15853 2 2868 5771 -15855 2 2863 5771 -15857 2 2864 5771 -15859 1 2859 5771 -1585a 2 2860 5771 -1585c 13 2855 5771 -1586f e 2891 5771 -1587d 4 2895 5771 -15881 d 2899 5771 -1588e 2 2901 5771 -FUNC 15890 37 0 UnDecorator::getVCallThunkType() -15890 3 4057 5771 -15893 9 4059 5771 -1589c 5 4066 5771 -158a1 4 4059 5771 -158a5 4 4066 5771 -158a9 6 4061 5771 -158af c 4062 5771 -158bb a 4064 5771 -158c5 2 4170 5771 -FUNC 158c7 51 4 DName::operator+(DName const &) -158c7 1 639 5804 -158c8 c 640 5804 -158d4 b 643 5804 -158df b 644 5804 -158ea d 645 5804 -158f7 11 646 5804 -15908 2 647 5804 -1590a 8 648 5804 -15912 3 652 5804 -15915 3 654 5804 -FUNC 15918 2e 4 DName::operator+(DName *) -15918 1 658 5804 -15919 c 659 5804 -15925 9 662 5804 -1592e b 663 5804 -15939 2 664 5804 -1593b 5 665 5804 -15940 3 669 5804 -15943 3 671 5804 -FUNC 15946 6a 4 DName::operator+=(char) -15946 1 693 5804 -15947 b 694 5804 -15952 9 695 5804 -1595b 6 696 5804 -15961 2 697 5804 -15963 7 699 5804 -1596a 6 701 5804 -15970 2b 702 5804 -1599b 2 703 5804 -1599d c 704 5804 -159a9 4 710 5804 -159ad 3 712 5804 -FUNC 159b0 6c 4 DName::operator+=(char const *) -159b0 2 716 5804 -159b2 f 717 5804 -159c1 9 718 5804 -159ca 6 719 5804 -159d0 2 720 5804 -159d2 7 722 5804 -159d9 6 724 5804 -159df 28 725 5804 -15a07 2 726 5804 -15a09 d 727 5804 -15a16 3 733 5804 -15a19 3 735 5804 -FUNC 15a1c e0 0 UnDecorator::getArgumentList() -15a1c 7 3076 5771 -15a23 12 3078 5771 -15a35 29 3081 5771 -15a5e 6 3085 5771 -15a64 4 3086 5771 -15a68 2 3087 5771 -15a6a e 3088 5771 -15a78 6 3093 5771 -15a7e 6 3095 5771 -15a84 5 3100 5771 -15a89 1 3102 5771 -15a8a 11 3106 5771 -15a9b 2 3109 5771 -15a9d 16 3116 5771 -15ab3 19 3121 5771 -15acc 9 3122 5771 -15ad5 17 3126 5771 -15aec b 3132 5771 -15af7 3 3141 5771 -15afa 2 3143 5771 -FUNC 15afc 4f 4 UnDecorator::getVdispMapType(DName const &) -15afc 6 4230 5771 -15b02 d 4231 5771 -15b0f c 4232 5771 -15b1b 12 4233 5771 -15b2d 9 4234 5771 -15b36 a 4236 5771 -15b40 6 4237 5771 -15b46 3 4238 5771 -15b49 2 4239 5771 -FUNC 15b4b 22 8 operator+(char,DName const &) -15b4b 22 198 5804 -FUNC 15b6d 22 8 operator+(DNameStatus,DName const &) -15b6d 22 201 5804 -FUNC 15b8f 22 8 operator+(char const *,DName const &) -15b8f 22 204 5804 -FUNC 15bb1 2e 4 DName::operator+(char) -15bb1 1 605 5804 -15bb2 c 606 5804 -15bbe 9 609 5804 -15bc7 b 610 5804 -15bd2 2 611 5804 -15bd4 5 612 5804 -15bd9 3 616 5804 -15bdc 3 618 5804 -FUNC 15bdf 2e 4 DName::operator+(char const *) -15bdf 1 622 5804 -15be0 c 623 5804 -15bec 9 626 5804 -15bf5 b 627 5804 -15c00 2 628 5804 -15c02 5 629 5804 -15c07 3 633 5804 -15c0a 3 635 5804 -FUNC 15c0d 141 4 UnDecorator::getDimension(bool) -15c0d 7 1616 5771 -15c14 10 1618 5771 -15c24 e 1620 5771 -15c32 6 1623 5771 -15c38 f 1624 5771 -15c47 8 1625 5771 -15c4f 47 1626 5771 -15c96 4 1629 5771 -15c9a 4 1636 5771 -15c9e 8 1638 5771 -15ca6 20 1639 5771 -15cc6 d 1643 5771 -15cd3 4 1634 5771 -15cd7 b 1649 5771 -15ce2 2 1650 5771 -15ce4 5 1652 5771 -15ce9 13 1653 5771 -15cfc c 1637 5771 -15d08 4 1641 5771 -15d0c a 1653 5771 -15d16 36 1655 5771 -15d4c 2 1659 5771 -FUNC 15d4e d4 0 UnDecorator::getEnumType() -15d4e 6 2762 5771 -15d54 1a 2766 5771 -15d6e 12 2770 5771 -15d80 5 2774 5771 -15d85 2 2775 5771 -15d87 5 2779 5771 -15d8c 2 2780 5771 -15d8e 5 2786 5771 -15d93 2 2787 5771 -15d95 d 2791 5771 -15da2 1f 2801 5771 -15dc1 1e 2807 5771 -15ddf e 2814 5771 -15ded 4 2795 5771 -15df1 d 2818 5771 -15dfe 24 2820 5771 -FUNC 15e22 c4 0 UnDecorator::getArgumentTypes() -15e22 3 3035 5771 -15e25 18 3036 5771 -15e3d 9 3046 5771 -15e46 7 3051 5771 -15e4d 13 3052 5771 -15e60 c 3064 5771 -15e6c 36 3058 5771 -15ea2 b 3061 5771 -15ead 21 3039 5771 -15ece 16 3042 5771 -15ee4 2 3072 5771 -FUNC 15ee6 7e 0 UnDecorator::getThrowTypes() -15ee6 3 3148 5771 -15ee9 e 3149 5771 -15ef7 2 3150 5771 -15ef9 21 3151 5771 -15f1a 1f 3153 5771 -15f39 29 3155 5771 -15f62 2 3157 5771 -FUNC 15f64 125 c UnDecorator::getExtendedDataIndirectType(char &,bool &,int) -15f64 6 3636 5771 -15f6a 1a 3641 5771 -15f84 1c 3643 5771 -15fa0 a 3669 5771 -15faa 6 3670 5771 -15fb0 b 3672 5771 -15fbb a 3674 5771 -15fc5 21 3675 5771 -15fe6 17 3678 5771 -15ffd a 3680 5771 -16007 6 3689 5771 -1600d 2 3691 5771 -1600f 17 3693 5771 -16026 1e 3700 5771 -16044 6 3663 5771 -1604a 2 3665 5771 -1604c 3 3656 5771 -1604f d 3657 5771 -1605c 2 3659 5771 -1605e 6 3647 5771 -16064 13 3649 5771 -16077 10 3703 5771 -16087 2 3704 5771 -FUNC 16089 15f 4 UnDecorator::getArrayType(DName const &) -16089 3 3986 5771 -1608c 12 3987 5771 -1609e 7 3989 5771 -160a5 4 3991 5771 -160a9 2 3992 5771 -160ab 4 3994 5771 -160af 9 3995 5771 -160b8 2a 4026 5771 -160e2 2 4028 5771 -160e4 c 3998 5771 -160f0 9 4000 5771 -160f9 d 4001 5771 -16106 35 4005 5771 -1613b b 4009 5771 -16146 4 4010 5771 -1614a 8 4011 5771 -16152 2 4012 5771 -16154 2c 4013 5771 -16180 d 4017 5771 -1618d 9 4018 5771 -16196 12 4019 5771 -161a8 a 4023 5771 -161b2 36 4024 5771 -FUNC 161e8 31 0 UnDecorator::getLexicalFrame() -161e8 31 4031 5771 -FUNC 16219 12 0 UnDecorator::getDisplacement() -16219 12 4048 5771 -FUNC 1622b 12 0 UnDecorator::getCallIndex() -1622b 12 4049 5771 -FUNC 1623d 12 0 UnDecorator::getGuardNumber() -1623d 12 4050 5771 -FUNC 1624f 150 4 UnDecorator::getVfTableType(DName const &) -1624f 7 4174 5771 -16256 d 4175 5771 -16263 1d 4178 5771 -16280 2c 4180 5771 -162ac f 4182 5771 -162bb e 4184 5771 -162c9 5 4186 5771 -162ce 11 4188 5771 -162df 2d 4190 5771 -1630c b 4194 5771 -16317 7 4195 5771 -1631e 10 4199 5771 -1632e a 4200 5771 -16338 b 4188 5771 -16343 b 4204 5771 -1634e a 4206 5771 -16358 7 4207 5771 -1635f 9 4209 5771 -16368 a 4216 5771 -16372 6 4217 5771 -16378 2 4220 5771 -1637a 9 4221 5771 -16383 17 4222 5771 -1639a 3 4224 5771 -1639d 2 4226 5771 -FUNC 1639f a0 8 UnDecorator::getStringEncoding(char *,int) -1639f 6 1447 5771 -163a5 b 1448 5771 -163b0 22 1451 5771 -163d2 6 1456 5771 -163d8 b 1459 5771 -163e3 b 1462 5771 -163ee 13 1464 5771 -16401 c 1466 5771 -1640d 5 1469 5771 -16412 6 1470 5771 -16418 4 1471 5771 -1641c 14 1477 5771 -16430 d 1452 5771 -1643d 2 1478 5771 -FUNC 1643f 50 0 UnDecorator::getSignedDimension() -1643f 5 1603 5771 -16444 b 1604 5771 -1644f c 1605 5771 -1645b 2 1606 5771 -1645d 23 1608 5771 -16480 d 1611 5771 -1648d 2 1612 5771 -FUNC 1648f 2bb 0 UnDecorator::getTemplateConstant() -1648f 15 1877 5771 -164a4 f 1884 5771 -164b3 32 1885 5771 -164e5 9 1921 5771 -164ee b 1922 5771 -164f9 20 1924 5771 -16519 12 1931 5771 -1652b e 1932 5771 -16539 3 1937 5771 -1653c 7 1939 5771 -16543 6 1941 5771 -16549 4 1942 5771 -1654d 2 1944 5771 -1654f 4 1945 5771 -16553 2a 1950 5771 -1657d a 1900 5771 -16587 6 1902 5771 -1658d 11 1903 5771 -1659e 1b 1906 5771 -165b9 b 1892 5771 -165c4 6 2034 5771 -165ca 7 1954 5771 -165d1 26 1885 5771 -165f7 b 1990 5771 -16602 c 1991 5771 -1660e 10 1992 5771 -1661e 9 1966 5771 -16627 c 1968 5771 -16633 e 1971 5771 -16641 10 1973 5771 -16651 6 1975 5771 -16657 6 1976 5771 -1665d 3 1980 5771 -16660 29 1981 5771 -16689 a 1983 5771 -16693 a 2001 5771 -1669d a 2003 5771 -166a7 13 2007 5771 -166ba a 2008 5771 -166c4 11 2012 5771 -166d5 13 2015 5771 -166e8 a 2016 5771 -166f2 13 2021 5771 -16705 a 2022 5771 -1670f 13 2026 5771 -16722 d 2029 5771 -1672f 7 1913 5771 -16736 14 2041 5771 -FUNC 1674a d9 8 UnDecorator::getPtrRefDataType(DName const &,int) -1674a 3 3937 5771 -1674d 11 3940 5771 -1675e b 3944 5771 -16769 12 3948 5771 -1677b 12 3949 5771 -1678d 10 3951 5771 -1679d 5 3957 5771 -167a2 16 3961 5771 -167b8 d 3967 5771 -167c5 c 3968 5771 -167d1 b 3970 5771 -167dc 6 3972 5771 -167e2 1e 3974 5771 -16800 e 3976 5771 -1680e 13 3980 5771 -16821 2 3982 5771 -FUNC 16823 14 4 UnDecorator::getVbTableType(DName const &) -16823 14 4053 5771 -FUNC 16837 1b8 0 UnDecorator::getTemplateArgumentList() -16837 14 1775 5771 -1684b c 1777 5771 -16857 7 1778 5771 -1685e 2a 1781 5771 -16888 6 1785 5771 -1688e 4 1786 5771 -16892 2 1787 5771 -16894 e 1788 5771 -168a2 8 1793 5771 -168aa 5 1798 5771 -168af 1 1800 5771 -168b0 11 1804 5771 -168c1 5 1807 5771 -168c6 7 1810 5771 -168cd 7 1816 5771 -168d4 6 1817 5771 -168da 12 1818 5771 -168ec a 1820 5771 -168f6 5 1821 5771 -168fb e 1822 5771 -16909 5 1824 5771 -1690e 9 1830 5771 -16917 c 1832 5771 -16923 e 1835 5771 -16931 10 1837 5771 -16941 6 1839 5771 -16947 1 1840 5771 -16948 2 1842 5771 -1694a 25 1843 5771 -1696f 2 1846 5771 -16971 10 1847 5771 -16981 2 1850 5771 -16983 1f 1851 5771 -169a2 17 1857 5771 -169b9 9 1858 5771 -169c2 16 1862 5771 -169d8 17 1873 5771 -FUNC 169ef 56f 8 UnDecorator::getOperatorName(bool,bool *) -169ef b 1095 5771 -169fa 53 1103 5771 -16a4d 13 1183 5771 -16a60 c 1439 5771 -16a6c 1d 1440 5771 -16a89 11 1442 5771 -16a9a 5 1444 5771 -16a9f 3 1124 5771 -16aa2 8 1126 5771 -16aaa 21 1127 5771 -16acb c 1129 5771 -16ad7 a 1130 5771 -16ae1 a 1133 5771 -16aeb 7 1135 5771 -16af2 3 1136 5771 -16af5 9 1144 5771 -16afe 5 1145 5771 -16b03 6 1148 5771 -16b09 2 1154 5771 -16b0b 15 1156 5771 -16b20 18 1160 5771 -16b38 1a 1161 5771 -16b52 10 1166 5771 -16b62 b 1167 5771 -16b6d 5 1170 5771 -16b72 6 1106 5771 -16b78 f 1108 5771 -16b87 21 1103 5771 -16ba8 3d 1220 5771 -16be5 18 1240 5771 -16bfd b 1234 5771 -16c08 5 1235 5771 -16c0d 13 1245 5771 -16c20 7 1247 5771 -16c27 8 1249 5771 -16c2f 18 1220 5771 -16c47 13 1255 5771 -16c5a 7 1256 5771 -16c61 2 1257 5771 -16c63 16 1335 5771 -16c79 7 1356 5771 -16c80 6 1350 5771 -16c86 2 1352 5771 -16c88 25 1220 5771 -16cad 13 1290 5771 -16cc0 17 1291 5771 -16cd7 24 1292 5771 -16cfb 14 1313 5771 -16d0f 6 1316 5771 -16d15 5 1317 5771 -16d1a 10 1302 5771 -16d2a 20 1303 5771 -16d4a 20 1304 5771 -16d6a 20 1305 5771 -16d8a 22 1306 5771 -16dac 12 1307 5771 -16dbe c 1296 5771 -16dca 2b 1297 5771 -16df5 13 1281 5771 -16e08 17 1282 5771 -16e1f 1a 1283 5771 -16e39 5 1284 5771 -16e3e 2d 1220 5771 -16e6b 25 1364 5771 -16e90 10 1373 5771 -16ea0 13 1378 5771 -16eb3 a 1397 5771 -16ebd 13 1399 5771 -16ed0 a 1403 5771 -16eda 6 1405 5771 -16ee0 2 1408 5771 -16ee2 13 1410 5771 -16ef5 d 1413 5771 -16f02 5 1415 5771 -16f07 10 1278 5771 -16f17 b 1330 5771 -16f22 5 1428 5771 -16f27 3 1187 5771 -16f2a 13 1216 5771 -16f3d 8 1437 5771 -16f45 19 1438 5771 -FUNC 16f5e 153 4 UnDecorator::getTemplateName(bool) -16f5e 5 1700 5771 -16f63 1f 1704 5771 -16f82 16 1714 5771 -16f98 1d 1716 5771 -16fb5 23 1725 5771 -16fd8 e 1729 5771 -16fe6 6 1730 5771 -16fec 12 1732 5771 -16ffe 2 1734 5771 -17000 16 1735 5771 -17016 c 1738 5771 -17022 7 1739 5771 -17029 6 1746 5771 -1702f 21 1747 5771 -17050 c 1749 5771 -1705c a 1750 5771 -17066 a 1753 5771 -17070 6 1755 5771 -17076 6 1756 5771 -1707c 23 1769 5771 -1709f d 1705 5771 -170ac 5 1771 5771 -FUNC 170b1 1ea 4 UnDecorator::getZName(bool) -170b1 10 1007 5771 -170c1 11 1008 5771 -170d2 3 1013 5771 -170d5 26 1043 5771 -170fb b 1024 5771 -17106 5 1026 5771 -1710b 16 1028 5771 -17121 16 1030 5771 -17137 17 1031 5771 -1714e 7 1033 5771 -17155 25 1040 5771 -1717a 5 1042 5771 -1717f 29 1043 5771 -171a8 8 1045 5771 -171b0 b 1051 5771 -171bb c 1053 5771 -171c7 e 1056 5771 -171d5 10 1058 5771 -171e5 4 1060 5771 -171e9 b 1061 5771 -171f4 2 1063 5771 -171f6 a 1064 5771 -17200 10 1065 5771 -17210 2 1068 5771 -17212 d 1069 5771 -1721f 2a 1070 5771 -17249 2 1073 5771 -1724b 1a 1076 5771 -17265 11 1083 5771 -17276 9 1084 5771 -1727f f 1087 5771 -1728e d 1090 5771 -FUNC 1729b e4 0 UnDecorator::getScopedName() -1729b 7 2727 5771 -172a2 e 2728 5771 -172b0 15 2733 5771 -172c5 1a 2737 5771 -172df 2a 2738 5771 -17309 b 2742 5771 -17314 8 2743 5771 -1731c 4 2744 5771 -17320 1b 2745 5771 -1733b b 2746 5771 -17346 7 2747 5771 -1734d 2 2748 5771 -1734f 2b 2749 5771 -1737a 3 2753 5771 -1737d 2 2755 5771 -FUNC 1737f f 0 UnDecorator::getECSUName() -1737f f 2758 5771 -FUNC 1738e 100 0 UnDecorator::getECSUDataType() -1738e 3 3392 5771 -17391 20 3395 5771 -173b1 37 3399 5771 -173e8 5 3424 5771 -173ed 2 3425 5771 -173ef 5 3420 5771 -173f4 2 3421 5771 -173f6 26 3431 5771 -1741c 2 3432 5771 -1741e 5 3415 5771 -17423 2 3416 5771 -17425 5 3411 5771 -1742a 2 3412 5771 -1742c d 3407 5771 -17439 7 3439 5771 -17440 4 3441 5771 -17444 c 3442 5771 -17450 16 3446 5771 -17466 e 3450 5771 -17474 18 3404 5771 -1748c 2 3452 5771 -FUNC 1748e 46 0 UnDecorator::getSymbolName() -1748e 3 989 5771 -17491 a 990 5771 -1749b 6 991 5771 -174a1 c 992 5771 -174ad 16 997 5771 -174c3 f 1001 5771 -174d2 2 1003 5771 -FUNC 174d4 92 0 UnDecorator::getBasedType() -174d4 6 2653 5771 -174da 13 2654 5771 -174ed a 2659 5771 -174f7 17 2661 5771 -1750e c 2707 5771 -1751a 13 2699 5771 -1752d 2 2700 5771 -1752f d 2674 5771 -1753c 2 2711 5771 -1753e a 2712 5771 -17548 d 2716 5771 -17555 f 2720 5771 -17564 2 2722 5771 -FUNC 17566 b42 4 UnDecorator::composeDeclaration(DName const &) -17566 6 2045 5771 -1756c e 2046 5771 -1757a 5 2047 5771 -1757f a 2048 5771 -17589 b 2053 5771 -17594 f 2054 5771 -175a3 8 2055 5771 -175ab 15 2056 5771 -175c0 8 2057 5771 -175c8 10 2058 5771 -175d8 83 2075 5771 -1765b 7 2081 5771 -17662 19 2082 5771 -1767b 21 2083 5771 -1769c 2 2084 5771 -1769e 15 2085 5771 -176b3 27 2090 5771 -176da 33 2092 5771 -1770d 9 2094 5771 -17716 9 2096 5771 -1771f 2b 2098 5771 -1774a d 2101 5771 -17757 9 2103 5771 -17760 2d 2105 5771 -1778d 2e 2107 5771 -177bb 5 2111 5771 -177c0 3 2114 5771 -177c3 3 2115 5771 -177c6 3 2116 5771 -177c9 3 2117 5771 -177cc 3 2118 5771 -177cf 26 2121 5771 -177f5 12 2123 5771 -17807 19 2125 5771 -17820 19 2126 5771 -17839 2 2127 5771 -1783b 12 2129 5771 -1784d 19 2131 5771 -17866 1b 2134 5771 -17881 13 2141 5771 -17894 a 2142 5771 -1789e 15 2143 5771 -178b3 2 2144 5771 -178b5 f 2145 5771 -178c4 10 2147 5771 -178d4 9 2151 5771 -178dd 22 2152 5771 -178ff 2 2153 5771 -17901 13 2168 5771 -17914 c 2172 5771 -17920 14 2173 5771 -17934 1a 2174 5771 -1794e 2 2175 5771 -17950 b 2176 5771 -1795b 5 2182 5771 -17960 6 2185 5771 -17966 27 2187 5771 -1798d b 2189 5771 -17998 5 2190 5771 -1799d 1b 2194 5771 -179b8 15 2195 5771 -179cd 1d 2202 5771 -179ea 16 2204 5771 -17a00 55 2205 5771 -17a55 12 2206 5771 -17a67 2b 2207 5771 -17a92 2 2208 5771 -17a94 d 2209 5771 -17aa1 1a 2211 5771 -17abb 2e 2218 5771 -17ae9 12 2222 5771 -17afb c 2223 5771 -17b07 c 2227 5771 -17b13 15 2228 5771 -17b28 2 2229 5771 -17b2a f 2230 5771 -17b39 1a 2235 5771 -17b53 b 2237 5771 -17b5e 3 2238 5771 -17b61 5 2243 5771 -17b66 b 2245 5771 -17b71 1c 2250 5771 -17b8d 13 2251 5771 -17ba0 e 2252 5771 -17bae 2 2253 5771 -17bb0 10 2254 5771 -17bc0 3d 2255 5771 -17bfd c 2256 5771 -17c09 e 2257 5771 -17c17 4c 2258 5771 -17c63 a 2259 5771 -17c6d 4b 2260 5771 -17cb8 7 2261 5771 -17cbf 4b 2262 5771 -17d0a f 2263 5771 -17d19 f 2264 5771 -17d28 6 2268 5771 -17d2e 61 2277 5771 -17d8f 15 2281 5771 -17da4 2 2283 5771 -17da6 18 2285 5771 -17dbe 2d 2292 5771 -17deb 12 2294 5771 -17dfd 37 2296 5771 -17e34 23 2297 5771 -17e57 b7 2299 5771 -17f0e 23 2300 5771 -17f31 12 2306 5771 -17f43 37 2307 5771 -17f7a b 2308 5771 -17f85 37 2309 5771 -17fbc b 2310 5771 -17fc7 30 2311 5771 -17ff7 23 2312 5771 -1801a 36 2319 5771 -18050 1e 2320 5771 -1806e 8 2325 5771 -18076 1e 2326 5771 -18094 12 2329 5771 -180a6 2 2331 5771 -FUNC 180a8 211 0 UnDecorator::getDecoratedName() -180a8 7 861 5771 -180af e 864 5771 -180bd a 868 5771 -180c7 b 873 5771 -180d2 8 874 5771 -180da 11 876 5771 -180eb 10 878 5771 -180fb 6 882 5771 -18101 9 903 5771 -1810a 9 906 5771 -18113 8 910 5771 -1811b 6 912 5771 -18121 5 910 5771 -18126 2 915 5771 -18128 a 918 5771 -18132 19 919 5771 -1814b 6 920 5771 -18151 f 924 5771 -18160 8 925 5771 -18168 17 929 5771 -1817f a 930 5771 -18189 c 932 5771 -18195 8 933 5771 -1819d 5 934 5771 -181a2 18 935 5771 -181ba a 936 5771 -181c4 13 937 5771 -181d7 b 938 5771 -181e2 2 940 5771 -181e4 29 941 5771 -1820d 4 945 5771 -18211 10 946 5771 -18221 9 948 5771 -1822a 3 950 5771 -1822d 1c 955 5771 -18249 f 959 5771 -18258 4 976 5771 -1825c 6 962 5771 -18262 14 964 5771 -18276 19 967 5771 -1828f 5 968 5771 -18294 10 971 5771 -182a4 2 979 5771 -182a6 2 980 5771 -182a8 f 982 5771 -182b7 2 984 5771 -FUNC 182b9 28b 0 UnDecorator::getScope() -182b9 d 1482 5771 -182c6 f 1483 5771 -182d5 2a 1489 5771 -182ff 14 1492 5771 -18313 b 1495 5771 -1831e 16 1496 5771 -18334 5 1498 5771 -18339 17 1499 5771 -18350 3 1500 5771 -18353 f 1506 5771 -18362 2a 1507 5771 -1838c 10 1566 5771 -1839c 5 1567 5771 -183a1 34 1561 5771 -183d5 4 1562 5771 -183d9 5 1563 5771 -183de e 1510 5771 -183ec 5 1514 5771 -183f1 22 1515 5771 -18413 e 1518 5771 -18421 6 1519 5771 -18427 5 1522 5771 -1842c 2a 1523 5771 -18456 2 1524 5771 -18458 f 1546 5771 -18467 1a 1548 5771 -18481 b 1550 5771 -1848c 9 1551 5771 -18495 2 1554 5771 -18497 f 1530 5771 -184a6 2 1570 5771 -184a8 21 1571 5771 -184c9 a 1489 5771 -184d3 f 1577 5771 -184e2 18 1590 5771 -184fa 2 1591 5771 -184fc b 1580 5771 -18507 7 1581 5771 -1850e 2 1582 5771 -18510 2b 1583 5771 -1853b 4 1597 5771 -1853f 5 1599 5771 -FUNC 18544 341 4 UnDecorator::getFunctionIndirectType(DName const &) -18544 3 3461 5771 -18547 e 3462 5771 -18555 15 3463 5771 -1856a f 3465 5771 -18579 10 3466 5771 -18589 7 3469 5771 -18590 a 3471 5771 -1859a 6 3473 5771 -185a0 7 3475 5771 -185a7 d 3477 5771 -185b4 17 3482 5771 -185cb 9 3485 5771 -185d4 3 3486 5771 -185d7 5 3490 5771 -185dc f 3491 5771 -185eb 6 3496 5771 -185f1 13 3497 5771 -18604 b 3501 5771 -1860f 1e 3503 5771 -1862d 8 3505 5771 -18635 29 3506 5771 -1865e 2 3507 5771 -18660 17 3508 5771 -18677 f 3510 5771 -18686 4 3511 5771 -1868a 10 3518 5771 -1869a 15 3519 5771 -186af 9 3527 5771 -186b8 d 3528 5771 -186c5 30 3529 5771 -186f5 2 3530 5771 -186f7 11 3521 5771 -18708 7 3514 5771 -1870f 16 3516 5771 -18725 13 3531 5771 -18738 d 3535 5771 -18745 22 3537 5771 -18767 2 3546 5771 -18769 13 3547 5771 -1877c c 3551 5771 -18788 28 3552 5771 -187b0 1e 3557 5771 -187ce c 3558 5771 -187da 2e 3561 5771 -18808 10 3563 5771 -18818 c 3564 5771 -18824 c 3566 5771 -18830 15 3567 5771 -18845 2 3568 5771 -18847 f 3569 5771 -18856 4 3573 5771 -1885a b 3574 5771 -18865 e 3580 5771 -18873 10 3576 5771 -18883 2 3581 5771 -FUNC 18885 4e4 10 UnDecorator::getDataIndirectType(DName const &,char,DName const &,int) -18885 6 3707 5771 -1888b 23 3711 5771 -188ae 4 3713 5771 -188b2 17 3715 5771 -188c9 c 3717 5771 -188d5 10 3719 5771 -188e5 e 3723 5771 -188f3 6 3725 5771 -188f9 15 3726 5771 -1890e 17 3732 5771 -18925 11 3751 5771 -18936 a 3752 5771 -18940 32 3753 5771 -18972 5 3754 5771 -18977 11 3743 5771 -18988 a 3744 5771 -18992 25 3745 5771 -189b7 2 3746 5771 -189b9 8 3747 5771 -189c1 2 3749 5771 -189c3 19 3735 5771 -189dc a 3736 5771 -189e6 14 3737 5771 -189fa 5 3738 5771 -189ff 11 3739 5771 -18a10 6 3766 5771 -18a16 a 3768 5771 -18a20 17 3770 5771 -18a37 10 3772 5771 -18a47 1a 3778 5771 -18a61 5 3780 5771 -18a66 6 3782 5771 -18a6c 9 3787 5771 -18a75 b 3789 5771 -18a80 19 3791 5771 -18a99 c 3793 5771 -18aa5 24 3794 5771 -18ac9 c 3796 5771 -18ad5 22 3797 5771 -18af7 9 3801 5771 -18b00 5 3805 5771 -18b05 7 3806 5771 -18b0c 6 3810 5771 -18b12 1e 3812 5771 -18b30 8 3814 5771 -18b38 1b 3815 5771 -18b53 2 3816 5771 -18b55 16 3817 5771 -18b6b a 3819 5771 -18b75 13 3828 5771 -18b88 b 3833 5771 -18b93 c 3834 5771 -18b9f 8 3835 5771 -18ba7 6 3836 5771 -18bad b 3842 5771 -18bb8 b 3843 5771 -18bc3 3 3863 5771 -18bc6 6 3864 5771 -18bcc 22 3866 5771 -18bee 9 3871 5771 -18bf7 13 3872 5771 -18c0a 5 3876 5771 -18c0f 1e 3877 5771 -18c2d 5 3879 5771 -18c32 1e 3880 5771 -18c50 5 3884 5771 -18c55 e 3885 5771 -18c63 14 3889 5771 -18c77 28 3895 5771 -18c9f 2 3890 5771 -18ca1 b 3891 5771 -18cac 2 3892 5771 -18cae c 3898 5771 -18cba 17 3899 5771 -18cd1 4 3902 5771 -18cd5 6 3904 5771 -18cdb 7 3906 5771 -18ce2 8 3774 5771 -18cea 13 3918 5771 -18cfd 12 3922 5771 -18d0f 29 3925 5771 -18d38 10 3923 5771 -18d48 c 3928 5771 -18d54 3 3929 5771 -18d57 10 3931 5771 -18d67 2 3933 5771 -FUNC 18d69 14c 0 UnDecorator::operator char *() -18d69 6 762 5771 -18d6f 4 763 5771 -18d73 f 764 5771 -18d82 9 770 5771 -18d8b c 772 5771 -18d97 7 775 5771 -18d9e 1d 776 5771 -18dbb 4 782 5771 -18dbf 16 783 5771 -18dd5 9 785 5771 -18dde 5 794 5771 -18de3 9 795 5771 -18dec 13 799 5771 -18dff e 808 5771 -18e0d 2 809 5771 -18e0f 2 848 5771 -18e11 1a 810 5771 -18e2b e 813 5771 -18e39 e 811 5771 -18e47 9 817 5771 -18e50 e 819 5771 -18e5e d 820 5771 -18e6b a 824 5771 -18e75 f 825 5771 -18e84 5 828 5771 -18e89 2 829 5771 -18e8b 2 830 5771 -18e8d 5 831 5771 -18e92 1 832 5771 -18e93 5 833 5771 -18e98 1 835 5771 -18e99 5 834 5771 -18e9e 2 838 5771 -18ea0 a 839 5771 -18eaa 9 841 5771 -18eb3 2 848 5771 -FUNC 18eb5 116 c UnDecorator::getPtrRefType(DName const &,DName const &,char) -18eb5 5 3585 5771 -18eba f 3588 5771 -18ec9 d 3589 5771 -18ed6 b 3591 5771 -18ee1 20 3594 5771 -18f01 b 3595 5771 -18f0c b 3597 5771 -18f17 9 3598 5771 -18f20 14 3600 5771 -18f34 14 3606 5771 -18f48 1b 3608 5771 -18f63 a 3612 5771 -18f6d b 3615 5771 -18f78 c 3617 5771 -18f84 9 3618 5771 -18f8d c 3620 5771 -18f99 c 3622 5771 -18fa5 a 3623 5771 -18faf b 3625 5771 -18fba f 3629 5771 -18fc9 2 3632 5771 -FUNC 18fcb 1b 8 UnDecorator::getPointerType(DName const &,DName const &) -18fcb 1b 4037 5771 -FUNC 18fe6 1b 8 UnDecorator::getPointerTypeArray(DName const &,DName const &) -18fe6 1b 4040 5771 -FUNC 19001 1b 8 UnDecorator::getReferenceType(DName const &,DName const &) -19001 1b 4043 5771 -FUNC 1901c a3 18 __unDName -1901c f 604 5771 -1902b 9 606 5771 -19034 4 607 5771 -19038 a 612 5771 -19042 2 613 5771 -19044 8 614 5771 -1904c 3 615 5771 -1904f 20 618 5771 -1906f 1a 627 5771 -19089 e 628 5771 -19097 a 633 5771 -190a1 c 636 5771 -190ad 3 643 5771 -190b0 6 645 5771 -190b6 9 637 5771 -FUNC 190bf a3 1c __unDNameEx -190bf f 684 5771 -190ce 9 687 5771 -190d7 4 688 5771 -190db a 693 5771 -190e5 2 694 5771 -190e7 8 695 5771 -190ef 3 696 5771 -190f2 20 699 5771 -19112 1a 708 5771 -1912c e 709 5771 -1913a a 714 5771 -19144 c 717 5771 -19150 3 724 5771 -19153 6 726 5771 -19159 9 718 5771 -FUNC 19162 387 4 UnDecorator::getBasicDataType(DName const &) -19162 3 3162 5771 -19165 15 3163 5771 -1917a 6 3165 5771 -19180 4 3168 5771 -19184 35 3173 5771 -191b9 5 3178 5771 -191be 5 3179 5771 -191c3 5 3183 5771 -191c8 5 3184 5771 -191cd 5 3188 5771 -191d2 5 3189 5771 -191d7 5 3193 5771 -191dc 5 3194 5771 -191e1 5 3203 5771 -191e6 5 3204 5771 -191eb 2a 3173 5771 -19215 3c 3222 5771 -19251 5 3231 5771 -19256 5 3232 5771 -1925b 22 3273 5771 -1927d 5 3235 5771 -19282 5 3236 5771 -19287 f 3222 5771 -19296 5 3243 5771 -1929b 5 3244 5771 -192a0 5 3239 5771 -192a5 5 3240 5771 -192aa 5 3247 5771 -192af 5 3248 5771 -192b4 1b 3222 5771 -192cf 3 3264 5771 -192d2 6 3262 5771 -192d8 10 3264 5771 -192e8 10 3266 5771 -192f8 11 3267 5771 -19309 5 3275 5771 -1930e 2 3276 5771 -19310 5 3255 5771 -19315 2 3257 5771 -19317 3 3224 5771 -1931a 12 3343 5771 -1932c 9 3345 5771 -19335 7 3347 5771 -1933c 16 3348 5771 -19352 6 3352 5771 -19358 d 3353 5771 -19365 5 3355 5771 -1936a 5 3227 5771 -1936f 2 3278 5771 -19371 d 3281 5771 -1937e 2 3282 5771 -19380 5 3219 5771 -19385 2 3220 5771 -19387 3 3287 5771 -1938a 5 3290 5771 -1938f d 3207 5771 -1939c d 3212 5771 -193a9 9 3297 5771 -193b2 1f 3301 5771 -193d1 19 3314 5771 -193ea c 3322 5771 -193f6 2 3326 5771 -193f8 c 3307 5771 -19404 2 3308 5771 -19406 1e 3311 5771 -19424 10 3332 5771 -19434 18 3333 5771 -1944c 5 3337 5771 -19451 c 3360 5771 -1945d 5 3367 5771 -19462 d 3369 5771 -1946f 5 3371 5771 -19474 d 3372 5771 -19481 2 3373 5771 -19483 5 3374 5771 -19488 d 3375 5771 -19495 17 3380 5771 -194ac 16 3385 5771 -194c2 27 3387 5771 -FUNC 194e9 13e 4 UnDecorator::getPrimaryDataType(DName const &) -194e9 7 2962 5771 -194f0 2b 2966 5771 -1951b 12 3027 5771 -1952d d 2972 5771 -1953a c 2974 5771 -19546 a 2975 5771 -19550 b 2981 5771 -1955b 6 2984 5771 -19561 1e 2986 5771 -1957f 7 2996 5771 -19586 2 2997 5771 -19588 6 2998 5771 -1958e f 3000 5771 -1959d 8 3002 5771 -195a5 10 3004 5771 -195b5 2f 3022 5771 -195e4 16 3012 5771 -195fa 17 3008 5771 -19611 14 2969 5771 -19625 2 3030 5771 -FUNC 19627 b1 4 UnDecorator::getDataType(DName *) -19627 6 2922 5771 -1962d b 2923 5771 -19638 15 2928 5771 -1964d 10 2954 5771 -1965d 6 2934 5771 -19663 c 2936 5771 -1966f f 2937 5771 -1967e 13 2939 5771 -19691 6 2944 5771 -19697 29 2946 5771 -196c0 2 2947 5771 -196c2 14 2931 5771 -196d6 2 2957 5771 -FUNC 196d8 64 4 UnDecorator::getExternalDataType(DName const &) -196d8 7 4244 5771 -196df 1e 4247 5771 -196fd 9 4248 5771 -19706 30 4253 5771 -19736 4 4255 5771 -1973a 2 4257 5771 -FUNC 1973c 57 8 fastzero_I -FUNC 19793 8f c _VEC_memzero -FUNC 19822 14 0 _sse2_mathfcns_init -FUNC 19836 14 4 _set_SSE2_enable -FUNC 1984a 87 c fastcopy_I -FUNC 198d1 e3 c _VEC_memcpy -FUNC 199b4 1bd c __crtMessageBoxA -199b4 9 41 4033 -199bd 5 49 4033 -199c2 2 56 4033 -199c4 18 64 4033 -199dc d 66 4033 -199e9 2 67 4033 -199eb 6 69 4033 -199f1 10 76 4033 -19a01 6 78 4033 -19a07 6 80 4033 -19a0d 15 83 4033 -19a22 1a 86 4033 -19a3c 1c 88 4033 -19a58 6 89 4033 -19a5e 8 95 4033 -19a66 6 98 4033 -19a6c a 100 4033 -19a76 14 102 4033 -19a8a 14 116 4033 -19a9e 6 119 4033 -19aa4 d 120 4033 -19ab1 c 122 4033 -19abd 1f 127 4033 -19adc 1b 136 4033 -19af7 6 137 4033 -19afd 7 138 4033 -19b04 2 139 4033 -19b06 7 140 4033 -19b0d 2 142 4033 -19b0f a 144 4033 -19b19 6 146 4033 -19b1f 5 147 4033 -19b24 2 149 4033 -19b26 11 153 4033 -19b37 6 155 4033 -19b3d 5 156 4033 -19b42 8 158 4033 -19b4a b 165 4033 -19b55 5 166 4033 -19b5a 10 168 4033 -19b6a 5 173 4033 -19b6f 2 176 4033 -FUNC 19b71 71 c strcat_s -19b71 0 13 823 -19b71 30 18 823 -19ba1 c 19 823 -19bad 2 21 823 -19baf 4 23 823 -19bb3 1 25 823 -19bb4 3 26 823 -19bb7 2 29 823 -19bb9 2 32 823 -19bbb d 35 823 -19bc8 4 39 823 -19bcc 2 41 823 -19bce e 42 823 -19bdc 5 45 823 -19be1 1 46 823 -FUNC 19be2 b3 10 strncpy_s -19be2 5 13 739 -19be7 14 17 739 -19bfb 5 65 739 -19c00 2 66 739 -19c02 26 24 739 -19c28 5 25 739 -19c2d 2 28 739 -19c2f 2 29 739 -19c31 b 31 739 -19c3c 8 35 739 -19c44 d 37 739 -19c51 2 41 739 -19c53 12 45 739 -19c65 5 48 739 -19c6a 2 50 739 -19c6c 4 54 739 -19c70 6 56 739 -19c76 3 58 739 -19c79 c 59 739 -19c85 2 61 739 -19c87 e 62 739 -FUNC 19c95 46 4 _set_error_mode -19c95 0 43 3937 -19c95 15 50 3937 -19caa 6 58 3937 -19cb0 1 65 3937 -19cb1 5 54 3937 -19cb6 7 55 3937 -19cbd 1 65 3937 -19cbe 1c 61 3937 -19cda 1 65 3937 -FUNC 19cdb a 4 __set_app_type -19cdb 0 91 3937 -19cdb 9 96 3937 -19ce4 1 97 3937 -FUNC 19ce5 6 0 __get_app_type -19ce5 0 120 3937 -19ce5 5 125 3937 -19cea 1 126 3937 -FUNC 19ceb 51 10 x_ismbbtype_l -19ceb 6 213 4669 -19cf1 b 214 4669 -19cfc 4 219 4669 -19d00 3a 222 4669 -19d3a 2 223 4669 -FUNC 19d3c 15 8 _ismbbkalnum_l -19d3c 0 80 4669 -19d3c 14 81 4669 -19d50 1 82 4669 -FUNC 19d51 13 4 _ismbbkalnum -19d51 0 85 4669 -19d51 12 86 4669 -19d63 1 87 4669 -FUNC 19d64 15 8 _ismbbkprint_l -19d64 0 90 4669 -19d64 14 91 4669 -19d78 1 92 4669 -FUNC 19d79 13 4 _ismbbkprint -19d79 0 95 4669 -19d79 12 96 4669 -19d8b 1 97 4669 -FUNC 19d8c 15 8 _ismbbkpunct_l -19d8c 0 100 4669 -19d8c 14 101 4669 -19da0 1 102 4669 -FUNC 19da1 13 4 _ismbbkpunct -19da1 0 105 4669 -19da1 12 106 4669 -19db3 1 107 4669 -FUNC 19db4 18 8 _ismbbalnum_l -19db4 0 113 4669 -19db4 17 114 4669 -19dcb 1 115 4669 -FUNC 19dcc 16 4 _ismbbalnum -19dcc 0 118 4669 -19dcc 15 119 4669 -19de1 1 120 4669 -FUNC 19de2 18 8 _ismbbalpha_l -19de2 0 123 4669 -19de2 17 124 4669 -19df9 1 125 4669 -FUNC 19dfa 16 4 _ismbbalpha -19dfa 0 128 4669 -19dfa 15 129 4669 -19e0f 1 130 4669 -FUNC 19e10 18 8 _ismbbgraph_l -19e10 0 133 4669 -19e10 17 134 4669 -19e27 1 135 4669 -FUNC 19e28 16 4 _ismbbgraph -19e28 0 138 4669 -19e28 15 139 4669 -19e3d 1 140 4669 -FUNC 19e3e 18 8 _ismbbprint_l -19e3e 0 143 4669 -19e3e 17 144 4669 -19e55 1 145 4669 -FUNC 19e56 16 4 _ismbbprint -19e56 0 148 4669 -19e56 15 149 4669 -19e6b 1 150 4669 -FUNC 19e6c 15 8 _ismbbpunct_l -19e6c 0 153 4669 -19e6c 14 154 4669 -19e80 1 155 4669 -FUNC 19e81 13 4 _ismbbpunct -19e81 0 158 4669 -19e81 12 159 4669 -19e93 1 160 4669 -FUNC 19e94 15 8 _ismbblead_l -19e94 0 166 4669 -19e94 14 167 4669 -19ea8 1 168 4669 -FUNC 19ea9 13 4 _ismbblead -19ea9 0 171 4669 -19ea9 12 172 4669 -19ebb 1 173 4669 -FUNC 19ebc 15 8 _ismbbtrail_l -19ebc 0 176 4669 -19ebc 14 177 4669 -19ed0 1 178 4669 -FUNC 19ed1 13 4 _ismbbtrail -19ed1 0 181 4669 -19ed1 12 182 4669 -19ee3 1 183 4669 -FUNC 19ee4 53 8 _ismbbkana_l -19ee4 6 189 4669 -19eea b 190 4669 -19ef5 10 192 4669 -19f05 1f 194 4669 -19f24 2 197 4669 -19f26 f 196 4669 -19f35 2 197 4669 -FUNC 19f37 e 4 _ismbbkana -19f37 0 200 4669 -19f37 d 201 4669 -19f44 1 202 4669 -FUNC 19f45 44 4 _getbuf -19f45 0 43 1893 -19f45 6 50 1893 -19f4b 16 58 1893 -19f61 4 61 1893 -19f65 7 62 1893 -19f6c 2 65 1893 -19f6e 4 69 1893 -19f72 6 70 1893 -19f78 7 71 1893 -19f7f 3 75 1893 -19f82 6 76 1893 -19f88 1 79 1893 -FUNC 19f89 1de 8 _fputwc_nolock -19f89 15 90 2124 -19f9e b 93 2124 -19fa9 48 95 2124 -19ff1 6 101 2124 -19ff7 45 104 2124 -1a03c 27 115 2124 -1a063 9 116 2124 -1a06c 22 120 2124 -1a08e 2 121 2124 -1a090 8 124 2124 -1a098 42 127 2124 -1a0da 17 133 2124 -1a0f1 6 139 2124 -1a0f7 7 141 2124 -1a0fe 34 143 2124 -1a132 6 146 2124 -1a138 6 150 2124 -1a13e d 151 2124 -1a14b d 153 2124 -1a158 f 154 2124 -FUNC 1a167 78 8 fputwc -1a167 c 48 2124 -1a173 2e 52 2124 -1a1a1 3 55 2124 -1a1a4 7 57 2124 -1a1ab 3 58 2124 -1a1ae 11 60 2124 -1a1bf c 63 2124 -1a1cb 4 67 2124 -1a1cf 6 68 2124 -1a1d5 a 64 2124 -FUNC 1a1df 5 8 putwc -1a1df 0 162 2124 -1a1df 5 163 2124 -FUNC 1a1e4 1f7 14 wcstoxl -1a1e4 8 82 6173 -1a1ec b 88 6173 -1a1f7 3 92 6173 -1a1fa b 95 6173 -1a205 2f 97 6173 -1a234 12 98 6173 -1a246 9 103 6173 -1a24f 2 105 6173 -1a251 18 106 6173 -1a269 6 108 6173 -1a26f 4 109 6173 -1a273 2 110 6173 -1a275 6 112 6173 -1a27b 5 113 6173 -1a280 5 115 6173 -1a285 b 118 6173 -1a290 9 119 6173 -1a299 f 120 6173 -1a2a8 9 123 6173 -1a2b1 7 121 6173 -1a2b8 6 126 6173 -1a2be 1a 128 6173 -1a2d8 2 129 6173 -1a2da 5 130 6173 -1a2df d 135 6173 -1a2ec c 141 6173 -1a2f8 15 143 6173 -1a30d 12 144 6173 -1a31f 5 148 6173 -1a324 4 152 6173 -1a328 c 159 6173 -1a334 4 165 6173 -1a338 6 166 6173 -1a33e 9 178 6173 -1a347 6 181 6173 -1a34d 3 183 6173 -1a350 4 184 6173 -1a354 2 186 6173 -1a356 c 161 6173 -1a362 5 173 6173 -1a367 2 174 6173 -1a369 24 189 6173 -1a38d 5 192 6173 -1a392 c 193 6173 -1a39e 6 194 6173 -1a3a4 10 195 6173 -1a3b4 8 201 6173 -1a3bc 2 203 6173 -1a3be 6 205 6173 -1a3c4 3 207 6173 -1a3c7 12 209 6173 -1a3d9 2 210 6173 -FUNC 1a3db 29 c wcstol -1a3db 3 217 6173 -1a3de 8 218 6173 -1a3e6 13 220 6173 -1a3f9 9 224 6173 -1a402 2 226 6173 -FUNC 1a404 1b 10 _wcstol_l -1a404 0 234 6173 -1a404 1a 235 6173 -1a41e 1 236 6173 -FUNC 1a41f 2a c wcstoul -1a41f 3 243 6173 -1a422 7 244 6173 -1a429 14 246 6173 -1a43d a 250 6173 -1a447 2 252 6173 -FUNC 1a449 1b 10 _wcstoul_l -1a449 0 260 6173 -1a449 1a 261 6173 -1a463 1 262 6173 -FUNC 1a464 9 0 _fptrap -1a464 0 46 2503 -1a464 8 47 2503 -1a46c 1 48 2503 -FUNC 1a46d 54 8 _isalpha_l -1a46d 6 57 6535 -1a473 b 58 6535 -1a47e 41 60 6535 -1a4bf 2 61 6535 -FUNC 1a4c1 2b 4 isalpha -1a4c1 0 66 6535 -1a4c1 9 67 6535 -1a4ca 13 69 6535 -1a4dd 1 75 6535 -1a4de d 73 6535 -1a4eb 1 75 6535 -FUNC 1a4ec 4f 8 _isupper_l -1a4ec 6 81 6535 -1a4f2 b 82 6535 -1a4fd 3c 84 6535 -1a539 2 85 6535 -FUNC 1a53b 29 4 isupper -1a53b 0 90 6535 -1a53b 9 91 6535 -1a544 11 93 6535 -1a555 1 99 6535 -1a556 d 97 6535 -1a563 1 99 6535 -FUNC 1a564 4f 8 _islower_l -1a564 6 105 6535 -1a56a b 106 6535 -1a575 3c 108 6535 -1a5b1 2 109 6535 -FUNC 1a5b3 29 4 islower -1a5b3 0 114 6535 -1a5b3 9 115 6535 -1a5bc 11 117 6535 -1a5cd 1 123 6535 -1a5ce d 121 6535 -1a5db 1 123 6535 -FUNC 1a5dc 4f 8 _isdigit_l -1a5dc 6 129 6535 -1a5e2 b 130 6535 -1a5ed 3c 132 6535 -1a629 2 133 6535 -FUNC 1a62b 29 4 isdigit -1a62b 0 138 6535 -1a62b 9 139 6535 -1a634 11 141 6535 -1a645 1 147 6535 -1a646 d 145 6535 -1a653 1 147 6535 -FUNC 1a654 54 8 _isxdigit_l -1a654 6 153 6535 -1a65a b 154 6535 -1a665 41 156 6535 -1a6a6 2 157 6535 -FUNC 1a6a8 2b 4 isxdigit -1a6a8 0 162 6535 -1a6a8 9 163 6535 -1a6b1 13 165 6535 -1a6c4 1 171 6535 -1a6c5 d 169 6535 -1a6d2 1 171 6535 -FUNC 1a6d3 4f 8 _isspace_l -1a6d3 6 177 6535 -1a6d9 b 178 6535 -1a6e4 3c 180 6535 -1a720 2 181 6535 -FUNC 1a722 29 4 isspace -1a722 0 186 6535 -1a722 9 187 6535 -1a72b 11 189 6535 -1a73c 1 195 6535 -1a73d d 193 6535 -1a74a 1 195 6535 -FUNC 1a74b 4f 8 _ispunct_l -1a74b 6 201 6535 -1a751 b 202 6535 -1a75c 3c 204 6535 -1a798 2 205 6535 -FUNC 1a79a 29 4 ispunct -1a79a 0 210 6535 -1a79a 9 211 6535 -1a7a3 11 213 6535 -1a7b4 1 219 6535 -1a7b5 d 217 6535 -1a7c2 1 219 6535 -FUNC 1a7c3 54 8 _isalnum_l -1a7c3 6 225 6535 -1a7c9 b 226 6535 -1a7d4 41 228 6535 -1a815 2 229 6535 -FUNC 1a817 2b 4 isalnum -1a817 0 234 6535 -1a817 9 235 6535 -1a820 13 237 6535 -1a833 1 243 6535 -1a834 d 241 6535 -1a841 1 243 6535 -FUNC 1a842 54 8 _isprint_l -1a842 6 249 6535 -1a848 b 250 6535 -1a853 41 252 6535 -1a894 2 253 6535 -FUNC 1a896 2b 4 isprint -1a896 0 258 6535 -1a896 9 259 6535 -1a89f 13 261 6535 -1a8b2 1 267 6535 -1a8b3 d 265 6535 -1a8c0 1 267 6535 -FUNC 1a8c1 54 8 _isgraph_l -1a8c1 6 273 6535 -1a8c7 b 274 6535 -1a8d2 41 276 6535 -1a913 2 277 6535 -FUNC 1a915 2b 4 isgraph -1a915 0 282 6535 -1a915 9 283 6535 -1a91e 13 285 6535 -1a931 1 291 6535 -1a932 d 289 6535 -1a93f 1 291 6535 -FUNC 1a940 4f 8 _iscntrl_l -1a940 6 297 6535 -1a946 b 298 6535 -1a951 3c 300 6535 -1a98d 2 301 6535 -FUNC 1a98f 29 4 iscntrl -1a98f 0 306 6535 -1a98f 9 307 6535 -1a998 11 309 6535 -1a9a9 1 315 6535 -1a9aa d 313 6535 -1a9b7 1 315 6535 -FUNC 1a9b8 d 4 __isascii -1a9b8 0 320 6535 -1a9b8 c 321 6535 -1a9c4 1 322 6535 -FUNC 1a9c5 8 4 __toascii -1a9c5 0 327 6535 -1a9c5 7 328 6535 -1a9cc 1 329 6535 -FUNC 1a9cd 1f 8 _iscsymf_l -1a9cd 0 335 6535 -1a9cd 1a 336 6535 -1a9e7 1 337 6535 -1a9e8 3 336 6535 -1a9eb 1 337 6535 -FUNC 1a9ec 1a 4 __iscsymf -1a9ec 0 341 6535 -1a9ec 15 342 6535 -1aa01 1 343 6535 -1aa02 3 342 6535 -1aa05 1 343 6535 -FUNC 1aa06 1f 8 _iscsym_l -1aa06 0 349 6535 -1aa06 1a 350 6535 -1aa20 1 351 6535 -1aa21 3 350 6535 -1aa24 1 351 6535 -FUNC 1aa25 1c 4 __iscsym -1aa25 0 356 6535 -1aa25 17 357 6535 -1aa3c 1 358 6535 -1aa3d 3 357 6535 -1aa40 1 358 6535 -FUNC 1aa41 12 8 _MarkAllocaS -1aa41 0 207 2895 -1aa41 8 208 2895 -1aa49 6 210 2895 -1aa4f 3 211 2895 -1aa52 1 214 2895 -FUNC 1aa53 1b 4 _freea -1aa53 0 249 2895 -1aa53 8 251 2895 -1aa5b 3 253 2895 -1aa5e 8 255 2895 -1aa66 7 257 2895 -1aa6d 1 266 2895 -FUNC 1aa6e 13b 18 __crtGetLocaleInfoW_stat -1aa6e f 60 2876 -1aa7d 14 68 2876 -1aa91 d 70 2876 -1aa9e 8 71 2876 -1aaa6 b 73 2876 -1aab1 f 74 2876 -1aac0 5 79 2876 -1aac5 13 81 2876 -1aad8 7 86 2876 -1aadf 2 140 2876 -1aae1 8 96 2876 -1aae9 b 97 2876 -1aaf4 16 100 2876 -1ab0a 7 101 2876 -1ab11 48 104 2876 -1ab59 2 105 2876 -1ab5b 2 106 2876 -1ab5d e 110 2876 -1ab6b 7 113 2876 -1ab72 2 121 2876 -1ab74 2 123 2876 -1ab76 17 130 2876 -1ab8d 6 134 2876 -1ab93 4 136 2876 -1ab97 12 141 2876 -FUNC 1aba9 3b 18 __crtGetLocaleInfoW -1aba9 6 151 2876 -1abaf b 152 2876 -1abba 28 161 2876 -1abe2 2 162 2876 -FUNC 1abe4 13d 18 __crtGetLocaleInfoA_stat -1abe4 f 60 4251 -1abf3 17 68 4251 -1ac0a a 70 4251 -1ac14 8 71 4251 -1ac1c b 73 4251 -1ac27 f 74 4251 -1ac36 11 79 4251 -1ac47 4 86 4251 -1ac4b 5 96 4251 -1ac50 b 97 4251 -1ac5b 13 100 4251 -1ac6e 7 101 4251 -1ac75 49 104 4251 -1acbe 2 105 4251 -1acc0 2 106 4251 -1acc2 10 110 4251 -1acd2 3 114 4251 -1acd5 6 124 4251 -1acdb 2 126 4251 -1acdd 15 135 4251 -1acf2 7 139 4251 -1acf9 4 141 4251 -1acfd 12 81 4251 -1ad0f 12 145 4251 -FUNC 1ad21 3b 18 __crtGetLocaleInfoA -1ad21 6 155 4251 -1ad27 b 156 4251 -1ad32 28 165 4251 -1ad5a 2 166 4251 -FUNC 1ad5c 1a 4 strncnt -1ad5c 0 48 4203 -1ad5c 6 49 4203 -1ad62 6 52 4203 -1ad68 1 53 4203 -1ad69 5 52 4203 -1ad6e 7 55 4203 -1ad75 1 56 4203 -FUNC 1ad76 3a2 20 __crtLCMapStringA_stat -1ad76 12 99 4203 -1ad88 d 108 4203 -1ad95 1b 109 4203 -1adb0 8 110 4203 -1adb8 b 111 4203 -1adc3 a 112 4203 -1adcd 5 119 4203 -1add2 19 120 4203 -1adeb 5 124 4203 -1adf0 1 125 4203 -1adf1 3 127 4203 -1adf4 16 133 4203 -1ae0a 9 213 4203 -1ae13 8 235 4203 -1ae1b 8 236 4203 -1ae23 27 247 4203 -1ae4a 6 248 4203 -1ae50 48 251 4203 -1ae98 3 252 4203 -1ae9b 6 253 4203 -1aea1 19 262 4203 -1aeba 21 271 4203 -1aedb 8 274 4203 -1aee3 9 277 4203 -1aeec 9 279 4203 -1aef5 12 288 4203 -1af07 5 292 4203 -1af0c 4b 298 4203 -1af57 4 299 4203 -1af5b 18 309 4203 -1af73 3 312 4203 -1af76 6 322 4203 -1af7c 2 325 4203 -1af7e 17 335 4203 -1af95 7 342 4203 -1af9c 8 344 4203 -1afa4 9 346 4203 -1afad b 141 4203 -1afb8 8 142 4203 -1afc0 5 143 4203 -1afc5 8 144 4203 -1afcd 11 146 4203 -1afde 7 147 4203 -1afe5 9 153 4203 -1afee 15 155 4203 -1b003 5 156 4203 -1b008 2 157 4203 -1b00a 1b 164 4203 -1b025 7 166 4203 -1b02c 41 169 4203 -1b06d 2 170 4203 -1b06f 28 196 4203 -1b097 2 183 4203 -1b099 2 184 4203 -1b09b 25 190 4203 -1b0c0 7 198 4203 -1b0c7 2 199 4203 -1b0c9 1a 202 4203 -1b0e3 5 204 4203 -1b0e8 9 205 4203 -1b0f1 c 206 4203 -1b0fd 7 207 4203 -1b104 2 208 4203 -1b106 12 350 4203 -FUNC 1b118 43 24 __crtLCMapStringA -1b118 6 363 4203 -1b11e b 364 4203 -1b129 30 376 4203 -1b159 2 377 4203 -FUNC 1b15b 1b8 1c __crtGetStringTypeA_stat -1b15b f 66 4155 -1b16a 10 75 4155 -1b17a 18 79 4155 -1b192 8 80 4155 -1b19a b 82 4155 -1b1a5 f 83 4155 -1b1b4 11 88 4155 -1b1c5 9 120 4155 -1b1ce 8 141 4155 -1b1d6 8 142 4155 -1b1de 27 153 4155 -1b205 6 154 4155 -1b20b 3e 157 4155 -1b249 2 158 4155 -1b24b 2 159 4155 -1b24d f 161 4155 -1b25c 13 169 4155 -1b26f 11 174 4155 -1b280 6 176 4155 -1b286 6 178 4155 -1b28c 2 90 4155 -1b28e 5 94 4155 -1b293 8 95 4155 -1b29b 5 96 4155 -1b2a0 8 97 4155 -1b2a8 e 99 4155 -1b2b6 4 100 4155 -1b2ba 5 104 4155 -1b2bf 17 106 4155 -1b2d6 2 107 4155 -1b2d8 2 108 4155 -1b2da 3 109 4155 -1b2dd 15 112 4155 -1b2f2 6 113 4155 -1b2f8 7 114 4155 -1b2ff 2 115 4155 -1b301 12 182 4155 -FUNC 1b313 40 20 __crtGetStringTypeA -1b313 6 194 4155 -1b319 b 195 4155 -1b324 2d 206 4155 -1b351 2 207 4155 -FUNC 1b353 6 0 __pwctype_func -1b353 0 24 3986 -1b353 5 25 3986 -1b358 1 26 3986 -FUNC 1b359 29 0 __pctype_func -1b359 0 29 3986 -1b359 7 35 3986 -1b360 3 36 3986 -1b363 18 38 3986 -1b37b 6 39 3986 -1b381 1 40 3986 -FUNC 1b382 419 0 _get_lc_time -1b382 6 94 3379 -1b388 12 104 3379 -1b39a 3 105 3379 -1b39d 2 170 3379 -1b39f 9 108 3379 -1b3a8 16 112 3379 -1b3be 15 113 3379 -1b3d3 15 114 3379 -1b3e8 18 115 3379 -1b400 15 116 3379 -1b415 13 117 3379 -1b428 14 118 3379 -1b43c 18 120 3379 -1b454 15 121 3379 -1b469 15 122 3379 -1b47e 15 123 3379 -1b493 18 124 3379 -1b4ab 15 125 3379 -1b4c0 15 126 3379 -1b4d5 15 128 3379 -1b4ea 18 129 3379 -1b502 15 130 3379 -1b517 15 131 3379 -1b52c 15 132 3379 -1b541 18 133 3379 -1b559 15 134 3379 -1b56e 15 135 3379 -1b583 15 136 3379 -1b598 18 137 3379 -1b5b0 15 138 3379 -1b5c5 15 139 3379 -1b5da 15 141 3379 -1b5ef 18 142 3379 -1b607 15 143 3379 -1b61c 15 144 3379 -1b631 15 145 3379 -1b646 18 146 3379 -1b65e 18 147 3379 -1b676 18 148 3379 -1b68e 18 149 3379 -1b6a6 1b 150 3379 -1b6c1 18 151 3379 -1b6d9 18 152 3379 -1b6f1 18 154 3379 -1b709 1b 155 3379 -1b724 18 160 3379 -1b73c 18 161 3379 -1b754 1b 163 3379 -1b76f 20 165 3379 -1b78f a 169 3379 -1b799 2 170 3379 -FUNC 1b79b 190 4 __free_lc_time -1b79b 1 179 3379 -1b79c c 180 3379 -1b7a8 8 183 3379 -1b7b0 8 184 3379 -1b7b8 8 185 3379 -1b7c0 8 186 3379 -1b7c8 8 187 3379 -1b7d0 8 188 3379 -1b7d8 7 189 3379 -1b7df 8 191 3379 -1b7e7 8 192 3379 -1b7ef 8 193 3379 -1b7f7 8 194 3379 -1b7ff 8 195 3379 -1b807 8 196 3379 -1b80f 8 197 3379 -1b817 8 199 3379 -1b81f b 200 3379 -1b82a 8 201 3379 -1b832 8 202 3379 -1b83a 8 203 3379 -1b842 8 204 3379 -1b84a 8 205 3379 -1b852 8 206 3379 -1b85a 8 207 3379 -1b862 8 208 3379 -1b86a 8 209 3379 -1b872 8 210 3379 -1b87a 8 212 3379 -1b882 8 213 3379 -1b88a 8 214 3379 -1b892 8 215 3379 -1b89a 8 216 3379 -1b8a2 b 217 3379 -1b8ad b 218 3379 -1b8b8 b 219 3379 -1b8c3 b 220 3379 -1b8ce b 221 3379 -1b8d9 b 222 3379 -1b8e4 b 223 3379 -1b8ef b 225 3379 -1b8fa b 226 3379 -1b905 b 228 3379 -1b910 b 229 3379 -1b91b f 230 3379 -1b92a 1 232 3379 -FUNC 1b92b 73 4 __init_time -1b92b 4 56 3379 -1b92f f 60 3379 -1b93e 16 64 3379 -1b954 4 65 3379 -1b958 b 67 3379 -1b963 6 69 3379 -1b969 8 70 3379 -1b971 2 71 3379 -1b973 6 73 3379 -1b979 2 74 3379 -1b97b 2 75 3379 -1b97d 18 78 3379 -1b995 2 82 3379 -1b997 6 83 3379 -1b99d 1 84 3379 -FUNC 1b99e 33 0 fix_grouping -1b99e 0 32 3427 -1b99e 8 40 3427 -1b9a6 a 43 3427 -1b9b0 4 45 3427 -1b9b4 1 61 3427 -1b9b5 6 40 3427 -1b9bb 1 63 3427 -1b9bc 4 50 3427 -1b9c0 2 52 3427 -1b9c2 7 55 3427 -1b9c9 6 56 3427 -1b9cf 2 60 3427 -FUNC 1b9d1 40 4 __free_lconv_num -1b9d1 1 211 3427 -1b9d2 8 212 3427 -1b9da a 215 3427 -1b9e4 7 216 3427 -1b9eb b 218 3427 -1b9f6 7 219 3427 -1b9fd b 221 3427 -1ba08 8 222 3427 -1ba10 1 223 3427 -FUNC 1ba11 1c8 4 __init_numeric -1ba11 7 84 3427 -1ba18 4 92 3427 -1ba1c 2 93 3427 -1ba1e 11 96 3427 -1ba2f 3 177 3427 -1ba32 3 178 3427 -1ba35 c 179 3427 -1ba41 14 102 3427 -1ba55 8 103 3427 -1ba5d 9 108 3427 -1ba66 13 113 3427 -1ba79 9 115 3427 -1ba82 2 116 3427 -1ba84 2 118 3427 -1ba86 9 120 3427 -1ba8f 12 125 3427 -1baa1 8 127 3427 -1baa9 a 128 3427 -1bab3 7 129 3427 -1baba 2 131 3427 -1babc 19 140 3427 -1bad5 15 142 3427 -1baea 1b 144 3427 -1bb05 2 146 3427 -1bb07 c 148 3427 -1bb13 1e 154 3427 -1bb31 2 156 3427 -1bb33 17 154 3427 -1bb4a b 164 3427 -1bb55 9 165 3427 -1bb5e c 166 3427 -1bb6a 8 168 3427 -1bb72 7 169 3427 -1bb79 2 170 3427 -1bb7b 13 186 3427 -1bb8e 11 191 3427 -1bb9f b 193 3427 -1bbaa d 194 3427 -1bbb7 9 197 3427 -1bbc0 9 198 3427 -1bbc9 9 200 3427 -1bbd2 5 201 3427 -1bbd7 2 202 3427 -FUNC 1bbd9 33 0 fix_grouping -1bbd9 0 214 3470 -1bbd9 8 222 3470 -1bbe1 a 225 3470 -1bbeb 4 227 3470 -1bbef 1 243 3470 -1bbf0 6 222 3470 -1bbf6 1 245 3470 -1bbf7 4 232 3470 -1bbfb 2 234 3470 -1bbfd 7 237 3470 -1bc04 6 238 3470 -1bc0a 2 242 3470 -FUNC 1bc0c 89 4 __free_lconv_mon -1bc0c 1 255 3470 -1bc0d 8 256 3470 -1bc15 b 259 3470 -1bc20 7 260 3470 -1bc27 b 262 3470 -1bc32 7 263 3470 -1bc39 b 265 3470 -1bc44 7 266 3470 -1bc4b b 268 3470 -1bc56 7 269 3470 -1bc5d b 271 3470 -1bc68 7 272 3470 -1bc6f b 274 3470 -1bc7a 7 275 3470 -1bc81 b 277 3470 -1bc8c 8 278 3470 -1bc94 1 279 3470 -FUNC 1bc95 2c4 4 __init_monetary -1bc95 8 65 3470 -1bc9d 6 73 3470 -1bca3 13 77 3470 -1bcb6 3 187 3470 -1bcb9 3 188 3470 -1bcbc a 189 3470 -1bcc6 11 83 3470 -1bcd7 8 84 3470 -1bcdf f 89 3470 -1bcee 7 91 3470 -1bcf5 2 92 3470 -1bcf7 2 94 3470 -1bcf9 9 96 3470 -1bd02 f 101 3470 -1bd11 6 103 3470 -1bd17 9 104 3470 -1bd20 2 105 3470 -1bd22 2 107 3470 -1bd24 4 112 3470 -1bd28 14 117 3470 -1bd3c 14 119 3470 -1bd50 14 121 3470 -1bd64 17 123 3470 -1bd7b 14 125 3470 -1bd8f 14 128 3470 -1bda3 14 130 3470 -1bdb7 17 133 3470 -1bdce 14 135 3470 -1bde2 14 137 3470 -1bdf6 14 139 3470 -1be0a 17 141 3470 -1be21 14 143 3470 -1be35 14 145 3470 -1be49 17 147 3470 -1be60 2 149 3470 -1be62 6 150 3470 -1be68 6 151 3470 -1be6e 8 152 3470 -1be76 b 153 3470 -1be81 5 154 3470 -1be86 1c 157 3470 -1bea2 2 159 3470 -1bea4 17 157 3470 -1bebb c 169 3470 -1bec7 3 175 3470 -1beca 32 181 3470 -1befc 11 194 3470 -1bf0d 15 199 3470 -1bf22 b 201 3470 -1bf2d d 202 3470 -1bf3a 9 204 3470 -1bf43 9 205 3470 -1bf4c 6 206 3470 -1bf52 5 208 3470 -1bf57 2 209 3470 -FUNC 1bf59 395 4 __init_ctype -1bf59 11 59 3562 -1bf6a 6 60 3562 -1bf70 1f 82 3562 -1bf8f 7 84 3562 -1bf96 20 89 3562 -1bfb6 7 94 3562 -1bfbd 10 98 3562 -1bfcd b 100 3562 -1bfd8 b 102 3562 -1bfe3 12 104 3562 -1bff5 2f 106 3562 -1c024 5 109 3562 -1c029 2 112 3562 -1c02b e 113 3562 -1c039 15 115 3562 -1c04e a 118 3562 -1c058 4 121 3562 -1c05c 8 124 3562 -1c064 e 126 3562 -1c072 9 128 3562 -1c07b b 129 3562 -1c086 b 128 3562 -1c091 2c 140 3562 -1c0bd 33 155 3562 -1c0f0 2d 166 3562 -1c11d 37 178 3562 -1c154 11 180 3562 -1c165 17 182 3562 -1c17c 15 183 3562 -1c191 d 180 3562 -1c19e 12 189 3562 -1c1b0 f 190 3562 -1c1bf 12 191 3562 -1c1d1 18 195 3562 -1c1e9 11 198 3562 -1c1fa 13 199 3562 -1c20d e 200 3562 -1c21b e 201 3562 -1c229 9 203 3562 -1c232 6 204 3562 -1c238 9 206 3562 -1c241 9 207 3562 -1c24a 9 208 3562 -1c253 9 209 3562 -1c25c 9 210 3562 -1c265 9 213 3562 -1c26e 4 214 3562 -1c272 8 217 3562 -1c27a 8 218 3562 -1c282 8 219 3562 -1c28a 10 220 3562 -1c29a 13 227 3562 -1c2ad 2 231 3562 -1c2af 6 232 3562 -1c2b5 a 233 3562 -1c2bf a 234 3562 -1c2c9 a 235 3562 -1c2d3 a 236 3562 -1c2dd 2 238 3562 -1c2df f 240 3562 -FUNC 1c2ee 29 0 ___mb_cur_max_func -1c2ee 0 248 3562 -1c2ee 7 254 3562 -1c2f5 3 255 3562 -1c2f8 18 257 3562 -1c310 6 259 3562 -1c316 1 260 3562 -FUNC 1c317 16 4 ___mb_cur_max_l_func -1c317 0 263 3562 -1c317 15 264 3562 -1c32c 1 265 3562 -FUNC 1c32d 26 0 ___lc_codepage_func -1c32d 0 268 3562 -1c32d 7 274 3562 -1c334 3 275 3562 -1c337 18 277 3562 -1c34f 3 279 3562 -1c352 1 280 3562 -FUNC 1c353 26 0 ___lc_collate_cp_func -1c353 0 284 3562 -1c353 7 290 3562 -1c35a 3 291 3562 -1c35d 18 293 3562 -1c375 3 295 3562 -1c378 1 296 3562 -FUNC 1c379 26 0 ___lc_handle_func -1c379 0 300 3562 -1c379 7 306 3562 -1c380 3 307 3562 -1c383 18 309 3562 -1c39b 3 311 3562 -1c39e 1 312 3562 -FUNC 1c39f 3 4 __init_collate -1c39f 0 41 3650 -1c39f 2 42 3650 -1c3a1 1 43 3650 -FUNC 1c3a2 fe 4 _Getdays_l -1c3a2 9 111 516 -1c3ab d 115 516 -1c3b8 9 117 516 -1c3c1 9 119 516 -1c3ca 28 120 516 -1c3f2 b 121 516 -1c3fd c 123 516 -1c409 4 126 516 -1c40d 30 128 516 -1c43d 8 129 516 -1c445 31 131 516 -1c476 12 132 516 -1c488 3 134 516 -1c48b 13 137 516 -1c49e 2 138 516 -FUNC 1c4a0 9 0 _Getdays -1c4a0 0 142 516 -1c4a0 8 143 516 -1c4a8 1 144 516 -FUNC 1c4a9 fe 4 _Getmonths_l -1c4a9 9 150 516 -1c4b2 d 154 516 -1c4bf 16 156 516 -1c4d5 2b 159 516 -1c500 b 160 516 -1c50b 8 162 516 -1c513 a 163 516 -1c51d 2d 167 516 -1c54a 8 168 516 -1c552 2c 170 516 -1c57e 11 171 516 -1c58f 3 173 516 -1c592 13 176 516 -1c5a5 2 177 516 -FUNC 1c5a7 9 0 _Getmonths -1c5a7 0 181 516 -1c5a7 8 182 516 -1c5af 1 183 516 -FUNC 1c5b0 355 4 _Gettnames_l -1c5b0 9 189 516 -1c5b9 d 193 516 -1c5c6 9 195 516 -1c5cf 9 197 516 -1c5d8 28 198 516 -1c600 d 199 516 -1c60d 29 200 516 -1c636 18 201 516 -1c64e 11 202 516 -1c65f f 203 516 -1c66e f 204 516 -1c67d 7 205 516 -1c684 e 206 516 -1c692 8 208 516 -1c69a 12 212 516 -1c6ac 13 213 516 -1c6bf 6 214 516 -1c6c5 2a 215 516 -1c6ef 6 216 516 -1c6f5 d 217 516 -1c702 26 218 516 -1c728 1c 219 516 -1c744 18 221 516 -1c75c 6 222 516 -1c762 26 223 516 -1c788 a 224 516 -1c792 5 225 516 -1c797 2a 226 516 -1c7c1 18 227 516 -1c7d9 30 230 516 -1c809 a 231 516 -1c813 30 233 516 -1c843 a 234 516 -1c84d 30 236 516 -1c87d a 237 516 -1c887 30 239 516 -1c8b7 a 240 516 -1c8c1 30 242 516 -1c8f1 12 245 516 -1c903 2 246 516 -FUNC 1c905 9 0 _Gettnames -1c905 0 250 516 -1c905 8 251 516 -1c90d 1 252 516 -FUNC 1c90e 20 0 _store_str -1c90e 0 869 516 -1c90e f 871 516 -1c91d 7 872 516 -1c924 9 873 516 -1c92d 1 875 516 -FUNC 1c92e 36 0 _store_number -1c92e 0 965 516 -1c92e 8 973 516 -1c936 c 976 516 -1c942 2 977 516 -1c944 b 978 516 -1c94f 2 981 516 -1c951 2 982 516 -1c953 1 983 516 -1c954 7 988 516 -1c95b 3 989 516 -1c95e 5 990 516 -1c963 1 991 516 -FUNC 1c964 79 4 _store_num -1c964 8 909 516 -1c96c 2 910 516 -1c96e 8 912 516 -1c976 33 913 516 -1c9a9 2 914 516 -1c9ab 4 917 516 -1c9af 8 918 516 -1c9b7 b 919 516 -1c9c2 c 921 516 -1c9ce 5 923 516 -1c9d3 2 924 516 -1c9d5 2 926 516 -1c9d7 4 927 516 -1c9db 2 928 516 -FUNC 1c9dd 3e6 10 _expandtime -1c9dd 5 548 516 -1c9e2 4f 558 516 -1ca31 16 659 516 -1ca47 5 662 516 -1ca4c 16 587 516 -1ca62 7 589 516 -1ca69 5 590 516 -1ca6e 16 571 516 -1ca84 7 573 516 -1ca8b 5 574 516 -1ca90 5 822 516 -1ca95 7 823 516 -1ca9c 5 824 516 -1caa1 16 667 516 -1cab7 10 668 516 -1cac7 2 669 516 -1cac9 5 672 516 -1cace 23 558 516 -1caf1 6 787 516 -1caf7 5 789 516 -1cafc 15 736 516 -1cb11 2 737 516 -1cb13 2 739 516 -1cb15 5 740 516 -1cb1a 15 722 516 -1cb2f 2 723 516 -1cb31 16 742 516 -1cb47 4 743 516 -1cb4b 2 744 516 -1cb4d 5 745 516 -1cb52 6 746 516 -1cb58 8 747 516 -1cb60 1 748 516 -1cb61 5 752 516 -1cb66 f 715 516 -1cb75 5 718 516 -1cb7a 3 696 516 -1cb7d 2 699 516 -1cb7f 1d 804 516 -1cb9c 6 806 516 -1cba2 d 808 516 -1cbaf 2 809 516 -1cbb1 37 558 516 -1cbe8 19 678 516 -1cc01 8 680 516 -1cc09 2 681 516 -1cc0b 15 650 516 -1cc20 13 652 516 -1cc33 5 653 516 -1cc38 1e 601 516 -1cc56 2 603 516 -1cc58 5 606 516 -1cc5d 2 607 516 -1cc5f 2 608 516 -1cc61 25 615 516 -1cc86 2 617 516 -1cc88 1 627 516 -1cc89 2 642 516 -1cc8b e 579 516 -1cc99 7 581 516 -1cca0 5 582 516 -1cca5 2d 562 516 -1ccd2 6 564 516 -1ccd8 5 565 516 -1ccdd e 687 516 -1cceb 3 689 516 -1ccee 5 690 516 -1ccf3 15 558 516 -1cd08 2 834 516 -1cd0a 5 814 516 -1cd0f 19 817 516 -1cd28 5 819 516 -1cd2d d 795 516 -1cd3a b 798 516 -1cd45 5 799 516 -1cd4a 11 762 516 -1cd5b 5 764 516 -1cd60 1 774 516 -1cd61 5 776 516 -1cd66 16 729 516 -1cd7c 6 731 516 -1cd82 5 732 516 -1cd87 16 704 516 -1cd9d 3 705 516 -1cda0 b 706 516 -1cdab 2 707 516 -1cdad e 708 516 -1cdbb 6 839 516 -1cdc1 2 840 516 -FUNC 1cdc3 45d 18 _store_winword -1cdc3 10 1035 516 -1cdd3 5 1043 516 -1cdd8 a 1053 516 -1cde2 3 1043 516 -1cde5 6 1053 516 -1cdeb 2 1054 516 -1cded 6 1049 516 -1cdf3 2 1050 516 -1cdf5 6 1046 516 -1cdfb 10 1057 516 -1ce0b 4 1066 516 -1ce0f 8 1067 516 -1ce17 6 1069 516 -1ce1d d 1075 516 -1ce2a a 1076 516 -1ce34 8 1077 516 -1ce3c 4 1078 516 -1ce40 2a 1085 516 -1ce6a b 1087 516 -1ce75 31 1092 516 -1cea6 7 1093 516 -1cead 3 1097 516 -1ceb0 13 1100 516 -1cec3 10 1101 516 -1ced3 b 1102 516 -1cede b 1103 516 -1cee9 9 1106 516 -1cef2 3 1291 516 -1cef5 12 1292 516 -1cf07 11 1114 516 -1cf18 5 1117 516 -1cf1d b 1120 516 -1cf28 37 1125 516 -1cf5f 14 1274 516 -1cf73 c 1277 516 -1cf7f 8 1283 516 -1cf87 4 1284 516 -1cf8b 9 1286 516 -1cf94 c 1287 516 -1cfa0 5 1277 516 -1cfa5 e 1128 516 -1cfb3 7 1133 516 -1cfba 7 1132 516 -1cfc1 7 1130 516 -1cfc8 2 1131 516 -1cfca 5 1134 516 -1cfcf a 1156 516 -1cfd9 7 1158 516 -1cfe0 2 1159 516 -1cfe2 5 1160 516 -1cfe7 11 1175 516 -1cff8 5 1176 516 -1cffd 11 1177 516 -1d00e 6 1178 516 -1d014 2 1179 516 -1d016 5 1180 516 -1d01b b 1225 516 -1d026 13 1226 516 -1d039 4 1228 516 -1d03d 1a 1233 516 -1d057 9 1236 516 -1d060 8 1242 516 -1d068 4 1243 516 -1d06c 9 1246 516 -1d075 8 1247 516 -1d07d 5 1277 516 -1d082 1 1230 516 -1d083 5 1250 516 -1d088 12 1136 516 -1d09a 7 1141 516 -1d0a1 7 1140 516 -1d0a8 7 1138 516 -1d0af 2 1139 516 -1d0b1 5 1142 516 -1d0b6 29 1125 516 -1d0df e 1144 516 -1d0ed 7 1147 516 -1d0f4 2 1146 516 -1d0f6 5 1148 516 -1d0fb 7 1182 516 -1d102 b 1183 516 -1d10d 2 1184 516 -1d10f 6 1185 516 -1d115 12 1187 516 -1d127 17 1188 516 -1d13e c 1191 516 -1d14a 8 1197 516 -1d152 4 1198 516 -1d156 8 1201 516 -1d15e 2 1202 516 -1d160 5 1203 516 -1d165 9 1204 516 -1d16e 1a 1205 516 -1d188 9 1207 516 -1d191 8 1212 516 -1d199 4 1213 516 -1d19d 9 1215 516 -1d1a6 8 1216 516 -1d1ae 2 1220 516 -1d1b0 d 1168 516 -1d1bd 7 1170 516 -1d1c4 2 1171 516 -1d1c6 2 1172 516 -1d1c8 d 1162 516 -1d1d5 7 1164 516 -1d1dc 2 1165 516 -1d1de 2 1166 516 -1d1e0 d 1150 516 -1d1ed 7 1152 516 -1d1f4 2 1153 516 -1d1f6 1b 1268 516 -1d211 3 1272 516 -1d214 5 1273 516 -1d219 7 1194 516 -FUNC 1d220 1af 18 _Strftime_l -1d220 6 356 516 -1d226 4 361 516 -1d22a 13 362 516 -1d23d 33 364 516 -1d270 33 365 516 -1d2a3 d 368 516 -1d2b0 10 375 516 -1d2c0 e 385 516 -1d2ce a 387 516 -1d2d8 1e 435 516 -1d2f6 4 438 516 -1d2fa a 446 516 -1d304 5 447 516 -1d309 b 452 516 -1d314 3 453 516 -1d317 2 454 516 -1d319 7 400 516 -1d320 1 405 516 -1d321 2 408 516 -1d323 5 409 516 -1d328 1 411 516 -1d329 1 412 516 -1d32a 1d 415 516 -1d347 1 428 516 -1d348 5 385 516 -1d34d 5 464 516 -1d352 5 469 516 -1d357 13 470 516 -1d36a 3 441 516 -1d36d f 478 516 -1d37c b 481 516 -1d387 2 483 516 -1d389 b 402 516 -1d394 2 403 516 -1d396 5 421 516 -1d39b 7 423 516 -1d3a2 2 464 516 -1d3a4 18 485 516 -1d3bc 11 488 516 -1d3cd 2 490 516 -FUNC 1d3cf 1e 14 _strftime_l -1d3cf 3 291 516 -1d3d2 19 292 516 -1d3eb 2 293 516 -FUNC 1d3ed 1d 10 strftime -1d3ed 0 300 516 -1d3ed 1c 301 516 -1d409 1 302 516 -FUNC 1d40a 1e 14 _Strftime -1d40a 3 343 516 -1d40d 19 345 516 -1d426 2 346 516 -FUNC 1d428 26 0 localeconv -1d428 0 69 3302 -1d428 5 75 3302 -1d42d 1b 78 3302 -1d448 5 79 3302 -1d44d 1 80 3302 -FUNC 1d450 46 8 strcspn -1d450 4 191 924 -1d454 2 198 924 -1d456 1 199 924 -1d457 1 200 924 -1d458 1 201 924 -1d459 1 202 924 -1d45a 1 203 924 -1d45b 1 204 924 -1d45c 1 205 924 -1d45d 1 206 924 -1d45e 6 212 924 -1d464 2 216 924 -1d466 2 217 924 -1d468 2 218 924 -1d46a 3 219 924 -1d46d 4 220 924 -1d471 2 221 924 -1d473 3 227 924 -1d476 6 229 924 -1d47c 3 234 924 -1d47f 2 236 924 -1d481 2 237 924 -1d483 2 238 924 -1d485 3 239 924 -1d488 4 240 924 -1d48c 2 245 924 -1d48e 2 255 924 -1d490 3 257 924 -1d493 3 259 924 -FUNC 1d496 60 c TranslateName -1d496 3 340 3849 -1d499 3 342 3849 -1d49c 3 343 3849 -1d49f b 346 3849 -1d4aa a 348 3849 -1d4b4 14 349 3849 -1d4c8 6 351 3849 -1d4ce a 352 3849 -1d4d8 2 353 3849 -1d4da 4 354 3849 -1d4de 2 355 3849 -1d4e0 3 356 3849 -1d4e3 7 346 3849 -1d4ea a 359 3849 -1d4f4 2 360 3849 -FUNC 1d4f6 14 0 GetLcidFromDefault -1d4f6 0 761 3849 -1d4f6 7 762 3849 -1d4fd c 763 3849 -1d509 1 764 3849 -FUNC 1d50a 77 0 ProcessCodePage -1d50a 13 784 3849 -1d51d 1a 787 3849 -1d537 11 795 3849 -1d548 8 799 3849 -1d550 2 801 3849 -1d552 18 791 3849 -1d56a 3 793 3849 -1d56d 7 805 3849 -1d574 d 806 3849 -FUNC 1d581 1e 4 TestDefaultCountry -1d581 0 826 3849 -1d581 2 830 3849 -1d583 15 832 3849 -1d598 3 835 3849 -1d59b 1 836 3849 -1d59c 2 833 3849 -1d59e 1 836 3849 -FUNC 1d59f 32 0 LcidFromHexString -1d59f 1 893 3849 -1d5a0 2 895 3849 -1d5a2 2 897 3849 -1d5a4 9 899 3849 -1d5ad 5 900 3849 -1d5b2 8 901 3849 -1d5ba 3 902 3849 -1d5bd 10 903 3849 -1d5cd 3 906 3849 -1d5d0 1 907 3849 -FUNC 1d5d1 1b 0 GetPrimaryLen -1d5d1 0 926 3849 -1d5d1 2 927 3849 -1d5d3 3 930 3849 -1d5d6 12 931 3849 -1d5e8 1 933 3849 -1d5e9 2 935 3849 -1d5eb 1 938 3849 -FUNC 1d5ec 96 4 CountryEnumProc -1d5ec 15 717 3849 -1d601 7 718 3849 -1d608 f 719 3849 -1d617 23 725 3849 -1d63a 3 728 3849 -1d63d 3 729 3849 -1d640 12 731 3849 -1d652 b 734 3849 -1d65d a 738 3849 -1d667 b 741 3849 -1d672 10 742 3849 -FUNC 1d682 72 8 TestDefaultLanguage -1d682 11 858 3849 -1d693 22 864 3849 -1d6b5 4 865 3849 -1d6b9 d 867 3849 -1d6c6 1c 871 3849 -1d6e2 2 872 3849 -1d6e4 3 874 3849 -1d6e7 d 875 3849 -FUNC 1d6f4 1d0 4 LangCountryEnumProc -1d6f4 16 435 3849 -1d70a 7 436 3849 -1d711 d 437 3849 -1d71e 27 444 3849 -1d745 4 447 3849 -1d749 8 448 3849 -1d751 16 450 3849 -1d767 1d 456 3849 -1d784 2 460 3849 -1d786 11 462 3849 -1d797 7 467 3849 -1d79e 5 468 3849 -1d7a3 6 472 3849 -1d7a9 1a 475 3849 -1d7c3 14 482 3849 -1d7d7 3 483 3849 -1d7da a 487 3849 -1d7e4 b 490 3849 -1d7ef 6 493 3849 -1d7f5 3 494 3849 -1d7f8 12 501 3849 -1d80a 1d 506 3849 -1d827 6 510 3849 -1d82d c 513 3849 -1d839 16 518 3849 -1d84f 8 522 3849 -1d857 14 528 3849 -1d86b 2 531 3849 -1d86d 2 540 3849 -1d86f 1b 550 3849 -1d88a f 553 3849 -1d899 7 557 3849 -1d8a0 5 558 3849 -1d8a5 3 559 3849 -1d8a8 b 566 3849 -1d8b3 11 567 3849 -FUNC 1d8c4 bf 4 LanguageEnumProc -1d8c4 15 624 3849 -1d8d9 7 625 3849 -1d8e0 f 626 3849 -1d8ef 23 632 3849 -1d912 3 635 3849 -1d915 3 636 3849 -1d918 11 639 3849 -1d929 7 643 3849 -1d930 2 650 3849 -1d932 1d 651 3849 -1d94f f 654 3849 -1d95e a 658 3849 -1d968 b 662 3849 -1d973 10 663 3849 -FUNC 1d983 2c 0 GetLcidFromCountry -1d983 0 686 3849 -1d983 10 687 3849 -1d993 11 689 3849 -1d9a4 6 693 3849 -1d9aa 4 694 3849 -1d9ae 1 695 3849 -FUNC 1d9af 65 0 GetLcidFromLangCountry -1d9af 0 386 3849 -1d9af 7 388 3849 -1d9b6 1a 389 3849 -1d9d0 5 390 3849 -1d9d5 17 392 3849 -1d9ec 10 394 3849 -1d9fc 13 402 3849 -1da0f 4 403 3849 -1da13 1 404 3849 -FUNC 1da14 3c 0 GetLcidFromLanguage -1da14 0 591 3849 -1da14 13 593 3849 -1da27 e 594 3849 -1da35 10 596 3849 -1da45 6 600 3849 -1da4b 4 601 3849 -1da4f 1 602 3849 -FUNC 1da50 1e3 c __get_qualified_locale -1da50 4 205 3849 -1da54 5 208 3849 -1da59 12 212 3849 -1da6b 7 215 3849 -1da72 5 217 3849 -1da77 3 222 3849 -1da7a f 223 3849 -1da89 10 226 3849 -1da99 d 230 3849 -1daa6 a 232 3849 -1dab0 5 235 3849 -1dab5 2 237 3849 -1dab7 5 240 3849 -1dabc 5 243 3849 -1dac1 14 248 3849 -1dad5 a 250 3849 -1dadf 5 252 3849 -1dae4 2 254 3849 -1dae6 5 256 3849 -1daeb 2 261 3849 -1daed a 263 3849 -1daf7 28 266 3849 -1db1f 2 268 3849 -1db21 13 271 3849 -1db34 3 277 3849 -1db37 6 278 3849 -1db3d 17 281 3849 -1db54 32 285 3849 -1db86 d 289 3849 -1db93 6 290 3849 -1db99 8 293 3849 -1dba1 7 295 3849 -1dba8 8 296 3849 -1dbb0 4 297 3849 -1dbb4 8 301 3849 -1dbbc d 305 3849 -1dbc9 23 306 3849 -1dbec 2 307 3849 -1dbee f 308 3849 -1dbfd 2 309 3849 -1dbff 12 311 3849 -1dc11 2 312 3849 -1dc13 14 313 3849 -1dc27 5 315 3849 -1dc2c 6 286 3849 -1dc32 1 316 3849 -FUNC 1dc33 12 0 cmpResult -FUNC 1dc45 18 0 cmpBYTE -FUNC 1dc5d 40 0 cmpWORD -FUNC 1dc9d 78 0 cmpDWORD -FUNC 1dd15 1490 0 unaligned_memcmp -FUNC 1f1a5 1680 c memcmp -FUNC 20825 be c strncmp -20825 4 42 876 -20829 5 43 876 -2082e 7 45 876 -20835 7 46 876 -2083c 6 48 876 -20842 d 51 876 -2084f 11 56 876 -20860 c 61 876 -2086c c 66 876 -20878 15 71 876 -2088d 2 81 876 -2088f a 73 876 -20899 a 68 876 -208a3 a 63 876 -208ad 10 58 876 -208bd 2 79 876 -208bf a 81 876 -208c9 1 85 876 -208ca 4 86 876 -208ce 5 79 876 -208d3 4 89 876 -208d7 2 90 876 -208d9 a 83 876 -FUNC 208f0 40 8 strpbrk -208f0 4 191 869 -208f4 2 198 869 -208f6 1 199 869 -208f7 1 200 869 -208f8 1 201 869 -208f9 1 202 869 -208fa 1 203 869 -208fb 1 204 869 -208fc 1 205 869 -208fd 1 206 869 -208fe 6 212 869 -20904 2 216 869 -20906 2 217 869 -20908 2 218 869 -2090a 3 219 869 -2090d 4 220 869 -20911 2 221 869 -20913 5 227 869 -20918 2 236 869 -2091a 2 237 869 -2091c 2 238 869 -2091e 3 239 869 -20921 4 240 869 -20925 2 247 869 -20927 3 248 869 -2092a 3 257 869 -2092d 3 259 869 -FUNC 20930 82 c _iswctype_l -20930 6 66 6445 -20936 8 69 6445 -2093e 6 70 6445 -20944 8 71 6445 -2094c 18 72 6445 -20964 2 73 6445 -20966 b 75 6445 -20971 25 85 6445 -20996 3 86 6445 -20999 d 87 6445 -209a6 a 89 6445 -209b0 2 90 6445 -FUNC 209b2 6e 8 iswctype -209b2 4 96 6445 -209b6 8 97 6445 -209be 2 99 6445 -209c0 2 122 6445 -209c2 8 101 6445 -209ca 14 103 6445 -209de 2 122 6445 -209e0 9 106 6445 -209e9 25 117 6445 -20a0e 10 121 6445 -20a1e 2 122 6445 -FUNC 20a20 5 8 is_wctype -20a20 0 148 6445 -20a20 5 149 6445 -FUNC 20a25 22b 14 strtoxl -20a25 8 80 6309 -20a2d b 86 6309 -20a38 3 89 6309 -20a3b b 92 6309 -20a46 30 94 6309 -20a76 11 95 6309 -20a87 c 100 6309 -20a93 34 101 6309 -20ac7 5 102 6309 -20acc 5 104 6309 -20ad1 4 105 6309 -20ad5 2 106 6309 -20ad7 5 108 6309 -20adc 3 109 6309 -20adf 1d 111 6309 -20afc 4 118 6309 -20b00 5 121 6309 -20b05 9 122 6309 -20b0e a 123 6309 -20b18 9 126 6309 -20b21 7 124 6309 -20b28 2 129 6309 -20b2a 5 140 6309 -20b2f f 142 6309 -20b3e 1 143 6309 -20b3f 9 144 6309 -20b48 8 149 6309 -20b50 c 154 6309 -20b5c 8 155 6309 -20b64 7 156 6309 -20b6b 13 157 6309 -20b7e 5 160 6309 -20b83 4 164 6309 -20b87 b 171 6309 -20b92 4 177 6309 -20b96 6 178 6309 -20b9c 8 190 6309 -20ba4 6 193 6309 -20baa 3 195 6309 -20bad 4 196 6309 -20bb1 2 198 6309 -20bb3 c 173 6309 -20bbf 3 185 6309 -20bc2 2 186 6309 -20bc4 24 201 6309 -20be8 5 204 6309 -20bed c 205 6309 -20bf9 6 206 6309 -20bff 10 207 6309 -20c0f 7 213 6309 -20c16 2 215 6309 -20c18 6 217 6309 -20c1e 3 219 6309 -20c21 12 221 6309 -20c33 7 113 6309 -20c3a 2 115 6309 -20c3c 12 116 6309 -20c4e 2 222 6309 -FUNC 20c50 29 c strtol -20c50 3 229 6309 -20c53 8 230 6309 -20c5b 13 232 6309 -20c6e 9 236 6309 -20c77 2 238 6309 -FUNC 20c79 1b 10 _strtol_l -20c79 0 246 6309 -20c79 1a 247 6309 -20c93 1 248 6309 -FUNC 20c94 2a c strtoul -20c94 3 255 6309 -20c97 7 256 6309 -20c9e 14 258 6309 -20cb2 a 262 6309 -20cbc 2 264 6309 -FUNC 20cbe 1b 10 _strtoul_l -20cbe 0 272 6309 -20cbe 1a 273 6309 -20cd8 1 274 6309 -FUNC 20cd9 1f 0 __initconin -20cd9 0 58 5008 -20cd9 1e 65 5008 -20cf7 1 67 5008 -FUNC 20cf8 1f 0 __initconout -20cf8 0 90 5008 -20cf8 1e 97 5008 -20d16 1 98 5008 -FUNC 20d17 2d 0 __termcon -20d17 0 120 5008 -20d17 16 121 5008 -20d2d 3 122 5008 -20d30 f 125 5008 -20d3f 4 126 5008 -20d43 1 128 5008 -FUNC 20d44 94 4 _close_nolock -20d44 1 72 5094 -20d45 54 93 5094 -20d99 a 99 5094 -20da3 2 96 5094 -20da5 6 101 5094 -20dab b 103 5094 -20db6 11 105 5094 -20dc7 7 107 5094 -20dce 5 108 5094 -20dd3 4 111 5094 -20dd7 1 112 5094 -FUNC 20dd8 cd 4 _close -20dd8 c 42 5094 -20de4 23 46 5094 -20e07 2f 47 5094 -20e36 20 48 5094 -20e56 7 50 5094 -20e5d 3 52 5094 -20e60 9 53 5094 -20e69 c 54 5094 -20e75 2 55 5094 -20e77 b 56 5094 -20e82 4 57 5094 -20e86 c 61 5094 -20e92 3 65 5094 -20e95 6 66 5094 -20e9b a 62 5094 -FUNC 20ea5 2c 4 _freebuf -20ea5 1 47 1927 -20ea6 f 50 1927 -20eb5 8 52 1927 -20ebd 7 54 1927 -20ec4 8 55 1927 -20ecc 4 56 1927 -20ed0 1 58 1927 -FUNC 20ed1 2a 0 _purecall -20ed1 0 43 3119 -20ed1 b 44 3119 -20edc 5 45 3119 -20ee1 2 47 3119 -20ee3 7 54 3119 -20eea c 56 3119 -20ef6 5 57 3119 -FUNC 20efb 22 4 _set_purecall_handler -20efb 1 82 3119 -20efc b 85 3119 -20f07 12 86 3119 -20f19 3 88 3119 -20f1c 1 89 3119 -FUNC 20f1d d 0 _get_purecall_handler -20f1d 0 92 3119 -20f1d c 93 3119 -20f29 1 94 3119 -FUNC 20f30 34 0 _allmul -20f30 0 47 5116 -20f30 4 62 5116 -20f34 4 63 5116 -20f38 2 64 5116 -20f3a 4 65 5116 -20f3e 2 66 5116 -20f40 4 68 5116 -20f44 2 69 5116 -20f46 3 71 5116 -20f49 1 74 5116 -20f4a 2 81 5116 -20f4c 2 82 5116 -20f4e 4 84 5116 -20f52 4 85 5116 -20f56 2 86 5116 -20f58 4 88 5116 -20f5c 2 89 5116 -20f5e 2 90 5116 -20f60 1 92 5116 -20f61 3 94 5116 -FUNC 20f64 11 4 atol -20f64 0 55 6631 -20f64 10 56 6631 -20f74 1 57 6631 -FUNC 20f75 15 8 _atol_l -20f75 0 64 6631 -20f75 14 65 6631 -20f89 1 66 6631 -FUNC 20f8a 5 4 atoi -20f8a 0 99 6631 -20f8a 5 100 6631 -FUNC 20f8f 5 8 _atoi_l -20f8f 0 107 6631 -20f8f 5 108 6631 -FUNC 20f94 11 4 _atoi64 -20f94 0 143 6631 -20f94 10 144 6631 -20fa4 1 145 6631 -FUNC 20fa5 15 8 _atoi64_l -20fa5 0 151 6631 -20fa5 14 152 6631 -20fb9 1 153 6631 -FUNC 20fba 50 0 has_osfxsr_set -FUNC 2100a 60 0 _get_sse2_info -FUNC 2106a d 0 __sse2_available_init -FUNC 21077 170 8 _flswbuf -21077 5 93 1980 -2107c c 104 1980 -21088 8 106 1980 -21090 b 107 1980 -2109b 4 108 1980 -2109f a 109 1980 -210a9 4 110 1980 -210ad b 111 1980 -210b8 2 113 1980 -210ba 4 124 1980 -210be 4 125 1980 -210c2 8 126 1980 -210ca 3 127 1980 -210cd 8 128 1980 -210d5 3 137 1980 -210d8 11 138 1980 -210e9 9 141 1980 -210f2 25 151 1980 -21117 7 153 1980 -2111e d 158 1980 -2112b 5 162 1980 -21130 5 163 1980 -21135 7 164 1980 -2113c 7 166 1980 -21143 10 167 1980 -21153 2 168 1980 -21155 6 131 1980 -2115b 5 132 1980 -21160 2e 169 1980 -2118e 13 171 1980 -211a1 2 174 1980 -211a3 9 181 1980 -211ac 2 186 1980 -211ae 1d 195 1980 -211cb 5 201 1980 -211d0 4 202 1980 -211d4 7 203 1980 -211db a 209 1980 -211e5 2 212 1980 -FUNC 211e7 182 4 _wchartodigit -211e7 0 32 6613 -211e7 1b 41 6613 -21202 1 73 6613 -21203 e 42 6613 -21211 19 44 6613 -2122a 1 73 6613 -2122b 14 45 6613 -2123f 14 46 6613 -21253 14 47 6613 -21267 14 48 6613 -2127b 14 49 6613 -2128f 14 50 6613 -212a3 18 51 6613 -212bb 18 52 6613 -212d3 18 53 6613 -212eb 14 54 6613 -212ff 14 55 6613 -21313 12 56 6613 -21325 14 57 6613 -21339 14 58 6613 -2134d c 59 6613 -21359 2 62 6613 -2135b 4 67 6613 -2135f 6 69 6613 -21365 3 71 6613 -21368 1 73 6613 -FUNC 21369 b6 c _isctype_l -21369 7 114 6399 -21370 b 118 6399 -2137b d 121 6399 -21388 f 122 6399 -21397 1f 124 6399 -213b6 3 126 6399 -213b9 d 129 6399 -213c6 2 130 6399 -213c8 a 133 6399 -213d2 26 144 6399 -213f8 10 146 6399 -21408 15 149 6399 -2141d 2 150 6399 -FUNC 2141f 2f 8 _isctype -2141f 0 156 6399 -2141f 9 157 6399 -21428 12 159 6399 -2143a 1 165 6399 -2143b 12 163 6399 -2144d 1 165 6399 -FUNC 21450 2c 0 _alloca_probe_16 -21450 0 44 2632 -21450 1 46 2632 -21451 4 47 2632 -21455 2 48 2632 -21457 3 49 2632 -2145a 2 50 2632 -2145c 2 51 2632 -2145e 2 52 2632 -21460 1 53 2632 -21461 5 54 2632 -21466 1 59 2632 -21467 4 60 2632 -2146b 2 61 2632 -2146d 3 62 2632 -21470 2 63 2632 -21472 2 64 2632 -21474 2 65 2632 -21476 1 66 2632 -21477 5 67 2632 -PUBLIC 21466 0 _alloca_probe_8 -FUNC 2147c 47 4 __ansicp -2147c 10 39 2934 -2148c 1c 44 2934 -214a8 3 45 2934 -214ab 2 46 2934 -214ad a 47 2934 -214b7 c 49 2934 -FUNC 214c3 1b2 18 __convertcp -214c3 16 79 2934 -214d9 10 83 2934 -214e9 18 85 2934 -21501 17 90 2934 -21518 13 92 2934 -2152b 6 93 2934 -21531 d 99 2934 -2153e 2 101 2934 -21540 c 103 2934 -2154c 2a 115 2934 -21576 15 111 2934 -2158b 7 112 2934 -21592 1c 115 2934 -215ae 3 116 2934 -215b1 2 117 2934 -215b3 10 119 2934 -215c3 15 127 2934 -215d8 7 129 2934 -215df 18 138 2934 -215f7 3 139 2934 -215fa 2 140 2934 -215fc 1f 149 2934 -2161b 11 151 2934 -2162c 12 160 2934 -2163e 9 162 2934 -21647 3 163 2934 -2164a 2 164 2934 -2164c 6 165 2934 -21652 5 166 2934 -21657 9 174 2934 -21660 3 177 2934 -21663 12 178 2934 -FUNC 21675 34 4 _get_daylight -21675 0 35 487 -21675 27 36 487 -2169c 1 41 487 -2169d 8 39 487 -216a5 3 40 487 -216a8 1 41 487 -FUNC 216a9 34 4 _get_dstbias -216a9 0 44 487 -216a9 27 45 487 -216d0 1 50 487 -216d1 8 48 487 -216d9 3 49 487 -216dc 1 50 487 -FUNC 216dd 34 4 _get_timezone -216dd 0 53 487 -216dd 27 54 487 -21704 1 59 487 -21705 8 57 487 -2170d 3 58 487 -21710 1 59 487 -FUNC 21711 a2 10 _get_tzname -21711 3 62 487 -21714 10 63 487 -21724 4 64 487 -21728 3 66 487 -2172b 7 68 487 -21732 27 69 487 -21759 20 63 487 -21779 f 72 487 -21788 8 73 487 -21790 4 76 487 -21794 5 78 487 -21799 5 80 487 -2179e 13 82 487 -217b1 2 83 487 -FUNC 217b3 6 0 __daylight -217b3 0 118 487 -217b3 5 119 487 -217b8 1 120 487 -FUNC 217b9 6 0 __dstbias -217b9 0 123 487 -217b9 5 124 487 -217be 1 125 487 -FUNC 217bf 6 0 __timezone -217bf 0 128 487 -217bf 5 129 487 -217c4 1 130 487 -FUNC 217c5 6 0 __tzname -217c5 0 133 487 -217c5 5 134 487 -217ca 1 135 487 -FUNC 217cb c 4 _set_daylight -217cb c 189 418 -FUNC 217d7 c 4 _set_dstbias -217d7 c 190 418 -FUNC 217e3 c 4 _set_timezone -217e3 c 191 418 -FUNC 217ef 349 0 _tzset_nolock -217ef c 124 440 -217fb 5 127 440 -21800 3 129 440 -21803 3 130 440 -21806 3 131 440 -21809 3 132 440 -2180c 3 133 440 -2180f 8 135 440 -21817 3 136 440 -2181a 8 139 440 -21822 1b 142 440 -2183d 1b 143 440 -21858 1b 144 440 -21873 8 149 440 -2187b 6 154 440 -21881 f 160 440 -21890 18 165 440 -218a8 14 260 440 -218bc b 268 440 -218c7 4 274 440 -218cb 7 275 440 -218d2 16 277 440 -218e8 6 281 440 -218ee 32 283 440 -21920 9 174 440 -21929 7 175 440 -21930 6 176 440 -21936 13 179 440 -21949 9 183 440 -21952 b 188 440 -2195d 9 190 440 -21966 e 191 440 -21974 12 199 440 -21986 3 201 440 -21989 c 203 440 -21995 2 205 440 -21997 3 206 440 -2199a 3 214 440 -2199d 27 234 440 -219c4 8 235 440 -219cc 2 236 440 -219ce 7 237 440 -219d5 23 247 440 -219f8 9 248 440 -21a01 2 249 440 -21a03 8 250 440 -21a0b 7 256 440 -21a12 a 288 440 -21a1c a 289 440 -21a26 a 290 440 -21a30 c 292 440 -21a3c 9 296 440 -21a45 23 301 440 -21a68 8 310 440 -21a70 7 311 440 -21a77 1 312 440 -21a78 10 318 440 -21a88 11 320 440 -21a99 5 292 440 -21a9e 9 293 440 -21aa7 5 325 440 -21aac e 329 440 -21aba d 330 440 -21ac7 5 335 440 -21acc b 339 440 -21ad7 d 340 440 -21ae4 5 344 440 -21ae9 3 345 440 -21aec 6 350 440 -21af2 4 351 440 -21af6 21 352 440 -21b17 2 354 440 -21b19 5 355 440 -21b1e a 357 440 -21b28 a 358 440 -21b32 6 360 440 -FUNC 21b38 1f5 24 cvtdate -21b38 6 409 440 -21b3e 4 412 440 -21b42 c 414 440 -21b4e 52 424 440 -21ba0 4c 430 440 -21bec 14 436 440 -21c00 2 437 440 -21c02 2 438 440 -21c04 46 447 440 -21c4a 3 449 440 -21c4d 2 452 440 -21c4f 3c 457 440 -21c8b 3 459 440 -21c8e 27 467 440 -21cb5 6 472 440 -21cbb 2 474 440 -21cbd 29 485 440 -21ce6 11 486 440 -21cf7 a 487 440 -21d01 8 488 440 -21d09 d 490 440 -21d16 6 491 440 -21d1c 6 492 440 -21d22 9 499 440 -21d2b 2 503 440 -FUNC 21d2d 1ae 0 _isindst_nolock -21d2d 5 554 440 -21d32 20 558 440 -21d52 5 560 440 -21d57 7 561 440 -21d5e 1b 568 440 -21d79 c 569 440 -21d85 7 573 440 -21d8c 34 584 440 -21dc0 2 585 440 -21dc2 19 596 440 -21ddb 40 611 440 -21e1b 2 612 440 -21e1d 1e 623 440 -21e3b 2 626 440 -21e3d 14 641 440 -21e51 1a 653 440 -21e6b d 660 440 -21e78 d 664 440 -21e85 8 666 440 -21e8d 4 674 440 -21e91 2 697 440 -21e93 8 673 440 -21e9b 8 675 440 -21ea3 4 676 440 -21ea7 14 679 440 -21ebb 4 681 440 -21ebf b 682 440 -21eca 2 685 440 -21ecc d 691 440 -21ed9 2 694 440 -FUNC 21edb 4f 0 __tzset -21edb c 85 440 -21ee7 a 88 440 -21ef1 8 90 440 -21ef9 3 91 440 -21efc 8 93 440 -21f04 5 94 440 -21f09 6 95 440 -21f0f c 98 440 -21f1b 6 103 440 -21f21 9 99 440 -FUNC 21f2a 38 0 _tzset -21f2a c 109 440 -21f36 8 110 440 -21f3e 4 111 440 -21f42 5 113 440 -21f47 c 115 440 -21f53 6 118 440 -21f59 9 116 440 -FUNC 21f62 41 4 _isindst -21f62 c 538 440 -21f6e 8 541 440 -21f76 4 542 440 -21f7a b 543 440 -21f85 c 544 440 -21f91 3 548 440 -21f94 6 549 440 -21f9a 9 545 440 -FUNC 21fa3 35 8 __ascii_stricmp -21fa3 a 75 693 -21fad c 80 693 -21fb9 3 81 693 -21fbc c 82 693 -21fc8 3 83 693 -21fcb 9 85 693 -21fd4 3 87 693 -21fd7 1 88 693 -FUNC 21fd8 d3 c _stricmp_l -21fd8 7 47 693 -21fdf b 49 693 -21fea 36 52 693 -22020 32 53 693 -22052 8 55 693 -2205a e 57 693 -22068 15 63 693 -2207d 11 64 693 -2208e 8 65 693 -22096 13 68 693 -220a9 2 69 693 -FUNC 220ab 50 8 _stricmp -220ab 4 94 693 -220af a 95 693 -220b9 24 98 693 -220dd 6 99 693 -220e3 1 107 693 -220e4 5 101 693 -220e9 10 105 693 -220f9 2 107 693 -FUNC 220fb f0 10 _strnicmp_l -220fb 7 51 650 -22102 d 54 650 -2210f b 56 650 -2211a 33 59 650 -2214d 7 60 650 -22154 32 61 650 -22186 8 63 650 -2218e 1d 65 650 -221ab 15 71 650 -221c0 11 72 650 -221d1 d 74 650 -221de 6 76 650 -221e4 5 79 650 -221e9 2 80 650 -FUNC 221eb 5c c _strnicmp -221eb 4 125 650 -221ef a 127 650 -221f9 24 130 650 -2221d 5 131 650 -22222 a 132 650 -2222c 1 141 650 -2222d 5 134 650 -22232 13 138 650 -22245 2 141 650 -FUNC 22247 db c xtoa_s -22247 8 93 6581 -2224f 24 102 6581 -22273 24 103 6581 -22297 19 105 6581 -222b0 b 106 6581 -222bb a 112 6581 -222c5 6 114 6581 -222cb 7 116 6581 -222d2 2 118 6581 -222d4 2 121 6581 -222d6 5 124 6581 -222db 5 128 6581 -222e0 3 129 6581 -222e3 2 130 6581 -222e5 6 131 6581 -222eb 3 135 6581 -222ee e 136 6581 -222fc 8 139 6581 -22304 2 141 6581 -22306 2 142 6581 -22308 3 148 6581 -2230b 6 152 6581 -22311 3 154 6581 -22314 1 155 6581 -22315 4 156 6581 -22319 5 158 6581 -2231e 4 160 6581 -FUNC 22322 28 10 _itoa_s -22322 3 172 6581 -22325 d 175 6581 -22332 4 176 6581 -22336 2 177 6581 -22338 10 178 6581 -22348 2 181 6581 -FUNC 2234a 25 10 _ltoa_s -2234a 3 189 6581 -2234d 20 190 6581 -2236d 2 191 6581 -FUNC 2236f 18 10 _ultoa_s -2236f 0 199 6581 -2236f 17 200 6581 -22386 1 201 6581 -FUNC 22387 f6 14 x64toa_s -22387 7 309 6581 -2238e 25 318 6581 -223b3 5 319 6581 -223b8 19 321 6581 -223d1 b 322 6581 -223dc 3 327 6581 -223df 20 333 6581 -223ff 3 336 6581 -22402 1e 352 6581 -22420 3 344 6581 -22423 2 345 6581 -22425 5 346 6581 -2242a 5 351 6581 -2242f 13 352 6581 -22442 5 355 6581 -22447 3 357 6581 -2244a 13 358 6581 -2245d 4 364 6581 -22461 9 368 6581 -2246a 3 370 6581 -2246d 1 371 6581 -2246e 7 372 6581 -22475 4 375 6581 -22479 4 377 6581 -FUNC 2247d 33 14 _i64toa_s -2247d 3 390 6581 -22480 2e 391 6581 -224ae 2 392 6581 -FUNC 224b0 1d 14 _ui64toa_s -224b0 4 400 6581 -224b4 17 401 6581 -224cb 2 402 6581 -FUNC 224cd 224 1c __crtGetStringTypeW_stat -224cd 10 64 2828 -224dd 9 72 2828 -224e6 7 73 2828 -224ed 14 75 2828 -22501 11 79 2828 -22512 8 80 2828 -2251a b 82 2828 -22525 f 83 2828 -22534 4 88 2828 -22538 13 90 2828 -2254b 7 95 2828 -22552 2 199 2828 -22554 8 119 2828 -2255c b 120 2828 -22567 5 121 2828 -2256c b 122 2828 -22577 e 128 2828 -22585 5 130 2828 -2258a 3 131 2828 -2258d 1d 142 2828 -225aa 6 143 2828 -225b0 40 146 2828 -225f0 3 147 2828 -225f3 6 148 2828 -225f9 d 150 2828 -22606 1a 160 2828 -22620 4d 164 2828 -2266d 4 165 2828 -22671 5 170 2828 -22676 b 171 2828 -22681 3 174 2828 -22684 23 178 2828 -226a7 12 186 2828 -226b9 f 189 2828 -226c8 4 187 2828 -226cc 7 191 2828 -226d3 8 194 2828 -226db 4 196 2828 -226df 12 200 2828 -FUNC 226f1 3e 1c __crtGetStringTypeW -226f1 6 211 2828 -226f7 b 212 2828 -22702 2b 222 2828 -2272d 2 223 2828 -FUNC 2272f 294 14 strtoxq -2272f 8 80 6264 -22737 b 86 6264 -22742 3 89 6264 -22745 b 92 6264 -22750 31 94 6264 -22781 12 95 6264 -22793 c 100 6264 -2279f 37 102 6264 -227d6 2 103 6264 -227d8 9 105 6264 -227e1 4 106 6264 -227e5 2 107 6264 -227e7 6 109 6264 -227ed 9 110 6264 -227f6 8 112 6264 -227fe 6 115 6264 -22804 9 116 6264 -2280d a 117 6264 -22817 9 120 6264 -22820 3 118 6264 -22823 5 123 6264 -22828 10 125 6264 -22838 1 126 6264 -22839 9 127 6264 -22842 26 132 6264 -22868 e 137 6264 -22876 8 138 6264 -2287e 6 139 6264 -22884 11 140 6264 -22895 5 143 6264 -2289a 31 154 6264 -228cb 4 160 6264 -228cf 6 161 6264 -228d5 a 173 6264 -228df 7 176 6264 -228e6 6 178 6264 -228ec 6 179 6264 -228f2 5 181 6264 -228f7 19 156 6264 -22910 b 168 6264 -2291b 5 169 6264 -22920 35 184 6264 -22955 5 187 6264 -2295a c 188 6264 -22966 a 189 6264 -22970 6 190 6264 -22976 7 191 6264 -2297d 2 192 6264 -2297f 7 193 6264 -22986 8 195 6264 -2298e 5 197 6264 -22993 6 199 6264 -22999 13 201 6264 -229ac 15 203 6264 -229c1 2 204 6264 -FUNC 229c3 29 c _strtoi64 -229c3 3 211 6264 -229c6 8 212 6264 -229ce 13 214 6264 -229e1 9 218 6264 -229ea 2 220 6264 -FUNC 229ec 1b 10 _strtoi64_l -229ec 0 227 6264 -229ec 1a 228 6264 -22a06 1 229 6264 -FUNC 22a07 2a c _strtoui64 -22a07 3 236 6264 -22a0a 7 237 6264 -22a11 14 239 6264 -22a25 a 243 6264 -22a2f 2 245 6264 -FUNC 22a31 1b 10 _strtoui64_l -22a31 0 253 6264 -22a31 1a 254 6264 -22a4b 1 255 6264 -FUNC 22a50 2b 0 _chkstk -22a50 0 65 2634 -22a50 1 69 2634 -22a51 4 73 2634 -22a55 2 74 2634 -22a57 2 79 2634 -22a59 2 80 2634 -22a5b 2 81 2634 -22a5d 2 83 2634 -22a5f 5 84 2634 -22a64 2 87 2634 -22a66 2 88 2634 -22a68 2 89 2634 -22a6a 1 90 2634 -22a6b 1 91 2634 -22a6c 2 92 2634 -22a6e 3 93 2634 -22a71 1 94 2634 -22a72 5 98 2634 -22a77 2 99 2634 -22a79 2 100 2634 -FUNC 22a7b 81 4 _getenv_helper_nolock -22a7b 0 95 3904 -22a7b 10 103 3904 -22a8b 3 104 3904 -22a8e 1 169 3904 -22a8f e 128 3904 -22a9d 7 131 3904 -22aa4 2 132 3904 -22aa6 6 135 3904 -22aac c 140 3904 -22ab8 9 142 3904 -22ac1 2 150 3904 -22ac3 22 154 3904 -22ae5 3 164 3904 -22ae8 6 150 3904 -22aee 5 168 3904 -22af3 9 169 3904 -FUNC 22afc 93 c _getenv_s_helper -22afc 7 220 3904 -22b03 21 224 3904 -22b24 15 226 3904 -22b39 4 227 3904 -22b3d 3 229 3904 -22b40 a 233 3904 -22b4a 3 234 3904 -22b4d 2 236 3904 -22b4f 7 239 3904 -22b56 6 240 3904 -22b5c 2 243 3904 -22b5e 5 246 3904 -22b63 5 251 3904 -22b68 20 254 3904 -22b88 5 256 3904 -22b8d 2 257 3904 -FUNC 22b8f a2 8 _dupenv_s_helper -22b8f 6 339 3904 -22b95 21 344 3904 -22bb6 9 346 3904 -22bbf 2 348 3904 -22bc1 5 350 3904 -22bc6 8 352 3904 -22bce 6 353 3904 -22bd4 2 355 3904 -22bd6 9 358 3904 -22bdf b 362 3904 -22bea 6 364 3904 -22bf0 b 366 3904 -22bfb 9 367 3904 -22c04 1e 370 3904 -22c22 7 371 3904 -22c29 2 373 3904 -22c2b 4 375 3904 -22c2f 2 376 3904 -FUNC 22c31 83 4 getenv -22c31 c 75 3904 -22c3d 2a 78 3904 -22c67 18 79 3904 -22c7f 8 81 3904 -22c87 3 82 3904 -22c8a c 83 3904 -22c96 c 85 3904 -22ca2 3 89 3904 -22ca5 6 90 3904 -22cab 9 86 3904 -FUNC 22cb4 d8 10 getenv_s -22cb4 c 198 3904 -22cc0 8 201 3904 -22cc8 5 202 3904 -22ccd a1 203 3904 -22d6e c 205 3904 -22d7a 3 209 3904 -22d7d 6 210 3904 -22d83 9 206 3904 -FUNC 22d8c e6 c _dupenv_s -22d8c c 303 3904 -22d98 8 306 3904 -22da0 5 307 3904 -22da5 af 311 3904 -22e54 c 314 3904 -22e60 3 318 3904 -22e63 6 319 3904 -22e69 9 315 3904 -FUNC 22e72 8 4 _tolower -22e72 0 48 6218 -22e72 7 49 6218 -22e79 1 50 6218 -FUNC 22e7a 117 8 _tolower_l -22e7a 8 70 6218 -22e82 b 74 6218 -22e8d c 77 6218 -22e99 31 79 6218 -22eca f 80 6218 -22ed9 14 82 6218 -22eed 2b 86 6218 -22f18 3 88 6218 -22f1b d 91 6218 -22f28 2 92 6218 -22f2a b 94 6218 -22f35 a 97 6218 -22f3f 25 110 6218 -22f64 6 112 6218 -22f6a 5 116 6218 -22f6f 6 117 6218 -22f75 1a 119 6218 -22f8f 2 120 6218 -FUNC 22f91 27 4 tolower -22f91 0 143 6218 -22f91 9 145 6218 -22f9a f 147 6218 -22fa9 1 153 6218 -22faa d 151 6218 -22fb7 1 153 6218 -FUNC 22fc0 61 c __ascii_strnicmp -22fc0 6 69 871 -22fc6 3 75 871 -22fc9 2 76 871 -22fcb 2 77 871 -22fcd 3 79 871 -22fd0 3 80 871 -22fd3 2 82 871 -22fd5 2 83 871 -22fd7 5 84 871 -22fdc 2 89 871 -22fde 2 91 871 -22fe0 2 93 871 -22fe2 2 95 871 -22fe4 2 97 871 -22fe6 2 98 871 -22fe8 3 100 871 -22feb 3 101 871 -22fee 2 103 871 -22ff0 2 104 871 -22ff2 2 106 871 -22ff4 2 107 871 -22ff6 2 109 871 -22ff8 2 112 871 -22ffa 2 113 871 -22ffc 2 115 871 -22ffe 2 116 871 -23000 2 118 871 -23002 2 121 871 -23004 2 122 871 -23006 3 124 871 -23009 2 125 871 -2300b 2 128 871 -2300d 2 129 871 -2300f 2 130 871 -23011 5 133 871 -23016 2 134 871 -23018 2 135 871 -2301a 2 138 871 -2301c 5 140 871 -FUNC 23021 ec 10 _mbsnbicoll_l -23021 7 53 4518 -23028 b 55 4518 -23033 9 57 4518 -2303c 13 58 4518 -2304f 33 61 4518 -23082 6 62 4518 -23088 23 63 4518 -230ab 8 65 4518 -230b3 14 66 4518 -230c7 23 74 4518 -230ea 10 75 4518 -230fa 11 77 4518 -2310b 2 79 4518 -FUNC 2310d 17 c _mbsnbicoll -2310d 0 85 4518 -2310d 16 86 4518 -23123 1 87 4518 -FUNC 23124 95 0 __wtomb_environ -23124 7 43 2699 -2312b 3 44 2699 -2312e 9 45 2699 -23137 c 52 2699 -23143 12 57 2699 -23155 11 61 2699 -23166 12 65 2699 -23178 10 72 2699 -23188 5 74 2699 -2318d 9 76 2699 -23196 3 77 2699 -23199 9 81 2699 -231a2 5 84 2699 -231a7 2 85 2699 -231a9 5 58 2699 -231ae 9 67 2699 -231b7 2 68 2699 -FUNC 231b9 1a 8 strnlen -231b9 0 38 864 -231b9 19 45 864 -231d2 1 49 864 -FUNC 231d3 1a 4 strncnt -231d3 0 50 4345 -231d3 6 51 4345 -231d9 6 54 4345 -231df 1 55 4345 -231e0 5 54 4345 -231e5 7 57 4345 -231ec 1 58 4345 -FUNC 231ed 389 18 __crtCompareStringA_stat -231ed 10 96 4345 -231fd 31 280 4345 -2322e c 107 4345 -2323a b 109 4345 -23245 a 110 4345 -2324f 5 118 4345 -23254 1b 119 4345 -2326f 7 122 4345 -23276 1f 123 4345 -23295 6 120 4345 -2329b 7 121 4345 -232a2 3 124 4345 -232a5 2 125 4345 -232a7 17 130 4345 -232be 7 189 4345 -232c5 8 201 4345 -232cd 8 202 4345 -232d5 d 208 4345 -232e2 5 214 4345 -232e7 8 215 4345 -232ef 2 218 4345 -232f1 6 219 4345 -232f7 5 222 4345 -232fc 4 223 4345 -23300 f 231 4345 -2330f 2 232 4345 -23311 5 237 4345 -23316 4 239 4345 -2331a 2 240 4345 -2331c 10 244 4345 -2332c a 246 4345 -23336 7 244 4345 -2333d 2 262 4345 -2333f 5 253 4345 -23344 6 255 4345 -2334a 8 256 4345 -23352 10 260 4345 -23362 11 262 4345 -23373 7 260 4345 -2337a 2 262 4345 -2337c 1a 280 4345 -23396 6 281 4345 -2339c 4d 284 4345 -233e9 4 285 4345 -233ed 6 286 4345 -233f3 19 295 4345 -2340c 17 305 4345 -23423 46 309 4345 -23469 4 310 4345 -2346d 13 320 4345 -23480 17 326 4345 -23497 7 328 4345 -2349e 8 331 4345 -234a6 9 333 4345 -234af 4 132 4345 -234b3 5 137 4345 -234b8 8 138 4345 -234c0 5 139 4345 -234c5 8 140 4345 -234cd e 142 4345 -234db 6 143 4345 -234e1 5 148 4345 -234e6 19 155 4345 -234ff 2 156 4345 -23501 6 157 4345 -23507 19 163 4345 -23520 4 164 4345 -23524 7 166 4345 -2352b 5 167 4345 -23530 3 169 4345 -23533 3 170 4345 -23536 18 178 4345 -2354e 6 179 4345 -23554 6 181 4345 -2355a 8 182 4345 -23562 2 184 4345 -23564 12 337 4345 -FUNC 23576 40 20 __crtCompareStringA -23576 6 349 4345 -2357c b 350 4345 -23587 2d 361 4345 -235b4 2 362 4345 -FUNC 235b6 f8 10 _strnicoll_l -235b6 7 55 603 -235bd b 57 603 -235c8 9 59 603 -235d1 13 60 603 -235e4 33 63 603 -23617 6 64 603 -2361d 23 65 603 -23640 a 67 603 -2364a 15 68 603 -2365f 21 78 603 -23680 b 80 603 -2368b 10 81 603 -2369b 11 84 603 -236ac 2 85 603 -FUNC 236ae 27 c _strnicoll -236ae 3 92 603 -236b1 9 93 603 -236ba 1 101 603 -236bb 5 95 603 -236c0 13 99 603 -236d3 2 101 603 -FUNC 236d5 4d 4 findenv -236d5 1 387 3036 -236d6 8 390 3036 -236de 12 394 3036 -236f0 d 399 3036 -236fd 9 390 3036 -23706 e 407 3036 -23714 1 408 3036 -23715 c 400 3036 -23721 1 408 3036 -FUNC 23722 5d 0 copy_environ -23722 4 428 3036 -23726 2 429 3036 -23728 6 434 3036 -2372e 2 464 3036 -23730 7 438 3036 -23737 8 439 3036 -2373f 14 443 3036 -23753 8 444 3036 -2375b 6 448 3036 -23761 11 458 3036 -23772 4 448 3036 -23776 2 461 3036 -23778 5 463 3036 -2377d 2 464 3036 -FUNC 2377f 24c 8 __crtsetenv -2377f 6 76 3036 -23785 2c 89 3036 -237b1 2 91 3036 -237b3 1c 98 3036 -237cf 5 114 3036 -237d4 13 125 3036 -237e7 c 126 3036 -237f3 4 130 3036 -237f7 d 153 3036 -23804 9 155 3036 -2380d b 100 3036 -23818 6 101 3036 -2381e 2 356 3036 -23820 3 164 3036 -23823 6 165 3036 -23829 f 171 3036 -23838 2 172 3036 -2383a 2 173 3036 -2383c 8 176 3036 -23844 f 178 3036 -23853 2 179 3036 -23855 2 180 3036 -23857 6 196 3036 -2385d 5 197 3036 -23862 2 200 3036 -23864 10 207 3036 -23874 9 210 3036 -2387d a 216 3036 -23887 6 218 3036 -2388d 5 235 3036 -23892 5 238 3036 -23897 5 241 3036 -2389c c 222 3036 -238a8 4 221 3036 -238ac 1d 230 3036 -238c9 2 233 3036 -238cb 9 245 3036 -238d4 4 250 3036 -238d8 2 251 3036 -238da 2f 255 3036 -23909 8 258 3036 -23911 3 259 3036 -23914 5 262 3036 -23919 5 264 3036 -2391e 21 287 3036 -2393f 25 289 3036 -23964 21 338 3036 -23985 4 339 3036 -23989 b 343 3036 -23994 7 346 3036 -2399b 5 349 3036 -239a0 8 351 3036 -239a8 6 352 3036 -239ae 8 355 3036 -239b6 8 271 3036 -239be 6 274 3036 -239c4 7 276 3036 -FUNC 239cb 50 4 _strdup -239cb 1 66 901 -239cc b 70 901 -239d7 6 71 901 -239dd 9 73 901 -239e6 e 77 901 -239f4 1c 80 901 -23a10 4 81 901 -23a14 6 84 901 -23a1a 1 85 901 -FUNC 23a1b ba c _mbschr_l -23a1b 7 53 4568 -23a22 b 55 4568 -23a2d 32 58 4568 -23a5f 8 60 4568 -23a67 d 61 4568 -23a74 a 65 4568 -23a7e 7 67 4568 -23a85 10 69 4568 -23a95 3 70 4568 -23a98 8 72 4568 -23aa0 d 63 4568 -23aad 8 76 4568 -23ab5 e 77 4568 -23ac3 10 79 4568 -23ad3 2 80 4568 -FUNC 23ad5 13 8 _mbschr -23ad5 0 86 4568 -23ad5 12 87 4568 -23ae7 1 88 4568 -FUNC 23b00 be 8 strchr -23b00 0 60 928 -23b00 2 68 928 -23b02 4 69 928 -23b06 1 73 928 -23b07 2 74 928 -23b09 3 75 928 -23b0c 4 76 928 -23b10 6 77 928 -23b16 2 78 928 -23b18 2 81 928 -23b1a 3 82 928 -23b1d 2 83 928 -23b1f 2 84 928 -23b21 2 85 928 -23b23 2 86 928 -23b25 6 87 928 -23b2b 2 88 928 -23b2d 2 91 928 -23b2f 1 92 928 -23b30 2 93 928 -23b32 3 94 928 -23b35 1 95 928 -23b36 2 96 928 -23b38 2 101 928 -23b3a 5 102 928 -23b3f 2 104 928 -23b41 2 105 928 -23b43 2 107 928 -23b45 2 108 928 -23b47 2 110 928 -23b49 3 111 928 -23b4c 3 113 928 -23b4f 2 114 928 -23b51 2 116 928 -23b53 3 117 928 -23b56 6 119 928 -23b5c 2 120 928 -23b5e 5 124 928 -23b63 2 125 928 -23b65 5 127 928 -23b6a 2 128 928 -23b6c 6 130 928 -23b72 2 131 928 -23b74 1 134 928 -23b75 1 135 928 -23b76 1 137 928 -23b77 2 138 928 -23b79 1 139 928 -23b7a 3 142 928 -23b7d 2 143 928 -23b7f 2 144 928 -23b81 2 145 928 -23b83 2 146 928 -23b85 2 147 928 -23b87 2 148 928 -23b89 2 149 928 -23b8b 2 150 928 -23b8d 3 151 928 -23b90 2 152 928 -23b92 2 153 928 -23b94 2 154 928 -23b96 2 155 928 -23b98 2 156 928 -23b9a 2 157 928 -23b9c 2 158 928 -23b9e 2 159 928 -23ba0 2 160 928 -23ba2 1 163 928 -23ba3 1 164 928 -23ba4 3 165 928 -23ba7 1 166 928 -23ba8 1 167 928 -23ba9 3 170 928 -23bac 1 171 928 -23bad 1 172 928 -23bae 1 173 928 -23baf 1 174 928 -23bb0 3 177 928 -23bb3 1 178 928 -23bb4 1 179 928 -23bb5 1 180 928 -23bb6 1 181 928 -23bb7 3 184 928 -23bba 1 185 928 -23bbb 1 186 928 -23bbc 1 187 928 -23bbd 1 188 928 -PUBLIC 23b06 0 __from_strstr_to_strchr -FUNC 240b9 14 0 `operator new'::`6'::`dynamic atexit destructor for 'nomem'' -STACK WIN 4 41b0 86 13 0 8 0 e0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4240 41 3 0 18 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4290 18 4 0 0 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 42ae 18 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 42af 14 6 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 42c6 b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 42d1 22 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 42d2 1e 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 42f3 3f c 0 0 c 50 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4332 3f c 0 0 c 50 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4371 3f c 0 0 c 50 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 43b0 18 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 43b1 14 6 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 43c8 af c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4464 12 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 4477 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 448d 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 44a3 14 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 44b7 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 44cd 14 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 44e1 25 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4506 16 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 451c f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 452b 62 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 452c 60 1 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 452d 5c 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 454a 35 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 458d 42 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 458e 40 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 45cf da c 0 4 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 466c 15 0 0 4 c 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 46a0 8 0 0 4 c 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 46a9 53 c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 46f2 9 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 46fc 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4705 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 470b b1 8 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4713 a8 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4785 33 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 47bc 20 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 47dc 3c 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 47dd 3a 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4818 2e 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4846 36 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 487c 2a 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 48a6 16 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 48bc 5 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 48c1 30 5 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 48c6 2b 0 0 8 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 48f1 7 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 48f8 7 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 48ff 7 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4906 52 8 0 8 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 490c 4c 2 0 8 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 4958 36 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 498e 36 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 49c4 36 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 49fa 1a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4a14 30 1 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4a15 2e 0 0 10 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4a44 d5 7 0 1c 0 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4a4b ce 0 0 1c 4 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 60 - ^ = -STACK WIN 4 4b19 9d 5 0 10 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4b1e 98 0 0 10 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 4bb6 73 7 0 14 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4bbb 6c 2 0 14 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 4bbc 6a 1 0 14 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 4bbd 68 0 0 14 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 4c29 28 5 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4c2e 22 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4c51 21 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4c72 4c 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4c73 4a 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4cbe 5e 6 0 14 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4d1c 4a b 0 8 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4d26 1b 1 0 8 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4d27 16 0 0 8 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4d66 19 a 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4d67 17 9 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4d7f 6a 6 0 4 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4de9 f 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4df8 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4e06 1c 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4e07 18 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4e22 f 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4e31 8 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4e39 1b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4e54 1c 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4e70 1f 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4e8f 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4e93 b 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4e9e 5 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4ea3 11 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4eb4 4e 9 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4eb5 4a 8 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 4eba 44 3 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 4ebb 42 2 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 4f02 18 2 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4f1a 58 8 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4f1b 54 7 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 4f20 4e 2 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 4f34 37 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 4f72 56 9 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4f73 52 8 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 4f78 4c 3 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 4f79 4a 2 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 4fc8 16 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4fde d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4feb 19 8 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4fec 15 7 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5004 18 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5005 14 6 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 501c b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5027 19 8 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5028 15 7 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5040 18 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5041 14 6 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5058 b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5063 18 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5064 14 6 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 507b 18 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 507c 14 6 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5093 b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 509e 1c 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 509f 18 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 50ba 22 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 50bb 1e 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 50dc 22 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 50dd 1e 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 50fe 22 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 50ff 1e 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5120 7b 8 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5124 75 4 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5128 70 0 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 519b 5b 8 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 51a2 52 1 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 51a3 50 0 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 51f6 a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5200 a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 520a a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5214 a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 521e a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5228 24 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 524c 41 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 528d 1b6 c 0 0 c 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5405 14 0 0 0 c 2c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 5443 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 544d a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5457 fc 1c 0 14 4 328 0 1 $T0 $ebp 680 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5553 22 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5554 20 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5575 d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5582 9 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 558b 24 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 55af 10 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 55bf 9 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 55c8 96 7 0 8 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 55cf 8d 0 0 8 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 55fb 60 0 0 8 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 565e 1a 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5678 1c 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5694 1f 3 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 56b3 1c 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 56cf 1d 3 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 56ec 20 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 570c 1d 3 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5729 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 573a 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 574b 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5761 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5777 14f c 0 8 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 58bc 9 0 0 8 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 58c6 1a 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 58e0 1a 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 58fa 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5912 1a 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 592c 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5944 f6 7 0 18 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 594b ed 0 0 18 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 5973 c4 0 0 18 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 5977 bf 0 0 18 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 5a3a 27 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5a61 28 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5a89 87 4 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5a8d 81 0 0 14 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5ab2 5b 0 0 14 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5b10 1b 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5b2b 107 5 0 18 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5b30 100 0 0 18 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 5b5b d4 0 0 18 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 5b5f cf 0 0 18 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 5c32 1e 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5c50 27 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5c77 28 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5c9f 24 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5cc3 26 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5ce9 15 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5cfe 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5d07 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5d10 18 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5d11 16 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5d28 20 1 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5d29 1e 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5d48 37 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5d4d 31 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5d7f 3c 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5d84 36 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5dbb 3c 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5dc0 36 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5df7 3c 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5dfc 36 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5e33 3c 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5e38 36 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5e6f 37 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5e74 31 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5ea6 37 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5eab 31 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5edd 92 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5f1b 34 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5f1c 32 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5f6f e2 c 0 c c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 6039 11 0 0 c c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 6051 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6062 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6073 f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6082 f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6091 4c 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6092 4a 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 616b 33 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 619e 36 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 61d4 36 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 620a 39 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6243 14 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6257 f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6266 f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6275 96 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6276 94 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 62ba 4a 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 62bb 46 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 630b 2f 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6313 26 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 633a 82 9 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6341 78 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 63bc e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 63ca 3 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 63cd 33 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6400 24 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 6404 1e 2 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 6424 4a a 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6429 44 5 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 642a 42 4 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 646e d 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 647b 10 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 648b e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6499 994 2c 0 10 0 278 0 1 $T0 $ebp 504 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 64bb 945 a 0 10 4 278 0 1 $T0 $ebp 504 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 636 - ^ = -STACK WIN 4 64c2 93b 3 0 10 8 278 0 1 $T0 $ebp 504 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 636 - ^ = -STACK WIN 4 64c5 937 0 0 10 c 278 0 1 $T0 $ebp 504 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 636 - ^ = -STACK WIN 4 6e2d 3b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6e68 13 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6e7b 13 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6e8e 1e 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6e8f 1c 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6eac 1b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6ec7 2a 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6ec8 28 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6ef1 1b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6f0c 2a 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6f0d 28 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6fa0 24 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6fd0 196 14 0 10 0 14 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6fd4 d3 10 0 10 4 14 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 24 - ^ = -STACK WIN 4 6fd9 cd b 0 10 8 14 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 28 - ^ = $ebx $T0 24 - ^ = -STACK WIN 4 6fda cb a 0 10 c 14 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 28 - ^ = $ebx $T0 24 - ^ = -STACK WIN 4 6fe4 c0 0 0 10 10 14 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 28 - ^ = $ebx $T0 24 - ^ = -STACK WIN 4 7166 90 c 0 10 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 71eb a 0 0 10 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 71f6 1a 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7210 1a 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 722a 1a 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7244 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 725c 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7274 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 728c 104 9 0 0 0 328 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 7390 5c6 22 0 c 0 594 0 1 $T0 $ebp 1304 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 73b2 597 0 0 c 4 594 0 1 $T0 $ebp 1304 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 73fe 542 0 0 c 8 594 0 1 $T0 $ebp 1304 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1436 - ^ = -STACK WIN 4 740c 533 0 0 c c 594 0 1 $T0 $ebp 1304 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1436 - ^ = -STACK WIN 4 7956 dc c 0 c c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 7a28 9 0 0 c c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 7a32 2d 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7a37 27 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7a5f e1 c 0 4 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 7b36 9 0 0 4 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 7b40 49 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7b41 3b 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7b42 39 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7b89 55 8 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7b8a 53 7 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 7b91 4b 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 7b97 2a 0 0 0 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 7bde 15 3 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 7bf3 18 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7c0b c3 c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 7cc5 8 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 7cce 31 7 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 7cd5 28 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 7cff 240 c 0 0 c 64 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 7f28 4 0 0 0 c 64 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 7f3f 4c 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f40 4a 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f41 48 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f8b 21 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f8c 1f 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7fac 10 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7fbc 40 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7fbd 3e 1 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7fbe 3c 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ffc 48 2 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ffd 46 1 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ffe 44 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8044 4b 2 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8045 49 1 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8046 47 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 808f 50 2 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8090 4e 1 0 c 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8091 4c 0 0 c 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 80df 8 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 80e7 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 80f1 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 80fb 8e c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8151 8 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 8189 9f c 0 0 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 821f 8 0 0 0 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 8228 19 8 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8229 15 7 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8241 b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 824c 22 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 824d 1e 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 826e 5c 2 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 826f 5a 1 0 c 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8270 58 0 0 c 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 82ca 44 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 830e e1 c 0 10 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8390 a 0 0 10 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 83ce 20 0 0 10 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 83ef 45 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8434 54 c 0 8 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8477 9 0 0 8 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 8488 25 7 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 848f 1d 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 84ad 13 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 84c0 b3 8 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 84c7 9a 1 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 84c8 98 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8573 4c 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 85bf 139 1 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 85c0 137 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 85cf 127 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 85d0 11f 0 0 8 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 12 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 85d1 11d 0 0 8 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 12 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 86f8 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 86fc 32 c 0 8 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8714 a 0 0 8 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 872e 33 c 0 8 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8747 a 0 0 8 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 8761 32 c 0 8 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8779 a 0 0 8 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 8793 3b c 0 14 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 87b4 a 0 0 14 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 87ce 79 6 0 4 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 87f0 52 0 0 4 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 87f1 50 0 0 4 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 8847 49 c 0 4 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8890 30 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8891 2a 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 8892 28 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 88c0 82 8 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 88c1 7b 7 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 88c8 73 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8942 19c 14 0 18 c 3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 89d2 9 0 0 18 c 3c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 8a62 7b 0 0 18 c 3c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 8ade 17f c 0 10 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8c49 4 0 0 10 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 8c5d 91 c 0 10 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8ce2 4 0 0 10 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 8cee 143 9 0 10 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8cfe 131 0 0 10 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 8d02 12c 0 0 10 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 8d05 128 0 0 10 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 8e31 6c 3 0 1c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8e9d f2 6 0 20 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8ea3 ea 0 0 20 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8eb3 d9 0 0 20 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8f31 5a 0 0 20 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 8f8f 356 17 0 20 0 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8f99 34a d 0 20 4 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 48 - ^ = -STACK WIN 4 8fa5 33d 1 0 20 8 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 48 - ^ = -STACK WIN 4 8fa6 33b 0 0 20 c 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 48 - ^ = -STACK WIN 4 92e5 18 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 92e6 14 6 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 92fd e4 6 0 20 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 9301 de 2 0 20 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 9302 dc 1 0 20 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 9303 da 0 0 20 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 93e1 6c 7 0 0 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 93e7 64 1 0 0 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 93e8 62 0 0 0 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 9408 41 0 0 0 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 944d 6e 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 944e 6c 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 94bb 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 94c4 6e 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 94c5 6c 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9532 9 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 953b 15 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9550 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9556 32 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9557 30 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9588 19 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 95a1 3d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 95de bf c 0 8 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 9694 8 0 0 8 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 969d 77 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 969e 75 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 969f 71 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9714 18 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9715 16 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 972c 121 c 0 4 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 9835 b 0 0 4 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 9841 b 0 0 4 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 984d 69 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9857 4b 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9860 25 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 98b6 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 98bc 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 98c2 184 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 98c3 182 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 98de 166 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9a46 39 c 0 0 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 9a66 4 0 0 0 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 9a7f 13 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9a92 37 c 0 0 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 9ab6 4 0 0 0 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 9ac9 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9b2c b9 5 0 4 0 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9b2e b5 3 0 4 4 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 9b2f b3 2 0 4 8 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 12 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 9b30 b1 1 0 4 c 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 12 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 9b31 af 0 0 4 10 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 12 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 9be5 2f 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9be6 2d 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9c14 3c c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 9c4a 5 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 9c50 12 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9c62 4f c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 9ca8 8 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 9cb1 75 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9cf9 2c 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9d26 c3 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9d27 c1 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = -STACK WIN 4 9d35 9c 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 9d3c 94 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 9d3d 90 0 0 4 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 9de9 a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9df3 31 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9df4 2f 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9e24 9 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9e2d d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9e3a 22 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9e5c 22 3 0 18 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 9e7e 70 c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 9ee5 8 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 9eee f5 c 0 8 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 9fd7 b 0 0 8 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 9fe3 70 c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 a04a 8 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 a053 31 3 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 a084 eb c 0 8 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 a163 b 0 0 8 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 a16f 53 c 0 4 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 a1b9 8 0 0 4 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 a258 65 b 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 a25d 5f 6 0 c 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 a262 59 1 0 c 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 a263 57 0 0 c c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 aa15 3d 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 aa52 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 aa60 1a0 8 0 4 0 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 aa62 19c 6 0 4 4 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 aa67 196 1 0 4 8 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 aa68 194 0 0 4 c 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 aa85 176 0 0 4 10 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 20 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 ac00 20 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ac20 39 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ac59 1 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ac5a 32 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ac65 1c 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ac8c 15e 6 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 ac92 156 0 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 acaa 13d 0 0 8 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 acb0 136 0 0 8 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 adea 1b 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ae05 db b 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ae06 c3 a 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 ae0f b9 1 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 ae10 b7 0 0 0 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 ae5f 67 0 0 0 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 16 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 aee0 a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 aeea 198 e 0 c 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 aef2 187 6 0 c 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 aef8 180 0 0 c 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 b082 b9 11 0 0 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 b089 b0 a 0 0 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 b092 a6 1 0 0 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 b093 a4 0 0 0 c c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 b13b 135 b 0 0 0 8 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b143 12a 3 0 0 4 8 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 12 - ^ = -STACK WIN 4 b144 128 2 0 0 8 8 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 16 - ^ = $ebx $T0 12 - ^ = -STACK WIN 4 b145 126 1 0 0 c 8 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 16 - ^ = $ebx $T0 12 - ^ = -STACK WIN 4 b146 124 0 0 0 10 8 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 16 - ^ = $ebx $T0 12 - ^ = -STACK WIN 4 b270 24 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b271 22 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b272 20 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b294 24 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b295 22 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b296 20 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b2b8 5b 6 0 0 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 b2be 43 0 0 0 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 b313 5a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b36d 74 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b36e 72 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = -STACK WIN 4 b37a 53 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 b381 4b 0 0 0 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 b38c 30 0 0 0 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 b3e1 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b3e7 94 15 0 0 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 b3fb 7e 1 0 0 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 b3fc 7c 0 0 0 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 b418 5f 0 0 0 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 b47b 8 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b483 160 5 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 b488 159 0 0 8 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 b4c5 11b 0 0 8 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 b52c b3 0 0 8 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 b5e3 25 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b608 25 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 b60c 1f 2 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 b62d 4f a 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b632 49 5 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 b633 47 4 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 b67c 910 30 0 10 0 474 0 1 $T0 $ebp 1012 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 b69e 8c1 e 0 10 4 474 0 1 $T0 $ebp 1012 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1144 - ^ = -STACK WIN 4 b6a5 8b7 7 0 10 8 474 0 1 $T0 $ebp 1012 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1144 - ^ = -STACK WIN 4 b6ac 8af 0 0 10 c 474 0 1 $T0 $ebp 1012 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1144 - ^ = -STACK WIN 4 bf8c 97 7 0 10 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 bf93 8e 0 0 10 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 bfbf 61 0 0 10 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 c023 17 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c03a 5 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c03f 55 7 0 10 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 c046 4c 0 0 10 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 c094 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c0ac 1a 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c0c6 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c0de 1a 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c0f8 14e c 0 14 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 c23c 9 0 0 14 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 c246 1e 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c264 1e 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c282 1e 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c2a0 1c 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c2bc 1c 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c2d8 1c 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c2f4 25 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c319 25 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 c31d 1f 2 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 c33e 4f a 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c343 49 5 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 c344 47 4 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 c38d 91c 2c 0 10 0 474 0 1 $T0 $ebp 1012 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 c3a9 8d3 10 0 10 4 474 0 1 $T0 $ebp 1012 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1144 - ^ = -STACK WIN 4 c3b0 8c9 9 0 10 8 474 0 1 $T0 $ebp 1012 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1144 - ^ = -STACK WIN 4 c3b9 8bf 0 0 10 c 474 0 1 $T0 $ebp 1012 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1144 - ^ = -STACK WIN 4 cca9 154 9 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 ccb1 14a 1 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 ccb2 148 0 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 cdfd 25 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ce22 25 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 ce26 1f 2 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 ce47 4f a 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ce4c 49 5 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 ce4d 47 4 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 ce96 f60 2a 0 10 0 ad4 0 1 $T0 $ebp 1160 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 ceb8 f0f 8 0 10 4 ad4 0 1 $T0 $ebp 1160 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 2776 - ^ = -STACK WIN 4 ceb9 f0b 7 0 10 8 ad4 0 1 $T0 $ebp 1160 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 2776 - ^ = -STACK WIN 4 cec0 f03 0 0 10 c ad4 0 1 $T0 $ebp 1160 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 2776 - ^ = -STACK WIN 4 ddf6 1f 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ddf7 1d 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ddf8 1b 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 de20 29 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 de50 42 18 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 de5e 33 a 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 de5f 31 9 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 de68 27 0 0 8 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 dea0 bb 33 0 4 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 deba a1 19 0 4 10 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 df29 14 0 0 4 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 df5b 19 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 df74 9b c 0 4 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 dfed 9 0 0 4 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 e00f 34 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e01a 1d 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e043 d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e050 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e059 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e062 23d c 0 8 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 e257 b 0 0 8 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 e29f 1b0 c 0 4 c 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 e40d 14 0 0 4 c 30 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 e44f a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e459 104 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e45a 102 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = -STACK WIN 4 e45b 100 1 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = -STACK WIN 4 e45c fe 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = -STACK WIN 4 e495 c4 0 0 4 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 16 - ^ = -STACK WIN 4 e55d 15a 24 0 14 0 94 0 1 $T0 $ebp 100 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 e576 bc b 0 14 4 94 0 1 $T0 $ebp 100 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 152 - ^ = -STACK WIN 4 e577 b8 a 0 14 8 94 0 1 $T0 $ebp 100 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 152 - ^ = -STACK WIN 4 e581 ad 0 0 14 c 94 0 1 $T0 $ebp 100 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 152 - ^ = -STACK WIN 4 e6b7 a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e6c1 a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e6cb 10 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e6db c5 c 0 8 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 e761 17 0 0 8 c 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 e7a0 5e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e7b8 45 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e7fe 2f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e82d 55 b 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e82e 53 a 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 e82f 51 9 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 e830 4f 8 0 0 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 e831 4d 7 0 0 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 e882 18a 1d 0 0 0 51c 0 1 $T0 $ebp 1180 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 e89e 161 1 0 0 4 51c 0 1 $T0 $ebp 1180 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1312 - ^ = -STACK WIN 4 e89f 15d 0 0 0 8 51c 0 1 $T0 $ebp 1180 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1312 - ^ = -STACK WIN 4 ea0c a4 c 0 0 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 eaa4 b 0 0 0 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 eab0 7a 7 0 0 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 eab7 71 0 0 0 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 eb2a 1d9 19 0 8 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 eb3b 1c1 8 0 8 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 eb3f 1ba 4 0 8 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 eb43 1b5 0 0 8 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 ed03 3c 6 0 0 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 ed3f 19a c 0 4 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 eea0 8 0 0 4 c 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 eed9 1e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 eef7 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 eefd 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ef03 140 12 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ef04 13e 11 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 ef05 13c 10 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 ef06 13a f 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 ef15 12a 0 0 4 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 f043 86 8 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f044 84 7 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 f045 82 6 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 f046 80 5 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 f04b 7a 0 0 4 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 f0c9 8c 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f0ca 8a 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f0d3 7e 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 f0d4 7c 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 12 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 f0d5 7a 0 0 4 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 12 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 f155 24 3 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f156 22 2 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f165 12 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f179 3e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f182 31 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f1b7 76 c 0 0 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 f221 8 0 0 0 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 f22d 66 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f22e 64 1 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f22f 62 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f293 53 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f2e6 96 c 0 4 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 f370 b 0 0 4 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 f37c 5 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f381 88 c 0 0 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 f3fd b 0 0 0 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 f409 5 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f40e 3 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f411 3e 2 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f412 3c 1 0 c 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 f413 3a 0 0 c 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 f41e 2e 0 0 c c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 f44f 129 6 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 f453 123 2 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 f454 121 1 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 f455 11f 0 0 8 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 f578 6b 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 f57c 4d 1 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 f57d 4b 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 f5e3 171 4 0 0 0 10 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f5e7 169 0 0 0 4 10 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 20 - ^ = -STACK WIN 4 f606 149 0 0 0 8 10 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 24 - ^ = $ebx $T0 20 - ^ = -STACK WIN 4 f607 141 0 0 0 c 10 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 24 - ^ = $ebx $T0 20 - ^ = -STACK WIN 4 f754 1d4 1e 0 18 0 b4 0 1 $T0 $ebp 96 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 f76d 1b1 5 0 18 4 b4 0 1 $T0 $ebp 96 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 184 - ^ = -STACK WIN 4 f76e 1ad 4 0 18 8 b4 0 1 $T0 $ebp 96 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 184 - ^ = -STACK WIN 4 f772 1a8 0 0 18 c b4 0 1 $T0 $ebp 96 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 184 - ^ = -STACK WIN 4 f928 2f6 17 0 4 0 1c4 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 f93e 2d6 1 0 4 4 1c4 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 456 - ^ = -STACK WIN 4 f93f 2d2 0 0 4 8 1c4 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 456 - ^ = -STACK WIN 4 fc1e 1ce 18 0 4 0 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 fc37 1ab 0 0 4 4 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 156 - ^ = -STACK WIN 4 fc38 1a7 0 0 4 8 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 156 - ^ = -STACK WIN 4 fc3f 19f 0 0 4 c 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 156 - ^ = -STACK WIN 4 fdec f3 7 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 fdf2 2c 1 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 fdf3 2a 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 fedf 5 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 fee4 170 c 0 8 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1000a 10 0 0 8 c 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 1001b b 0 0 8 c 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 1004c 7 0 0 8 c 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 10054 15f 10 0 14 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1005b a1 9 0 14 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 1005c b2 8 0 14 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 10064 96 0 0 14 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 101b3 1b 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 101ce 4f 6 0 c 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1021d 30 4 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1024d 36 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 10283 e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 10291 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 102a7 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 102b8 13 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 102cb e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 102d9 13 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 102ec e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 102fa 13 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1030d e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1031b 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 10331 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 10342 13 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 10355 e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 10363 13 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 10376 e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 10384 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1039a 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 103ab 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 103c1 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 103d2 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 103e8 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 103f9 13 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1040c e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1041a c 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 10426 26 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1044c 21 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1046d 26 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 10493 21 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 106ab 33 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 106de 24 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 106e2 1e 2 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 10702 4a a 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 10707 44 5 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 10708 42 4 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 1074c 9b0 2c 0 10 0 278 0 1 $T0 $ebp 504 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1076e 960 a 0 10 4 278 0 1 $T0 $ebp 504 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 636 - ^ = -STACK WIN 4 10775 956 3 0 10 8 278 0 1 $T0 $ebp 504 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 636 - ^ = -STACK WIN 4 10778 952 0 0 10 c 278 0 1 $T0 $ebp 504 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 636 - ^ = -STACK WIN 4 110fc 129 8 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 11103 120 1 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 11104 11e 0 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 11225 33 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 11258 24 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1125c 1e 2 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1127c 4a a 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 11281 44 5 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 11282 42 4 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 112c6 10 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 112d6 f88 2a 0 10 0 8d0 0 1 $T0 $ebp 656 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 112f8 f39 8 0 10 4 8d0 0 1 $T0 $ebp 656 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 2260 - ^ = -STACK WIN 4 112f9 f35 7 0 10 8 8d0 0 1 $T0 $ebp 656 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 2260 - ^ = -STACK WIN 4 11300 f2d 0 0 10 c 8d0 0 1 $T0 $ebp 656 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 2260 - ^ = -STACK WIN 4 1225e c2 11 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1226f 9e 0 0 4 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 12320 9b c 0 4 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 123b2 8 0 0 4 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 123bb 46 c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 123f8 8 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 12401 113 8 0 10 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 12408 21 1 0 10 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 12409 1f 0 0 10 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 12514 17 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1252b 83 13 0 10 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 12534 78 a 0 10 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1253e 6d 0 0 10 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 125ae 119 c 0 10 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 126bd 9 0 0 10 c 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 126c7 7d 8 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 126ce 75 1 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 126cf 73 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 126fd 2c 0 0 8 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 12 - ^ = -STACK WIN 4 12744 81 b 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 12749 7b 6 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 1274e 75 1 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 1274f 73 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 127c5 71 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 127e6 4f 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 12836 a0 c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 128c8 d 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 128d6 22 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 128f8 19f c 0 0 c 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 129c5 e 0 0 0 c 28 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 12a8e 8 0 0 0 c 28 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 12a97 115 c 0 8 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 12b7f 2c 0 0 8 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 12bac 11e c 0 c c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 12ca3 d 0 0 c c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 12cca 3f 9 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 12cd3 34 0 0 8 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 12cec 18 0 0 8 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 12d09 21b c 0 8 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 12e47 e 0 0 8 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 12f24 79 7 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 12f2b 70 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 12f61 39 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 12f62 37 0 0 c c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 12f9d 21 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 12fbe 46 b 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 12fc9 3a 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 13004 3c 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 13009 36 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 13040 48 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 13088 2b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 130b3 314 11 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 130c0 305 4 0 8 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 130c4 300 0 0 8 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 130f1 2d2 0 0 8 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 133c7 b0 d 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 133cd a9 7 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 133d4 a1 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 13477 106 11 0 4 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 13483 f8 5 0 4 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 13484 f6 4 0 4 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 13488 f1 0 0 4 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 1357d 2df 12 0 c 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1358a 2d0 5 0 c 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 1358b 2ce 4 0 c 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 1358f 2c9 0 0 c c c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 1385c cd 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 13929 2e2 f 0 0 0 138 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 13938 294 0 0 0 4 138 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 316 - ^ = -STACK WIN 4 1394d 27e 0 0 0 8 138 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 316 - ^ = -STACK WIN 4 13950 27a 0 0 0 c 138 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 316 - ^ = -STACK WIN 4 13c0b a8 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 13c0c a6 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 13c54 5d 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 13cb3 2e3 2a 0 4 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 13cd7 2bd 6 0 4 4 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 13cdc 2b7 1 0 4 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 13cdd 2b5 0 0 4 c 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 13f96 72 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 13f97 70 6 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 13f98 6e 5 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 13f9d 68 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 14008 7c c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 14079 a 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 14084 d 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14091 d 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1409e d 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 140ab f3 23 0 0 4 328 0 1 $T0 $ebp 680 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1419e 1e 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 142f3 a3 c 0 4 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 14385 10 0 0 4 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 14396 6 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1439c 1b 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 143b7 26 3 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 143b8 24 2 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 143dd 63 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14440 474 a 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14447 42e 3 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 14448 42c 2 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 14449 42a 1 0 0 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 1444a 428 0 0 0 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 148b4 b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 148bf d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 148cc e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 148da e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 148e8 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 148f6 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14904 12 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14916 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14924 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14932 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14940 b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1494b b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14956 b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14961 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1496f b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1497a e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14988 19 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 149a1 84 13 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 149a2 80 12 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 149a3 7e 11 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 149c9 57 0 0 8 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 12 - ^ = -STACK WIN 4 14a25 d 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14a32 12 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14a44 9c 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14a57 86 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14ae0 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14aea 5 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14aef 7 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14af6 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14b00 8 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14b08 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14b12 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14b1c 8 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14b24 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14b2e 8 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14b36 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14b40 8 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14b48 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14b52 8 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14b5a 7b 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14b5d 75 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14bd5 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14bde 25 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14c03 d 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14c10 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14c14 29 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14c26 f 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14c3d 16 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14c53 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14c57 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14c5b 1b 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14c76 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14c7a 2f 6 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14ca9 25 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14cce 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14cd2 d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14cdf e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14ced 20 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14d0d 25 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14d32 33 6 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 14d65 34 6 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 14d99 13 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14dac 56 8 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14db2 4d 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14e02 61 b 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14e03 5d a 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14e04 59 9 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14e63 17 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14e7a 15 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14e8f 14 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14ea3 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14eb1 14 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14ec5 25 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14ec6 23 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14ed2 14 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14eea 38 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14eeb 36 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14eec 32 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14f22 91 7 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 14f26 89 3 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 14f27 87 2 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 14f5c 40 0 0 8 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 14fb3 35 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14fb6 2f 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14fe8 81 b 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14fe9 7d a 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14fea 79 9 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15069 1e 3 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1506a 1c 2 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15087 47 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15088 43 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 150ce 47 7 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 150cf 45 6 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 150d0 43 5 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 150d1 41 4 0 0 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 15115 65 11 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15116 61 10 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 1511b 5b b 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 1511c 57 a 0 8 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 1517a 12 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1518c 31 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 151bd f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 151cc f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 151db 1d 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 151f8 33 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1522b 73 7 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1522f 6b 3 0 14 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15230 5b 2 0 14 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1529e 2f 3 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 152cd f 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 152dc 79 4 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 152dd 75 3 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 152de 71 2 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15355 68 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15356 64 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 153bd a6 3 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 153be a2 2 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 153de 81 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 153f0 6e 0 0 8 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 15463 26 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15464 22 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15489 31 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1548e 29 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 154ba d0 7 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 154be b3 3 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 154bf b1 2 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 154ce 9f 0 0 8 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 1558a 69 13 0 8 0 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1559b 4f 2 0 8 4 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 1559c 4b 1 0 8 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 1559d 49 0 0 8 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 155f3 96 22 0 8 0 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15607 79 e 0 8 4 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15615 66 0 0 8 8 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1563a 29 0 0 8 c 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 52 - ^ = -STACK WIN 4 15689 2e 1 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1568a 2a 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 156b7 62 8 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 156b8 5e 7 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 156b9 5a 6 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15719 8b a 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1571a 87 9 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1571b 83 8 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 157a4 1c 9 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 157a5 18 8 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 157c0 2a 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 157c5 22 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 157ea a6 5 0 4 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15890 37 3 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 158c7 51 1 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 158c8 4d 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15918 2e 1 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15919 2a 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15946 6a a 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15947 66 9 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 1594e 5e 2 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 159b0 6c a 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 159b1 68 9 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 159b2 64 8 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15a1c e0 e 0 4 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15a23 d7 7 0 4 4 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15a2a cd 0 0 4 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15a45 b1 0 0 4 c 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 15afc 4f 6 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15b02 47 0 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15b4b 22 5 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15b6d 22 5 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15b8f 22 5 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15bb1 2e 1 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15bb2 2a 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15bdf 2e 1 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15be0 2a 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15c0d 141 7 0 8 0 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15c14 138 0 0 8 4 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15c95 b3 0 0 8 8 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 15c96 b1 0 0 8 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 15d4e d4 6 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15e22 c4 e 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15ee6 7e d 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15f64 125 11 0 10 0 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15f75 112 0 0 10 4 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 16089 15f f 0 8 0 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 16098 4a 0 0 8 4 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 160f0 b3 0 0 8 8 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 161e8 31 6 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 16219 12 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1622b 12 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1623d 12 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1624f 150 7 0 8 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 16256 147 0 0 8 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1639f a0 6 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1643f 50 5 0 4 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1648f 2bb 2b 0 4 0 d0 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 164aa 296 10 0 4 4 d0 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 212 - ^ = -STACK WIN 4 164b3 28a 7 0 4 8 d0 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 212 - ^ = -STACK WIN 4 164ba 282 0 0 4 c d0 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 212 - ^ = -STACK WIN 4 1674a d9 b 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 167b8 17 0 0 c 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 16823 14 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 16837 1b8 18 0 4 0 60 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 16848 1a0 7 0 4 4 60 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1684f 18d 0 0 4 8 60 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 16870 168 0 0 4 c 60 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 108 - ^ = -STACK WIN 4 169ef 56f 22 0 c 0 a0 0 1 $T0 $ebp 108 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 16a03 97 e 0 c 4 a0 0 1 $T0 $ebp 108 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 164 - ^ = -STACK WIN 4 16a11 88 0 0 c 8 a0 0 1 $T0 $ebp 108 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 164 - ^ = -STACK WIN 4 16f5e 153 10 0 8 0 d0 0 1 $T0 $ebp 112 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 16f82 11b 0 0 8 4 d0 0 1 $T0 $ebp 112 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 212 - ^ = -STACK WIN 4 16f89 113 0 0 8 8 d0 0 1 $T0 $ebp 112 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 212 - ^ = -STACK WIN 4 16f92 109 0 0 8 c d0 0 1 $T0 $ebp 112 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 212 - ^ = -STACK WIN 4 170b1 1ea 1b 0 8 0 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 170cc 1c8 0 0 8 4 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 17154 111 0 0 8 8 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 64 - ^ = -STACK WIN 4 17155 10f 0 0 8 c 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 64 - ^ = -STACK WIN 4 1729b e4 15 0 4 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 172a2 db e 0 4 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 172b0 ca 0 0 4 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1737f f 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1738e 100 19 0 4 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1739a f2 d 0 4 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 173a7 e4 0 0 4 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 1748e 46 3 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 174d4 92 6 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 17566 b42 14 0 8 0 6c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 17571 b35 9 0 8 4 6c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1757a b2b 0 0 8 8 6c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 175e3 abe 0 0 8 c 6c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 120 - ^ = -STACK WIN 4 180a8 211 13 0 4 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 180af 208 c 0 4 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 180bb 1fb 0 0 4 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 182b9 28b 1f 0 4 0 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 182c5 27a 13 0 4 4 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 156 - ^ = -STACK WIN 4 182c6 278 12 0 4 8 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 156 - ^ = -STACK WIN 4 182d8 263 0 0 4 c 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 156 - ^ = -STACK WIN 4 18544 341 d 0 8 0 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 18589 2f7 0 0 8 4 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 52 - ^ = -STACK WIN 4 185f0 28f 0 0 8 8 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 52 - ^ = -STACK WIN 4 185f1 28d 0 0 8 c 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 52 - ^ = -STACK WIN 4 18885 4e4 18 0 14 0 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 18893 4d4 a 0 14 4 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 88 - ^ = -STACK WIN 4 18894 4d2 9 0 14 8 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 88 - ^ = -STACK WIN 4 1889d 4c8 0 0 14 c 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 88 - ^ = -STACK WIN 4 18d69 14c 6 0 0 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 18eb5 116 5 0 10 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 18ed6 59 0 0 10 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 18fcb 1b 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 18fe6 1b 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19001 1b 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1901c a3 f 0 18 c 94 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 190b6 8 0 0 18 c 94 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 190bf a3 f 0 1c c 94 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 19159 8 0 0 1c c 94 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 19162 387 12 0 8 0 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 19172 350 2 0 8 4 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 19173 34e 1 0 8 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 19174 34c 0 0 8 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 194e9 13e 7 0 8 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 194f0 135 0 0 8 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 19627 b1 6 0 8 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 196d8 64 7 0 8 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 196df 5b 0 0 8 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1973c 57 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19793 8f 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19822 14 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19836 14 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1984a 87 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 198d1 e3 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 199b4 1bd 9 0 c 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 199bb 1b4 2 0 c 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 199bc 1b2 1 0 c 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 199bd 1b0 0 0 c c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 19b71 71 b 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19b76 6b 6 0 c 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 19b7b 65 1 0 c 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 19b7c 63 0 0 c c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 19be2 b3 e 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 19be6 1a a 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 19be7 2e 9 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 19bf0 e 0 0 10 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 19c95 46 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19c9a 40 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19cdb a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19ce5 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19ceb 51 6 0 10 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 19d3c 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19d51 13 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19d64 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19d79 13 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19d8c 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19da1 13 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19db4 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19dcc 16 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19de2 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19dfa 16 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19e10 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19e28 16 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19e3e 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19e56 16 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19e6c 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19e81 13 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19e94 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19ea9 13 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19ebc 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19ed1 13 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19ee4 53 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 19f37 e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19f45 44 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19f89 1de 1a 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 19f9a 1c6 9 0 8 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 19f9b 1c2 8 0 8 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 19fa3 1b9 0 0 8 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 1a167 78 c 0 8 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1a1d5 9 0 0 8 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 1a1df 5 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a1e4 1f7 8 0 14 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1a1eb 1ee 1 0 14 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 1a1ec 1ec 0 0 14 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 1a246 174 0 0 14 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 1a3db 29 3 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1a404 1b 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a41f 2a 3 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1a449 1b 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a464 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a46d 54 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1a4c1 2b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a4ec 4f 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1a53b 29 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a564 4f 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1a5b3 29 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a5dc 4f 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1a62b 29 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a654 54 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1a6a8 2b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a6d3 4f 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1a722 29 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a74b 4f 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1a79a 29 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a7c3 54 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1a817 2b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a842 54 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1a896 2b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a8c1 54 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1a915 2b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a940 4f 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1a98f 29 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a9b8 d 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a9c5 8 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a9cd 1f 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a9ec 1a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1aa06 1f 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1aa25 1c 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1aa41 12 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1aa53 1b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1aa6e 13b 1d 0 18 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1aa83 126 8 0 18 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 1aba9 3b 6 0 18 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1abe4 13d 1d 0 18 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1abf9 128 8 0 18 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 1ad21 3b 6 0 18 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1ad5c 1a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1ad76 3a2 1d 0 20 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1ad87 391 c 0 20 c 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 1b118 43 6 0 24 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1b15b 1b8 1d 0 1c 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1b170 1a3 8 0 1c c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 1b313 40 6 0 20 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1b353 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1b359 29 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1b382 419 6 0 0 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1b3a4 3f5 0 0 0 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 1b3a5 3ed 0 0 0 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 1b79b 190 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1b79c 18e 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1b92b 73 4 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1b92c 71 3 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 1b92d 6f 2 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 1b92e 6d 1 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 1b92f 6b 0 0 4 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 1b99e 33 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1b9a5 16 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 1b9a6 14 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 1b9d1 40 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1b9d2 3e 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1ba11 1c8 11 0 4 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1ba18 1bf a 0 4 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 1ba1c 1ba 6 0 4 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 1ba22 1b3 0 0 4 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 1bbd9 33 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1bbe0 16 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 1bbe1 14 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 1bc0c 89 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1bc0d 87 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1bc95 2c4 c 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1bc9c 2bb 5 0 4 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 1bc9d 2b9 4 0 4 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 1bca1 2b4 0 0 4 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 1bf59 395 1b 0 4 0 48 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1bf6a 37d a 0 4 4 48 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 76 - ^ = -STACK WIN 4 1bf6d 377 7 0 4 8 48 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 76 - ^ = -STACK WIN 4 1bf74 36f 0 0 4 c 48 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 76 - ^ = -STACK WIN 4 1c2ee 29 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1c317 16 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1c32d 26 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1c353 26 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1c379 26 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1c39f 3 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1c3a2 fe 9 0 4 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1c3a9 e9 2 0 4 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 1c3aa e7 1 0 4 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 1c3ab e5 0 0 4 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 1c4a0 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1c4a9 fe 9 0 4 0 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1c4b0 e9 2 0 4 4 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 1c4b1 e7 1 0 4 8 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 1c4b2 e5 0 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 1c5a7 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1c5b0 355 9 0 4 0 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1c5b7 34c 2 0 4 4 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 1c5b8 348 1 0 4 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 1c5b9 346 0 0 4 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 1c905 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1c90e 20 6 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1c912 1b 2 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1c917 15 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1c92e 36 6 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1c934 2f 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 1c964 79 8 0 4 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1c969 72 3 0 4 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 1c96a 70 2 0 4 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 1c9dd 3e6 11 0 10 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1c9e2 3df c 0 10 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 1c9e9 3d7 5 0 10 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 1c9ea 3d5 4 0 10 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 1cdc3 45d 1d 0 18 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1cdd7 449 9 0 18 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 1d220 1af a 0 18 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d22a 1a3 0 0 18 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 1d270 15c 0 0 18 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 1d2a3 128 0 0 18 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 1d3cf 1e 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d3ed 1d 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1d40a 1e 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d428 26 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1d496 60 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d49c 56 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 1d4a5 45 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 1d4a6 43 0 0 c c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 1d4f6 14 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1d50a 77 11 0 0 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d51b 5f 0 0 0 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d581 1e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1d59f 32 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1d5a0 30 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1d5d1 1b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1d5ec 96 12 0 4 0 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d5fd 7c 1 0 4 4 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d5fe 78 0 0 4 8 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d682 72 11 0 8 0 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d693 5a 0 0 8 4 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d6cf 13 0 0 8 8 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d6f4 1d0 13 0 4 0 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d705 1b6 2 0 4 4 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 128 - ^ = -STACK WIN 4 1d706 1b2 1 0 4 8 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 128 - ^ = -STACK WIN 4 1d707 1b0 0 0 4 c 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 128 - ^ = -STACK WIN 4 1d8c4 bf 12 0 4 0 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d8d5 a5 1 0 4 4 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d8d6 a1 0 0 4 8 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d983 2c 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1d9af 65 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1da14 3c 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1da50 1e3 4 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1da51 1e1 3 0 c 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 1da52 1df 2 0 c 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 1da53 1dd 1 0 c c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 1da54 1db 0 0 c 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 1dc33 12 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1dc45 18 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1dc5d 40 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1dc9d 78 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1dd15 1490 4 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1dd16 83f 3 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1dd17 83d 2 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1f1a5 1680 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1f1a9 15f8 1 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1f1aa 15f6 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1f1db 86c 0 0 c c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 20825 be 9 0 c 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 2082e a9 0 0 c 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 20840 96 0 0 c 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 20930 82 6 0 c 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 209b2 6e 4 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 20a20 5 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20a25 22b 8 0 14 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 20a2c 222 1 0 14 4 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 20a2d 220 0 0 14 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 20a8b 1c1 0 0 14 c 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 20c50 29 3 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 20c79 1b 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20c94 2a 3 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 20cbe 1b 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20cd9 1f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20cf8 1f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20d17 2d 9 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20d20 23 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20d44 94 6 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20d45 92 5 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20d4a 8c 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20dd8 cd c 0 4 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 20e9b 9 0 0 4 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 20ea5 2c 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20ea6 2a 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20ed1 2a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20efb 22 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20efc 20 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20f1d d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20f64 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20f75 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20f8a 5 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20f8f 5 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20f94 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20fa5 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20fba 50 c 0 0 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 20fd7 1c 0 0 0 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 2100a 60 9 0 0 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 21013 57 0 0 0 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 2106a d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 21077 170 5 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 2107c 169 0 0 8 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 210e1 103 0 0 8 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 21125 be 0 0 8 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 211e7 182 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 21369 b6 7 0 c 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 21370 ad 0 0 c 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 2141f 2f 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2147c 47 10 0 4 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 214c3 1b2 2a 0 18 8 34 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 214e0 195 d 0 18 c 34 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 56 - ^ = -STACK WIN 4 21675 34 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2167a 2e 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 216a9 34 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 216ae 2e 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 216dd 34 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 216e2 2e 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 21711 a2 c 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 21718 99 5 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 2171d 93 0 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 2172b 84 0 0 10 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 217b3 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 217b9 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 217bf 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 217c5 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 217cb c 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 217d7 c 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 217e3 c 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 217ef 349 c 0 0 c 3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 21a99 d 0 0 0 c 3c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 21b38 1f5 14 0 24 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 21b47 1e4 5 0 24 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 21b48 1e2 4 0 24 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 21b49 1e0 3 0 24 c c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 21d2d 1ae 5 0 0 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 21d32 15f 0 0 0 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 21d62 12e 0 0 0 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 21edb 4f c 0 0 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 21f21 8 0 0 0 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 21f2a 38 c 0 0 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 21f59 8 0 0 0 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 21f62 41 c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 21f9a 8 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 21fa3 35 a 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 21fa8 2f 5 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 21fad 27 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 21fd8 d3 7 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 21fdf ca 0 0 c 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 22020 88 0 0 c 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 22068 33 0 0 c c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 220ab 50 4 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 220af 4a 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 220fb f0 e 0 10 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 22102 e7 7 0 10 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 22108 e0 1 0 10 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 22109 de 0 0 10 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 221eb 5c 4 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 221ef 56 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 22247 db 8 0 c 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 2224c d2 3 0 c 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 2224d d0 2 0 c 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 22277 a5 0 0 c c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 22322 28 3 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 2234a 25 3 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 2236f 18 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 22387 f6 c 0 14 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 2238e eb 5 0 14 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 22393 e5 0 0 14 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 2247d 33 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 22498 16 0 0 14 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 224b0 1d 4 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 224b4 17 0 0 14 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 224cd 224 17 0 1c 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 224e2 20f 2 0 1c c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 226f1 3e 6 0 1c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 2272f 294 8 0 14 0 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 22736 28b 1 0 14 4 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 60 - ^ = -STACK WIN 4 22737 289 0 0 14 8 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 60 - ^ = -STACK WIN 4 22793 1f9 0 0 14 c 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 60 - ^ = -STACK WIN 4 229c3 29 3 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 229ec 1b 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 22a07 2a 3 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 22a31 1b 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 22a7b 81 8 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 22a83 70 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 22a92 60 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 22a93 5e 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 22afc 93 7 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 22b00 8d 3 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 22b01 8b 2 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 22b40 4b 0 0 c c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 22b8f a2 6 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 22b94 9b 1 0 8 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 22b95 99 0 0 8 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 22c31 83 c 0 4 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 22cab 8 0 0 4 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 22cb4 d8 c 0 10 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 22d83 8 0 0 10 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 22d8c e6 c 0 c c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 22e69 8 0 0 c c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 22e72 8 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 22e7a 117 8 0 8 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 22e81 10e 1 0 8 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 22e82 10c 0 0 8 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 22f91 27 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 23021 ec 7 0 10 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 23028 e3 0 0 10 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 23088 82 0 0 10 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 2310d 17 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 23124 95 a 0 0 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 2312a 7d 4 0 0 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 2312b 7b 3 0 0 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 2312e 77 0 0 0 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 231b9 1a 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 231d3 1a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 231ed 389 16 0 18 8 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 23201 375 2 0 18 c 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 48 - ^ = -STACK WIN 4 23576 40 6 0 20 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 235b6 f8 7 0 10 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 235bd ef 0 0 10 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 2361d 8e 0 0 10 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 236ae 27 3 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 236d5 4d 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 236d6 48 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 23722 5d 4 0 0 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 2373e 3f 0 0 0 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 2373f 3d 0 0 0 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 2377f 24c f 0 8 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 23789 95 5 0 8 4 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 2378e 8f 0 0 8 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 237b1 6b 0 0 8 c 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 239cb 50 6 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 239cc 4e 5 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 239d1 48 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 239dc 3c 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 239dd 3a 0 0 4 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 23a1b ba 7 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 23a22 b1 0 0 c 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 23a5f 73 0 0 c 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 23ad5 13 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 240b9 14 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 0 1000 13 0 0 4 0 0 0 0 0 -STACK WIN 0 1020 1b 0 0 10 0 0 0 0 0 -STACK WIN 0 1040 1b 0 0 10 0 0 0 0 0 -STACK WIN 0 1060 19 8 0 4 0 0 0 0 0 -STACK WIN 0 1080 b 0 0 0 0 0 0 0 0 -STACK WIN 0 1090 24 3 0 4 0 0 0 0 0 -STACK WIN 0 10c0 f 0 0 8 0 0 0 0 0 -STACK WIN 0 10d0 17 0 0 4 0 0 0 0 0 -STACK WIN 0 10f0 27 9 0 10 0 0 0 0 0 -STACK WIN 0 1120 27 9 0 10 0 0 0 0 0 -STACK WIN 0 1150 d 0 0 8 0 0 0 0 0 -STACK WIN 0 1160 13 0 0 4 0 0 0 0 0 -STACK WIN 0 1180 21 d 0 10 0 0 0 0 0 -STACK WIN 0 11b0 21 d 0 10 0 0 0 0 0 -STACK WIN 0 11e0 7 0 0 0 0 0 0 0 0 -STACK WIN 0 11f0 6b 28 0 4 8 10 0 0 0 -STACK WIN 0 1260 32 3 0 0 0 0 0 0 0 -STACK WIN 0 12a0 e 0 0 0 0 0 0 0 0 -STACK WIN 0 12b0 47 3 0 4 0 0 0 0 0 -STACK WIN 0 1300 19 8 0 4 0 0 0 0 0 -STACK WIN 0 1320 32 3 0 0 0 0 0 0 0 -STACK WIN 0 1360 47 3 0 4 0 0 0 0 0 -STACK WIN 0 13b0 19 8 0 4 0 0 0 0 0 -STACK WIN 0 13d0 32 3 0 0 0 0 0 0 0 -STACK WIN 0 1410 47 3 0 4 0 0 0 0 0 -STACK WIN 0 1460 19 8 0 4 0 0 0 0 0 -STACK WIN 0 1480 71 29 0 4 c 10 0 0 0 -STACK WIN 0 1500 1b 0 0 8 0 0 0 0 0 -STACK WIN 0 1520 35 4 0 0 0 0 0 0 0 -STACK WIN 0 1560 20b 2d 0 14 14 14 0 0 1 -STACK WIN 0 19f0 31 0 0 0 0 0 0 0 0 -STACK WIN 0 1a30 51 d 0 4 c 0 0 0 0 -STACK WIN 0 1a90 c7 7 0 4 10 8 0 0 1 -STACK WIN 0 1b60 36 0 0 0 0 0 0 0 0 -STACK WIN 0 1ba0 3 0 0 0 0 0 0 0 0 -STACK WIN 0 1db0 81 2 0 8 0 0 0 0 0 -STACK WIN 0 1e40 1d 7 0 0 0 0 0 0 0 -STACK WIN 0 1e60 a2 3a 0 4 10 c4 0 0 0 -STACK WIN 0 1f10 142 c 0 c 0 38 0 0 1 -STACK WIN 0 2060 138 38 0 0 8 244 0 0 0 -STACK WIN 0 21a0 3b 7 0 4 0 0 0 0 0 -STACK WIN 0 21e0 25 5 0 4 0 0 0 0 0 -STACK WIN 0 2210 26 3 0 0 0 0 0 0 0 -STACK WIN 0 2240 e 0 0 0 0 0 0 0 0 -STACK WIN 0 2250 4 0 0 0 0 0 0 0 0 -STACK WIN 0 2260 11 0 0 0 0 0 0 0 0 -STACK WIN 0 2280 27 3 0 0 0 0 0 0 0 -STACK WIN 0 22b0 b 0 0 0 0 0 0 0 0 -STACK WIN 0 22c0 24 3 0 4 0 0 0 0 0 -STACK WIN 0 22f0 e 0 0 0 0 0 0 0 0 -STACK WIN 0 2300 c 0 0 0 0 0 0 0 0 -STACK WIN 0 2310 26 0 0 0 0 0 0 0 0 -STACK WIN 0 2340 1d 1 0 0 0 0 0 0 0 -STACK WIN 0 2360 1d 1 0 0 0 0 0 0 0 -STACK WIN 0 2380 13 0 0 0 0 0 0 0 0 -STACK WIN 0 23a0 23 0 0 0 0 0 0 0 0 -STACK WIN 0 23d0 56 5 0 0 8 c 0 0 0 -STACK WIN 0 2430 47 c 0 0 c 8 0 0 0 -STACK WIN 0 24f0 23 1 0 0 0 4 0 0 0 -STACK WIN 0 2520 3f b 0 8 0 0 0 0 0 -STACK WIN 0 2560 20 0 0 0 0 0 0 0 0 -STACK WIN 0 2580 20 0 0 0 0 0 0 0 0 -STACK WIN 0 25a0 1d 0 0 0 0 0 0 0 0 -STACK WIN 0 25c0 da 11 0 c 0 0 0 0 1 -STACK WIN 0 26a0 27 8 0 4 0 0 0 0 0 -STACK WIN 0 26d0 4a d 0 8 0 0 0 0 0 -STACK WIN 0 2720 e 0 0 0 0 0 0 0 0 -STACK WIN 0 2730 5 2 0 4 0 0 0 0 0 -STACK WIN 0 2740 5 2 0 4 0 0 0 0 0 -STACK WIN 0 2750 3 2 0 0 0 0 0 0 0 -STACK WIN 0 2760 b 0 0 0 0 0 0 0 0 -STACK WIN 0 2770 ef 11 0 c 0 0 0 0 1 -STACK WIN 0 2860 2b 8 0 4 0 0 0 0 0 -STACK WIN 0 2890 4f d 0 8 0 0 0 0 0 -STACK WIN 0 28e0 e 0 0 0 0 0 0 0 0 -STACK WIN 0 28f0 5 2 0 4 0 0 0 0 0 -STACK WIN 0 2900 3 2 0 0 0 0 0 0 0 -STACK WIN 0 2910 13 0 0 0 0 0 0 0 0 -STACK WIN 0 2930 86 a 0 10 10 4 0 0 1 -STACK WIN 0 29c0 23 0 0 0 0 0 0 0 0 -STACK WIN 0 29f0 1 0 0 0 0 0 0 0 0 -STACK WIN 0 2a00 26 0 0 0 0 0 0 0 0 -STACK WIN 0 2a30 23 0 0 0 0 0 0 0 0 -STACK WIN 0 2a60 76 23 0 0 4 50 0 0 0 -STACK WIN 0 2ae0 3 0 0 4 0 0 0 0 0 -STACK WIN 0 2af0 1 0 0 0 0 0 0 0 0 -STACK WIN 0 2b00 21 0 0 0 0 0 0 0 0 -STACK WIN 0 2b30 32 6 0 4 8 0 0 0 0 -STACK WIN 0 2b70 2f 6 0 0 8 0 0 0 0 -STACK WIN 0 2ba0 20 0 0 0 0 0 0 0 0 -STACK WIN 0 2bc0 20 0 0 0 0 0 0 0 0 -STACK WIN 0 2be0 1d 0 0 0 0 0 0 0 0 -STACK WIN 0 2c00 c1 5 0 8 0 0 0 0 1 -STACK WIN 0 2cd0 83 8 0 8 0 0 0 0 1 -STACK WIN 0 2d60 1f 0 0 4 0 0 0 0 0 -STACK WIN 0 2d80 bc b 0 8 0 0 0 0 1 -STACK WIN 0 2e40 e 0 0 0 0 0 0 0 0 -STACK WIN 0 2e50 5 2 0 4 0 0 0 0 0 -STACK WIN 0 2e60 e 0 0 8 0 0 0 0 0 -STACK WIN 0 2e70 da 4 0 8 0 0 0 0 1 -STACK WIN 0 2f50 97 8 0 8 0 0 0 0 1 -STACK WIN 0 2ff0 4 0 0 0 0 0 0 0 0 -STACK WIN 0 3000 23 0 0 4 0 0 0 0 0 -STACK WIN 0 3030 c7 e 0 8 0 0 0 0 1 -STACK WIN 0 3100 e 0 0 0 0 0 0 0 0 -STACK WIN 0 3110 5 2 0 4 0 0 0 0 0 -STACK WIN 0 3120 e 0 0 8 0 0 0 0 0 -STACK WIN 0 3130 6 0 0 0 0 0 0 0 0 -STACK WIN 0 3140 208 6 0 8 10 8 0 0 1 -STACK WIN 0 33d0 1 0 0 0 0 0 0 0 0 -STACK WIN 0 33e0 8 0 0 0 0 0 0 0 0 -STACK WIN 0 33f0 56 3 0 0 0 10 0 0 0 -STACK WIN 0 3450 32 0 0 4 0 0 0 0 0 -STACK WIN 0 3490 28 0 0 0 0 0 0 0 0 -STACK WIN 0 34c0 19 0 0 0 0 0 0 0 0 -STACK WIN 0 34e0 21 0 0 0 0 0 0 0 0 -STACK WIN 0 3510 19 8 0 4 0 0 0 0 0 -STACK WIN 0 3530 7 0 0 0 0 0 0 0 0 -STACK WIN 0 3540 6 0 0 0 0 0 0 0 0 -STACK WIN 0 36d0 39 8 0 4 0 0 0 0 0 -STACK WIN 0 3710 6 0 0 0 0 0 0 0 0 -STACK WIN 0 38a0 3a 8 0 4 0 0 0 0 0 -STACK WIN 0 38e0 6 0 0 0 0 0 0 0 0 -STACK WIN 0 38f0 32 0 0 4 0 0 0 0 0 -STACK WIN 0 3930 19 0 0 0 0 0 0 0 0 -STACK WIN 0 3950 56 7 0 4 0 c 0 0 0 -STACK WIN 0 39b0 4 0 0 0 0 0 0 0 0 -STACK WIN 0 39c0 59 7 0 4 0 c 0 0 0 -STACK WIN 0 3a20 6 0 0 0 0 0 0 0 0 -STACK WIN 0 3a30 21 d 0 10 0 0 0 0 0 -STACK WIN 0 3a60 27 9 0 10 0 0 0 0 0 -STACK WIN 0 3a90 24 f 0 0 0 0 0 0 0 -STACK WIN 0 3ac0 1 0 0 0 0 0 0 0 0 -STACK WIN 0 3ad0 15 0 0 0 0 0 0 0 0 -STACK WIN 0 3af0 21 d 0 10 0 0 0 0 0 -STACK WIN 0 3b20 27 9 0 10 0 0 0 0 0 -STACK WIN 0 3b50 22 d 0 0 0 0 0 0 0 -STACK WIN 0 3b80 10 0 0 0 0 0 0 0 0 -STACK WIN 0 3b90 25 11 0 0 0 0 0 0 0 -STACK WIN 0 3bc0 4f a 0 0 0 10 0 0 0 -STACK WIN 0 3c10 54 7 0 8 0 c 0 0 0 -STACK WIN 0 3c70 57 7 0 8 0 c 0 0 0 -STACK WIN 0 3cd0 19 8 0 4 0 0 0 0 0 -STACK WIN 0 3cf0 7 1 0 0 0 4 0 0 0 -STACK WIN 0 3d00 21 d 0 14 0 0 0 0 0 -STACK WIN 0 3d30 7 1 0 0 0 4 0 0 0 -STACK WIN 0 3d40 27 9 0 14 0 0 0 0 0 -STACK WIN 0 3d70 3 0 0 0 0 0 0 0 0 -STACK WIN 0 3d80 1 0 0 0 0 0 0 0 0 -STACK WIN 0 3d90 7 1 0 0 0 4 0 0 0 -STACK WIN 0 3da0 15 0 0 4 0 0 0 0 0 -STACK WIN 0 3dc0 1 0 0 4 0 0 0 0 0 -STACK WIN 0 3dd0 15 0 0 8 0 0 0 0 0 -STACK WIN 0 3df0 21 d 0 14 0 0 0 0 0 -STACK WIN 0 3e20 27 9 0 14 0 0 0 0 0 -STACK WIN 0 3e50 22 d 0 0 0 0 0 0 0 -STACK WIN 0 3e80 10 0 0 0 0 0 0 0 0 -STACK WIN 0 3e90 7 1 0 0 0 4 0 0 0 -STACK WIN 0 3ea0 25 11 0 c 0 0 0 0 0 -STACK WIN 0 3ed0 3 0 0 4 0 0 0 0 0 -STACK WIN 0 3ee0 15 0 0 0 0 0 0 0 0 -STACK WIN 0 3f00 22 d 0 8 0 0 0 0 0 -STACK WIN 0 3f30 13 0 0 0 0 0 0 0 0 -STACK WIN 0 3f50 1 0 0 0 0 0 0 0 0 -STACK WIN 0 3f60 15 0 0 8 0 0 0 0 0 -STACK WIN 0 3f80 22 d 0 0 0 0 0 0 0 -STACK WIN 0 3fb0 15 0 0 4 0 0 0 0 0 -STACK WIN 0 3fd0 15 0 0 4 0 0 0 0 0 -STACK WIN 0 3ff0 13 0 0 4 0 0 0 0 0 -STACK WIN 0 4010 ae e 0 4 0 54 0 0 0 -STACK WIN 0 40c0 ae e 0 4 0 4c 0 0 0 -STACK WIN 0 4170 40 7 0 4 0 0 0 0 0 -STACK WIN 0 4464 13 0 0 0 0 0 0 0 0 -STACK WIN 0 466c 16 0 0 0 0 0 0 0 0 -STACK WIN 0 46a0 9 0 0 0 0 0 0 0 0 -STACK WIN 0 46f2 a 0 0 0 0 0 0 0 0 -STACK WIN 0 5405 14 0 0 0 0 0 0 0 0 -STACK WIN 0 58bc a 0 0 0 0 0 0 0 0 -STACK WIN 0 6039 12 0 0 0 0 0 0 0 0 -STACK WIN 0 60e0 8b 0 0 4 0 0 0 0 0 -STACK WIN 0 71eb b 0 0 0 0 0 0 0 0 -STACK WIN 0 7a28 a 0 0 0 0 0 0 0 0 -STACK WIN 0 7b36 a 0 0 0 0 0 0 0 0 -STACK WIN 0 7cc5 9 0 0 0 0 0 0 0 0 -STACK WIN 0 7f28 4 0 0 0 0 0 0 0 0 -STACK WIN 0 8151 9 0 0 0 0 0 0 0 0 -STACK WIN 0 821f 9 0 0 0 0 0 0 0 0 -STACK WIN 0 8390 a 0 0 0 0 0 0 0 0 -STACK WIN 0 83ce 21 0 0 0 0 0 0 0 0 -STACK WIN 0 8477 9 0 0 0 0 0 0 0 0 -STACK WIN 0 8714 a 0 0 0 0 0 0 0 0 -STACK WIN 0 8747 a 0 0 0 0 0 0 0 0 -STACK WIN 0 8779 a 0 0 0 0 0 0 0 0 -STACK WIN 0 87b4 a 0 0 0 0 0 0 0 0 -STACK WIN 0 89d2 9 0 0 0 0 0 0 0 0 -STACK WIN 0 8a62 7c 0 0 0 0 0 0 0 0 -STACK WIN 0 8c49 4 0 0 0 0 0 0 0 0 -STACK WIN 0 8ce2 4 0 0 0 0 0 0 0 0 -STACK WIN 0 9694 9 0 0 0 0 0 0 0 0 -STACK WIN 0 9835 c 0 0 0 0 0 0 0 0 -STACK WIN 0 9841 c 0 0 0 0 0 0 0 0 -STACK WIN 0 9a66 4 0 0 0 0 0 0 0 0 -STACK WIN 0 9ab6 4 0 0 0 0 0 0 0 0 -STACK WIN 0 9ae0 4c 8 0 c 10 0 0 0 1 -STACK WIN 0 9c4a 6 0 0 0 0 0 0 0 0 -STACK WIN 0 9ca8 9 0 0 0 0 0 0 0 0 -STACK WIN 0 9ee5 9 0 0 0 0 0 0 0 0 -STACK WIN 0 9fd7 c 0 0 0 0 0 0 0 0 -STACK WIN 0 a04a 9 0 0 0 0 0 0 0 0 -STACK WIN 0 a163 c 0 0 0 0 0 0 0 0 -STACK WIN 0 a1b9 9 0 0 0 0 0 0 0 0 -STACK WIN 0 a1d0 88 0 0 8 0 0 0 0 0 -STACK WIN 0 a2c0 7a 0 0 c 0 0 0 0 0 -STACK WIN 0 c23c a 0 0 0 0 0 0 0 0 -STACK WIN 0 df29 14 0 0 0 0 0 0 0 0 -STACK WIN 0 dfed a 0 0 0 0 0 0 0 0 -STACK WIN 0 e257 c 0 0 0 0 0 0 0 0 -STACK WIN 0 e40d 15 0 0 0 0 0 0 0 0 -STACK WIN 0 e761 17 0 0 0 0 0 0 0 0 -STACK WIN 0 eaa4 c 0 0 0 0 0 0 0 0 -STACK WIN 0 eea0 9 0 0 0 0 0 0 0 0 -STACK WIN 0 f221 9 0 0 0 0 0 0 0 0 -STACK WIN 0 f370 c 0 0 0 0 0 0 0 0 -STACK WIN 0 f3fd c 0 0 0 0 0 0 0 0 -STACK WIN 0 1000a 11 0 0 0 0 0 0 0 0 -STACK WIN 0 1001b c 0 0 0 0 0 0 0 0 -STACK WIN 0 1004c 8 0 0 0 0 0 0 0 0 -STACK WIN 0 10558 90 3 0 c c 0 0 0 0 -STACK WIN 0 105e8 46 0 0 10 4 0 0 0 1 -STACK WIN 0 1064a 17 4 0 0 10 0 0 0 1 -STACK WIN 0 10661 19 0 0 0 0 0 0 0 0 -STACK WIN 0 10694 17 1 0 8 4 0 0 0 1 -STACK WIN 0 123b2 9 0 0 0 0 0 0 0 0 -STACK WIN 0 123f8 9 0 0 0 0 0 0 0 0 -STACK WIN 0 126bd a 0 0 0 0 0 0 0 0 -STACK WIN 0 128c8 e 0 0 0 0 0 0 0 0 -STACK WIN 0 129c5 f 0 0 0 0 0 0 0 0 -STACK WIN 0 12a8e 9 0 0 0 0 0 0 0 0 -STACK WIN 0 12b7f 2d 0 0 0 0 0 0 0 0 -STACK WIN 0 12ca3 e 0 0 0 0 0 0 0 0 -STACK WIN 0 12e47 f 0 0 0 0 0 0 0 0 -STACK WIN 0 14079 b 0 0 0 0 0 0 0 0 -STACK WIN 0 14221 84 3 0 8 c 0 0 0 0 -STACK WIN 0 142a5 23 0 0 0 0 0 0 0 0 -STACK WIN 0 142f0 3 0 0 0 0 0 0 0 0 -STACK WIN 0 14385 11 0 0 0 0 0 0 0 0 -STACK WIN 0 190b6 9 0 0 0 0 0 0 0 0 -STACK WIN 0 19159 9 0 0 0 0 0 0 0 0 -STACK WIN 0 1a1d5 a 0 0 0 0 0 0 0 0 -STACK WIN 0 20e9b a 0 0 0 0 0 0 0 0 -STACK WIN 0 20fd7 1c 0 0 0 0 0 0 0 0 -STACK WIN 0 21a99 e 0 0 0 0 0 0 0 0 -STACK WIN 0 21f21 9 0 0 0 0 0 0 0 0 -STACK WIN 0 21f59 9 0 0 0 0 0 0 0 0 -STACK WIN 0 21f9a 9 0 0 0 0 0 0 0 0 -STACK WIN 0 22cab 9 0 0 0 0 0 0 0 0 -STACK WIN 0 22d83 9 0 0 0 0 0 0 0 0 -STACK WIN 0 22e69 9 0 0 0 0 0 0 0 0 -STACK WIN 0 23b00 be 0 0 8 0 0 0 0 0 diff --git a/toolkit/crashreporter/google-breakpad/src/processor/testdata/module1.out b/toolkit/crashreporter/google-breakpad/src/processor/testdata/module1.out deleted file mode 100644 index cd6e18d1062b..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/processor/testdata/module1.out +++ /dev/null @@ -1,29 +0,0 @@ -MODULE windows x86 111111111111111111111111111111111 module1.pdb -INFO CODE_ID FFFFFFFF module1.exe -FILE 1 file1_1.cc -FILE 2 file1_2.cc -FILE 3 file1_3.cc -FUNC 1000 c 0 Function1_1 -1000 4 44 1 -1004 4 45 1 -1008 4 46 1 -FUNC 1100 8 4 Function1_2 -1100 4 65 2 -1104 4 66 2 -FUNC 1200 100 8 Function1_3 -FUNC 1300 100 c Function1_4 -FUNC 2000 0 0 Test_Zero_Size_Function_Is_Ignored -2000 4 88 2 -PUBLIC 2800 0 PublicSymbol -FUNC 3000 7000 42 LargeFunction -3000 7000 4098359 3 -STACK WIN 4 1000 c 1 0 0 0 0 0 1 $eip 4 + ^ = $esp $ebp 8 + = $ebp $ebp ^ = -STACK WIN 4 1100 8 1 0 0 0 0 0 1 $eip 4 + ^ = $esp $ebp 8 + = $ebp $ebp ^ = -STACK WIN 4 1100 100 1 0 0 0 0 0 1 $eip 4 + ^ = $esp $ebp 8 + = $ebp $ebp ^ = -STACK WIN 4 1300 100 1 0 0 0 0 0 1 $eip 4 + ^ = $esp $ebp 8 + = $ebp $ebp ^ = -STACK CFI INIT 3d40 af .cfa: $esp 4 + .ra: .cfa 4 - ^ -STACK CFI 3d41 .cfa: $esp 8 + -STACK CFI 3d43 .cfa: $ebp 8 + $ebp: .cfa 8 - ^ -STACK CFI 3d54 $ebx: .cfa 20 - ^ -STACK CFI 3d5a $esi: .cfa 16 - ^ -STACK CFI 3d84 $edi: .cfa 12 - ^ diff --git a/toolkit/crashreporter/google-breakpad/src/processor/testdata/module2.out b/toolkit/crashreporter/google-breakpad/src/processor/testdata/module2.out deleted file mode 100644 index 845212ccb839..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/processor/testdata/module2.out +++ /dev/null @@ -1,23 +0,0 @@ -MODULE windows x86 222222222 module2.pdb -FILE 1 file2_1.cc -FILE 2 file2_2.cc -FILE 3 file2_3.cc -FUNC 2000 c 4 Function2_1 -1000 4 54 1 -1004 4 55 1 -1008 4 56 1 -PUBLIC 2160 0 Public2_1 -FUNC 2170 14 4 Function2_2 -2170 6 10 2 -2176 4 12 2 -217a 6 13 2 -2180 4 21 2 -PUBLIC 21a0 0 Public2_2 -STACK WIN 4 2000 c 1 0 0 0 0 0 1 $eip 4 + ^ = $esp $ebp 8 + = $ebp $ebp ^ = -STACK WIN 4 2170 14 1 0 0 0 0 0 1 $eip 4 + ^ = $esp $ebp 8 + = $ebp $ebp ^ = -STACK CFI INIT 3df0 af .cfa: $esp 4 + .ra: .cfa 4 - ^ -STACK CFI 3df1 .cfa: $esp 8 + -STACK CFI 3df3 .cfa: $ebp 8 + $ebp: .cfa 8 - ^ -STACK CFI 3e04 $ebx: .cfa 20 - ^ -STACK CFI 3e0a $esi: .cfa 16 - ^ -STACK CFI 3e34 $edi: .cfa 12 - ^ diff --git a/toolkit/crashreporter/google-breakpad/src/processor/testdata/module3_bad.out b/toolkit/crashreporter/google-breakpad/src/processor/testdata/module3_bad.out deleted file mode 100644 index bb77248678cb..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/processor/testdata/module3_bad.out +++ /dev/null @@ -1,3 +0,0 @@ -MODULE windows x86 333333333333333333333333333333333 module3.pdb -FILE 1 file1.cc -FUNC 1000 diff --git a/toolkit/crashreporter/google-breakpad/src/processor/testdata/module4_bad.out b/toolkit/crashreporter/google-breakpad/src/processor/testdata/module4_bad.out deleted file mode 100644 index d01fb2cc8c2a..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/processor/testdata/module4_bad.out +++ /dev/null @@ -1,5 +0,0 @@ -MODULE windows x86 444444444444444444444444444444444 module4.pdb -FILE 1 file4_1.cc -FILE 2 file4_2.cc -1000 4 44 1 -1004 4 45 1 diff --git a/toolkit/crashreporter/google-breakpad/src/processor/testdata/null_read_av.dmp b/toolkit/crashreporter/google-breakpad/src/processor/testdata/null_read_av.dmp deleted file mode 100755 index f146dc7f6ee8..000000000000 Binary files a/toolkit/crashreporter/google-breakpad/src/processor/testdata/null_read_av.dmp and /dev/null differ diff --git a/toolkit/crashreporter/google-breakpad/src/processor/testdata/null_write_av.dmp b/toolkit/crashreporter/google-breakpad/src/processor/testdata/null_write_av.dmp deleted file mode 100755 index 35c59335f98e..000000000000 Binary files a/toolkit/crashreporter/google-breakpad/src/processor/testdata/null_write_av.dmp and /dev/null differ diff --git a/toolkit/crashreporter/google-breakpad/src/processor/testdata/read_av_clobber_write.dmp b/toolkit/crashreporter/google-breakpad/src/processor/testdata/read_av_clobber_write.dmp deleted file mode 100755 index 5deea8de79af..000000000000 Binary files a/toolkit/crashreporter/google-breakpad/src/processor/testdata/read_av_clobber_write.dmp and /dev/null differ diff --git a/toolkit/crashreporter/google-breakpad/src/processor/testdata/read_av_conditional.dmp b/toolkit/crashreporter/google-breakpad/src/processor/testdata/read_av_conditional.dmp deleted file mode 100755 index b3604233d674..000000000000 Binary files a/toolkit/crashreporter/google-breakpad/src/processor/testdata/read_av_conditional.dmp and /dev/null differ diff --git a/toolkit/crashreporter/google-breakpad/src/processor/testdata/read_av_non_null.dmp b/toolkit/crashreporter/google-breakpad/src/processor/testdata/read_av_non_null.dmp deleted file mode 100755 index 2d972a46faab..000000000000 Binary files a/toolkit/crashreporter/google-breakpad/src/processor/testdata/read_av_non_null.dmp and /dev/null differ diff --git a/toolkit/crashreporter/google-breakpad/src/processor/testdata/stack_exhaustion.dmp b/toolkit/crashreporter/google-breakpad/src/processor/testdata/stack_exhaustion.dmp deleted file mode 100755 index 4eb378b6cdc6..000000000000 Binary files a/toolkit/crashreporter/google-breakpad/src/processor/testdata/stack_exhaustion.dmp and /dev/null differ diff --git a/toolkit/crashreporter/google-breakpad/src/processor/testdata/symbols/kernel32.pdb/BCE8785C57B44245A669896B6A19B9542/kernel32.sym b/toolkit/crashreporter/google-breakpad/src/processor/testdata/symbols/kernel32.pdb/BCE8785C57B44245A669896B6A19B9542/kernel32.sym deleted file mode 100644 index b813dbce94e9..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/processor/testdata/symbols/kernel32.pdb/BCE8785C57B44245A669896B6A19B9542/kernel32.sym +++ /dev/null @@ -1,5787 +0,0 @@ -MODULE windows x86 BCE8785C57B44245A669896B6A19B9542 kernel32.pdb -PUBLIC b5ae c BaseDllInitialize -PUBLIC 9b47 4 CloseHandle -PUBLIC 17826 0 BaseDllInitializeMemoryManager -PUBLIC 55709 10 EnumResourceNamesW -PUBLIC be41 4 BaseDllMapResourceIdA -PUBLIC 98f4 8 BasepMapModuleHandle -PUBLIC 936b 4 BaseSetLastNTError -PUBLIC 92b0 4 SetLastError -PUBLIC 30769 0 GetLastError -PUBLIC b722 0 ConsoleApp -PUBLIC 29d7a 18 SetUpConsoleInfo -PUBLIC 1b069 0 InitExeName -PUBLIC 17860 0 InitializeCtrlHandling -PUBLIC 29f30 4 SetUpHandles -PUBLIC 1dc03 8 SetStdHandle -PUBLIC 12f39 4 GetStdHandle -PUBLIC 17889 4 BaseDllInitializeIniFileMappings -PUBLIC 17923 0 NlsServerInitialize -PUBLIC 180a6 0 NlsProcessInitialize -PUBLIC 1795e 0 AllocTables -PUBLIC 179ea 0 GetUnicodeFileInfo -PUBLIC 16e70 c GetLocaleFileInfo -PUBLIC 18a21 0 GetDefaultSortkeyFileInfo -PUBLIC 17cb5 0 GetDefaultSortTablesFileInfo -PUBLIC 1839b 8 GetSortTablesFileInfo -PUBLIC 998d 8 LocalAlloc -PUBLIC 992f 4 LocalFree -PUBLIC 1625 20 DeviceIoControl -PUBLIC 32eb1 4 LocalUnlock -PUBLIC 32e1d 4 LocalLock -PUBLIC a03b 4 ResetEvent -PUBLIC a017 4 SetEvent -PUBLIC 55921 4 SetLocalTime -PUBLIC a35e 18 CompareStringW -PUBLIC 55a0e 4 LocalFlags -PUBLIC 55b09 4 LocalHandle -PUBLIC 30927 c LocalReAlloc -PUBLIC 30bd3 c InternalFindAtom -PUBLIC 37923 0 wcscpy -PUBLIC 33107 14 InternalGetAtomName -PUBLIC ffb1 c InternalAddAtom -PUBLIC 326c1 4 AddAtomW -PUBLIC ab78 4 BaseDllMapResourceIdW -PUBLIC 2d9b2 0 wcslen -PUBLIC 330e7 c GetAtomNameW -PUBLIC a9cc 8 lstrcmpW -PUBLIC ba64 8 lstrcpyW -PUBLIC bbce c FindResourceW -PUBLIC e6dc 18 SearchPathW -PUBLIC 1021c 10 BaseCreateStack -PUBLIC 55bb1 0 wcscat -PUBLIC 30b7d 8 InternalDeleteAtom -PUBLIC 2c86d 0 CloseProfileUserMapping -PUBLIC ddfe 1c DuplicateHandle -PUBLIC a996 8 lstrcmpiW -PUBLIC b64c 8 BaseThreadStart -PUBLIC 2520 8 WaitForSingleObject -PUBLIC 1042c 1c CreateRemoteThread -PUBLIC 98eb 0 GetCurrentThread -PUBLIC 9766 4 InterlockedIncrement -PUBLIC 977a 4 InterlockedDecrement -PUBLIC 978e 8 InterlockedExchange -PUBLIC 97a2 c InterlockedCompareExchange -PUBLIC 97b6 8 InterlockedExchangeAdd -PUBLIC 97c6 c MulDiv -PUBLIC 10659 8 BaseThreadStartThunk -PUBLIC 10665 8 BaseProcessStartThunk -PUBLIC 10672 4 SwitchToFiber -PUBLIC 106fa 18 _ResourceCallEnumLangRoutine -PUBLIC 1071e 14 _ResourceCallEnumNameRoutine -PUBLIC 1073e 10 _ResourceCallEnumTypeRoutine -PUBLIC 2ff92 0 BaseFiberStart -PUBLIC 103a3 14 BaseInitializeContext -PUBLIC 55bbc 4 ResetAccessDate -PUBLIC 55bee 4 ComputeRemainingSize -PUBLIC 55c24 8 ComputeRequestSize -PUBLIC 55c57 c ReportTransfer -PUBLIC 55c83 8 BackupReadBuffer -PUBLIC 55cd4 c BackupReadStream -PUBLIC 55df2 4 BackupTestRestartStream -PUBLIC 55eb4 8 BasepIsDataAttribute -PUBLIC 55eef 18 BackupSeek -PUBLIC 5604f c BackupWriteHeader -PUBLIC 560f8 c BackupWriteSparse -PUBLIC 561d4 c BackupWriteStream -PUBLIC 5627e c BackupWriteAlternateData -PUBLIC 56381 4 BackupAlloc -PUBLIC 563b1 4 BackupFree -PUBLIC 563d6 8 GrowBuffer -PUBLIC 5643b 4 FreeBuffer -PUBLIC 5645f 4 FreeContext -PUBLIC 564b8 4 AllocContext -PUBLIC 56519 c BackupGetSparseMap -PUBLIC 5669e c BackupReadData -PUBLIC 5676b c BackupReadAlternateData -PUBLIC 569ec c BackupReadEaData -PUBLIC 56ada c BackupReadObjectId -PUBLIC 56b94 c BackupReadReparseData -PUBLIC 56cc7 c BackupReadSecurityData -PUBLIC 56ddf 1c BackupRead -PUBLIC 57012 8 BackupWriteBuffer -PUBLIC 570a4 c BackupWriteEaData -PUBLIC 570ef c BackupWriteReparseData -PUBLIC 5714f c BackupWriteObjectId -PUBLIC 571c9 c BackupWriteSecurityData -PUBLIC 572ae c BackupWriteLinkData -PUBLIC 573fe 1c BackupWrite -PUBLIC 37bfc 0 NotifySoundSentry -PUBLIC 37a77 8 Beep -PUBLIC 575f7 4 BaseValidateNetbiosName -PUBLIC 57665 4 BaseValidateDnsNames -PUBLIC 576da 10 BasepGetMultiValueAddr -PUBLIC 5773b c BaseGetMultiValueIndex -PUBLIC 577c2 c BaseRemoveMultiValue -PUBLIC 5786b c BaseAddMultiValue -PUBLIC 202af 10 BasepGetNameFromReg -PUBLIC 578bb c BaseSetNameInReg -PUBLIC 5795d 10 BaseSetMultiNameInReg -PUBLIC 579f7 c BaseCreateMultiValue -PUBLIC 57aa8 c BaseAddMultiNameInReg -PUBLIC 57bae c BaseRemoveMultiNameFromReg -PUBLIC 57c97 4 BaseSetNetbiosName -PUBLIC 57cd4 4 BaseSetDnsName -PUBLIC 57da5 4 BaseSetDnsDomain -PUBLIC 57e41 4 BaseSetAltNetBiosName -PUBLIC 57e85 4 BaseSetAltDnsFQHostname -PUBLIC 57eb6 4 BaseIsAltDnsFQHostname -PUBLIC 57f59 4 BaseRemoveAltNetBiosName -PUBLIC 57f8a 8 BaseEnumAltDnsFQHostnames -PUBLIC 57fdd 8 BaseParseDnsName -PUBLIC 31893 10 GetNameFromValue -PUBLIC 316c7 8 GetComputerNameW -PUBLIC 5808d 4 SetComputerNameW -PUBLIC 201f1 c GetComputerNameExW -PUBLIC 581b3 8 SetComputerNameExW -PUBLIC 216a4 8 GetComputerNameA -PUBLIC 58234 4 SetComputerNameA -PUBLIC 582a7 c GetComputerNameExA -PUBLIC 5834c 8 SetComputerNameExA -PUBLIC 583a3 10 EnumerateLocalComputerNamesW -PUBLIC 58523 10 EnumerateLocalComputerNamesA -PUBLIC 2ceb2 c DnsHostnameToComputerNameW -PUBLIC 585cf c DnsHostnameToComputerNameA -PUBLIC 5866b 10 BasepGetComputerNameFromNtPath -PUBLIC 58bc3 8 BaseMultiByteToWideCharWithAlloc -PUBLIC 58c3e 4 BaseConvertCharFree -PUBLIC 58c69 4 BaseIsNetBiosNameInUse -PUBLIC 58e0a 8 AddLocalAlternateComputerNameW -PUBLIC 58f26 8 AddLocalAlternateComputerNameA -PUBLIC 58f6f 8 RemoveLocalAlternateComputerNameW -PUBLIC 59050 8 RemoveLocalAlternateComputerNameA -PUBLIC 59099 8 SetLocalPrimaryComputerNameW -PUBLIC 592af 8 SetLocalPrimaryComputerNameA -PUBLIC 592f8 8 LZCopy -PUBLIC 593ae 8 CopyLZFile -PUBLIC b852 10 GetFullPathNameW -PUBLIC b877 8 GetCurrentDirectoryW -PUBLIC 30b14 0 GetLogicalDrives -PUBLIC f272 4 CheckForSameCurdir -PUBLIC 138fc 10 GetFullPathNameA -PUBLIC 34ffe 8 GetCurrentDirectoryA -PUBLIC 360dd 4 SetCurrentDirectoryA -PUBLIC f2ee 4 SetCurrentDirectoryW -PUBLIC 176b 4 GetSystemTime -PUBLIC 17e5 4 GetSystemTimeAsFileTime -PUBLIC 593be 4 SetSystemTime -PUBLIC 929c 0 GetTickCount -PUBLIC e7ec 8 FileTimeToSystemTime -PUBLIC 10b1c 8 SystemTimeToFileTime -PUBLIC e866 8 FileTimeToLocalFileTime -PUBLIC 35524 8 LocalFileTimeToFileTime -PUBLIC 3065d c FileTimeToDosDateTime -PUBLIC 3214e c DosDateTimeToFileTime -PUBLIC 10ad9 8 CompareFileTime -PUBLIC 350bf 4 GetTimeZoneInformation -PUBLIC 5945e 4 SetTimeZoneInformation -PUBLIC 2d36f c GetSystemTimeAdjustment -PUBLIC 59584 8 SetSystemTimeAdjustment -PUBLIC 2e9c1 c SystemTimeToTzSpecificLocalTime -PUBLIC 595c1 c TzSpecificLocalTimeToSystemTime -PUBLIC 5983e 8 CalcClientTimeZoneIdAndBias -PUBLIC a7d4 4 GetLocalTime -PUBLIC 59a31 4 SetClientTimeZoneInformation -PUBLIC 13093 0 IsDebuggerPresent -PUBLIC 59b1e 8 CheckRemoteDebuggerPresent -PUBLIC 59b72 0 DebugBreak -PUBLIC 59b7c 0 CreateDBWinMutex -PUBLIC 59d78 4 OutputDebugStringA -PUBLIC 5a0bd 4 ProcessIdToHandle -PUBLIC 5a123 4 DebugActiveProcess -PUBLIC 5a176 4 DebugBreakProcess -PUBLIC 5a19d 4 DebugSetProcessKillOnExit -PUBLIC 5a1e8 c GetThreadSelectorEntry -PUBLIC 5a231 c SaveThreadHandle -PUBLIC 5a28f 8 SaveProcessHandle -PUBLIC 5a2eb 4 MarkThreadHandle -PUBLIC 5a31b 4 MarkProcessHandle -PUBLIC 5a351 8 RemoveHandles -PUBLIC 5a3c6 4 CloseAllProcessHandles -PUBLIC 5a42d 4 OutputDebugStringW -PUBLIC 5a480 8 WaitForDebugEvent -PUBLIC 5a565 c ContinueDebugEvent -PUBLIC 5a5a9 4 DebugActiveProcessStop -PUBLIC 36f5b 4 RemoveDirectoryW -PUBLIC 323d2 8 CreateDirectoryW -PUBLIC 5a5f2 c CreateDirectoryExW -PUBLIC 5b219 4 RemoveDirectoryA -PUBLIC 217ac 8 CreateDirectoryA -PUBLIC 5b23b c CreateDirectoryExA -PUBLIC 2af8f 4 InitAtomTable -PUBLIC 30cce 0 InternalInitAtomTable -PUBLIC 360a9 4 GlobalAddAtomA -PUBLIC 360c3 4 GlobalFindAtomA -PUBLIC 30bbb 4 GlobalDeleteAtom -PUBLIC 5b28b c GlobalGetAtomNameA -PUBLIC 1006c 4 GlobalAddAtomW -PUBLIC 34e97 4 GlobalFindAtomW -PUBLIC 2c3be c GlobalGetAtomNameW -PUBLIC 354ed 4 AddAtomA -PUBLIC 30cfe 4 FindAtomA -PUBLIC 32695 4 DeleteAtom -PUBLIC 5b2ab c GetAtomNameA -PUBLIC 2f827 4 FindAtomW -PUBLIC f726 c BaseDllGetApplicationName -PUBLIC f763 c BaseDllGetVariableName -PUBLIC 1ee95 10 BaseDllGetVariableValue -PUBLIC f88c 14 BaseDllAppendBufferToResultBuffer -PUBLIC f6da 8 BaseDllIniFileNameLength -PUBLIC f7a0 c BaseDllFindIniFileNameMapping -PUBLIC 1c858 0 BaseDllFlushRegistryCache -PUBLIC 1c8a6 8 BaseDllFindVarNameMapping -PUBLIC 5b2cb 8 BaseDllCheckKeyNotEmpty -PUBLIC 1e361 4 BaseDllOpenIniFileOnDisk -PUBLIC 1e6e1 4 BaseDllCloseIniFileOnDisk -PUBLIC 35889 4 BaseDllCalculateDeleteLength -PUBLIC 1e891 8 BaseDllAdvanceTextPointer -PUBLIC 1f18a 14 BaseDllModifyMappedFile -PUBLIC 5b355 1c BaseDllCheckInitFromIniFile -PUBLIC 3331f 0 OpenProfileUserMapping -PUBLIC f460 28 BaseDllCaptureIniFileParameters -PUBLIC f928 4 BaseDllAppendNullToResultBuffer -PUBLIC f851 10 BaseDllAppendStringToResultBuffer -PUBLIC 1c8db 14 BaseDllOpenMappingTarget -PUBLIC 5b435 4 BaseDllReadApplicationNames -PUBLIC 1b42d 8 BaseDllReadVariableNames -PUBLIC 1cac2 10 BaseDllReadVariableValue -PUBLIC 5b592 8 BaseDllReadApplicationVariables -PUBLIC 2bb93 10 BaseDllWriteVariableValue -PUBLIC 32dd3 4 BaseDllReadSectionNames -PUBLIC 1e793 4 BaseDllFindSection -PUBLIC 1e9c5 4 BaseDllFindKeyword -PUBLIC 5b71c 10 QueryWin31IniFilesMappedToRegistry -PUBLIC 2dc81 8 BaseDllDeleteApplicationVariables -PUBLIC 2dc43 8 BaseDllWriteApplicationVariables -PUBLIC 358ed 4 BaseDllReadKeywordNames -PUBLIC 1ea7d 4 BaseDllReadKeywordValue -PUBLIC 1ecd2 4 BaseDllReadSection -PUBLIC 5b828 4 BaseDllWriteSection -PUBLIC 1f021 8 BaseDllWriteKeywordValue -PUBLIC 1c7f4 4 BaseDllReadWriteIniFileViaMapping -PUBLIC 1e291 4 BaseDllReadWriteIniFileOnDisk -PUBLIC f331 20 BaseDllReadWriteIniFile -PUBLIC 32b56 18 GetPrivateProfileStringA -PUBLIC 35d54 10 WritePrivateProfileStringA -PUBLIC 35f21 10 GetPrivateProfileSectionA -PUBLIC 5ba7c c WritePrivateProfileSectionA -PUBLIC f95d 18 GetPrivateProfileStringW -PUBLIC 1ee4c 10 WritePrivateProfileStringW -PUBLIC 1edbd 10 GetPrivateProfileSectionW -PUBLIC 5bac3 c WritePrivateProfileSectionW -PUBLIC 32da7 c GetPrivateProfileSectionNamesA -PUBLIC 5bb0a c GetPrivateProfileSectionNamesW -PUBLIC 5bb2b 14 GetPrivateProfileStructA -PUBLIC 5bc95 14 GetPrivateProfileStructW -PUBLIC 5be23 14 WritePrivateProfileStructA -PUBLIC 5bf65 14 WritePrivateProfileStructW -PUBLIC 21495 14 GetProfileStringA -PUBLIC 5c0b9 c WriteProfileStringA -PUBLIC 5c0d7 c GetProfileSectionA -PUBLIC 5c0f5 8 WriteProfileSectionA -PUBLIC 213f8 14 GetProfileStringW -PUBLIC 332b1 c WriteProfileStringW -PUBLIC 5c110 c GetProfileSectionW -PUBLIC 5c12e 8 WriteProfileSectionW -PUBLIC 36434 10 GetPrivateProfileIntA -PUBLIC 32730 10 GetPrivateProfileIntW -PUBLIC 364a9 c GetProfileIntA -PUBLIC 2f89a c GetProfileIntW -PUBLIC 21f1e c DefineDosDeviceW -PUBLIC 5c149 8 IsGlobalDeviceMap -PUBLIC 5c269 10 FindSymbolicLinkEntry -PUBLIC 21d8d c QueryDosDeviceW -PUBLIC 5c2c5 c DefineDosDeviceA -PUBLIC 5c36c c QueryDosDeviceA -PUBLIC 31385 10 CreateIoCompletionPort -PUBLIC 126f2 10 PostQueuedCompletionStatus -PUBLIC a71d 14 GetQueuedCompletionStatus -PUBLIC 315c4 10 GetOverlappedResult -PUBLIC ac4d 0 GetErrorMode -PUBLIC ac0f 4 SetErrorMode -PUBLIC ef3a 8 FindNextFileW -PUBLIC edd7 4 FindClose -PUBLIC 5c46c 8 BaseFindFirstDevice -PUBLIC 34bef c FindFirstChangeNotificationW -PUBLIC 32113 4 FindNextChangeNotification -PUBLIC 3162f 20 ReadDirectoryChangesW -PUBLIC ee81 4 BasepInitializeFindFileHandle -PUBLIC 34eb1 8 FindNextFileA -PUBLIC ea7d 18 FindFirstFileExW -PUBLIC 5c4ab c FindFirstChangeNotificationA -PUBLIC 137d9 8 FindFirstFileA -PUBLIC eee1 8 FindFirstFileW -PUBLIC 5c512 18 FindFirstFileExA -PUBLIC 180e 14 ReadFile -PUBLIC 10d87 14 WriteFile -PUBLIC 32044 4 SetEndOfFile -PUBLIC 10b8e 10 SetFilePointer -PUBLIC 21057 14 SetFilePointerEx -PUBLIC 10c6d 8 GetFileInformationByHandle -PUBLIC 31c45 10 GetFileTime -PUBLIC 31cb8 10 SetFileTime -PUBLIC 12641 4 FlushFileBuffers -PUBLIC 32361 14 LockFile -PUBLIC 2f569 18 LockFileEx -PUBLIC 322fb 14 UnlockFileEx -PUBLIC 10a09 8 GetFileSizeEx -PUBLIC 5c64e c BasepIoCompletion -PUBLIC 2bd84 c BasepIoCompletionSimple -PUBLIC 2bcfb 14 ReadFileEx -PUBLIC 5c701 14 WriteFileEx -PUBLIC 300da 4 CancelIo -PUBLIC 2de51 14 ReadFileScatter -PUBLIC 2dda5 14 WriteFileGather -PUBLIC 5c7a1 c SetFileValidData -PUBLIC 5c7f7 8 SetFileShortNameW -PUBLIC 5c8c4 8 SetFileShortNameA -PUBLIC 10e51 4 GetFileType -PUBLIC 322bc 14 UnlockFile -PUBLIC 10a77 8 GetFileSize -PUBLIC bada c OpenFileMappingW -PUBLIC b896 18 MapViewOfFileEx -PUBLIC 35971 8 FlushViewOfFile -PUBLIC b974 4 UnmapViewOfFile -PUBLIC 938e 18 CreateFileMappingW -PUBLIC bb76 c OpenFileMappingA -PUBLIC b905 14 MapViewOfFile -PUBLIC 945c 18 CreateFileMappingA -PUBLIC 110f5 c GetFileAttributesExW -PUBLIC 31f31 4 DeleteFileW -PUBLIC 5c8e9 34 BasepMoveFileCopyProgress -PUBLIC 5c94f 10 BasepNotifyTrackingService -PUBLIC 5cbc1 10 BasepMoveFileDelayed -PUBLIC 5cf6b 20 BasepOpenFileForMove -PUBLIC 5d0e9 c PrivMoveFileIdentityW -PUBLIC 5d371 8 GetCompressedFileSizeW -PUBLIC 314d5 8 SetFileAttributesW -PUBLIC b74c 4 GetFileAttributesW -PUBLIC 137b1 c GetFileAttributesExA -PUBLIC 31eab 4 DeleteFileA -PUBLIC 1f72e 14 MoveFileWithProgressW -PUBLIC 5d499 8 GetCompressedFileSizeA -PUBLIC 12782 8 SetFileAttributesA -PUBLIC 1153c 4 GetFileAttributesA -PUBLIC 35eae 14 MoveFileWithProgressA -PUBLIC 21261 8 MoveFileW -PUBLIC 3565b c MoveFileExW -PUBLIC 35e8f 8 MoveFileA -PUBLIC 5d4c3 c MoveFileExA -PUBLIC 21950 4 BasepOfShareToWin32Share -PUBLIC 5d4e3 14 LoadDuplicateEncryptionInfoFile -PUBLIC 10978 8 BaseIsThisAConsoleName -PUBLIC 5d539 20 CopyNameGraftNow -PUBLIC 284bd 14 BasepProcessNameGrafting -PUBLIC 5d9a1 8 BasepChecksum -PUBLIC 2879d 8 BasepRemoteFile -PUBLIC 5d9e0 8 BasepCreateDispositionToWin32 -PUBLIC 5da30 0 CheckAllowDecryptedRemoteDestinationPolicy -PUBLIC 10760 1c CreateFileW -PUBLIC 3719a 20 BasepCopyFileCallback -PUBLIC 5dadd 8 BaseMarkFileForDelete -PUBLIC 5db55 8 CopyReparsePoint -PUBLIC 5dc16 24 BasepOpenRestartableFile -PUBLIC 5de71 1c BasepCopyCompression -PUBLIC 285c6 38 BasepCopyEncryption -PUBLIC 1a24 1c CreateFileA -PUBLIC 21982 c OpenFile -PUBLIC 5e021 28 BasepCopySecurityInformation -PUBLIC 27bdb 38 BaseCopyStream -PUBLIC 36c3c 18 ReplaceFileW -PUBLIC 27613 24 BasepCopyFileExW -PUBLIC 27b32 18 CopyFileExW -PUBLIC 2005f 18 PrivCopyFileExW -PUBLIC 5e307 18 ReplaceFileA -PUBLIC 286ee c CopyFileA -PUBLIC 2f873 c CopyFileW -PUBLIC 5e3c4 18 CopyFileExA -PUBLIC 5e41d 10 GetFirmwareEnvironmentVariableW -PUBLIC 5e4ac 10 SetFirmwareEnvironmentVariableW -PUBLIC 5e534 10 GetFirmwareEnvironmentVariableA -PUBLIC 5e5c7 10 SetFirmwareEnvironmentVariableA -PUBLIC 5e65a 4 RegisterWowBaseHandlers -PUBLIC fd2d 8 GlobalAlloc -PUBLIC 123b9 c GlobalReAlloc -PUBLIC ff19 4 GlobalLock -PUBLIC 34cb9 4 GlobalHandle -PUBLIC fe82 4 GlobalUnlock -PUBLIC 34da1 4 GlobalSize -PUBLIC 36772 4 GlobalFlags -PUBLIC fc2f 4 GlobalFree -PUBLIC 5e670 4 LocalCompact -PUBLIC 5e686 4 GlobalFix -PUBLIC 5e6a0 4 GlobalUnfix -PUBLIC 5e6ba 4 GlobalWire -PUBLIC 5e6ca 4 GlobalUnWire -PUBLIC 310f2 4 GlobalMemoryStatus -PUBLIC 9a72 14 VirtualAllocEx -PUBLIC 9b02 10 VirtualFreeEx -PUBLIC 1a5d 14 VirtualProtectEx -PUBLIC b9a0 10 VirtualQueryEx -PUBLIC 2b13f 8 VirtualLock -PUBLIC 5e6da 8 VirtualUnlock -PUBLIC 355bc c FlushInstructionCache -PUBLIC 5e712 c AllocateUserPhysicalPages -PUBLIC 5e740 c FreeUserPhysicalPages -PUBLIC 5e76e c MapUserPhysicalPages -PUBLIC 5e79c c MapUserPhysicalPagesScatter -PUBLIC 1f992 4 GlobalMemoryStatusEx -PUBLIC 5e7ca 18 GetWriteWatch -PUBLIC 5e803 8 ResetWriteWatch -PUBLIC 9a51 10 VirtualAlloc -PUBLIC 9ae4 c VirtualFree -PUBLIC 1ad0 10 VirtualProtect -PUBLIC b9d1 c VirtualQuery -PUBLIC 2e18c c SetHandleInformation -PUBLIC 2bdb5 8 GetHandleInformation -PUBLIC 1d07e 0 SetFileApisToOEM -PUBLIC 365f6 0 SetFileApisToANSI -PUBLIC 3594f 0 AreFileApisANSI -PUBLIC 17443 0 BaseProcessInitPostImport -PUBLIC 934b 0 BaseGetNamedObjectDirectory -PUBLIC b5c3 c _BaseDllInitialize -PUBLIC 5e830 8 _lopen -PUBLIC 365a5 8 _lcreat -PUBLIC 353ce c _lread -PUBLIC 38ae7 c _lwrite -PUBLIC 34e64 4 _lclose -PUBLIC 35406 c _llseek -PUBLIC 30d74 8 lstrcmpA -PUBLIC baa1 8 lstrcmpiA -PUBLIC be01 8 lstrcpyA -PUBLIC 10111 c lstrcpynA -PUBLIC 34d41 8 lstrcatA -PUBLIC bdb6 4 lstrlenA -PUBLIC b9ef c lstrcpynW -PUBLIC 10f32 8 lstrcatW -PUBLIC 9a09 4 lstrlenW -PUBLIC 325bc 4 LocalSize -PUBLIC 5e882 8 LocalShrink -PUBLIC 12bb6 c HeapCreate -PUBLIC 10ef8 4 HeapDestroy -PUBLIC 5e898 10 HeapExtend -PUBLIC 5e8c9 10 HeapCreateTagsW -PUBLIC 5e8da 14 HeapQueryTagW -PUBLIC 5e8eb c HeapSummary -PUBLIC 5e947 14 HeapUsage -PUBLIC 5e9bb c HeapValidate -PUBLIC abc1 0 GetProcessHeap -PUBLIC 5e9db 8 GetProcessHeaps -PUBLIC 3611e 8 HeapCompact -PUBLIC 5e9ec 4 HeapLock -PUBLIC 5ea06 4 HeapUnlock -PUBLIC 5ea20 8 HeapWalk -PUBLIC 39469 10 HeapSetInformation -PUBLIC 5eb25 14 HeapQueryInformation -PUBLIC 5eb58 14 GetMailslotInfo -PUBLIC 2cdd8 8 SetMailslotInfo -PUBLIC 2ccdc 10 CreateMailslotW -PUBLIC 2cc8b 10 CreateMailslotA -PUBLIC 34932 c CreateVirtualBuffer -PUBLIC 5ebf4 8 ExtendVirtualBuffer -PUBLIC 5ec4e 4 TrimVirtualBuffer -PUBLIC 34b69 4 FreeVirtualBuffer -PUBLIC 5ec71 c VirtualBufferExceptionHandler -PUBLIC 349d8 20 BaseDllFormatMessage -PUBLIC 2f7a0 1c FormatMessageA -PUBLIC 34b8f 1c FormatMessageW -PUBLIC abde 4 FreeLibrary -PUBLIC c170 8 FreeLibraryAndExitThread -PUBLIC 11296 4 DisableThreadLibraryCalls -PUBLIC 5ecb0 4 SetDllDirectoryW -PUBLIC 5ed46 4 SetDllDirectoryA -PUBLIC 5edd7 8 GetDllDirectoryW -PUBLIC e477 4 GetModuleHandleForUnicodeString -PUBLIC 1fcff c BasepGetModuleHandleExParameterValidation -PUBLIC e4b9 10 BasepGetModuleHandleExW -PUBLIC 111da 0 GetVersion -PUBLIC ae65 4 GetVersionExW -PUBLIC 1fb26 10 VerifyVersionInfoW -PUBLIC 5ee46 10 VerifyVersionInfoA -PUBLIC 9f81 4 BaseDllFreeResourceId -PUBLIC 5eee3 c ReturnMem16Data -PUBLIC 5eef0 1c UTRegister -PUBLIC 14c3c c BasepLoadLibraryAsDataFile -PUBLIC 1af1 c LoadLibraryExW -PUBLIC 5ef47 8 GetDllDirectoryA -PUBLIC b3d5 c GetModuleFileNameW -PUBLIC b4cf c GetModuleFileNameA -PUBLIC e43d 4 GetModuleHandleW -PUBLIC 5efe6 c GetModuleHandleExA -PUBLIC 1fcc1 c GetModuleHandleExW -PUBLIC ada0 8 GetProcAddress -PUBLIC 12ade 4 GetVersionExA -PUBLIC be89 c FindResourceA -PUBLIC 35f78 10 FindResourceExA -PUBLIC 9fb5 8 LoadResource -PUBLIC bc69 8 SizeofResource -PUBLIC 5f03c c EnumResourceTypesA -PUBLIC 5f229 10 EnumResourceNamesA -PUBLIC 2e000 14 EnumResourceLanguagesA -PUBLIC ac88 10 FindResourceExW -PUBLIC 5f449 c EnumResourceTypesW -PUBLIC 5f631 14 EnumResourceLanguagesW -PUBLIC ae4b 4 LoadLibraryW -PUBLIC 1d4f c LoadLibraryExA -PUBLIC b6a1 4 GetModuleHandleA -PUBLIC 1d77 4 LoadLibraryA -PUBLIC 3145b 8 ConnectNamedPipe -PUBLIC 1269f 4 DisconnectNamedPipe -PUBLIC 5f781 c NpGetUserNamep -PUBLIC 313ec 10 SetNamedPipeHandleState -PUBLIC 5f88a 14 GetNamedPipeInfo -PUBLIC 5f90f 18 PeekNamedPipe -PUBLIC 312e5 1c TransactNamedPipe -PUBLIC 2c664 8 WaitNamedPipeW -PUBLIC 2f0d4 20 CreateNamedPipeW -PUBLIC 5fa85 1c GetNamedPipeHandleStateW -PUBLIC 5fb7f 1c CallNamedPipeW -PUBLIC 5fc39 8 WaitNamedPipeA -PUBLIC 5fc74 20 CreateNamedPipeA -PUBLIC 5fceb 1c GetNamedPipeHandleStateA -PUBLIC 5fdce 1c CallNamedPipeA -PUBLIC 5fe41 4 GetNumaHighestNodeNumber -PUBLIC 5fe8c 8 GetNumaProcessorNode -PUBLIC 5ff19 8 GetNumaNodeProcessorMask -PUBLIC 5ff7e c GetNumaProcessorMap -PUBLIC 5ffc4 c GetNumaAvailableMemory -PUBLIC 6000a 8 GetNumaAvailableMemoryNode -PUBLIC 600d2 10 NumaVirtualQueryNode -PUBLIC f182 8 IsThisARootDirectory -PUBLIC 31db9 8 GetSystemDirectoryW -PUBLIC ad29 8 GetSystemWindowsDirectoryW -PUBLIC ad7b 8 GetWindowsDirectoryW -PUBLIC b2d0 4 GetDriveTypeW -PUBLIC 112d5 c BasepGetTempPathW -PUBLIC 359b7 10 GetTempFileNameW -PUBLIC 301af 14 GetDiskFreeSpaceW -PUBLIC 12803 10 GetDiskFreeSpaceExW -PUBLIC f9e5 20 GetVolumeInformationW -PUBLIC 2c2d3 8 GetLogicalDriveStringsA -PUBLIC 603cf 8 GetLogicalDriveStringsW -PUBLIC 60499 8 SetVolumeLabelW -PUBLIC 60811 14 CheckNameLegalDOS8Dot3W -PUBLIC 14eea 8 GetSystemDirectoryA -PUBLIC 212f1 8 GetSystemWindowsDirectoryA -PUBLIC 21363 8 GetWindowsDirectoryA -PUBLIC 214e3 4 GetDriveTypeA -PUBLIC 217ea 18 SearchPathA -PUBLIC 30789 8 GetTempPathW -PUBLIC 608ff 10 GetTempFileNameA -PUBLIC 302ed 14 GetDiskFreeSpaceA -PUBLIC 3039b 10 GetDiskFreeSpaceExA -PUBLIC 21ba5 20 GetVolumeInformationA -PUBLIC 609ed 8 SetVolumeLabelA -PUBLIC 60a51 14 CheckNameLegalDOS8Dot3A -PUBLIC 35dca 8 GetTempPathA -PUBLIC a427 4 QueryPerformanceCounter -PUBLIC 2fa46 4 QueryPerformanceFrequency -PUBLIC 1e0c7 10 CreatePipe -PUBLIC 35340 4 GetSystemPowerStatus -PUBLIC 60aab 8 SetSystemPowerState -PUBLIC 392b5 4 SetThreadExecutionState -PUBLIC 60af4 4 RequestWakeupLatency -PUBLIC 60b1c 8 GetDevicePowerState -PUBLIC 60b60 0 IsSystemResumeAutomatic -PUBLIC 60b6f 4 RequestDeviceWakeup -PUBLIC 60b97 4 CancelDeviceWakeupRequest -PUBLIC 60bbf 8 SetMessageWaitingIndicator -PUBLIC 2f3a4 4 BasepIsSetupInvokedByWinLogon -PUBLIC 1a1cf 8 BasepIsImageVersionOk -PUBLIC 1500c 0 IsShimInfrastructureDisabled -PUBLIC 1930f 1c BasepCheckBadapp -PUBLIC 16f8e 4 RegisterWaitForInputIdle -PUBLIC 2dfa0 c StuffStdHandle -PUBLIC 60bd3 c BasepReplaceProcessThreadTokens -PUBLIC 309e1 c OpenProcess -PUBLIC 1cd34 4 _ExitProcess -PUBLIC 1cdda 4 ExitProcess -PUBLIC 1e16 8 TerminateProcess -PUBLIC 1ae17 8 GetExitCodeProcess -PUBLIC 1e50 4 GetStartupInfoW -PUBLIC 1eee 4 GetStartupInfoA -PUBLIC 12f1d 0 GetCommandLineA -PUBLIC 16f83 0 GetCommandLineW -PUBLIC 1df77 4 FreeEnvironmentStringsA -PUBLIC 12f08 0 GetEnvironmentStringsW -PUBLIC 1cf5b 0 GetEnvironmentStrings -PUBLIC 14af2 c GetEnvironmentVariableA -PUBLIC 33478 8 SetEnvironmentVariableA -PUBLIC f0f4 c GetEnvironmentVariableW -PUBLIC 101be 8 SetEnvironmentVariableW -PUBLIC 329d9 c ExpandEnvironmentStringsA -PUBLIC 305f6 c ExpandEnvironmentStringsW -PUBLIC 9920 0 GetCurrentProcessId -PUBLIC 60c75 4 GetProcessId -PUBLIC 21cc 14 ReadProcessMemory -PUBLIC 220f 14 WriteProcessMemory -PUBLIC 60caa 8 FatalAppExitW -PUBLIC 60cf8 8 FatalAppExitA -PUBLIC 60d46 4 FatalExit -PUBLIC ae2a 4 IsProcessorFeaturePresent -PUBLIC 60d58 10 BuildSubSysCommandLine -PUBLIC 60e13 4 GetPriorityClass -PUBLIC 9e01 8 IsBadReadPtr -PUBLIC 3593f 8 IsBadHugeReadPtr -PUBLIC 9e79 8 IsBadWritePtr -PUBLIC bf9d 8 IsBadHugeWritePtr -PUBLIC bccf 4 IsBadCodePtr -PUBLIC 32259 8 IsBadStringPtrA -PUBLIC a5dc 8 IsBadStringPtrW -PUBLIC 2c8ed 8 SetProcessShutdownParameters -PUBLIC 60e79 8 GetProcessShutdownParameters -PUBLIC 60ee8 4 BasepIsRealtimeAllowed -PUBLIC 60f22 c GetSystemTimes -PUBLIC 352d9 14 GetProcessTimes -PUBLIC 21765 c GetProcessAffinityMask -PUBLIC 61068 c GetProcessWorkingSetSize -PUBLIC 303d0 c SetProcessWorkingSetSize -PUBLIC 12c23 4 GetProcessVersion -PUBLIC 610b0 8 SetProcessAffinityMask -PUBLIC 610e0 8 SetProcessPriorityBoost -PUBLIC 6111b 8 GetProcessPriorityBoost -PUBLIC 61155 8 GetProcessIoCounters -PUBLIC 61186 8 GetProcessHandleCount -PUBLIC 611c0 8 GetSystemRegistryQuota -PUBLIC 6120a c BasepSaveAppCertRegistryValue -PUBLIC 15199 8 IsWow64Process -PUBLIC 194dd 4 BasepIsProcessAllowed -PUBLIC 19805 18 BasepCheckWinSaferRestrictions -PUBLIC 19513 30 CreateProcessInternalW -PUBLIC 2332 28 CreateProcessW -PUBLIC 12cb0 c GetSystemInfoInternal -PUBLIC 12d56 4 GetSystemInfo -PUBLIC 37945 4 GetNativeSystemInfo -PUBLIC 2c338 8 SetPriorityClass -PUBLIC 61351 18 BasepConfigureAppCertDlls -PUBLIC 1ddd6 30 CreateProcessInternalA -PUBLIC 2367 28 CreateProcessA -PUBLIC 6136d 8 WinExec -PUBLIC 6147e 8 LoadModule -PUBLIC 3965a 4 CreateMemoryResourceNotification -PUBLIC 395d8 8 QueryMemoryResourceNotification -PUBLIC 2c1e7 c DosPathToSessionPathW -PUBLIC 12f89 8 ProcessIdToSessionId -PUBLIC 132ee 0 WTSGetActiveConsoleSessionId -PUBLIC 61799 c DosPathToSessionPathA -PUBLIC 92ea c BaseFormatObjectAttributes -PUBLIC 2470 8 BaseFormatTimeOut -PUBLIC 16fb4 4 BaseProcessStart -PUBLIC 61901 c BaseFreeThreadStack -PUBLIC e0df 4 BasepEndOfDirName -PUBLIC 176db c BasepLocateExeLdrEntry -PUBLIC 61933 4 BasepUnicodeStringToOemSize -PUBLIC 6195c 4 BasepUnicodeStringToAnsiSize -PUBLIC 30445 8 BasepAcquirePrivilegeEx -PUBLIC 3053e 4 BasepReleasePrivilege -PUBLIC e275 c BasepComputeProcessPath -PUBLIC df9e 8 BaseComputeProcessDllPath -PUBLIC 31d8e 0 BaseComputeProcessSearchPath -PUBLIC e074 4 Basep8BitStringToStaticUnicodeString -PUBLIC 114f8 8 Basep8BitStringToDynamicUnicodeString -PUBLIC 1a2ce 34 BasePushProcessParameters -PUBLIC 9ef1 4 InitializeCriticalSection -PUBLIC b829 8 InitializeCriticalSectionAndSpinCount -PUBLIC 13140 c OpenEventW -PUBLIC 2c05e 4 PulseEvent -PUBLIC 10086 10 CreateSemaphoreW -PUBLIC 2e30f c OpenSemaphoreW -PUBLIC bfad c ReleaseSemaphore -PUBLIC e8b7 c CreateMutexW -PUBLIC e995 c OpenMutexW -PUBLIC 24a7 4 ReleaseMutex -PUBLIC 2540 c WaitForSingleObjectEx -PUBLIC 36696 10 SignalObjectAndWait -PUBLIC 952a 14 WaitForMultipleObjectsEx -PUBLIC 239c 8 SleepEx -PUBLIC 2fb52 c CreateWaitableTimerW -PUBLIC 61985 c OpenWaitableTimerW -PUBLIC 95f9 18 SetWaitableTimer -PUBLIC 2cc09 4 CancelWaitableTimer -PUBLIC a6a9 10 CreateEventW -PUBLIC 1320c c OpenEventA -PUBLIC 12e1d 10 CreateSemaphoreA -PUBLIC 2ca47 c OpenSemaphoreA -PUBLIC e93f c CreateMutexA -PUBLIC ea1b c OpenMutexA -PUBLIC a05d 10 WaitForMultipleObjects -PUBLIC 2442 4 Sleep -PUBLIC 61a81 c CreateWaitableTimerA -PUBLIC 61af0 c OpenWaitableTimerA -PUBLIC 308ad 10 CreateEventA -PUBLIC 33609 0 StringCopyExWorkerW(unsigned short *,unsigned int,unsigned int,unsigned short const *,unsigned short * *,unsigned int *,unsigned long) -PUBLIC 61b64 0 StringLengthWorkerW(unsigned short const *,unsigned int,unsigned int *) -PUBLIC 1746c 0 IsTerminalServerCompatible -PUBLIC 17499 0 IsTSAppCompatEnabled -PUBLIC f1fa 0 IsSystemLUID -PUBLIC 17459 0 InitializeTermsrvFpns -PUBLIC 1efce 0 TermsrvAppInstallMode -PUBLIC 61ba2 4 SetTermsrvAppInstallMode -PUBLIC 61d3f c TermsrvGetSyncTime -PUBLIC 61ffd c TermsrvPutSyncTime -PUBLIC 6240a 8 TermsrvCheckIniSync -PUBLIC 62473 4 TermsrvDoesFileExist -PUBLIC 624ba c TermsrvIniSyncLoop -PUBLIC 17f41 8 GetPerUserWindowsDirectory -PUBLIC 6277d 18 StringCbCopyExW -PUBLIC 627db 1c StringCatExWorkerW -PUBLIC 6297f 18 StringCbCatExW -PUBLIC 1ebb1 4 TermsrvSyncUserIniFile -PUBLIC 629dd 10 StringVPrintfWorkerW -PUBLIC 12980 c BaseCreateThreadPoolThread -PUBLIC 2fc00 c OpenThread -PUBLIC c108 8 SetThreadPriority -PUBLIC a793 4 GetThreadPriority -PUBLIC 62a30 8 SetThreadPriorityBoost -PUBLIC 62a6b 8 GetThreadPriorityBoost -PUBLIC c058 4 ExitThread -PUBLIC 1ce03 8 TerminateThread -PUBLIC 21435 8 GetExitCodeThread -PUBLIC 9728 0 GetCurrentThreadId -PUBLIC 3970d 8 GetThreadContext -PUBLIC 62aa5 8 SetThreadContext -PUBLIC 39732 4 SuspendThread -PUBLIC 328f7 4 ResumeThread -PUBLIC 12a09 10 RaiseException -PUBLIC 62ad0 8 FillUEFInfo -PUBLIC 4479d 4 SetUnhandledExceptionFilter -PUBLIC 62b4f 4 BasepCheckForReadOnlyResource -PUBLIC 12d9f 0 TlsAlloc -PUBLIC 9740 4 TlsGetValue -PUBLIC 9bc5 8 TlsSetValue -PUBLIC 136d7 4 TlsFree -PUBLIC 62c9c 14 GetThreadTimes -PUBLIC 62d09 8 GetThreadIOPendingFlag -PUBLIC 2fa7a 8 SetThreadAffinityMask -PUBLIC 2c0e6 c BaseDispatchAPC -PUBLIC 2c082 c QueueUserAPC -PUBLIC 62d48 8 SetThreadIdealProcessor -PUBLIC 2ffcf 14 CreateFiberEx -PUBLIC 2fe84 4 DeleteFiber -PUBLIC 2ff16 4 ConvertThreadToFiber -PUBLIC 2fed7 0 ConvertFiberToThread -PUBLIC 32992 0 SwitchToThread -PUBLIC 211cd 18 RegisterWaitForSingleObject -PUBLIC 2b086 14 RegisterWaitForSingleObjectEx -PUBLIC 2bff8 4 UnregisterWait -PUBLIC 30062 8 UnregisterWaitEx -PUBLIC 30a62 c QueueUserWorkItem -PUBLIC 2c02c c BindIoCompletionCallback -PUBLIC 2cba2 0 BasepCreateDefaultTimerQueue -PUBLIC 2bfd6 0 CreateTimerQueue -PUBLIC 2117d 1c CreateTimerQueueTimer -PUBLIC 12723 10 ChangeTimerQueueTimer -PUBLIC 21130 c DeleteTimerQueueTimer -PUBLIC 62d7c 8 DeleteTimerQueueEx -PUBLIC 2b26e 18 SetTimerQueueTimer -PUBLIC 62dc3 4 DeleteTimerQueue -PUBLIC 62df0 8 CancelTimerQueueTimer -PUBLIC 62e34 0 StringCchPrintfW -PUBLIC 10637 18 CreateThread -PUBLIC c1e0 4 BaseExitThreadPoolThread -PUBLIC 62e62 4 UnhandledExceptionFilter -PUBLIC 2ffaf c CreateFiber -PUBLIC 63999 8 Heap32ListFirst -PUBLIC 63a47 8 Heap32ListNext -PUBLIC 63ade c Heap32First -PUBLIC 63bf8 4 Heap32Next -PUBLIC 63d24 14 Toolhelp32ReadProcessMemory -PUBLIC 63d64 8 Process32FirstW -PUBLIC 63e1d 8 Process32First -PUBLIC 63eef 8 Process32NextW -PUBLIC 63f90 8 Process32Next -PUBLIC 64062 8 Thread32First -PUBLIC 64116 8 Thread32Next -PUBLIC 641af 8 Module32FirstW -PUBLIC 64268 8 Module32First -PUBLIC 6434c 8 Module32NextW -PUBLIC 643ed 8 Module32Next -PUBLIC 644c8 14 ThpCreateRawSnap -PUBLIC 64679 18 ThpAllocateSnapshotSection -PUBLIC 6481c c ThpCopyAnsiToUnicode -PUBLIC 64858 18 ThpProcessToSnap -PUBLIC 64b47 8 CreateToolhelp32Snapshot -PUBLIC 64bcf 8 GetExpandedNameA -PUBLIC 64c7c 8 GetExpandedNameW -PUBLIC 64d93 4 ConvertWin32FHToDos -PUBLIC 64e03 4 ConvertDosFHToWin32 -PUBLIC 64e2a 4 LZInit -PUBLIC 64f85 14 LZCreateFileW -PUBLIC 65053 c LZOpenFileA -PUBLIC 65114 c LZOpenFileW -PUBLIC 651ab c LZSeek -PUBLIC 65236 c LZRead -PUBLIC 65444 4 LZCloseFile -PUBLIC 654bb 4 LZClose -PUBLIC 6557c c ClearCommError -PUBLIC 656c7 c SetupComm -PUBLIC 6578e 8 EscapeCommFunction -PUBLIC 6588a 8 GetCommMask -PUBLIC 65913 8 GetCommModemStatus -PUBLIC 6599c 8 GetCommProperties -PUBLIC 65a54 8 GetCommState -PUBLIC 22128 8 GetCommTimeouts -PUBLIC 65d02 8 PurgeComm -PUBLIC 65d8c 4 SetCommBreak -PUBLIC 65da4 8 SetCommMask -PUBLIC 65e43 8 SetCommState -PUBLIC 6614b 8 SetCommTimeouts -PUBLIC 661f6 8 TransmitCommChar -PUBLIC 66280 c WaitCommEvent -PUBLIC 663c8 8 GetFriendlyUi -PUBLIC 6677d c CommConfigDialogW -PUBLIC 66871 c CommConfigDialogA -PUBLIC 66949 c GetDefaultCommConfigW -PUBLIC 66a41 c GetDefaultCommConfigA -PUBLIC 66b19 c SetDefaultCommConfigW -PUBLIC 66c11 c SetDefaultCommConfigA -PUBLIC 66cf1 4 ClearCommBreak -PUBLIC 66d09 c GetCommConfig -PUBLIC 66eab c SetCommConfig -PUBLIC 66f43 4 GetNextVDMCommand -PUBLIC 67695 8 ExitVDM -PUBLIC 67714 8 SetVDMCurrentDirectories -PUBLIC 67849 8 GetVDMCurrentDirectories -PUBLIC 2f609 4 CmdBatNotification -PUBLIC 679a9 4 RegisterWowExec -PUBLIC 67a01 c GetVDMConfigValue -PUBLIC 67a4a 10 BaseUpdateVDMEntry -PUBLIC 28b87 8 BaseIsDosApplication -PUBLIC 1ae5e 8 BaseCheckForVDM -PUBLIC 67b2e 8 BaseDestroyVDMEnvironment -PUBLIC 67b70 8 BaseGetEnvNameType_U -PUBLIC 1143f 4 SkipPathTypeIndicator_U -PUBLIC 1f5a6 8 IsShortName_U -PUBLIC 132f9 8 IsLongName_U -PUBLIC 67bcc 8 GetBinaryTypeW -PUBLIC 67e19 4 VDMOperationStarted -PUBLIC 67e35 14 BaseGetVDMKeyword -PUBLIC 1146a 10 FindLFNorSFN_U -PUBLIC 6802b 8 GetBinaryTypeA -PUBLIC 1f26e c GetShortPathNameW -PUBLIC 680be c BaseCreateVDMEnvironment -PUBLIC 13353 c GetLongPathNameW -PUBLIC 28c38 24 BaseCheckVDMp -PUBLIC 68509 24 BaseCheckVDM -PUBLIC 35bb0 c GetShortPathNameA -PUBLIC 68586 c GetLongPathNameA -PUBLIC 687a1 14 BaseGetVdmConfigInfo -PUBLIC 2cf9b c FindNextVolumeW -PUBLIC 2cf60 4 FindVolumeClose -PUBLIC 68abf 10 FindNextVolumeMountPointHelper -PUBLIC 68db1 c FindFirstVolumeMountPointW -PUBLIC 68f11 8 IsThisAVolumeName -PUBLIC 6905d c FindNextVolumeMountPointW -PUBLIC 357d5 4 FindCloseChangeNotification -PUBLIC 2080d c GetVolumeNameForRoot -PUBLIC 31b99 10 BasepGetVolumeNameFromReparsePoint -PUBLIC 20799 10 BasepGetVolumeNameForVolumeMountPoint -PUBLIC 1fb88 c GetVolumeNameForVolumeMountPointW -PUBLIC 6907b 8 SetVolumeNameForRoot -PUBLIC 69218 c NotifyMountMgr -PUBLIC 69395 8 SetVolumeMountPointW -PUBLIC 69778 4 DeleteVolumeNameForRoot -PUBLIC 69930 4 DeleteVolumeMountPointW -PUBLIC 2e61c c GetVolumePathNameW -PUBLIC 20d14 10 GetVolumePathNamesForVolumeNameW -PUBLIC 2d2af 8 FindFirstVolumeW -PUBLIC 69bff c FindNextVolumeA -PUBLIC 69d19 c FindFirstVolumeMountPointA -PUBLIC 69e49 c FindNextVolumeMountPointA -PUBLIC 69f61 c GetVolumeNameForVolumeMountPointA -PUBLIC 6a091 8 SetVolumeMountPointA -PUBLIC 6a0de 4 DeleteVolumeMountPointA -PUBLIC 2e8b2 c GetVolumePathNameA -PUBLIC 6a100 10 GetVolumePathNamesForVolumeNameA -PUBLIC 6a259 8 FindFirstVolumeA -PUBLIC 6aebf c BuildCommDCBAndTimeoutsA -PUBLIC 6aeed 8 BuildCommDCBA -PUBLIC 6af1f c BuildCommDCBAndTimeoutsW -PUBLIC 6af79 8 BuildCommDCBW -PUBLIC 6afd0 18 BasepDoTapeOperation -PUBLIC 6b046 18 SetTapePosition -PUBLIC 6b08c 14 GetTapePosition -PUBLIC 6b0e8 c PrepareTape -PUBLIC 6b11b c EraseTape -PUBLIC 6b14e 10 CreateTapePartition -PUBLIC 6b188 10 WriteTapemark -PUBLIC 6b1c2 10 GetTapeParameters -PUBLIC 6b21e c SetTapeParameters -PUBLIC 6b25f 4 GetTapeStatus -PUBLIC 2cb03 8 CreateJobObjectW -PUBLIC 6b280 c OpenJobObjectW -PUBLIC 2e44a 8 AssignProcessToJobObject -PUBLIC 6b2f7 8 TerminateJobObject -PUBLIC 2afc9 14 QueryInformationJobObject -PUBLIC 2ca9f 10 SetInformationJobObject -PUBLIC 6b324 c IsProcessInJob -PUBLIC 6b35e c CreateJobSet -PUBLIC 6b38c 8 CreateJobObjectA -PUBLIC 6b3f8 c OpenJobObjectA -PUBLIC 6b46c c CreateHardLinkW -PUBLIC 6b629 c CreateHardLinkA -PUBLIC 6b683 4 GetHandleContext -PUBLIC 2146c 8 GetSystemWow64DirectoryW -PUBLIC 6b694 0 CreateSocketHandle -PUBLIC 1301e 18 BasepSxsActivationContextNotification -PUBLIC 6b6a3 10 BasepSxsSuitableManifestCallback -PUBLIC 17190 c BasepSxsFindSuitableManifestResourceFor -PUBLIC 2bf01 4 AddRefActCtx -PUBLIC 1305f 4 ReleaseActCtx -PUBLIC 6b6fb 4 ZombifyActCtx -PUBLIC a644 8 ActivateActCtx -PUBLIC a675 8 DeactivateActCtx -PUBLIC 300a9 4 GetCurrentActCtx -PUBLIC 967c 10 BasepAllocateActivationContextActivationBlock -PUBLIC 6b723 4 BasepFreeActivationContextActivationBlock -PUBLIC 130a6 4 BasepSxsCloseHandles -PUBLIC 15350 14 BasepSxsCreateResourceStream -PUBLIC 6b761 8 BasepSxsOverrideStreamToMessageStream -PUBLIC 1530d 4 BasepSxsIsStatusFileNotFoundEtc -PUBLIC 19aaa 4 BasepSxsIsStatusResourceNotFound -PUBLIC 1a9d9 8 BasepSxsGetProcessImageBaseAddress -PUBLIC 15229 10 BasepSxsCreateFileStream -PUBLIC 162db 1c QueryActCtxW -PUBLIC 1529b 3c BasepSxsCreateStreams -PUBLIC 1a86f 28 BasepSxsCreateProcessCsrMessage -PUBLIC 15921 c BasepCreateActCtx -PUBLIC 1545c 4 CreateActCtxW -PUBLIC 11210 c BasepProbeForDllManifest -PUBLIC 6b7a5 4 CreateActCtxA -PUBLIC 2fe16 c BasepFindActCtxSection_FillOutReturnData -PUBLIC 30e9a c BasepFindActCtxSection_CheckAndConvertParameters -PUBLIC 2fd92 14 BasepFindActCtxSectionString -PUBLIC 6bb0f 14 FindActCtxSectionStringA -PUBLIC 2fd4c 14 FindActCtxSectionStringW -PUBLIC 30f21 14 FindActCtxSectionGuid -PUBLIC 38653 14 BasepQueryModuleData -PUBLIC 3835a 14 BaseQueryModuleData -PUBLIC 1612f 4 CsrBasepCreateActCtx -PUBLIC 6bb65 4 SetComPlusPackageInstallStatus -PUBLIC 6bba2 0 GetComPlusPackageInstallStatus -PUBLIC 6bbcf 4 BasepShimCacheWrite -PUBLIC 16763 c BasepCheckStringPrefixUnicode -PUBLIC 16602 4 BasepInitUserTempPath -PUBLIC 1aa2c 0 BasepShimCacheInitTempDirs -PUBLIC 169ea c BasepShimCacheQueryFileInformation -PUBLIC 1691d 8 BasepIsRemovableMedia -PUBLIC 2b335 c BasepShimCacheInit -PUBLIC 16473 10 BasepShimCacheSearch -PUBLIC 1697f c BasepShimCacheUpdateLRUIndex -PUBLIC 2c59b c BasepShimCacheRemoveEntry -PUBLIC 2f70b 1c BasepShimCacheAllocateEntry -PUBLIC 2f695 10 BasepShimCacheUpdate -PUBLIC 1642c 8 BasepBitMapCountBits -PUBLIC 168bb c BasepBitMapSetBit -PUBLIC 16396 4 BasepShimCacheCheckIntegrity -PUBLIC 165e9 0 BasepShimCacheUnlock -PUBLIC 16b75 4 BasepCheckCacheExcludeList -PUBLIC 164cd 0 BaseInitAppcompatCache -PUBLIC 2b553 8 BasepShimCacheRead -PUBLIC 16662 14 BasepShimCacheCheckBypass -PUBLIC 16879 10 BasepShimCacheLookup -PUBLIC 16562 8 BasepShimCacheLock -PUBLIC 167d7 10 BaseCheckAppcompatCache -PUBLIC 15120 c BaseUpdateAppcompatCache -PUBLIC 6bc3f 0 BaseFlushAppcompatCache -PUBLIC 6bcc1 0 BaseDumpAppcompatCache -PUBLIC 2b38d 0 BaseInitAppcompatCacheSupport -PUBLIC 6be06 0 BaseCleanupAppcompatCache -PUBLIC 6be8a 4 BaseCleanupAppcompatCacheSupport -PUBLIC 1204d c StringCopyWorkerW -PUBLIC 6bec2 0 FreeOne(_RESNAME *) -PUBLIC 6bf37 0 FreeData(_UPDATEDATA *) -PUBLIC 6c041 0 AddStringOrID(unsigned short const *,_UPDATEDATA *) -PUBLIC 6c1ad 0 DeleteResourceFromList(_UPDATEDATA *,_RESTYPE *,_RESNAME *,int,int,int) -PUBLIC 6c317 0 InsertResourceIntoLangList(_UPDATEDATA *,MY_STRING *,MY_STRING *,_RESTYPE *,_RESNAME *,int,int,int,void *) -PUBLIC 6c414 0 FilePos(int) -PUBLIC 6c42e 0 MuMoveFilePos(int,unsigned long) -PUBLIC 6c449 0 MuWrite(int,void *,unsigned long) -PUBLIC 6c470 0 MuRead(int,unsigned char *,unsigned long) -PUBLIC 6c497 0 MuCopy(int,int,unsigned long) -PUBLIC 6c536 0 SetResdata(_IMAGE_RESOURCE_DATA_ENTRY *,unsigned long,unsigned long) -PUBLIC 6c55d 0 SetRestab(_IMAGE_RESOURCE_DIRECTORY *,long,unsigned short,unsigned short) -PUBLIC 6c592 0 FindSection(_IMAGE_SECTION_HEADER *,_IMAGE_SECTION_HEADER *,char *) -PUBLIC 6c5e7 0 AssignResourceToSection(_RESNAME * *,unsigned long,unsigned long,long,long *) -PUBLIC 6c62a 0 WriteResSection(_UPDATEDATA *,int,unsigned long,unsigned long,_RESNAME *) -PUBLIC 6c7a6 0 PatchDebug<_IMAGE_NT_HEADERS>(int,int,_IMAGE_SECTION_HEADER *,_IMAGE_SECTION_HEADER *,_IMAGE_SECTION_HEADER *,_IMAGE_SECTION_HEADER *,_IMAGE_NT_HEADERS *,_IMAGE_NT_HEADERS *,unsigned long,unsigned long *) -PUBLIC 6c922 0 PatchDebug<_IMAGE_NT_HEADERS64>(int,int,_IMAGE_SECTION_HEADER *,_IMAGE_SECTION_HEADER *,_IMAGE_SECTION_HEADER *,_IMAGE_SECTION_HEADER *,_IMAGE_NT_HEADERS64 *,_IMAGE_NT_HEADERS64 *,unsigned long,unsigned long *) -PUBLIC 6ca9e 0 PatchRVAs<_IMAGE_NT_HEADERS>(int,int,_IMAGE_SECTION_HEADER *,unsigned long,_IMAGE_NT_HEADERS *,unsigned long) -PUBLIC 6cc38 0 PatchRVAs<_IMAGE_NT_HEADERS64>(int,int,_IMAGE_SECTION_HEADER *,unsigned long,_IMAGE_NT_HEADERS64 *,unsigned long) -PUBLIC 6cdd5 0 PEWriteResource<_IMAGE_NT_HEADERS>(int,int,unsigned long,_UPDATEDATA *,_IMAGE_NT_HEADERS *) -PUBLIC 6df34 0 PEWriteResource<_IMAGE_NT_HEADERS64>(int,int,unsigned long,_UPDATEDATA *,_IMAGE_NT_HEADERS64 *) -PUBLIC 335b7 0 StringCchCopyW(unsigned short *,unsigned int,unsigned short const *) -PUBLIC 6f093 0 AddResource(MY_STRING *,MY_STRING *,unsigned short,_UPDATEDATA *,void *,unsigned long) -PUBLIC 6f3ef 0 PEWriteResFile(int,int,unsigned long,_UPDATEDATA *) -PUBLIC 6f49a 0 WriteResFile(void *,unsigned short *) -PUBLIC 6f5a3 18 UpdateResourceW -PUBLIC 6f6aa 18 UpdateResourceA -PUBLIC 6f774 8 EndUpdateResourceW -PUBLIC 6f949 8 EndUpdateResourceA -PUBLIC 6f959 0 EnumLangsFunc(void *,unsigned short *,unsigned short *,unsigned short,long) -PUBLIC 6fa8d 0 EnumNamesFunc(void *,unsigned short *,unsigned short *,long) -PUBLIC 6fab4 0 EnumTypesFunc(void *,unsigned short *,long) -PUBLIC 6fad8 8 BeginUpdateResourceW -PUBLIC 6fc7b 8 BeginUpdateResourceA -PUBLIC 6fcdc 0 __report_gsfailure -PUBLIC 6fdca 0 __security_init_cookie_ex -PUBLIC 189fc 0 __security_init_cookie -PUBLIC 9702 0 __security_check_cookie -PUBLIC 6fe51 8 GetCurrentExeName -PUBLIC 6febb c GetExeName -PUBLIC 6ff39 18 GetConsoleAliasInternal -PUBLIC 70086 10 GetConsoleAliasW -PUBLIC 700b2 10 GetConsoleAliasA -PUBLIC 700dc 8 GetConsoleAliasesLengthInternal -PUBLIC 701a1 4 GetConsoleAliasesLengthW -PUBLIC 701b9 4 GetConsoleAliasesLengthA -PUBLIC 701d1 4 GetConsoleAliasExesLengthInternal -PUBLIC 70245 0 GetConsoleAliasExesLengthW -PUBLIC 70252 0 GetConsoleAliasExesLengthA -PUBLIC 7025f 10 GetConsoleAliasesInternal -PUBLIC 703c9 c GetConsoleAliasesW -PUBLIC 703e7 c GetConsoleAliasesA -PUBLIC 70405 c GetConsoleAliasExesInternal -PUBLIC 70531 8 GetConsoleAliasExesW -PUBLIC 7054c 8 GetConsoleAliasExesA -PUBLIC 70567 8 ExpungeConsoleCommandHistoryInternal -PUBLIC 7060f 4 ExpungeConsoleCommandHistoryW -PUBLIC 70627 4 ExpungeConsoleCommandHistoryA -PUBLIC 7063f c SetConsoleNumberOfCommandsInternal -PUBLIC 7070a 8 SetConsoleNumberOfCommandsW -PUBLIC 70725 8 SetConsoleNumberOfCommandsA -PUBLIC 70740 8 GetConsoleCommandHistoryLengthInternal -PUBLIC 707ed 4 GetConsoleCommandHistoryLengthW -PUBLIC 70805 4 GetConsoleCommandHistoryLengthA -PUBLIC 7081d 10 GetConsoleCommandHistoryInternal -PUBLIC 70989 c GetConsoleCommandHistoryW -PUBLIC 709a7 c GetConsoleCommandHistoryA -PUBLIC 709c5 4 SetConsoleCommandHistoryMode -PUBLIC 1ba6a c GetConsoleTitleInternal -PUBLIC 70a39 8 GetConsoleTitleA -PUBLIC 1ba3c 8 GetConsoleTitleW -PUBLIC 2da09 c SetConsoleTitleInternal -PUBLIC 70a61 4 SetConsoleTitleA -PUBLIC 2d9bd 4 SetConsoleTitleW -PUBLIC 70ad1 8 GetConsoleInputExeNameW -PUBLIC 1b355 4 SetConsoleInputExeNameW -PUBLIC 70b61 18 AddConsoleAliasInternal -PUBLIC 70c81 c AddConsoleAliasW -PUBLIC 70cbf c AddConsoleAliasA -PUBLIC 70cfc 8 GetConsoleInputExeNameA -PUBLIC 70da8 4 SetConsoleInputExeNameA -PUBLIC 1b10f 10 SetUpAppName -PUBLIC 29ee3 8 ParseReserved -PUBLIC 1aff3 4 GetConsoleLangId -PUBLIC 1afd5 0 SetTEBLangID -PUBLIC 18c64 c ConnectConsoleInternal -PUBLIC 70e05 2c AllocConsoleInternal -PUBLIC 71011 0 FreeConsoleInternal -PUBLIC 7108d 0 FreeConsole -PUBLIC 710e1 4 PropRoutine -PUBLIC 71191 10 AttachConsoleInternal -PUBLIC b6d7 8 ConDllInitialize -PUBLIC 71311 0 AllocConsole -PUBLIC 714f9 4 AttachConsole -PUBLIC 715f9 0 GetConsoleInputWaitHandle -PUBLIC 1ce32 14 WriteConsoleInternal -PUBLIC 1cf25 14 WriteConsoleA -PUBLIC 35484 14 WriteConsoleW -PUBLIC 1dc7e 4 CloseConsoleHandle -PUBLIC 1dd4d 10 DuplicateConsoleHandle -PUBLIC 71604 8 GetConsoleHandleInformation -PUBLIC 716c9 c SetConsoleHandleInformation -PUBLIC 1aeaa 4 VerifyConsoleIoHandle -PUBLIC 1ff5b 10 OpenConsoleWInternal -PUBLIC 10fe1 10 OpenConsoleW -PUBLIC 71749 20 ReadConsoleInternal -PUBLIC 71a1d 14 ReadConsoleA -PUBLIC 71a6c 14 ReadConsoleW -PUBLIC 71ac2 2c RegisterConsoleVDM -PUBLIC 71c19 c GetConsoleHardwareState -PUBLIC 71ce9 c SetConsoleHardwareState -PUBLIC 37c53 4 GetConsoleDisplayMode -PUBLIC 71d69 10 SetConsoleKeyShortcuts -PUBLIC 71e30 4 SetConsoleMenuClose -PUBLIC 71ea4 10 WriteConsoleInputVDMA -PUBLIC 71ec7 10 WriteConsoleInputVDMW -PUBLIC 71eea 8 SetConsoleCursor -PUBLIC 71f64 8 ShowConsoleCursor -PUBLIC 71fbf c ConsoleMenuControl -PUBLIC 72020 c SetConsolePaletteInternal -PUBLIC 720a0 c SetConsoleDisplayMode -PUBLIC 721c9 c SetConsolePalette -PUBLIC 72269 18 WriteConsoleInputInternal -PUBLIC 723c5 10 WriteConsoleInputA -PUBLIC 723e8 10 WriteConsoleInputW -PUBLIC 7240b 18 CopyRectangle -PUBLIC 7254f 18 ReadConsoleOutputInternal -PUBLIC 727e1 14 ReadConsoleOutputW -PUBLIC 72805 14 ReadConsoleOutputA -PUBLIC 72829 18 WriteConsoleOutputInternal -PUBLIC 72b21 14 WriteConsoleOutputW -PUBLIC 72b45 14 WriteConsoleOutputA -PUBLIC 72b69 1c ReadConsoleOutputString -PUBLIC 72cd9 14 ReadConsoleOutputCharacterA -PUBLIC 72cff 14 ReadConsoleOutputCharacterW -PUBLIC 72d25 14 ReadConsoleOutputAttribute -PUBLIC 72d4b 1c WriteConsoleOutputString -PUBLIC 72ea5 14 WriteConsoleOutputCharacterA -PUBLIC 72ecb 14 WriteConsoleOutputCharacterW -PUBLIC 72ef1 14 WriteConsoleOutputAttribute -PUBLIC 72f17 18 FillConsoleOutput -PUBLIC 72ff9 14 FillConsoleOutputCharacterA -PUBLIC 73020 14 FillConsoleOutputCharacterW -PUBLIC 73044 14 FillConsoleOutputAttribute -PUBLIC 73068 14 CreateConsoleScreenBuffer -PUBLIC 73215 8 InvalidateConsoleDIBits -PUBLIC 732e1 18 GetConsoleInput -PUBLIC 7348d 10 PeekConsoleInputA -PUBLIC 734b0 10 PeekConsoleInputW -PUBLIC 734d3 10 ReadConsoleInputA -PUBLIC 734f6 10 ReadConsoleInputW -PUBLIC 73519 14 ReadConsoleInputExA -PUBLIC 7353d 14 ReadConsoleInputExW -PUBLIC 73561 8 GetConsoleCursorInfo -PUBLIC 73629 4 GetConsoleSelectionInfo -PUBLIC 736e1 4 GetNumberOfConsoleMouseButtons -PUBLIC 73799 10 GetConsoleFontInfo -PUBLIC 738c1 8 GetConsoleFontSize -PUBLIC 7394f c GetCurrentConsoleFont -PUBLIC 1b1f0 8 SetConsoleMode -PUBLIC 73a21 8 GenerateConsoleCtrlEvent -PUBLIC 73aa8 4 SetConsoleActiveScreenBuffer -PUBLIC 73b1c 4 FlushConsoleInputBuffer -PUBLIC 73b90 8 SetConsoleScreenBufferSize -PUBLIC 73c0a 8 SetConsoleCursorPosition -PUBLIC 73c84 8 SetConsoleCursorInfo -PUBLIC 73d51 c SetConsoleWindowInfo -PUBLIC 73e21 18 ScrollConsoleScreenBufferInternal -PUBLIC 73f21 14 ScrollConsoleScreenBufferA -PUBLIC 73f45 14 ScrollConsoleScreenBufferW -PUBLIC 73f69 8 SetConsoleTextAttribute -PUBLIC 73fe5 8 SetConsoleFont -PUBLIC 7405f 4 SetConsoleIcon -PUBLIC 740d3 0 GetConsoleCP -PUBLIC 74143 4 SetConsoleCP -PUBLIC 1b18f 0 GetConsoleOutputCP -PUBLIC 741fe 4 SetConsoleOutputCPInternal -PUBLIC 74261 4 SetConsoleOutputCP -PUBLIC 74294 8 GetConsoleKeyboardLayoutNameWorker -PUBLIC 74329 4 GetConsoleKeyboardLayoutNameA -PUBLIC 74341 4 GetConsoleKeyboardLayoutNameW -PUBLIC 74359 0 GetConsoleWindow -PUBLIC 743c5 8 GetConsoleProcessList -PUBLIC 1af14 8 GetConsoleMode -PUBLIC 74501 0 GetNumberOfConsoleFonts -PUBLIC 7456d 8 GetNumberOfConsoleInputEvents -PUBLIC 74631 4 GetLargestConsoleWindowSize -PUBLIC 1bc2b 8 GetConsoleScreenBufferInfo -PUBLIC 746b9 10 SetConsoleLocalEUDC -PUBLIC 7477f c SetConsoleCursorMode -PUBLIC 747ff c GetConsoleCursorMode -PUBLIC 748c9 4 RegisterConsoleOS2 -PUBLIC 7493d 4 SetConsoleOS2OemFormat -PUBLIC 749b1 14 RegisterConsoleIMEInternal -PUBLIC 74ab9 8 RegisterConsoleIME -PUBLIC 74b12 4 UnregisterConsoleIMEInternal -PUBLIC 74b86 0 UnregisterConsoleIME -PUBLIC 74b97 c MyRegOpenKey -PUBLIC 74be9 10 MyRegQueryValue -PUBLIC 74c8e 8 GetCommandLineString -PUBLIC 74e13 4 ConsoleIMERoutine -PUBLIC 74f87 8 GetConsoleNlsMode -PUBLIC 750d9 8 SetConsoleNlsMode -PUBLIC 751a3 c GetConsoleCharType -PUBLIC 75271 4 DefaultHandler -PUBLIC 1b5c6 4 SetCtrlHandler -PUBLIC 2000c 4 RemoveCtrlHandler -PUBLIC 1b58b 8 SetConsoleCtrlHandler -PUBLIC 75280 4 CtrlRoutine -PUBLIC 75489 0 SetLastConsoleEventActiveInternal -PUBLIC 754d3 0 SetLastConsoleEventActive -PUBLIC 754e4 8 VDMConsoleOperation -PUBLIC 38211 10 EnumCalendarInfoA -PUBLIC 75749 10 EnumCalendarInfoExA -PUBLIC 7576c c EnumTimeFormatsA -PUBLIC 7578a c EnumDateFormatsA -PUBLIC 757aa c EnumDateFormatsExA -PUBLIC 757ca c EnumSystemLanguageGroupsA -PUBLIC 757e8 10 EnumLanguageGroupLocalesA -PUBLIC 75809 c EnumUILanguagesA -PUBLIC 37ce1 8 EnumSystemLocalesA -PUBLIC 75827 8 EnumSystemCodePagesA -PUBLIC 75842 14 GetGeoInfoA -PUBLIC a459 8 NlsGetACPFromLocale -PUBLIC cf52 18 NlsAnsiToUnicode -PUBLIC d239 14 NlsUnicodeToAnsi -PUBLIC 380ef c NlsEnumUnicodeToAnsi -PUBLIC 38063 24 NlsDispatchAnsiEnumProc -PUBLIC d077 18 CompareStringA -PUBLIC 38de8 18 LCMapStringA -PUBLIC d262 10 GetLocaleInfoA -PUBLIC 758cb c SetLocaleInfoA -PUBLIC 7596b 18 GetCalendarInfoA -PUBLIC 75ad6 10 SetCalendarInfoA -PUBLIC 3632d 18 GetTimeFormatA -PUBLIC 361ee 18 GetDateFormatA -PUBLIC 2ec56 18 GetNumberFormatA -PUBLIC 75b79 18 GetCurrencyFormatA -PUBLIC 38a0c 14 GetStringTypeA -PUBLIC 75eb1 14 FoldStringA -PUBLIC 76047 c GetCPInfoExA -PUBLIC 760cf 14 GetStringTypeExA -PUBLIC a490 10 GetStringTypeW -PUBLIC 760df 3c FindJamoDifference -PUBLIC bfef 14 GetStringTypeExW -PUBLIC af4f 1c LongCompareStringW -PUBLIC 763c9 0 NlsResetProcessLocale -PUBLIC 763ef 8 IsValidLanguageGroup -PUBLIC 1c48b 8 IsValidLocale -PUBLIC 764fb 4 IsValidUILanguage -PUBLIC a415 0 GetThreadLocale -PUBLIC 13038 0 GetSystemDefaultUILanguage -PUBLIC 13070 0 GetUserDefaultUILanguage -PUBLIC 127b2 0 GetSystemDefaultLangID -PUBLIC bf3d 0 GetSystemDefaultLCID -PUBLIC 9f10 0 GetUserDefaultLCID -PUBLIC 7668d c SetCurrentUserRegValue -PUBLIC 76734 1c SetMultipleUserInfoInRegistry -PUBLIC 769f2 1c SetMultipleUserInfo -PUBLIC 39200 c GetTwoDigitYearInfo -PUBLIC 76a53 c SetTwoDigitYearInfo -PUBLIC 76c59 10 GetNativeLanguageName -PUBLIC 383cf 4 ConvertDefaultLocale -PUBLIC 1bbba 4 SetThreadLocale -PUBLIC bf64 0 GetUserDefaultLangID -PUBLIC 2f041 c VerLanguageNameW -PUBLIC 2efb9 c VerLanguageNameA -PUBLIC 11562 10 GetLocaleInfoW -PUBLIC 39020 18 GetCalendarInfoW -PUBLIC 76d1b 10 SetCalendarInfoW -PUBLIC 76e34 c SetUserInfo -PUBLIC 1b258 4 SetThreadUILanguage -PUBLIC 76e73 c SetLocaleInfoW -PUBLIC 77cf7 10 CreateRegKey -PUBLIC 1bcfe 10 OpenRegKey -PUBLIC 15047 14 QueryRegValue -PUBLIC 77df0 10 SetRegValue -PUBLIC 1734f 10 MapSection -PUBLIC 77e24 4 UnMapSection -PUBLIC 17f7d 18 GetNlsSectionName -PUBLIC 77e43 c GetCodePageDLLPathName -PUBLIC 2ae21 8 GetNTFileName -PUBLIC 2ac6c c CreateNlsSecurityDescriptor -PUBLIC 2b95b 8 AppendAccessAllowedACE -PUBLIC 2b883 0 CreateNlsObjectDirectory -PUBLIC 172de 14 OpenSection -PUBLIC 2ad98 8 OpenDataFile -PUBLIC 77f87 8 CreateSectionTemp -PUBLIC 77fec 10 Internal_EnumSystemLanguageGroups -PUBLIC 782c6 14 Internal_EnumLanguageGroupLocales -PUBLIC 2a8fa 10 Internal_EnumUILanguages -PUBLIC 37cfc c Internal_EnumSystemLocales -PUBLIC 7849b c Internal_EnumSystemCodePages -PUBLIC 38234 18 Internal_EnumCalendarInfo -PUBLIC 38958 38 EnumDateTime -PUBLIC 786e5 c EnumSystemLanguageGroupsW -PUBLIC 78703 10 EnumLanguageGroupLocalesW -PUBLIC 2a8dc c EnumUILanguagesW -PUBLIC 78724 8 EnumSystemLocalesW -PUBLIC 7873f 8 EnumSystemCodePagesW -PUBLIC 7875a 10 EnumCalendarInfoW -PUBLIC 7877d 10 EnumCalendarInfoExW -PUBLIC 388dc 10 Internal_EnumTimeFormats -PUBLIC 38801 14 Internal_EnumDateFormats -PUBLIC 388be c EnumTimeFormatsW -PUBLIC 387e1 c EnumDateFormatsW -PUBLIC 787a0 c EnumDateFormatsExW -PUBLIC 787c0 8 GetGeoLCID -PUBLIC 78847 14 GetGeoInfoW -PUBLIC 78bd9 c EnumSystemGeoID -PUBLIC 3798e 4 GetUserGeoID -PUBLIC 78c5c 4 SetUserGeoID -PUBLIC 78db1 10 FoldCZone -PUBLIC 78e32 10 FoldDigits -PUBLIC 78eb3 10 FoldCZone_Digits -PUBLIC 78f7b 10 FoldLigatures -PUBLIC 790a7 10 FoldPreComposed -PUBLIC 791d2 10 FoldComposite -PUBLIC ce53 18 MapCase -PUBLIC 2d4ad 1c MapSortKey -PUBLIC 79269 18 MapNormalization -PUBLIC 374eb 18 MapHalfKana -PUBLIC 37787 18 MapFullKana -PUBLIC 794fb 1c MapTraditionalSimplified -PUBLIC 79636 14 FoldStringW -PUBLIC 37693 18 MapKanaWidth -PUBLIC cca8 18 LCMapStringW -PUBLIC 110cb 4 IsValidCodePage -PUBLIC 9915 0 GetACP -PUBLIC 797c3 4 SetCPGlobal -PUBLIC 127a7 0 GetOEMCP -PUBLIC b7dc 4 IsDBCSLeadByte -PUBLIC 2f540 10 GetWCCompSB -PUBLIC 797df 1c GetWCCompMB -PUBLIC 79866 14 GetWCCompSBErr -PUBLIC 798c1 1c GetWCCompMBErr -PUBLIC a1fb 18 GetMBNoDefault -PUBLIC bd19 20 GetMBDefault -PUBLIC 32cf3 1c GetMBCompSB -PUBLIC 7998a 24 GetMBCompMB -PUBLIC 7a064 0 GetMacCodePage -PUBLIC cfd4 18 SpecialMBToWC -PUBLIC 12e76 8 GetCPInfo -PUBLIC 7a1cd c GetCPInfoExW -PUBLIC 7a4ce 8 IsDBCSLeadByteEx -PUBLIC 9bf8 18 MultiByteToWideChar -PUBLIC 32c7b 20 GetMBDefaultComp -PUBLIC a0d4 20 WideCharToMultiByte -PUBLIC 7a6b5 0 GetXPSP2ResModuleHandle -PUBLIC 7a6e2 0 GetXPSP3ResModuleHandle -PUBLIC 35819 0 NlsGetCacheUpdateCount -PUBLIC 34474 c IsValidSeparatorString -PUBLIC 7a712 c IsValidGroupingString -PUBLIC 336f6 8 IsValidCalendarType -PUBLIC 33735 8 IsValidCalendarTypeStr -PUBLIC 7a773 0 GetPreComposedChar -PUBLIC 2f440 4 GetCompositeChars -PUBLIC 7a7f3 4 InsertPreComposedForm -PUBLIC 37834 8 InsertFullWidthPreComposedForm -PUBLIC 2f40d 0 InsertCompositeForm -PUBLIC 7a850 8 NlsConvertIntegerToHexStringW -PUBLIC 124d1 8 NlsConvertStringToIntegerW -PUBLIC 121de 0 NlsStrCpyW -PUBLIC 1bdd2 0 NlsStrCatW -PUBLIC a2d4 0 NlsStrLenW -PUBLIC 7a8b2 0 NlsStrEqualW -PUBLIC 7a962 4 NlsStrNEqualW -PUBLIC 7aa41 4 GetDefaultSortkeySize -PUBLIC 7aa6b 4 GetLinguistLangSize -PUBLIC 7aa95 10 ValidateLCType -PUBLIC 2ee51 14 GetStringTableEntry -PUBLIC 7ad9c 0 NlsIsDll -PUBLIC 2c16a 0 UpdateUserInfoCache -PUBLIC 12544 c NlsStringIsInRange -PUBLIC 2a5c3 10 GetUserInfoFromRegistry -PUBLIC 12090 1c GetUserInfo -PUBLIC 14f5c 14 NlsConvertIntegerToString -PUBLIC 397f8 4 ValidateLocale -PUBLIC 384db c GetCPFileNameFromRegistry -PUBLIC 3440e 4 IsValidNumberFormat -PUBLIC 7adfe 4 IsValidCurrencyFormat -PUBLIC 7ae7f 20 GetRegIntValue -PUBLIC 7af62 8 ConvertGroupingStringToInt -PUBLIC 7afd9 1c GetGroupingValue -PUBLIC 3472b 20 GetNumberString -PUBLIC 3465d 20 ParseNumber -PUBLIC 7b04e 20 ParseCurrency -PUBLIC 344bc 18 GetNumberFormatW -PUBLIC 7b6ca 18 GetCurrencyFormatW -PUBLIC 3414d 4 IsValidTime -PUBLIC 339dc 4 IsValidDate -PUBLIC 7bad3 18 GetCalendarYear -PUBLIC 7bb6e c GetAbsoluteDate -PUBLIC 7bc59 4 GetAdvanceHijriDate -PUBLIC 7be1b 4 DaysUpToHijriYear -PUBLIC 7be83 c IsValidDateForHebrew -PUBLIC 335d4 18 StringCchCopyExW -PUBLIC 33ec8 14 ParseTime -PUBLIC 7bf4d 8 GetHijriDate -PUBLIC 7c04f 8 GetHebrewDate -PUBLIC 7c86f c NumberToHebrewLetter -PUBLIC 33fd3 18 GetTimeFormatW -PUBLIC 33a4a 20 ParseDate -PUBLIC 33775 18 GetDateFormatW -PUBLIC c0ed 0 NlsThreadCleanup -PUBLIC 17fc1 0 InitKoreanWeights -PUBLIC 1805b c NlsDllInitialize -PUBLIC 38617 4 IsCPHashNodeLoaded -PUBLIC 7caa9 0 GetGeoFileInfo -PUBLIC a557 0 GetCTypeFileInfo -PUBLIC 7cb54 8 LoadCodePageAsDLL -PUBLIC 188fc 14 MakeCPHashNode -PUBLIC 16ea9 10 MakeLocHashNode -PUBLIC 336b6 8 GetCalendar -PUBLIC 7cc2b 4 IsValidSortId -PUBLIC 7cd42 0 GetLanguageExceptionInfo -PUBLIC 7cdc6 4 FindLanguageExceptionPointers -PUBLIC 7ce1e 4 CopyLanguageExceptionInfo -PUBLIC 184dc c FindExceptionPointers -PUBLIC 7ceb0 8 CopyExceptionInfo -PUBLIC 7cf53 4 WaitOnEvent -PUBLIC 183fe 8 GetSortkeyFileInfo -PUBLIC 3996f 8 GetCodePageFileInfo -PUBLIC 1831e 10 MakeLangHashNode -PUBLIC d1ae 0 GetCPHashNode -PUBLIC 150c2 0 GetLocHashNode -PUBLIC 7cf85 8 CreateAndCopyLanguageExceptions -PUBLIC 7d1b9 4 GetLinguisticLanguageInfo -PUBLIC 18297 10 GetLanguageFileInfo -PUBLIC 7d246 0 GetLangHashNode -PUBLIC 7d340 c UpdateJamoState -PUBLIC 7d3aa 14 GetJamoComposition -PUBLIC 7d4ae 18 MapOldHangulSortKey -PUBLIC 17210 0 NlsIsInteractiveUserProcess -PUBLIC 7d5b4 0 NlsCheckForInteractiveUser -PUBLIC 2a25d 4 NlsGetCacheBuffer -PUBLIC 2a41a 0 NlsInvalidateCache -PUBLIC 7d659 4 NlsFlushProcessCache -PUBLIC 2a855 10 NlsQueryCurrentUserInfo -PUBLIC 11fff 18 NlsGetCurrentUserNlsInfo -PUBLIC 2a532 4 NlsGetUserLocale -PUBLIC 7d6b7 c CsrBasepNlsSetUserInfo -PUBLIC 16ff1 8 CsrBasepNlsGetUserInfo -PUBLIC 7d765 1c CsrBasepNlsSetMultipleUserInfo -PUBLIC 7d9c9 0 CsrBasepNlsUpdateCacheCount -PUBLIC 7da0e c UTFCPInfo -PUBLIC 7da7f 10 UTF7ToUnicode -PUBLIC 31054 14 UTF8ToUnicode -PUBLIC 7dc45 10 UnicodeToUTF7 -PUBLIC 21523 10 UnicodeToUTF8 -PUBLIC 30f99 18 UTFToUnicode -PUBLIC 215f5 20 UnicodeToUTF -PUBLIC 2ad39 c CsrBasepNlsCreateSection -PUBLIC 7dead 8 DelayLoadFailureHook -PUBLIC 7debd 4 FindDll -PUBLIC 7dfad 8 LookupHandlerByName -PUBLIC 7e036 8 LookupHandlerByOrdinal -PUBLIC 7e07f 8 LookupHandler -PUBLIC 7e0cb 14 GetSSIDForAdapter -PUBLIC 7e0ef 18 GetSignalStrengthForAdapter -PUBLIC ddf5 0 GetCurrentProcess -PUBLIC 7e27b 4 ntohs -PUBLIC 7e299 c WSAEnumProtocolsW -PUBLIC 7e2bd 24 WSAIoctl -PUBLIC 7e313 4 GetActivePwrScheme -PUBLIC 7e34b 28 WinStationSendMessageW -PUBLIC 7e362 8 ReadPwrScheme -PUBLIC 7e39e 18 SdbQueryData -PUBLIC 14ae7 4 FreeEnvironmentStringsW -PUBLIC 7e3a9 c mixerGetID -PUBLIC 7e536 18 SetupDiGetDeviceInterfaceDetailA -PUBLIC cc97 4 LockResource -PUBLIC 7e848 8 DnsRecordCompare -PUBLIC 7e878 10 DnsRecordSetCompare -PUBLIC 260c2 4 DnsApiAlloc -PUBLIC 7e8b2 c DnsRecordSetCopyEx -PUBLIC 7e98d 4 DnsApiFree -PUBLIC 7e9e7 0 LZStart -PUBLIC 7ea57 c SfpInstallCatalog -PUBLIC 7ea62 8 SfpDeleteCatalog -PUBLIC 7eb14 10 pSetupConcatenatePaths -PUBLIC 7eb60 c SetActivePwrScheme -PUBLIC 7ec59 0 IsPwrShutdownAllowed -PUBLIC 7ece6 10 UrlMkSetSessionOption -PUBLIC 7f052 0 ldap_search_init_pageW -PUBLIC 7f078 8 DnsFreeConfigStructure -PUBLIC 7f0c5 c DnsSetConfigDword -PUBLIC 7f1f1 10 WZCProviderDeleteWirelessProfile -PUBLIC 7f1fe 0 LZDone -PUBLIC 7f215 8 SetConsoleMaximumWindowSize -PUBLIC 7f23b 1c MprAdminConnectionEnum -PUBLIC 7f251 8 NPCancelConnectionForCSCAgent -PUBLIC 7f6a5 5c LocalEnrollNoDS -PUBLIC 328ec 0 memmove -PUBLIC 2cf55 c RtlDnsHostNameToComputerName -PUBLIC 11fc7 0 wcsncpy -PUBLIC 7f853 0 wcschr -PUBLIC 29f14 0 wcsstr -PUBLIC a0c9 0 _allmul -PUBLIC 7f85e 0 DbgBreakPoint -PUBLIC 7f869 0 DbgPrint -PUBLIC 24c6 0 _SEH_prolog -PUBLIC 2501 0 _SEH_epilog -PUBLIC 39aa8 0 _except_handler3 -PUBLIC 39b8e 4 _seh_longjmp_unwind -PUBLIC 7f874 4 DbgUiDebugActiveProcess -PUBLIC 7f87f 0 DbgUiConnectToDbg -PUBLIC 7f88a 4 DbgUiIssueRemoteBreakin -PUBLIC 7f895 14 NtSetInformationDebugObject -PUBLIC 7f8a0 0 DbgUiGetThreadDebugObject -PUBLIC 7f8ab 8 DbgUiConvertStateChangeStructure -PUBLIC 7f8b6 8 DbgUiWaitStateChange -PUBLIC 7f8c1 8 DbgUiContinue -PUBLIC 7f8cc 4 DbgUiStopDebugging -PUBLIC 7f8d7 0 strncpy -PUBLIC 7f8e2 8 RtlFlushSecureMemoryCache -PUBLIC de84 0 _global_unwind2 -PUBLIC dedf 0 _local_unwind2 -PUBLIC df3f 0 _NLG_Return2 -PUBLIC df4f 0 _abnormal_termination -PUBLIC df72 0 _NLG_Notify1 -PUBLIC df7b 0 _NLG_Notify -PUBLIC df91 0 _NLG_Dispatch2 -PUBLIC 7f8ed 18 NtQueryVirtualMemory -PUBLIC 18045 4 LdrSetDllManifestProber -PUBLIC 18050 8 RtlSetThreadPoolStartFunc -PUBLIC 1017b 4 RtlEncodePointer -PUBLIC 39493 10 RtlSetHeapInformation -PUBLIC 7f8f8 14 RtlQueryHeapInformation -PUBLIC abd3 4 LdrUnloadDll -PUBLIC 14e44 4 LdrUnloadAlternateResourceModule -PUBLIC 112bb 4 LdrDisableThreadCalloutsForDll -PUBLIC e46c 10 LdrGetDllHandle -PUBLIC b4c4 8 LdrUnlockLoaderLock -PUBLIC 2129a 8 LdrAddRefDll -PUBLIC b3ca c LdrLockLoaderLock -PUBLIC 17779 c LdrEnumerateLoadedModules -PUBLIC 14e0f 8 LdrLoadAlternateResourceModule -PUBLIC e069 10 LdrLoadDll -PUBLIC ad95 10 LdrGetProcedureAddress -PUBLIC 9f9f 10 LdrFindResource_U -PUBLIC 9faa 10 LdrAccessResource -PUBLIC 1126d 10 LdrFindResourceDirectory_U -PUBLIC 1cdf8 0 LdrShutdownProcess -PUBLIC 7f903 8 NtTerminateProcess -PUBLIC 1a204 18 LdrQueryImageFileExecutionOptions -PUBLIC 7f90e 0 wcsncmp -PUBLIC c0d1 0 LdrShutdownThread -PUBLIC 10186 4 RtlDecodePointer -PUBLIC 2c053 c RtlSetIoCompletionCallback -PUBLIC 7f919 28 RtlApplicationVerifierStop -PUBLIC 7f924 0 _alloca_probe -PUBLIC 19a62 0 DbgPrintEx -PUBLIC 15451 4 LdrDestroyOutOfProcessImage -PUBLIC 162a8 14 LdrAccessOutOfProcessResource -PUBLIC 15446 14 LdrFindCreateProcessManifest -PUBLIC 15345 10 LdrCreateOutOfProcessImage -PUBLIC 16912 0 _allshl -PUBLIC 7f92f 4 RtlUnhandledExceptionFilter -PUBLIC 7f93a 0 wcspbrk -PUBLIC 7f945 0 _wcslwr -PUBLIC 37a6c 0 _wtol -PUBLIC 7f950 0 _strlwr -PUBLIC 7f95b 0 _ValidateEH3RN -PUBLIC 7fb82 10 RtlUnwind -PUBLIC 7fb8d c InitGlobalBuffers -PUBLIC 7fc40 0 InitGlobalBuffersEx -PUBLIC 7fc57 4 FreeGlobalBuffers -PUBLIC 7fca5 c lz_CopyFile -PUBLIC 7fd63 c ExpandOrCopyFile -PUBLIC 7fe21 4 ExtractFileNameW -PUBLIC 7fe56 4 ExtractFileName -PUBLIC 7fea2 4 ExtractExtensionW -PUBLIC 7fed7 4 ExtractExtension -PUBLIC 7ff1d 4 MakeCompressedNameW -PUBLIC 7ff89 4 MakeCompressedName -PUBLIC 7fff3 8 MakeExpandedName -PUBLIC 800fc 8 CopyDateTimeStamp -PUBLIC 80146 c GetHdr -PUBLIC 801f9 4 IsCompressed -PUBLIC 80246 18 LZDecode -PUBLIC 804ad c ReadInBuf -PUBLIC 80527 c WriteOutBuf -PUBLIC 80579 4 LZIsCharLowerA -PUBLIC 805dc 4 LZIsCharUpperA -PUBLIC 8063f 4 LZCharNextA -STACK WIN 4 b5ae 16 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 9b47 66 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 17826 35 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 55709 1f7 c 0 10 8 4c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 558b4 e 0 0 10 8 4c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 be41 c7 c 0 4 8 3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 39bc8 e 0 0 4 8 3c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 98f4 2b 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 936b 1e 6 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 9371 14 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 92b0 32 7 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 92b6 28 1 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 92b7 26 0 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 30769 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b722 20 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 29d7a 164 a 0 18 0 44 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 29d83 157 1 0 18 4 44 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 76 - ^ = -STACK WIN 4 29d84 155 0 0 18 8 44 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 76 - ^ = -STACK WIN 4 29dc5 8e 0 0 18 c 44 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 76 - ^ = -STACK WIN 4 1b069 a1 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1b078 90 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1b079 82 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 17860 24 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 29f30 6f 6 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 29f36 65 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1dc03 54 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 12f39 52 6 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 12f3f 48 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 17889 5c 1d 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1789f 42 7 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 178a6 38 0 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 17923 98 7 0 0 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1792a 8f 0 0 0 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 180a6 23c 9 0 0 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 180af 231 0 0 0 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 180c5 21a 0 0 0 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1795e 89 3 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 17961 85 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1798a 5a 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 179ea 212 8 0 0 0 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 17a3c 1bd 0 0 0 4 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 17a49 1af 0 0 0 8 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 16e70 85 8 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 18a21 a1 e 0 0 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 18a2f 91 0 0 0 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 18a68 57 0 0 0 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 17cb5 257 8 0 0 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 17e09 89 0 0 0 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1839b d3 1b 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 183b2 b8 4 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 183b6 b3 0 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 998d 16b c 0 8 8 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 39e42 e 0 0 8 8 2c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 992f 10b c 0 4 8 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 39ea2 e 0 0 4 8 28 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 39eca e 0 0 4 8 28 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1625 129 c 0 20 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1717 4 0 0 20 8 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 32eb1 ba c 0 4 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 39f0b e 0 0 4 8 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 32e1d bb c 0 4 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 39f69 e 0 0 4 8 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 a03b 23 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 a017 25 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 55921 e8 8 0 4 0 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5595c a5 0 0 4 4 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5595d a3 0 0 4 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 a35e b91 19 0 18 0 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 a36a b81 d 0 18 4 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 132 - ^ = -STACK WIN 4 a36b b7f c 0 18 8 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 132 - ^ = -STACK WIN 4 a377 b72 0 0 18 c 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 132 - ^ = -STACK WIN 4 55a0e e0 c 0 4 8 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 55abf e 0 0 4 8 2c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 55b09 8b c 0 4 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 55b65 e 0 0 4 8 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 30927 209 c 0 c 8 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3a7c5 e 0 0 c 8 30 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 30bd3 142 c 0 c 8 3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3a824 e 0 0 c 8 3c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3a86a 19 0 0 c 8 3c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 33107 18f f 0 14 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 33110 182 6 0 14 4 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 33116 17b 0 0 14 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 3312f 14d 0 0 14 c 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 ffb1 12d c 0 c 8 3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3a94d e 0 0 c 8 3c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3a995 19 0 0 c 8 3c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 326c1 15 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 ab78 ff c 0 4 8 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3a9c6 e 0 0 4 8 38 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 330e7 1b 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 a9cc 64 a 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 a9d2 5a 4 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 a9d6 55 0 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 ba64 39 c 0 8 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3aa01 4 0 0 8 8 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 bbce b2 c 0 c 8 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3aa1d e 0 0 c 8 30 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 e6dc 185 c 0 18 0 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 e6e8 175 0 0 18 4 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 56 - ^ = -STACK WIN 4 e701 13c 0 0 18 8 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 56 - ^ = -STACK WIN 4 e73a ed 0 0 18 c 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 56 - ^ = -STACK WIN 4 1021c 1ba 9 0 10 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 10225 1ad 0 0 10 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1026f 15c 0 0 10 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 30b7d 3b 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2c86d 29 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2c87c 16 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ddfe d3 c 0 1c 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3aad0 4 0 0 1c 8 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 a996 65 a 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 a99c 5b 4 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 a9a0 56 0 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 b64c 63 c 0 8 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3ab10 11 0 0 8 8 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2520 16 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1042c 301 17 0 1c 8 420 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3abe7 7a 0 0 1c 8 420 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 98eb 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2ff92 18 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 103a3 9e 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 55bbc 2d 7 0 4 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 55bee 31 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 55c24 2e 8 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 55c2c 22 0 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 55c57 27 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 55c83 4c b 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 55c89 42 5 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 55c8d 3d 1 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 55c8e 3b 0 0 8 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 55cd4 119 15 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 55cdc 10d d 0 c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 55cdd 10b c 0 c 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 55ce9 fe 0 0 c c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 55df2 bd 6 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 55df8 b3 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 55e53 15 0 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 55eb4 36 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 55eef 15b 12 0 18 0 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 55efb 14b 6 0 18 4 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 55f01 144 0 0 18 8 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5604f a4 18 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5605a 95 d 0 c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 5605e 90 9 0 c 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 56067 86 0 0 c c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 560f8 d7 9 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 56100 cb 1 0 c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 56101 c9 0 0 c 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 5618d 3c 0 0 c c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 561d4 a5 16 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 561dd 98 d 0 c 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 561de 94 c 0 c 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 561ea 87 0 0 c c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 5627e fe 16 0 c 0 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 56287 f1 d 0 c 4 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 48 - ^ = -STACK WIN 4 56288 ef c 0 c 8 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 48 - ^ = -STACK WIN 4 56294 e2 0 0 c c 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 48 - ^ = -STACK WIN 4 56381 2b 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 563b1 20 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 563d6 60 10 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 563df 53 7 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 563e6 4b 0 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 56407 24 0 0 8 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 5643b 1f 6 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 56441 15 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5645f 54 a 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 56465 4a 4 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 56469 45 0 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 56471 3c 0 0 4 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 564b8 5c 6 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 564be 52 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 564cf 16 0 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 56519 180 e 0 c 0 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 56522 173 5 0 c 4 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 48 - ^ = -STACK WIN 4 56523 171 4 0 c 8 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 48 - ^ = -STACK WIN 4 56527 16c 0 0 c c 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 48 - ^ = -STACK WIN 4 5669e c8 9 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 566a6 bc 1 0 c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 566a7 ba 0 0 c 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 5676b 27b 15 0 c 0 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 56774 26e c 0 c 4 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 48 - ^ = -STACK WIN 4 5677f 262 1 0 c 8 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 48 - ^ = -STACK WIN 4 56780 260 0 0 c c 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 48 - ^ = -STACK WIN 4 569ec e9 15 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 569f4 dd d 0 c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 569f5 db c 0 c 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 56a01 ce 0 0 c c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 56ada b5 15 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 56ae2 a9 d 0 c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 56ae3 a7 c 0 c 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 56aef 9a 0 0 c c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 56b94 12e 8 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 56b9c 122 0 0 c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 56bba 102 0 0 c 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 56cc7 113 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 56cdf f6 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 56cea ea 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 56ddf 22e 19 0 1c 0 44 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 56df1 2a 7 0 1c 4 44 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 76 - ^ = -STACK WIN 4 56df2 28 6 0 1c 8 44 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 76 - ^ = -STACK WIN 4 56df8 21 0 0 1c c 44 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 76 - ^ = -STACK WIN 4 57012 8d 6 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 57018 83 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 5704b 45 0 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 5704f 40 0 0 8 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 570a4 46 8 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 570ac 16 0 0 c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 570ef 5b 8 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 570f7 16 0 0 c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 57112 2c 0 0 c 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5714f 75 e 0 c 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5715d 5e 0 0 c 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 57177 35 0 0 c 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 571c9 e0 a 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 571cf d6 4 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 571d3 d1 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 572ae 14b 9 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 572b7 13e 0 0 c 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 572df 115 0 0 c 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 573fe 1f4 1c 0 1c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5740d 1b2 d 0 1c 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 57411 1ad 9 0 1c 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 5741a 1a3 0 0 1c c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 37bfc 52 13 0 0 0 c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 37a77 1c7 13 0 8 0 3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 37a80 1ba a 0 8 4 3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 37a8a 1af 0 0 8 8 3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 575f7 69 b 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 575fd 5f 5 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 575fe 5d 4 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 57602 58 0 0 4 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 57665 70 6 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5766b 66 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 576a6 2a 0 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 576da 5c c 0 10 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 576e1 51 5 0 10 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 576e2 4f 4 0 10 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 576e6 4a 0 0 10 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 5773b 82 15 0 c 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 57748 71 8 0 c 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 57749 6f 7 0 c 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 57750 67 0 0 c c c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 577c2 a4 e 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 577cb 97 5 0 c 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 577cc 95 4 0 c 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 577d0 90 0 0 c c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 5786b 4b 11 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 57871 41 b 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 57878 37 4 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 5787c 32 0 0 c c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 202af 1e8 22 0 10 0 c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 202c3 1cb e 0 10 4 c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 204 - ^ = -STACK WIN 4 202c4 1c9 d 0 10 8 c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 204 - ^ = -STACK WIN 4 202d1 1bb 0 0 10 c c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 204 - ^ = -STACK WIN 4 578bb 9d 10 0 c 0 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 578c4 90 7 0 c 4 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 578cb 88 0 0 c 8 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5795d 95 a 0 10 0 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 57966 88 1 0 10 4 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 57967 86 0 0 10 8 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 579f7 ac 9 0 c 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 579fe a1 2 0 c 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 579ff 9d 1 0 c 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 57a00 9b 0 0 c c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 57aa8 101 9 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 57ab0 f5 1 0 c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 57ab1 f3 0 0 c 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 57ae7 93 0 0 c c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 57bae e4 a 0 c 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 57bb7 d7 1 0 c 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 57bb8 d5 0 0 c 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 57be2 a8 0 0 c c c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 57c97 38 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 57cd4 b4 9 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 57cdd 54 0 0 4 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 57d07 29 0 0 4 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 57da5 80 b 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 57dab 76 5 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 57daf 71 1 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 57db0 6f 0 0 4 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 57e41 3f 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 57e85 2c 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 57eb6 9e a 0 4 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 57ebe 92 2 0 4 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 57ebf 8e 1 0 4 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 57ec0 8c 0 0 4 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 57f59 2c 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 57f8a 4e a 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 57f90 44 4 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 57f94 3f 0 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 57fdd a7 7 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 57fe4 9c 0 0 8 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 57ff3 8c 0 0 8 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 57ff4 8a 0 0 8 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 31893 136 22 0 10 0 a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 318a7 119 e 0 10 4 a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 176 - ^ = -STACK WIN 4 318ab 114 a 0 10 8 a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 176 - ^ = -STACK WIN 4 318b5 109 0 0 10 c a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 176 - ^ = -STACK WIN 4 316c7 20b 13 0 8 0 3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 316d8 139 2 0 8 4 3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 68 - ^ = -STACK WIN 4 316d9 137 1 0 8 8 3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 68 - ^ = -STACK WIN 4 316da 135 0 0 8 c 3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 68 - ^ = -STACK WIN 4 5808d 121 15 0 4 0 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5809a 110 8 0 4 4 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 56 - ^ = -STACK WIN 4 580a1 108 1 0 4 8 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 56 - ^ = -STACK WIN 4 580a2 106 0 0 4 c 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 56 - ^ = -STACK WIN 4 201f1 25b a 0 c 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 201fb 22d 0 0 c 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 2020a 210 0 0 c 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 20210 209 0 0 c c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 581b3 7c 6 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 581b9 72 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 581cc 5e 0 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 216a4 105 a 0 8 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 216ad f8 1 0 8 4 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 216ae f6 0 0 8 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 21702 84 0 0 8 c 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 58234 6e 8 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5827c 17 0 0 4 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 582a7 a0 b 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 582ad 96 5 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 582ae 94 4 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 582b2 8f 0 0 c c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 5834c 52 8 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 58380 1a 0 0 8 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 583a3 17b 7 0 10 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 583aa 170 0 0 10 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 583d0 143 0 0 10 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 58523 a7 b 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 58529 9d 5 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 5852a 9b 4 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 5852e 96 0 0 10 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 2ceb2 ae 1c 0 c 0 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2cec0 97 e 0 c 4 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 64 - ^ = -STACK WIN 4 2cec4 92 a 0 c 8 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 64 - ^ = -STACK WIN 4 2cece 87 0 0 c c 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 64 - ^ = -STACK WIN 4 585cf 97 18 0 c 0 3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 585dd 76 a 0 c 4 3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 585e7 6b 0 0 c 8 3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5866b 476 1c 0 10 0 68c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5867c 2f7 b 0 10 4 68c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1684 - ^ = -STACK WIN 4 58680 2f2 7 0 10 8 68c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1684 - ^ = -STACK WIN 4 58687 2ea 0 0 10 c 68c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1684 - ^ = -STACK WIN 4 58bc3 76 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 58be8 4d 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 58c3e 26 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 58c69 19c b 0 4 0 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 58c72 18f 2 0 4 4 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 58c73 18d 1 0 4 8 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 58c74 18b 0 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 58e0a 117 a 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 58e12 10b 2 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 58e13 109 1 0 8 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 58e14 107 0 0 8 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 58f26 44 6 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 58f3c 2a 0 0 8 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 58f6f dc 8 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 58f76 d1 1 0 8 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 58f77 cf 0 0 8 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 58f91 af 0 0 8 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 59050 44 6 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 59066 2a 0 0 8 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 59099 211 d 0 8 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 590a2 6d 4 0 8 4 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 590a6 68 0 0 8 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 592af 44 6 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 592c5 2a 0 0 8 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 592f8 b1 11 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 592fe a7 b 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 592ff a5 a 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 59309 9a 0 0 8 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 593ae b 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 b852 20 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 b877 1a 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 30b14 3a 8 0 0 0 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 f272 79 9 0 4 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 f27a 6d 1 0 4 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 f27b 6b 0 0 4 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 138fc 172 d 0 10 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 13905 165 4 0 10 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 13909 160 0 0 10 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 34ffe 96 12 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 35006 8a a 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 35010 7f 0 0 8 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 360dd 63 a 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 360e3 59 4 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 360e7 54 0 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 360f4 46 0 0 4 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 f2ee 40 7 0 4 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 176b 75 8 0 4 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 17e5 24 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 593be 9b 40 0 4 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 593ed 68 11 0 4 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 593fe 53 0 0 4 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 929c f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e7ec 82 8 0 8 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 10b1c 77 8 0 8 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 e866 5d 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 e88c 22 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 35524 5d 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3554a 22 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3065d 96 8 0 c 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3214e 8e 8 0 c 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 10ad9 3b 11 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 10aea 26 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 350bf 166 15 0 4 0 b0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 350d0 14c 4 0 4 4 b0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 350d4 147 0 0 4 8 b0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5945e 121 2c 0 4 0 b0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5946f eb 1b 0 4 4 b0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5948a cf 0 0 4 8 b0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2d36f 46 8 0 c 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 59584 38 b 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5958f 29 0 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2e9c1 2e7 1d 0 c 0 188 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2e9d2 29a c 0 c 4 188 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2e9de 28d 0 0 c 8 188 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 595c1 278 15 0 c 0 180 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 595d2 25e 4 0 c 4 180 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 392 - ^ = -STACK WIN 4 595d6 259 0 0 c 8 180 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 392 - ^ = -STACK WIN 4 5961c 20f 0 0 c c 180 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 392 - ^ = -STACK WIN 4 5983e 1ee 13 0 8 0 50 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 59847 1d2 a 0 8 4 50 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 88 - ^ = -STACK WIN 4 59848 1d0 9 0 8 8 50 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 88 - ^ = -STACK WIN 4 59851 1c6 0 0 8 c 50 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 88 - ^ = -STACK WIN 4 a7d4 b7 8 0 4 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 a810 67 0 0 4 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 a811 61 0 0 4 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 59a31 e8 1b 0 4 0 c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 59a42 ce a 0 4 4 c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 204 - ^ = -STACK WIN 4 59a4b c4 1 0 4 8 c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 204 - ^ = -STACK WIN 4 59a4c c2 0 0 4 c c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 204 - ^ = -STACK WIN 4 13093 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 59b1e 4f a 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 59b28 41 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 59b72 5 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 59b7c 1ea 11 0 0 0 4c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 59b8a 1c5 3 0 0 4 4c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 84 - ^ = -STACK WIN 4 59b8d 1c1 0 0 0 8 4c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 84 - ^ = -STACK WIN 4 59c2c fa 0 0 0 c 4c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 84 - ^ = -STACK WIN 4 59d78 2ab 17 0 4 8 244 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 59dd6 4 0 0 4 8 244 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 59f9f 14 0 0 4 8 244 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5a0bd 61 8 0 4 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5a0d4 46 0 0 4 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5a123 4e 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5a13c 31 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5a14b 21 0 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5a176 22 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5a19d 46 6 0 4 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5a1e8 44 8 0 c 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5a231 59 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5a28f 57 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5a2eb 2b 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5a31b 31 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5a351 70 7 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5a357 66 1 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5a358 64 0 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5a3c6 62 7 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5a3cc 58 1 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5a3cd 56 0 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5a42d 4e 9 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5a436 35 0 0 4 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5a480 e0 9 0 8 0 68 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5a489 42 0 0 8 4 68 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5a565 3f c 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5a56d 33 4 0 c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5a571 2e 0 0 c 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5a5a9 44 6 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5a5af 3a 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5a5be 1a 0 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 36f5b 460 9 0 4 0 58 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 36f64 e3 0 0 4 4 58 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 96 - ^ = -STACK WIN 4 36f9d 98 0 0 4 8 58 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 96 - ^ = -STACK WIN 4 36f9e 96 0 0 4 c 58 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 96 - ^ = -STACK WIN 4 323d2 146 a 0 8 0 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 323db 139 1 0 8 4 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 323dc 137 0 0 8 8 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5a5f2 c22 1d 0 c 0 2c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5a60f bfc 0 0 c 4 2c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 716 - ^ = -STACK WIN 4 5a689 b7e 0 0 c 8 2c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 716 - ^ = -STACK WIN 4 5a690 b76 0 0 c c 2c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 716 - ^ = -STACK WIN 4 5b219 1d 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 217ac 20 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5b23b 4b 8 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5b243 3f 0 0 c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2af8f 2c 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 30cce 1c 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 360a9 15 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 360c3 15 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 30bbb 13 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5b28b 1b 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1006c 15 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 34e97 15 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2c3be 1b 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 354ed 15 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 30cfe 15 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 32695 13 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5b2ab 1b 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2f827 15 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 f726 59 7 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 f72c 4f 1 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 f72d 4d 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 f763 59 7 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 f769 4f 1 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 f76a 4d 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1ee95 e2 7 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1ee9b d8 1 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1ee9c d6 0 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 f88c 181 13 0 14 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 f893 176 c 0 14 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 f897 171 8 0 14 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 f89f 168 0 0 14 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 f6da 63 b 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 f6e5 54 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 f7a0 124 22 0 c 0 228 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 f7b1 10a 11 0 c 4 228 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 560 - ^ = -STACK WIN 4 f7b5 105 d 0 c 8 228 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 560 - ^ = -STACK WIN 4 f7c2 f7 0 0 c c 228 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 560 - ^ = -STACK WIN 4 1c858 6a 3 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1c85b 66 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 331f9 23 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1c8a6 35 7 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1c8ac 27 1 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1c8ad 25 0 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5b2cb 85 1b 0 8 0 34 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5b315 2f 0 0 8 4 34 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1e361 460 b 0 4 0 44 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1e36a 453 2 0 4 4 44 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 76 - ^ = -STACK WIN 4 1e36b 451 1 0 4 8 44 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 76 - ^ = -STACK WIN 4 1e36c 44f 0 0 4 c 44 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 76 - ^ = -STACK WIN 4 1e6e1 119 d 0 4 0 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1e6ed 109 1 0 4 4 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 1e6ee 107 0 0 4 8 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 1e708 8c 0 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 35889 29 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1e891 362 7 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1e8a8 100 0 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1e8b6 f1 0 0 8 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1f18a 112 10 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1f193 105 7 0 14 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1f19a fd 0 0 14 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5b355 db 5 0 1c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5b36b c1 0 0 1c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5b36c bf 0 0 1c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3331f 98 a 0 0 0 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 33328 8d 1 0 0 4 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 33329 8b 0 0 0 8 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 f460 3a2 12 0 28 0 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 f46c 392 6 0 28 4 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 f46d 390 5 0 28 8 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 f472 38a 0 0 28 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 f928 18 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 f851 47 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1c8db 3b1 28 0 14 0 84 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1c8fb 388 8 0 14 4 84 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 140 - ^ = -STACK WIN 4 1c8fc 386 7 0 14 8 84 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 140 - ^ = -STACK WIN 4 1c903 37e 0 0 14 c 84 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 140 - ^ = -STACK WIN 4 5b435 158 1f 0 4 0 21c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5b446 44 e 0 4 4 21c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 548 - ^ = -STACK WIN 4 5b44a 3f a 0 4 8 21c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 548 - ^ = -STACK WIN 4 5b454 34 0 0 4 c 21c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 548 - ^ = -STACK WIN 4 1b42d 157 1f 0 8 0 21c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1b43e 46 e 0 8 4 21c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 548 - ^ = -STACK WIN 4 1b442 41 a 0 8 8 21c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 548 - ^ = -STACK WIN 4 1b44c 36 0 0 8 c 21c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 548 - ^ = -STACK WIN 4 1cac2 217 1e 0 10 0 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1cad0 200 10 0 10 4 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 64 - ^ = -STACK WIN 4 1cad4 1fb c 0 10 8 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 64 - ^ = -STACK WIN 4 1cae0 1ee 0 0 10 c 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 64 - ^ = -STACK WIN 4 5b592 185 1f 0 8 0 220 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5b5a3 5e e 0 8 4 220 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 552 - ^ = -STACK WIN 4 5b5a7 59 a 0 8 8 220 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 552 - ^ = -STACK WIN 4 5b5b1 4e 0 0 8 c 220 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 552 - ^ = -STACK WIN 4 2bb93 14d 1e 0 10 0 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2bba1 136 10 0 10 4 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 48 - ^ = -STACK WIN 4 2bba5 131 c 0 10 8 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 48 - ^ = -STACK WIN 4 2bbb1 124 0 0 10 c 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 48 - ^ = -STACK WIN 4 32dd3 40 6 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 32dd9 36 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1e793 fa e 0 4 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1e79c ed 5 0 4 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 1e79d eb 4 0 4 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 1e7a1 e6 0 0 4 c c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 1e9c5 fa e 0 4 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1e9ce ed 5 0 4 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 1e9cf eb 4 0 4 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 1e9d3 e6 0 0 4 c c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 5b71c 107 10 0 10 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5b72b f4 1 0 10 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5b72c f1 0 0 10 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2dc81 13a 16 0 8 0 218 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2dc92 120 5 0 8 4 218 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 544 - ^ = -STACK WIN 4 2dc96 11b 1 0 8 8 218 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 544 - ^ = -STACK WIN 4 2dc97 119 0 0 8 c 218 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 544 - ^ = -STACK WIN 4 2dc43 3de c 0 8 8 5c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3bde2 e 0 0 8 8 5c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 358ed 48 6 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 358f3 3e 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1ea7d 155 6 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1ea83 14b 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1ecd2 12f 6 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1ecd8 125 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1ecea 112 0 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5b828 24f b 0 4 0 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5b831 242 2 0 4 4 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 5b832 240 1 0 4 8 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 5b833 23e 0 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 1f021 325 e 0 8 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1f02a 318 5 0 8 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 1f02b 316 4 0 8 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 1f02f 311 0 0 8 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 1c7f4 af c 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1c7fa a5 6 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1c800 9e 0 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1e291 166 c 0 4 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3c06f 15 0 0 4 8 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 f331 225 26 0 20 0 cc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 f34c 201 b 0 20 4 cc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 212 - ^ = -STACK WIN 4 f34d 1ff a 0 20 8 cc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 212 - ^ = -STACK WIN 4 f357 1f4 0 0 20 c cc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 212 - ^ = -STACK WIN 4 32b56 f5 f 0 18 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 32b5c eb 9 0 18 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 32b60 e6 5 0 18 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 32b65 e0 0 0 18 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 35d54 4b 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 35f21 7d b 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 35f27 73 5 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 35f28 71 4 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 35f2c 6c 0 0 10 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 5ba7c 42 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 f95d d2 d 0 18 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 f963 c8 7 0 18 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 f969 c1 1 0 18 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 f96a bd 0 0 18 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 1ee4c 4b 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1edbd 81 b 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1edc3 77 5 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 1edc4 75 4 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 1edc8 70 0 0 10 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 5bac3 42 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 32da7 1c 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5bb0a 1c 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5bb2b 164 37 0 14 0 11c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5bb62 124 0 0 14 4 11c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 292 - ^ = -STACK WIN 4 5bb76 10c 0 0 14 8 11c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 292 - ^ = -STACK WIN 4 5bb77 10a 0 0 14 c 11c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 292 - ^ = -STACK WIN 4 5bc95 185 2d 0 14 0 220 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5bcb5 15c d 0 14 4 220 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 552 - ^ = -STACK WIN 4 5bcc2 14e 0 0 14 8 220 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 552 - ^ = -STACK WIN 4 5bcef 11d 0 0 14 c 220 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 552 - ^ = -STACK WIN 4 5be23 13d 18 0 14 0 118 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5be3a 11d 1 0 14 4 118 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5be3b 11b 0 0 14 8 118 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5bf65 14f 18 0 14 0 218 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5bf7c 12f 1 0 14 4 218 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5bf7d 12d 0 0 14 8 218 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 21495 1f 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5c0b9 19 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5c0d7 19 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5c0f5 16 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 213f8 1f 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 332b1 19 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5c110 19 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5c12e 16 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 36434 83 2f 0 10 0 108 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 32730 ce 2f 0 10 0 218 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3277e 67 0 0 10 4 218 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 364a9 19 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2f89a 19 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 21f1e 2b9 39 0 c 0 f4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 21f3c 292 1b 0 c 4 f4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 252 - ^ = -STACK WIN 4 21f50 27d 7 0 c 8 f4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 252 - ^ = -STACK WIN 4 21f57 275 0 0 c c f4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 252 - ^ = -STACK WIN 4 5c149 100 c 0 8 8 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5c223 1e 0 0 8 8 38 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5c269 57 d 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5c26f 4d 7 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 5c275 46 1 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 5c276 44 0 0 10 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 21d8d 5b9 f 0 c 8 98 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3c77a 2c 0 0 c 8 98 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5c2c5 a2 11 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5c2ce 95 8 0 c 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 5c2cf 93 7 0 c 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 5c2d6 8b 0 0 c c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 5c36c fb d 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5c379 ea 0 0 c 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5c3ce 93 0 0 c 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 31385 8e 9 0 10 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3138e 81 0 0 10 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 126f2 30 6 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 126f8 26 0 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 a71d 74 8 0 14 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 315c4 67 6 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 315ca 5d 0 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 ac4d 37 6 0 0 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 ac0f 3e 7 0 4 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 ac16 33 0 0 4 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 ef3a 1bb c 0 8 8 3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 f049 e 0 0 8 8 3c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 edd7 db c 0 4 8 34 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3c85e e 0 0 4 8 34 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5c46c 3a 9 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5c475 2d 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 34bef ec 9 0 c 0 34 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 34bf8 df 0 0 c 4 34 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 34c1f ac 0 0 c 8 34 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 32113 3a 6 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 32119 30 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3162f 107 15 0 20 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 31638 fa c 0 20 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 31639 f8 b 0 20 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 31644 ec 0 0 20 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 ee81 6d 7 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 ee87 63 1 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 ee88 5f 0 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 34eb1 10a 12 0 8 0 268 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 34ec2 f0 1 0 8 4 268 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 624 - ^ = -STACK WIN 4 34ec3 ee 0 0 8 8 268 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 624 - ^ = -STACK WIN 4 34eea c0 0 0 8 c 268 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 624 - ^ = -STACK WIN 4 ea7d 4d7 1d 0 18 0 2cc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 ea92 4b9 8 0 18 4 2cc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 724 - ^ = -STACK WIN 4 ea99 4b1 1 0 18 8 2cc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 724 - ^ = -STACK WIN 4 ea9a 4af 0 0 18 c 2cc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 724 - ^ = -STACK WIN 4 5c4ab 62 8 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5c4b3 56 0 0 c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 137d9 139 18 0 8 0 26c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 137ea 11f 7 0 8 4 26c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 137f1 117 0 0 8 8 26c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 eee1 1a 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5c512 137 1c 0 18 0 268 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5c523 11d b 0 18 4 268 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 624 - ^ = -STACK WIN 4 5c524 11b a 0 18 8 268 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 624 - ^ = -STACK WIN 4 5c52e 110 0 0 18 c 268 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 624 - ^ = -STACK WIN 4 180e 1cd c 0 14 8 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 18ef e 0 0 14 8 30 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1921 4 0 0 14 8 30 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 10d87 140 c 0 14 8 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3cac5 4 0 0 14 8 28 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 32044 98 9 0 4 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3204d 8b 0 0 4 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3207f 4f 0 0 4 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 10b8e 122 8 0 10 0 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 10bae ef 0 0 10 4 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 10baf ed 0 0 10 8 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 21057 e3 9 0 14 0 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 21060 d6 0 0 14 4 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 10c6d 11d 22 0 8 0 c0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 10c7e 103 11 0 8 4 c0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 200 - ^ = -STACK WIN 4 10c8f f1 0 0 8 8 c0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 200 - ^ = -STACK WIN 4 10c99 d6 0 0 8 c c0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 200 - ^ = -STACK WIN 4 31c45 7c 8 0 10 0 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 31cb8 88 8 0 10 0 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 31cd2 10 0 0 10 4 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 12641 6d 7 0 4 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 32361 8a 8 0 14 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3237e 5f 0 0 14 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2f569 aa 8 0 18 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2f5ad 41 0 0 18 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 322fb 6f 8 0 14 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 10a09 40 8 0 8 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5c64e 96 c 0 c 8 34 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5c6de b 0 0 c 8 34 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2bd84 33 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2bd8a 29 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2bcfb 9b 13 0 14 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2bd0d 85 1 0 14 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 2bd0e 83 0 0 14 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 5c701 9b 13 0 14 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5c713 85 1 0 14 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 5c714 83 0 0 14 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 300da 29 7 0 4 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2de51 9c c 0 14 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2dda5 99 c 0 14 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5c7a1 51 7 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5c7f7 c8 7 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5c82d 8d 0 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5c82e 8b 0 0 8 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5c8c4 20 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 10e51 de 9 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 10e5a d1 0 0 4 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 322bc 67 12 0 14 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 322ce 51 0 0 14 4 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 10a77 3d 7 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 bada c8 9 0 c 0 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 bae3 bb 0 0 c 4 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 bb47 3c 0 0 c 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 b896 86 7 0 18 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 35971 44 8 0 8 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 b974 50 d 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 b97a 46 7 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 b981 3e 0 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 938e 153 d 0 18 0 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 939a 143 1 0 18 4 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 56 - ^ = -STACK WIN 4 939b 141 0 0 18 8 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 56 - ^ = -STACK WIN 4 9402 1d 0 0 18 c 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 56 - ^ = -STACK WIN 4 bb76 6f c 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 bb82 5f 0 0 c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 b905 1f 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 945c 73 8 0 18 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 9464 67 0 0 18 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 110f5 f3 e 0 c 0 64 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 11102 e2 1 0 c 4 64 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 11103 e0 0 0 c 8 64 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 31f31 25a 9 0 4 0 4c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 31f3a 11e 0 0 4 4 4c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 84 - ^ = -STACK WIN 4 31f73 d3 0 0 4 8 4c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 84 - ^ = -STACK WIN 4 31f7a cb 0 0 4 c 4c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 84 - ^ = -STACK WIN 4 5c8e9 61 11 0 34 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5c8ef 57 b 0 34 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 5c8f3 52 7 0 34 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 5c8fa 4a 0 0 34 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 5c94f 258 17 0 10 8 1b8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5cbad 1 0 0 10 8 1b8 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5cbc1 2a4 22 0 10 0 c0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5cbd2 28a 11 0 10 4 c0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 200 - ^ = -STACK WIN 4 5cbd6 285 d 0 10 8 c0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 200 - ^ = -STACK WIN 4 5cbe3 277 0 0 10 c c0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 200 - ^ = -STACK WIN 4 5cf6b 163 c 0 20 8 40 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5d0d4 1 0 0 20 8 40 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5d0e9 267 f 0 c 8 d8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5d2ff 39 0 0 c 8 d8 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5d371 123 11 0 8 0 50 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5d382 109 0 0 8 4 50 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5d3bb cb 0 0 8 8 50 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 314d5 151 9 0 8 0 64 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 314de d0 0 0 8 4 64 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 108 - ^ = -STACK WIN 4 31513 89 0 0 8 8 64 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 108 - ^ = -STACK WIN 4 3151a 81 0 0 8 c 64 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 108 - ^ = -STACK WIN 4 b74c ba 9 0 4 0 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 b755 ad 0 0 4 4 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 b77c 79 0 0 4 8 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 137b1 23 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 31eab 1d 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1f72e 537 f 0 14 8 ac 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1f951 3c 0 0 14 8 ac 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5d499 25 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 12782 20 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1153c 22 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 35eae 72 8 0 14 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 35ee1 2d 0 0 14 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 35ee2 2b 0 0 14 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 21261 1a 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3565b 1b 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 35e8f 1a 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5d4c3 1b 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 21950 36 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5d4e3 33 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 10978 109 c 0 8 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3d377 4 0 0 8 8 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5d539 44d f 0 20 8 b0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5d93e 4d 0 0 20 8 b0 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 284bd 53 8 0 14 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 284c5 33 0 0 14 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5d9a1 3a 6 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5d9a7 30 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5d9b9 14 0 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2879d 55 d 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 287aa 44 0 0 8 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5d9e0 4b 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5da30 85 17 0 0 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5da4a 5c 0 0 0 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 10760 424 8 0 1c 0 58 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 10788 3c2 0 0 1c 4 58 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1078c 3bd 0 0 1c 8 58 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3719a 9f 10 0 20 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 371a5 7a 5 0 20 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 371a6 78 4 0 20 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 371aa 73 0 0 20 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 5dadd 73 8 0 8 0 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5db0a 42 0 0 8 4 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5db13 23 0 0 8 8 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5db55 bc a 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5db5d b0 2 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 5db5e ae 1 0 8 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 5db5f ac 0 0 8 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 5dc16 23e c 0 24 8 60 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5de3f 1a 0 0 24 8 60 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5de71 198 c 0 1c 8 3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e00f 1 0 0 1c 8 3c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 285c6 2c4 c 0 38 8 8c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3d7a4 10 0 0 38 8 8c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1a24 34 5 0 1c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 21982 446 17 0 c 8 114 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3d9cf 10 0 0 c 8 114 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e021 292 9 0 28 0 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e02a 266 0 0 28 4 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e089 1f5 0 0 28 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 27bdb 1c8d 17 0 38 8 6bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3e895 11 0 0 38 8 6bc 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3eadf ab 0 0 38 8 6bc 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 36c3c f7e 17 0 18 8 3fc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3f743 134 0 0 18 8 3fc 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 27613 d49 17 0 24 8 3c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3ffbd 3e 0 0 24 8 3c4 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 27b32 6d c 0 18 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 27b99 1d 0 0 18 8 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2005f 89 c 0 18 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 200d1 1d 0 0 18 8 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e307 b8 a 0 18 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e310 ab 1 0 18 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 5e311 a9 0 0 18 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 5e34f 5f 0 0 18 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 286ee 57 8 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 286f6 4b 0 0 c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2f873 22 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e3c4 54 8 0 18 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e3cc 48 0 0 18 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e41d 8a 1a 0 10 0 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e433 6b 4 0 10 4 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 48 - ^ = -STACK WIN 4 5e437 66 0 0 10 8 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 48 - ^ = -STACK WIN 4 5e446 25 0 0 10 c 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 48 - ^ = -STACK WIN 4 5e4ac 83 1a 0 10 0 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e4c2 64 4 0 10 4 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 44 - ^ = -STACK WIN 4 5e4c6 5f 0 0 10 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 44 - ^ = -STACK WIN 4 5e4d5 25 0 0 10 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 44 - ^ = -STACK WIN 4 5e534 8e 10 0 10 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e53d 81 7 0 10 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e544 79 0 0 10 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e5c7 8e 10 0 10 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e5d0 81 7 0 10 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e5d7 79 0 0 10 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e65a 11 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 fd2d 17d c 0 8 8 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 40019 e 0 0 8 8 2c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 123b9 319 c 0 c 8 34 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 401f7 e 0 0 c 8 34 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 ff19 d2 c 0 4 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 40258 e 0 0 4 8 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 34cb9 8b c 0 4 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 4029c e 0 0 4 8 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 fe82 b1 c 0 4 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 402de e 0 0 4 8 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 34da1 f6 c 0 4 8 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 40327 e 0 0 4 8 2c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 36772 e9 c 0 4 8 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 403bd e 0 0 4 8 2c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 fc2f 11b c 0 4 8 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 40414 e 0 0 4 8 28 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 4043c e 0 0 4 8 28 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e670 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5e686 15 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e6a0 15 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e6ba b 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e6ca b 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 310f2 1c6 e 0 4 0 18c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 310fe 1b6 2 0 4 4 18c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 404 - ^ = -STACK WIN 4 310ff 1b4 1 0 4 8 18c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 404 - ^ = -STACK WIN 4 31100 1b2 0 0 4 c 18c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 404 - ^ = -STACK WIN 4 9a72 7d c 0 14 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 404b7 e 0 0 14 8 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 9b02 82 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 9b18 5e 0 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 9b1f 56 0 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1a5d 6e d 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1a63 64 7 0 14 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1a6a 5c 0 0 14 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 b9a0 32 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2b13f 33 9 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2b148 26 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e6da 33 9 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e6e3 26 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 355bc 2b 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 355c2 21 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e712 29 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e740 29 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e76e 29 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e79c 29 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1f992 16f c 0 4 0 184 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1f99e 15f 0 0 4 4 184 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1f9ac 141 0 0 4 8 184 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e7ca 34 5 0 18 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e803 28 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 9a51 1c 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 9ae4 19 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1ad0 1c 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 b9d1 19 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2e18c aa 7 0 c 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2e193 9f 0 0 c 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2bdb5 8b 6 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1d07e 8 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 365f6 b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3594f 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 17443 11 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 934b d6 e 0 0 0 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 9359 c6 0 0 0 4 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 177c7 96 0 0 0 8 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 b5c3 409 19 0 c 0 420 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 b5d7 3ec 5 0 c 4 420 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1064 - ^ = -STACK WIN 4 b5d8 3ea 4 0 c 8 420 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1064 - ^ = -STACK WIN 4 b5dc 3e5 0 0 c c 420 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1064 - ^ = -STACK WIN 4 5e830 4d 6 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e836 43 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 365a5 2e 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 353ce 29 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 38ae7 3d 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 34e64 18 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 35406 36 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 30d74 8b b 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 30d7a 81 5 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 30d7e 7c 1 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 30d7f 7a 0 0 8 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 baa1 6c a 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 baa7 62 4 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 baab 5d 0 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 be01 3e c 0 8 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 407a9 4 0 0 8 8 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 10111 65 c 0 c 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 407c5 4 0 0 c 8 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 34d41 5a c 0 8 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 407e1 4 0 0 8 8 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 bdb6 3e c 0 4 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 407fd 4 0 0 4 8 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 b9ef 6c c 0 c 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 40817 4 0 0 c 8 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 10f32 39 c 0 8 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 40833 4 0 0 8 8 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 9a09 3b c 0 4 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 4084f 4 0 0 4 8 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 325bc f6 c 0 4 8 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 40892 e 0 0 4 8 2c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e882 11 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 12bb6 69 1d 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 12bd3 48 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 10ef8 22 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e898 2c 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e8c9 c 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e8da c 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e8eb 57 9 0 c 0 40 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e8f4 4a 0 0 c 4 40 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e947 6f 6 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e94d 65 0 0 14 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e976 b 0 0 14 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e9bb 1b 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 abc1 d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5e9db c 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3611e c 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5e9ec 15 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5ea06 15 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5ea20 100 9 0 8 0 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5ea29 f3 0 0 8 4 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5ea9d 74 0 0 8 8 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 39469 2b 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5eb25 2e 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5eb58 97 8 0 14 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5eba8 43 0 0 14 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2cdd8 5b 8 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2ccdc 122 8 0 10 0 44 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2cd12 dd 0 0 10 4 44 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2cd13 db 0 0 10 8 44 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2cc8b 66 8 0 10 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2cc93 5a 0 0 10 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 34932 a4 f 0 c 0 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3493b 97 6 0 c 4 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 34941 90 0 0 c 8 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 34976 5d 0 0 c c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 5ebf4 55 a 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5ebfd 48 1 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5ebfe 46 0 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5ec4e 1e 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 34b69 1a 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5ec71 3a 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 349d8 29d c 0 20 8 64 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 40a26 16 0 0 20 8 64 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2f7a0 191 c 0 1c 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2f7ac 181 0 0 1c 4 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 2f7b9 12c 0 0 1c 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 2f7ca 118 0 0 1c c 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 34b8f 25 5 0 1c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 abde 58 d 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 abe4 4e 7 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 abeb 46 0 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 c170 29 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 11296 24 6 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1129c 1a 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5ecb0 91 8 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5ecfc 41 0 0 4 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5ed46 8c 8 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5ed8d 41 0 0 4 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5edd7 6a 7 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5eddd 60 1 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 5edde 5e 0 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 5ee15 1d 0 0 8 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 e477 a3 c 0 4 8 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 40b63 e 0 0 4 8 2c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1fcff 64 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 e4b9 26a 17 0 10 8 46c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 40c62 17 0 0 10 8 46c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 111da 31 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ae65 4a c 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 ae6b 21 6 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 ae71 1a 0 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1fb26 52 14 0 10 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5ee46 98 16 0 10 0 120 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 9f81 31 7 0 4 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5eee3 8 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5eef0 3b 5 0 1c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 14c3c 1d2 1f 0 c 0 238 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 14c50 1b5 b 0 c 4 238 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 576 - ^ = -STACK WIN 4 14c5a 1aa 1 0 c 8 238 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 576 - ^ = -STACK WIN 4 14c5b 1a8 0 0 c c 238 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 576 - ^ = -STACK WIN 4 1af1 1fe c 0 c 8 44 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1c8c e 0 0 c 8 44 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5ef47 9a e 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5ef53 8a 2 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 5ef54 88 1 0 8 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 5ef55 86 0 0 8 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 b3d5 146 c 0 c 8 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 40cf3 e 0 0 c 8 38 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 40d2a e 0 0 c 8 38 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 b4cf cc 9 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 b4d8 bf 0 0 c 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 b503 86 0 0 c 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 e43d 34 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5efe6 51 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5efec 47 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1fcc1 39 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1fcc7 2f 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 ada0 76 9 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 ada8 6a 1 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 ada9 68 0 0 8 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 12ade 106 1a 0 4 0 130 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 12aef 27 9 0 4 4 130 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 12af8 1d 0 0 4 8 130 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 be89 b2 c 0 c 8 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 40d78 e 0 0 c 8 30 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 35f78 b6 c 0 10 8 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 40da4 e 0 0 10 8 30 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 9fb5 5f c 0 8 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 40dd0 e 0 0 8 8 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 bc69 5f c 0 8 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 40e00 e 0 0 8 8 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5f03c 1ce c 0 c 8 50 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5f1bf e 0 0 c 8 50 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5f229 203 c 0 10 8 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5f3e0 e 0 0 10 8 54 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2e000 136 c 0 14 8 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 40e66 e 0 0 14 8 38 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 ac88 b6 c 0 10 8 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 40e92 e 0 0 10 8 30 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5f449 1cb c 0 c 8 4c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5f5c9 e 0 0 c 8 4c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5f631 130 c 0 14 8 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5f72a e 0 0 14 8 38 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 ae4b 15 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1d4f 23 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 b6a1 31 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1d77 9a b 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1d81 8c 1 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 1d82 8a 0 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 1dcf 3c 0 0 4 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 3145b 88 d 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 31463 7c 5 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 31464 7a 4 0 8 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 31468 75 0 0 8 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 1269f 52 8 0 4 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 126a7 46 0 0 4 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5f781 db c 0 c 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5f78d cb 0 0 c 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5f7e8 64 0 0 c 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 313ec d5 e 0 10 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 313fa c3 0 0 10 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 31439 78 0 0 10 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5f88a 80 8 0 14 0 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5f90f 13f c 0 18 8 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5f9fa 4 0 0 18 8 28 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5fa2d 1e 0 0 18 8 28 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 312e5 119 c 0 1c 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 40faa 4 0 0 1c 8 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 40fe6 4 0 0 1c 8 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2c664 30b 8 0 8 0 50 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2c686 2db 0 0 8 4 50 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2c6b1 2ad 0 0 8 8 50 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2f0d4 295 12 0 20 0 5c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2f0e0 285 6 0 20 4 5c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 100 - ^ = -STACK WIN 4 2f0e5 27f 1 0 20 8 5c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 100 - ^ = -STACK WIN 4 2f0e6 27d 0 0 20 c 5c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 100 - ^ = -STACK WIN 4 5fa85 f5 11 0 1c 0 40 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5fa8e e8 8 0 1c 4 40 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 72 - ^ = -STACK WIN 4 5fa8f e6 7 0 1c 8 40 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 72 - ^ = -STACK WIN 4 5fa96 de 0 0 1c c 40 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 72 - ^ = -STACK WIN 4 5fb7f a1 c 0 1c 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5fc02 9 0 0 1c 8 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5fc39 36 7 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5fc51 1a 0 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5fc74 72 8 0 20 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5fc7c 66 0 0 20 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5fceb de b 0 1c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5fcf4 d1 2 0 1c 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 5fcf5 cf 1 0 1c 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 5fcf6 cd 0 0 1c c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 5fdce 6e 8 0 1c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5fdd6 62 0 0 1c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5fe41 46 8 0 4 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5fe8c 88 b 0 8 0 8c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5fed6 2f 0 0 8 4 8c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5ff19 60 b 0 8 0 8c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5ff7e 41 9 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5ff87 25 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5ffc4 41 9 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 5ffcd 25 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6000a 60 b 0 8 0 8c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6006f 5e 9 0 4 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6007b 4e 0 0 4 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6008a 3d 0 0 4 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 600d2 2f8 c 0 10 0 34 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 600db 2eb 3 0 10 4 34 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 60 - ^ = -STACK WIN 4 600de 2e7 0 0 10 8 34 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 60 - ^ = -STACK WIN 4 6013a 28a 0 0 10 c 34 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 60 - ^ = -STACK WIN 4 f182 110 1b 0 8 0 654 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 f193 f6 a 0 8 4 654 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 f19d eb 0 0 8 8 654 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 31db9 55 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 31ddd 2a 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 ad29 4d 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 ad46 2a 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 ad7b 24 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 b2d0 3aa 18 0 4 0 480 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 b2e1 37f 7 0 4 4 480 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1160 - ^ = -STACK WIN 4 b2e7 378 1 0 4 8 480 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1160 - ^ = -STACK WIN 4 b2e8 376 0 0 4 c 480 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1160 - ^ = -STACK WIN 4 112d5 1d5 c 0 c 8 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 11419 21 0 0 c 8 38 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 359b7 29d 26 0 10 0 ec 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 359cf 27c e 0 10 4 ec 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 244 - ^ = -STACK WIN 4 359dc 26e 1 0 10 8 ec 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 244 - ^ = -STACK WIN 4 359dd 26c 0 0 10 c ec 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 244 - ^ = -STACK WIN 4 301af 196 c 0 14 0 44 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 301bb 186 0 0 14 4 44 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 76 - ^ = -STACK WIN 4 301e5 152 0 0 14 8 44 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 76 - ^ = -STACK WIN 4 12803 1c9 c 0 10 0 4c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1280f 1b9 0 0 10 4 4c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 84 - ^ = -STACK WIN 4 12839 185 0 0 10 8 4c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 84 - ^ = -STACK WIN 4 1283d 180 0 0 10 c 4c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 84 - ^ = -STACK WIN 4 f9e5 37d c 0 20 8 6c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 4171b 4 0 0 20 8 6c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 41748 48 0 0 20 8 6c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2c2d3 8f e 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2c2dc 7a 5 0 8 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 2c2dd 78 4 0 8 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 2c2e1 73 0 0 8 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 603cf bc 1c 0 8 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 603e3 91 8 0 8 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 603ea 89 1 0 8 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 603eb 87 0 0 8 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 60499 35e 17 0 8 8 274 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 607cb 30 0 0 8 8 274 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 60811 e9 1c 0 14 0 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 60822 cf b 0 14 4 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 52 - ^ = -STACK WIN 4 60826 ca 7 0 14 8 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 52 - ^ = -STACK WIN 4 6082d c2 0 0 14 c 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 52 - ^ = -STACK WIN 4 14eea 6e 8 0 8 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 212f1 6e 8 0 8 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 21363 24 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 214e3 2b 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 217ea 213 a 0 18 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 217f3 206 1 0 18 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 217f4 204 0 0 18 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 30789 16 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 608ff e9 9 0 10 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 60908 dc 0 0 10 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 302ed 36 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3039b 33 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 21ba5 1d5 c 0 20 8 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 418d1 3f 0 0 20 8 54 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 609ed 5f 7 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 60a02 46 0 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 60a51 55 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 35dca 172 11 0 8 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 35dd6 162 5 0 8 4 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 35ddb 15c 0 0 8 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 35e0c 11d 0 0 8 c 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 a427 40 7 0 4 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2fa46 42 8 0 4 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2fa4e 36 0 0 4 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1e0c7 19e 31 0 10 0 148 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1e0df 17d 19 0 10 4 148 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 336 - ^ = -STACK WIN 4 1e0e9 172 f 0 10 8 148 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 336 - ^ = -STACK WIN 4 1e0f8 162 0 0 10 c 148 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 336 - ^ = -STACK WIN 4 35340 bd f 0 4 0 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3534e a6 1 0 4 4 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 44 - ^ = -STACK WIN 4 3534f a4 0 0 4 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 44 - ^ = -STACK WIN 4 35370 e 0 0 4 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 44 - ^ = -STACK WIN 4 60aab 44 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 392b5 27 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 60af4 23 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 60b1c 3f 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 60b60 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 60b6f 23 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 60b97 23 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 60bbf f 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2f3a4 86 8 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2f3aa 7c 2 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 2f3ab 7a 1 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 2f3ac 78 0 0 4 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 1a1cf 35 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1500c 90 e 0 0 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1501a 7b 0 0 0 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1ac85 28 0 0 0 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1930f 29e 1a 0 1c 0 248 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 19376 228 0 0 1c 4 248 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 19377 226 0 0 1c 8 248 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 16f8e 11 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2dfa0 41 6 0 c 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 60bd3 95 7 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 60bd9 8b 1 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 60bda 87 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 309e1 5f 12 0 c 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 309f3 3a 0 0 c 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1cd34 82 17 0 4 8 e0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 41b32 7 0 0 4 8 e0 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1e16 35 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1ae17 4a 9 0 8 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1ae20 3d 0 0 8 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1e50 97 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1eee 2bc c 0 4 8 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 21af 7 0 0 4 8 28 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 12f1d 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 16f83 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1df77 23 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 12f08 10 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1cf5b b6 9 0 0 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1cf64 ab 0 0 0 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 14af2 1d1 9 0 c 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 14afb 1c4 0 0 c 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 14b23 192 0 0 c 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 14b42 177 0 0 c c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 33478 b4 10 0 8 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 33481 a7 7 0 8 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 33488 9f 0 0 8 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 f0f4 a5 11 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 f105 90 0 0 c 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 f132 59 0 0 c 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 101be 59 9 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 101c7 4c 0 0 8 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 329d9 159 15 0 c 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 329e2 14c c 0 c 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 329e3 14a b 0 c 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 329ee 13e 0 0 c c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 305f6 6d 9 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 305ff 48 0 0 c 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 9920 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 60c75 30 8 0 4 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 21cc 3c 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 220f 10c 16 0 14 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 221a fd b 0 14 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 221e f8 7 0 14 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 2225 f0 0 0 14 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 60caa 49 8 0 8 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 60cf8 49 8 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 60d00 3d 0 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 60d46 e 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 ae2a 1c 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 60d58 aa 9 0 10 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 60d61 9d 0 0 10 4 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 60dbf 29 0 0 10 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 60e13 61 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 9e01 6f c 0 8 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 41c56 4 0 0 8 8 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3593f b 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 9e79 73 c 0 8 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 41c70 4 0 0 8 8 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 bf9d b 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 bccf 13 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 32259 57 c 0 8 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 41c8a 4 0 0 8 8 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 a5dc 5d c 0 8 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 41ca4 4 0 0 8 8 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2c8ed 62 13 0 8 0 c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 60e79 6a 15 0 8 0 c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 60e8a 50 4 0 8 4 c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 60e8e 4b 0 0 8 8 c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 60ee8 35 6 0 4 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 60f22 141 19 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 60f36 129 5 0 c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 60f37 127 4 0 c 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 60f3b 122 0 0 c c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 352d9 68 8 0 14 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 21765 48 8 0 c 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 61068 43 9 0 c 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 61071 36 0 0 c 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 303d0 72 f 0 c 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 303de 60 1 0 c 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 303df 5c 0 0 c 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 303e9 30 0 0 c c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 12c23 13f c 0 4 8 60 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 41dcc 10 0 0 4 8 60 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 610b0 2b 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 610e0 36 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6111b 35 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 61155 2c 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 61186 35 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 611c0 45 8 0 8 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6120a 12b 9 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 61212 11f 1 0 c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 61213 11d 0 0 c 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 15199 40 6 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1519f 36 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 194dd 314 b 0 4 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 194e6 307 2 0 4 4 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 194e7 305 1 0 4 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 194e8 303 0 0 4 c 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 19805 8b9 26 0 18 0 1d8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1981c 899 f 0 18 4 1d8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 480 - ^ = -STACK WIN 4 1981d 897 e 0 18 8 1d8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 480 - ^ = -STACK WIN 4 1982b 888 0 0 18 c 1d8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 480 - ^ = -STACK WIN 4 19513 218e 17 0 30 8 a18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 43025 4 0 0 30 8 a18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1e017 2eb 0 0 30 8 a18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2332 30 5 0 28 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 12cb0 e7 a 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 12cb6 dd 4 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 12cba d8 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 12d56 44 9 0 4 0 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 12d5f 37 0 0 4 4 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 37945 44 9 0 4 0 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3794e 37 0 0 4 4 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2c338 91 c 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2c341 84 3 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 2c344 80 0 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 2c373 33 0 0 8 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 61351 17 5 0 18 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1ddd6 33f f 0 30 8 a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 43374 14 0 0 30 8 a8 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 434b2 17 0 0 30 8 a8 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 434e5 60 0 0 30 8 a8 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2367 30 5 0 28 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6136d ec b 0 8 0 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 61376 df 2 0 8 4 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 92 - ^ = -STACK WIN 4 61377 dd 1 0 8 8 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 92 - ^ = -STACK WIN 4 61378 db 0 0 8 c 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 92 - ^ = -STACK WIN 4 6147e 2fa f 0 8 8 b4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 61723 e 0 0 8 8 b4 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3965a 77 c 0 4 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 39666 67 0 0 4 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 395d8 57 c 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 395e4 47 0 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2c1e7 127 c 0 c 8 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 435d2 e 0 0 c 8 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 12f89 ac 9 0 8 0 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 12f92 9f 0 0 8 4 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 44 - ^ = -STACK WIN 4 12fa9 7d 0 0 8 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 44 - ^ = -STACK WIN 4 12faa 7b 0 0 8 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 44 - ^ = -STACK WIN 4 132ee 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 61799 148 c 0 c 8 34 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 617fd e 0 0 c 8 34 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 92ea 6d c 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 92f0 63 6 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 92f6 5c 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2470 32 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 16fb4 4f c 0 4 8 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 436ca 11 0 0 4 8 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 61901 2d 6 0 c 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 e0df 33 6 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 e0e5 29 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 176db 28 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 61933 24 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6195c 24 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 30445 1c1 e 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 30450 1b2 3 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 30453 1ae 0 0 8 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 3047d 17d 0 0 8 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 3053e 73 10 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 30544 69 a 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 30545 67 9 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 3054e 5d 0 0 4 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 e275 3c7 c 0 c 8 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 437f5 10 0 0 c 8 54 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 438be 4a 0 0 c 8 54 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 df9e f2 13 0 8 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 dfac db 5 0 8 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 dfb0 d6 1 0 8 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 dfb1 d4 0 0 8 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 31d8e f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e074 67 8 0 4 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 e07c 5b 0 0 4 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 114f8 5c 7 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1a2ce 6aa 17 0 34 8 2d0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1a834 36 0 0 34 8 2d0 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 9ef1 1d 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 b829 28 6 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 b82f 1e 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 13140 b3 9 0 c 0 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 13149 a6 0 0 c 4 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2c05e 25 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 10086 a7 f 0 10 0 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1008f 9a 6 0 10 4 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 10095 93 0 0 10 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2e30f b3 9 0 c 0 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2e318 a6 0 0 c 4 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 bfad 29 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 e8b7 a4 f 0 c 0 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 e8c0 97 6 0 c 4 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 e8c6 90 0 0 c 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 e995 b3 9 0 c 0 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 e99e a6 0 0 c 4 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 24a7 25 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2540 e6 c 0 c 8 44 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2610 b 0 0 c 8 44 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 36696 e9 c 0 10 8 44 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 36759 b 0 0 10 8 44 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 952a 188 c 0 14 8 74 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 951a b 0 0 14 8 74 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 239c 98 c 0 8 8 3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2432 b 0 0 8 8 3c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2fb52 72 8 0 c 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 61985 72 8 0 c 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 619fc 6b c 0 c 8 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 61a61 b 0 0 c 8 2c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 95f9 93 f 0 18 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 9600 88 8 0 18 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 9604 83 4 0 18 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 9608 7e 0 0 18 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 2cc09 25 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 a6a9 ae b 0 10 0 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 a6b2 a1 2 0 10 4 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 44 - ^ = -STACK WIN 4 a6b3 9f 1 0 10 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 44 - ^ = -STACK WIN 4 a6b4 9d 0 0 10 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 44 - ^ = -STACK WIN 4 1320c 6f c 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 13218 5f 0 0 c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 12e1d 6d 8 0 10 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 12e25 61 0 0 10 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2ca47 6f c 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2ca53 5f 0 0 c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 e93f 6a 8 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 e947 5e 0 0 c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 ea1b 6f c 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 ea27 5f 0 0 c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 a05d 1c 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2442 13 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 61a81 6a 8 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 61a89 5e 0 0 c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 61af0 6f c 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 61afc 5f 0 0 c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 308ad 6d 8 0 10 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 308b5 61 0 0 10 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 33609 19f 16 0 1c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 33614 190 b 0 1c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 33615 18e a 0 1c 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 3361f 183 0 0 1c c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 61b64 39 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 61b6a 2f 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1746c 23 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 17499 ef 15 0 0 0 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 174a6 e0 8 0 0 4 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 52 - ^ = -STACK WIN 4 174a7 de 7 0 0 8 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 52 - ^ = -STACK WIN 4 174ae d6 0 0 0 c 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 52 - ^ = -STACK WIN 4 f1fa 76 18 0 0 0 4c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 17459 10e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 43ee5 e5 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1efce 12 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 61ba2 162 11 0 4 0 d4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 61bb3 148 0 0 4 4 d4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 220 - ^ = -STACK WIN 4 61bec 107 0 0 4 8 d4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 220 - ^ = -STACK WIN 4 61bed 103 0 0 4 c d4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 220 - ^ = -STACK WIN 4 61d3f 2b9 1f 0 c 0 26c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 61d53 29c b 0 c 4 26c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 628 - ^ = -STACK WIN 4 61d5e 290 0 0 c 8 26c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 628 - ^ = -STACK WIN 4 61dee 1c7 0 0 c c 26c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 628 - ^ = -STACK WIN 4 61ffd 408 1a 0 c 0 280 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 62017 3e5 0 0 c 4 280 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 620a4 353 0 0 c 8 280 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6240a 64 9 0 8 0 58 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 62413 3d 0 0 8 4 58 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 62473 42 8 0 4 0 40 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 624ba 2be 27 0 c 0 22c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 624d1 29e 10 0 c 4 22c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 564 - ^ = -STACK WIN 4 624d4 29a d 0 c 8 22c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 564 - ^ = -STACK WIN 4 624e1 28c 0 0 c c 22c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 564 - ^ = -STACK WIN 4 17f41 141 13 0 8 0 228 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 17f52 127 2 0 8 4 228 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 560 - ^ = -STACK WIN 4 17f53 125 1 0 8 8 228 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 560 - ^ = -STACK WIN 4 17f54 123 0 0 8 c 228 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 560 - ^ = -STACK WIN 4 6277d 59 b 0 18 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 62788 4a 0 0 18 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 627db 19f b 0 1c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 627e4 192 2 0 1c 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 627e5 190 1 0 1c 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 627e6 18e 0 0 1c c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 6297f 59 b 0 18 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6298a 4a 0 0 18 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1ebb1 4ac 21 0 4 0 2c8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1ebc2 492 10 0 4 4 2c8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 720 - ^ = -STACK WIN 4 1ebc3 490 f 0 4 8 2c8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 720 - ^ = -STACK WIN 4 1ebd2 480 0 0 4 c 2c8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 720 - ^ = -STACK WIN 4 629dd 4e 9 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 629e6 41 0 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 629f4 30 0 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 629f5 2e 0 0 10 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 12980 8e c 0 c 8 34 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 129f9 b 0 0 c 8 34 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2fc00 5f 12 0 c 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2fc12 3a 0 0 c 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 c108 4b 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 a793 44 8 0 4 0 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 62a30 36 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 62a6b 35 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 c058 9f c 0 4 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 44733 c 0 0 4 8 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1ce03 35 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 21435 38 8 0 8 0 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 9728 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3970d 26 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 62aa5 26 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 39732 28 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 328f7 28 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 12a09 58 16 0 10 0 50 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 12a1f 3e 0 0 10 4 50 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 12a4b 6 0 0 10 8 50 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 62ad0 7a 9 0 8 0 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 62ad9 6d 0 0 8 4 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 62af6 4b 0 0 8 8 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 4479d a2 15 0 4 0 21c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 447ae 88 4 0 4 4 21c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 447b2 81 0 0 4 8 21c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 62b4f a8 c 0 4 8 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 62be6 4 0 0 4 8 54 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 62c19 7e e 0 4 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 62c25 69 2 0 4 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 62c26 67 1 0 4 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 62c27 65 0 0 4 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 12d9f 10b c 0 0 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 448d9 a 0 0 0 8 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 9740 4f 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 9bc5 a7 7 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 9bcb 9d 1 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 9bcc 9b 0 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 136d7 cc c 0 4 8 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 13771 7 0 0 4 8 28 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 62c9c 68 8 0 14 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 62d09 3a 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2fa7a 53 9 0 8 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2fa83 46 0 0 8 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2c0e6 6f c 0 c 8 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2c151 14 0 0 c 8 30 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2c082 71 c 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2c08e 1e 0 0 c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 62d48 2f 6 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 62d4e 25 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2ffcf b8 8 0 14 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2ffe2 97 0 0 14 4 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2fe84 73 7 0 4 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2fe8b 68 0 0 4 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2ff16 6f 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2fed7 40 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 32992 13 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 211cd 86 7 0 18 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 211d3 6d 1 0 18 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 211d4 6b 0 0 18 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2b086 82 7 0 14 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2b08d 68 0 0 14 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2bff8 39 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 30062 42 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 30a62 29 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2c02c 28 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2cba2 8e a 0 0 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2cbaa 6e 2 0 0 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 2cbab 6c 1 0 0 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 2cbac 6a 0 0 0 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 2bfd6 23 6 0 0 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2117d 56 9 0 1c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 21186 49 0 0 1c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 12723 43 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 21130 4d 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 62d7c 42 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2b26e 57 5 0 18 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 62dc3 28 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 62df0 3f 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 62e34 29 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 10637 22 5 0 18 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 c1e0 e 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 62e62 97d 17 0 4 8 684 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 63421 4 0 0 4 8 684 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6362b 4 0 0 4 8 684 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 636d3 4 0 0 4 8 684 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2ffaf 1b 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 63999 a9 b 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 639a2 9c 2 0 8 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 639a3 9a 1 0 8 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 639a4 98 0 0 8 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 63a47 92 a 0 8 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 63a50 85 1 0 8 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 63a51 83 0 0 8 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 63ade 115 c 0 c 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 63ae5 10a 5 0 c 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 63ae6 108 4 0 c 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 63aea 103 0 0 c c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 63bf8 127 d 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 63bfe 11d 7 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 63bff 11b 6 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 63c05 114 0 0 4 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 63d24 3b 6 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 63d2a 31 0 0 14 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 63d3d 1d 0 0 14 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 63d64 b4 b 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 63d6d a7 2 0 8 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 63d6e a5 1 0 8 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 63d6f a3 0 0 8 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 63e1d cd 11 0 8 0 230 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 63e2e b3 0 0 8 4 230 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 63eef 9c a 0 8 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 63ef8 8f 1 0 8 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 63ef9 8d 0 0 8 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 63f90 cd 11 0 8 0 230 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 63fa1 b3 0 0 8 4 230 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 64062 af b 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6406b a2 2 0 8 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 6406c a0 1 0 8 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 6406d 9e 0 0 8 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 64116 94 a 0 8 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6411f 87 1 0 8 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 64120 85 0 0 8 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 641af b4 b 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 641b8 a7 2 0 8 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 641b9 a5 1 0 8 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 641ba a3 0 0 8 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 64268 df 15 0 8 0 42c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 64279 c5 4 0 8 4 42c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6427d c0 0 0 8 8 42c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6434c 9c a 0 8 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 64355 8f 1 0 8 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 64356 8d 0 0 8 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 643ed d6 15 0 8 0 42c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 643fe bc 4 0 8 4 42c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 64402 b7 0 0 8 8 42c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 644c8 195 c 0 14 8 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6452a e 0 0 14 8 2c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 64679 19e e 0 18 0 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 64685 18e 2 0 18 4 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 92 - ^ = -STACK WIN 4 64686 18c 1 0 18 8 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 92 - ^ = -STACK WIN 4 64687 18a 0 0 18 c 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 92 - ^ = -STACK WIN 4 6481c 37 8 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 64858 2c5 9 0 18 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 64861 2b8 0 0 18 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6489e 24c 0 0 18 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 64b47 83 9 0 8 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 64b50 76 0 0 8 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 64bcf a8 20 0 8 0 a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 64be7 87 8 0 8 4 a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 176 - ^ = -STACK WIN 4 64beb 82 4 0 8 8 a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 176 - ^ = -STACK WIN 4 64bef 7d 0 0 8 c a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 176 - ^ = -STACK WIN 4 64c7c 112 17 0 8 0 11c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 64c93 f2 0 0 8 4 11c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 64cf5 8c 0 0 8 8 11c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 64d93 6b d 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 64da0 5a 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 64dc2 37 0 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 64e03 22 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 64e2a 156 11 0 4 0 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 64e38 13f 3 0 4 4 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 64e3b 13b 0 0 4 8 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 64f85 c9 7 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 64f8b bf 1 0 14 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 64f8c bd 0 0 14 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 64fba 8e 0 0 14 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 65053 bc 11 0 c 0 10c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 65064 a2 0 0 c 4 10c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 276 - ^ = -STACK WIN 4 6508f 73 0 0 c 8 10c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 276 - ^ = -STACK WIN 4 65090 71 0 0 c c 10c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 276 - ^ = -STACK WIN 4 65114 92 17 0 c 0 118 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6512b 72 0 0 c 4 118 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 651ab 86 b 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 651b6 77 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 651f5 32 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 65236 209 13 0 c 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 65248 1f3 1 0 c 4 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 65249 1f1 0 0 c 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 652a3 9b 0 0 c c 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 65444 72 6 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6544a 68 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6547f 32 0 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 654bb 72 6 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 654c1 68 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 654f6 32 0 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 65532 45 10 0 18 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6553b 38 7 0 18 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 65542 2e 0 0 18 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6557c 146 a 0 c 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 65585 139 1 0 c 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 65586 137 0 0 c 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 655ad 10f 0 0 c c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 656c7 c2 d 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 656d3 b2 1 0 c 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 656d4 b0 0 0 c 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6578e f7 11 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 65799 c4 6 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 6579e be 1 0 8 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 6579f bc 0 0 8 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 6588a 84 9 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 65892 78 1 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 65893 76 0 0 8 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 658aa 5e 0 0 8 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 65913 84 9 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6591b 78 1 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 6591c 76 0 0 8 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 65933 5e 0 0 8 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 6599c b3 15 0 8 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 659a5 a6 c 0 8 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 659b0 9a 1 0 8 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 659b1 98 0 0 8 c c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 65a54 2a9 d 0 8 0 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 65a5d 29c 4 0 8 4 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 65a61 297 0 0 8 8 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 22128 9e a 0 8 0 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 22131 91 1 0 8 4 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 22132 8f 0 0 8 8 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 65d02 85 9 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 65d0a 79 1 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 65d0b 77 0 0 8 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 65d22 5f 0 0 8 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 65d8c 13 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 65da4 9a 8 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 65dac 8e 0 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 65dc4 74 0 0 8 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 65e43 303 b 0 8 0 48 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 65e4c 2ec 2 0 8 4 48 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 80 - ^ = -STACK WIN 4 65e4d 2ea 1 0 8 8 48 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 80 - ^ = -STACK WIN 4 65e4e 2e8 0 0 8 c 48 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 80 - ^ = -STACK WIN 4 6614b a6 f 0 8 0 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 66159 94 1 0 8 4 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 6615a 92 0 0 8 8 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 6618c 5f 0 0 8 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 661f6 85 9 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 661fe 79 1 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 661ff 77 0 0 8 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 66216 5f 0 0 8 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 66280 d4 10 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6628b c5 5 0 c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 66290 bf 0 0 c 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 66359 6a 5 0 18 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6636c 53 0 0 18 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 66370 4e 0 0 18 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 663c8 2ec f 0 8 8 94 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6665c 1c 0 0 8 8 94 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 66682 b 0 0 8 8 94 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6677d ba c 0 c 8 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 66801 3b 0 0 c 8 30 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 66871 bc c 0 c 8 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 66918 1a 0 0 c 8 30 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 66949 ba c 0 c 8 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 669cd 3b 0 0 c 8 30 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 66a41 bc c 0 c 8 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 66ae8 1a 0 0 c 8 30 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 66b19 ba c 0 c 8 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 66b9d 3b 0 0 c 8 30 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 66c11 c3 c 0 c 8 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 66cbf 1a 0 0 c 8 30 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 66cf1 13 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 66d09 19d b 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 66d12 190 2 0 c 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 66d13 18e 1 0 c 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 66d14 18c 0 0 c c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 66eab 93 a 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 66eb3 87 2 0 c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 66eb4 85 1 0 c 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 66eb5 83 0 0 c c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 66f43 71c 17 0 4 8 ec 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 67093 11 0 0 4 8 ec 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 675f4 11 0 0 4 8 ec 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 67695 7a 13 0 8 0 c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 67714 114 17 0 8 8 e4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 677e9 11 0 0 8 8 e4 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 67849 145 17 0 8 8 e4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 67941 11 0 0 8 8 e4 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2f609 58 13 0 4 0 c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 679a9 53 13 0 4 0 c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 67a01 44 7 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 67a4a df 16 0 10 0 c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 67a5b c5 5 0 10 4 c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 204 - ^ = -STACK WIN 4 67a5c c3 4 0 10 8 c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 204 - ^ = -STACK WIN 4 67a60 be 0 0 10 c c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 204 - ^ = -STACK WIN 4 28b87 ad 21 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 28b95 9b 13 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 28ba8 87 0 0 8 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1ae5e 85 15 0 8 0 cc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1ae6f 6b 4 0 8 4 cc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1ae73 66 0 0 8 8 cc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 67b2e 3d 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 67b70 57 c 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 67b77 4c 5 0 8 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 67b7b 47 1 0 8 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 67b7c 45 0 0 8 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 1143f 60 6 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 11445 56 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1f5a6 197 11 0 8 0 128 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1f5b7 179 0 0 8 4 128 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1f5ca 15f 0 0 8 8 128 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 132f9 54 c 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 13304 45 1 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 13305 43 0 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 67bcc 231 f 0 8 8 9c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 67dd6 2c 0 0 8 8 9c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 67e19 17 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 67e35 17e c 0 14 0 3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 67e3e 171 3 0 14 4 3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 67e41 16d 0 0 14 8 3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1146a 90 a 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 11470 86 4 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 11474 81 0 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6802b 8e 9 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 68034 81 0 0 8 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1f26e 432 17 0 c 8 2b4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1f571 50 0 0 c 8 2b4 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 680be 42e c 0 c 8 50 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 68496 4a 0 0 c 8 50 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 13353 406 17 0 c 8 2ac 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1366c 45 0 0 c 8 2ac 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 28c38 1099 17 0 24 8 2e4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 29b93 127 0 0 24 8 2e4 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 68509 78 6 0 24 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6850f 6c 0 0 24 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 68538 3b 0 0 24 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 35bb0 1fe 17 0 c 8 254 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 44db3 55 0 0 c 8 254 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 68586 1fe 17 0 c 8 254 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 68734 55 0 0 c 8 254 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 687a1 2ab 1c 0 14 0 118 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 687bd 286 0 0 14 4 118 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 288 - ^ = -STACK WIN 4 68828 217 0 0 14 8 118 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 288 - ^ = -STACK WIN 4 68867 1d7 0 0 14 c 118 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 288 - ^ = -STACK WIN 4 2cf9b 28d f 0 c 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2cfa8 27c 2 0 c 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 2cfa9 27a 1 0 c 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 2cfaa 278 0 0 c c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 2cf60 23 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 68abf 2ed 11 0 10 0 58 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 68ac8 2e0 8 0 10 4 58 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 96 - ^ = -STACK WIN 4 68acf 2d8 1 0 10 8 58 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 96 - ^ = -STACK WIN 4 68ad0 2d6 0 0 10 c 58 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 96 - ^ = -STACK WIN 4 68db1 10d 9 0 c 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 68dba 100 0 0 c 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 68e39 80 0 0 c 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 68f11 148 8 0 8 0 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 68f3e 115 0 0 8 4 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 68f75 dd 0 0 8 8 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6905d 19 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 357d5 b 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2080d 5f7 11 0 c 0 24c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2081e 5dd 0 0 c 4 24c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2083d 5b0 0 0 c 8 24c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 31b99 1f2 7 0 10 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 31ba0 1e7 0 0 10 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 31bcf 1ac 0 0 10 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 31bd0 1aa 0 0 10 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 20799 e2 e 0 10 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 207a1 d6 6 0 10 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 207a7 cf 0 0 10 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 207d8 7d 0 0 10 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 1fb88 19 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6907b 199 9 0 8 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 69084 18c 0 0 8 4 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 690b9 156 0 0 8 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 690ba 154 0 0 8 c 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 69218 17a 9 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 69221 16d 0 0 c 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 692b0 da 0 0 c 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 69395 3de 16 0 8 0 230 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 693a6 3c4 5 0 8 4 230 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 568 - ^ = -STACK WIN 4 693aa 3bf 1 0 8 8 230 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 568 - ^ = -STACK WIN 4 693ab 3bd 0 0 8 c 230 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 568 - ^ = -STACK WIN 4 69778 1b3 9 0 4 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 69781 1a6 0 0 4 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 697b6 170 0 0 4 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 697b7 16e 0 0 4 c c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 69930 2ca 9 0 4 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 69939 2bd 0 0 4 4 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 69983 271 0 0 4 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2e61c 39d a 0 c 0 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2e625 390 1 0 c 4 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 44 - ^ = -STACK WIN 4 2e626 38e 0 0 c 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 44 - ^ = -STACK WIN 4 2e63e 372 0 0 c c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 44 - ^ = -STACK WIN 4 20d14 3ab b 0 10 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 20d1d 39e 2 0 10 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 20d1e 39c 1 0 10 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 20d1f 39a 0 0 10 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 2d2af 13d 9 0 8 0 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2d2b8 130 0 0 8 4 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 44 - ^ = -STACK WIN 4 2d2de 106 0 0 8 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 44 - ^ = -STACK WIN 4 2d2df 104 0 0 8 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 44 - ^ = -STACK WIN 4 69bff fd c 0 c 8 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 69ce0 21 0 0 c 8 38 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 69d19 111 c 0 c 8 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 69e0e 21 0 0 c 8 38 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 69e49 fd c 0 c 8 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 69f2a 21 0 0 c 8 38 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 69f61 10f c 0 c 8 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6a054 21 0 0 c 8 38 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6a091 48 8 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6a099 3c 0 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6a0de 1d 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2e8b2 10f c 0 c 8 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 453fe 21 0 0 c 8 38 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6a100 13c c 0 10 8 3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6a220 21 0 0 10 8 3c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6a259 fc c 0 8 8 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6a339 21 0 0 8 8 38 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6a371 172 a 0 0 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6a37a 167 1 0 0 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 6a37b 165 0 0 0 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 6a4e8 11 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6a4fe c7 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6a5ca 3e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6a60d a4 10 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6a613 9a a 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 6a614 98 9 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 6a61b 90 2 0 8 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 6a6b6 d0 10 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6a6bc c6 a 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 6a6bd c4 9 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 6a6c4 bc 2 0 8 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 6a78b 66 8 0 18 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6a7b8 33 0 0 18 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6a7fb 60c e 0 8 0 94 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6a807 5fc 2 0 8 4 94 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 156 - ^ = -STACK WIN 4 6a808 5fa 1 0 8 8 94 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 156 - ^ = -STACK WIN 4 6a809 5f8 0 0 8 c 94 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 156 - ^ = -STACK WIN 4 6aebf 29 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6aeed 2d 8 0 8 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6af1f 55 8 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6af53 1d 0 0 c 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6af79 52 8 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6afad 1a 0 0 8 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6afd0 71 9 0 18 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6afd8 65 1 0 18 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 6afd9 63 0 0 18 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 6aff2 49 0 0 18 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 6b046 41 8 0 18 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6b08c 57 8 0 14 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6b0e8 2e 7 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6b11b 2e 7 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6b14e 35 8 0 10 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6b188 35 8 0 10 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6b1c2 57 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6b21e 3c 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6b25f 1c 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2cb03 69 8 0 8 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6b280 72 8 0 c 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2e44a 28 6 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2e450 1e 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6b2f7 28 6 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6b2fd 1e 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2afc9 cc e 0 14 0 70 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2afd6 bb 1 0 14 4 70 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2afd7 b9 0 0 14 8 70 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2ca9f 111 f 0 10 0 78 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2caac 100 2 0 10 4 78 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 128 - ^ = -STACK WIN 4 2caad fe 1 0 10 8 78 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 128 - ^ = -STACK WIN 4 2caae fc 0 0 10 c 78 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 128 - ^ = -STACK WIN 4 6b324 35 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6b35e 29 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6b38c 67 8 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6b394 5b 0 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6b3f8 6f c 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6b404 5f 0 0 c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6b46c 19d c 0 c 8 5c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6b5b5 48 0 0 c 8 5c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6b629 55 8 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6b631 49 0 0 c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6b683 c 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2146c c 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6b694 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1301e 22 5 0 18 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6b6a3 53 6 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6b6a9 49 0 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 17190 c4 13 0 c 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1719f b1 4 0 c 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 171a2 ad 1 0 c 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 171a3 a9 0 0 c c c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 2bf01 c 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1305f c 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6b6fb 23 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 a644 35 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 a675 38 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 300a9 33 6 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 300af 29 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 967c 12f c 0 10 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 9684 123 4 0 10 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 9688 11e 0 0 10 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6b723 39 6 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6b729 2f 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 130a6 42 e 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 130ac 38 8 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 130b4 2f 0 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 15350 124 16 0 14 0 50 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1535e 10d 8 0 14 4 50 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 88 - ^ = -STACK WIN 4 15362 108 4 0 14 8 50 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 88 - ^ = -STACK WIN 4 15366 103 0 0 14 c 50 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 88 - ^ = -STACK WIN 4 6b761 3f 9 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6b76a 32 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1530d 47 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 19aaa 33 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1a9d9 3a 8 0 8 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 15229 170 e 0 10 0 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 15232 163 5 0 10 4 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 64 - ^ = -STACK WIN 4 15233 15f 4 0 10 8 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 64 - ^ = -STACK WIN 4 15237 15a 0 0 10 c 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 64 - ^ = -STACK WIN 4 162db ef b 0 1c 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 162e2 e4 4 0 1c 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 162e6 df 0 0 1c 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 1529b af 8 0 3c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 152a1 a5 2 0 3c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 152a2 a3 1 0 3c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 152a3 a1 0 0 3c c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 1a86f 227 21 0 28 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1a878 21a 18 0 28 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 1a879 216 17 0 28 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 1a890 1fe 0 0 28 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 15921 ab5 45 0 c 0 3dc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 15958 a75 e 0 c 4 3dc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 996 - ^ = -STACK WIN 4 15965 a67 1 0 c 8 3dc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 996 - ^ = -STACK WIN 4 15966 a65 0 0 c c 3dc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 996 - ^ = -STACK WIN 4 1545c 910 17 0 4 8 2e0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 45f23 e 0 0 4 8 2e0 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 11210 83 9 0 c 0 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 11219 76 0 0 c 4 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1123b 57 0 0 c 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6b7a5 32f 1d 0 4 0 254 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6b7bd 2c9 5 0 4 4 254 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 604 - ^ = -STACK WIN 4 6b7be 2c7 4 0 4 8 254 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 604 - ^ = -STACK WIN 4 6b7c2 2c2 0 0 4 c 254 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 604 - ^ = -STACK WIN 4 2fe16 84 3e 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2fe54 1f 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 30e9a a7 9 0 c 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 30ea1 9c 2 0 c 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 30ea2 9a 1 0 c 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 30ea3 98 0 0 c c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 2fd92 73 9 0 14 0 44 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2fd9b 66 0 0 14 4 44 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2fdb4 2a 0 0 14 8 44 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6bb0f 51 9 0 14 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6bb17 45 1 0 14 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6bb18 43 0 0 14 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2fd4c 41 8 0 14 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2fd54 35 0 0 14 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 30f21 73 9 0 14 0 44 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 30f2a 66 0 0 14 4 44 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 30f43 2a 0 0 14 8 44 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 38653 18e 2e 0 14 0 e4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 38667 171 1a 0 14 4 e4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 236 - ^ = -STACK WIN 4 3866b 16c 16 0 14 8 e4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 236 - ^ = -STACK WIN 4 38681 155 0 0 14 c e4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 236 - ^ = -STACK WIN 4 3835a 3f 6 0 14 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1612f 113 1f 0 4 0 d8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 16147 f2 7 0 4 4 d8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1614e e8 0 0 4 8 d8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6bb65 38 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6bba2 28 6 0 0 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6bbcf 6b 8 0 4 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6bbd7 5f 0 0 4 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6bc0c 29 0 0 4 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 16763 87 16 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 16772 74 7 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 16778 6d 1 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 16779 6b 0 0 c c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 16602 5b 13 0 4 0 20c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 16613 41 2 0 4 4 20c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 532 - ^ = -STACK WIN 4 16614 3d 1 0 4 8 20c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 532 - ^ = -STACK WIN 4 16615 3b 0 0 4 c 20c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 532 - ^ = -STACK WIN 4 1aa2c ff 13 0 0 0 228 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1aa3d e7 2 0 0 4 228 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 560 - ^ = -STACK WIN 4 1aa3e e4 1 0 0 8 228 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 560 - ^ = -STACK WIN 4 1aa3f e0 0 0 0 c 228 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 560 - ^ = -STACK WIN 4 169ea 5c 9 0 c 0 48 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 169f3 4f 0 0 c 4 48 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1691d 5c 8 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2b335 67 e 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2b33e 5a 5 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 2b33f 57 4 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 2b343 50 0 0 c c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 16473 5f 10 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 16479 47 a 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 1647a 45 9 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 16483 3b 0 0 10 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 1697f 66 7 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 16996 47 0 0 c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1699b 39 0 0 c 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2c59b 87 c 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2c5a6 78 1 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 2c5a7 76 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 2c5be 5a 0 0 c c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 2f70b 90 6 0 1c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2f711 86 0 0 1c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2f737 5f 0 0 1c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2f695 bd 8 0 10 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2f6ca 81 0 0 10 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2f6ce 7b 0 0 10 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1642c 42 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1643c 2d 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 16440 28 0 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 168bb 52 11 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 168c3 46 9 0 c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 168c4 44 8 0 c 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 168cc 3b 0 0 c c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 16396 91 a 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1639f 5c 1 0 4 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 163a0 5a 0 0 4 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 163bf 3a 0 0 4 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 165e9 13 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 16b75 415 21 0 4 0 4a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 16b8c 3f5 a 0 4 4 4a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1200 - ^ = -STACK WIN 4 16b95 3eb 1 0 4 8 4a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1200 - ^ = -STACK WIN 4 16b96 3e9 0 0 4 c 4a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1200 - ^ = -STACK WIN 4 164cd c4 c 0 0 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 46631 e 0 0 0 8 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2b553 b8 8 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2b55b ac 0 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 2b57d 86 0 0 8 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 2b57e 82 0 0 8 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 16662 f2 b 0 14 0 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1666b e5 2 0 14 4 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 56 - ^ = -STACK WIN 4 1666c e3 1 0 14 8 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 56 - ^ = -STACK WIN 4 1666d e1 0 0 14 c 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 56 - ^ = -STACK WIN 4 16879 b7 f 0 10 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 16884 a8 4 0 10 4 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 16888 a3 0 0 10 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 16a5c 79 0 0 10 c 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 16562 8d c 0 8 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 46678 4 0 0 8 8 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 167d7 9a c 0 10 8 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 466a9 4 0 0 10 8 28 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 15120 a1 c 0 c 8 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 466d4 4 0 0 c 8 28 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6bc3f 63 c 0 0 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6bc8a 4 0 0 0 8 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6bcc1 a9 8 0 0 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6bcc9 9f 0 0 0 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6bcf0 77 0 0 0 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2b38d 214 e 0 0 0 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2b39b 1ff 0 0 0 4 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 44 - ^ = -STACK WIN 4 2b3dd 1b6 0 0 0 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 44 - ^ = -STACK WIN 4 2b3de 1b4 0 0 0 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 44 - ^ = -STACK WIN 4 6be06 7f 3 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6be09 7b 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6be41 42 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6be8a 33 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1204d 44 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 12061 1c 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6bec2 70 7 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6bec8 66 1 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6bec9 64 0 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6bf37 105 b 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6bf3d fb 5 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 6bf3e f9 4 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 6bf42 f4 0 0 4 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 6c041 167 10 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6c04f 155 2 0 8 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 6c050 153 1 0 8 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 6c051 151 0 0 8 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 6c1ad 165 5 0 18 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6c1c9 df 0 0 18 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6c1cd da 0 0 18 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6c317 f8 6 0 24 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6c31d ee 0 0 24 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 6c34d bd 0 0 24 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 6c351 b6 0 0 24 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 6c414 15 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6c42e 16 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6c449 22 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6c470 22 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6c497 9a c 0 c 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6c4a2 83 1 0 c 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 6c4a3 81 0 0 c 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 6c4d1 52 0 0 c c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 6c536 22 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6c55d 30 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6c592 50 7 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6c598 42 1 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6c599 40 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6c5e7 3e 1a 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6c601 20 0 0 14 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6c62a 17b 15 0 14 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6c639 168 6 0 14 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 6c63e 162 1 0 14 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 6c63f 15e 0 0 14 c c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 6c7a6 177 d 0 28 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6c7ad 16c 6 0 28 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6c7b3 165 0 0 28 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6c922 177 d 0 28 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6c929 16c 6 0 28 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6c92f 165 0 0 28 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6ca9e 195 10 0 18 0 48 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6caa7 188 7 0 18 4 48 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 80 - ^ = -STACK WIN 4 6caae 180 0 0 18 8 48 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 80 - ^ = -STACK WIN 4 6cabd 170 0 0 18 c 48 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 80 - ^ = -STACK WIN 4 6cc38 198 10 0 18 0 48 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6cc41 18b 7 0 18 4 48 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 80 - ^ = -STACK WIN 4 6cc48 183 0 0 18 8 48 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 80 - ^ = -STACK WIN 4 6cc57 173 0 0 18 c 48 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 80 - ^ = -STACK WIN 4 6cdd5 115c 1b 0 14 0 254 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6cde9 1144 7 0 14 4 254 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 604 - ^ = -STACK WIN 4 6cded 113f 3 0 14 8 254 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 604 - ^ = -STACK WIN 4 6cdf0 113b 0 0 14 c 254 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 604 - ^ = -STACK WIN 4 6df34 115c 1b 0 14 0 274 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6df48 1144 7 0 14 4 274 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 636 - ^ = -STACK WIN 4 6df4c 113f 3 0 14 8 274 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 636 - ^ = -STACK WIN 4 6df4f 113b 0 0 14 c 274 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 636 - ^ = -STACK WIN 4 335b7 1d 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6f093 357 13 0 18 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6f09f 347 7 0 18 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 6f0a2 343 4 0 18 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 6f0a6 33e 0 0 18 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 6f3ef a6 c 0 10 0 f8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6f3fb 96 0 0 10 4 f8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6f49a 104 19 0 8 0 58 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6f4a8 ed b 0 8 4 58 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 96 - ^ = -STACK WIN 4 6f4a9 eb a 0 8 8 58 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 96 - ^ = -STACK WIN 4 6f4b3 e0 0 0 8 c 58 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 96 - ^ = -STACK WIN 4 6f5a3 102 8 0 18 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6f5aa f7 1 0 18 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 6f5ab f5 0 0 18 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 6f602 9d 0 0 18 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 6f6aa c5 1a 0 18 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6f6bc af 8 0 18 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 6f6bd ad 7 0 18 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 6f6c4 a5 0 0 18 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 6f774 1c7 16 0 8 0 220 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6f785 1ad 5 0 8 4 220 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 552 - ^ = -STACK WIN 4 6f786 1ab 4 0 8 8 220 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 552 - ^ = -STACK WIN 4 6f78a 1a6 0 0 8 c 220 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 552 - ^ = -STACK WIN 4 6f949 b 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6f959 12f 7 0 14 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6f97d 107 0 0 14 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6f9f0 92 0 0 14 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6fa8d 22 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6fab4 1f 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6fad8 19e 8 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6fae0 192 0 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6fb1d 153 0 0 8 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6fc7b 61 8 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6fc83 55 0 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6fcdc e9 c 0 0 4 330 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6fdca 66 c 0 4 8 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6fe04 4 0 0 4 8 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 189fc 28 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6fe51 65 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6fe6d 44 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6fe6e 42 0 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6febb 5f c 0 c 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6ff09 4 0 0 c 8 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6ff39 148 15 0 18 0 ac 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6ff4a 12e 4 0 18 4 ac 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 6ff4e 129 0 0 18 8 ac 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 70086 27 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 700b2 25 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 700dc c0 13 0 8 0 a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 700ed a6 2 0 8 4 a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 176 - ^ = -STACK WIN 4 700ee a4 1 0 8 8 a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 176 - ^ = -STACK WIN 4 700ef a2 0 0 8 c a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 176 - ^ = -STACK WIN 4 701a1 13 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 701b9 13 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 701d1 6f 13 0 4 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 70245 8 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 70252 8 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7025f 149 17 0 10 8 c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 70362 4 0 0 10 8 c4 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 703c9 19 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 703e7 19 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 70405 10c 17 0 c 8 c0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 704cb 4 0 0 c 8 c0 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 70531 16 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7054c 16 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 70567 a3 19 0 8 0 a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 70578 89 8 0 8 4 a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 176 - ^ = -STACK WIN 4 70579 87 7 0 8 8 a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 176 - ^ = -STACK WIN 4 70580 7f 0 0 8 c a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 176 - ^ = -STACK WIN 4 7060f 13 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 70627 13 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7063f c6 13 0 c 0 a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 70650 ac 2 0 c 4 a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 176 - ^ = -STACK WIN 4 70651 aa 1 0 c 8 a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 176 - ^ = -STACK WIN 4 70652 a8 0 0 c c a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 176 - ^ = -STACK WIN 4 7070a 16 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 70725 16 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 70740 a8 19 0 8 0 a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 70751 8e 8 0 8 4 a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 176 - ^ = -STACK WIN 4 70752 8c 7 0 8 8 a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 176 - ^ = -STACK WIN 4 70759 84 0 0 8 c a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 176 - ^ = -STACK WIN 4 707ed 13 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 70805 13 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7081d 150 17 0 10 8 c8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 70927 4 0 0 10 8 c8 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 70989 19 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 709a7 19 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 709c5 6f 13 0 4 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1ba6a 111 17 0 c 8 c0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 4677c 4 0 0 c 8 c0 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 70a39 23 9 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 70a42 16 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1ba3c 29 9 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1ba45 1c 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2da09 a0 12 0 c 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2da1a 86 1 0 c 4 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2da1b 84 0 0 c 8 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 70a61 4f c 0 4 8 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 70a99 4 0 0 4 8 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2d9bd 4b c 0 4 8 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 467de 4 0 0 4 8 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 70ad1 75 c 0 8 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 70b3f c 0 0 8 8 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1b355 6e c 0 4 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1b3c1 c 0 0 4 8 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 70b61 11b 1c 0 18 0 a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 70b72 101 b 0 18 4 a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 176 - ^ = -STACK WIN 4 70b73 ff a 0 18 8 a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 176 - ^ = -STACK WIN 4 70b7d f4 0 0 18 c a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 176 - ^ = -STACK WIN 4 70c81 39 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 70cbf 38 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 70cfc a7 13 0 8 0 214 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 70d0d 8d 2 0 8 4 214 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 540 - ^ = -STACK WIN 4 70d0e 8b 1 0 8 8 214 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 540 - ^ = -STACK WIN 4 70d0f 89 0 0 8 c 214 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 540 - ^ = -STACK WIN 4 70da8 58 8 0 4 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 70db0 4c 0 0 4 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1b10f 77 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1b132 4f 0 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1b13a 46 0 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 29ee3 70 d 0 8 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 29ef0 5f 0 0 8 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 46833 26 0 0 8 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1aff3 81 17 0 4 8 bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 4687c 4 0 0 4 8 bc 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1afd5 1f 6 0 0 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 18c64 9a b 0 c 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 18c6b 8f 4 0 c 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 18c6f 8a 0 0 c 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 70e05 1ef 17 0 2c 8 e0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 70fe7 12 0 0 2c 8 e0 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 71011 77 13 0 0 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7108d 4f 4 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 71090 4b 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 71091 49 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 710e1 93 7 0 4 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 710e8 88 0 0 4 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 71107 68 0 0 4 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 71191 164 17 0 10 8 d0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 712e3 17 0 0 10 8 d0 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 b6d7 228 16 0 8 0 640 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 b6ec 20a 1 0 8 4 640 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1608 - ^ = -STACK WIN 4 b6ed 208 0 0 8 8 640 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1608 - ^ = -STACK WIN 4 71311 1cd 17 0 0 8 480 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 714d7 c 0 0 0 8 480 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 714f9 e9 17 0 4 8 128 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 715db c 0 0 4 8 128 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 715f9 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1ce32 125 17 0 14 8 bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 468d9 4 0 0 14 8 bc 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 468e9 4 0 0 14 8 bc 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1cf25 1c 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 35484 1c 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1dc7e 6f 13 0 4 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1dd4d 9b 1c 0 10 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 71604 a3 17 0 8 8 bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 71674 4 0 0 8 8 bc 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 716c9 7b 13 0 c 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1aeaa 73 13 0 4 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1ff5b 82 13 0 10 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 10fe1 95 c 0 10 8 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 46968 4 0 0 10 8 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 71749 29c 17 0 20 8 d8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7189d 11 0 0 20 8 d8 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7199c 4 0 0 20 8 d8 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 71a1d 4a 16 0 14 0 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 71a2b 33 8 0 14 4 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 92 - ^ = -STACK WIN 4 71a2f 2e 4 0 14 8 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 92 - ^ = -STACK WIN 4 71a33 29 0 0 14 c 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 92 - ^ = -STACK WIN 4 71a6c 51 1c 0 14 0 58 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 71a7a 3a e 0 14 4 58 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 96 - ^ = -STACK WIN 4 71a7e 35 a 0 14 8 58 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 96 - ^ = -STACK WIN 4 71a88 2a 0 0 14 c 58 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 96 - ^ = -STACK WIN 4 71ac2 139 17 0 2c 8 c8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 71be9 4 0 0 2c 8 c8 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 71c19 ae 17 0 c 8 bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 71ca8 4 0 0 c 8 bc 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 71ce9 7b 13 0 c 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 37c53 9a 17 0 4 8 bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 469a3 4 0 0 4 8 bc 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 71d69 c2 19 0 10 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 71d7a a8 8 0 10 4 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 172 - ^ = -STACK WIN 4 71d7e a3 4 0 10 8 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 172 - ^ = -STACK WIN 4 71d82 9e 0 0 10 c a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 172 - ^ = -STACK WIN 4 71e30 6f 13 0 4 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 71ea4 1e 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 71ec7 1e 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 71eea 75 13 0 8 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 71f64 56 13 0 8 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 71fbf 5c 13 0 c 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 72020 7b 13 0 c 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 720a0 107 17 0 c 8 bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 72188 4 0 0 c 8 bc 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 721c9 78 8 0 c 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 72269 12b 17 0 18 8 c0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7236f 4 0 0 18 8 c0 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7237f 4 0 0 18 8 c0 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 723c5 1e 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 723e8 1e 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7240b 13f 26 0 18 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 72420 126 11 0 18 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 72421 124 10 0 18 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 72431 113 0 0 18 c c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 7254f 272 17 0 18 8 d4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 72787 4 0 0 18 8 d4 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 727e1 1f 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 72805 1f 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 72829 2d8 17 0 18 8 e8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 72aa3 4 0 0 18 8 e8 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 72b21 1f 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 72b45 1f 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 72b69 151 17 0 1c 8 c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 72c86 4 0 0 1c 8 c4 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 72cd9 21 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 72cff 21 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 72d25 21 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 72d4b 126 17 0 1c 8 c0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 72e4c 4 0 0 1c 8 c0 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 72e5c 4 0 0 1c 8 c0 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 72ea5 21 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 72ecb 21 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 72ef1 21 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 72f17 c3 17 0 18 8 bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 72fbb 4 0 0 18 8 bc 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 72ff9 22 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 73020 1f 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 73044 1f 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 73068 172 17 0 14 8 c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7314a 4 0 0 14 8 c4 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 731c9 4 0 0 14 8 c4 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 73215 af 17 0 8 8 bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 732a4 4 0 0 8 8 bc 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 732e1 17b 17 0 18 8 c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 73326 4 0 0 18 8 c4 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 73432 4 0 0 18 8 c4 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7348d 1e 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 734b0 1e 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 734d3 1e 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 734f6 1e 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 73519 1f 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7353d 1f 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 73561 ad 17 0 8 8 bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 735db 4 0 0 8 8 bc 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 73629 9c 17 0 4 8 bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 73692 4 0 0 4 8 bc 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 736e1 9a 17 0 4 8 bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 73748 4 0 0 4 8 bc 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 73799 107 17 0 10 8 c0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 73854 4 0 0 10 8 c0 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 738c1 89 13 0 8 0 a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7394f b5 17 0 c 8 bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 739d1 4 0 0 c 8 bc 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1b1f0 75 13 0 8 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 73a21 82 18 0 8 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 73aa8 6f 13 0 4 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 73b1c 6f 13 0 4 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 73b90 75 13 0 8 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 73c0a 75 13 0 8 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 73c84 ac 17 0 8 8 bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 73d11 4 0 0 8 8 bc 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 73d51 b5 17 0 c 8 bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 73de7 4 0 0 c 8 bc 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 73e21 e1 17 0 18 8 bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 73ee3 4 0 0 18 8 bc 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 73f21 1f 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 73f45 1f 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 73f69 77 13 0 8 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 73fe5 75 13 0 8 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7405f 6f 13 0 4 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 740d3 6b 13 0 0 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 74143 b6 15 0 4 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 74154 9c 4 0 4 4 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 74158 97 0 0 4 8 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1b18f 6e 13 0 0 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 741fe 5e 13 0 4 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 74261 2e 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 74294 90 12 0 8 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 742a5 76 1 0 8 4 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 742a6 74 0 0 8 8 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 74329 13 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 74341 13 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 74359 67 13 0 0 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 743c5 11c 17 0 8 8 c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 74497 4 0 0 8 8 c4 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1af14 a3 17 0 8 8 bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 469dd 4 0 0 8 8 bc 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 74501 67 13 0 0 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7456d a3 17 0 8 8 bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 745dd 4 0 0 8 8 bc 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 74631 83 13 0 4 0 a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1bc2b e4 17 0 8 8 bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 469fe 4 0 0 8 8 bc 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 746b9 c1 19 0 10 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 746ca a7 8 0 10 4 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 172 - ^ = -STACK WIN 4 746ce a2 4 0 10 8 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 172 - ^ = -STACK WIN 4 746d2 9d 0 0 10 c a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 172 - ^ = -STACK WIN 4 7477f 7b 13 0 c 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 747ff ae 17 0 c 8 bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7487a 4 0 0 c 8 bc 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 748c9 6f 13 0 4 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7493d 6f 13 0 4 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 749b1 e8 17 0 14 8 bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 74a7a 4 0 0 14 8 bc 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 74ab9 54 8 0 8 0 44 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 74b12 6f 13 0 4 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 74b86 c 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 74b97 4d 8 0 c 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 74be9 a0 b 0 10 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 74bf2 93 2 0 10 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 74bf3 91 1 0 10 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 74bf4 8f 0 0 10 c c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 74c8e bd 11 0 8 0 408 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 74c9f a3 0 0 8 4 408 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 74e13 13d 11 0 4 0 4b0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 74e24 123 0 0 4 4 4b0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 74e74 79 0 0 4 8 4b0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 74f87 135 17 0 8 8 c0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7507d 4 0 0 8 8 c0 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 750d9 c5 15 0 8 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 750ea ab 4 0 8 4 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 750ee a6 0 0 8 8 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 751a3 ac 17 0 c 8 bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7521c 4 0 0 c 8 bc 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 75271 b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1b5c6 ca 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1b616 17 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1b61d f 0 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2000c 78 6 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 20012 3d 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1b58b 39 7 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1b591 2f 1 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1b592 2d 0 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 75280 1cc c 0 4 8 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 75348 4 0 0 4 8 7c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 753b9 c 0 0 4 8 7c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 75454 c 0 0 4 8 7c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 75489 45 13 0 0 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 754d3 f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 754e4 242 17 0 8 8 c8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 756a5 4 0 0 8 8 c8 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $ebp = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 38211 1e 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 75749 1e 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7576c 19 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7578a 1b 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 757aa 1b 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 757ca 19 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 757e8 1c 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 75809 19 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 37ce1 16 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 75827 16 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 75842 84 16 0 14 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 75853 6a 5 0 14 4 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 172 - ^ = -STACK WIN 4 75857 65 1 0 14 8 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 172 - ^ = -STACK WIN 4 75858 63 0 0 14 c a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 172 - ^ = -STACK WIN 4 a459 b3 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 d21d 15 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 cf52 136 5 0 18 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 cf63 111 0 0 18 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 cf7e f4 0 0 18 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 d239 24 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 380ef d7 c 0 c 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 380f9 c9 2 0 c 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 380fa c7 1 0 c 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 380fb c5 0 0 c c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 38063 f7 a 0 24 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3806c ea 1 0 24 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 3806d e8 0 0 24 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 380a9 65 0 0 24 c c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 d077 1a3 1e 0 18 0 218 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 d088 189 d 0 18 4 218 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 544 - ^ = -STACK WIN 4 d08f 181 6 0 18 8 218 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 544 - ^ = -STACK WIN 4 d095 17a 0 0 18 c 218 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 544 - ^ = -STACK WIN 4 38de8 204 19 0 18 0 214 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 38df9 1ea 8 0 18 4 214 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 540 - ^ = -STACK WIN 4 38dfd 1e5 4 0 18 8 214 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 540 - ^ = -STACK WIN 4 38e01 1e0 0 0 18 c 214 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 540 - ^ = -STACK WIN 4 d262 16c 1d 0 10 0 108 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 d277 14e 8 0 10 4 108 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 272 - ^ = -STACK WIN 4 d27e 146 1 0 10 8 108 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 272 - ^ = -STACK WIN 4 d27f 144 0 0 10 c 108 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 272 - ^ = -STACK WIN 4 758cb 9b 11 0 c 0 10c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 758dc 81 0 0 c 4 10c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 75925 34 0 0 c 8 10c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7596b 166 21 0 18 0 10c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 75981 47 b 0 18 4 10c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 276 - ^ = -STACK WIN 4 7598b 3c 1 0 18 8 10c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 276 - ^ = -STACK WIN 4 7598c 3a 0 0 18 c 10c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 276 - ^ = -STACK WIN 4 75ad6 9e 11 0 10 0 10c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 75ae7 84 0 0 10 4 10c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 75b30 37 0 0 10 8 10c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3632d 1a7 19 0 18 0 218 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3633e 18d 8 0 18 4 218 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 544 - ^ = -STACK WIN 4 36342 188 4 0 18 8 218 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 544 - ^ = -STACK WIN 4 36346 183 0 0 18 c 218 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 544 - ^ = -STACK WIN 4 361ee 1ea 19 0 18 0 218 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 361ff 1d0 8 0 18 4 218 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 544 - ^ = -STACK WIN 4 36203 1cb 4 0 18 8 218 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 544 - ^ = -STACK WIN 4 36207 1c6 0 0 18 c 218 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 544 - ^ = -STACK WIN 4 2ec56 2cc 16 0 18 0 234 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2ec67 2b2 5 0 18 4 234 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 572 - ^ = -STACK WIN 4 2ec68 2b0 4 0 18 8 234 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 572 - ^ = -STACK WIN 4 2ec6c 2ab 0 0 18 c 234 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 572 - ^ = -STACK WIN 4 75b79 333 16 0 18 0 23c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 75b8a 319 5 0 18 4 23c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 580 - ^ = -STACK WIN 4 75b8b 317 4 0 18 8 23c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 580 - ^ = -STACK WIN 4 75b8f 312 0 0 18 c 23c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 580 - ^ = -STACK WIN 4 38a0c ad 15 0 14 0 10c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 38a1d 93 4 0 14 4 10c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 38a21 8e 0 0 14 8 10c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 75eb1 191 21 0 14 0 210 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 75ec5 174 d 0 14 4 210 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 536 - ^ = -STACK WIN 4 75ec6 172 c 0 14 8 210 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 536 - ^ = -STACK WIN 4 75ed2 165 0 0 14 c 210 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 536 - ^ = -STACK WIN 4 76047 83 11 0 c 0 224 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 76058 69 0 0 c 4 224 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7606e 4f 0 0 c 8 224 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 760cf b 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 a490 196 8 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 a496 18c 2 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 a497 18a 1 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 a498 188 0 0 10 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 760df 2e5 11 0 3c 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 760eb 2d5 5 0 3c 4 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 760ef 2cb 1 0 3c 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 760f0 2c9 0 0 3c c 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 bfef 93 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 af4f 12e7 1d 0 1c 0 98 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 af64 12ce 8 0 1c 4 98 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 160 - ^ = -STACK WIN 4 af68 12c9 4 0 1c 8 98 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 160 - ^ = -STACK WIN 4 af6c 12c4 0 0 1c c 98 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 160 - ^ = -STACK WIN 4 763c9 21 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 763ef 107 1e 0 8 0 424 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 76400 6b d 0 8 4 424 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1068 - ^ = -STACK WIN 4 7640d 5d 0 0 8 8 424 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1068 - ^ = -STACK WIN 4 1c48b 263 26 0 8 0 648 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1c4a3 ad e 0 8 4 648 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1616 - ^ = -STACK WIN 4 1c4ad a2 4 0 8 8 648 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1616 - ^ = -STACK WIN 4 1c4b1 9d 0 0 8 c 648 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1616 - ^ = -STACK WIN 4 764fb fe 18 0 4 0 140 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7650c e4 7 0 4 4 140 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 76513 dc 0 0 4 8 140 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 a415 d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 13038 2d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 13070 2a 6 0 0 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 127b2 7 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 bf3d 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9f10 e2 6 0 0 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7668d a2 9 0 c 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 76696 95 0 0 c 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 76734 2b9 6 0 1c 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7676f 27a 0 0 1c 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 769f2 5c 5 0 1c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 39200 157 15 0 c 0 43c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 39211 13d 4 0 c 4 43c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 39215 138 0 0 c 8 43c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 76a53 195 1d 0 c 0 210 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 76a6b 174 5 0 c 4 210 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 536 - ^ = -STACK WIN 4 76a6f 16f 1 0 c 8 210 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 536 - ^ = -STACK WIN 4 76a70 16d 0 0 c c 210 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 536 - ^ = -STACK WIN 4 76c59 b2 8 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 76c5f a8 2 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 76c60 a6 1 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 76c61 a4 0 0 10 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 383cf 49 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1bbba ac b 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1bbc5 9d 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 bf64 5 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2f041 131 11 0 c 0 a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2f052 117 0 0 c 4 a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 176 - ^ = -STACK WIN 4 2f06a ef 0 0 c 8 a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 176 - ^ = -STACK WIN 4 2f06b eb 0 0 c c a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 176 - ^ = -STACK WIN 4 2efb9 83 f 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2efc2 76 6 0 c 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2efc8 6f 0 0 c 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 11562 17bb 2f 0 10 0 bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1157f ee5 12 0 10 4 bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 196 - ^ = -STACK WIN 4 11582 19a f 0 10 8 bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 196 - ^ = -STACK WIN 4 11591 18a 0 0 10 c bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 196 - ^ = -STACK WIN 4 39020 385 39 0 18 0 c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 39045 c8 14 0 18 4 c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 204 - ^ = -STACK WIN 4 39046 c6 13 0 18 8 c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 204 - ^ = -STACK WIN 4 39059 b2 0 0 18 c c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 204 - ^ = -STACK WIN 4 76d1b 114 13 0 10 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 76d2d fe 1 0 10 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 76d2e fc 0 0 10 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 76e34 3a 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 76e3a 30 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1b258 159 f 0 4 0 3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1b266 142 1 0 4 4 3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1b267 140 0 0 4 8 3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 76e73 e22 23 0 c 0 570 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 76e84 d6c 12 0 c 4 570 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1400 - ^ = -STACK WIN 4 76e92 9ea 4 0 c 8 570 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1400 - ^ = -STACK WIN 4 76e96 9e5 0 0 c c 570 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1400 - ^ = -STACK WIN 4 77cf7 f4 1d 0 10 0 428 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 77d0b d7 9 0 10 4 428 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1072 - ^ = -STACK WIN 4 77d0f d2 5 0 10 8 428 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1072 - ^ = -STACK WIN 4 77d14 cc 0 0 10 c 428 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1072 - ^ = -STACK WIN 4 1bcfe f4 1c 0 10 0 428 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1bd12 d7 8 0 10 4 428 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1072 - ^ = -STACK WIN 4 1bd16 d2 4 0 10 8 428 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1072 - ^ = -STACK WIN 4 1bd1a cd 0 0 10 c 428 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1072 - ^ = -STACK WIN 4 15047 f9 7 0 14 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1505b e1 0 0 14 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1505c df 0 0 14 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 77df0 2f 7 0 10 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1734f 4a a 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 17358 3d 1 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 17359 3b 0 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 77e24 1a 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 17f7d 3f 9 0 18 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 17f86 32 0 0 18 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 77e43 13f 16 0 c 0 2a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 77e54 125 5 0 c 4 2a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 684 - ^ = -STACK WIN 4 77e58 120 1 0 c 8 2a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 684 - ^ = -STACK WIN 4 77e59 11e 0 0 c c 2a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 684 - ^ = -STACK WIN 4 2ae21 8d 1d 0 8 0 40c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2ae3a 64 4 0 8 4 40c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2ae3e 5f 0 0 8 8 40c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2ac6c c8 10 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2ac7a b1 2 0 c 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 2ac7b af 1 0 c 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 2ac7c ab 0 0 c c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 2b95b af 10 0 8 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2b969 98 2 0 8 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 2b96a 96 1 0 8 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 2b96b 94 0 0 8 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 2b883 c6 15 0 0 0 a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2b8c4 7b 0 0 0 4 a8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 172de 74 10 0 14 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 172ea 64 4 0 14 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 172ee 5f 0 0 14 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2ad98 b5 9 0 8 0 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2ada1 a8 0 0 8 4 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2adb4 90 0 0 8 8 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 77f87 60 9 0 8 0 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 77f90 53 0 0 8 4 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 77fec 2d5 1d 0 10 0 440 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 77ffd 2bb c 0 10 4 440 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1096 - ^ = -STACK WIN 4 78008 2af 1 0 10 8 440 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1096 - ^ = -STACK WIN 4 78009 2ad 0 0 10 c 440 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1096 - ^ = -STACK WIN 4 782c6 19a 15 0 14 0 e3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 782d7 15b 4 0 14 4 e3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 3652 - ^ = -STACK WIN 4 782db 156 0 0 14 8 e3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 3652 - ^ = -STACK WIN 4 7838b a2 0 0 14 c e3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 3652 - ^ = -STACK WIN 4 2a8fa 221 12 0 10 0 430 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2a90b 1f9 1 0 10 4 430 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2a90c 1f7 0 0 10 8 430 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 37cfc 3ad 22 0 c 0 468 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 37d14 38c a 0 c 4 468 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1136 - ^ = -STACK WIN 4 37d1d 382 1 0 c 8 468 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1136 - ^ = -STACK WIN 4 37d1e 380 0 0 c c 468 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1136 - ^ = -STACK WIN 4 7849b 22b 1d 0 c 0 228 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 784ac 211 c 0 c 4 228 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 560 - ^ = -STACK WIN 4 784ad 20f b 0 c 8 228 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 560 - ^ = -STACK WIN 4 784b8 203 0 0 c c 228 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 560 - ^ = -STACK WIN 4 38234 726 22 0 18 0 dc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 38248 709 e 0 18 4 dc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 228 - ^ = -STACK WIN 4 38249 707 d 0 18 8 dc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 228 - ^ = -STACK WIN 4 38256 6f9 0 0 18 c dc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 228 - ^ = -STACK WIN 4 38958 2ac 33 0 38 0 c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 38970 28b 1b 0 38 4 c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 204 - ^ = -STACK WIN 4 3897a 280 11 0 38 8 c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 204 - ^ = -STACK WIN 4 3898b 26c 0 0 38 c c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 204 - ^ = -STACK WIN 4 786e5 19 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 78703 1c 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2a8dc 19 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 78724 16 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7873f 16 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7875a 1e 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7877d 1e 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 388dc df f 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 388e7 d0 4 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 388eb cb 0 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 38801 15f c 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3880c 150 1 0 14 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 3880d 14e 0 0 14 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 388be 19 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 387e1 1b 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 787a0 1b 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 787c0 82 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 787e7 29 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 787f2 1d 0 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 78847 389 16 0 14 0 ac 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 78858 343 5 0 14 4 ac 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 180 - ^ = -STACK WIN 4 78859 341 4 0 14 8 ac 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 180 - ^ = -STACK WIN 4 7885d 33c 0 0 14 c ac 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 180 - ^ = -STACK WIN 4 78bd9 7e 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 78bdf 74 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 78c22 30 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3798e da 18 0 4 0 280 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3799f c0 7 0 4 4 280 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 379a6 b8 0 0 4 8 280 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 78c5c 150 12 0 4 0 148 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 78c6d 136 1 0 4 4 148 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 336 - ^ = -STACK WIN 4 78c6e 134 0 0 4 8 148 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 336 - ^ = -STACK WIN 4 78cb4 ea 0 0 4 c 148 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 336 - ^ = -STACK WIN 4 78db1 7c 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 78dd9 4c 0 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 78ddd 47 0 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 78e32 7c 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 78e5a 4c 0 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 78e5e 47 0 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 78eb3 c3 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 78ef0 7e 0 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 78ef3 7a 0 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 78f7b 127 e 0 10 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 78f88 116 1 0 10 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 78f89 114 0 0 10 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 78fac f0 0 0 10 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 790a7 126 11 0 10 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 790b5 114 3 0 10 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 790b8 110 0 0 10 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 791d2 92 18 0 10 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 791e0 7b a 0 10 4 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 791e4 76 6 0 10 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 791ea 6f 0 0 10 c 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 ce53 73 5 0 18 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 ce77 40 0 0 18 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 ce7b 3b 0 0 18 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2d4ad 1ced 29 0 1c 0 de4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2d4c1 1cd0 15 0 1c 4 de4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 3564 - ^ = -STACK WIN 4 2d4d5 1cbb 1 0 1c 8 de4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 3564 - ^ = -STACK WIN 4 2d4d6 1cb9 0 0 1c c de4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 3564 - ^ = -STACK WIN 4 79269 289 7 0 18 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 79270 27e 0 0 18 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7928e 25e 0 0 18 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 374eb 220 1f 0 18 0 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 374fc 206 e 0 18 4 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3750a 1f7 0 0 18 8 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 37787 e9 23 0 18 0 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3779d ca d 0 18 4 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 48 - ^ = -STACK WIN 4 377aa bc 0 0 18 8 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 48 - ^ = -STACK WIN 4 377d2 55 0 0 18 c 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 48 - ^ = -STACK WIN 4 794fb 136 5 0 1c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7952d ff 0 0 1c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7952e fd 0 0 1c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 79636 188 d 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 79641 179 2 0 14 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 79642 177 1 0 14 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 79643 175 0 0 14 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 37693 2ef a 0 18 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3769c 2e2 1 0 18 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 3769d 2e0 0 0 18 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 4acfb 1c3 0 0 18 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 cca8 3d3 13 0 18 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 ccb4 3c3 7 0 18 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 ccba 3bc 1 0 18 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 ccbb 3ba 0 0 18 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 110cb 48 6 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 110d1 3e 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 9915 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 797c3 17 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 127a7 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b7dc 39 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2f540 24 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 797df 82 5 0 1c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 79866 56 c 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 79872 46 0 0 14 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 798c1 c4 13 0 1c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 798cf 67 5 0 1c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 798d0 65 4 0 1c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 798d4 60 0 0 1c c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 a1fb 2a0 13 0 18 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 a20c 2c 2 0 18 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 a20d 2a 1 0 18 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 a20e 28 0 0 18 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 bd19 4ee 19 0 20 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 bd30 70 2 0 20 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 bd31 6e 1 0 20 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 bd32 48d 0 0 20 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 32cf3 1c3 1b 0 1c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 32d04 1ae a 0 1c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 32d07 1aa 7 0 1c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 32d0e 1a2 0 0 1c c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 7998a 6d1 c 0 24 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 79991 6c6 5 0 24 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 79992 6c4 4 0 24 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 79996 6bf 0 0 24 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 7a064 158 19 0 0 0 228 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7a07d 138 0 0 0 4 228 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7a095 11b 0 0 0 8 228 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 cfd4 281 1c 0 18 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 cfe8 264 8 0 18 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 cfec 25f 4 0 18 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 cff0 25a 0 0 18 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 12e76 244 6 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 12e7c 23a 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 12e96 212 0 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7a1cd 2fc 10 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7a1d3 2f2 a 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 7a1dd 2e7 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 7a21d 2a6 0 0 c c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 7a4ce 1e2 6 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7a4d4 1d8 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7a58b 81 0 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 9bf8 87b 15 0 18 0 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 9c0c 85e 1 0 18 4 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 44 - ^ = -STACK WIN 4 9c0d 85c 0 0 18 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 44 - ^ = -STACK WIN 4 9c38 81d 0 0 18 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 44 - ^ = -STACK WIN 4 32c7b 10b f 0 20 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 32c84 41 6 0 20 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 32c85 3f 5 0 20 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 32c8a 39 0 0 20 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 a0d4 3c5 6 0 20 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 a0da 3bb 0 0 20 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 a0f1 387 0 0 20 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7a6b5 1b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7a6e2 1b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 35819 c 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 34474 45 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7a712 5c 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 336f6 3a 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 33735 3b 7 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7a773 7b e 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7a779 74 8 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 7a77a 72 7 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 7a781 6a 0 0 0 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 2f440 58 1c 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2f44b 3b 11 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2f45c 29 0 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7a7f3 58 9 0 4 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7a7fa 4d 2 0 4 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7a81b 23 0 0 4 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 37834 11f 15 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3783c 113 d 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 3783d 111 c 0 8 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 3783e 10f b 0 8 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 2f40d 7a d 0 0 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2f416 6f 4 0 0 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 2f417 6d 3 0 0 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 2f418 6b 2 0 0 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 7a850 5d 6 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7a856 53 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7a874 2c 0 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 124d1 109 c 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 124d7 ff 6 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 124dc f9 1 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 124dd f7 0 0 8 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 121de fc 3 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 121e1 f8 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1bdd2 1bc 9 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1bdd5 1b8 6 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1bddb 1b1 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 a2d4 85 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 a2dc 7c 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7a8b2 ab 3 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7a8b5 a7 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7a962 da 7 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7a968 cc 1 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7a969 ca 0 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7aa41 25 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7aa6b 25 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7aa95 302 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2ee51 3c6 d 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2ee57 3bc 7 0 14 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 2ee5d 3b5 1 0 14 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 2ee5e 3b3 0 0 14 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 7ad9c 5d 6 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ad9f 59 3 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ada0 57 2 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2c16a 58 4 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2c16d 54 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2c16e 52 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 12544 32 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2a5c3 13c 15 0 10 0 228 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2a5d4 bf 4 0 10 4 228 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 560 - ^ = -STACK WIN 4 2a5d8 ba 0 0 10 8 228 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 560 - ^ = -STACK WIN 4 2a615 6f 0 0 10 c 228 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 560 - ^ = -STACK WIN 4 12090 cb b 0 1c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 12096 c1 5 0 1c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 1209a bc 1 0 1c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 1209b ba 0 0 1c c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 14f5c 92 27 0 14 0 40c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 14f83 62 0 0 14 4 40c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 14fbe 16 0 0 14 8 40c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 397f8 1e2 19 0 4 0 644 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 39826 1a4 0 0 4 4 644 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 39827 1a2 0 0 4 8 644 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 384db f1 15 0 c 0 29c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 384ec d7 4 0 c 4 29c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 676 - ^ = -STACK WIN 4 384f0 d2 0 0 c 8 29c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 676 - ^ = -STACK WIN 4 38518 a3 0 0 c c 29c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 676 - ^ = -STACK WIN 4 3440e 61 6 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 34414 57 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7adfe 7c 6 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ae04 72 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ae7f de 2d 0 20 0 b0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ae9b b9 11 0 20 4 b0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 184 - ^ = -STACK WIN 4 7ae9f b4 d 0 20 8 b0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 184 - ^ = -STACK WIN 4 7aeac a6 0 0 20 c b0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 184 - ^ = -STACK WIN 4 7af62 72 7 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7afd9 70 1b 0 1c 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7aff4 4c 0 0 1c 4 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3472b 390 15 0 20 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 34740 377 0 0 20 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 34777 347 0 0 20 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3465d 1d3 43 0 20 0 b8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 34695 182 b 0 20 4 b8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 192 - ^ = -STACK WIN 4 3469c 17a 4 0 20 8 b8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 192 - ^ = -STACK WIN 4 346a0 175 0 0 20 c b8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 192 - ^ = -STACK WIN 4 7b04e 66c 43 0 20 0 bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7b086 1c3 b 0 20 4 bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 196 - ^ = -STACK WIN 4 7b08d 3aa 4 0 20 8 bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 196 - ^ = -STACK WIN 4 7b091 1b6 0 0 20 c bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 196 - ^ = -STACK WIN 4 344bc 388 3c 0 18 0 378 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 344ea fe e 0 18 4 378 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 896 - ^ = -STACK WIN 4 344f7 f0 1 0 18 8 378 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 896 - ^ = -STACK WIN 4 344f8 ee 0 0 18 c 378 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 896 - ^ = -STACK WIN 4 7b6ca 404 3c 0 18 0 420 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7b6f8 fe e 0 18 4 420 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1064 - ^ = -STACK WIN 4 7b705 f0 1 0 18 8 420 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1064 - ^ = -STACK WIN 4 7b706 ee 0 0 18 c 420 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1064 - ^ = -STACK WIN 4 3414d 30 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 339dc 69 9 0 4 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 339e5 5c 0 0 4 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7bad3 96 5 0 18 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7bb13 4e 0 0 18 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7bb6e e6 f 0 c 0 34 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7bb7b d5 2 0 c 4 34 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 60 - ^ = -STACK WIN 4 7bb7c d3 1 0 c 8 34 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 60 - ^ = -STACK WIN 4 7bb7d cf 0 0 c c 34 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 60 - ^ = -STACK WIN 4 7bc59 17d e 0 4 0 274 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7bc65 168 2 0 4 4 274 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 636 - ^ = -STACK WIN 4 7bc66 166 1 0 4 8 274 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 636 - ^ = -STACK WIN 4 7bc67 164 0 0 4 c 274 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 636 - ^ = -STACK WIN 4 7be1b 63 a 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7be24 56 1 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7be25 52 0 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7be83 c5 1d 0 c 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7bef3 35 0 0 c 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 335d4 33 5 0 18 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 33ec8 a54 4c 0 14 0 508 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 33eef a20 25 0 14 4 508 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1296 - ^ = -STACK WIN 4 33efe a10 16 0 14 8 508 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1296 - ^ = -STACK WIN 4 33f14 9f9 0 0 14 c 508 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1296 - ^ = -STACK WIN 4 7bf4d fd 18 0 8 0 34 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7bf56 f0 f 0 8 4 34 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 60 - ^ = -STACK WIN 4 7bf64 dd 1 0 8 8 34 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 60 - ^ = -STACK WIN 4 7bf65 d7 0 0 8 c 34 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 60 - ^ = -STACK WIN 4 7c04f 1d2 11 0 8 0 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7c058 1c5 8 0 8 4 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 7c059 1c3 7 0 8 8 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 7c060 1bb 0 0 8 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 7c86f 235 18 0 c 0 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7c887 1f0 0 0 c 4 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 44 - ^ = -STACK WIN 4 7c8a5 1ce 0 0 c 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 44 - ^ = -STACK WIN 4 7c8a6 1cc 0 0 c c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 44 - ^ = -STACK WIN 4 33fd3 1f2 25 0 18 0 2bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 33fea 17a e 0 18 4 2bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 708 - ^ = -STACK WIN 4 33ff4 16f 4 0 18 8 2bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 708 - ^ = -STACK WIN 4 33ff8 16a 0 0 18 c 2bc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 708 - ^ = -STACK WIN 4 33a4a 8c9 30 0 20 0 258 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 33a6c 50 e 0 20 4 258 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 608 - ^ = -STACK WIN 4 33a70 4b a 0 20 8 258 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 608 - ^ = -STACK WIN 4 33a7a 578 0 0 20 c 258 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 608 - ^ = -STACK WIN 4 33775 3fb 38 0 18 0 2d8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 3379f 308 e 0 18 4 2d8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 736 - ^ = -STACK WIN 4 337a3 303 a 0 18 8 2d8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 736 - ^ = -STACK WIN 4 337ad 2f8 0 0 18 c 2d8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 736 - ^ = -STACK WIN 4 c0ed 74 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 17fc1 82 9 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 17fc8 7a 2 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 17fc9 78 1 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 17fca 76 0 0 0 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 1805b 46 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 38617 37 9 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 38620 13 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7caa9 a6 9 0 0 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7cab1 9c 1 0 0 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7cab2 98 0 0 0 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 a557 9b e 0 0 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 a565 8b 0 0 0 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 17395 78 0 0 0 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7cb54 b5 1a 0 8 0 404 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7cb6d 93 1 0 8 4 404 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1036 - ^ = -STACK WIN 4 7cb6e 8f 0 0 8 8 404 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1036 - ^ = -STACK WIN 4 7cba2 57 0 0 8 c 404 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 1036 - ^ = -STACK WIN 4 188fc 146 7 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 18902 13c 1 0 14 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 18903 13a 0 0 14 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 1892c 10c 0 0 14 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 16ea9 130 f 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 16eb6 11f 2 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 16eb7 11d 1 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 16eb8 11b 0 0 10 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 336b6 9d e 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 336c4 8b 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 336d0 7d 0 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 336dd 6f 0 0 8 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 7cc2b 112 17 0 4 0 428 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7cc42 f2 0 0 4 4 428 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7cc60 d0 0 0 4 8 428 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7cd42 7f 7 0 0 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7cdc6 53 17 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7cdcc 49 11 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 7cdd4 40 9 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 7cddd 36 0 0 4 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 7ce1e 8d e 0 4 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ce30 76 0 0 4 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ce35 70 0 0 4 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 184dc db 12 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 184e6 cd 8 0 c 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 184e9 c9 5 0 c 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 18504 ad 0 0 c c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 7ceb0 9e d 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7cebb 8f 2 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 7cebc 8d 1 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 7cebd 8b 0 0 8 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 7cf53 2d 7 0 4 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 183fe 1fb 15 0 8 0 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1840f 1e1 4 0 8 4 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 172 - ^ = -STACK WIN 4 18413 1dc 0 0 8 8 a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 172 - ^ = -STACK WIN 4 1844e 196 0 0 8 c a4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 172 - ^ = -STACK WIN 4 3996f 176 1c 0 8 0 a0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 39980 15c b 0 8 4 a0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 168 - ^ = -STACK WIN 4 39984 157 7 0 8 8 a0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 168 - ^ = -STACK WIN 4 3998b 14f 0 0 8 c a0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 168 - ^ = -STACK WIN 4 1831e 16a b 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 18328 15c 1 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 18329 15a 0 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 d1ae 89 1e 0 0 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 d1b6 7f 16 0 0 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 d1c9 69 3 0 0 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 150c2 d6 20 0 0 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 150ca 9c 18 0 0 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 150cb 9a 17 0 0 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 150df 85 3 0 0 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 7cf85 204 16 0 8 0 a0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7cf96 1ea 5 0 8 4 a0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 168 - ^ = -STACK WIN 4 7cf9a 1e5 1 0 8 8 a0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 168 - ^ = -STACK WIN 4 7cf9b 1e3 0 0 8 c a0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 168 - ^ = -STACK WIN 4 7d1b9 88 8 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 18297 9a e 0 10 0 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 182a5 88 0 0 10 4 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7d246 f5 24 0 0 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7d24f a2 1b 0 0 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 7d250 a0 1a 0 0 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 7d267 88 3 0 0 c c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 7d340 65 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7d3aa ff 1d 0 14 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7d3bd e8 a 0 14 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 7d3be e6 9 0 14 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 7d3c7 dc 0 0 14 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 7d4ae 101 e 0 18 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7d4b7 f4 5 0 18 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 7d4b8 f2 4 0 18 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 7d4bc ed 0 0 18 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 17210 6e a 0 0 0 40 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 17219 63 1 0 0 4 40 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 1721a 5f 0 0 0 8 40 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7d5b4 a0 a 0 0 0 40 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7d5bd 95 1 0 0 4 40 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 72 - ^ = -STACK WIN 4 7d5be 93 0 0 0 8 40 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 72 - ^ = -STACK WIN 4 7d615 23 0 0 0 c 40 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 72 - ^ = -STACK WIN 4 2a25d 2a9 b 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2a268 26e 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2a41a 113 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7d659 5a 6 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7d65f 50 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7d690 1c 0 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2a855 82 14 0 10 0 21c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2a869 65 0 0 10 4 21c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 11fff 23f 9 0 18 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 12006 234 2 0 18 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 12007 232 1 0 18 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 12008 230 0 0 18 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 2a532 8e 13 0 4 0 ac 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2a543 74 2 0 4 4 ac 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 180 - ^ = -STACK WIN 4 2a544 70 1 0 4 8 ac 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 180 - ^ = -STACK WIN 4 2a545 6e 0 0 4 c ac 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 180 - ^ = -STACK WIN 4 7d6b7 a9 15 0 c 0 c8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7d6c8 8f 4 0 c 4 c8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 208 - ^ = -STACK WIN 4 7d6cc 8a 0 0 c 8 c8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 208 - ^ = -STACK WIN 4 7d700 40 0 0 c c c8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 208 - ^ = -STACK WIN 4 16ff1 9a 16 0 8 0 c8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 17002 80 5 0 8 4 c8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 208 - ^ = -STACK WIN 4 17003 7e 4 0 8 8 c8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 208 - ^ = -STACK WIN 4 17007 79 0 0 8 c c8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 208 - ^ = -STACK WIN 4 7d765 25f 2b 0 1c 0 dc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7d77f 12f 11 0 1c 4 dc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 228 - ^ = -STACK WIN 4 7d78c 121 4 0 1c 8 dc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 228 - ^ = -STACK WIN 4 7d790 11c 0 0 1c c dc 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 228 - ^ = -STACK WIN 4 7d9c9 40 21 0 0 0 c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7da0e 6c 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7da14 62 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7da47 15 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7da7f 13e b 0 10 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7da86 12e 4 0 10 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 7da89 12a 1 0 10 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 7da8a 128 0 0 10 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 31054 21d 13 0 14 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 31060 20d 7 0 14 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 31064 208 3 0 14 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 31067 204 0 0 14 c c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 7dc45 196 16 0 10 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7dc4c 17a f 0 10 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 7dc52 173 9 0 10 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 7dc5b 169 0 0 10 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 21523 2c6 d 0 10 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2152e 2b7 2 0 10 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 2152f 2b5 1 0 10 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 21530 2b3 0 0 10 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 30f99 bb 9 0 18 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 30fa0 b0 2 0 18 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 30fa1 ae 1 0 18 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 30fa2 ac 0 0 18 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 215f5 a1 13 0 20 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 215fc 96 c 0 20 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 215fd 94 b 0 20 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 21608 88 0 0 20 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 2ad39 5a 17 0 c 0 c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 2ad50 3a 0 0 c 4 c4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7dead b 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7debd e1 1a 0 4 0 118 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7df16 75 0 0 4 4 118 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7df17 73 0 0 4 8 118 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7dfad 84 13 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7dfc0 6d 0 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7dfcd 5b 0 0 8 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e036 44 c 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e041 35 1 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 7e042 31 0 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 7e04a 28 0 0 8 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 7e07f 47 6 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e085 3d 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e0cb 1f e 0 14 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e0ef 1f e 0 18 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e113 1f e 0 18 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e137 1f e 0 14 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e15b b 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e16b f 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e17f f 0 0 14 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e193 f 0 0 28 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e1a7 f 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e1bb f 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e1cf f 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ddf5 4 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e1e3 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e1ec 8 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e1f9 15 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e213 15 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e22d 15 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e247 2f 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e27b 19 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e299 d 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e2ab d 0 0 18 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e2bd d 0 0 24 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e2cf 14 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e2e8 4 0 0 2c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e2f1 10 5 0 1c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e306 8 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e313 5 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e31d 18 5 0 18 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e33a c 0 0 18 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e34b 5 0 0 28 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e355 8 0 0 28 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e362 5 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e36c c 0 0 14 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e37d 6 0 0 18 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e388 6 0 0 14 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e393 6 0 0 20 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e39e 6 0 0 18 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14ae7 6 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e3a9 6 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e3b4 6 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e3bf 6 0 0 14 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e3ca 19 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e3e8 8 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e3f5 21 5 0 18 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e41b 1b 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e43b 6 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e446 11 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e45c 8 0 0 14 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e469 c 0 0 1c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e47a a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e489 8 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e496 5 0 0 20 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e4a0 c 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e4b1 8 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e4be c 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e4cf c 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e4e0 c 0 0 14 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e4f1 1d 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e513 1e 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e536 c 0 0 18 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e547 e 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e55a c 0 0 28 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e56b 8 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e593 8 0 0 28 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e5a0 17 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e5bc 8 0 0 34 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e5c9 5 0 0 28 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e5d3 5 0 0 24 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e5dd 13 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e5f5 a 0 0 14 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e604 c 0 0 30 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e615 d 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e627 14 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e640 14 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e659 8 0 0 14 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e666 14 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e67f 18 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e69c 8 0 0 1c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e6a9 8 0 0 14 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e6b6 8 0 0 1c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e6c3 6 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e6ed 18 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e728 8 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 cc97 c 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e735 8 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e742 c 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e753 f 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e767 10 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e77c 12 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e793 14 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e7ac c 5 0 18 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e7bd 1b 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e7dd 10 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e7f2 6 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e7fd 6 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e808 14 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e821 15 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e83b 8 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e848 5 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e878 5 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e88d 5 0 0 18 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 260c2 5 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e897 c 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e8a8 5 0 0 14 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e8b2 5 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e8bc 14 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e8d5 14 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e8ee 14 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e907 15 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e90d b 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e921 1f 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e945 c 5 0 18 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e956 14 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e96f 19 6 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e975 f 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e98d 3 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e995 14 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e9ae 8 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e9bb 1a 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7e9da 8 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e9e7 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7e9f0 14 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ea09 14 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ea22 19 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ea40 8 0 0 1c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ea4d 5 0 0 1c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ea57 6 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ea62 6 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ea6d 6 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ea78 6 0 0 18 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ea83 6 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ea8e 6 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ea99 6 0 0 1c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7eaa4 6 0 0 14 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7eaaf 12 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7eac6 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7eacf c 0 0 20 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7eae0 d 0 0 1c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7eaf2 d 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7eb04 b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7eb14 23 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7eb3c d 0 0 14 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7eb4e d 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7eb60 5 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7eb6a 8 0 0 38 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7eb77 5 0 0 14 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7eb81 6 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7eb8c 8 0 0 1c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ebbe 8 0 0 18 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ebcb 8 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ebd8 8 0 0 14 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ebe5 8 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ebf2 8 0 0 24 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ebff 8 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ec0c 8 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ec19 3 0 0 18 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ec21 8 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ec2e 19 6 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ec34 f 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ec4c 8 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ec59 3 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ec61 15 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ec7b 18 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ec98 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7eca1 19 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ecbf 8 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7eccc 8 0 0 18 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ecd9 8 0 0 24 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ece6 8 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ed3f 3 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ed47 8 0 0 1c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ed54 5 0 0 38 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ed69 10 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ed7e 15 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ed98 8 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7eda5 8 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7edb2 8 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7edbf 8 0 0 2c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7edcc 8 0 0 14 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7edd9 8 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ede6 8 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7edf3 14 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ee0c 14 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ee25 19 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ee2b f 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ee43 19 6 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ee49 f 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ee61 6 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ee6c 8 0 0 20 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ee79 8 0 0 20 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ee86 8 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ee93 8 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7eea0 8 0 0 1c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7eead 6 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7eeb8 8 0 0 24 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7eec5 8 0 0 18 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7eed2 8 0 0 14 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7eedf 8 0 0 20 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7eeec 14 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ef05 14 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ef1e 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ef29 14 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ef42 14 5 0 1c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ef5b 1b 6 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ef61 11 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ef7b 14 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ef94 7 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7efa0 7 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7efac 7 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7efb8 7 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7efc4 7 0 0 28 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7efd0 7 0 0 20 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7efdc 6 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7efe7 6 0 0 18 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7eff2 12 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f009 12 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f020 19 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f03e f 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f052 3 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f05a 3 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f062 6 0 0 2c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f06d 6 0 0 30 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f078 3 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f093 18 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f0b0 6 0 0 20 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f0bb 5 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f0c5 6 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f0f5 3 0 0 14 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f0fd 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f108 18 5 0 18 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f125 8 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f132 5 0 0 2c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f13c 6 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f147 6 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f152 6 0 0 14 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f17e 18 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f19b c 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f1ac 6 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f1d0 6 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f1db 6 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f1e6 6 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f1f1 6 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f1fe 1 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f204 c 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f215 6 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f220 16 5 0 20 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f23b 6 0 0 1c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f246 6 0 0 24 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f251 6 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f25c 18 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f279 18 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f296 27 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f2c2 6 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f2cd 8 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f2da 6 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f2e5 8 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f309 30 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f317 1b 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f31a 15 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f33e 3a 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f356 1b 0 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f359 15 0 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f37d 3e 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f399 1b 0 0 14 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f39c 15 0 0 14 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f3c0 7 0 0 1c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f3cc 7 0 0 24 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f3d8 1b 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f3f8 1b 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f418 16 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f433 16 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f44e 16 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f469 16 5 0 1c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f484 16 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f49f 6 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f4aa 6 0 0 18 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f4b5 6 0 0 1c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f4c0 6 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f4cb 16 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f4e6 17 5 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f502 6 0 0 24 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f50d 6 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f518 19 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f51e f 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f536 6 0 0 14 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f541 16 5 0 18 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f55c 6 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f567 16 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f582 16 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f59d c 0 0 24 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f5ae 6 0 0 1c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f5b9 6 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f5c4 6 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f5cf 6 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f5da 6 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f5e5 6 0 0 14 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f5f0 6 0 0 18 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f5fb 6 0 0 20 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f606 f 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f61a f 0 0 14 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f62e d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f640 10 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f655 f 0 0 18 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f669 f 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f67d f 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f691 f 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f6a5 8 0 0 5c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f6b2 c 0 0 2c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f6c3 6 0 0 28 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f6ce 6 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f6d9 5 0 0 30 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f6e3 13 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f6fb 12 5 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f712 1a 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f731 8 0 0 20 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f73e 22 5 0 30 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f765 18 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f782 8 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f78f 20 5 0 24 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f7b4 16 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f7cf 20 5 0 18 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f7f4 16 5 0 20 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f80f 15 5 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f829 18 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f846 8 0 0 14 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f95b 222 a 0 4 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7f964 217 1 0 4 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 7f965 215 0 0 4 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 7f994 1e5 0 0 4 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 7fb8d ae 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7fb93 a0 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7fbdd 55 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7fc40 12 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7fc57 49 6 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7fc5d 3f 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7fca5 b9 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7fcab af 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 7fcdd 7c 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 7fceb 6d 0 0 c c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 7fd63 b9 13 0 c 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7fd71 a2 5 0 c 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 7fd72 a0 4 0 c 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 7fd76 9b 0 0 c c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 7fe21 30 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7fe56 47 a 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7fe5c 3d 4 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7fe60 38 0 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7fea2 30 5 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7fed7 41 6 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7fedd 37 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ff1d 5a 7 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ff23 50 1 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ff24 4e 0 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ff89 65 7 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7ff8f 5b 1 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 7ff90 57 0 0 4 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 7fff3 104 a 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7fff9 fa 4 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 7fffd f5 0 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 800fc 45 8 0 8 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 80146 ae 16 0 c 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 80154 97 8 0 c 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 80158 92 4 0 c 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 8015c 8d 0 0 c c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 801f9 3f 12 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 80207 28 4 0 4 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 8020b 22 0 0 4 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 80246 262 c 0 18 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 8024d 257 5 0 18 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 8024e 255 4 0 18 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 80252 250 0 0 18 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 804ad 75 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 804b3 6b 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 80527 4d 7 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 8052d 43 1 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 8052e 41 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 80579 5e 7 0 4 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 805dc 5e 7 0 4 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 8063f 2f e 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 4 8064d 1d 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 4 + .cbParams + = -STACK WIN 0 17826 35 0 0 0 0 0 0 0 0 -STACK WIN 0 558b4 e 0 0 0 0 0 0 0 0 -STACK WIN 0 39bc8 e 0 0 0 0 0 0 0 0 -STACK WIN 0 30769 a 0 0 0 0 0 0 0 0 -STACK WIN 0 b722 20 0 0 0 0 0 0 0 0 -STACK WIN 0 1b069 a1 0 0 0 0 0 0 0 0 -STACK WIN 0 17860 24 0 0 0 0 0 0 0 0 -STACK WIN 0 1795e 89 3 0 0 0 0 0 0 0 -STACK WIN 0 39e42 e 0 0 0 0 0 0 0 0 -STACK WIN 0 39ea2 e 0 0 0 0 0 0 0 0 -STACK WIN 0 39eca e 0 0 0 0 0 0 0 0 -STACK WIN 0 1717 4 0 0 0 0 0 0 0 0 -STACK WIN 0 39f0b e 0 0 0 0 0 0 0 0 -STACK WIN 0 39f69 e 0 0 0 0 0 0 0 0 -STACK WIN 0 55abf e 0 0 0 0 0 0 0 0 -STACK WIN 0 55b65 e 0 0 0 0 0 0 0 0 -STACK WIN 0 3a7c5 e 0 0 0 0 0 0 0 0 -STACK WIN 0 3a824 e 0 0 0 0 0 0 0 0 -STACK WIN 0 3a86a 19 0 0 0 0 0 0 0 0 -STACK WIN 0 3a94d e 0 0 0 0 0 0 0 0 -STACK WIN 0 3a995 19 0 0 0 0 0 0 0 0 -STACK WIN 0 3a9c6 e 0 0 0 0 0 0 0 0 -STACK WIN 0 3aa01 4 0 0 0 0 0 0 0 0 -STACK WIN 0 3aa1d e 0 0 0 0 0 0 0 0 -STACK WIN 0 2c86d 29 0 0 0 0 0 0 0 0 -STACK WIN 0 3aad0 4 0 0 0 0 0 0 0 0 -STACK WIN 0 3ab10 11 0 0 0 0 0 0 0 0 -STACK WIN 0 3abe7 7a 0 0 0 0 0 0 0 0 -STACK WIN 0 98eb 4 0 0 0 0 0 0 0 0 -STACK WIN 0 9766 11 0 0 4 0 0 0 0 0 -STACK WIN 0 977a 11 0 0 4 0 0 0 0 0 -STACK WIN 0 978e 13 0 0 8 0 0 0 0 0 -STACK WIN 0 97a2 13 0 0 c 0 0 0 0 0 -STACK WIN 0 97b6 f 0 0 8 0 0 0 0 0 -STACK WIN 0 97c6 120 0 0 c 0 0 0 0 0 -STACK WIN 0 2ff92 18 0 0 0 0 0 0 0 0 -STACK WIN 0 929c f 0 0 0 0 0 0 0 0 -STACK WIN 0 13093 e 0 0 0 0 0 0 0 0 -STACK WIN 0 59b72 5 0 0 0 0 0 0 0 0 -STACK WIN 0 59dd6 4 0 0 0 0 0 0 0 0 -STACK WIN 0 59f9f 14 0 0 0 0 0 0 0 0 -STACK WIN 0 30cce 1c 0 0 0 0 0 0 0 0 -STACK WIN 0 1c858 6a 3 0 0 0 0 0 0 0 -STACK WIN 0 3bde2 e 0 0 0 0 0 0 0 0 -STACK WIN 0 3c06f 15 0 0 0 0 0 0 0 0 -STACK WIN 0 5c223 1e 0 0 0 0 0 0 0 0 -STACK WIN 0 3c77a 2c 0 0 0 0 0 0 0 0 -STACK WIN 0 f049 e 0 0 0 0 0 0 0 0 -STACK WIN 0 3c85e e 0 0 0 0 0 0 0 0 -STACK WIN 0 18ef e 0 0 0 0 0 0 0 0 -STACK WIN 0 1921 4 0 0 0 0 0 0 0 0 -STACK WIN 0 3cac5 4 0 0 0 0 0 0 0 0 -STACK WIN 0 5c6de b 0 0 0 0 0 0 0 0 -STACK WIN 0 5cbad 1 0 0 0 0 0 0 0 0 -STACK WIN 0 5d0d4 1 0 0 0 0 0 0 0 0 -STACK WIN 0 5d2ff 39 0 0 0 0 0 0 0 0 -STACK WIN 0 1f951 3c 0 0 0 0 0 0 0 0 -STACK WIN 0 3d377 4 0 0 0 0 0 0 0 0 -STACK WIN 0 5d93e 4d 0 0 0 0 0 0 0 0 -STACK WIN 0 5de3f 1a 0 0 0 0 0 0 0 0 -STACK WIN 0 5e00f 1 0 0 0 0 0 0 0 0 -STACK WIN 0 3d7a4 10 0 0 0 0 0 0 0 0 -STACK WIN 0 3d9cf 10 0 0 0 0 0 0 0 0 -STACK WIN 0 3e895 11 0 0 0 0 0 0 0 0 -STACK WIN 0 3eadf ab 0 0 0 0 0 0 0 0 -STACK WIN 0 3f743 134 0 0 0 0 0 0 0 0 -STACK WIN 0 3ffbd 3e 0 0 0 0 0 0 0 0 -STACK WIN 0 27b99 1d 0 0 0 0 0 0 0 0 -STACK WIN 0 200d1 1d 0 0 0 0 0 0 0 0 -STACK WIN 0 40019 e 0 0 0 0 0 0 0 0 -STACK WIN 0 401f7 e 0 0 0 0 0 0 0 0 -STACK WIN 0 40258 e 0 0 0 0 0 0 0 0 -STACK WIN 0 4029c e 0 0 0 0 0 0 0 0 -STACK WIN 0 402de e 0 0 0 0 0 0 0 0 -STACK WIN 0 40327 e 0 0 0 0 0 0 0 0 -STACK WIN 0 403bd e 0 0 0 0 0 0 0 0 -STACK WIN 0 40414 e 0 0 0 0 0 0 0 0 -STACK WIN 0 4043c e 0 0 0 0 0 0 0 0 -STACK WIN 0 5e670 11 0 0 4 0 0 0 0 0 -STACK WIN 0 404b7 e 0 0 0 0 0 0 0 0 -STACK WIN 0 1d07e 8 0 0 0 0 0 0 0 0 -STACK WIN 0 365f6 b 0 0 0 0 0 0 0 0 -STACK WIN 0 3594f 6 0 0 0 0 0 0 0 0 -STACK WIN 0 17443 11 0 0 0 0 0 0 0 0 -STACK WIN 0 407a9 4 0 0 0 0 0 0 0 0 -STACK WIN 0 407c5 4 0 0 0 0 0 0 0 0 -STACK WIN 0 407e1 4 0 0 0 0 0 0 0 0 -STACK WIN 0 407fd 4 0 0 0 0 0 0 0 0 -STACK WIN 0 40817 4 0 0 0 0 0 0 0 0 -STACK WIN 0 40833 4 0 0 0 0 0 0 0 0 -STACK WIN 0 4084f 4 0 0 0 0 0 0 0 0 -STACK WIN 0 40892 e 0 0 0 0 0 0 0 0 -STACK WIN 0 5e882 11 0 0 8 0 0 0 0 0 -STACK WIN 0 abc1 d 0 0 0 0 0 0 0 0 -STACK WIN 0 40a26 16 0 0 0 0 0 0 0 0 -STACK WIN 0 40b63 e 0 0 0 0 0 0 0 0 -STACK WIN 0 40c62 17 0 0 0 0 0 0 0 0 -STACK WIN 0 111da 31 0 0 0 0 0 0 0 0 -STACK WIN 0 5eee3 8 0 0 c 0 0 0 0 0 -STACK WIN 0 1c8c e 0 0 0 0 0 0 0 0 -STACK WIN 0 40cf3 e 0 0 0 0 0 0 0 0 -STACK WIN 0 40d2a e 0 0 0 0 0 0 0 0 -STACK WIN 0 40d78 e 0 0 0 0 0 0 0 0 -STACK WIN 0 40da4 e 0 0 0 0 0 0 0 0 -STACK WIN 0 40dd0 e 0 0 0 0 0 0 0 0 -STACK WIN 0 40e00 e 0 0 0 0 0 0 0 0 -STACK WIN 0 5f1bf e 0 0 0 0 0 0 0 0 -STACK WIN 0 5f3e0 e 0 0 0 0 0 0 0 0 -STACK WIN 0 40e66 e 0 0 0 0 0 0 0 0 -STACK WIN 0 40e92 e 0 0 0 0 0 0 0 0 -STACK WIN 0 5f5c9 e 0 0 0 0 0 0 0 0 -STACK WIN 0 5f72a e 0 0 0 0 0 0 0 0 -STACK WIN 0 5f9fa 4 0 0 0 0 0 0 0 0 -STACK WIN 0 5fa2d 1e 0 0 0 0 0 0 0 0 -STACK WIN 0 40faa 4 0 0 0 0 0 0 0 0 -STACK WIN 0 40fe6 4 0 0 0 0 0 0 0 0 -STACK WIN 0 5fc02 9 0 0 0 0 0 0 0 0 -STACK WIN 0 11419 21 0 0 0 0 0 0 0 0 -STACK WIN 0 4171b 4 0 0 0 0 0 0 0 0 -STACK WIN 0 41748 48 0 0 0 0 0 0 0 0 -STACK WIN 0 607cb 30 0 0 0 0 0 0 0 0 -STACK WIN 0 418d1 3f 0 0 0 0 0 0 0 0 -STACK WIN 0 60b60 a 0 0 0 0 0 0 0 0 -STACK WIN 0 60bbf f 0 0 8 0 0 0 0 0 -STACK WIN 0 41b32 7 0 0 0 0 0 0 0 0 -STACK WIN 0 21af 7 0 0 0 0 0 0 0 0 -STACK WIN 0 12f1d 6 0 0 0 0 0 0 0 0 -STACK WIN 0 16f83 6 0 0 0 0 0 0 0 0 -STACK WIN 0 12f08 10 0 0 0 0 0 0 0 0 -STACK WIN 0 9920 a 0 0 0 0 0 0 0 0 -STACK WIN 0 41c56 4 0 0 0 0 0 0 0 0 -STACK WIN 0 41c70 4 0 0 0 0 0 0 0 0 -STACK WIN 0 41c8a 4 0 0 0 0 0 0 0 0 -STACK WIN 0 41ca4 4 0 0 0 0 0 0 0 0 -STACK WIN 0 41dcc 10 0 0 0 0 0 0 0 0 -STACK WIN 0 43025 4 0 0 0 0 0 0 0 0 -STACK WIN 0 1e017 2eb 0 0 0 0 0 0 0 0 -STACK WIN 0 43374 14 0 0 0 0 0 0 0 0 -STACK WIN 0 434b2 17 0 0 0 0 0 0 0 0 -STACK WIN 0 434e5 60 0 0 0 0 0 0 0 0 -STACK WIN 0 61723 e 0 0 0 0 0 0 0 0 -STACK WIN 0 435d2 e 0 0 0 0 0 0 0 0 -STACK WIN 0 132ee 6 0 0 0 0 0 0 0 0 -STACK WIN 0 617fd e 0 0 0 0 0 0 0 0 -STACK WIN 0 436ca 11 0 0 0 0 0 0 0 0 -STACK WIN 0 437f5 10 0 0 0 0 0 0 0 0 -STACK WIN 0 438be 4a 0 0 0 0 0 0 0 0 -STACK WIN 0 31d8e f 0 0 0 0 0 0 0 0 -STACK WIN 0 1a834 36 0 0 0 0 0 0 0 0 -STACK WIN 0 2610 b 0 0 0 0 0 0 0 0 -STACK WIN 0 36759 b 0 0 0 0 0 0 0 0 -STACK WIN 0 951a b 0 0 0 0 0 0 0 0 -STACK WIN 0 2432 b 0 0 0 0 0 0 0 0 -STACK WIN 0 61a61 b 0 0 0 0 0 0 0 0 -STACK WIN 0 1746c 23 0 0 0 0 0 0 0 0 -STACK WIN 0 17459 10e 0 0 0 0 0 0 0 0 -STACK WIN 0 1efce 12 0 0 0 0 0 0 0 0 -STACK WIN 0 129f9 b 0 0 0 0 0 0 0 0 -STACK WIN 0 44733 c 0 0 0 0 0 0 0 0 -STACK WIN 0 9728 a 0 0 0 0 0 0 0 0 -STACK WIN 0 62be6 4 0 0 0 0 0 0 0 0 -STACK WIN 0 448d9 a 0 0 0 0 0 0 0 0 -STACK WIN 0 13771 7 0 0 0 0 0 0 0 0 -STACK WIN 0 2c151 14 0 0 0 0 0 0 0 0 -STACK WIN 0 2fed7 40 0 0 0 0 0 0 0 0 -STACK WIN 0 32992 13 0 0 0 0 0 0 0 0 -STACK WIN 0 63421 4 0 0 0 0 0 0 0 0 -STACK WIN 0 6362b 4 0 0 0 0 0 0 0 0 -STACK WIN 0 636d3 4 0 0 0 0 0 0 0 0 -STACK WIN 0 6452a e 0 0 0 0 0 0 0 0 -STACK WIN 0 6665c 1c 0 0 0 0 0 0 0 0 -STACK WIN 0 66682 b 0 0 0 0 0 0 0 0 -STACK WIN 0 66801 3b 0 0 0 0 0 0 0 0 -STACK WIN 0 66918 1a 0 0 0 0 0 0 0 0 -STACK WIN 0 669cd 3b 0 0 0 0 0 0 0 0 -STACK WIN 0 66ae8 1a 0 0 0 0 0 0 0 0 -STACK WIN 0 66b9d 3b 0 0 0 0 0 0 0 0 -STACK WIN 0 66cbf 1a 0 0 0 0 0 0 0 0 -STACK WIN 0 67093 11 0 0 0 0 0 0 0 0 -STACK WIN 0 675f4 11 0 0 0 0 0 0 0 0 -STACK WIN 0 677e9 11 0 0 0 0 0 0 0 0 -STACK WIN 0 67941 11 0 0 0 0 0 0 0 0 -STACK WIN 0 67dd6 2c 0 0 0 0 0 0 0 0 -STACK WIN 0 1f571 50 0 0 0 0 0 0 0 0 -STACK WIN 0 68496 4a 0 0 0 0 0 0 0 0 -STACK WIN 0 1366c 45 0 0 0 0 0 0 0 0 -STACK WIN 0 29b93 127 0 0 0 0 0 0 0 0 -STACK WIN 0 44db3 55 0 0 0 0 0 0 0 0 -STACK WIN 0 68734 55 0 0 0 0 0 0 0 0 -STACK WIN 0 69ce0 21 0 0 0 0 0 0 0 0 -STACK WIN 0 69e0e 21 0 0 0 0 0 0 0 0 -STACK WIN 0 69f2a 21 0 0 0 0 0 0 0 0 -STACK WIN 0 6a054 21 0 0 0 0 0 0 0 0 -STACK WIN 0 453fe 21 0 0 0 0 0 0 0 0 -STACK WIN 0 6a220 21 0 0 0 0 0 0 0 0 -STACK WIN 0 6a339 21 0 0 0 0 0 0 0 0 -STACK WIN 0 6a4e8 11 0 0 0 0 0 0 0 0 -STACK WIN 0 6a4fe c7 0 0 0 0 0 0 0 0 -STACK WIN 0 6a5ca 3e 0 0 0 0 0 0 0 0 -STACK WIN 0 6b5b5 48 0 0 0 0 0 0 0 0 -STACK WIN 0 6b683 c 0 0 4 0 0 0 0 0 -STACK WIN 0 2146c c 0 0 8 0 0 0 0 0 -STACK WIN 0 6b694 a 0 0 0 0 0 0 0 0 -STACK WIN 0 45f23 e 0 0 0 0 0 0 0 0 -STACK WIN 0 165e9 13 0 0 0 0 0 0 0 0 -STACK WIN 0 46631 e 0 0 0 0 0 0 0 0 -STACK WIN 0 46678 4 0 0 0 0 0 0 0 0 -STACK WIN 0 466a9 4 0 0 0 0 0 0 0 0 -STACK WIN 0 466d4 4 0 0 0 0 0 0 0 0 -STACK WIN 0 6bc8a 4 0 0 0 0 0 0 0 0 -STACK WIN 0 6be06 7f 3 0 0 0 0 0 0 0 -STACK WIN 0 6fe04 4 0 0 0 0 0 0 0 0 -STACK WIN 0 189fc 28 0 0 0 0 0 0 0 0 -STACK WIN 0 6ff09 4 0 0 0 0 0 0 0 0 -STACK WIN 0 70245 8 0 0 0 0 0 0 0 0 -STACK WIN 0 70252 8 0 0 0 0 0 0 0 0 -STACK WIN 0 70362 4 0 0 0 0 0 0 0 0 -STACK WIN 0 704cb 4 0 0 0 0 0 0 0 0 -STACK WIN 0 70927 4 0 0 0 0 0 0 0 0 -STACK WIN 0 4677c 4 0 0 0 0 0 0 0 0 -STACK WIN 0 70a99 4 0 0 0 0 0 0 0 0 -STACK WIN 0 467de 4 0 0 0 0 0 0 0 0 -STACK WIN 0 70b3f c 0 0 0 0 0 0 0 0 -STACK WIN 0 1b3c1 c 0 0 0 0 0 0 0 0 -STACK WIN 0 4687c 4 0 0 0 0 0 0 0 0 -STACK WIN 0 70fe7 12 0 0 0 0 0 0 0 0 -STACK WIN 0 7108d 4f 4 0 0 0 0 0 0 0 -STACK WIN 0 712e3 17 0 0 0 0 0 0 0 0 -STACK WIN 0 714d7 c 0 0 0 0 0 0 0 0 -STACK WIN 0 715db c 0 0 0 0 0 0 0 0 -STACK WIN 0 715f9 6 0 0 0 0 0 0 0 0 -STACK WIN 0 468d9 4 0 0 0 0 0 0 0 0 -STACK WIN 0 468e9 4 0 0 0 0 0 0 0 0 -STACK WIN 0 71674 4 0 0 0 0 0 0 0 0 -STACK WIN 0 46968 4 0 0 0 0 0 0 0 0 -STACK WIN 0 7189d 11 0 0 0 0 0 0 0 0 -STACK WIN 0 7199c 4 0 0 0 0 0 0 0 0 -STACK WIN 0 71be9 4 0 0 0 0 0 0 0 0 -STACK WIN 0 71ca8 4 0 0 0 0 0 0 0 0 -STACK WIN 0 469a3 4 0 0 0 0 0 0 0 0 -STACK WIN 0 72188 4 0 0 0 0 0 0 0 0 -STACK WIN 0 7236f 4 0 0 0 0 0 0 0 0 -STACK WIN 0 7237f 4 0 0 0 0 0 0 0 0 -STACK WIN 0 72787 4 0 0 0 0 0 0 0 0 -STACK WIN 0 72aa3 4 0 0 0 0 0 0 0 0 -STACK WIN 0 72c86 4 0 0 0 0 0 0 0 0 -STACK WIN 0 72e4c 4 0 0 0 0 0 0 0 0 -STACK WIN 0 72e5c 4 0 0 0 0 0 0 0 0 -STACK WIN 0 72fbb 4 0 0 0 0 0 0 0 0 -STACK WIN 0 7314a 4 0 0 0 0 0 0 0 0 -STACK WIN 0 731c9 4 0 0 0 0 0 0 0 0 -STACK WIN 0 732a4 4 0 0 0 0 0 0 0 0 -STACK WIN 0 73326 4 0 0 0 0 0 0 0 0 -STACK WIN 0 73432 4 0 0 0 0 0 0 0 0 -STACK WIN 0 735db 4 0 0 0 0 0 0 0 0 -STACK WIN 0 73692 4 0 0 0 0 0 0 0 0 -STACK WIN 0 73748 4 0 0 0 0 0 0 0 0 -STACK WIN 0 73854 4 0 0 0 0 0 0 0 0 -STACK WIN 0 739d1 4 0 0 0 0 0 0 0 0 -STACK WIN 0 73d11 4 0 0 0 0 0 0 0 0 -STACK WIN 0 73de7 4 0 0 0 0 0 0 0 0 -STACK WIN 0 73ee3 4 0 0 0 0 0 0 0 0 -STACK WIN 0 74497 4 0 0 0 0 0 0 0 0 -STACK WIN 0 469dd 4 0 0 0 0 0 0 0 0 -STACK WIN 0 745dd 4 0 0 0 0 0 0 0 0 -STACK WIN 0 469fe 4 0 0 0 0 0 0 0 0 -STACK WIN 0 7487a 4 0 0 0 0 0 0 0 0 -STACK WIN 0 74a7a 4 0 0 0 0 0 0 0 0 -STACK WIN 0 74b86 c 0 0 0 0 0 0 0 0 -STACK WIN 0 7507d 4 0 0 0 0 0 0 0 0 -STACK WIN 0 7521c 4 0 0 0 0 0 0 0 0 -STACK WIN 0 75271 b 0 0 4 0 0 0 0 0 -STACK WIN 0 75348 4 0 0 0 0 0 0 0 0 -STACK WIN 0 753b9 c 0 0 0 0 0 0 0 0 -STACK WIN 0 75454 c 0 0 0 0 0 0 0 0 -STACK WIN 0 754d3 f 0 0 0 0 0 0 0 0 -STACK WIN 0 756a5 4 0 0 0 0 0 0 0 0 -STACK WIN 0 763c9 21 0 0 0 0 0 0 0 0 -STACK WIN 0 a415 d 0 0 0 0 0 0 0 0 -STACK WIN 0 13038 2d 0 0 0 0 0 0 0 0 -STACK WIN 0 127b2 7 0 0 0 0 0 0 0 0 -STACK WIN 0 bf3d 6 0 0 0 0 0 0 0 0 -STACK WIN 0 bf64 5 0 0 0 0 0 0 0 0 -STACK WIN 0 9915 6 0 0 0 0 0 0 0 0 -STACK WIN 0 127a7 6 0 0 0 0 0 0 0 0 -STACK WIN 0 7a6b5 1b 0 0 0 0 0 0 0 0 -STACK WIN 0 7a6e2 1b 0 0 0 0 0 0 0 0 -STACK WIN 0 35819 c 0 0 0 0 0 0 0 0 -STACK WIN 0 7a773 7b e 0 0 0 0 0 0 0 -STACK WIN 0 121de fc 3 0 0 0 0 0 0 0 -STACK WIN 0 1bdd2 1bc 9 0 0 0 0 0 0 0 -STACK WIN 0 a2d4 85 2 0 0 0 0 0 0 0 -STACK WIN 0 7a8b2 ab 3 0 0 0 0 0 0 0 -STACK WIN 0 7ad9c 5d 6 0 0 0 0 0 0 0 -STACK WIN 0 2c16a 58 4 0 0 0 0 0 0 0 -STACK WIN 0 c0ed 74 0 0 0 0 0 0 0 0 -STACK WIN 0 17fc1 82 9 0 0 0 0 0 0 0 -STACK WIN 0 2a41a 113 0 0 0 0 0 0 0 0 -STACK WIN 0 7e16b f 0 0 c 0 0 0 0 0 -STACK WIN 0 7e17f f 0 0 14 0 0 0 0 0 -STACK WIN 0 7e193 f 0 0 28 0 0 0 0 0 -STACK WIN 0 7e1a7 f 0 0 4 0 0 0 0 0 -STACK WIN 0 7e1bb f 0 0 8 0 0 0 0 0 -STACK WIN 0 7e1cf f 0 0 10 0 0 0 0 0 -STACK WIN 0 ddf5 4 0 0 0 0 0 0 0 0 -STACK WIN 0 7e1e3 4 0 0 0 0 0 0 0 0 -STACK WIN 0 7e1ec 8 0 0 8 0 0 0 0 0 -STACK WIN 0 7e299 d 0 0 c 0 0 0 0 0 -STACK WIN 0 7e2ab d 0 0 18 0 0 0 0 0 -STACK WIN 0 7e2bd d 0 0 24 0 0 0 0 0 -STACK WIN 0 7e2e8 4 0 0 10 0 0 0 0 0 -STACK WIN 0 7e306 8 0 0 c 0 0 0 0 0 -STACK WIN 0 7e313 5 0 0 4 0 0 0 0 0 -STACK WIN 0 7e33a c 0 0 18 0 0 0 0 0 -STACK WIN 0 7e34b 5 0 0 28 0 0 0 0 0 -STACK WIN 0 7e355 8 0 0 28 0 0 0 0 0 -STACK WIN 0 7e362 5 0 0 8 0 0 0 0 0 -STACK WIN 0 7e36c c 0 0 14 0 0 0 0 0 -STACK WIN 0 7e37d 6 0 0 18 0 0 0 0 0 -STACK WIN 0 7e388 6 0 0 14 0 0 0 0 0 -STACK WIN 0 7e393 6 0 0 20 0 0 0 0 0 -STACK WIN 0 7e39e 6 0 0 18 0 0 0 0 0 -STACK WIN 0 14ae7 6 0 0 4 0 0 0 0 0 -STACK WIN 0 7e3a9 6 0 0 c 0 0 0 0 0 -STACK WIN 0 7e3b4 6 0 0 10 0 0 0 0 0 -STACK WIN 0 7e3bf 6 0 0 14 0 0 0 0 0 -STACK WIN 0 7e3e8 8 0 0 10 0 0 0 0 0 -STACK WIN 0 7e43b 6 0 0 4 0 0 0 0 0 -STACK WIN 0 7e45c 8 0 0 14 0 0 0 0 0 -STACK WIN 0 7e469 c 0 0 1c 0 0 0 0 0 -STACK WIN 0 7e47a a 0 0 0 0 0 0 0 0 -STACK WIN 0 7e489 8 0 0 10 0 0 0 0 0 -STACK WIN 0 7e496 5 0 0 20 0 0 0 0 0 -STACK WIN 0 7e4a0 c 0 0 4 0 0 0 0 0 -STACK WIN 0 7e4b1 8 0 0 4 0 0 0 0 0 -STACK WIN 0 7e4be c 0 0 8 0 0 0 0 0 -STACK WIN 0 7e4cf c 0 0 c 0 0 0 0 0 -STACK WIN 0 7e4e0 c 0 0 14 0 0 0 0 0 -STACK WIN 0 7e536 c 0 0 18 0 0 0 0 0 -STACK WIN 0 7e547 e 0 0 8 0 0 0 0 0 -STACK WIN 0 7e55a c 0 0 28 0 0 0 0 0 -STACK WIN 0 7e56b 8 0 0 4 0 0 0 0 0 -STACK WIN 0 7e593 8 0 0 28 0 0 0 0 0 -STACK WIN 0 7e5bc 8 0 0 34 0 0 0 0 0 -STACK WIN 0 7e5c9 5 0 0 28 0 0 0 0 0 -STACK WIN 0 7e5d3 5 0 0 24 0 0 0 0 0 -STACK WIN 0 7e5f5 a 0 0 14 0 0 0 0 0 -STACK WIN 0 7e604 c 0 0 30 0 0 0 0 0 -STACK WIN 0 7e615 d 0 0 4 0 0 0 0 0 -STACK WIN 0 7e659 8 0 0 14 0 0 0 0 0 -STACK WIN 0 7e69c 8 0 0 1c 0 0 0 0 0 -STACK WIN 0 7e6a9 8 0 0 14 0 0 0 0 0 -STACK WIN 0 7e6b6 8 0 0 1c 0 0 0 0 0 -STACK WIN 0 7e6c3 6 0 0 8 0 0 0 0 0 -STACK WIN 0 7e728 8 0 0 4 0 0 0 0 0 -STACK WIN 0 7e735 8 0 0 8 0 0 0 0 0 -STACK WIN 0 7e7f2 6 0 0 c 0 0 0 0 0 -STACK WIN 0 7e7fd 6 0 0 10 0 0 0 0 0 -STACK WIN 0 7e83b 8 0 0 4 0 0 0 0 0 -STACK WIN 0 7e848 5 0 0 8 0 0 0 0 0 -STACK WIN 0 7e878 5 0 0 10 0 0 0 0 0 -STACK WIN 0 7e88d 5 0 0 18 0 0 0 0 0 -STACK WIN 0 260c2 5 0 0 4 0 0 0 0 0 -STACK WIN 0 7e8a8 5 0 0 14 0 0 0 0 0 -STACK WIN 0 7e8b2 5 0 0 c 0 0 0 0 0 -STACK WIN 0 7e98d 3 0 0 4 0 0 0 0 0 -STACK WIN 0 7e9ae 8 0 0 8 0 0 0 0 0 -STACK WIN 0 7e9da 8 0 0 10 0 0 0 0 0 -STACK WIN 0 7e9e7 4 0 0 0 0 0 0 0 0 -STACK WIN 0 7ea40 8 0 0 1c 0 0 0 0 0 -STACK WIN 0 7ea4d 5 0 0 1c 0 0 0 0 0 -STACK WIN 0 7ea57 6 0 0 c 0 0 0 0 0 -STACK WIN 0 7ea62 6 0 0 8 0 0 0 0 0 -STACK WIN 0 7ea6d 6 0 0 10 0 0 0 0 0 -STACK WIN 0 7ea78 6 0 0 18 0 0 0 0 0 -STACK WIN 0 7ea83 6 0 0 4 0 0 0 0 0 -STACK WIN 0 7ea8e 6 0 0 c 0 0 0 0 0 -STACK WIN 0 7ea99 6 0 0 1c 0 0 0 0 0 -STACK WIN 0 7eaa4 6 0 0 14 0 0 0 0 0 -STACK WIN 0 7eac6 4 0 0 0 0 0 0 0 0 -STACK WIN 0 7eacf c 0 0 20 0 0 0 0 0 -STACK WIN 0 7eae0 d 0 0 1c 0 0 0 0 0 -STACK WIN 0 7eaf2 d 0 0 10 0 0 0 0 0 -STACK WIN 0 7eb04 b 0 0 0 0 0 0 0 0 -STACK WIN 0 7eb3c d 0 0 14 0 0 0 0 0 -STACK WIN 0 7eb4e d 0 0 c 0 0 0 0 0 -STACK WIN 0 7eb60 5 0 0 c 0 0 0 0 0 -STACK WIN 0 7eb6a 8 0 0 38 0 0 0 0 0 -STACK WIN 0 7eb77 5 0 0 14 0 0 0 0 0 -STACK WIN 0 7eb81 6 0 0 10 0 0 0 0 0 -STACK WIN 0 7eb8c 8 0 0 1c 0 0 0 0 0 -STACK WIN 0 7ebbe 8 0 0 18 0 0 0 0 0 -STACK WIN 0 7ebcb 8 0 0 4 0 0 0 0 0 -STACK WIN 0 7ebd8 8 0 0 14 0 0 0 0 0 -STACK WIN 0 7ebe5 8 0 0 10 0 0 0 0 0 -STACK WIN 0 7ebf2 8 0 0 24 0 0 0 0 0 -STACK WIN 0 7ebff 8 0 0 8 0 0 0 0 0 -STACK WIN 0 7ec0c 8 0 0 c 0 0 0 0 0 -STACK WIN 0 7ec19 3 0 0 18 0 0 0 0 0 -STACK WIN 0 7ec21 8 0 0 4 0 0 0 0 0 -STACK WIN 0 7ec4c 8 0 0 8 0 0 0 0 0 -STACK WIN 0 7ec59 3 0 0 0 0 0 0 0 0 -STACK WIN 0 7ec98 4 0 0 0 0 0 0 0 0 -STACK WIN 0 7ecbf 8 0 0 c 0 0 0 0 0 -STACK WIN 0 7eccc 8 0 0 18 0 0 0 0 0 -STACK WIN 0 7ecd9 8 0 0 24 0 0 0 0 0 -STACK WIN 0 7ece6 8 0 0 10 0 0 0 0 0 -STACK WIN 0 7ed3f 3 0 0 10 0 0 0 0 0 -STACK WIN 0 7ed47 8 0 0 1c 0 0 0 0 0 -STACK WIN 0 7ed54 5 0 0 38 0 0 0 0 0 -STACK WIN 0 7ed98 8 0 0 8 0 0 0 0 0 -STACK WIN 0 7eda5 8 0 0 c 0 0 0 0 0 -STACK WIN 0 7edb2 8 0 0 4 0 0 0 0 0 -STACK WIN 0 7edbf 8 0 0 2c 0 0 0 0 0 -STACK WIN 0 7edcc 8 0 0 14 0 0 0 0 0 -STACK WIN 0 7edd9 8 0 0 8 0 0 0 0 0 -STACK WIN 0 7ede6 8 0 0 10 0 0 0 0 0 -STACK WIN 0 7ee61 6 0 0 10 0 0 0 0 0 -STACK WIN 0 7ee6c 8 0 0 20 0 0 0 0 0 -STACK WIN 0 7ee79 8 0 0 20 0 0 0 0 0 -STACK WIN 0 7ee86 8 0 0 10 0 0 0 0 0 -STACK WIN 0 7ee93 8 0 0 c 0 0 0 0 0 -STACK WIN 0 7eea0 8 0 0 1c 0 0 0 0 0 -STACK WIN 0 7eead 6 0 0 4 0 0 0 0 0 -STACK WIN 0 7eeb8 8 0 0 24 0 0 0 0 0 -STACK WIN 0 7eec5 8 0 0 18 0 0 0 0 0 -STACK WIN 0 7eed2 8 0 0 14 0 0 0 0 0 -STACK WIN 0 7eedf 8 0 0 20 0 0 0 0 0 -STACK WIN 0 7ef1e 6 0 0 0 0 0 0 0 0 -STACK WIN 0 7ef94 7 0 0 4 0 0 0 0 0 -STACK WIN 0 7efa0 7 0 0 c 0 0 0 0 0 -STACK WIN 0 7efac 7 0 0 8 0 0 0 0 0 -STACK WIN 0 7efb8 7 0 0 10 0 0 0 0 0 -STACK WIN 0 7efc4 7 0 0 28 0 0 0 0 0 -STACK WIN 0 7efd0 7 0 0 20 0 0 0 0 0 -STACK WIN 0 7efdc 6 0 0 4 0 0 0 0 0 -STACK WIN 0 7efe7 6 0 0 18 0 0 0 0 0 -STACK WIN 0 7f052 3 0 0 0 0 0 0 0 0 -STACK WIN 0 7f05a 3 0 0 c 0 0 0 0 0 -STACK WIN 0 7f062 6 0 0 2c 0 0 0 0 0 -STACK WIN 0 7f06d 6 0 0 30 0 0 0 0 0 -STACK WIN 0 7f078 3 0 0 8 0 0 0 0 0 -STACK WIN 0 7f0b0 6 0 0 20 0 0 0 0 0 -STACK WIN 0 7f0bb 5 0 0 4 0 0 0 0 0 -STACK WIN 0 7f0c5 6 0 0 c 0 0 0 0 0 -STACK WIN 0 7f0f5 3 0 0 14 0 0 0 0 0 -STACK WIN 0 7f0fd 6 0 0 0 0 0 0 0 0 -STACK WIN 0 7f125 8 0 0 4 0 0 0 0 0 -STACK WIN 0 7f132 5 0 0 2c 0 0 0 0 0 -STACK WIN 0 7f13c 6 0 0 10 0 0 0 0 0 -STACK WIN 0 7f147 6 0 0 8 0 0 0 0 0 -STACK WIN 0 7f152 6 0 0 14 0 0 0 0 0 -STACK WIN 0 7f19b c 0 0 4 0 0 0 0 0 -STACK WIN 0 7f1ac 6 0 0 c 0 0 0 0 0 -STACK WIN 0 7f1d0 6 0 0 4 0 0 0 0 0 -STACK WIN 0 7f1db 6 0 0 4 0 0 0 0 0 -STACK WIN 0 7f1e6 6 0 0 4 0 0 0 0 0 -STACK WIN 0 7f1f1 6 0 0 10 0 0 0 0 0 -STACK WIN 0 7f1fe 1 0 0 0 0 0 0 0 0 -STACK WIN 0 7f204 c 0 0 10 0 0 0 0 0 -STACK WIN 0 7f215 6 0 0 8 0 0 0 0 0 -STACK WIN 0 7f23b 6 0 0 1c 0 0 0 0 0 -STACK WIN 0 7f246 6 0 0 24 0 0 0 0 0 -STACK WIN 0 7f251 6 0 0 8 0 0 0 0 0 -STACK WIN 0 7f2c2 6 0 0 10 0 0 0 0 0 -STACK WIN 0 7f2cd 8 0 0 4 0 0 0 0 0 -STACK WIN 0 7f2da 6 0 0 10 0 0 0 0 0 -STACK WIN 0 7f2e5 8 0 0 c 0 0 0 0 0 -STACK WIN 0 7f3c0 7 0 0 1c 0 0 0 0 0 -STACK WIN 0 7f3cc 7 0 0 24 0 0 0 0 0 -STACK WIN 0 7f49f 6 0 0 4 0 0 0 0 0 -STACK WIN 0 7f4aa 6 0 0 18 0 0 0 0 0 -STACK WIN 0 7f4b5 6 0 0 1c 0 0 0 0 0 -STACK WIN 0 7f4c0 6 0 0 8 0 0 0 0 0 -STACK WIN 0 7f502 6 0 0 24 0 0 0 0 0 -STACK WIN 0 7f50d 6 0 0 c 0 0 0 0 0 -STACK WIN 0 7f536 6 0 0 14 0 0 0 0 0 -STACK WIN 0 7f55c 6 0 0 10 0 0 0 0 0 -STACK WIN 0 7f59d c 0 0 24 0 0 0 0 0 -STACK WIN 0 7f5ae 6 0 0 1c 0 0 0 0 0 -STACK WIN 0 7f5b9 6 0 0 c 0 0 0 0 0 -STACK WIN 0 7f5c4 6 0 0 10 0 0 0 0 0 -STACK WIN 0 7f5cf 6 0 0 4 0 0 0 0 0 -STACK WIN 0 7f5da 6 0 0 8 0 0 0 0 0 -STACK WIN 0 7f5e5 6 0 0 14 0 0 0 0 0 -STACK WIN 0 7f5f0 6 0 0 18 0 0 0 0 0 -STACK WIN 0 7f5fb 6 0 0 20 0 0 0 0 0 -STACK WIN 0 7f606 f 0 0 10 0 0 0 0 0 -STACK WIN 0 7f61a f 0 0 14 0 0 0 0 0 -STACK WIN 0 7f62e d 0 0 0 0 0 0 0 0 -STACK WIN 0 7f640 10 0 0 4 0 0 0 0 0 -STACK WIN 0 7f655 f 0 0 18 0 0 0 0 0 -STACK WIN 0 7f669 f 0 0 c 0 0 0 0 0 -STACK WIN 0 7f67d f 0 0 4 0 0 0 0 0 -STACK WIN 0 7f691 f 0 0 8 0 0 0 0 0 -STACK WIN 0 7f6a5 8 0 0 5c 0 0 0 0 0 -STACK WIN 0 7f6b2 c 0 0 2c 0 0 0 0 0 -STACK WIN 0 7f6c3 6 0 0 28 0 0 0 0 0 -STACK WIN 0 7f6ce 6 0 0 c 0 0 0 0 0 -STACK WIN 0 7f6d9 5 0 0 30 0 0 0 0 0 -STACK WIN 0 7f731 8 0 0 20 0 0 0 0 0 -STACK WIN 0 7f782 8 0 0 4 0 0 0 0 0 -STACK WIN 0 7f846 8 0 0 14 0 0 0 0 0 -STACK WIN 0 39aa8 e6 a 0 c 1c 0 0 0 1 -STACK WIN 0 dedf 70 3 0 8 c 0 0 0 0 -STACK WIN 0 df4f 23 0 0 0 0 0 0 0 0 -STACK WIN 0 7fc40 12 0 0 0 0 0 0 0 0 diff --git a/toolkit/crashreporter/google-breakpad/src/processor/testdata/symbols/test_app.pdb/5A9832E5287241C1838ED98914E9B7FF1/test_app.sym b/toolkit/crashreporter/google-breakpad/src/processor/testdata/symbols/test_app.pdb/5A9832E5287241C1838ED98914E9B7FF1/test_app.sym deleted file mode 100644 index 72fb4daab964..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/processor/testdata/symbols/test_app.pdb/5A9832E5287241C1838ED98914E9B7FF1/test_app.sym +++ /dev/null @@ -1,22151 +0,0 @@ -MODULE windows x86 5A9832E5287241C1838ED98914E9B7FF1 test_app.pdb -FILE 1 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h -FILE 2 c:\program files\microsoft visual studio 8\vc\include\typeinfo -FILE 3 c:\breakpad\trunk\src\common\windows\guid_string.h -FILE 4 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcdce.h -FILE 5 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winreg.h -FILE 6 c:\program files\microsoft visual studio 8\vc\platformsdk\include\objidl.h -FILE 7 c:\program files\microsoft visual studio 8\vc\platformsdk\include\wtypes.h -FILE 8 c:\program files\microsoft visual studio 8\vc\platformsdk\include\tvout.h -FILE 9 c:\program files\microsoft visual studio 8\vc\include\malloc.h -FILE 10 c:\program files\microsoft visual studio 8\vc\platformsdk\include\pshpack2.h -FILE 11 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winuser.h -FILE 12 c:\breakpad\trunk\src\client\windows\handler\exception_handler.cc -FILE 13 c:\program files\microsoft visual studio 8\vc\platformsdk\include\urlmon.h -FILE 14 c:\program files\microsoft visual studio 8\vc\platformsdk\include\wincon.h -FILE 15 c:\program files\microsoft visual studio 8\vc\platformsdk\include\imm.h -FILE 16 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcdcep.h -FILE 17 c:\program files\microsoft visual studio 8\vc\include\xstring -FILE 18 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winver.h -FILE 19 c:\program files\microsoft visual studio 8\vc\include\xmemory -FILE 20 c:\program files\microsoft visual studio 8\vc\include\new -FILE 21 c:\program files\microsoft visual studio 8\vc\platformsdk\include\pshpack4.h -FILE 22 c:\program files\microsoft visual studio 8\vc\platformsdk\include\reason.h -FILE 23 c:\program files\microsoft visual studio 8\vc\include\vector -FILE 24 c:\program files\microsoft visual studio 8\vc\include\memory -FILE 25 c:\program files\microsoft visual studio 8\vc\include\wtime.inl -FILE 26 c:\program files\microsoft visual studio 8\vc\include\iterator -FILE 27 c:\program files\microsoft visual studio 8\vc\platformsdk\include\propidl.h -FILE 28 c:\program files\microsoft visual studio 8\vc\platformsdk\include\pshpack1.h -FILE 29 c:\program files\microsoft visual studio 8\vc\platformsdk\include\specstrings.h -FILE 30 c:\program files\microsoft visual studio 8\vc\platformsdk\include\basetsd.h -FILE 31 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winerror.h -FILE 32 c:\program files\microsoft visual studio 8\vc\include\assert.h -FILE 33 c:\program files\microsoft visual studio 8\vc\platformsdk\include\poppack.h -FILE 34 c:\program files\microsoft visual studio 8\vc\include\cstdio -FILE 35 c:\program files\microsoft visual studio 8\vc\include\stdio.h -FILE 36 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcnterr.h -FILE 37 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcasync.h -FILE 38 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcnsi.h -FILE 39 c:\program files\microsoft visual studio 8\vc\include\stdlib.h -FILE 40 c:\program files\microsoft visual studio 8\vc\platformsdk\include\servprov.h -FILE 41 c:\program files\microsoft visual studio 8\vc\include\limits.h -FILE 42 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcndr.h -FILE 43 c:\breakpad\trunk\src\client\windows\handler\exception_handler.h -FILE 44 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcnsip.h -FILE 45 c:\program files\microsoft visual studio 8\vc\platformsdk\include\dbghelp.h -FILE 46 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winnetwk.h -FILE 47 c:\program files\microsoft visual studio 8\vc\include\share.h -FILE 48 c:\program files\microsoft visual studio 8\vc\platformsdk\include\pshpack8.h -FILE 49 c:\program files\microsoft visual studio 8\vc\platformsdk\include\stralign.h -FILE 50 c:\breakpad\trunk\src\google_breakpad\common\minidump_format.h -FILE 51 c:\breakpad\trunk\src\google_breakpad\common\breakpad_types.h -FILE 52 c:\program files\microsoft visual studio 8\vc\include\xdebug -FILE 53 c:\program files\microsoft visual studio 8\vc\include\stdarg.h -FILE 54 c:\program files\microsoft visual studio 8\vc\platformsdk\include\windef.h -FILE 55 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winsvc.h -FILE 56 c:\program files\microsoft visual studio 8\vc\platformsdk\include\wingdi.h -FILE 57 c:\program files\microsoft visual studio 8\vc\include\xlocinfo -FILE 58 c:\program files\microsoft visual studio 8\vc\include\xlocinfo.h -FILE 59 c:\program files\microsoft visual studio 8\vc\platformsdk\include\oleidl.h -FILE 60 c:\program files\microsoft visual studio 8\vc\include\locale.h -FILE 61 c:\program files\microsoft visual studio 8\vc\include\string -FILE 62 c:\program files\microsoft visual studio 8\vc\include\istream -FILE 63 c:\breakpad\trunk\src\common\windows\string_utils-inl.h -FILE 64 c:\program files\microsoft visual studio 8\vc\include\ostream -FILE 65 c:\program files\microsoft visual studio 8\vc\include\xutility -FILE 66 c:\program files\microsoft visual studio 8\vc\include\wchar.h -FILE 67 c:\program files\microsoft visual studio 8\vc\include\utility -FILE 68 c:\program files\microsoft visual studio 8\vc\include\ios -FILE 69 c:\program files\microsoft visual studio 8\vc\include\xlocnum -FILE 70 c:\program files\microsoft visual studio 8\vc\include\iosfwd -FILE 71 c:\program files\microsoft visual studio 8\vc\include\swprintf.inl -FILE 72 c:\program files\microsoft visual studio 8\vc\platformsdk\include\guiddef.h -FILE 73 c:\program files\microsoft visual studio 8\vc\include\cwchar -FILE 74 c:\program files\microsoft visual studio 8\vc\include\climits -FILE 75 c:\program files\microsoft visual studio 8\vc\include\crtdbg.h -FILE 76 c:\program files\microsoft visual studio 8\vc\include\cstdlib -FILE 77 c:\program files\microsoft visual studio 8\vc\include\streambuf -FILE 78 c:\program files\microsoft visual studio 8\vc\include\xiosbase -FILE 79 c:\program files\microsoft visual studio 8\vc\include\xlocale -FILE 80 c:\program files\microsoft visual studio 8\vc\include\cstring -FILE 81 c:\program files\microsoft visual studio 8\vc\platformsdk\include\mcx.h -FILE 82 c:\program files\microsoft visual studio 8\vc\include\stdexcept -FILE 83 c:\program files\microsoft visual studio 8\vc\include\exception -FILE 84 c:\program files\microsoft visual studio 8\vc\include\xstddef -FILE 85 c:\program files\microsoft visual studio 8\vc\platformsdk\include\objbase.h -FILE 86 c:\program files\microsoft visual studio 8\vc\include\cstddef -FILE 87 c:\program files\microsoft visual studio 8\vc\platformsdk\include\unknwn.h -FILE 88 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpc.h -FILE 89 c:\program files\microsoft visual studio 8\vc\include\stddef.h -FILE 90 c:\program files\microsoft visual studio 8\vc\include\cassert -FILE 91 c:\program files\microsoft visual studio 8\vc\platformsdk\include\ole2.h -FILE 92 c:\program files\microsoft visual studio 8\vc\platformsdk\include\windows.h -FILE 93 c:\program files\microsoft visual studio 8\vc\include\yvals.h -FILE 94 c:\program files\microsoft visual studio 8\vc\platformsdk\include\oleauto.h -FILE 95 c:\program files\microsoft visual studio 8\vc\include\excpt.h -FILE 96 c:\program files\microsoft visual studio 8\vc\include\use_ansi.h -FILE 97 c:\program files\microsoft visual studio 8\vc\platformsdk\include\cguid.h -FILE 98 c:\program files\microsoft visual studio 8\vc\include\crtdefs.h -FILE 99 c:\program files\microsoft visual studio 8\vc\platformsdk\include\msxml.h -FILE 100 c:\program files\microsoft visual studio 8\vc\platformsdk\include\oaidl.h -FILE 101 c:\program files\microsoft visual studio 8\vc\include\sal.h -FILE 102 c:\program files\microsoft visual studio 8\vc\include\vadefs.h -FILE 103 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winnt.h -FILE 104 c:\program files\microsoft visual studio 8\vc\include\ctype.h -FILE 105 c:\program files\microsoft visual studio 8\vc\include\eh.h -FILE 106 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winnls.h -FILE 107 c:\program files\microsoft visual studio 8\vc\include\string.h -FILE 108 c:\program files\microsoft visual studio 8\vc\include\ctype.h -FILE 109 c:\program files\microsoft visual studio 8\vc\include\xutility -FILE 110 c:\program files\microsoft visual studio 8\vc\include\utility -FILE 111 c:\program files\microsoft visual studio 8\vc\include\iosfwd -FILE 112 c:\program files\microsoft visual studio 8\vc\include\cwchar -FILE 113 c:\program files\microsoft visual studio 8\vc\include\crtdbg.h -FILE 114 c:\program files\microsoft visual studio 8\vc\include\stdexcept -FILE 115 c:\program files\microsoft visual studio 8\vc\include\exception -FILE 116 c:\program files\microsoft visual studio 8\vc\include\xstddef -FILE 117 c:\program files\microsoft visual studio 8\vc\include\cstddef -FILE 118 c:\program files\microsoft visual studio 8\vc\include\stddef.h -FILE 119 c:\program files\microsoft visual studio 8\vc\include\eh.h -FILE 120 c:\program files\microsoft visual studio 8\vc\include\streambuf -FILE 121 c:\program files\microsoft visual studio 8\vc\include\xiosbase -FILE 122 c:\program files\microsoft visual studio 8\vc\include\xlocale -FILE 123 c:\program files\microsoft visual studio 8\vc\include\cstring -FILE 124 c:\program files\microsoft visual studio 8\vc\include\string.h -FILE 125 c:\program files\microsoft visual studio 8\vc\include\typeinfo -FILE 126 c:\breakpad\trunk\src\common\windows\guid_string.cc -FILE 127 c:\breakpad\trunk\src\common\windows\string_utils-inl.h -FILE 128 c:\program files\microsoft visual studio 8\vc\include\stdarg.h -FILE 129 c:\program files\microsoft visual studio 8\vc\include\string -FILE 130 c:\program files\microsoft visual studio 8\vc\include\istream -FILE 131 c:\program files\microsoft visual studio 8\vc\include\ostream -FILE 132 c:\program files\microsoft visual studio 8\vc\include\ios -FILE 133 c:\program files\microsoft visual studio 8\vc\include\xlocnum -FILE 134 c:\program files\microsoft visual studio 8\vc\include\climits -FILE 135 c:\program files\microsoft visual studio 8\vc\include\yvals.h -FILE 136 c:\program files\microsoft visual studio 8\vc\include\use_ansi.h -FILE 137 c:\program files\microsoft visual studio 8\vc\include\cstdlib -FILE 138 c:\program files\microsoft visual studio 8\vc\include\stdlib.h -FILE 139 c:\program files\microsoft visual studio 8\vc\include\malloc.h -FILE 140 c:\breakpad\trunk\src\common\windows\guid_string.h -FILE 141 c:\program files\microsoft visual studio 8\vc\platformsdk\include\guiddef.h -FILE 142 c:\program files\microsoft visual studio 8\vc\include\share.h -FILE 143 c:\program files\microsoft visual studio 8\vc\include\xstring -FILE 144 c:\program files\microsoft visual studio 8\vc\include\xmemory -FILE 145 c:\program files\microsoft visual studio 8\vc\include\new -FILE 146 c:\program files\microsoft visual studio 8\vc\include\locale.h -FILE 147 c:\program files\microsoft visual studio 8\vc\include\swprintf.inl -FILE 148 c:\program files\microsoft visual studio 8\vc\include\limits.h -FILE 149 c:\program files\microsoft visual studio 8\vc\include\wchar.h -FILE 150 c:\program files\microsoft visual studio 8\vc\include\cstdio -FILE 151 c:\program files\microsoft visual studio 8\vc\include\crtdefs.h -FILE 152 c:\program files\microsoft visual studio 8\vc\include\stdio.h -FILE 153 c:\program files\microsoft visual studio 8\vc\include\wtime.inl -FILE 154 c:\program files\microsoft visual studio 8\vc\include\sal.h -FILE 155 c:\program files\microsoft visual studio 8\vc\include\xdebug -FILE 156 c:\program files\microsoft visual studio 8\vc\include\vadefs.h -FILE 157 c:\program files\microsoft visual studio 8\vc\include\xlocinfo -FILE 158 c:\program files\microsoft visual studio 8\vc\include\xlocinfo.h -FILE 159 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winnetwk.h -FILE 160 c:\program files\microsoft visual studio 8\vc\platformsdk\include\urlmon.h -FILE 161 c:\program files\microsoft visual studio 8\vc\platformsdk\include\pshpack8.h -FILE 162 c:\program files\microsoft visual studio 8\vc\platformsdk\include\cderr.h -FILE 163 c:\program files\microsoft visual studio 8\vc\platformsdk\include\shellapi.h -FILE 164 c:\program files\microsoft visual studio 8\vc\platformsdk\include\dde.h -FILE 165 c:\program files\microsoft visual studio 8\vc\include\vector -FILE 166 c:\program files\microsoft visual studio 8\vc\include\stdio.h -FILE 167 c:\program files\microsoft visual studio 8\vc\include\memory -FILE 168 c:\program files\microsoft visual studio 8\vc\include\iterator -FILE 169 c:\program files\microsoft visual studio 8\vc\include\malloc.h -FILE 170 c:\program files\microsoft visual studio 8\vc\include\stdarg.h -FILE 171 c:\program files\microsoft visual studio 8\vc\platformsdk\include\windef.h -FILE 172 c:\program files\microsoft visual studio 8\vc\platformsdk\include\wingdi.h -FILE 173 c:\program files\microsoft visual studio 8\vc\platformsdk\include\imm.h -FILE 174 c:\program files\microsoft visual studio 8\vc\platformsdk\include\mmsystem.h -FILE 175 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winioctl.h -FILE 176 c:\program files\microsoft visual studio 8\vc\platformsdk\include\guiddef.h -FILE 177 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winsmcrd.h -FILE 178 c:\test_app.cc -FILE 179 c:\program files\microsoft visual studio 8\vc\platformsdk\include\oaidl.h -FILE 180 c:\program files\microsoft visual studio 8\vc\platformsdk\include\nb30.h -FILE 181 c:\program files\microsoft visual studio 8\vc\include\xstring -FILE 182 c:\program files\microsoft visual studio 8\vc\include\xmemory -FILE 183 c:\program files\microsoft visual studio 8\vc\include\new -FILE 184 c:\program files\microsoft visual studio 8\vc\platformsdk\include\oleidl.h -FILE 185 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winnls.h -FILE 186 c:\breakpad\trunk\src\google_breakpad\common\minidump_format.h -FILE 187 c:\program files\microsoft visual studio 8\vc\include\string.h -FILE 188 c:\breakpad\trunk\src\google_breakpad\common\breakpad_types.h -FILE 189 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winnt.h -FILE 190 c:\program files\microsoft visual studio 8\vc\include\ctype.h -FILE 191 c:\program files\microsoft visual studio 8\vc\include\wtime.inl -FILE 192 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winbase.h -FILE 193 c:\program files\microsoft visual studio 8\vc\platformsdk\include\propidl.h -FILE 194 c:\breakpad\trunk\src\client\windows\handler\exception_handler.h -FILE 195 c:\program files\microsoft visual studio 8\vc\include\stdlib.h -FILE 196 c:\program files\microsoft visual studio 8\vc\include\swprintf.inl -FILE 197 c:\program files\microsoft visual studio 8\vc\include\limits.h -FILE 198 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winreg.h -FILE 199 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpc.h -FILE 200 c:\program files\microsoft visual studio 8\vc\platformsdk\include\ole2.h -FILE 201 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winscard.h -FILE 202 c:\program files\microsoft visual studio 8\vc\platformsdk\include\objbase.h -FILE 203 c:\program files\microsoft visual studio 8\vc\platformsdk\include\wtypes.h -FILE 204 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcndr.h -FILE 205 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcdce.h -FILE 206 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcnsip.h -FILE 207 c:\program files\microsoft visual studio 8\vc\include\share.h -FILE 208 c:\program files\microsoft visual studio 8\vc\platformsdk\include\tvout.h -FILE 209 c:\program files\microsoft visual studio 8\vc\include\use_ansi.h -FILE 210 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winefs.h -FILE 211 c:\program files\microsoft visual studio 8\vc\platformsdk\include\pshpack2.h -FILE 212 c:\program files\microsoft visual studio 8\vc\platformsdk\include\commdlg.h -FILE 213 c:\program files\microsoft visual studio 8\vc\platformsdk\include\unknwn.h -FILE 214 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winsock.h -FILE 215 c:\program files\microsoft visual studio 8\vc\platformsdk\include\stralign.h -FILE 216 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winuser.h -FILE 217 c:\program files\microsoft visual studio 8\vc\platformsdk\include\servprov.h -FILE 218 c:\program files\microsoft visual studio 8\vc\include\xdebug -FILE 219 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winsvc.h -FILE 220 c:\program files\microsoft visual studio 8\vc\platformsdk\include\wincon.h -FILE 221 c:\program files\microsoft visual studio 8\vc\include\xlocinfo -FILE 222 c:\program files\microsoft visual studio 8\vc\include\xlocinfo.h -FILE 223 c:\program files\microsoft visual studio 8\vc\include\locale.h -FILE 224 c:\program files\microsoft visual studio 8\vc\platformsdk\include\cguid.h -FILE 225 c:\program files\microsoft visual studio 8\vc\include\string -FILE 226 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winver.h -FILE 227 c:\program files\microsoft visual studio 8\vc\include\istream -FILE 228 c:\program files\microsoft visual studio 8\vc\include\ostream -FILE 229 c:\program files\microsoft visual studio 8\vc\include\xutility -FILE 230 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winperf.h -FILE 231 c:\program files\microsoft visual studio 8\vc\platformsdk\include\pshpack4.h -FILE 232 c:\program files\microsoft visual studio 8\vc\include\utility -FILE 233 c:\program files\microsoft visual studio 8\vc\include\ios -FILE 234 c:\program files\microsoft visual studio 8\vc\include\xlocnum -FILE 235 c:\program files\microsoft visual studio 8\vc\include\crtdbg.h -FILE 236 c:\program files\microsoft visual studio 8\vc\include\iosfwd -FILE 237 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcdcep.h -FILE 238 c:\program files\microsoft visual studio 8\vc\include\cwchar -FILE 239 c:\program files\microsoft visual studio 8\vc\include\climits -FILE 240 c:\program files\microsoft visual studio 8\vc\include\wchar.h -FILE 241 c:\program files\microsoft visual studio 8\vc\include\cstdlib -FILE 242 c:\program files\microsoft visual studio 8\vc\platformsdk\include\mcx.h -FILE 243 c:\program files\microsoft visual studio 8\vc\include\streambuf -FILE 244 c:\program files\microsoft visual studio 8\vc\include\xiosbase -FILE 245 c:\program files\microsoft visual studio 8\vc\platformsdk\include\reason.h -FILE 246 c:\program files\microsoft visual studio 8\vc\include\xlocale -FILE 247 c:\program files\microsoft visual studio 8\vc\platformsdk\include\dlgs.h -FILE 248 c:\program files\microsoft visual studio 8\vc\include\cstring -FILE 249 c:\program files\microsoft visual studio 8\vc\include\stdexcept -FILE 250 c:\program files\microsoft visual studio 8\vc\platformsdk\include\pshpack1.h -FILE 251 c:\program files\microsoft visual studio 8\vc\include\exception -FILE 252 c:\program files\microsoft visual studio 8\vc\include\xstddef -FILE 253 c:\program files\microsoft visual studio 8\vc\platformsdk\include\specstrings.h -FILE 254 c:\program files\microsoft visual studio 8\vc\include\cstddef -FILE 255 c:\program files\microsoft visual studio 8\vc\platformsdk\include\basetsd.h -FILE 256 c:\program files\microsoft visual studio 8\vc\include\stddef.h -FILE 257 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winerror.h -FILE 258 c:\program files\microsoft visual studio 8\vc\platformsdk\include\wincrypt.h -FILE 259 c:\program files\microsoft visual studio 8\vc\platformsdk\include\poppack.h -FILE 260 c:\program files\microsoft visual studio 8\vc\platformsdk\include\winspool.h -FILE 261 c:\program files\microsoft visual studio 8\vc\platformsdk\include\oleauto.h -FILE 262 c:\program files\microsoft visual studio 8\vc\platformsdk\include\prsht.h -FILE 263 c:\program files\microsoft visual studio 8\vc\platformsdk\include\objidl.h -FILE 264 c:\program files\microsoft visual studio 8\vc\include\cstdio -FILE 265 c:\program files\microsoft visual studio 8\vc\include\yvals.h -FILE 266 c:\program files\microsoft visual studio 8\vc\include\eh.h -FILE 267 c:\program files\microsoft visual studio 8\vc\platformsdk\include\lzexpand.h -FILE 268 c:\program files\microsoft visual studio 8\vc\platformsdk\include\ddeml.h -FILE 269 c:\program files\microsoft visual studio 8\vc\include\crtdefs.h -FILE 270 c:\program files\microsoft visual studio 8\vc\include\sal.h -FILE 271 c:\program files\microsoft visual studio 8\vc\include\vadefs.h -FILE 272 c:\program files\microsoft visual studio 8\vc\platformsdk\include\dbghelp.h -FILE 273 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcnterr.h -FILE 274 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcasync.h -FILE 275 c:\program files\microsoft visual studio 8\vc\platformsdk\include\rpcnsi.h -FILE 276 c:\program files\microsoft visual studio 8\vc\include\typeinfo -FILE 277 c:\program files\microsoft visual studio 8\vc\platformsdk\include\windows.h -FILE 278 c:\program files\microsoft visual studio 8\vc\include\excpt.h -FILE 279 c:\program files\microsoft visual studio 8\vc\platformsdk\include\msxml.h -FILE 280 f:\sp\vctools\crt_bld\self_x86\crt\src\xdebug -FILE 281 f:\sp\vctools\crt_bld\self_x86\crt\src\streambuf -FILE 282 f:\sp\vctools\crt_bld\self_x86\crt\src\xiosbase -FILE 283 f:\sp\vctools\crt_bld\self_x86\crt\src\xlocale -FILE 284 f:\sp\vctools\crt_bld\self_x86\crt\src\cstring -FILE 285 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 286 f:\sp\vctools\crt_bld\self_x86\crt\src\xlocinfo -FILE 287 f:\sp\vctools\crt_bld\self_x86\crt\src\xlocinfo.h -FILE 288 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 289 f:\sp\vctools\crt_bld\self_x86\crt\src\share.h -FILE 290 f:\sp\vctools\crt_bld\self_x86\crt\src\use_ansi.h -FILE 291 f:\sp\vctools\crt_bld\self_x86\crt\src\string.cpp -FILE 292 f:\sp\vctools\crt_bld\self_x86\crt\src\typeinfo -FILE 293 f:\sp\vctools\crt_bld\self_x86\crt\src\xutility -FILE 294 f:\sp\vctools\crt_bld\self_x86\crt\src\utility -FILE 295 f:\sp\vctools\crt_bld\self_x86\crt\src\iosfwd -FILE 296 f:\sp\vctools\crt_bld\self_x86\crt\src\cwchar -FILE 297 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h -FILE 298 f:\sp\vctools\crt_bld\self_x86\crt\src\stdexcept -FILE 299 f:\sp\vctools\crt_bld\self_x86\crt\src\exception -FILE 300 f:\sp\vctools\crt_bld\self_x86\crt\src\xstddef -FILE 301 f:\sp\vctools\crt_bld\self_x86\crt\src\cstddef -FILE 302 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 303 f:\sp\vctools\crt_bld\self_x86\crt\src\istream -FILE 304 f:\sp\vctools\crt_bld\self_x86\crt\src\ostream -FILE 305 f:\sp\vctools\crt_bld\self_x86\crt\src\ios -FILE 306 f:\sp\vctools\crt_bld\self_x86\crt\src\xlocnum -FILE 307 f:\sp\vctools\crt_bld\self_x86\crt\src\eh.h -FILE 308 f:\sp\vctools\crt_bld\self_x86\crt\src\cstdlib -FILE 309 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 310 f:\sp\vctools\crt_bld\self_x86\crt\src\climits -FILE 311 f:\sp\vctools\crt_bld\self_x86\crt\src\yvals.h -FILE 312 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 313 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 314 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 315 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 316 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 317 f:\sp\vctools\crt_bld\self_x86\crt\src\cstdio -FILE 318 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 319 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 320 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 321 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 322 f:\sp\public\sdk\inc\ddbanned.h -FILE 323 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 324 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 325 f:\sp\vctools\crt_bld\self_x86\crt\src\xstring -FILE 326 f:\sp\vctools\crt_bld\self_x86\crt\src\xmemory -FILE 327 f:\sp\vctools\crt_bld\self_x86\crt\src\new -FILE 328 f:\sp\public\sdk\inc\reason.h -FILE 329 f:\sp\public\sdk\inc\wincon.h -FILE 330 f:\sp\public\sdk\inc\pshpack2.h -FILE 331 f:\sp\public\sdk\inc\mcx.h -FILE 332 f:\sp\public\sdk\inc\winuser.h -FILE 333 f:\sp\public\sdk\inc\winnls.h -FILE 334 f:\sp\public\sdk\inc\guiddef.h -FILE 335 f:\sp\public\sdk\inc\specstrings.h -FILE 336 f:\sp\public\sdk\inc\basetsd.h -FILE 337 f:\sp\public\sdk\inc\stralign.h -FILE 338 f:\sp\public\sdk\inc\tvout.h -FILE 339 f:\sp\public\sdk\inc\winsvc.h -FILE 340 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 341 f:\sp\public\sdk\inc\wingdi.h -FILE 342 f:\sp\public\sdk\inc\pshpack4.h -FILE 343 f:\sp\public\sdk\inc\poppack.h -FILE 344 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sect_attribs.h -FILE 345 f:\sp\public\sdk\inc\winnetwk.h -FILE 346 f:\sp\public\sdk\inc\imm.h -FILE 347 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 348 f:\sp\public\sdk\inc\windef.h -FILE 349 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h -FILE 350 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\tran\i386\cpu_disp.c -FILE 351 f:\sp\public\sdk\inc\pshpack1.h -FILE 352 f:\sp\public\sdk\inc\winver.h -FILE 353 f:\sp\public\sdk\inc\windows.h -FILE 354 f:\sp\public\sdk\inc\winnt.h -FILE 355 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 356 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 357 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 358 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 359 f:\sp\public\sdk\inc\ddbanned.h -FILE 360 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 361 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 362 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\errno.h -FILE 363 f:\sp\public\sdk\inc\winreg.h -FILE 364 f:\sp\public\sdk\inc\winbase.h -FILE 365 f:\sp\public\sdk\inc\winerror.h -FILE 366 f:\sp\public\sdk\inc\pshpack8.h -FILE 367 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\internal.h -FILE 368 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 369 f:\sp\public\sdk\inc\reason.h -FILE 370 f:\sp\public\sdk\inc\wincon.h -FILE 371 f:\sp\public\sdk\inc\pshpack2.h -FILE 372 f:\sp\public\sdk\inc\mcx.h -FILE 373 f:\sp\public\sdk\inc\winuser.h -FILE 374 f:\sp\public\sdk\inc\winnls.h -FILE 375 f:\sp\public\sdk\inc\guiddef.h -FILE 376 f:\sp\public\sdk\inc\specstrings.h -FILE 377 f:\sp\public\sdk\inc\basetsd.h -FILE 378 f:\sp\public\sdk\inc\stralign.h -FILE 379 f:\sp\public\sdk\inc\tvout.h -FILE 380 f:\sp\public\sdk\inc\winsvc.h -FILE 381 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 382 f:\sp\public\sdk\inc\wingdi.h -FILE 383 f:\sp\public\sdk\inc\pshpack4.h -FILE 384 f:\sp\public\sdk\inc\poppack.h -FILE 385 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sect_attribs.h -FILE 386 f:\sp\public\sdk\inc\winnetwk.h -FILE 387 f:\sp\public\sdk\inc\imm.h -FILE 388 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 389 f:\sp\public\sdk\inc\windef.h -FILE 390 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h -FILE 391 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\tran\i386\mathfcns.c -FILE 392 f:\sp\public\sdk\inc\pshpack1.h -FILE 393 f:\sp\public\sdk\inc\winver.h -FILE 394 f:\sp\public\sdk\inc\windows.h -FILE 395 f:\sp\public\sdk\inc\winnt.h -FILE 396 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 397 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 398 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 399 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 400 f:\sp\public\sdk\inc\ddbanned.h -FILE 401 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 402 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 403 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\errno.h -FILE 404 f:\sp\public\sdk\inc\winreg.h -FILE 405 f:\sp\public\sdk\inc\winbase.h -FILE 406 f:\sp\public\sdk\inc\winerror.h -FILE 407 f:\sp\public\sdk\inc\pshpack8.h -FILE 408 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\internal.h -FILE 409 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 410 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 411 f:\sp\public\sdk\inc\winreg.h -FILE 412 f:\sp\public\sdk\inc\winbase.h -FILE 413 f:\sp\public\sdk\inc\winerror.h -FILE 414 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 415 f:\sp\public\sdk\inc\windef.h -FILE 416 f:\sp\vctools\crt_bld\self_x86\crt\src\ctime.h -FILE 417 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 418 f:\sp\vctools\crt_bld\self_x86\crt\src\time.h -FILE 419 f:\sp\public\sdk\inc\pshpack8.h -FILE 420 f:\sp\public\sdk\inc\reason.h -FILE 421 f:\sp\public\sdk\inc\wincon.h -FILE 422 f:\sp\vctools\crt_bld\self_x86\crt\src\time.inl -FILE 423 f:\sp\public\sdk\inc\pshpack2.h -FILE 424 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 425 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 426 f:\sp\public\sdk\inc\mcx.h -FILE 427 f:\sp\public\sdk\inc\winuser.h -FILE 428 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 429 f:\sp\public\sdk\inc\winnls.h -FILE 430 f:\sp\public\sdk\inc\guiddef.h -FILE 431 f:\sp\public\sdk\inc\stralign.h -FILE 432 f:\sp\public\sdk\inc\winnt.h -FILE 433 f:\sp\public\sdk\inc\specstrings.h -FILE 434 f:\sp\public\sdk\inc\basetsd.h -FILE 435 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 436 f:\sp\public\sdk\inc\tvout.h -FILE 437 f:\sp\public\sdk\inc\winsvc.h -FILE 438 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 439 f:\sp\public\sdk\inc\wingdi.h -FILE 440 f:\sp\vctools\crt_bld\self_x86\crt\src\tzset.c -FILE 441 f:\sp\public\sdk\inc\pshpack4.h -FILE 442 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 443 f:\sp\public\sdk\inc\poppack.h -FILE 444 f:\sp\public\sdk\inc\winnetwk.h -FILE 445 f:\sp\public\sdk\inc\imm.h -FILE 446 f:\sp\public\sdk\inc\ddbanned.h -FILE 447 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 448 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 449 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 450 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 451 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 452 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 453 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 454 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 455 f:\sp\public\sdk\inc\windows.h -FILE 456 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 457 f:\sp\public\sdk\inc\pshpack1.h -FILE 458 f:\sp\public\sdk\inc\winver.h -FILE 459 f:\sp\vctools\crt_bld\self_x86\crt\src\time.inl -FILE 460 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 461 f:\sp\public\sdk\inc\winnt.h -FILE 462 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 463 f:\sp\public\sdk\inc\winreg.h -FILE 464 f:\sp\public\sdk\inc\winbase.h -FILE 465 f:\sp\public\sdk\inc\winerror.h -FILE 466 f:\sp\public\sdk\inc\pshpack8.h -FILE 467 f:\sp\public\sdk\inc\reason.h -FILE 468 f:\sp\public\sdk\inc\wincon.h -FILE 469 f:\sp\public\sdk\inc\pshpack2.h -FILE 470 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 471 f:\sp\public\sdk\inc\mcx.h -FILE 472 f:\sp\public\sdk\inc\winuser.h -FILE 473 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 474 f:\sp\public\sdk\inc\winnls.h -FILE 475 f:\sp\public\sdk\inc\guiddef.h -FILE 476 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 477 f:\sp\public\sdk\inc\stralign.h -FILE 478 f:\sp\public\sdk\inc\specstrings.h -FILE 479 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 480 f:\sp\public\sdk\inc\basetsd.h -FILE 481 f:\sp\public\sdk\inc\windows.h -FILE 482 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 483 f:\sp\public\sdk\inc\tvout.h -FILE 484 f:\sp\public\sdk\inc\winsvc.h -FILE 485 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 486 f:\sp\public\sdk\inc\wingdi.h -FILE 487 f:\sp\vctools\crt_bld\self_x86\crt\src\timeset.c -FILE 488 f:\sp\public\sdk\inc\pshpack4.h -FILE 489 f:\sp\public\sdk\inc\poppack.h -FILE 490 f:\sp\public\sdk\inc\winnetwk.h -FILE 491 f:\sp\public\sdk\inc\imm.h -FILE 492 f:\sp\public\sdk\inc\ddbanned.h -FILE 493 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 494 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 495 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 496 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 497 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 498 f:\sp\public\sdk\inc\windef.h -FILE 499 f:\sp\public\sdk\inc\pshpack1.h -FILE 500 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 501 f:\sp\vctools\crt_bld\self_x86\crt\src\time.h -FILE 502 f:\sp\public\sdk\inc\winver.h -FILE 503 f:\sp\public\sdk\inc\wincon.h -FILE 504 f:\sp\vctools\crt_bld\self_x86\crt\src\time.h -FILE 505 f:\sp\public\sdk\inc\imm.h -FILE 506 f:\sp\public\sdk\inc\winbase.h -FILE 507 f:\sp\public\sdk\inc\wingdi.h -FILE 508 f:\sp\public\sdk\inc\winver.h -FILE 509 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 510 f:\sp\public\sdk\inc\windows.h -FILE 511 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 512 f:\sp\public\sdk\inc\pshpack2.h -FILE 513 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 514 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 515 f:\sp\public\sdk\inc\reason.h -FILE 516 f:\sp\vctools\crt_bld\self_x86\crt\src\strftime.c -FILE 517 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 518 f:\sp\public\sdk\inc\specstrings.h -FILE 519 f:\sp\public\sdk\inc\basetsd.h -FILE 520 f:\sp\public\sdk\inc\pshpack4.h -FILE 521 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 522 f:\sp\public\sdk\inc\winnetwk.h -FILE 523 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 524 f:\sp\public\sdk\inc\stralign.h -FILE 525 f:\sp\vctools\crt_bld\self_x86\crt\src\time.inl -FILE 526 f:\sp\public\sdk\inc\poppack.h -FILE 527 f:\sp\public\sdk\inc\winsvc.h -FILE 528 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 529 f:\sp\public\sdk\inc\windef.h -FILE 530 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 531 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 532 f:\sp\public\sdk\inc\winuser.h -FILE 533 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 534 f:\sp\public\sdk\inc\mcx.h -FILE 535 f:\sp\public\sdk\inc\pshpack8.h -FILE 536 f:\sp\public\sdk\inc\guiddef.h -FILE 537 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 538 f:\sp\public\sdk\inc\winnt.h -FILE 539 f:\sp\public\sdk\inc\winnls.h -FILE 540 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 541 f:\sp\public\sdk\inc\pshpack1.h -FILE 542 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 543 f:\sp\public\sdk\inc\winerror.h -FILE 544 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 545 f:\sp\public\sdk\inc\winreg.h -FILE 546 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 547 f:\sp\public\sdk\inc\ddbanned.h -FILE 548 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 549 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 550 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 551 f:\sp\public\sdk\inc\tvout.h -FILE 552 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 553 f:\sp\public\sdk\inc\poppack.h -FILE 554 f:\sp\public\sdk\inc\winnetwk.h -FILE 555 f:\sp\public\sdk\inc\imm.h -FILE 556 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 557 f:\sp\public\sdk\inc\windef.h -FILE 558 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 559 f:\sp\public\sdk\inc\pshpack1.h -FILE 560 f:\sp\public\sdk\inc\winver.h -FILE 561 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 562 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 563 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 564 f:\sp\public\sdk\inc\winnt.h -FILE 565 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 566 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 567 f:\sp\public\sdk\inc\winreg.h -FILE 568 f:\sp\vctools\crt_bld\self_x86\crt\src\days.c -FILE 569 f:\sp\public\sdk\inc\winbase.h -FILE 570 f:\sp\public\sdk\inc\winerror.h -FILE 571 f:\sp\public\sdk\inc\pshpack8.h -FILE 572 f:\sp\public\sdk\inc\reason.h -FILE 573 f:\sp\public\sdk\inc\wincon.h -FILE 574 f:\sp\public\sdk\inc\ddbanned.h -FILE 575 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 576 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 577 f:\sp\public\sdk\inc\pshpack2.h -FILE 578 f:\sp\public\sdk\inc\mcx.h -FILE 579 f:\sp\public\sdk\inc\winuser.h -FILE 580 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 581 f:\sp\public\sdk\inc\winnls.h -FILE 582 f:\sp\public\sdk\inc\guiddef.h -FILE 583 f:\sp\public\sdk\inc\windows.h -FILE 584 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 585 f:\sp\public\sdk\inc\specstrings.h -FILE 586 f:\sp\public\sdk\inc\basetsd.h -FILE 587 f:\sp\public\sdk\inc\stralign.h -FILE 588 f:\sp\public\sdk\inc\tvout.h -FILE 589 f:\sp\public\sdk\inc\winsvc.h -FILE 590 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 591 f:\sp\public\sdk\inc\wingdi.h -FILE 592 f:\sp\public\sdk\inc\pshpack4.h -FILE 593 f:\sp\public\sdk\inc\wincon.h -FILE 594 f:\sp\public\sdk\inc\imm.h -FILE 595 f:\sp\public\sdk\inc\winbase.h -FILE 596 f:\sp\public\sdk\inc\wingdi.h -FILE 597 f:\sp\public\sdk\inc\winver.h -FILE 598 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 599 f:\sp\public\sdk\inc\windows.h -FILE 600 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 601 f:\sp\public\sdk\inc\pshpack2.h -FILE 602 f:\sp\public\sdk\inc\reason.h -FILE 603 f:\sp\vctools\crt_bld\self_x86\crt\src\strnicol.c -FILE 604 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 605 f:\sp\public\sdk\inc\specstrings.h -FILE 606 f:\sp\public\sdk\inc\basetsd.h -FILE 607 f:\sp\public\sdk\inc\pshpack4.h -FILE 608 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 609 f:\sp\public\sdk\inc\winnetwk.h -FILE 610 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 611 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 612 f:\sp\public\sdk\inc\stralign.h -FILE 613 f:\sp\public\sdk\inc\poppack.h -FILE 614 f:\sp\public\sdk\inc\winsvc.h -FILE 615 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 616 f:\sp\public\sdk\inc\windef.h -FILE 617 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 618 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 619 f:\sp\public\sdk\inc\winuser.h -FILE 620 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 621 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 622 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 623 f:\sp\public\sdk\inc\mcx.h -FILE 624 f:\sp\public\sdk\inc\pshpack8.h -FILE 625 f:\sp\public\sdk\inc\guiddef.h -FILE 626 f:\sp\public\sdk\inc\winnt.h -FILE 627 f:\sp\public\sdk\inc\winnls.h -FILE 628 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 629 f:\sp\public\sdk\inc\pshpack1.h -FILE 630 f:\sp\public\sdk\inc\winerror.h -FILE 631 f:\sp\public\sdk\inc\winreg.h -FILE 632 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 633 f:\sp\public\sdk\inc\ddbanned.h -FILE 634 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 635 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 636 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 637 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 638 f:\sp\public\sdk\inc\tvout.h -FILE 639 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 640 f:\sp\public\sdk\inc\mcx.h -FILE 641 f:\sp\public\sdk\inc\pshpack8.h -FILE 642 f:\sp\public\sdk\inc\winnt.h -FILE 643 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 644 f:\sp\public\sdk\inc\specstrings.h -FILE 645 f:\sp\public\sdk\inc\basetsd.h -FILE 646 f:\sp\public\sdk\inc\winnls.h -FILE 647 f:\sp\public\sdk\inc\pshpack1.h -FILE 648 f:\sp\public\sdk\inc\winerror.h -FILE 649 f:\sp\public\sdk\inc\winreg.h -FILE 650 f:\sp\vctools\crt_bld\self_x86\crt\src\strnicmp.c -FILE 651 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 652 f:\sp\public\sdk\inc\tvout.h -FILE 653 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 654 f:\sp\public\sdk\inc\wincon.h -FILE 655 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 656 f:\sp\public\sdk\inc\imm.h -FILE 657 f:\sp\public\sdk\inc\guiddef.h -FILE 658 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 659 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 660 f:\sp\public\sdk\inc\winbase.h -FILE 661 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 662 f:\sp\public\sdk\inc\wingdi.h -FILE 663 f:\sp\public\sdk\inc\windows.h -FILE 664 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 665 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 666 f:\sp\public\sdk\inc\winver.h -FILE 667 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 668 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 669 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 670 f:\sp\public\sdk\inc\pshpack2.h -FILE 671 f:\sp\public\sdk\inc\reason.h -FILE 672 f:\sp\public\sdk\inc\pshpack4.h -FILE 673 f:\sp\public\sdk\inc\winnetwk.h -FILE 674 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 675 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 676 f:\sp\public\sdk\inc\stralign.h -FILE 677 f:\sp\public\sdk\inc\windef.h -FILE 678 f:\sp\public\sdk\inc\poppack.h -FILE 679 f:\sp\public\sdk\inc\winsvc.h -FILE 680 f:\sp\public\sdk\inc\ddbanned.h -FILE 681 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 682 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 683 f:\sp\public\sdk\inc\winuser.h -FILE 684 f:\sp\public\sdk\inc\mcx.h -FILE 685 f:\sp\public\sdk\inc\pshpack8.h -FILE 686 f:\sp\public\sdk\inc\winnt.h -FILE 687 f:\sp\public\sdk\inc\specstrings.h -FILE 688 f:\sp\public\sdk\inc\basetsd.h -FILE 689 f:\sp\public\sdk\inc\winnls.h -FILE 690 f:\sp\public\sdk\inc\pshpack1.h -FILE 691 f:\sp\public\sdk\inc\winerror.h -FILE 692 f:\sp\public\sdk\inc\winreg.h -FILE 693 f:\sp\vctools\crt_bld\self_x86\crt\src\stricmp.c -FILE 694 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 695 f:\sp\public\sdk\inc\tvout.h -FILE 696 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 697 f:\sp\public\sdk\inc\wincon.h -FILE 698 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 699 f:\sp\public\sdk\inc\imm.h -FILE 700 f:\sp\public\sdk\inc\guiddef.h -FILE 701 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 702 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 703 f:\sp\public\sdk\inc\winbase.h -FILE 704 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 705 f:\sp\public\sdk\inc\wingdi.h -FILE 706 f:\sp\public\sdk\inc\windows.h -FILE 707 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 708 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 709 f:\sp\public\sdk\inc\winver.h -FILE 710 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 711 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 712 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 713 f:\sp\public\sdk\inc\pshpack2.h -FILE 714 f:\sp\public\sdk\inc\reason.h -FILE 715 f:\sp\public\sdk\inc\pshpack4.h -FILE 716 f:\sp\public\sdk\inc\winnetwk.h -FILE 717 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 718 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 719 f:\sp\public\sdk\inc\stralign.h -FILE 720 f:\sp\public\sdk\inc\windef.h -FILE 721 f:\sp\public\sdk\inc\poppack.h -FILE 722 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 723 f:\sp\public\sdk\inc\winsvc.h -FILE 724 f:\sp\public\sdk\inc\ddbanned.h -FILE 725 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 726 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 727 f:\sp\public\sdk\inc\winuser.h -FILE 728 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 729 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 730 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 731 f:\sp\vctools\crt_bld\self_x86\crt\src\wcslen.c -FILE 732 f:\sp\public\sdk\inc\ddbanned.h -FILE 733 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 734 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 735 f:\sp\public\sdk\inc\winnt.h -FILE 736 f:\sp\public\sdk\inc\pshpack4.h -FILE 737 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 738 f:\sp\public\sdk\inc\poppack.h -FILE 739 f:\sp\vctools\crt_bld\self_x86\crt\src\tcsncpy_s.inl -FILE 740 f:\sp\public\sdk\inc\winnetwk.h -FILE 741 f:\sp\public\sdk\inc\imm.h -FILE 742 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 743 f:\sp\public\sdk\inc\pshpack1.h -FILE 744 f:\sp\public\sdk\inc\winver.h -FILE 745 f:\sp\vctools\crt_bld\self_x86\crt\src\internal_securecrt.h -FILE 746 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 747 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 748 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 749 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 750 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 751 f:\sp\public\sdk\inc\guiddef.h -FILE 752 f:\sp\public\sdk\inc\windows.h -FILE 753 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 754 f:\sp\public\sdk\inc\specstrings.h -FILE 755 f:\sp\public\sdk\inc\basetsd.h -FILE 756 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 757 f:\sp\public\sdk\inc\winreg.h -FILE 758 f:\sp\vctools\crt_bld\self_x86\crt\src\strncpy_s.c -FILE 759 f:\sp\public\sdk\inc\winbase.h -FILE 760 f:\sp\public\sdk\inc\winerror.h -FILE 761 f:\sp\public\sdk\inc\pshpack8.h -FILE 762 f:\sp\public\sdk\inc\reason.h -FILE 763 f:\sp\public\sdk\inc\wincon.h -FILE 764 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 765 f:\sp\public\sdk\inc\ddbanned.h -FILE 766 f:\sp\public\sdk\inc\windef.h -FILE 767 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 768 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 769 f:\sp\public\sdk\inc\pshpack2.h -FILE 770 f:\sp\public\sdk\inc\mcx.h -FILE 771 f:\sp\public\sdk\inc\winuser.h -FILE 772 f:\sp\public\sdk\inc\winnls.h -FILE 773 f:\sp\public\sdk\inc\stralign.h -FILE 774 f:\sp\public\sdk\inc\tvout.h -FILE 775 f:\sp\public\sdk\inc\winsvc.h -FILE 776 f:\sp\public\sdk\inc\wingdi.h -FILE 777 f:\sp\public\sdk\inc\winnt.h -FILE 778 f:\sp\public\sdk\inc\pshpack4.h -FILE 779 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 780 f:\sp\public\sdk\inc\poppack.h -FILE 781 f:\sp\vctools\crt_bld\self_x86\crt\src\tcscpy_s.inl -FILE 782 f:\sp\public\sdk\inc\winnetwk.h -FILE 783 f:\sp\public\sdk\inc\imm.h -FILE 784 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 785 f:\sp\public\sdk\inc\pshpack1.h -FILE 786 f:\sp\public\sdk\inc\winver.h -FILE 787 f:\sp\vctools\crt_bld\self_x86\crt\src\internal_securecrt.h -FILE 788 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 789 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 790 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 791 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 792 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 793 f:\sp\public\sdk\inc\guiddef.h -FILE 794 f:\sp\public\sdk\inc\windows.h -FILE 795 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 796 f:\sp\public\sdk\inc\specstrings.h -FILE 797 f:\sp\public\sdk\inc\basetsd.h -FILE 798 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 799 f:\sp\public\sdk\inc\winreg.h -FILE 800 f:\sp\vctools\crt_bld\self_x86\crt\src\strcpy_s.c -FILE 801 f:\sp\public\sdk\inc\winbase.h -FILE 802 f:\sp\public\sdk\inc\winerror.h -FILE 803 f:\sp\public\sdk\inc\pshpack8.h -FILE 804 f:\sp\public\sdk\inc\reason.h -FILE 805 f:\sp\public\sdk\inc\wincon.h -FILE 806 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 807 f:\sp\public\sdk\inc\ddbanned.h -FILE 808 f:\sp\public\sdk\inc\windef.h -FILE 809 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 810 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 811 f:\sp\public\sdk\inc\pshpack2.h -FILE 812 f:\sp\public\sdk\inc\mcx.h -FILE 813 f:\sp\public\sdk\inc\winuser.h -FILE 814 f:\sp\public\sdk\inc\winnls.h -FILE 815 f:\sp\public\sdk\inc\stralign.h -FILE 816 f:\sp\public\sdk\inc\tvout.h -FILE 817 f:\sp\public\sdk\inc\winsvc.h -FILE 818 f:\sp\public\sdk\inc\wingdi.h -FILE 819 f:\sp\public\sdk\inc\winnt.h -FILE 820 f:\sp\public\sdk\inc\pshpack4.h -FILE 821 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 822 f:\sp\public\sdk\inc\poppack.h -FILE 823 f:\sp\vctools\crt_bld\self_x86\crt\src\tcscat_s.inl -FILE 824 f:\sp\public\sdk\inc\winnetwk.h -FILE 825 f:\sp\public\sdk\inc\imm.h -FILE 826 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 827 f:\sp\public\sdk\inc\pshpack1.h -FILE 828 f:\sp\public\sdk\inc\winver.h -FILE 829 f:\sp\vctools\crt_bld\self_x86\crt\src\internal_securecrt.h -FILE 830 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 831 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 832 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 833 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 834 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 835 f:\sp\public\sdk\inc\guiddef.h -FILE 836 f:\sp\public\sdk\inc\windows.h -FILE 837 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 838 f:\sp\public\sdk\inc\specstrings.h -FILE 839 f:\sp\public\sdk\inc\basetsd.h -FILE 840 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 841 f:\sp\public\sdk\inc\winreg.h -FILE 842 f:\sp\vctools\crt_bld\self_x86\crt\src\strcat_s.c -FILE 843 f:\sp\public\sdk\inc\winbase.h -FILE 844 f:\sp\public\sdk\inc\winerror.h -FILE 845 f:\sp\public\sdk\inc\pshpack8.h -FILE 846 f:\sp\public\sdk\inc\reason.h -FILE 847 f:\sp\public\sdk\inc\wincon.h -FILE 848 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 849 f:\sp\public\sdk\inc\ddbanned.h -FILE 850 f:\sp\public\sdk\inc\windef.h -FILE 851 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 852 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 853 f:\sp\public\sdk\inc\pshpack2.h -FILE 854 f:\sp\public\sdk\inc\mcx.h -FILE 855 f:\sp\public\sdk\inc\winuser.h -FILE 856 f:\sp\public\sdk\inc\winnls.h -FILE 857 f:\sp\public\sdk\inc\stralign.h -FILE 858 f:\sp\public\sdk\inc\tvout.h -FILE 859 f:\sp\public\sdk\inc\winsvc.h -FILE 860 f:\sp\public\sdk\inc\wingdi.h -FILE 861 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 862 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 863 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 864 f:\sp\vctools\crt_bld\self_x86\crt\src\strlen_s.c -FILE 865 f:\sp\public\sdk\inc\ddbanned.h -FILE 866 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 867 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 868 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\strpbrk.asm -FILE 869 F:\SP\vctools\crt_bld\SELF_X86\crt\src\Intel\STRSPN.ASM -FILE 870 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 871 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\_strnicm.asm -FILE 872 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 873 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 874 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 875 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 876 f:\sp\vctools\crt_bld\self_x86\crt\src\intel\strncmp.c -FILE 877 f:\sp\public\sdk\inc\ddbanned.h -FILE 878 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 879 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 880 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\strlen.asm -FILE 881 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 882 f:\sp\public\sdk\inc\pshpack2.h -FILE 883 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 884 f:\sp\public\sdk\inc\mcx.h -FILE 885 f:\sp\public\sdk\inc\winuser.h -FILE 886 f:\sp\public\sdk\inc\winnls.h -FILE 887 f:\sp\public\sdk\inc\stralign.h -FILE 888 f:\sp\public\sdk\inc\tvout.h -FILE 889 f:\sp\public\sdk\inc\winsvc.h -FILE 890 f:\sp\public\sdk\inc\wingdi.h -FILE 891 f:\sp\public\sdk\inc\winnt.h -FILE 892 f:\sp\public\sdk\inc\pshpack4.h -FILE 893 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 894 f:\sp\public\sdk\inc\poppack.h -FILE 895 f:\sp\public\sdk\inc\winnetwk.h -FILE 896 f:\sp\public\sdk\inc\imm.h -FILE 897 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 898 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 899 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 900 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 901 f:\sp\vctools\crt_bld\self_x86\crt\src\strdup.c -FILE 902 f:\sp\public\sdk\inc\pshpack1.h -FILE 903 f:\sp\public\sdk\inc\winver.h -FILE 904 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 905 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 906 f:\sp\public\sdk\inc\guiddef.h -FILE 907 f:\sp\public\sdk\inc\windows.h -FILE 908 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 909 f:\sp\public\sdk\inc\specstrings.h -FILE 910 f:\sp\public\sdk\inc\basetsd.h -FILE 911 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 912 f:\sp\public\sdk\inc\winreg.h -FILE 913 f:\sp\public\sdk\inc\ddbanned.h -FILE 914 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 915 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 916 f:\sp\public\sdk\inc\winbase.h -FILE 917 f:\sp\public\sdk\inc\winerror.h -FILE 918 f:\sp\public\sdk\inc\pshpack8.h -FILE 919 f:\sp\public\sdk\inc\reason.h -FILE 920 f:\sp\public\sdk\inc\wincon.h -FILE 921 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 922 f:\sp\public\sdk\inc\windef.h -FILE 923 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\strcspn.asm -FILE 924 F:\SP\vctools\crt_bld\SELF_X86\crt\src\Intel\STRSPN.ASM -FILE 925 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 926 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\strcmp.asm -FILE 927 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 928 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\strchr.asm -FILE 929 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 930 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\string\i386\p4_memset.c -FILE 931 f:\sp\public\sdk\inc\ddbanned.h -FILE 932 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 933 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 934 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\memset.asm -FILE 935 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 936 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 937 f:\sp\public\sdk\inc\poppack.h -FILE 938 f:\sp\public\sdk\inc\winnetwk.h -FILE 939 f:\sp\public\sdk\inc\imm.h -FILE 940 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 941 f:\sp\public\sdk\inc\pshpack1.h -FILE 942 f:\sp\public\sdk\inc\winver.h -FILE 943 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 944 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 945 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 946 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 947 f:\sp\public\sdk\inc\guiddef.h -FILE 948 f:\sp\public\sdk\inc\windows.h -FILE 949 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 950 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 951 f:\sp\public\sdk\inc\specstrings.h -FILE 952 f:\sp\public\sdk\inc\basetsd.h -FILE 953 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 954 f:\sp\public\sdk\inc\winreg.h -FILE 955 f:\sp\vctools\crt_bld\self_x86\crt\src\memmove_s.c -FILE 956 f:\sp\public\sdk\inc\winbase.h -FILE 957 f:\sp\public\sdk\inc\winerror.h -FILE 958 f:\sp\public\sdk\inc\pshpack8.h -FILE 959 f:\sp\public\sdk\inc\reason.h -FILE 960 f:\sp\public\sdk\inc\wincon.h -FILE 961 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 962 f:\sp\public\sdk\inc\windef.h -FILE 963 f:\sp\public\sdk\inc\ddbanned.h -FILE 964 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 965 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 966 f:\sp\public\sdk\inc\pshpack2.h -FILE 967 f:\sp\public\sdk\inc\mcx.h -FILE 968 f:\sp\public\sdk\inc\winuser.h -FILE 969 f:\sp\public\sdk\inc\winnls.h -FILE 970 f:\sp\public\sdk\inc\stralign.h -FILE 971 f:\sp\public\sdk\inc\tvout.h -FILE 972 f:\sp\public\sdk\inc\winsvc.h -FILE 973 f:\sp\public\sdk\inc\wingdi.h -FILE 974 f:\sp\public\sdk\inc\winnt.h -FILE 975 f:\sp\public\sdk\inc\pshpack4.h -FILE 976 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\memmove.asm -FILE 977 F:\SP\vctools\crt_bld\SELF_X86\crt\src\Intel\MEMCPY.ASM -FILE 978 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 979 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\string\i386\memcmp.c -FILE 980 f:\sp\public\sdk\inc\ddbanned.h -FILE 981 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 982 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 983 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 984 f:\sp\public\sdk\inc\poppack.h -FILE 985 f:\sp\public\sdk\inc\winnetwk.h -FILE 986 f:\sp\public\sdk\inc\imm.h -FILE 987 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 988 f:\sp\public\sdk\inc\pshpack1.h -FILE 989 f:\sp\public\sdk\inc\winver.h -FILE 990 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 991 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 992 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 993 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 994 f:\sp\public\sdk\inc\guiddef.h -FILE 995 f:\sp\public\sdk\inc\windows.h -FILE 996 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 997 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 998 f:\sp\public\sdk\inc\specstrings.h -FILE 999 f:\sp\public\sdk\inc\basetsd.h -FILE 1000 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1001 f:\sp\public\sdk\inc\winreg.h -FILE 1002 f:\sp\vctools\crt_bld\self_x86\crt\src\memcpy_s.c -FILE 1003 f:\sp\public\sdk\inc\winbase.h -FILE 1004 f:\sp\public\sdk\inc\winerror.h -FILE 1005 f:\sp\public\sdk\inc\pshpack8.h -FILE 1006 f:\sp\public\sdk\inc\reason.h -FILE 1007 f:\sp\public\sdk\inc\wincon.h -FILE 1008 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1009 f:\sp\public\sdk\inc\windef.h -FILE 1010 f:\sp\public\sdk\inc\ddbanned.h -FILE 1011 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1012 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1013 f:\sp\public\sdk\inc\pshpack2.h -FILE 1014 f:\sp\public\sdk\inc\mcx.h -FILE 1015 f:\sp\public\sdk\inc\winuser.h -FILE 1016 f:\sp\public\sdk\inc\winnls.h -FILE 1017 f:\sp\public\sdk\inc\stralign.h -FILE 1018 f:\sp\public\sdk\inc\tvout.h -FILE 1019 f:\sp\public\sdk\inc\winsvc.h -FILE 1020 f:\sp\public\sdk\inc\wingdi.h -FILE 1021 f:\sp\public\sdk\inc\winnt.h -FILE 1022 f:\sp\public\sdk\inc\pshpack4.h -FILE 1023 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\string\i386\p4_memcpy.c -FILE 1024 f:\sp\public\sdk\inc\ddbanned.h -FILE 1025 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 1026 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 1027 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\memcpy.asm -FILE 1028 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 1029 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1030 f:\sp\public\sdk\inc\wincon.h -FILE 1031 f:\sp\public\sdk\inc\imm.h -FILE 1032 f:\sp\public\sdk\inc\winbase.h -FILE 1033 f:\sp\public\sdk\inc\wingdi.h -FILE 1034 f:\sp\public\sdk\inc\winver.h -FILE 1035 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1036 f:\sp\public\sdk\inc\windows.h -FILE 1037 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1038 f:\sp\public\sdk\inc\pshpack2.h -FILE 1039 f:\sp\public\sdk\inc\reason.h -FILE 1040 f:\sp\vctools\crt_bld\self_x86\crt\src\woutputs.c -FILE 1041 f:\sp\vctools\crt_bld\self_x86\crt\src\fltintrn.h -FILE 1042 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1043 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1044 f:\sp\public\sdk\inc\specstrings.h -FILE 1045 f:\sp\public\sdk\inc\basetsd.h -FILE 1046 f:\sp\public\sdk\inc\pshpack4.h -FILE 1047 f:\sp\public\sdk\inc\winnetwk.h -FILE 1048 f:\sp\public\sdk\inc\stralign.h -FILE 1049 f:\sp\public\sdk\inc\poppack.h -FILE 1050 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1051 f:\sp\public\sdk\inc\winsvc.h -FILE 1052 f:\sp\public\sdk\inc\windef.h -FILE 1053 f:\sp\vctools\crt_bld\self_x86\crt\src\output.c -FILE 1054 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1055 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1056 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1057 f:\sp\public\sdk\inc\winuser.h -FILE 1058 f:\sp\public\sdk\inc\mcx.h -FILE 1059 f:\sp\public\sdk\inc\pshpack8.h -FILE 1060 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1061 f:\sp\public\sdk\inc\guiddef.h -FILE 1062 f:\sp\public\sdk\inc\winnt.h -FILE 1063 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1064 f:\sp\public\sdk\inc\winnls.h -FILE 1065 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1066 f:\sp\public\sdk\inc\pshpack1.h -FILE 1067 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 1068 f:\sp\public\sdk\inc\winerror.h -FILE 1069 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1070 f:\sp\vctools\crt_bld\self_x86\crt\src\cvt.h -FILE 1071 f:\sp\vctools\crt_bld\self_x86\crt\src\conio.h -FILE 1072 f:\sp\public\sdk\inc\winreg.h -FILE 1073 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1074 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 1075 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 1076 f:\sp\public\sdk\inc\ddbanned.h -FILE 1077 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1078 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1079 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1080 f:\sp\public\sdk\inc\tvout.h -FILE 1081 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 1082 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 1083 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h -FILE 1084 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1085 f:\sp\public\sdk\inc\wincon.h -FILE 1086 f:\sp\public\sdk\inc\imm.h -FILE 1087 f:\sp\public\sdk\inc\winbase.h -FILE 1088 f:\sp\public\sdk\inc\wingdi.h -FILE 1089 f:\sp\public\sdk\inc\winver.h -FILE 1090 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1091 f:\sp\public\sdk\inc\windows.h -FILE 1092 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1093 f:\sp\public\sdk\inc\pshpack2.h -FILE 1094 f:\sp\public\sdk\inc\reason.h -FILE 1095 f:\sp\vctools\crt_bld\self_x86\crt\src\woutputp.c -FILE 1096 f:\sp\vctools\crt_bld\self_x86\crt\src\fltintrn.h -FILE 1097 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1098 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1099 f:\sp\public\sdk\inc\specstrings.h -FILE 1100 f:\sp\public\sdk\inc\basetsd.h -FILE 1101 f:\sp\public\sdk\inc\pshpack4.h -FILE 1102 f:\sp\public\sdk\inc\winnetwk.h -FILE 1103 f:\sp\public\sdk\inc\stralign.h -FILE 1104 f:\sp\public\sdk\inc\poppack.h -FILE 1105 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1106 f:\sp\public\sdk\inc\winsvc.h -FILE 1107 f:\sp\public\sdk\inc\windef.h -FILE 1108 f:\sp\vctools\crt_bld\self_x86\crt\src\output.c -FILE 1109 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1110 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1111 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1112 f:\sp\public\sdk\inc\winuser.h -FILE 1113 f:\sp\public\sdk\inc\mcx.h -FILE 1114 f:\sp\public\sdk\inc\pshpack8.h -FILE 1115 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1116 f:\sp\public\sdk\inc\guiddef.h -FILE 1117 f:\sp\public\sdk\inc\winnt.h -FILE 1118 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1119 f:\sp\public\sdk\inc\winnls.h -FILE 1120 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1121 f:\sp\public\sdk\inc\pshpack1.h -FILE 1122 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 1123 f:\sp\public\sdk\inc\winerror.h -FILE 1124 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1125 f:\sp\vctools\crt_bld\self_x86\crt\src\cvt.h -FILE 1126 f:\sp\vctools\crt_bld\self_x86\crt\src\conio.h -FILE 1127 f:\sp\public\sdk\inc\winreg.h -FILE 1128 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1129 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 1130 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 1131 f:\sp\public\sdk\inc\ddbanned.h -FILE 1132 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1133 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1134 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1135 f:\sp\public\sdk\inc\tvout.h -FILE 1136 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 1137 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 1138 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h -FILE 1139 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1140 f:\sp\public\sdk\inc\wincon.h -FILE 1141 f:\sp\public\sdk\inc\imm.h -FILE 1142 f:\sp\public\sdk\inc\winbase.h -FILE 1143 f:\sp\public\sdk\inc\wingdi.h -FILE 1144 f:\sp\public\sdk\inc\winver.h -FILE 1145 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1146 f:\sp\public\sdk\inc\windows.h -FILE 1147 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1148 f:\sp\public\sdk\inc\pshpack2.h -FILE 1149 f:\sp\public\sdk\inc\reason.h -FILE 1150 f:\sp\vctools\crt_bld\self_x86\crt\src\woutput.c -FILE 1151 f:\sp\vctools\crt_bld\self_x86\crt\src\fltintrn.h -FILE 1152 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1153 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1154 f:\sp\public\sdk\inc\specstrings.h -FILE 1155 f:\sp\public\sdk\inc\basetsd.h -FILE 1156 f:\sp\public\sdk\inc\pshpack4.h -FILE 1157 f:\sp\public\sdk\inc\winnetwk.h -FILE 1158 f:\sp\public\sdk\inc\stralign.h -FILE 1159 f:\sp\public\sdk\inc\poppack.h -FILE 1160 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1161 f:\sp\public\sdk\inc\winsvc.h -FILE 1162 f:\sp\public\sdk\inc\windef.h -FILE 1163 f:\sp\vctools\crt_bld\self_x86\crt\src\output.c -FILE 1164 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1165 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1166 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1167 f:\sp\public\sdk\inc\winuser.h -FILE 1168 f:\sp\public\sdk\inc\mcx.h -FILE 1169 f:\sp\public\sdk\inc\pshpack8.h -FILE 1170 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1171 f:\sp\public\sdk\inc\guiddef.h -FILE 1172 f:\sp\public\sdk\inc\winnt.h -FILE 1173 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1174 f:\sp\public\sdk\inc\winnls.h -FILE 1175 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1176 f:\sp\public\sdk\inc\pshpack1.h -FILE 1177 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 1178 f:\sp\public\sdk\inc\winerror.h -FILE 1179 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1180 f:\sp\vctools\crt_bld\self_x86\crt\src\cvt.h -FILE 1181 f:\sp\vctools\crt_bld\self_x86\crt\src\conio.h -FILE 1182 f:\sp\public\sdk\inc\winreg.h -FILE 1183 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1184 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 1185 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 1186 f:\sp\public\sdk\inc\ddbanned.h -FILE 1187 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1188 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1189 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1190 f:\sp\public\sdk\inc\tvout.h -FILE 1191 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 1192 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 1193 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h -FILE 1194 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1195 f:\sp\public\sdk\inc\wincon.h -FILE 1196 f:\sp\public\sdk\inc\imm.h -FILE 1197 f:\sp\public\sdk\inc\winbase.h -FILE 1198 f:\sp\public\sdk\inc\wingdi.h -FILE 1199 f:\sp\public\sdk\inc\winver.h -FILE 1200 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1201 f:\sp\public\sdk\inc\windows.h -FILE 1202 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1203 f:\sp\public\sdk\inc\pshpack2.h -FILE 1204 f:\sp\public\sdk\inc\reason.h -FILE 1205 f:\sp\vctools\crt_bld\self_x86\crt\src\fltintrn.h -FILE 1206 f:\sp\vctools\crt_bld\self_x86\crt\src\outputs.c -FILE 1207 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1208 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1209 f:\sp\public\sdk\inc\specstrings.h -FILE 1210 f:\sp\public\sdk\inc\basetsd.h -FILE 1211 f:\sp\public\sdk\inc\pshpack4.h -FILE 1212 f:\sp\public\sdk\inc\winnetwk.h -FILE 1213 f:\sp\public\sdk\inc\stralign.h -FILE 1214 f:\sp\public\sdk\inc\poppack.h -FILE 1215 f:\sp\public\sdk\inc\winsvc.h -FILE 1216 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1217 f:\sp\public\sdk\inc\windef.h -FILE 1218 f:\sp\vctools\crt_bld\self_x86\crt\src\output.c -FILE 1219 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1220 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1221 f:\sp\public\sdk\inc\winuser.h -FILE 1222 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1223 f:\sp\public\sdk\inc\mcx.h -FILE 1224 f:\sp\public\sdk\inc\pshpack8.h -FILE 1225 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1226 f:\sp\public\sdk\inc\guiddef.h -FILE 1227 f:\sp\public\sdk\inc\winnt.h -FILE 1228 f:\sp\public\sdk\inc\winnls.h -FILE 1229 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1230 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1231 f:\sp\public\sdk\inc\pshpack1.h -FILE 1232 f:\sp\public\sdk\inc\winerror.h -FILE 1233 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1234 f:\sp\vctools\crt_bld\self_x86\crt\src\cvt.h -FILE 1235 f:\sp\vctools\crt_bld\self_x86\crt\src\conio.h -FILE 1236 f:\sp\public\sdk\inc\winreg.h -FILE 1237 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1238 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 1239 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 1240 f:\sp\public\sdk\inc\ddbanned.h -FILE 1241 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1242 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1243 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1244 f:\sp\public\sdk\inc\tvout.h -FILE 1245 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 1246 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 1247 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1248 f:\sp\public\sdk\inc\wincon.h -FILE 1249 f:\sp\public\sdk\inc\imm.h -FILE 1250 f:\sp\public\sdk\inc\winbase.h -FILE 1251 f:\sp\public\sdk\inc\wingdi.h -FILE 1252 f:\sp\public\sdk\inc\winver.h -FILE 1253 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1254 f:\sp\public\sdk\inc\windows.h -FILE 1255 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1256 f:\sp\public\sdk\inc\pshpack2.h -FILE 1257 f:\sp\public\sdk\inc\reason.h -FILE 1258 f:\sp\vctools\crt_bld\self_x86\crt\src\fltintrn.h -FILE 1259 f:\sp\vctools\crt_bld\self_x86\crt\src\outputp.c -FILE 1260 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1261 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1262 f:\sp\public\sdk\inc\specstrings.h -FILE 1263 f:\sp\public\sdk\inc\basetsd.h -FILE 1264 f:\sp\public\sdk\inc\pshpack4.h -FILE 1265 f:\sp\public\sdk\inc\winnetwk.h -FILE 1266 f:\sp\public\sdk\inc\stralign.h -FILE 1267 f:\sp\public\sdk\inc\poppack.h -FILE 1268 f:\sp\public\sdk\inc\winsvc.h -FILE 1269 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1270 f:\sp\public\sdk\inc\windef.h -FILE 1271 f:\sp\vctools\crt_bld\self_x86\crt\src\output.c -FILE 1272 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1273 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1274 f:\sp\public\sdk\inc\winuser.h -FILE 1275 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1276 f:\sp\public\sdk\inc\mcx.h -FILE 1277 f:\sp\public\sdk\inc\pshpack8.h -FILE 1278 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1279 f:\sp\public\sdk\inc\guiddef.h -FILE 1280 f:\sp\public\sdk\inc\winnt.h -FILE 1281 f:\sp\public\sdk\inc\winnls.h -FILE 1282 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1283 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1284 f:\sp\public\sdk\inc\pshpack1.h -FILE 1285 f:\sp\public\sdk\inc\winerror.h -FILE 1286 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1287 f:\sp\vctools\crt_bld\self_x86\crt\src\cvt.h -FILE 1288 f:\sp\vctools\crt_bld\self_x86\crt\src\conio.h -FILE 1289 f:\sp\public\sdk\inc\winreg.h -FILE 1290 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1291 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 1292 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 1293 f:\sp\public\sdk\inc\ddbanned.h -FILE 1294 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1295 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1296 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1297 f:\sp\public\sdk\inc\tvout.h -FILE 1298 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 1299 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 1300 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1301 f:\sp\public\sdk\inc\wincon.h -FILE 1302 f:\sp\public\sdk\inc\imm.h -FILE 1303 f:\sp\public\sdk\inc\winbase.h -FILE 1304 f:\sp\public\sdk\inc\wingdi.h -FILE 1305 f:\sp\public\sdk\inc\winver.h -FILE 1306 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1307 f:\sp\public\sdk\inc\windows.h -FILE 1308 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1309 f:\sp\public\sdk\inc\pshpack2.h -FILE 1310 f:\sp\public\sdk\inc\reason.h -FILE 1311 f:\sp\vctools\crt_bld\self_x86\crt\src\fltintrn.h -FILE 1312 f:\sp\vctools\crt_bld\self_x86\crt\src\output.c -FILE 1313 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1314 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1315 f:\sp\public\sdk\inc\specstrings.h -FILE 1316 f:\sp\public\sdk\inc\basetsd.h -FILE 1317 f:\sp\public\sdk\inc\pshpack4.h -FILE 1318 f:\sp\public\sdk\inc\winnetwk.h -FILE 1319 f:\sp\public\sdk\inc\stralign.h -FILE 1320 f:\sp\public\sdk\inc\poppack.h -FILE 1321 f:\sp\public\sdk\inc\winsvc.h -FILE 1322 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1323 f:\sp\public\sdk\inc\windef.h -FILE 1324 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1325 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1326 f:\sp\public\sdk\inc\winuser.h -FILE 1327 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1328 f:\sp\public\sdk\inc\mcx.h -FILE 1329 f:\sp\public\sdk\inc\pshpack8.h -FILE 1330 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1331 f:\sp\public\sdk\inc\guiddef.h -FILE 1332 f:\sp\public\sdk\inc\winnt.h -FILE 1333 f:\sp\public\sdk\inc\winnls.h -FILE 1334 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1335 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1336 f:\sp\public\sdk\inc\pshpack1.h -FILE 1337 f:\sp\public\sdk\inc\winerror.h -FILE 1338 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1339 f:\sp\vctools\crt_bld\self_x86\crt\src\cvt.h -FILE 1340 f:\sp\vctools\crt_bld\self_x86\crt\src\conio.h -FILE 1341 f:\sp\public\sdk\inc\winreg.h -FILE 1342 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1343 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 1344 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 1345 f:\sp\public\sdk\inc\ddbanned.h -FILE 1346 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1347 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1348 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1349 f:\sp\public\sdk\inc\tvout.h -FILE 1350 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 1351 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 1352 f:\sp\public\sdk\inc\stralign.h -FILE 1353 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1354 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1355 f:\sp\public\sdk\inc\tvout.h -FILE 1356 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1357 f:\sp\public\sdk\inc\windows.h -FILE 1358 f:\sp\public\sdk\inc\winsvc.h -FILE 1359 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1360 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 1361 f:\sp\public\sdk\inc\wingdi.h -FILE 1362 f:\sp\public\sdk\inc\pshpack4.h -FILE 1363 f:\sp\public\sdk\inc\poppack.h -FILE 1364 f:\sp\public\sdk\inc\winnetwk.h -FILE 1365 f:\sp\public\sdk\inc\imm.h -FILE 1366 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1367 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1368 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h -FILE 1369 f:\sp\public\sdk\inc\windef.h -FILE 1370 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1371 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1372 f:\sp\public\sdk\inc\pshpack1.h -FILE 1373 f:\sp\public\sdk\inc\winver.h -FILE 1374 f:\sp\vctools\crt_bld\self_x86\crt\src\vswprnc.c -FILE 1375 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1376 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1377 f:\sp\public\sdk\inc\winnt.h -FILE 1378 f:\sp\public\sdk\inc\winreg.h -FILE 1379 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1380 f:\sp\vctools\crt_bld\self_x86\crt\src\vswprint.c -FILE 1381 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1382 f:\sp\public\sdk\inc\winbase.h -FILE 1383 f:\sp\public\sdk\inc\winerror.h -FILE 1384 f:\sp\public\sdk\inc\ddbanned.h -FILE 1385 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1386 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1387 f:\sp\public\sdk\inc\pshpack8.h -FILE 1388 f:\sp\public\sdk\inc\guiddef.h -FILE 1389 f:\sp\public\sdk\inc\specstrings.h -FILE 1390 f:\sp\public\sdk\inc\basetsd.h -FILE 1391 f:\sp\public\sdk\inc\reason.h -FILE 1392 f:\sp\public\sdk\inc\wincon.h -FILE 1393 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 1394 f:\sp\public\sdk\inc\pshpack2.h -FILE 1395 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1396 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1397 f:\sp\public\sdk\inc\mcx.h -FILE 1398 f:\sp\public\sdk\inc\winuser.h -FILE 1399 f:\sp\public\sdk\inc\winnls.h -FILE 1400 f:\sp\public\sdk\inc\pshpack1.h -FILE 1401 f:\sp\public\sdk\inc\winver.h -FILE 1402 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1403 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1404 f:\sp\public\sdk\inc\winnt.h -FILE 1405 f:\sp\public\sdk\inc\winreg.h -FILE 1406 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1407 f:\sp\public\sdk\inc\winbase.h -FILE 1408 f:\sp\public\sdk\inc\winerror.h -FILE 1409 f:\sp\public\sdk\inc\pshpack8.h -FILE 1410 f:\sp\public\sdk\inc\guiddef.h -FILE 1411 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1412 f:\sp\public\sdk\inc\specstrings.h -FILE 1413 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1414 f:\sp\public\sdk\inc\basetsd.h -FILE 1415 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1416 f:\sp\public\sdk\inc\reason.h -FILE 1417 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 1418 f:\sp\public\sdk\inc\wincon.h -FILE 1419 f:\sp\public\sdk\inc\pshpack2.h -FILE 1420 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1421 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1422 f:\sp\public\sdk\inc\mcx.h -FILE 1423 f:\sp\public\sdk\inc\winuser.h -FILE 1424 f:\sp\public\sdk\inc\winnls.h -FILE 1425 f:\sp\vctools\crt_bld\self_x86\crt\src\vswprint.c -FILE 1426 f:\sp\public\sdk\inc\stralign.h -FILE 1427 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1428 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1429 f:\sp\public\sdk\inc\tvout.h -FILE 1430 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1431 f:\sp\public\sdk\inc\windows.h -FILE 1432 f:\sp\public\sdk\inc\winsvc.h -FILE 1433 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1434 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 1435 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1436 f:\sp\public\sdk\inc\wingdi.h -FILE 1437 f:\sp\public\sdk\inc\pshpack4.h -FILE 1438 f:\sp\public\sdk\inc\poppack.h -FILE 1439 f:\sp\public\sdk\inc\ddbanned.h -FILE 1440 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1441 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1442 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h -FILE 1443 f:\sp\public\sdk\inc\winnetwk.h -FILE 1444 f:\sp\public\sdk\inc\imm.h -FILE 1445 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1446 f:\sp\public\sdk\inc\windef.h -FILE 1447 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1448 f:\sp\public\sdk\inc\windef.h -FILE 1449 f:\sp\public\sdk\inc\pshpack1.h -FILE 1450 f:\sp\public\sdk\inc\winver.h -FILE 1451 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1452 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1453 f:\sp\public\sdk\inc\winnt.h -FILE 1454 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1455 f:\sp\public\sdk\inc\winreg.h -FILE 1456 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1457 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1458 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1459 f:\sp\public\sdk\inc\winbase.h -FILE 1460 f:\sp\public\sdk\inc\winerror.h -FILE 1461 f:\sp\public\sdk\inc\pshpack8.h -FILE 1462 f:\sp\vctools\crt_bld\self_x86\crt\src\vfprintf.c -FILE 1463 f:\sp\public\sdk\inc\reason.h -FILE 1464 f:\sp\public\sdk\inc\wincon.h -FILE 1465 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1466 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1467 f:\sp\public\sdk\inc\pshpack2.h -FILE 1468 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1469 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h -FILE 1470 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1471 f:\sp\public\sdk\inc\mcx.h -FILE 1472 f:\sp\public\sdk\inc\winuser.h -FILE 1473 f:\sp\public\sdk\inc\winnls.h -FILE 1474 f:\sp\public\sdk\inc\guiddef.h -FILE 1475 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1476 f:\sp\public\sdk\inc\windows.h -FILE 1477 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1478 f:\sp\public\sdk\inc\specstrings.h -FILE 1479 f:\sp\public\sdk\inc\basetsd.h -FILE 1480 f:\sp\public\sdk\inc\stralign.h -FILE 1481 f:\sp\public\sdk\inc\tvout.h -FILE 1482 f:\sp\public\sdk\inc\ddbanned.h -FILE 1483 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1484 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 1485 f:\sp\public\sdk\inc\winsvc.h -FILE 1486 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1487 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1488 f:\sp\public\sdk\inc\wingdi.h -FILE 1489 f:\sp\public\sdk\inc\pshpack4.h -FILE 1490 f:\sp\public\sdk\inc\poppack.h -FILE 1491 f:\sp\public\sdk\inc\winnetwk.h -FILE 1492 f:\sp\public\sdk\inc\imm.h -FILE 1493 f:\sp\public\sdk\inc\windef.h -FILE 1494 f:\sp\public\sdk\inc\pshpack1.h -FILE 1495 f:\sp\public\sdk\inc\winver.h -FILE 1496 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1497 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1498 f:\sp\public\sdk\inc\winnt.h -FILE 1499 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1500 f:\sp\public\sdk\inc\winreg.h -FILE 1501 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1502 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1503 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1504 f:\sp\public\sdk\inc\winbase.h -FILE 1505 f:\sp\public\sdk\inc\winerror.h -FILE 1506 f:\sp\public\sdk\inc\pshpack8.h -FILE 1507 f:\sp\vctools\crt_bld\self_x86\crt\src\vprintf.c -FILE 1508 f:\sp\public\sdk\inc\reason.h -FILE 1509 f:\sp\public\sdk\inc\wincon.h -FILE 1510 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h -FILE 1511 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1512 f:\sp\public\sdk\inc\pshpack2.h -FILE 1513 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1514 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1515 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1516 f:\sp\public\sdk\inc\mcx.h -FILE 1517 f:\sp\public\sdk\inc\winuser.h -FILE 1518 f:\sp\public\sdk\inc\winnls.h -FILE 1519 f:\sp\public\sdk\inc\guiddef.h -FILE 1520 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1521 f:\sp\public\sdk\inc\windows.h -FILE 1522 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1523 f:\sp\public\sdk\inc\specstrings.h -FILE 1524 f:\sp\public\sdk\inc\basetsd.h -FILE 1525 f:\sp\public\sdk\inc\stralign.h -FILE 1526 f:\sp\public\sdk\inc\tvout.h -FILE 1527 f:\sp\public\sdk\inc\ddbanned.h -FILE 1528 f:\sp\public\sdk\inc\winsvc.h -FILE 1529 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1530 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 1531 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1532 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1533 f:\sp\public\sdk\inc\wingdi.h -FILE 1534 f:\sp\public\sdk\inc\pshpack4.h -FILE 1535 f:\sp\public\sdk\inc\poppack.h -FILE 1536 f:\sp\public\sdk\inc\winnetwk.h -FILE 1537 f:\sp\public\sdk\inc\imm.h -FILE 1538 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1539 f:\sp\public\sdk\inc\pshpack1.h -FILE 1540 f:\sp\public\sdk\inc\winver.h -FILE 1541 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1542 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1543 f:\sp\public\sdk\inc\winnt.h -FILE 1544 f:\sp\public\sdk\inc\winreg.h -FILE 1545 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1546 f:\sp\public\sdk\inc\winbase.h -FILE 1547 f:\sp\public\sdk\inc\winerror.h -FILE 1548 f:\sp\public\sdk\inc\pshpack8.h -FILE 1549 f:\sp\public\sdk\inc\guiddef.h -FILE 1550 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1551 f:\sp\public\sdk\inc\specstrings.h -FILE 1552 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1553 f:\sp\public\sdk\inc\basetsd.h -FILE 1554 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1555 f:\sp\public\sdk\inc\reason.h -FILE 1556 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 1557 f:\sp\public\sdk\inc\wincon.h -FILE 1558 f:\sp\public\sdk\inc\pshpack2.h -FILE 1559 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1560 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1561 f:\sp\public\sdk\inc\mcx.h -FILE 1562 f:\sp\public\sdk\inc\winuser.h -FILE 1563 f:\sp\public\sdk\inc\winnls.h -FILE 1564 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.c -FILE 1565 f:\sp\public\sdk\inc\stralign.h -FILE 1566 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1567 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1568 f:\sp\public\sdk\inc\tvout.h -FILE 1569 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1570 f:\sp\public\sdk\inc\windows.h -FILE 1571 f:\sp\public\sdk\inc\winsvc.h -FILE 1572 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1573 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 1574 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1575 f:\sp\public\sdk\inc\wingdi.h -FILE 1576 f:\sp\public\sdk\inc\pshpack4.h -FILE 1577 f:\sp\public\sdk\inc\poppack.h -FILE 1578 f:\sp\public\sdk\inc\ddbanned.h -FILE 1579 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1580 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1581 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h -FILE 1582 f:\sp\public\sdk\inc\winnetwk.h -FILE 1583 f:\sp\public\sdk\inc\imm.h -FILE 1584 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1585 f:\sp\public\sdk\inc\windef.h -FILE 1586 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1587 f:\sp\public\sdk\inc\windef.h -FILE 1588 f:\sp\public\sdk\inc\pshpack1.h -FILE 1589 f:\sp\public\sdk\inc\winver.h -FILE 1590 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1591 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1592 f:\sp\public\sdk\inc\winnt.h -FILE 1593 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1594 f:\sp\public\sdk\inc\winreg.h -FILE 1595 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1596 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1597 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1598 f:\sp\public\sdk\inc\winbase.h -FILE 1599 f:\sp\public\sdk\inc\winerror.h -FILE 1600 f:\sp\public\sdk\inc\pshpack8.h -FILE 1601 f:\sp\vctools\crt_bld\self_x86\crt\src\printf.c -FILE 1602 f:\sp\public\sdk\inc\reason.h -FILE 1603 f:\sp\public\sdk\inc\wincon.h -FILE 1604 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1605 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1606 f:\sp\public\sdk\inc\pshpack2.h -FILE 1607 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1608 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h -FILE 1609 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1610 f:\sp\public\sdk\inc\mcx.h -FILE 1611 f:\sp\public\sdk\inc\winuser.h -FILE 1612 f:\sp\public\sdk\inc\winnls.h -FILE 1613 f:\sp\public\sdk\inc\guiddef.h -FILE 1614 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1615 f:\sp\public\sdk\inc\windows.h -FILE 1616 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1617 f:\sp\public\sdk\inc\specstrings.h -FILE 1618 f:\sp\public\sdk\inc\basetsd.h -FILE 1619 f:\sp\public\sdk\inc\stralign.h -FILE 1620 f:\sp\public\sdk\inc\tvout.h -FILE 1621 f:\sp\public\sdk\inc\ddbanned.h -FILE 1622 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1623 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 1624 f:\sp\public\sdk\inc\winsvc.h -FILE 1625 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1626 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1627 f:\sp\vctools\crt_bld\self_x86\crt\src\process.h -FILE 1628 f:\sp\public\sdk\inc\wingdi.h -FILE 1629 f:\sp\public\sdk\inc\pshpack4.h -FILE 1630 f:\sp\public\sdk\inc\poppack.h -FILE 1631 f:\sp\public\sdk\inc\winnetwk.h -FILE 1632 f:\sp\public\sdk\inc\imm.h -FILE 1633 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1634 f:\sp\public\sdk\inc\windef.h -FILE 1635 f:\sp\public\sdk\inc\pshpack1.h -FILE 1636 f:\sp\public\sdk\inc\winver.h -FILE 1637 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1638 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1639 f:\sp\public\sdk\inc\winnt.h -FILE 1640 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1641 f:\sp\public\sdk\inc\winreg.h -FILE 1642 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1643 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1644 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1645 f:\sp\public\sdk\inc\winbase.h -FILE 1646 f:\sp\public\sdk\inc\winerror.h -FILE 1647 f:\sp\public\sdk\inc\pshpack8.h -FILE 1648 f:\sp\vctools\crt_bld\self_x86\crt\src\fprintf.c -FILE 1649 f:\sp\public\sdk\inc\reason.h -FILE 1650 f:\sp\public\sdk\inc\wincon.h -FILE 1651 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1652 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1653 f:\sp\public\sdk\inc\pshpack2.h -FILE 1654 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1655 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h -FILE 1656 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1657 f:\sp\public\sdk\inc\mcx.h -FILE 1658 f:\sp\public\sdk\inc\winuser.h -FILE 1659 f:\sp\public\sdk\inc\winnls.h -FILE 1660 f:\sp\public\sdk\inc\guiddef.h -FILE 1661 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1662 f:\sp\public\sdk\inc\windows.h -FILE 1663 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1664 f:\sp\public\sdk\inc\specstrings.h -FILE 1665 f:\sp\public\sdk\inc\basetsd.h -FILE 1666 f:\sp\public\sdk\inc\stralign.h -FILE 1667 f:\sp\public\sdk\inc\tvout.h -FILE 1668 f:\sp\public\sdk\inc\ddbanned.h -FILE 1669 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1670 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 1671 f:\sp\public\sdk\inc\winsvc.h -FILE 1672 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1673 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1674 f:\sp\public\sdk\inc\wingdi.h -FILE 1675 f:\sp\public\sdk\inc\pshpack4.h -FILE 1676 f:\sp\public\sdk\inc\poppack.h -FILE 1677 f:\sp\public\sdk\inc\winnetwk.h -FILE 1678 f:\sp\public\sdk\inc\imm.h -FILE 1679 f:\sp\public\sdk\inc\pshpack1.h -FILE 1680 f:\sp\public\sdk\inc\winver.h -FILE 1681 f:\sp\public\sdk\inc\winnt.h -FILE 1682 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1683 f:\sp\public\sdk\inc\winreg.h -FILE 1684 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1685 f:\sp\public\sdk\inc\winbase.h -FILE 1686 f:\sp\public\sdk\inc\winerror.h -FILE 1687 f:\sp\public\sdk\inc\pshpack8.h -FILE 1688 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h -FILE 1689 f:\sp\public\sdk\inc\reason.h -FILE 1690 f:\sp\public\sdk\inc\wincon.h -FILE 1691 f:\sp\public\sdk\inc\pshpack2.h -FILE 1692 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1693 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1694 f:\sp\public\sdk\inc\mcx.h -FILE 1695 f:\sp\public\sdk\inc\winuser.h -FILE 1696 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1697 f:\sp\public\sdk\inc\winnls.h -FILE 1698 f:\sp\public\sdk\inc\guiddef.h -FILE 1699 f:\sp\public\sdk\inc\windows.h -FILE 1700 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1701 f:\sp\public\sdk\inc\specstrings.h -FILE 1702 f:\sp\public\sdk\inc\basetsd.h -FILE 1703 f:\sp\public\sdk\inc\stralign.h -FILE 1704 f:\sp\vctools\crt_bld\self_x86\crt\src\fflush.c -FILE 1705 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h -FILE 1706 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h -FILE 1707 f:\sp\public\sdk\inc\tvout.h -FILE 1708 f:\sp\public\sdk\inc\winsvc.h -FILE 1709 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1710 f:\sp\public\sdk\inc\wingdi.h -FILE 1711 f:\sp\public\sdk\inc\pshpack4.h -FILE 1712 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1713 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1714 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1715 f:\sp\public\sdk\inc\poppack.h -FILE 1716 f:\sp\public\sdk\inc\ddbanned.h -FILE 1717 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1718 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1719 f:\sp\public\sdk\inc\winnetwk.h -FILE 1720 f:\sp\public\sdk\inc\imm.h -FILE 1721 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1722 f:\sp\public\sdk\inc\windef.h -FILE 1723 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1724 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1725 f:\sp\public\sdk\inc\pshpack8.h -FILE 1726 f:\sp\public\sdk\inc\reason.h -FILE 1727 f:\sp\public\sdk\inc\wincon.h -FILE 1728 f:\sp\public\sdk\inc\pshpack2.h -FILE 1729 f:\sp\public\sdk\inc\mcx.h -FILE 1730 f:\sp\public\sdk\inc\winuser.h -FILE 1731 f:\sp\public\sdk\inc\winnls.h -FILE 1732 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1733 f:\sp\public\sdk\inc\windef.h -FILE 1734 f:\sp\public\sdk\inc\stralign.h -FILE 1735 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h -FILE 1736 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1737 f:\sp\public\sdk\inc\tvout.h -FILE 1738 f:\sp\public\sdk\inc\winsvc.h -FILE 1739 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1740 f:\sp\public\sdk\inc\wingdi.h -FILE 1741 f:\sp\public\sdk\inc\pshpack4.h -FILE 1742 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1743 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1744 f:\sp\public\sdk\inc\poppack.h -FILE 1745 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1746 f:\sp\public\sdk\inc\winnt.h -FILE 1747 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1748 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1749 f:\sp\public\sdk\inc\winnetwk.h -FILE 1750 f:\sp\public\sdk\inc\imm.h -FILE 1751 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1752 f:\sp\vctools\crt_bld\self_x86\crt\src\fclose.c -FILE 1753 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1754 f:\sp\public\sdk\inc\pshpack1.h -FILE 1755 f:\sp\public\sdk\inc\winver.h -FILE 1756 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1757 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1758 f:\sp\public\sdk\inc\guiddef.h -FILE 1759 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1760 f:\sp\public\sdk\inc\ddbanned.h -FILE 1761 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1762 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1763 f:\sp\public\sdk\inc\specstrings.h -FILE 1764 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1765 f:\sp\public\sdk\inc\basetsd.h -FILE 1766 f:\sp\public\sdk\inc\windows.h -FILE 1767 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1768 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h -FILE 1769 f:\sp\public\sdk\inc\winreg.h -FILE 1770 f:\sp\public\sdk\inc\winbase.h -FILE 1771 f:\sp\public\sdk\inc\winerror.h -FILE 1772 f:\sp\public\sdk\inc\poppack.h -FILE 1773 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h -FILE 1774 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1775 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1776 f:\sp\public\sdk\inc\winnetwk.h -FILE 1777 f:\sp\public\sdk\inc\imm.h -FILE 1778 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1779 f:\sp\public\sdk\inc\windef.h -FILE 1780 f:\sp\public\sdk\inc\pshpack1.h -FILE 1781 f:\sp\public\sdk\inc\winver.h -FILE 1782 f:\sp\public\sdk\inc\windows.h -FILE 1783 f:\sp\public\sdk\inc\winnt.h -FILE 1784 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1785 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1786 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1787 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1788 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 1789 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1790 f:\sp\public\sdk\inc\winreg.h -FILE 1791 f:\sp\public\sdk\inc\winbase.h -FILE 1792 f:\sp\vctools\crt_bld\self_x86\crt\src\closeall.c -FILE 1793 f:\sp\public\sdk\inc\winerror.h -FILE 1794 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1795 f:\sp\public\sdk\inc\pshpack8.h -FILE 1796 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1797 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1798 f:\sp\public\sdk\inc\reason.h -FILE 1799 f:\sp\public\sdk\inc\wincon.h -FILE 1800 f:\sp\public\sdk\inc\ddbanned.h -FILE 1801 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1802 f:\sp\public\sdk\inc\pshpack2.h -FILE 1803 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1804 f:\sp\public\sdk\inc\mcx.h -FILE 1805 f:\sp\public\sdk\inc\winuser.h -FILE 1806 f:\sp\public\sdk\inc\winnls.h -FILE 1807 f:\sp\public\sdk\inc\guiddef.h -FILE 1808 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1809 f:\sp\public\sdk\inc\specstrings.h -FILE 1810 f:\sp\public\sdk\inc\basetsd.h -FILE 1811 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1812 f:\sp\public\sdk\inc\stralign.h -FILE 1813 f:\sp\public\sdk\inc\tvout.h -FILE 1814 f:\sp\public\sdk\inc\winsvc.h -FILE 1815 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1816 f:\sp\public\sdk\inc\wingdi.h -FILE 1817 f:\sp\public\sdk\inc\pshpack4.h -FILE 1818 f:\sp\public\sdk\inc\pshpack8.h -FILE 1819 f:\sp\public\sdk\inc\reason.h -FILE 1820 f:\sp\public\sdk\inc\wincon.h -FILE 1821 f:\sp\public\sdk\inc\pshpack2.h -FILE 1822 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1823 f:\sp\public\sdk\inc\mcx.h -FILE 1824 f:\sp\public\sdk\inc\winuser.h -FILE 1825 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1826 f:\sp\public\sdk\inc\winnls.h -FILE 1827 f:\sp\public\sdk\inc\guiddef.h -FILE 1828 f:\sp\public\sdk\inc\windows.h -FILE 1829 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1830 f:\sp\public\sdk\inc\specstrings.h -FILE 1831 f:\sp\public\sdk\inc\basetsd.h -FILE 1832 f:\sp\public\sdk\inc\stralign.h -FILE 1833 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h -FILE 1834 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h -FILE 1835 f:\sp\public\sdk\inc\tvout.h -FILE 1836 f:\sp\public\sdk\inc\winsvc.h -FILE 1837 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1838 f:\sp\public\sdk\inc\wingdi.h -FILE 1839 f:\sp\public\sdk\inc\pshpack4.h -FILE 1840 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 1841 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1842 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1843 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1844 f:\sp\public\sdk\inc\poppack.h -FILE 1845 f:\sp\public\sdk\inc\winnetwk.h -FILE 1846 f:\sp\public\sdk\inc\imm.h -FILE 1847 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1848 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1849 f:\sp\public\sdk\inc\windef.h -FILE 1850 f:\sp\vctools\crt_bld\self_x86\crt\src\_sftbuf.c -FILE 1851 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1852 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1853 f:\sp\public\sdk\inc\pshpack1.h -FILE 1854 f:\sp\public\sdk\inc\winver.h -FILE 1855 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1856 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1857 f:\sp\public\sdk\inc\ddbanned.h -FILE 1858 f:\sp\public\sdk\inc\winnt.h -FILE 1859 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1860 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1861 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1862 f:\sp\public\sdk\inc\winreg.h -FILE 1863 f:\sp\public\sdk\inc\winbase.h -FILE 1864 f:\sp\public\sdk\inc\winerror.h -FILE 1865 f:\sp\public\sdk\inc\pshpack1.h -FILE 1866 f:\sp\public\sdk\inc\winver.h -FILE 1867 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1868 f:\sp\public\sdk\inc\winnt.h -FILE 1869 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1870 f:\sp\public\sdk\inc\winreg.h -FILE 1871 f:\sp\public\sdk\inc\winbase.h -FILE 1872 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h -FILE 1873 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 1874 f:\sp\public\sdk\inc\winerror.h -FILE 1875 f:\sp\public\sdk\inc\pshpack8.h -FILE 1876 f:\sp\public\sdk\inc\reason.h -FILE 1877 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1878 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1879 f:\sp\public\sdk\inc\wincon.h -FILE 1880 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1881 f:\sp\public\sdk\inc\pshpack2.h -FILE 1882 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1883 f:\sp\public\sdk\inc\mcx.h -FILE 1884 f:\sp\public\sdk\inc\winuser.h -FILE 1885 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1886 f:\sp\public\sdk\inc\winnls.h -FILE 1887 f:\sp\public\sdk\inc\guiddef.h -FILE 1888 f:\sp\public\sdk\inc\windows.h -FILE 1889 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1890 f:\sp\public\sdk\inc\specstrings.h -FILE 1891 f:\sp\public\sdk\inc\basetsd.h -FILE 1892 f:\sp\public\sdk\inc\stralign.h -FILE 1893 f:\sp\vctools\crt_bld\self_x86\crt\src\_getbuf.c -FILE 1894 f:\sp\public\sdk\inc\tvout.h -FILE 1895 f:\sp\public\sdk\inc\winsvc.h -FILE 1896 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1897 f:\sp\public\sdk\inc\wingdi.h -FILE 1898 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1899 f:\sp\public\sdk\inc\pshpack4.h -FILE 1900 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1901 f:\sp\public\sdk\inc\poppack.h -FILE 1902 f:\sp\public\sdk\inc\ddbanned.h -FILE 1903 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1904 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1905 f:\sp\public\sdk\inc\winnetwk.h -FILE 1906 f:\sp\public\sdk\inc\imm.h -FILE 1907 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1908 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1909 f:\sp\public\sdk\inc\windef.h -FILE 1910 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1911 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1912 f:\sp\public\sdk\inc\windef.h -FILE 1913 f:\sp\public\sdk\inc\pshpack1.h -FILE 1914 f:\sp\public\sdk\inc\winver.h -FILE 1915 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h -FILE 1916 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1917 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1918 f:\sp\public\sdk\inc\winnt.h -FILE 1919 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1920 f:\sp\public\sdk\inc\winreg.h -FILE 1921 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1922 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1923 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1924 f:\sp\public\sdk\inc\winbase.h -FILE 1925 f:\sp\public\sdk\inc\winerror.h -FILE 1926 f:\sp\public\sdk\inc\pshpack8.h -FILE 1927 f:\sp\vctools\crt_bld\self_x86\crt\src\_freebuf.c -FILE 1928 f:\sp\public\sdk\inc\reason.h -FILE 1929 f:\sp\public\sdk\inc\wincon.h -FILE 1930 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1931 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1932 f:\sp\public\sdk\inc\pshpack2.h -FILE 1933 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1934 f:\sp\public\sdk\inc\mcx.h -FILE 1935 f:\sp\public\sdk\inc\winuser.h -FILE 1936 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1937 f:\sp\public\sdk\inc\winnls.h -FILE 1938 f:\sp\public\sdk\inc\guiddef.h -FILE 1939 f:\sp\public\sdk\inc\windows.h -FILE 1940 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1941 f:\sp\public\sdk\inc\specstrings.h -FILE 1942 f:\sp\public\sdk\inc\basetsd.h -FILE 1943 f:\sp\public\sdk\inc\stralign.h -FILE 1944 f:\sp\public\sdk\inc\tvout.h -FILE 1945 f:\sp\public\sdk\inc\ddbanned.h -FILE 1946 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1947 f:\sp\public\sdk\inc\winsvc.h -FILE 1948 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1949 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1950 f:\sp\public\sdk\inc\wingdi.h -FILE 1951 f:\sp\public\sdk\inc\pshpack4.h -FILE 1952 f:\sp\public\sdk\inc\poppack.h -FILE 1953 f:\sp\public\sdk\inc\winnetwk.h -FILE 1954 f:\sp\public\sdk\inc\imm.h -FILE 1955 f:\sp\public\sdk\inc\specstrings.h -FILE 1956 f:\sp\public\sdk\inc\basetsd.h -FILE 1957 f:\sp\public\sdk\inc\reason.h -FILE 1958 f:\sp\public\sdk\inc\wincon.h -FILE 1959 f:\sp\public\sdk\inc\pshpack2.h -FILE 1960 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1961 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1962 f:\sp\public\sdk\inc\mcx.h -FILE 1963 f:\sp\public\sdk\inc\winuser.h -FILE 1964 f:\sp\public\sdk\inc\winnls.h -FILE 1965 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1966 f:\sp\public\sdk\inc\stralign.h -FILE 1967 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1968 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1969 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1970 f:\sp\public\sdk\inc\windows.h -FILE 1971 f:\sp\public\sdk\inc\tvout.h -FILE 1972 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1973 f:\sp\public\sdk\inc\winsvc.h -FILE 1974 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 1975 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h -FILE 1976 f:\sp\public\sdk\inc\wingdi.h -FILE 1977 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h -FILE 1978 f:\sp\public\sdk\inc\pshpack4.h -FILE 1979 f:\sp\public\sdk\inc\poppack.h -FILE 1980 f:\sp\vctools\crt_bld\self_x86\crt\src\_flsbuf.c -FILE 1981 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 1982 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1983 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1984 f:\sp\public\sdk\inc\winnetwk.h -FILE 1985 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 1986 f:\sp\public\sdk\inc\imm.h -FILE 1987 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1988 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1989 f:\sp\vctools\crt_bld\self_x86\crt\src\_flswbuf.c -FILE 1990 f:\sp\public\sdk\inc\windef.h -FILE 1991 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 1992 f:\sp\public\sdk\inc\pshpack1.h -FILE 1993 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1994 f:\sp\public\sdk\inc\winver.h -FILE 1995 f:\sp\public\sdk\inc\ddbanned.h -FILE 1996 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1997 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1998 f:\sp\public\sdk\inc\winnt.h -FILE 1999 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2000 f:\sp\public\sdk\inc\winreg.h -FILE 2001 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h -FILE 2002 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h -FILE 2003 f:\sp\public\sdk\inc\winbase.h -FILE 2004 f:\sp\public\sdk\inc\winerror.h -FILE 2005 f:\sp\public\sdk\inc\pshpack8.h -FILE 2006 f:\sp\public\sdk\inc\guiddef.h -FILE 2007 f:\sp\public\sdk\inc\basetsd.h -FILE 2008 f:\sp\public\sdk\inc\reason.h -FILE 2009 f:\sp\public\sdk\inc\wincon.h -FILE 2010 f:\sp\public\sdk\inc\pshpack2.h -FILE 2011 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2012 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2013 f:\sp\public\sdk\inc\mcx.h -FILE 2014 f:\sp\public\sdk\inc\winuser.h -FILE 2015 f:\sp\public\sdk\inc\winnls.h -FILE 2016 f:\sp\public\sdk\inc\stralign.h -FILE 2017 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2018 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2019 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2020 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2021 f:\sp\public\sdk\inc\tvout.h -FILE 2022 f:\sp\public\sdk\inc\windows.h -FILE 2023 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2024 f:\sp\public\sdk\inc\winsvc.h -FILE 2025 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 2026 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 2027 f:\sp\public\sdk\inc\wingdi.h -FILE 2028 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h -FILE 2029 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h -FILE 2030 f:\sp\public\sdk\inc\pshpack4.h -FILE 2031 f:\sp\public\sdk\inc\poppack.h -FILE 2032 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 2033 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2034 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2035 f:\sp\public\sdk\inc\winnetwk.h -FILE 2036 f:\sp\public\sdk\inc\imm.h -FILE 2037 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 2038 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2039 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2040 f:\sp\public\sdk\inc\windef.h -FILE 2041 f:\sp\vctools\crt_bld\self_x86\crt\src\_flsbuf.c -FILE 2042 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 2043 f:\sp\public\sdk\inc\pshpack1.h -FILE 2044 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 2045 f:\sp\public\sdk\inc\winver.h -FILE 2046 f:\sp\public\sdk\inc\ddbanned.h -FILE 2047 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2048 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2049 f:\sp\public\sdk\inc\winnt.h -FILE 2050 f:\sp\public\sdk\inc\winreg.h -FILE 2051 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2052 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h -FILE 2053 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h -FILE 2054 f:\sp\public\sdk\inc\winbase.h -FILE 2055 f:\sp\public\sdk\inc\winerror.h -FILE 2056 f:\sp\public\sdk\inc\pshpack8.h -FILE 2057 f:\sp\public\sdk\inc\guiddef.h -FILE 2058 f:\sp\public\sdk\inc\specstrings.h -FILE 2059 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 2060 f:\sp\public\sdk\inc\reason.h -FILE 2061 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2062 f:\sp\public\sdk\inc\wincon.h -FILE 2063 f:\sp\public\sdk\inc\pshpack2.h -FILE 2064 f:\sp\public\sdk\inc\mcx.h -FILE 2065 f:\sp\public\sdk\inc\winuser.h -FILE 2066 f:\sp\public\sdk\inc\winnls.h -FILE 2067 f:\sp\public\sdk\inc\guiddef.h -FILE 2068 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2069 f:\sp\public\sdk\inc\specstrings.h -FILE 2070 f:\sp\public\sdk\inc\basetsd.h -FILE 2071 f:\sp\public\sdk\inc\stralign.h -FILE 2072 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2073 f:\sp\public\sdk\inc\tvout.h -FILE 2074 f:\sp\public\sdk\inc\winsvc.h -FILE 2075 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2076 f:\sp\public\sdk\inc\wingdi.h -FILE 2077 f:\sp\public\sdk\inc\pshpack4.h -FILE 2078 f:\sp\public\sdk\inc\poppack.h -FILE 2079 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h -FILE 2080 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h -FILE 2081 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2082 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2083 f:\sp\public\sdk\inc\winnetwk.h -FILE 2084 f:\sp\public\sdk\inc\imm.h -FILE 2085 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2086 f:\sp\public\sdk\inc\windef.h -FILE 2087 f:\sp\vctools\crt_bld\self_x86\crt\src\_file.c -FILE 2088 f:\sp\public\sdk\inc\pshpack1.h -FILE 2089 f:\sp\public\sdk\inc\winver.h -FILE 2090 f:\sp\public\sdk\inc\windows.h -FILE 2091 f:\sp\public\sdk\inc\winnt.h -FILE 2092 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2093 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2094 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2095 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2096 f:\sp\public\sdk\inc\ddbanned.h -FILE 2097 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2098 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 2099 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2100 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 2101 f:\sp\public\sdk\inc\winreg.h -FILE 2102 f:\sp\public\sdk\inc\winbase.h -FILE 2103 f:\sp\public\sdk\inc\winerror.h -FILE 2104 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2105 f:\sp\public\sdk\inc\pshpack8.h -FILE 2106 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 2107 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2108 f:\sp\public\sdk\inc\windef.h -FILE 2109 f:\sp\public\sdk\inc\pshpack1.h -FILE 2110 f:\sp\public\sdk\inc\winver.h -FILE 2111 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2112 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2113 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2114 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2115 f:\sp\public\sdk\inc\winnt.h -FILE 2116 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2117 f:\sp\public\sdk\inc\winreg.h -FILE 2118 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 2119 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2120 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2121 f:\sp\public\sdk\inc\winbase.h -FILE 2122 f:\sp\public\sdk\inc\winerror.h -FILE 2123 f:\sp\public\sdk\inc\pshpack8.h -FILE 2124 f:\sp\vctools\crt_bld\self_x86\crt\src\fputwc.c -FILE 2125 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2126 f:\sp\public\sdk\inc\reason.h -FILE 2127 f:\sp\public\sdk\inc\wincon.h -FILE 2128 f:\sp\public\sdk\inc\pshpack2.h -FILE 2129 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 2130 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 2131 f:\sp\public\sdk\inc\mcx.h -FILE 2132 f:\sp\public\sdk\inc\winuser.h -FILE 2133 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 2134 f:\sp\public\sdk\inc\winnls.h -FILE 2135 f:\sp\public\sdk\inc\guiddef.h -FILE 2136 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h -FILE 2137 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h -FILE 2138 f:\sp\public\sdk\inc\stralign.h -FILE 2139 f:\sp\public\sdk\inc\specstrings.h -FILE 2140 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h -FILE 2141 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2142 f:\sp\public\sdk\inc\basetsd.h -FILE 2143 f:\sp\public\sdk\inc\windows.h -FILE 2144 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2145 f:\sp\public\sdk\inc\tvout.h -FILE 2146 f:\sp\public\sdk\inc\ddbanned.h -FILE 2147 f:\sp\public\sdk\inc\winsvc.h -FILE 2148 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2149 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2150 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2151 f:\sp\public\sdk\inc\wingdi.h -FILE 2152 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 2153 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2154 f:\sp\public\sdk\inc\pshpack4.h -FILE 2155 f:\sp\public\sdk\inc\poppack.h -FILE 2156 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 2157 f:\sp\public\sdk\inc\winnetwk.h -FILE 2158 f:\sp\public\sdk\inc\imm.h -FILE 2159 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2160 f:\sp\public\sdk\inc\poppack.h -FILE 2161 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 2162 f:\sp\public\sdk\inc\winnetwk.h -FILE 2163 f:\sp\public\sdk\inc\imm.h -FILE 2164 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2165 f:\sp\public\sdk\inc\windef.h -FILE 2166 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2167 f:\sp\public\sdk\inc\pshpack1.h -FILE 2168 f:\sp\public\sdk\inc\winver.h -FILE 2169 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2170 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2171 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2172 f:\sp\public\sdk\inc\winnt.h -FILE 2173 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2174 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2175 f:\sp\public\sdk\inc\winreg.h -FILE 2176 f:\sp\vctools\crt_bld\self_x86\crt\src\fileno.c -FILE 2177 f:\sp\public\sdk\inc\winbase.h -FILE 2178 f:\sp\public\sdk\inc\winerror.h -FILE 2179 f:\sp\public\sdk\inc\pshpack8.h -FILE 2180 f:\sp\public\sdk\inc\reason.h -FILE 2181 f:\sp\public\sdk\inc\wincon.h -FILE 2182 f:\sp\public\sdk\inc\ddbanned.h -FILE 2183 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2184 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2185 f:\sp\public\sdk\inc\pshpack2.h -FILE 2186 f:\sp\public\sdk\inc\mcx.h -FILE 2187 f:\sp\public\sdk\inc\winuser.h -FILE 2188 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2189 f:\sp\public\sdk\inc\winnls.h -FILE 2190 f:\sp\public\sdk\inc\guiddef.h -FILE 2191 f:\sp\public\sdk\inc\windows.h -FILE 2192 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2193 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 2194 f:\sp\public\sdk\inc\specstrings.h -FILE 2195 f:\sp\public\sdk\inc\basetsd.h -FILE 2196 f:\sp\public\sdk\inc\stralign.h -FILE 2197 f:\sp\public\sdk\inc\tvout.h -FILE 2198 f:\sp\public\sdk\inc\winsvc.h -FILE 2199 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2200 f:\sp\public\sdk\inc\wingdi.h -FILE 2201 f:\sp\public\sdk\inc\pshpack4.h -FILE 2202 f:\sp\public\sdk\inc\pshpack2.h -FILE 2203 f:\sp\public\sdk\inc\winreg.h -FILE 2204 f:\sp\public\sdk\inc\guiddef.h -FILE 2205 f:\sp\public\sdk\inc\windows.h -FILE 2206 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2207 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 2208 f:\sp\public\sdk\inc\specstrings.h -FILE 2209 f:\sp\public\sdk\inc\basetsd.h -FILE 2210 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2211 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2212 f:\sp\public\sdk\inc\pshpack4.h -FILE 2213 f:\sp\public\sdk\inc\reason.h -FILE 2214 f:\sp\public\sdk\inc\wincon.h -FILE 2215 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2216 f:\sp\public\sdk\inc\poppack.h -FILE 2217 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2218 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h -FILE 2219 f:\sp\public\sdk\inc\mcx.h -FILE 2220 f:\sp\public\sdk\inc\winuser.h -FILE 2221 f:\sp\public\sdk\inc\winnls.h -FILE 2222 f:\sp\public\sdk\inc\stralign.h -FILE 2223 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2224 f:\sp\public\sdk\inc\windef.h -FILE 2225 f:\sp\public\sdk\inc\tvout.h -FILE 2226 f:\sp\public\sdk\inc\winsvc.h -FILE 2227 f:\sp\vctools\crt_bld\self_x86\crt\src\tidtable.c -FILE 2228 f:\sp\public\sdk\inc\wingdi.h -FILE 2229 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2230 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2231 f:\sp\public\sdk\inc\winnt.h -FILE 2232 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2233 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2234 f:\sp\public\sdk\inc\winnetwk.h -FILE 2235 f:\sp\public\sdk\inc\imm.h -FILE 2236 f:\sp\public\sdk\inc\ddbanned.h -FILE 2237 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2238 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2239 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 2240 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2241 f:\sp\public\sdk\inc\winbase.h -FILE 2242 f:\sp\public\sdk\inc\winerror.h -FILE 2243 f:\sp\public\sdk\inc\pshpack1.h -FILE 2244 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 2245 f:\sp\vctools\crt_bld\self_x86\crt\src\memory.h -FILE 2246 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2247 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h -FILE 2248 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 2249 f:\sp\public\sdk\inc\pshpack8.h -FILE 2250 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2251 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2252 f:\sp\public\sdk\inc\winver.h -FILE 2253 f:\sp\public\sdk\inc\pshpack4.h -FILE 2254 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 2255 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2256 f:\sp\public\sdk\inc\poppack.h -FILE 2257 f:\sp\public\sdk\inc\winnt.h -FILE 2258 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2259 f:\sp\public\sdk\inc\winnetwk.h -FILE 2260 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 2261 f:\sp\public\sdk\inc\imm.h -FILE 2262 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 2263 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2264 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2265 f:\sp\public\sdk\inc\pshpack1.h -FILE 2266 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2267 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2268 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2269 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2270 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2271 f:\sp\public\sdk\inc\winver.h -FILE 2272 f:\sp\public\sdk\inc\guiddef.h -FILE 2273 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2274 f:\sp\public\sdk\inc\specstrings.h -FILE 2275 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2276 f:\sp\public\sdk\inc\basetsd.h -FILE 2277 f:\sp\public\sdk\inc\windows.h -FILE 2278 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2279 f:\sp\public\sdk\inc\winreg.h -FILE 2280 f:\sp\vctools\crt_bld\self_x86\crt\src\stdenvp.c -FILE 2281 f:\sp\public\sdk\inc\winbase.h -FILE 2282 f:\sp\public\sdk\inc\winerror.h -FILE 2283 f:\sp\public\sdk\inc\pshpack8.h -FILE 2284 f:\sp\public\sdk\inc\reason.h -FILE 2285 f:\sp\public\sdk\inc\ddbanned.h -FILE 2286 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2287 f:\sp\public\sdk\inc\wincon.h -FILE 2288 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2289 f:\sp\public\sdk\inc\pshpack2.h -FILE 2290 f:\sp\public\sdk\inc\mcx.h -FILE 2291 f:\sp\public\sdk\inc\winuser.h -FILE 2292 f:\sp\public\sdk\inc\winnls.h -FILE 2293 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2294 f:\sp\public\sdk\inc\windef.h -FILE 2295 f:\sp\public\sdk\inc\stralign.h -FILE 2296 f:\sp\public\sdk\inc\tvout.h -FILE 2297 f:\sp\public\sdk\inc\winsvc.h -FILE 2298 f:\sp\public\sdk\inc\wingdi.h -FILE 2299 f:\sp\public\sdk\inc\poppack.h -FILE 2300 f:\sp\vctools\crt_bld\self_x86\crt\src\dos.h -FILE 2301 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2302 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 2303 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2304 f:\sp\public\sdk\inc\winnetwk.h -FILE 2305 f:\sp\public\sdk\inc\imm.h -FILE 2306 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2307 f:\sp\public\sdk\inc\windef.h -FILE 2308 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2309 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2310 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 2311 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 2312 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h -FILE 2313 f:\sp\public\sdk\inc\pshpack1.h -FILE 2314 f:\sp\public\sdk\inc\winver.h -FILE 2315 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2316 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2317 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2318 f:\sp\public\sdk\inc\winnt.h -FILE 2319 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2320 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2321 f:\sp\public\sdk\inc\winreg.h -FILE 2322 f:\sp\vctools\crt_bld\self_x86\crt\src\stdargv.c -FILE 2323 f:\sp\public\sdk\inc\winbase.h -FILE 2324 f:\sp\public\sdk\inc\winerror.h -FILE 2325 f:\sp\public\sdk\inc\pshpack8.h -FILE 2326 f:\sp\public\sdk\inc\reason.h -FILE 2327 f:\sp\public\sdk\inc\wincon.h -FILE 2328 f:\sp\public\sdk\inc\ddbanned.h -FILE 2329 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2330 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2331 f:\sp\public\sdk\inc\pshpack2.h -FILE 2332 f:\sp\public\sdk\inc\mcx.h -FILE 2333 f:\sp\public\sdk\inc\winuser.h -FILE 2334 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2335 f:\sp\public\sdk\inc\winnls.h -FILE 2336 f:\sp\public\sdk\inc\guiddef.h -FILE 2337 f:\sp\public\sdk\inc\windows.h -FILE 2338 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2339 f:\sp\public\sdk\inc\specstrings.h -FILE 2340 f:\sp\public\sdk\inc\basetsd.h -FILE 2341 f:\sp\public\sdk\inc\stralign.h -FILE 2342 f:\sp\public\sdk\inc\tvout.h -FILE 2343 f:\sp\public\sdk\inc\winsvc.h -FILE 2344 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2345 f:\sp\public\sdk\inc\wingdi.h -FILE 2346 f:\sp\public\sdk\inc\pshpack4.h -FILE 2347 f:\sp\public\sdk\inc\reason.h -FILE 2348 f:\sp\public\sdk\inc\wincon.h -FILE 2349 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2350 f:\sp\public\sdk\inc\poppack.h -FILE 2351 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2352 f:\sp\public\sdk\inc\mcx.h -FILE 2353 f:\sp\public\sdk\inc\winuser.h -FILE 2354 f:\sp\public\sdk\inc\winnls.h -FILE 2355 f:\sp\public\sdk\inc\stralign.h -FILE 2356 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2357 f:\sp\public\sdk\inc\windef.h -FILE 2358 f:\sp\public\sdk\inc\tvout.h -FILE 2359 f:\sp\public\sdk\inc\winsvc.h -FILE 2360 f:\sp\public\sdk\inc\wingdi.h -FILE 2361 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2362 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2363 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2364 f:\sp\public\sdk\inc\winnt.h -FILE 2365 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2366 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2367 f:\sp\public\sdk\inc\winnetwk.h -FILE 2368 f:\sp\public\sdk\inc\imm.h -FILE 2369 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h -FILE 2370 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2371 f:\sp\vctools\crt_bld\self_x86\crt\src\mlock.c -FILE 2372 f:\sp\public\sdk\inc\winbase.h -FILE 2373 f:\sp\public\sdk\inc\winerror.h -FILE 2374 f:\sp\public\sdk\inc\pshpack1.h -FILE 2375 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 2376 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2377 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 2378 f:\sp\public\sdk\inc\pshpack8.h -FILE 2379 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 2380 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 2381 f:\sp\public\sdk\inc\winver.h -FILE 2382 f:\sp\public\sdk\inc\ddbanned.h -FILE 2383 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2384 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2385 f:\sp\public\sdk\inc\pshpack2.h -FILE 2386 f:\sp\public\sdk\inc\winreg.h -FILE 2387 f:\sp\public\sdk\inc\guiddef.h -FILE 2388 f:\sp\public\sdk\inc\windows.h -FILE 2389 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2390 f:\sp\public\sdk\inc\specstrings.h -FILE 2391 f:\sp\public\sdk\inc\basetsd.h -FILE 2392 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2393 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 2394 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2395 f:\sp\public\sdk\inc\pshpack4.h -FILE 2396 f:\sp\public\sdk\inc\poppack.h -FILE 2397 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 2398 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 2399 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2400 f:\sp\public\sdk\inc\winnetwk.h -FILE 2401 f:\sp\public\sdk\inc\imm.h -FILE 2402 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2403 f:\sp\public\sdk\inc\windef.h -FILE 2404 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2405 f:\sp\public\sdk\inc\pshpack1.h -FILE 2406 f:\sp\public\sdk\inc\winver.h -FILE 2407 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2408 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2409 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2410 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 2411 f:\sp\public\sdk\inc\winnt.h -FILE 2412 f:\sp\vctools\crt_bld\self_x86\crt\src\cmsgs.h -FILE 2413 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2414 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 2415 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2416 f:\sp\public\sdk\inc\winreg.h -FILE 2417 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2418 f:\sp\vctools\crt_bld\self_x86\crt\src\crt0msg.c -FILE 2419 f:\sp\public\sdk\inc\winbase.h -FILE 2420 f:\sp\public\sdk\inc\winerror.h -FILE 2421 f:\sp\public\sdk\inc\pshpack8.h -FILE 2422 f:\sp\public\sdk\inc\reason.h -FILE 2423 f:\sp\public\sdk\inc\wincon.h -FILE 2424 f:\sp\public\sdk\inc\ddbanned.h -FILE 2425 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2426 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2427 f:\sp\public\sdk\inc\pshpack2.h -FILE 2428 f:\sp\public\sdk\inc\mcx.h -FILE 2429 f:\sp\public\sdk\inc\winuser.h -FILE 2430 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2431 f:\sp\public\sdk\inc\winnls.h -FILE 2432 f:\sp\public\sdk\inc\guiddef.h -FILE 2433 f:\sp\public\sdk\inc\windows.h -FILE 2434 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 2435 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2436 f:\sp\public\sdk\inc\specstrings.h -FILE 2437 f:\sp\public\sdk\inc\basetsd.h -FILE 2438 f:\sp\public\sdk\inc\stralign.h -FILE 2439 f:\sp\public\sdk\inc\tvout.h -FILE 2440 f:\sp\public\sdk\inc\winsvc.h -FILE 2441 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2442 f:\sp\public\sdk\inc\wingdi.h -FILE 2443 f:\sp\public\sdk\inc\pshpack4.h -FILE 2444 f:\sp\public\sdk\inc\pshpack1.h -FILE 2445 f:\sp\public\sdk\inc\winver.h -FILE 2446 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2447 f:\sp\public\sdk\inc\winnt.h -FILE 2448 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2449 f:\sp\public\sdk\inc\winreg.h -FILE 2450 f:\sp\public\sdk\inc\winbase.h -FILE 2451 f:\sp\public\sdk\inc\winerror.h -FILE 2452 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h -FILE 2453 f:\sp\public\sdk\inc\pshpack8.h -FILE 2454 f:\sp\public\sdk\inc\reason.h -FILE 2455 f:\sp\public\sdk\inc\wincon.h -FILE 2456 f:\sp\public\sdk\inc\pshpack2.h -FILE 2457 f:\sp\vctools\crt_bld\self_x86\crt\src\crt0init.c -FILE 2458 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2459 f:\sp\public\sdk\inc\mcx.h -FILE 2460 f:\sp\public\sdk\inc\winuser.h -FILE 2461 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2462 f:\sp\public\sdk\inc\winnls.h -FILE 2463 f:\sp\public\sdk\inc\guiddef.h -FILE 2464 f:\sp\public\sdk\inc\windows.h -FILE 2465 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2466 f:\sp\public\sdk\inc\specstrings.h -FILE 2467 f:\sp\public\sdk\inc\basetsd.h -FILE 2468 f:\sp\public\sdk\inc\stralign.h -FILE 2469 f:\sp\public\sdk\inc\tvout.h -FILE 2470 f:\sp\public\sdk\inc\winsvc.h -FILE 2471 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2472 f:\sp\public\sdk\inc\wingdi.h -FILE 2473 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 2474 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2475 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2476 f:\sp\public\sdk\inc\pshpack4.h -FILE 2477 f:\sp\public\sdk\inc\ddbanned.h -FILE 2478 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2479 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2480 f:\sp\public\sdk\inc\poppack.h -FILE 2481 f:\sp\public\sdk\inc\winnetwk.h -FILE 2482 f:\sp\public\sdk\inc\imm.h -FILE 2483 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2484 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2485 f:\sp\public\sdk\inc\windef.h -FILE 2486 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 2487 f:\sp\public\sdk\inc\poppack.h -FILE 2488 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 2489 f:\sp\public\sdk\inc\winnetwk.h -FILE 2490 f:\sp\public\sdk\inc\imm.h -FILE 2491 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2492 f:\sp\public\sdk\inc\windef.h -FILE 2493 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2494 f:\sp\public\sdk\inc\pshpack1.h -FILE 2495 f:\sp\public\sdk\inc\winver.h -FILE 2496 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2497 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2498 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2499 f:\sp\public\sdk\inc\winnt.h -FILE 2500 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2501 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2502 f:\sp\public\sdk\inc\winreg.h -FILE 2503 f:\sp\vctools\crt_bld\self_x86\crt\src\crt0fp.c -FILE 2504 f:\sp\public\sdk\inc\winbase.h -FILE 2505 f:\sp\public\sdk\inc\winerror.h -FILE 2506 f:\sp\public\sdk\inc\pshpack8.h -FILE 2507 f:\sp\public\sdk\inc\reason.h -FILE 2508 f:\sp\public\sdk\inc\wincon.h -FILE 2509 f:\sp\public\sdk\inc\ddbanned.h -FILE 2510 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2511 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2512 f:\sp\public\sdk\inc\pshpack2.h -FILE 2513 f:\sp\public\sdk\inc\mcx.h -FILE 2514 f:\sp\public\sdk\inc\winuser.h -FILE 2515 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2516 f:\sp\public\sdk\inc\winnls.h -FILE 2517 f:\sp\public\sdk\inc\guiddef.h -FILE 2518 f:\sp\public\sdk\inc\windows.h -FILE 2519 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2520 f:\sp\public\sdk\inc\specstrings.h -FILE 2521 f:\sp\public\sdk\inc\basetsd.h -FILE 2522 f:\sp\public\sdk\inc\stralign.h -FILE 2523 f:\sp\public\sdk\inc\tvout.h -FILE 2524 f:\sp\public\sdk\inc\winsvc.h -FILE 2525 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2526 f:\sp\public\sdk\inc\wingdi.h -FILE 2527 f:\sp\public\sdk\inc\pshpack4.h -FILE 2528 f:\sp\vctools\crt_bld\self_x86\crt\src\process.h -FILE 2529 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2530 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2531 f:\sp\public\sdk\inc\pshpack4.h -FILE 2532 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2533 f:\sp\public\sdk\inc\reason.h -FILE 2534 f:\sp\public\sdk\inc\wincon.h -FILE 2535 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2536 f:\sp\public\sdk\inc\poppack.h -FILE 2537 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h -FILE 2538 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2539 f:\sp\public\sdk\inc\mcx.h -FILE 2540 f:\sp\public\sdk\inc\winuser.h -FILE 2541 f:\sp\public\sdk\inc\winnls.h -FILE 2542 f:\sp\public\sdk\inc\stralign.h -FILE 2543 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2544 f:\sp\public\sdk\inc\windef.h -FILE 2545 f:\sp\public\sdk\inc\tvout.h -FILE 2546 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2547 f:\sp\public\sdk\inc\winsvc.h -FILE 2548 f:\sp\public\sdk\inc\wingdi.h -FILE 2549 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h -FILE 2550 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcapi.h -FILE 2551 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2552 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2553 f:\sp\vctools\crt_bld\self_x86\crt\src\mbdata.h -FILE 2554 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h -FILE 2555 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 2556 f:\sp\public\sdk\inc\winnt.h -FILE 2557 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2558 f:\sp\public\sdk\inc\winnetwk.h -FILE 2559 f:\sp\public\sdk\inc\imm.h -FILE 2560 f:\sp\vctools\crt_bld\self_x86\crt\src\crt0dat.c -FILE 2561 f:\sp\public\sdk\inc\winbase.h -FILE 2562 f:\sp\public\sdk\inc\winerror.h -FILE 2563 f:\sp\public\sdk\inc\pshpack1.h -FILE 2564 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 2565 f:\sp\public\sdk\inc\pshpack8.h -FILE 2566 f:\sp\public\sdk\inc\winver.h -FILE 2567 f:\sp\public\sdk\inc\ddbanned.h -FILE 2568 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2569 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2570 f:\sp\vctools\crt_bld\self_x86\crt\src\dos.h -FILE 2571 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2572 f:\sp\public\sdk\inc\pshpack2.h -FILE 2573 f:\sp\public\sdk\inc\winreg.h -FILE 2574 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2575 f:\sp\public\sdk\inc\guiddef.h -FILE 2576 f:\sp\public\sdk\inc\windows.h -FILE 2577 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2578 f:\sp\public\sdk\inc\specstrings.h -FILE 2579 f:\sp\public\sdk\inc\basetsd.h -FILE 2580 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2581 f:\sp\public\sdk\inc\tvout.h -FILE 2582 f:\sp\public\sdk\inc\winsvc.h -FILE 2583 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2584 f:\sp\public\sdk\inc\wingdi.h -FILE 2585 f:\sp\public\sdk\inc\pshpack4.h -FILE 2586 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 2587 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 2588 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcapi.h -FILE 2589 f:\sp\public\sdk\inc\poppack.h -FILE 2590 f:\sp\vctools\crt_bld\self_x86\crt\src\process.h -FILE 2591 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 2592 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 2593 f:\sp\public\sdk\inc\winnetwk.h -FILE 2594 f:\sp\public\sdk\inc\imm.h -FILE 2595 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2596 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2597 f:\sp\public\sdk\inc\windef.h -FILE 2598 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2599 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2600 f:\sp\vctools\crt_bld\self_x86\crt\src\dos.h -FILE 2601 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2602 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2603 f:\sp\public\sdk\inc\pshpack1.h -FILE 2604 f:\sp\public\sdk\inc\winver.h -FILE 2605 f:\sp\public\sdk\inc\winnt.h -FILE 2606 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2607 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 2608 f:\sp\vctools\crt_bld\self_x86\crt\src\crt0.c -FILE 2609 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2610 f:\sp\public\sdk\inc\winreg.h -FILE 2611 f:\sp\public\sdk\inc\winbase.h -FILE 2612 f:\sp\public\sdk\inc\winerror.h -FILE 2613 f:\sp\public\sdk\inc\ddbanned.h -FILE 2614 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2615 f:\sp\public\sdk\inc\pshpack8.h -FILE 2616 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2617 f:\sp\public\sdk\inc\reason.h -FILE 2618 f:\sp\public\sdk\inc\wincon.h -FILE 2619 f:\sp\public\sdk\inc\pshpack2.h -FILE 2620 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2621 f:\sp\public\sdk\inc\mcx.h -FILE 2622 f:\sp\public\sdk\inc\winuser.h -FILE 2623 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2624 f:\sp\public\sdk\inc\winnls.h -FILE 2625 f:\sp\public\sdk\inc\guiddef.h -FILE 2626 f:\sp\public\sdk\inc\windows.h -FILE 2627 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2628 f:\sp\public\sdk\inc\specstrings.h -FILE 2629 f:\sp\public\sdk\inc\basetsd.h -FILE 2630 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h -FILE 2631 f:\sp\public\sdk\inc\stralign.h -FILE 2632 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\alloca16.asm -FILE 2633 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 2634 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\chkstk.asm -FILE 2635 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 2636 f:\sp\public\sdk\inc\wincon.h -FILE 2637 f:\sp\public\sdk\inc\imm.h -FILE 2638 f:\sp\public\sdk\inc\winbase.h -FILE 2639 f:\sp\public\sdk\inc\wingdi.h -FILE 2640 f:\sp\public\sdk\inc\winver.h -FILE 2641 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 2642 f:\sp\public\sdk\inc\windows.h -FILE 2643 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 2644 f:\sp\public\sdk\inc\pshpack2.h -FILE 2645 f:\sp\public\sdk\inc\reason.h -FILE 2646 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\rtc\initsect.cpp -FILE 2647 f:\sp\public\sdk\inc\specstrings.h -FILE 2648 f:\sp\public\sdk\inc\basetsd.h -FILE 2649 f:\sp\public\sdk\inc\pshpack4.h -FILE 2650 f:\sp\public\sdk\inc\winnetwk.h -FILE 2651 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\errno.h -FILE 2652 f:\sp\public\sdk\inc\stralign.h -FILE 2653 f:\sp\public\sdk\inc\poppack.h -FILE 2654 f:\sp\public\sdk\inc\winsvc.h -FILE 2655 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 2656 f:\sp\public\sdk\inc\windef.h -FILE 2657 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\internal.h -FILE 2658 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 2659 f:\sp\public\sdk\inc\winuser.h -FILE 2660 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 2661 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sect_attribs.h -FILE 2662 f:\sp\public\sdk\inc\mcx.h -FILE 2663 f:\sp\public\sdk\inc\pshpack8.h -FILE 2664 f:\sp\public\sdk\inc\guiddef.h -FILE 2665 f:\sp\public\sdk\inc\winnt.h -FILE 2666 f:\sp\public\sdk\inc\winnls.h -FILE 2667 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 2668 f:\sp\public\sdk\inc\pshpack1.h -FILE 2669 f:\sp\public\sdk\inc\winerror.h -FILE 2670 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\rtcapi.h -FILE 2671 f:\sp\public\sdk\inc\winreg.h -FILE 2672 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 2673 f:\sp\public\sdk\inc\ddbanned.h -FILE 2674 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 2675 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 2676 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\rtcpriv.h -FILE 2677 f:\sp\public\sdk\inc\tvout.h -FILE 2678 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\malloc.h -FILE 2679 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h -FILE 2680 f:\sp\public\sdk\inc\poppack.h -FILE 2681 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2682 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2683 f:\sp\public\sdk\inc\winnetwk.h -FILE 2684 f:\sp\public\sdk\inc\imm.h -FILE 2685 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2686 f:\sp\public\sdk\inc\windef.h -FILE 2687 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2688 f:\sp\public\sdk\inc\pshpack1.h -FILE 2689 f:\sp\public\sdk\inc\winver.h -FILE 2690 f:\sp\public\sdk\inc\windows.h -FILE 2691 f:\sp\public\sdk\inc\winnt.h -FILE 2692 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2693 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2694 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2695 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2696 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2697 f:\sp\public\sdk\inc\winreg.h -FILE 2698 f:\sp\public\sdk\inc\winbase.h -FILE 2699 f:\sp\vctools\crt_bld\self_x86\crt\src\wtombenv.c -FILE 2700 f:\sp\public\sdk\inc\winerror.h -FILE 2701 f:\sp\public\sdk\inc\pshpack8.h -FILE 2702 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2703 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2704 f:\sp\public\sdk\inc\reason.h -FILE 2705 f:\sp\public\sdk\inc\wincon.h -FILE 2706 f:\sp\public\sdk\inc\ddbanned.h -FILE 2707 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2708 f:\sp\public\sdk\inc\pshpack2.h -FILE 2709 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2710 f:\sp\public\sdk\inc\mcx.h -FILE 2711 f:\sp\public\sdk\inc\winuser.h -FILE 2712 f:\sp\public\sdk\inc\winnls.h -FILE 2713 f:\sp\public\sdk\inc\guiddef.h -FILE 2714 f:\sp\public\sdk\inc\specstrings.h -FILE 2715 f:\sp\public\sdk\inc\basetsd.h -FILE 2716 f:\sp\public\sdk\inc\stralign.h -FILE 2717 f:\sp\public\sdk\inc\tvout.h -FILE 2718 f:\sp\public\sdk\inc\winsvc.h -FILE 2719 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2720 f:\sp\public\sdk\inc\wingdi.h -FILE 2721 f:\sp\public\sdk\inc\pshpack4.h -FILE 2722 f:\sp\public\sdk\inc\winnt.h -FILE 2723 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2724 f:\sp\public\sdk\inc\winreg.h -FILE 2725 f:\sp\public\sdk\inc\winbase.h -FILE 2726 f:\sp\public\sdk\inc\winerror.h -FILE 2727 f:\sp\public\sdk\inc\pshpack8.h -FILE 2728 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2729 f:\sp\public\sdk\inc\reason.h -FILE 2730 f:\sp\public\sdk\inc\wincon.h -FILE 2731 f:\sp\vctools\crt_bld\self_x86\crt\src\float.h -FILE 2732 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2733 f:\sp\public\sdk\inc\pshpack2.h -FILE 2734 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2735 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2736 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2737 f:\sp\public\sdk\inc\mcx.h -FILE 2738 f:\sp\public\sdk\inc\winuser.h -FILE 2739 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2740 f:\sp\public\sdk\inc\winnls.h -FILE 2741 f:\sp\public\sdk\inc\guiddef.h -FILE 2742 f:\sp\public\sdk\inc\windows.h -FILE 2743 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2744 f:\sp\public\sdk\inc\specstrings.h -FILE 2745 f:\sp\public\sdk\inc\basetsd.h -FILE 2746 f:\sp\public\sdk\inc\stralign.h -FILE 2747 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2748 f:\sp\vctools\crt_bld\self_x86\crt\src\signal.h -FILE 2749 f:\sp\public\sdk\inc\tvout.h -FILE 2750 f:\sp\public\sdk\inc\winsvc.h -FILE 2751 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2752 f:\sp\vctools\crt_bld\self_x86\crt\src\winxfltr.c -FILE 2753 f:\sp\public\sdk\inc\wingdi.h -FILE 2754 f:\sp\public\sdk\inc\pshpack4.h -FILE 2755 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 2756 f:\sp\public\sdk\inc\poppack.h -FILE 2757 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2758 f:\sp\public\sdk\inc\winnetwk.h -FILE 2759 f:\sp\public\sdk\inc\imm.h -FILE 2760 f:\sp\public\sdk\inc\ddbanned.h -FILE 2761 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2762 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2763 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2764 f:\sp\public\sdk\inc\windef.h -FILE 2765 f:\sp\vctools\crt_bld\self_x86\crt\src\crtwrn.h -FILE 2766 f:\sp\public\sdk\inc\pshpack1.h -FILE 2767 f:\sp\public\sdk\inc\winver.h -FILE 2768 f:\sp\public\sdk\inc\winnetwk.h -FILE 2769 f:\sp\public\sdk\inc\imm.h -FILE 2770 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2771 f:\sp\public\sdk\inc\windef.h -FILE 2772 f:\sp\public\sdk\inc\pshpack1.h -FILE 2773 f:\sp\public\sdk\inc\winver.h -FILE 2774 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2775 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2776 f:\sp\public\sdk\inc\winnt.h -FILE 2777 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2778 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2779 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2780 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2781 f:\sp\public\sdk\inc\winreg.h -FILE 2782 f:\sp\public\sdk\inc\winbase.h -FILE 2783 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 2784 f:\sp\public\sdk\inc\winerror.h -FILE 2785 f:\sp\vctools\crt_bld\self_x86\crt\src\winsig.c -FILE 2786 f:\sp\public\sdk\inc\pshpack8.h -FILE 2787 f:\sp\public\sdk\inc\reason.h -FILE 2788 f:\sp\public\sdk\inc\wincon.h -FILE 2789 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2790 f:\sp\public\sdk\inc\pshpack2.h -FILE 2791 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2792 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2793 f:\sp\public\sdk\inc\mcx.h -FILE 2794 f:\sp\public\sdk\inc\winuser.h -FILE 2795 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2796 f:\sp\public\sdk\inc\winnls.h -FILE 2797 f:\sp\public\sdk\inc\guiddef.h -FILE 2798 f:\sp\public\sdk\inc\windows.h -FILE 2799 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2800 f:\sp\public\sdk\inc\specstrings.h -FILE 2801 f:\sp\public\sdk\inc\ddbanned.h -FILE 2802 f:\sp\public\sdk\inc\basetsd.h -FILE 2803 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2804 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2805 f:\sp\public\sdk\inc\stralign.h -FILE 2806 f:\sp\vctools\crt_bld\self_x86\crt\src\signal.h -FILE 2807 f:\sp\public\sdk\inc\tvout.h -FILE 2808 f:\sp\public\sdk\inc\winsvc.h -FILE 2809 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2810 f:\sp\public\sdk\inc\wingdi.h -FILE 2811 f:\sp\vctools\crt_bld\self_x86\crt\src\float.h -FILE 2812 f:\sp\vctools\crt_bld\self_x86\crt\src\crtwrn.h -FILE 2813 f:\sp\public\sdk\inc\pshpack4.h -FILE 2814 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 2815 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2816 f:\sp\public\sdk\inc\poppack.h -FILE 2817 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 2818 f:\sp\public\sdk\inc\wincon.h -FILE 2819 f:\sp\public\sdk\inc\imm.h -FILE 2820 f:\sp\public\sdk\inc\winbase.h -FILE 2821 f:\sp\public\sdk\inc\wingdi.h -FILE 2822 f:\sp\public\sdk\inc\winver.h -FILE 2823 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2824 f:\sp\public\sdk\inc\windows.h -FILE 2825 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2826 f:\sp\public\sdk\inc\pshpack2.h -FILE 2827 f:\sp\public\sdk\inc\reason.h -FILE 2828 f:\sp\vctools\crt_bld\self_x86\crt\src\w_str.c -FILE 2829 f:\sp\public\sdk\inc\specstrings.h -FILE 2830 f:\sp\public\sdk\inc\basetsd.h -FILE 2831 f:\sp\public\sdk\inc\pshpack4.h -FILE 2832 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 2833 f:\sp\public\sdk\inc\winnetwk.h -FILE 2834 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2835 f:\sp\public\sdk\inc\stralign.h -FILE 2836 f:\sp\public\sdk\inc\poppack.h -FILE 2837 f:\sp\public\sdk\inc\winsvc.h -FILE 2838 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2839 f:\sp\public\sdk\inc\windef.h -FILE 2840 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2841 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2842 f:\sp\public\sdk\inc\winuser.h -FILE 2843 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2844 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2845 f:\sp\public\sdk\inc\mcx.h -FILE 2846 f:\sp\public\sdk\inc\pshpack8.h -FILE 2847 f:\sp\public\sdk\inc\guiddef.h -FILE 2848 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 2849 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2850 f:\sp\public\sdk\inc\winnt.h -FILE 2851 f:\sp\public\sdk\inc\winnls.h -FILE 2852 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2853 f:\sp\public\sdk\inc\pshpack1.h -FILE 2854 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 2855 f:\sp\public\sdk\inc\winerror.h -FILE 2856 f:\sp\public\sdk\inc\winreg.h -FILE 2857 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2858 f:\sp\public\sdk\inc\ddbanned.h -FILE 2859 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2860 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2861 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2862 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2863 f:\sp\public\sdk\inc\tvout.h -FILE 2864 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2865 f:\sp\public\sdk\inc\wincon.h -FILE 2866 f:\sp\public\sdk\inc\imm.h -FILE 2867 f:\sp\public\sdk\inc\winbase.h -FILE 2868 f:\sp\public\sdk\inc\wingdi.h -FILE 2869 f:\sp\public\sdk\inc\winver.h -FILE 2870 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2871 f:\sp\public\sdk\inc\windows.h -FILE 2872 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2873 f:\sp\public\sdk\inc\pshpack2.h -FILE 2874 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 2875 f:\sp\public\sdk\inc\reason.h -FILE 2876 f:\sp\vctools\crt_bld\self_x86\crt\src\w_loc.c -FILE 2877 f:\sp\public\sdk\inc\specstrings.h -FILE 2878 f:\sp\public\sdk\inc\basetsd.h -FILE 2879 f:\sp\public\sdk\inc\pshpack4.h -FILE 2880 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 2881 f:\sp\public\sdk\inc\winnetwk.h -FILE 2882 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2883 f:\sp\public\sdk\inc\stralign.h -FILE 2884 f:\sp\public\sdk\inc\poppack.h -FILE 2885 f:\sp\public\sdk\inc\winsvc.h -FILE 2886 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2887 f:\sp\public\sdk\inc\windef.h -FILE 2888 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2889 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2890 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2891 f:\sp\public\sdk\inc\winuser.h -FILE 2892 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2893 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2894 f:\sp\public\sdk\inc\mcx.h -FILE 2895 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 2896 f:\sp\public\sdk\inc\pshpack8.h -FILE 2897 f:\sp\public\sdk\inc\guiddef.h -FILE 2898 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 2899 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2900 f:\sp\public\sdk\inc\winnt.h -FILE 2901 f:\sp\public\sdk\inc\winnls.h -FILE 2902 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2903 f:\sp\public\sdk\inc\pshpack1.h -FILE 2904 f:\sp\public\sdk\inc\winerror.h -FILE 2905 f:\sp\public\sdk\inc\winreg.h -FILE 2906 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2907 f:\sp\public\sdk\inc\ddbanned.h -FILE 2908 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2909 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2910 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2911 f:\sp\public\sdk\inc\tvout.h -FILE 2912 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2913 f:\sp\public\sdk\inc\poppack.h -FILE 2914 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 2915 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2916 f:\sp\public\sdk\inc\winnetwk.h -FILE 2917 f:\sp\public\sdk\inc\imm.h -FILE 2918 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2919 f:\sp\public\sdk\inc\windef.h -FILE 2920 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2921 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h -FILE 2922 f:\sp\public\sdk\inc\pshpack1.h -FILE 2923 f:\sp\public\sdk\inc\winver.h -FILE 2924 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2925 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 2926 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2927 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2928 f:\sp\public\sdk\inc\winnt.h -FILE 2929 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 2930 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2931 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2932 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2933 f:\sp\public\sdk\inc\winreg.h -FILE 2934 f:\sp\vctools\crt_bld\self_x86\crt\src\convrtcp.c -FILE 2935 f:\sp\public\sdk\inc\winbase.h -FILE 2936 f:\sp\public\sdk\inc\winerror.h -FILE 2937 f:\sp\public\sdk\inc\pshpack8.h -FILE 2938 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 2939 f:\sp\public\sdk\inc\reason.h -FILE 2940 f:\sp\public\sdk\inc\wincon.h -FILE 2941 f:\sp\public\sdk\inc\ddbanned.h -FILE 2942 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2943 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2944 f:\sp\public\sdk\inc\pshpack2.h -FILE 2945 f:\sp\public\sdk\inc\mcx.h -FILE 2946 f:\sp\public\sdk\inc\winuser.h -FILE 2947 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2948 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 2949 f:\sp\public\sdk\inc\winnls.h -FILE 2950 f:\sp\public\sdk\inc\guiddef.h -FILE 2951 f:\sp\public\sdk\inc\windows.h -FILE 2952 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2953 f:\sp\public\sdk\inc\specstrings.h -FILE 2954 f:\sp\public\sdk\inc\basetsd.h -FILE 2955 f:\sp\public\sdk\inc\stralign.h -FILE 2956 f:\sp\public\sdk\inc\tvout.h -FILE 2957 f:\sp\public\sdk\inc\winsvc.h -FILE 2958 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2959 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2960 f:\sp\public\sdk\inc\wingdi.h -FILE 2961 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 2962 f:\sp\public\sdk\inc\pshpack4.h -FILE 2963 f:\sp\public\sdk\inc\winerror.h -FILE 2964 f:\sp\public\sdk\inc\pshpack8.h -FILE 2965 f:\sp\public\sdk\inc\reason.h -FILE 2966 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 2967 f:\sp\public\sdk\inc\wincon.h -FILE 2968 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 2969 f:\sp\public\sdk\inc\pshpack2.h -FILE 2970 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2971 f:\sp\public\sdk\inc\mcx.h -FILE 2972 f:\sp\public\sdk\inc\winuser.h -FILE 2973 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2974 f:\sp\public\sdk\inc\winnls.h -FILE 2975 f:\sp\public\sdk\inc\guiddef.h -FILE 2976 f:\sp\public\sdk\inc\windows.h -FILE 2977 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h -FILE 2978 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2979 f:\sp\public\sdk\inc\specstrings.h -FILE 2980 f:\sp\public\sdk\inc\basetsd.h -FILE 2981 f:\sp\public\sdk\inc\stralign.h -FILE 2982 f:\sp\public\sdk\inc\tvout.h -FILE 2983 f:\sp\public\sdk\inc\winsvc.h -FILE 2984 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2985 f:\sp\public\sdk\inc\wingdi.h -FILE 2986 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 2987 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 2988 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2989 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2990 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2991 f:\sp\public\sdk\inc\pshpack4.h -FILE 2992 f:\sp\public\sdk\inc\poppack.h -FILE 2993 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 2994 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2995 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.c -FILE 2996 f:\sp\public\sdk\inc\winnetwk.h -FILE 2997 f:\sp\public\sdk\inc\imm.h -FILE 2998 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2999 f:\sp\public\sdk\inc\windef.h -FILE 3000 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3001 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3002 f:\sp\public\sdk\inc\pshpack1.h -FILE 3003 f:\sp\public\sdk\inc\ddbanned.h -FILE 3004 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3005 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3006 f:\sp\public\sdk\inc\winver.h -FILE 3007 f:\sp\public\sdk\inc\winnt.h -FILE 3008 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3009 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3010 f:\sp\public\sdk\inc\winreg.h -FILE 3011 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 3012 f:\sp\public\sdk\inc\winbase.h -FILE 3013 f:\sp\public\sdk\inc\poppack.h -FILE 3014 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 3015 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 3016 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3017 f:\sp\public\sdk\inc\winnetwk.h -FILE 3018 f:\sp\public\sdk\inc\imm.h -FILE 3019 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3020 f:\sp\public\sdk\inc\windef.h -FILE 3021 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 3022 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 3023 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3024 f:\sp\public\sdk\inc\pshpack1.h -FILE 3025 f:\sp\public\sdk\inc\winver.h -FILE 3026 f:\sp\public\sdk\inc\windows.h -FILE 3027 f:\sp\public\sdk\inc\winnt.h -FILE 3028 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3029 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 3030 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3031 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3032 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3033 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3034 f:\sp\public\sdk\inc\winreg.h -FILE 3035 f:\sp\public\sdk\inc\winbase.h -FILE 3036 f:\sp\vctools\crt_bld\self_x86\crt\src\setenv.c -FILE 3037 f:\sp\public\sdk\inc\winerror.h -FILE 3038 f:\sp\public\sdk\inc\pshpack8.h -FILE 3039 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3040 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3041 f:\sp\public\sdk\inc\reason.h -FILE 3042 f:\sp\public\sdk\inc\wincon.h -FILE 3043 f:\sp\public\sdk\inc\ddbanned.h -FILE 3044 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3045 f:\sp\public\sdk\inc\pshpack2.h -FILE 3046 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3047 f:\sp\public\sdk\inc\mcx.h -FILE 3048 f:\sp\public\sdk\inc\winuser.h -FILE 3049 f:\sp\public\sdk\inc\winnls.h -FILE 3050 f:\sp\public\sdk\inc\guiddef.h -FILE 3051 f:\sp\public\sdk\inc\specstrings.h -FILE 3052 f:\sp\public\sdk\inc\basetsd.h -FILE 3053 f:\sp\public\sdk\inc\stralign.h -FILE 3054 f:\sp\public\sdk\inc\tvout.h -FILE 3055 f:\sp\public\sdk\inc\winsvc.h -FILE 3056 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3057 f:\sp\public\sdk\inc\wingdi.h -FILE 3058 f:\sp\public\sdk\inc\pshpack4.h -FILE 3059 f:\sp\public\sdk\inc\poppack.h -FILE 3060 f:\sp\public\sdk\inc\winnetwk.h -FILE 3061 f:\sp\public\sdk\inc\imm.h -FILE 3062 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3063 f:\sp\public\sdk\inc\windef.h -FILE 3064 f:\sp\public\sdk\inc\pshpack1.h -FILE 3065 f:\sp\public\sdk\inc\winver.h -FILE 3066 f:\sp\public\sdk\inc\windows.h -FILE 3067 f:\sp\public\sdk\inc\winnt.h -FILE 3068 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3069 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3070 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3071 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3072 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3073 f:\sp\public\sdk\inc\winreg.h -FILE 3074 f:\sp\public\sdk\inc\winbase.h -FILE 3075 f:\sp\vctools\crt_bld\self_x86\crt\src\rand_s.c -FILE 3076 f:\sp\public\sdk\inc\winerror.h -FILE 3077 f:\sp\public\sdk\inc\pshpack8.h -FILE 3078 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3079 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3080 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3081 f:\sp\public\sdk\inc\reason.h -FILE 3082 f:\sp\public\sdk\inc\wincon.h -FILE 3083 f:\sp\public\sdk\inc\ddbanned.h -FILE 3084 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3085 f:\sp\public\sdk\inc\pshpack2.h -FILE 3086 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3087 f:\sp\public\sdk\inc\mcx.h -FILE 3088 f:\sp\public\sdk\inc\winuser.h -FILE 3089 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 3090 f:\sp\public\sdk\inc\winnls.h -FILE 3091 f:\sp\public\sdk\inc\guiddef.h -FILE 3092 f:\sp\public\sdk\inc\specstrings.h -FILE 3093 f:\sp\public\sdk\inc\basetsd.h -FILE 3094 f:\sp\public\sdk\inc\stralign.h -FILE 3095 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3096 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3097 f:\sp\public\sdk\inc\tvout.h -FILE 3098 f:\sp\public\sdk\inc\winsvc.h -FILE 3099 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3100 f:\sp\public\sdk\inc\wingdi.h -FILE 3101 f:\sp\public\sdk\inc\pshpack4.h -FILE 3102 f:\sp\public\sdk\inc\poppack.h -FILE 3103 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 3104 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3105 f:\sp\public\sdk\inc\winnetwk.h -FILE 3106 f:\sp\public\sdk\inc\imm.h -FILE 3107 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3108 f:\sp\public\sdk\inc\windef.h -FILE 3109 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3110 f:\sp\public\sdk\inc\pshpack1.h -FILE 3111 f:\sp\public\sdk\inc\winver.h -FILE 3112 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3113 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3114 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3115 f:\sp\public\sdk\inc\winnt.h -FILE 3116 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3117 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3118 f:\sp\public\sdk\inc\winreg.h -FILE 3119 f:\sp\vctools\crt_bld\self_x86\crt\src\purevirt.c -FILE 3120 f:\sp\public\sdk\inc\winbase.h -FILE 3121 f:\sp\public\sdk\inc\winerror.h -FILE 3122 f:\sp\public\sdk\inc\pshpack8.h -FILE 3123 f:\sp\public\sdk\inc\reason.h -FILE 3124 f:\sp\public\sdk\inc\wincon.h -FILE 3125 f:\sp\public\sdk\inc\ddbanned.h -FILE 3126 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3127 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3128 f:\sp\public\sdk\inc\pshpack2.h -FILE 3129 f:\sp\public\sdk\inc\mcx.h -FILE 3130 f:\sp\public\sdk\inc\winuser.h -FILE 3131 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3132 f:\sp\public\sdk\inc\winnls.h -FILE 3133 f:\sp\public\sdk\inc\guiddef.h -FILE 3134 f:\sp\public\sdk\inc\windows.h -FILE 3135 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3136 f:\sp\public\sdk\inc\specstrings.h -FILE 3137 f:\sp\public\sdk\inc\basetsd.h -FILE 3138 f:\sp\public\sdk\inc\stralign.h -FILE 3139 f:\sp\public\sdk\inc\tvout.h -FILE 3140 f:\sp\public\sdk\inc\winsvc.h -FILE 3141 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3142 f:\sp\public\sdk\inc\wingdi.h -FILE 3143 f:\sp\public\sdk\inc\pshpack4.h -FILE 3144 f:\sp\public\sdk\inc\poppack.h -FILE 3145 f:\sp\public\sdk\inc\winnetwk.h -FILE 3146 f:\sp\public\sdk\inc\imm.h -FILE 3147 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3148 f:\sp\public\sdk\inc\windef.h -FILE 3149 f:\sp\public\sdk\inc\pshpack1.h -FILE 3150 f:\sp\public\sdk\inc\winver.h -FILE 3151 f:\sp\public\sdk\inc\windows.h -FILE 3152 f:\sp\public\sdk\inc\winnt.h -FILE 3153 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3154 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3155 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3156 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3157 f:\sp\public\sdk\inc\winreg.h -FILE 3158 f:\sp\public\sdk\inc\winbase.h -FILE 3159 f:\sp\vctools\crt_bld\self_x86\crt\src\pesect.c -FILE 3160 f:\sp\public\sdk\inc\winerror.h -FILE 3161 f:\sp\public\sdk\inc\pshpack8.h -FILE 3162 f:\sp\public\sdk\inc\reason.h -FILE 3163 f:\sp\public\sdk\inc\wincon.h -FILE 3164 f:\sp\public\sdk\inc\ddbanned.h -FILE 3165 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3166 f:\sp\public\sdk\inc\pshpack2.h -FILE 3167 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3168 f:\sp\public\sdk\inc\mcx.h -FILE 3169 f:\sp\public\sdk\inc\winuser.h -FILE 3170 f:\sp\public\sdk\inc\winnls.h -FILE 3171 f:\sp\public\sdk\inc\guiddef.h -FILE 3172 f:\sp\public\sdk\inc\specstrings.h -FILE 3173 f:\sp\public\sdk\inc\basetsd.h -FILE 3174 f:\sp\public\sdk\inc\stralign.h -FILE 3175 f:\sp\public\sdk\inc\tvout.h -FILE 3176 f:\sp\public\sdk\inc\winsvc.h -FILE 3177 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3178 f:\sp\public\sdk\inc\wingdi.h -FILE 3179 f:\sp\public\sdk\inc\pshpack4.h -FILE 3180 f:\sp\public\sdk\inc\winerror.h -FILE 3181 f:\sp\public\sdk\inc\pshpack1.h -FILE 3182 f:\sp\public\sdk\inc\pshpack8.h -FILE 3183 f:\sp\public\sdk\inc\winver.h -FILE 3184 f:\sp\public\sdk\inc\pshpack2.h -FILE 3185 f:\sp\public\sdk\inc\winreg.h -FILE 3186 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 3187 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 3188 f:\sp\public\sdk\inc\guiddef.h -FILE 3189 f:\sp\public\sdk\inc\windows.h -FILE 3190 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3191 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h -FILE 3192 f:\sp\public\sdk\inc\specstrings.h -FILE 3193 f:\sp\public\sdk\inc\basetsd.h -FILE 3194 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3195 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 3196 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3197 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3198 f:\sp\public\sdk\inc\pshpack4.h -FILE 3199 f:\sp\public\sdk\inc\reason.h -FILE 3200 f:\sp\public\sdk\inc\wincon.h -FILE 3201 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3202 f:\sp\public\sdk\inc\poppack.h -FILE 3203 f:\sp\public\sdk\inc\mcx.h -FILE 3204 f:\sp\public\sdk\inc\winuser.h -FILE 3205 f:\sp\public\sdk\inc\winnls.h -FILE 3206 f:\sp\vctools\crt_bld\self_x86\crt\src\nlsdata2.c -FILE 3207 f:\sp\public\sdk\inc\stralign.h -FILE 3208 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3209 f:\sp\public\sdk\inc\windef.h -FILE 3210 f:\sp\public\sdk\inc\tvout.h -FILE 3211 f:\sp\public\sdk\inc\winsvc.h -FILE 3212 f:\sp\public\sdk\inc\wingdi.h -FILE 3213 f:\sp\public\sdk\inc\ddbanned.h -FILE 3214 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3215 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3216 f:\sp\public\sdk\inc\winnt.h -FILE 3217 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3218 f:\sp\public\sdk\inc\winnetwk.h -FILE 3219 f:\sp\public\sdk\inc\imm.h -FILE 3220 f:\sp\public\sdk\inc\winbase.h -FILE 3221 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3222 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3223 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3224 f:\sp\vctools\crt_bld\self_x86\crt\src\nlsdata1.c -FILE 3225 f:\sp\public\sdk\inc\ddbanned.h -FILE 3226 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3227 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3228 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3229 f:\sp\vctools\crt_bld\self_x86\crt\src\nlsint.h -FILE 3230 f:\sp\public\sdk\inc\reason.h -FILE 3231 f:\sp\public\sdk\inc\wincon.h -FILE 3232 f:\sp\public\sdk\inc\pshpack2.h -FILE 3233 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3234 f:\sp\public\sdk\inc\mcx.h -FILE 3235 f:\sp\public\sdk\inc\winuser.h -FILE 3236 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3237 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 3238 f:\sp\public\sdk\inc\winnls.h -FILE 3239 f:\sp\public\sdk\inc\guiddef.h -FILE 3240 f:\sp\public\sdk\inc\windows.h -FILE 3241 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 3242 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3243 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3244 f:\sp\public\sdk\inc\specstrings.h -FILE 3245 f:\sp\public\sdk\inc\basetsd.h -FILE 3246 f:\sp\public\sdk\inc\stralign.h -FILE 3247 f:\sp\public\sdk\inc\tvout.h -FILE 3248 f:\sp\public\sdk\inc\winsvc.h -FILE 3249 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3250 f:\sp\public\sdk\inc\wingdi.h -FILE 3251 f:\sp\public\sdk\inc\pshpack4.h -FILE 3252 f:\sp\public\sdk\inc\poppack.h -FILE 3253 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h -FILE 3254 f:\sp\public\sdk\inc\winnetwk.h -FILE 3255 f:\sp\public\sdk\inc\imm.h -FILE 3256 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3257 f:\sp\public\sdk\inc\windef.h -FILE 3258 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 3259 f:\sp\vctools\crt_bld\self_x86\crt\src\onexit.c -FILE 3260 f:\sp\public\sdk\inc\pshpack1.h -FILE 3261 f:\sp\public\sdk\inc\winver.h -FILE 3262 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3263 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3264 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3265 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3266 f:\sp\public\sdk\inc\winnt.h -FILE 3267 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3268 f:\sp\public\sdk\inc\ddbanned.h -FILE 3269 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3270 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3271 f:\sp\public\sdk\inc\winreg.h -FILE 3272 f:\sp\public\sdk\inc\winbase.h -FILE 3273 f:\sp\public\sdk\inc\winerror.h -FILE 3274 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3275 f:\sp\public\sdk\inc\pshpack8.h -FILE 3276 f:\sp\public\sdk\inc\winbase.h -FILE 3277 f:\sp\public\sdk\inc\winerror.h -FILE 3278 f:\sp\public\sdk\inc\pshpack1.h -FILE 3279 f:\sp\public\sdk\inc\pshpack8.h -FILE 3280 f:\sp\public\sdk\inc\winver.h -FILE 3281 f:\sp\public\sdk\inc\pshpack2.h -FILE 3282 f:\sp\public\sdk\inc\winreg.h -FILE 3283 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 3284 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 3285 f:\sp\public\sdk\inc\guiddef.h -FILE 3286 f:\sp\public\sdk\inc\windows.h -FILE 3287 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3288 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3289 f:\sp\public\sdk\inc\specstrings.h -FILE 3290 f:\sp\public\sdk\inc\basetsd.h -FILE 3291 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3292 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3293 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3294 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3295 f:\sp\public\sdk\inc\pshpack4.h -FILE 3296 f:\sp\public\sdk\inc\reason.h -FILE 3297 f:\sp\public\sdk\inc\wincon.h -FILE 3298 f:\sp\public\sdk\inc\poppack.h -FILE 3299 f:\sp\public\sdk\inc\mcx.h -FILE 3300 f:\sp\public\sdk\inc\winuser.h -FILE 3301 f:\sp\public\sdk\inc\winnls.h -FILE 3302 f:\sp\vctools\crt_bld\self_x86\crt\src\lconv.c -FILE 3303 f:\sp\public\sdk\inc\stralign.h -FILE 3304 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3305 f:\sp\public\sdk\inc\windef.h -FILE 3306 f:\sp\public\sdk\inc\tvout.h -FILE 3307 f:\sp\public\sdk\inc\winsvc.h -FILE 3308 f:\sp\public\sdk\inc\wingdi.h -FILE 3309 f:\sp\public\sdk\inc\ddbanned.h -FILE 3310 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3311 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3312 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 3313 f:\sp\public\sdk\inc\winnt.h -FILE 3314 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3315 f:\sp\public\sdk\inc\winnetwk.h -FILE 3316 f:\sp\public\sdk\inc\imm.h -FILE 3317 f:\sp\public\sdk\inc\guiddef.h -FILE 3318 f:\sp\public\sdk\inc\winnt.h -FILE 3319 f:\sp\public\sdk\inc\winnls.h -FILE 3320 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3321 f:\sp\public\sdk\inc\pshpack1.h -FILE 3322 f:\sp\public\sdk\inc\winerror.h -FILE 3323 f:\sp\public\sdk\inc\winreg.h -FILE 3324 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3325 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 3326 f:\sp\public\sdk\inc\tvout.h -FILE 3327 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3328 f:\sp\vctools\crt_bld\self_x86\crt\src\invarg.c -FILE 3329 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3330 f:\sp\public\sdk\inc\wincon.h -FILE 3331 f:\sp\public\sdk\inc\imm.h -FILE 3332 f:\sp\public\sdk\inc\winbase.h -FILE 3333 f:\sp\public\sdk\inc\wingdi.h -FILE 3334 f:\sp\public\sdk\inc\winver.h -FILE 3335 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3336 f:\sp\public\sdk\inc\windows.h -FILE 3337 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3338 f:\sp\public\sdk\inc\pshpack2.h -FILE 3339 f:\sp\public\sdk\inc\reason.h -FILE 3340 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h -FILE 3341 f:\sp\public\sdk\inc\specstrings.h -FILE 3342 f:\sp\public\sdk\inc\basetsd.h -FILE 3343 f:\sp\public\sdk\inc\pshpack4.h -FILE 3344 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 3345 f:\sp\public\sdk\inc\winnetwk.h -FILE 3346 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3347 f:\sp\public\sdk\inc\stralign.h -FILE 3348 f:\sp\public\sdk\inc\poppack.h -FILE 3349 f:\sp\public\sdk\inc\winsvc.h -FILE 3350 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3351 f:\sp\public\sdk\inc\windef.h -FILE 3352 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3353 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3354 f:\sp\public\sdk\inc\winuser.h -FILE 3355 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3356 f:\sp\public\sdk\inc\ddbanned.h -FILE 3357 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3358 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3359 f:\sp\public\sdk\inc\mcx.h -FILE 3360 f:\sp\public\sdk\inc\pshpack8.h -FILE 3361 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3362 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 3363 f:\sp\public\sdk\inc\pshpack4.h -FILE 3364 f:\sp\public\sdk\inc\poppack.h -FILE 3365 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 3366 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 3367 f:\sp\public\sdk\inc\winnetwk.h -FILE 3368 f:\sp\public\sdk\inc\imm.h -FILE 3369 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3370 f:\sp\public\sdk\inc\windef.h -FILE 3371 f:\sp\public\sdk\inc\pshpack1.h -FILE 3372 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3373 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3374 f:\sp\public\sdk\inc\winver.h -FILE 3375 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3376 f:\sp\public\sdk\inc\winnt.h -FILE 3377 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3378 f:\sp\public\sdk\inc\winreg.h -FILE 3379 f:\sp\vctools\crt_bld\self_x86\crt\src\inittime.c -FILE 3380 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 3381 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3382 f:\sp\public\sdk\inc\winbase.h -FILE 3383 f:\sp\public\sdk\inc\winerror.h -FILE 3384 f:\sp\public\sdk\inc\pshpack8.h -FILE 3385 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 3386 f:\sp\public\sdk\inc\reason.h -FILE 3387 f:\sp\public\sdk\inc\ddbanned.h -FILE 3388 f:\sp\public\sdk\inc\wincon.h -FILE 3389 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3390 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3391 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3392 f:\sp\public\sdk\inc\pshpack2.h -FILE 3393 f:\sp\public\sdk\inc\mcx.h -FILE 3394 f:\sp\public\sdk\inc\winuser.h -FILE 3395 f:\sp\public\sdk\inc\winnls.h -FILE 3396 f:\sp\public\sdk\inc\guiddef.h -FILE 3397 f:\sp\public\sdk\inc\stralign.h -FILE 3398 f:\sp\public\sdk\inc\specstrings.h -FILE 3399 f:\sp\public\sdk\inc\basetsd.h -FILE 3400 f:\sp\public\sdk\inc\windows.h -FILE 3401 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3402 f:\sp\public\sdk\inc\tvout.h -FILE 3403 f:\sp\public\sdk\inc\winsvc.h -FILE 3404 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3405 f:\sp\public\sdk\inc\wingdi.h -FILE 3406 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 3407 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3408 f:\sp\public\sdk\inc\pshpack4.h -FILE 3409 f:\sp\public\sdk\inc\poppack.h -FILE 3410 f:\sp\public\sdk\inc\winnt.h -FILE 3411 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3412 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 3413 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 3414 f:\sp\public\sdk\inc\winnetwk.h -FILE 3415 f:\sp\public\sdk\inc\imm.h -FILE 3416 f:\sp\public\sdk\inc\pshpack1.h -FILE 3417 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3418 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3419 f:\sp\public\sdk\inc\winver.h -FILE 3420 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3421 f:\sp\public\sdk\inc\guiddef.h -FILE 3422 f:\sp\public\sdk\inc\specstrings.h -FILE 3423 f:\sp\public\sdk\inc\basetsd.h -FILE 3424 f:\sp\public\sdk\inc\windows.h -FILE 3425 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3426 f:\sp\public\sdk\inc\winreg.h -FILE 3427 f:\sp\vctools\crt_bld\self_x86\crt\src\initnum.c -FILE 3428 f:\sp\vctools\crt_bld\self_x86\crt\src\nlsint.h -FILE 3429 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 3430 f:\sp\public\sdk\inc\winbase.h -FILE 3431 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3432 f:\sp\public\sdk\inc\winerror.h -FILE 3433 f:\sp\public\sdk\inc\pshpack8.h -FILE 3434 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 3435 f:\sp\public\sdk\inc\reason.h -FILE 3436 f:\sp\public\sdk\inc\ddbanned.h -FILE 3437 f:\sp\public\sdk\inc\wincon.h -FILE 3438 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3439 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3440 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3441 f:\sp\public\sdk\inc\pshpack2.h -FILE 3442 f:\sp\public\sdk\inc\mcx.h -FILE 3443 f:\sp\public\sdk\inc\winuser.h -FILE 3444 f:\sp\public\sdk\inc\winnls.h -FILE 3445 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3446 f:\sp\public\sdk\inc\windef.h -FILE 3447 f:\sp\public\sdk\inc\stralign.h -FILE 3448 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3449 f:\sp\public\sdk\inc\tvout.h -FILE 3450 f:\sp\public\sdk\inc\winsvc.h -FILE 3451 f:\sp\public\sdk\inc\wingdi.h -FILE 3452 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3453 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 3454 f:\sp\public\sdk\inc\pshpack4.h -FILE 3455 f:\sp\public\sdk\inc\poppack.h -FILE 3456 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 3457 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 3458 f:\sp\public\sdk\inc\winnetwk.h -FILE 3459 f:\sp\public\sdk\inc\imm.h -FILE 3460 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3461 f:\sp\public\sdk\inc\windef.h -FILE 3462 f:\sp\public\sdk\inc\pshpack1.h -FILE 3463 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3464 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3465 f:\sp\public\sdk\inc\winver.h -FILE 3466 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3467 f:\sp\public\sdk\inc\winnt.h -FILE 3468 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3469 f:\sp\public\sdk\inc\winreg.h -FILE 3470 f:\sp\vctools\crt_bld\self_x86\crt\src\initmon.c -FILE 3471 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 3472 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3473 f:\sp\public\sdk\inc\winbase.h -FILE 3474 f:\sp\public\sdk\inc\winerror.h -FILE 3475 f:\sp\public\sdk\inc\pshpack8.h -FILE 3476 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 3477 f:\sp\public\sdk\inc\reason.h -FILE 3478 f:\sp\public\sdk\inc\ddbanned.h -FILE 3479 f:\sp\public\sdk\inc\wincon.h -FILE 3480 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3481 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3482 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3483 f:\sp\public\sdk\inc\pshpack2.h -FILE 3484 f:\sp\public\sdk\inc\mcx.h -FILE 3485 f:\sp\public\sdk\inc\winuser.h -FILE 3486 f:\sp\public\sdk\inc\winnls.h -FILE 3487 f:\sp\public\sdk\inc\guiddef.h -FILE 3488 f:\sp\public\sdk\inc\stralign.h -FILE 3489 f:\sp\public\sdk\inc\specstrings.h -FILE 3490 f:\sp\public\sdk\inc\basetsd.h -FILE 3491 f:\sp\public\sdk\inc\windows.h -FILE 3492 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3493 f:\sp\public\sdk\inc\tvout.h -FILE 3494 f:\sp\public\sdk\inc\winsvc.h -FILE 3495 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3496 f:\sp\public\sdk\inc\wingdi.h -FILE 3497 f:\sp\public\sdk\inc\winbase.h -FILE 3498 f:\sp\public\sdk\inc\winerror.h -FILE 3499 f:\sp\public\sdk\inc\pshpack1.h -FILE 3500 f:\sp\public\sdk\inc\pshpack8.h -FILE 3501 f:\sp\public\sdk\inc\winver.h -FILE 3502 f:\sp\public\sdk\inc\pshpack2.h -FILE 3503 f:\sp\public\sdk\inc\winreg.h -FILE 3504 f:\sp\public\sdk\inc\guiddef.h -FILE 3505 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 3506 f:\sp\public\sdk\inc\specstrings.h -FILE 3507 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 3508 f:\sp\public\sdk\inc\basetsd.h -FILE 3509 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 3510 f:\sp\public\sdk\inc\windows.h -FILE 3511 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3512 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3513 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3514 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3515 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 3516 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3517 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3518 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3519 f:\sp\public\sdk\inc\pshpack4.h -FILE 3520 f:\sp\public\sdk\inc\reason.h -FILE 3521 f:\sp\public\sdk\inc\wincon.h -FILE 3522 f:\sp\public\sdk\inc\poppack.h -FILE 3523 f:\sp\vctools\crt_bld\self_x86\crt\src\inithelp.c -FILE 3524 f:\sp\public\sdk\inc\mcx.h -FILE 3525 f:\sp\public\sdk\inc\winuser.h -FILE 3526 f:\sp\public\sdk\inc\winnls.h -FILE 3527 f:\sp\public\sdk\inc\stralign.h -FILE 3528 f:\sp\public\sdk\inc\tvout.h -FILE 3529 f:\sp\public\sdk\inc\winsvc.h -FILE 3530 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3531 f:\sp\public\sdk\inc\wingdi.h -FILE 3532 f:\sp\public\sdk\inc\windef.h -FILE 3533 f:\sp\public\sdk\inc\ddbanned.h -FILE 3534 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3535 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3536 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3537 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3538 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3539 f:\sp\public\sdk\inc\winnetwk.h -FILE 3540 f:\sp\public\sdk\inc\imm.h -FILE 3541 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 3542 f:\sp\public\sdk\inc\winnt.h -FILE 3543 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3544 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 3545 f:\sp\public\sdk\inc\pshpack4.h -FILE 3546 f:\sp\public\sdk\inc\poppack.h -FILE 3547 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3548 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 3549 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 3550 f:\sp\public\sdk\inc\winnetwk.h -FILE 3551 f:\sp\public\sdk\inc\imm.h -FILE 3552 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3553 f:\sp\public\sdk\inc\windef.h -FILE 3554 f:\sp\public\sdk\inc\pshpack1.h -FILE 3555 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3556 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3557 f:\sp\public\sdk\inc\winver.h -FILE 3558 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3559 f:\sp\public\sdk\inc\winnt.h -FILE 3560 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3561 f:\sp\public\sdk\inc\winreg.h -FILE 3562 f:\sp\vctools\crt_bld\self_x86\crt\src\initctyp.c -FILE 3563 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 3564 f:\sp\public\sdk\inc\winbase.h -FILE 3565 f:\sp\public\sdk\inc\winerror.h -FILE 3566 f:\sp\public\sdk\inc\pshpack8.h -FILE 3567 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 3568 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 3569 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3570 f:\sp\public\sdk\inc\reason.h -FILE 3571 f:\sp\public\sdk\inc\ddbanned.h -FILE 3572 f:\sp\public\sdk\inc\wincon.h -FILE 3573 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3574 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3575 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3576 f:\sp\public\sdk\inc\pshpack2.h -FILE 3577 f:\sp\public\sdk\inc\mcx.h -FILE 3578 f:\sp\public\sdk\inc\winuser.h -FILE 3579 f:\sp\public\sdk\inc\winnls.h -FILE 3580 f:\sp\public\sdk\inc\guiddef.h -FILE 3581 f:\sp\public\sdk\inc\stralign.h -FILE 3582 f:\sp\public\sdk\inc\specstrings.h -FILE 3583 f:\sp\public\sdk\inc\basetsd.h -FILE 3584 f:\sp\public\sdk\inc\windows.h -FILE 3585 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3586 f:\sp\public\sdk\inc\tvout.h -FILE 3587 f:\sp\public\sdk\inc\winsvc.h -FILE 3588 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3589 f:\sp\public\sdk\inc\wingdi.h -FILE 3590 f:\sp\public\sdk\inc\poppack.h -FILE 3591 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 3592 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3593 f:\sp\public\sdk\inc\winnetwk.h -FILE 3594 f:\sp\public\sdk\inc\imm.h -FILE 3595 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3596 f:\sp\public\sdk\inc\windef.h -FILE 3597 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3598 f:\sp\public\sdk\inc\pshpack1.h -FILE 3599 f:\sp\public\sdk\inc\winver.h -FILE 3600 f:\sp\public\sdk\inc\windows.h -FILE 3601 f:\sp\public\sdk\inc\winnt.h -FILE 3602 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3603 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3604 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3605 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3606 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3607 f:\sp\public\sdk\inc\winreg.h -FILE 3608 f:\sp\public\sdk\inc\winbase.h -FILE 3609 f:\sp\vctools\crt_bld\self_x86\crt\src\initcrit.c -FILE 3610 f:\sp\public\sdk\inc\winerror.h -FILE 3611 f:\sp\public\sdk\inc\pshpack8.h -FILE 3612 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3613 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3614 f:\sp\public\sdk\inc\reason.h -FILE 3615 f:\sp\public\sdk\inc\wincon.h -FILE 3616 f:\sp\public\sdk\inc\ddbanned.h -FILE 3617 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3618 f:\sp\public\sdk\inc\pshpack2.h -FILE 3619 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3620 f:\sp\public\sdk\inc\mcx.h -FILE 3621 f:\sp\public\sdk\inc\winuser.h -FILE 3622 f:\sp\public\sdk\inc\winnls.h -FILE 3623 f:\sp\public\sdk\inc\guiddef.h -FILE 3624 f:\sp\public\sdk\inc\specstrings.h -FILE 3625 f:\sp\public\sdk\inc\basetsd.h -FILE 3626 f:\sp\public\sdk\inc\stralign.h -FILE 3627 f:\sp\public\sdk\inc\tvout.h -FILE 3628 f:\sp\public\sdk\inc\winsvc.h -FILE 3629 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3630 f:\sp\public\sdk\inc\wingdi.h -FILE 3631 f:\sp\public\sdk\inc\pshpack4.h -FILE 3632 f:\sp\public\sdk\inc\poppack.h -FILE 3633 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 3634 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 3635 f:\sp\public\sdk\inc\winnetwk.h -FILE 3636 f:\sp\public\sdk\inc\imm.h -FILE 3637 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3638 f:\sp\public\sdk\inc\windef.h -FILE 3639 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3640 f:\sp\public\sdk\inc\pshpack1.h -FILE 3641 f:\sp\public\sdk\inc\winver.h -FILE 3642 f:\sp\public\sdk\inc\windows.h -FILE 3643 f:\sp\public\sdk\inc\winnt.h -FILE 3644 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3645 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3646 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3647 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3648 f:\sp\public\sdk\inc\winreg.h -FILE 3649 f:\sp\public\sdk\inc\winbase.h -FILE 3650 f:\sp\vctools\crt_bld\self_x86\crt\src\initcoll.c -FILE 3651 f:\sp\public\sdk\inc\winerror.h -FILE 3652 f:\sp\public\sdk\inc\pshpack8.h -FILE 3653 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 3654 f:\sp\public\sdk\inc\reason.h -FILE 3655 f:\sp\public\sdk\inc\wincon.h -FILE 3656 f:\sp\public\sdk\inc\ddbanned.h -FILE 3657 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3658 f:\sp\public\sdk\inc\pshpack2.h -FILE 3659 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3660 f:\sp\public\sdk\inc\mcx.h -FILE 3661 f:\sp\public\sdk\inc\winuser.h -FILE 3662 f:\sp\public\sdk\inc\winnls.h -FILE 3663 f:\sp\public\sdk\inc\guiddef.h -FILE 3664 f:\sp\public\sdk\inc\specstrings.h -FILE 3665 f:\sp\public\sdk\inc\basetsd.h -FILE 3666 f:\sp\public\sdk\inc\stralign.h -FILE 3667 f:\sp\public\sdk\inc\tvout.h -FILE 3668 f:\sp\public\sdk\inc\winsvc.h -FILE 3669 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3670 f:\sp\public\sdk\inc\wingdi.h -FILE 3671 f:\sp\public\sdk\inc\pshpack4.h -FILE 3672 f:\sp\public\sdk\inc\poppack.h -FILE 3673 f:\sp\public\sdk\inc\winnetwk.h -FILE 3674 f:\sp\public\sdk\inc\imm.h -FILE 3675 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3676 f:\sp\public\sdk\inc\windef.h -FILE 3677 f:\binaries.x86ret\vcboot\inc\mm3dnow.h -FILE 3678 f:\sp\public\sdk\inc\pshpack1.h -FILE 3679 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 3680 f:\sp\public\sdk\inc\winver.h -FILE 3681 f:\sp\public\sdk\inc\windows.h -FILE 3682 f:\sp\public\sdk\inc\winnt.h -FILE 3683 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3684 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3685 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3686 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3687 f:\sp\public\sdk\inc\winreg.h -FILE 3688 f:\sp\public\sdk\inc\winbase.h -FILE 3689 f:\sp\vctools\crt_bld\self_x86\crt\src\gs_support.c -FILE 3690 f:\sp\public\sdk\inc\winerror.h -FILE 3691 f:\sp\public\sdk\inc\pshpack8.h -FILE 3692 f:\sp\vctools\crt_bld\self_x86\crt\src\intrin.h -FILE 3693 f:\sp\vctools\crt_bld\self_x86\crt\src\setjmp.h -FILE 3694 f:\sp\public\sdk\inc\reason.h -FILE 3695 f:\sp\public\sdk\inc\wincon.h -FILE 3696 f:\sp\public\sdk\inc\ddbanned.h -FILE 3697 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3698 f:\sp\public\sdk\inc\pshpack2.h -FILE 3699 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3700 f:\sp\public\sdk\inc\mcx.h -FILE 3701 f:\sp\public\sdk\inc\winuser.h -FILE 3702 f:\sp\public\sdk\inc\winnls.h -FILE 3703 f:\sp\public\sdk\inc\guiddef.h -FILE 3704 f:\sp\public\sdk\inc\specstrings.h -FILE 3705 f:\sp\public\sdk\inc\basetsd.h -FILE 3706 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 3707 f:\sp\public\sdk\inc\stralign.h -FILE 3708 f:\sp\public\sdk\inc\tvout.h -FILE 3709 f:\sp\public\sdk\inc\winsvc.h -FILE 3710 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3711 f:\sp\public\sdk\inc\wingdi.h -FILE 3712 f:\binaries.x86ret\vcboot\inc\emmintrin.h -FILE 3713 f:\binaries.x86ret\vcboot\inc\xmmintrin.h -FILE 3714 f:\binaries.x86ret\vcboot\inc\mmintrin.h -FILE 3715 f:\sp\public\sdk\inc\pshpack4.h -FILE 3716 f:\sp\public\sdk\inc\poppack.h -FILE 3717 f:\sp\public\sdk\inc\winnetwk.h -FILE 3718 f:\sp\public\sdk\inc\imm.h -FILE 3719 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3720 f:\sp\public\sdk\inc\windef.h -FILE 3721 f:\sp\public\sdk\inc\pshpack1.h -FILE 3722 f:\sp\public\sdk\inc\winver.h -FILE 3723 f:\sp\public\sdk\inc\windows.h -FILE 3724 f:\sp\public\sdk\inc\winnt.h -FILE 3725 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3726 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3727 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3728 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3729 f:\sp\public\sdk\inc\winreg.h -FILE 3730 f:\sp\public\sdk\inc\winbase.h -FILE 3731 f:\sp\vctools\crt_bld\self_x86\crt\src\gs_report.c -FILE 3732 f:\sp\public\sdk\inc\winerror.h -FILE 3733 f:\sp\public\sdk\inc\pshpack8.h -FILE 3734 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 3735 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3736 f:\sp\public\sdk\inc\reason.h -FILE 3737 f:\sp\public\sdk\inc\wincon.h -FILE 3738 f:\sp\public\sdk\inc\ddbanned.h -FILE 3739 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3740 f:\sp\public\sdk\inc\pshpack2.h -FILE 3741 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3742 f:\sp\public\sdk\inc\mcx.h -FILE 3743 f:\sp\public\sdk\inc\winuser.h -FILE 3744 f:\sp\public\sdk\inc\winnls.h -FILE 3745 f:\sp\public\sdk\inc\guiddef.h -FILE 3746 f:\sp\public\sdk\inc\specstrings.h -FILE 3747 f:\sp\public\sdk\inc\basetsd.h -FILE 3748 f:\sp\public\sdk\inc\stralign.h -FILE 3749 f:\sp\public\sdk\inc\tvout.h -FILE 3750 f:\sp\public\sdk\inc\winsvc.h -FILE 3751 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3752 f:\sp\public\sdk\inc\wingdi.h -FILE 3753 f:\sp\public\sdk\inc\pshpack4.h -FILE 3754 f:\sp\public\sdk\inc\poppack.h -FILE 3755 f:\sp\public\sdk\inc\winnetwk.h -FILE 3756 f:\sp\public\sdk\inc\imm.h -FILE 3757 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3758 f:\sp\public\sdk\inc\windef.h -FILE 3759 f:\sp\public\sdk\inc\pshpack1.h -FILE 3760 f:\sp\public\sdk\inc\winver.h -FILE 3761 f:\sp\public\sdk\inc\windows.h -FILE 3762 f:\sp\public\sdk\inc\winnt.h -FILE 3763 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3764 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3765 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3766 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3767 f:\sp\public\sdk\inc\winreg.h -FILE 3768 f:\sp\public\sdk\inc\winbase.h -FILE 3769 f:\sp\vctools\crt_bld\self_x86\crt\src\gs_cookie.c -FILE 3770 f:\sp\public\sdk\inc\winerror.h -FILE 3771 f:\sp\public\sdk\inc\pshpack8.h -FILE 3772 f:\sp\public\sdk\inc\reason.h -FILE 3773 f:\sp\public\sdk\inc\wincon.h -FILE 3774 f:\sp\public\sdk\inc\ddbanned.h -FILE 3775 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3776 f:\sp\public\sdk\inc\pshpack2.h -FILE 3777 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3778 f:\sp\public\sdk\inc\mcx.h -FILE 3779 f:\sp\public\sdk\inc\winuser.h -FILE 3780 f:\sp\public\sdk\inc\winnls.h -FILE 3781 f:\sp\public\sdk\inc\guiddef.h -FILE 3782 f:\sp\public\sdk\inc\specstrings.h -FILE 3783 f:\sp\public\sdk\inc\basetsd.h -FILE 3784 f:\sp\public\sdk\inc\stralign.h -FILE 3785 f:\sp\public\sdk\inc\tvout.h -FILE 3786 f:\sp\public\sdk\inc\winsvc.h -FILE 3787 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3788 f:\sp\public\sdk\inc\wingdi.h -FILE 3789 f:\sp\public\sdk\inc\pshpack4.h -FILE 3790 f:\sp\public\sdk\inc\winerror.h -FILE 3791 f:\sp\public\sdk\inc\pshpack1.h -FILE 3792 f:\sp\public\sdk\inc\pshpack8.h -FILE 3793 f:\sp\public\sdk\inc\winver.h -FILE 3794 f:\sp\public\sdk\inc\pshpack2.h -FILE 3795 f:\sp\public\sdk\inc\winreg.h -FILE 3796 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 3797 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 3798 f:\sp\public\sdk\inc\guiddef.h -FILE 3799 f:\sp\public\sdk\inc\windows.h -FILE 3800 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3801 f:\sp\public\sdk\inc\specstrings.h -FILE 3802 f:\sp\public\sdk\inc\basetsd.h -FILE 3803 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3804 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 3805 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3806 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3807 f:\sp\public\sdk\inc\pshpack4.h -FILE 3808 f:\sp\public\sdk\inc\reason.h -FILE 3809 f:\sp\public\sdk\inc\wincon.h -FILE 3810 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3811 f:\sp\public\sdk\inc\poppack.h -FILE 3812 f:\sp\public\sdk\inc\mcx.h -FILE 3813 f:\sp\public\sdk\inc\winuser.h -FILE 3814 f:\sp\public\sdk\inc\winnls.h -FILE 3815 f:\sp\vctools\crt_bld\self_x86\crt\src\glstatus.c -FILE 3816 f:\sp\public\sdk\inc\stralign.h -FILE 3817 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3818 f:\sp\public\sdk\inc\windef.h -FILE 3819 f:\sp\public\sdk\inc\tvout.h -FILE 3820 f:\sp\public\sdk\inc\winsvc.h -FILE 3821 f:\sp\public\sdk\inc\wingdi.h -FILE 3822 f:\sp\public\sdk\inc\ddbanned.h -FILE 3823 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3824 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3825 f:\sp\public\sdk\inc\winnt.h -FILE 3826 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3827 f:\sp\public\sdk\inc\winnetwk.h -FILE 3828 f:\sp\public\sdk\inc\imm.h -FILE 3829 f:\sp\public\sdk\inc\winbase.h -FILE 3830 f:\sp\public\sdk\inc\pshpack4.h -FILE 3831 f:\sp\public\sdk\inc\poppack.h -FILE 3832 f:\sp\public\sdk\inc\winnt.h -FILE 3833 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3834 f:\sp\public\sdk\inc\winnetwk.h -FILE 3835 f:\sp\public\sdk\inc\imm.h -FILE 3836 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3837 f:\sp\public\sdk\inc\pshpack1.h -FILE 3838 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3839 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3840 f:\sp\public\sdk\inc\winver.h -FILE 3841 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3842 f:\sp\public\sdk\inc\guiddef.h -FILE 3843 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3844 f:\sp\public\sdk\inc\specstrings.h -FILE 3845 f:\sp\public\sdk\inc\basetsd.h -FILE 3846 f:\sp\public\sdk\inc\windows.h -FILE 3847 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3848 f:\sp\public\sdk\inc\winreg.h -FILE 3849 f:\sp\vctools\crt_bld\self_x86\crt\src\getqloc.c -FILE 3850 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 3851 f:\sp\public\sdk\inc\winbase.h -FILE 3852 f:\sp\public\sdk\inc\winerror.h -FILE 3853 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3854 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3855 f:\sp\public\sdk\inc\pshpack8.h -FILE 3856 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 3857 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 3858 f:\sp\public\sdk\inc\reason.h -FILE 3859 f:\sp\public\sdk\inc\ddbanned.h -FILE 3860 f:\sp\public\sdk\inc\wincon.h -FILE 3861 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3862 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3863 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3864 f:\sp\public\sdk\inc\pshpack2.h -FILE 3865 f:\sp\public\sdk\inc\mcx.h -FILE 3866 f:\sp\public\sdk\inc\winuser.h -FILE 3867 f:\sp\public\sdk\inc\winnls.h -FILE 3868 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3869 f:\sp\public\sdk\inc\windef.h -FILE 3870 f:\sp\public\sdk\inc\stralign.h -FILE 3871 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3872 f:\sp\public\sdk\inc\tvout.h -FILE 3873 f:\sp\public\sdk\inc\winsvc.h -FILE 3874 f:\sp\public\sdk\inc\wingdi.h -FILE 3875 f:\sp\public\sdk\inc\reason.h -FILE 3876 f:\sp\public\sdk\inc\wincon.h -FILE 3877 f:\sp\public\sdk\inc\pshpack2.h -FILE 3878 f:\sp\public\sdk\inc\mcx.h -FILE 3879 f:\sp\public\sdk\inc\winuser.h -FILE 3880 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3881 f:\sp\public\sdk\inc\winnls.h -FILE 3882 f:\sp\public\sdk\inc\guiddef.h -FILE 3883 f:\sp\public\sdk\inc\windows.h -FILE 3884 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3885 f:\sp\public\sdk\inc\specstrings.h -FILE 3886 f:\sp\public\sdk\inc\basetsd.h -FILE 3887 f:\sp\public\sdk\inc\stralign.h -FILE 3888 f:\sp\public\sdk\inc\tvout.h -FILE 3889 f:\sp\public\sdk\inc\winsvc.h -FILE 3890 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3891 f:\sp\public\sdk\inc\wingdi.h -FILE 3892 f:\sp\public\sdk\inc\pshpack4.h -FILE 3893 f:\sp\public\sdk\inc\poppack.h -FILE 3894 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h -FILE 3895 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3896 f:\sp\public\sdk\inc\winnetwk.h -FILE 3897 f:\sp\public\sdk\inc\imm.h -FILE 3898 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3899 f:\sp\public\sdk\inc\windef.h -FILE 3900 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 3901 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 3902 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3903 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3904 f:\sp\vctools\crt_bld\self_x86\crt\src\getenv.c -FILE 3905 f:\sp\public\sdk\inc\pshpack1.h -FILE 3906 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 3907 f:\sp\public\sdk\inc\winver.h -FILE 3908 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3909 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3910 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3911 f:\sp\public\sdk\inc\winnt.h -FILE 3912 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3913 f:\sp\public\sdk\inc\ddbanned.h -FILE 3914 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3915 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3916 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3917 f:\sp\public\sdk\inc\winreg.h -FILE 3918 f:\sp\public\sdk\inc\winbase.h -FILE 3919 f:\sp\public\sdk\inc\winerror.h -FILE 3920 f:\sp\public\sdk\inc\pshpack8.h -FILE 3921 f:\sp\public\sdk\inc\poppack.h -FILE 3922 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3923 f:\sp\public\sdk\inc\winnetwk.h -FILE 3924 f:\sp\public\sdk\inc\imm.h -FILE 3925 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3926 f:\sp\public\sdk\inc\windef.h -FILE 3927 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3928 f:\sp\public\sdk\inc\pshpack1.h -FILE 3929 f:\sp\public\sdk\inc\winver.h -FILE 3930 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3931 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3932 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3933 f:\sp\public\sdk\inc\winnt.h -FILE 3934 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3935 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3936 f:\sp\public\sdk\inc\winreg.h -FILE 3937 f:\sp\vctools\crt_bld\self_x86\crt\src\errmode.c -FILE 3938 f:\sp\public\sdk\inc\winbase.h -FILE 3939 f:\sp\public\sdk\inc\winerror.h -FILE 3940 f:\sp\public\sdk\inc\pshpack8.h -FILE 3941 f:\sp\public\sdk\inc\reason.h -FILE 3942 f:\sp\public\sdk\inc\wincon.h -FILE 3943 f:\sp\public\sdk\inc\ddbanned.h -FILE 3944 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3945 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3946 f:\sp\public\sdk\inc\pshpack2.h -FILE 3947 f:\sp\public\sdk\inc\mcx.h -FILE 3948 f:\sp\public\sdk\inc\winuser.h -FILE 3949 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3950 f:\sp\public\sdk\inc\winnls.h -FILE 3951 f:\sp\public\sdk\inc\guiddef.h -FILE 3952 f:\sp\public\sdk\inc\windows.h -FILE 3953 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3954 f:\sp\public\sdk\inc\specstrings.h -FILE 3955 f:\sp\public\sdk\inc\basetsd.h -FILE 3956 f:\sp\public\sdk\inc\stralign.h -FILE 3957 f:\sp\public\sdk\inc\tvout.h -FILE 3958 f:\sp\public\sdk\inc\winsvc.h -FILE 3959 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3960 f:\sp\public\sdk\inc\wingdi.h -FILE 3961 f:\sp\public\sdk\inc\pshpack4.h -FILE 3962 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 3963 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3964 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3965 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3966 f:\sp\vctools\crt_bld\self_x86\crt\src\dbghook.c -FILE 3967 f:\sp\public\sdk\inc\ddbanned.h -FILE 3968 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3969 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3970 f:\sp\public\sdk\inc\poppack.h -FILE 3971 f:\sp\public\sdk\inc\winnetwk.h -FILE 3972 f:\sp\public\sdk\inc\imm.h -FILE 3973 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3974 f:\sp\public\sdk\inc\windef.h -FILE 3975 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3976 f:\sp\public\sdk\inc\pshpack1.h -FILE 3977 f:\sp\public\sdk\inc\winver.h -FILE 3978 f:\sp\public\sdk\inc\windows.h -FILE 3979 f:\sp\public\sdk\inc\winnt.h -FILE 3980 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3981 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3982 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3983 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3984 f:\sp\public\sdk\inc\winreg.h -FILE 3985 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h -FILE 3986 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.c -FILE 3987 f:\sp\public\sdk\inc\winbase.h -FILE 3988 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 3989 f:\sp\public\sdk\inc\winerror.h -FILE 3990 f:\sp\public\sdk\inc\pshpack8.h -FILE 3991 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 3992 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 3993 f:\sp\public\sdk\inc\reason.h -FILE 3994 f:\sp\public\sdk\inc\wincon.h -FILE 3995 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3996 f:\sp\public\sdk\inc\ddbanned.h -FILE 3997 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3998 f:\sp\public\sdk\inc\pshpack2.h -FILE 3999 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4000 f:\sp\public\sdk\inc\mcx.h -FILE 4001 f:\sp\public\sdk\inc\winuser.h -FILE 4002 f:\sp\public\sdk\inc\winnls.h -FILE 4003 f:\sp\public\sdk\inc\guiddef.h -FILE 4004 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 4005 f:\sp\public\sdk\inc\specstrings.h -FILE 4006 f:\sp\public\sdk\inc\basetsd.h -FILE 4007 f:\sp\public\sdk\inc\stralign.h -FILE 4008 f:\sp\public\sdk\inc\tvout.h -FILE 4009 f:\sp\public\sdk\inc\winsvc.h -FILE 4010 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4011 f:\sp\public\sdk\inc\wingdi.h -FILE 4012 f:\sp\public\sdk\inc\pshpack4.h -FILE 4013 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4014 f:\sp\public\sdk\inc\mcx.h -FILE 4015 f:\sp\public\sdk\inc\winuser.h -FILE 4016 f:\sp\public\sdk\inc\winnls.h -FILE 4017 f:\sp\public\sdk\inc\stralign.h -FILE 4018 f:\sp\public\sdk\inc\tvout.h -FILE 4019 f:\sp\public\sdk\inc\winsvc.h -FILE 4020 f:\sp\public\sdk\inc\wingdi.h -FILE 4021 f:\sp\public\sdk\inc\pshpack4.h -FILE 4022 f:\sp\public\sdk\inc\winnt.h -FILE 4023 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4024 f:\sp\public\sdk\inc\poppack.h -FILE 4025 f:\sp\public\sdk\inc\winnetwk.h -FILE 4026 f:\sp\public\sdk\inc\imm.h -FILE 4027 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 4028 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 4029 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4030 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4031 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4032 f:\sp\public\sdk\inc\pshpack1.h -FILE 4033 f:\sp\vctools\crt_bld\self_x86\crt\src\crtmbox.c -FILE 4034 f:\sp\public\sdk\inc\winver.h -FILE 4035 f:\sp\public\sdk\inc\guiddef.h -FILE 4036 f:\sp\public\sdk\inc\windows.h -FILE 4037 f:\sp\public\sdk\inc\specstrings.h -FILE 4038 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4039 f:\sp\public\sdk\inc\basetsd.h -FILE 4040 f:\sp\public\sdk\inc\winreg.h -FILE 4041 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4042 f:\sp\public\sdk\inc\winbase.h -FILE 4043 f:\sp\public\sdk\inc\ddbanned.h -FILE 4044 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4045 f:\sp\public\sdk\inc\winerror.h -FILE 4046 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4047 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4048 f:\sp\public\sdk\inc\pshpack8.h -FILE 4049 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4050 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4051 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 4052 f:\sp\public\sdk\inc\reason.h -FILE 4053 f:\sp\public\sdk\inc\wincon.h -FILE 4054 f:\sp\public\sdk\inc\pshpack2.h -FILE 4055 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4056 f:\sp\public\sdk\inc\windef.h -FILE 4057 f:\sp\public\sdk\inc\poppack.h -FILE 4058 f:\sp\vctools\crt_bld\self_x86\crt\src\fltintrn.h -FILE 4059 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4060 f:\sp\public\sdk\inc\winnetwk.h -FILE 4061 f:\sp\public\sdk\inc\imm.h -FILE 4062 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4063 f:\sp\public\sdk\inc\windef.h -FILE 4064 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4065 f:\sp\public\sdk\inc\pshpack1.h -FILE 4066 f:\sp\public\sdk\inc\winver.h -FILE 4067 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4068 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4069 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4070 f:\sp\public\sdk\inc\winnt.h -FILE 4071 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4072 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4073 f:\sp\public\sdk\inc\winreg.h -FILE 4074 f:\sp\vctools\crt_bld\self_x86\crt\src\cmiscdat.c -FILE 4075 f:\sp\public\sdk\inc\winbase.h -FILE 4076 f:\sp\public\sdk\inc\winerror.h -FILE 4077 f:\sp\public\sdk\inc\pshpack8.h -FILE 4078 f:\sp\public\sdk\inc\reason.h -FILE 4079 f:\sp\public\sdk\inc\wincon.h -FILE 4080 f:\sp\public\sdk\inc\ddbanned.h -FILE 4081 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4082 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4083 f:\sp\public\sdk\inc\pshpack2.h -FILE 4084 f:\sp\public\sdk\inc\mcx.h -FILE 4085 f:\sp\public\sdk\inc\winuser.h -FILE 4086 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4087 f:\sp\public\sdk\inc\winnls.h -FILE 4088 f:\sp\public\sdk\inc\guiddef.h -FILE 4089 f:\sp\public\sdk\inc\windows.h -FILE 4090 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4091 f:\sp\public\sdk\inc\specstrings.h -FILE 4092 f:\sp\public\sdk\inc\basetsd.h -FILE 4093 f:\sp\public\sdk\inc\stralign.h -FILE 4094 f:\sp\public\sdk\inc\tvout.h -FILE 4095 f:\sp\public\sdk\inc\winsvc.h -FILE 4096 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4097 f:\sp\public\sdk\inc\wingdi.h -FILE 4098 f:\sp\public\sdk\inc\pshpack4.h -FILE 4099 f:\sp\public\sdk\inc\pshpack4.h -FILE 4100 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 4101 f:\sp\vctools\crt_bld\self_x86\crt\src\signal.h -FILE 4102 f:\sp\public\sdk\inc\poppack.h -FILE 4103 f:\sp\public\sdk\inc\winnetwk.h -FILE 4104 f:\sp\public\sdk\inc\imm.h -FILE 4105 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4106 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4107 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4108 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4109 f:\sp\public\sdk\inc\windef.h -FILE 4110 f:\sp\public\sdk\inc\pshpack1.h -FILE 4111 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4112 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4113 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4114 f:\sp\public\sdk\inc\winver.h -FILE 4115 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4116 f:\sp\public\sdk\inc\winnt.h -FILE 4117 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4118 f:\sp\public\sdk\inc\winreg.h -FILE 4119 f:\sp\vctools\crt_bld\self_x86\crt\src\abort.c -FILE 4120 f:\sp\public\sdk\inc\winbase.h -FILE 4121 f:\sp\public\sdk\inc\winerror.h -FILE 4122 f:\sp\public\sdk\inc\pshpack8.h -FILE 4123 f:\sp\public\sdk\inc\reason.h -FILE 4124 f:\sp\public\sdk\inc\ddbanned.h -FILE 4125 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4126 f:\sp\public\sdk\inc\wincon.h -FILE 4127 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4128 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4129 f:\sp\public\sdk\inc\pshpack2.h -FILE 4130 f:\sp\public\sdk\inc\mcx.h -FILE 4131 f:\sp\public\sdk\inc\winuser.h -FILE 4132 f:\sp\public\sdk\inc\winnls.h -FILE 4133 f:\sp\public\sdk\inc\guiddef.h -FILE 4134 f:\sp\public\sdk\inc\stralign.h -FILE 4135 f:\sp\public\sdk\inc\specstrings.h -FILE 4136 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4137 f:\sp\public\sdk\inc\basetsd.h -FILE 4138 f:\sp\public\sdk\inc\windows.h -FILE 4139 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4140 f:\sp\public\sdk\inc\tvout.h -FILE 4141 f:\sp\public\sdk\inc\winsvc.h -FILE 4142 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4143 f:\sp\public\sdk\inc\wingdi.h -FILE 4144 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 4145 f:\sp\public\sdk\inc\wincon.h -FILE 4146 f:\sp\public\sdk\inc\imm.h -FILE 4147 f:\sp\public\sdk\inc\winbase.h -FILE 4148 f:\sp\public\sdk\inc\wingdi.h -FILE 4149 f:\sp\public\sdk\inc\winver.h -FILE 4150 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4151 f:\sp\public\sdk\inc\windows.h -FILE 4152 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4153 f:\sp\public\sdk\inc\pshpack2.h -FILE 4154 f:\sp\public\sdk\inc\reason.h -FILE 4155 f:\sp\vctools\crt_bld\self_x86\crt\src\a_str.c -FILE 4156 f:\sp\public\sdk\inc\specstrings.h -FILE 4157 f:\sp\public\sdk\inc\basetsd.h -FILE 4158 f:\sp\public\sdk\inc\pshpack4.h -FILE 4159 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 4160 f:\sp\public\sdk\inc\winnetwk.h -FILE 4161 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4162 f:\sp\public\sdk\inc\stralign.h -FILE 4163 f:\sp\public\sdk\inc\poppack.h -FILE 4164 f:\sp\public\sdk\inc\winsvc.h -FILE 4165 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4166 f:\sp\public\sdk\inc\windef.h -FILE 4167 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4168 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4169 f:\sp\public\sdk\inc\winuser.h -FILE 4170 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4171 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4172 f:\sp\public\sdk\inc\mcx.h -FILE 4173 f:\sp\public\sdk\inc\pshpack8.h -FILE 4174 f:\sp\public\sdk\inc\guiddef.h -FILE 4175 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 4176 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4177 f:\sp\public\sdk\inc\winnt.h -FILE 4178 f:\sp\public\sdk\inc\winnls.h -FILE 4179 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4180 f:\sp\public\sdk\inc\pshpack1.h -FILE 4181 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 4182 f:\sp\public\sdk\inc\winerror.h -FILE 4183 f:\sp\public\sdk\inc\winreg.h -FILE 4184 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4185 f:\sp\public\sdk\inc\ddbanned.h -FILE 4186 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4187 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4188 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 4189 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4190 f:\sp\public\sdk\inc\tvout.h -FILE 4191 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4192 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 4193 f:\sp\public\sdk\inc\wincon.h -FILE 4194 f:\sp\public\sdk\inc\imm.h -FILE 4195 f:\sp\public\sdk\inc\winbase.h -FILE 4196 f:\sp\public\sdk\inc\wingdi.h -FILE 4197 f:\sp\public\sdk\inc\winver.h -FILE 4198 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4199 f:\sp\public\sdk\inc\windows.h -FILE 4200 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4201 f:\sp\public\sdk\inc\pshpack2.h -FILE 4202 f:\sp\public\sdk\inc\reason.h -FILE 4203 f:\sp\vctools\crt_bld\self_x86\crt\src\a_map.c -FILE 4204 f:\sp\public\sdk\inc\specstrings.h -FILE 4205 f:\sp\public\sdk\inc\basetsd.h -FILE 4206 f:\sp\public\sdk\inc\pshpack4.h -FILE 4207 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 4208 f:\sp\public\sdk\inc\winnetwk.h -FILE 4209 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4210 f:\sp\public\sdk\inc\stralign.h -FILE 4211 f:\sp\public\sdk\inc\poppack.h -FILE 4212 f:\sp\public\sdk\inc\winsvc.h -FILE 4213 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4214 f:\sp\public\sdk\inc\windef.h -FILE 4215 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4216 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4217 f:\sp\public\sdk\inc\winuser.h -FILE 4218 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4219 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4220 f:\sp\public\sdk\inc\mcx.h -FILE 4221 f:\sp\public\sdk\inc\pshpack8.h -FILE 4222 f:\sp\public\sdk\inc\guiddef.h -FILE 4223 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 4224 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4225 f:\sp\public\sdk\inc\winnt.h -FILE 4226 f:\sp\public\sdk\inc\winnls.h -FILE 4227 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4228 f:\sp\public\sdk\inc\pshpack1.h -FILE 4229 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 4230 f:\sp\public\sdk\inc\winerror.h -FILE 4231 f:\sp\public\sdk\inc\winreg.h -FILE 4232 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4233 f:\sp\public\sdk\inc\ddbanned.h -FILE 4234 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4235 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4236 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 4237 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4238 f:\sp\public\sdk\inc\tvout.h -FILE 4239 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4240 f:\sp\public\sdk\inc\wincon.h -FILE 4241 f:\sp\public\sdk\inc\imm.h -FILE 4242 f:\sp\public\sdk\inc\winbase.h -FILE 4243 f:\sp\public\sdk\inc\wingdi.h -FILE 4244 f:\sp\public\sdk\inc\winver.h -FILE 4245 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4246 f:\sp\public\sdk\inc\windows.h -FILE 4247 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4248 f:\sp\public\sdk\inc\pshpack2.h -FILE 4249 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 4250 f:\sp\public\sdk\inc\reason.h -FILE 4251 f:\sp\vctools\crt_bld\self_x86\crt\src\a_loc.c -FILE 4252 f:\sp\public\sdk\inc\specstrings.h -FILE 4253 f:\sp\public\sdk\inc\basetsd.h -FILE 4254 f:\sp\public\sdk\inc\pshpack4.h -FILE 4255 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 4256 f:\sp\public\sdk\inc\winnetwk.h -FILE 4257 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4258 f:\sp\public\sdk\inc\stralign.h -FILE 4259 f:\sp\public\sdk\inc\poppack.h -FILE 4260 f:\sp\public\sdk\inc\winsvc.h -FILE 4261 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4262 f:\sp\public\sdk\inc\windef.h -FILE 4263 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4264 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4265 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 4266 f:\sp\public\sdk\inc\winuser.h -FILE 4267 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4268 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4269 f:\sp\public\sdk\inc\mcx.h -FILE 4270 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 4271 f:\sp\public\sdk\inc\pshpack8.h -FILE 4272 f:\sp\public\sdk\inc\guiddef.h -FILE 4273 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 4274 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4275 f:\sp\public\sdk\inc\winnt.h -FILE 4276 f:\sp\public\sdk\inc\winnls.h -FILE 4277 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4278 f:\sp\public\sdk\inc\pshpack1.h -FILE 4279 f:\sp\public\sdk\inc\winerror.h -FILE 4280 f:\sp\public\sdk\inc\winreg.h -FILE 4281 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4282 f:\sp\public\sdk\inc\ddbanned.h -FILE 4283 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4284 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4285 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4286 f:\sp\public\sdk\inc\tvout.h -FILE 4287 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4288 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 4289 f:\sp\public\sdk\inc\poppack.h -FILE 4290 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 4291 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4292 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4293 f:\sp\public\sdk\inc\winnetwk.h -FILE 4294 f:\sp\public\sdk\inc\imm.h -FILE 4295 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4296 f:\sp\public\sdk\inc\windef.h -FILE 4297 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4298 f:\sp\public\sdk\inc\pshpack1.h -FILE 4299 f:\sp\public\sdk\inc\winver.h -FILE 4300 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4301 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4302 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4303 f:\sp\public\sdk\inc\winnt.h -FILE 4304 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4305 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4306 f:\sp\public\sdk\inc\winreg.h -FILE 4307 f:\sp\vctools\crt_bld\self_x86\crt\src\a_env.c -FILE 4308 f:\sp\public\sdk\inc\winbase.h -FILE 4309 f:\sp\public\sdk\inc\winerror.h -FILE 4310 f:\sp\public\sdk\inc\pshpack8.h -FILE 4311 f:\sp\public\sdk\inc\reason.h -FILE 4312 f:\sp\public\sdk\inc\wincon.h -FILE 4313 f:\sp\public\sdk\inc\ddbanned.h -FILE 4314 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4315 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4316 f:\sp\public\sdk\inc\pshpack2.h -FILE 4317 f:\sp\public\sdk\inc\mcx.h -FILE 4318 f:\sp\public\sdk\inc\winuser.h -FILE 4319 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4320 f:\sp\public\sdk\inc\winnls.h -FILE 4321 f:\sp\public\sdk\inc\guiddef.h -FILE 4322 f:\sp\public\sdk\inc\windows.h -FILE 4323 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4324 f:\sp\public\sdk\inc\specstrings.h -FILE 4325 f:\sp\public\sdk\inc\basetsd.h -FILE 4326 f:\sp\public\sdk\inc\stralign.h -FILE 4327 f:\sp\public\sdk\inc\tvout.h -FILE 4328 f:\sp\public\sdk\inc\winsvc.h -FILE 4329 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4330 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 4331 f:\sp\public\sdk\inc\wingdi.h -FILE 4332 f:\sp\public\sdk\inc\pshpack4.h -FILE 4333 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 4334 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4335 f:\sp\public\sdk\inc\wincon.h -FILE 4336 f:\sp\public\sdk\inc\imm.h -FILE 4337 f:\sp\public\sdk\inc\winbase.h -FILE 4338 f:\sp\public\sdk\inc\wingdi.h -FILE 4339 f:\sp\public\sdk\inc\winver.h -FILE 4340 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4341 f:\sp\public\sdk\inc\windows.h -FILE 4342 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4343 f:\sp\public\sdk\inc\pshpack2.h -FILE 4344 f:\sp\public\sdk\inc\reason.h -FILE 4345 f:\sp\vctools\crt_bld\self_x86\crt\src\a_cmp.c -FILE 4346 f:\sp\public\sdk\inc\specstrings.h -FILE 4347 f:\sp\public\sdk\inc\basetsd.h -FILE 4348 f:\sp\public\sdk\inc\pshpack4.h -FILE 4349 f:\sp\public\sdk\inc\winnetwk.h -FILE 4350 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4351 f:\sp\public\sdk\inc\stralign.h -FILE 4352 f:\sp\public\sdk\inc\poppack.h -FILE 4353 f:\sp\public\sdk\inc\winsvc.h -FILE 4354 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4355 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 4356 f:\sp\public\sdk\inc\windef.h -FILE 4357 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4358 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4359 f:\sp\public\sdk\inc\winuser.h -FILE 4360 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4361 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4362 f:\sp\public\sdk\inc\mcx.h -FILE 4363 f:\sp\public\sdk\inc\pshpack8.h -FILE 4364 f:\sp\public\sdk\inc\guiddef.h -FILE 4365 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 4366 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4367 f:\sp\public\sdk\inc\winnt.h -FILE 4368 f:\sp\public\sdk\inc\winnls.h -FILE 4369 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4370 f:\sp\public\sdk\inc\pshpack1.h -FILE 4371 f:\sp\public\sdk\inc\winerror.h -FILE 4372 f:\sp\public\sdk\inc\winreg.h -FILE 4373 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4374 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 4375 f:\sp\public\sdk\inc\ddbanned.h -FILE 4376 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4377 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4378 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 4379 f:\sp\public\sdk\inc\tvout.h -FILE 4380 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4381 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\misc\i386\sehprolg4.asm -FILE 4382 f:\sp\public\sdk\inc\poppack.h -FILE 4383 f:\sp\public\sdk\inc\winnetwk.h -FILE 4384 f:\sp\public\sdk\inc\imm.h -FILE 4385 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4386 f:\sp\public\sdk\inc\windef.h -FILE 4387 f:\sp\public\sdk\inc\pshpack1.h -FILE 4388 f:\sp\public\sdk\inc\winver.h -FILE 4389 f:\sp\public\sdk\inc\windows.h -FILE 4390 f:\sp\public\sdk\inc\winnt.h -FILE 4391 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4392 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4393 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4394 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4395 f:\sp\public\sdk\inc\winreg.h -FILE 4396 f:\sp\public\sdk\inc\winbase.h -FILE 4397 f:\sp\vctools\crt_bld\self_x86\crt\src\intel\secchk.c -FILE 4398 f:\sp\public\sdk\inc\winerror.h -FILE 4399 f:\sp\public\sdk\inc\pshpack8.h -FILE 4400 f:\sp\vctools\crt_bld\self_x86\crt\src\process.h -FILE 4401 f:\sp\public\sdk\inc\reason.h -FILE 4402 f:\sp\public\sdk\inc\wincon.h -FILE 4403 f:\sp\public\sdk\inc\ddbanned.h -FILE 4404 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4405 f:\sp\public\sdk\inc\pshpack2.h -FILE 4406 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4407 f:\sp\public\sdk\inc\mcx.h -FILE 4408 f:\sp\public\sdk\inc\winuser.h -FILE 4409 f:\sp\public\sdk\inc\winnls.h -FILE 4410 f:\sp\public\sdk\inc\guiddef.h -FILE 4411 f:\sp\public\sdk\inc\specstrings.h -FILE 4412 f:\sp\public\sdk\inc\basetsd.h -FILE 4413 f:\sp\public\sdk\inc\stralign.h -FILE 4414 f:\sp\public\sdk\inc\tvout.h -FILE 4415 f:\sp\public\sdk\inc\winsvc.h -FILE 4416 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4417 f:\sp\public\sdk\inc\wingdi.h -FILE 4418 f:\sp\public\sdk\inc\pshpack4.h -FILE 4419 f:\sp\public\sdk\inc\poppack.h -FILE 4420 f:\sp\public\sdk\inc\winnetwk.h -FILE 4421 f:\sp\public\sdk\inc\imm.h -FILE 4422 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4423 f:\sp\public\sdk\inc\windef.h -FILE 4424 f:\sp\public\sdk\inc\pshpack1.h -FILE 4425 f:\sp\public\sdk\inc\winver.h -FILE 4426 f:\sp\public\sdk\inc\windows.h -FILE 4427 f:\sp\public\sdk\inc\winnt.h -FILE 4428 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4429 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4430 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4431 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4432 f:\sp\public\sdk\inc\winreg.h -FILE 4433 f:\sp\public\sdk\inc\winbase.h -FILE 4434 f:\sp\vctools\crt_bld\self_x86\crt\src\intel\loadcfg.c -FILE 4435 f:\sp\public\sdk\inc\winerror.h -FILE 4436 f:\sp\public\sdk\inc\pshpack8.h -FILE 4437 f:\sp\public\sdk\inc\reason.h -FILE 4438 f:\sp\public\sdk\inc\wincon.h -FILE 4439 f:\sp\public\sdk\inc\ddbanned.h -FILE 4440 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4441 f:\sp\public\sdk\inc\pshpack2.h -FILE 4442 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4443 f:\sp\public\sdk\inc\mcx.h -FILE 4444 f:\sp\public\sdk\inc\winuser.h -FILE 4445 f:\sp\public\sdk\inc\winnls.h -FILE 4446 f:\sp\public\sdk\inc\guiddef.h -FILE 4447 f:\sp\public\sdk\inc\specstrings.h -FILE 4448 f:\sp\public\sdk\inc\basetsd.h -FILE 4449 f:\sp\public\sdk\inc\stralign.h -FILE 4450 f:\sp\public\sdk\inc\tvout.h -FILE 4451 f:\sp\public\sdk\inc\winsvc.h -FILE 4452 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4453 f:\sp\public\sdk\inc\wingdi.h -FILE 4454 f:\sp\public\sdk\inc\pshpack4.h -FILE 4455 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\misc\i386\exsup4.asm -FILE 4456 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\h\exsup.inc -FILE 4457 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\misc\i386\exsup.asm -FILE 4458 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\h\pversion.inc -FILE 4459 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\h\cmacros.inc -FILE 4460 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\h\exsup.inc -FILE 4461 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\misc\i386\nlgsupp.asm -FILE 4462 f:\sp\public\sdk\inc\ntldr.h -FILE 4463 f:\sp\public\sdk\inc\ntpoapi.h -FILE 4464 f:\sp\public\sdk\inc\ntexapi.h -FILE 4465 f:\sp\public\sdk\inc\pshpack1.h -FILE 4466 f:\sp\public\sdk\inc\pshpack8.h -FILE 4467 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 4468 f:\sp\public\sdk\inc\ntdef.h -FILE 4469 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 4470 f:\sp\public\sdk\inc\mce.h -FILE 4471 f:\sp\public\sdk\inc\poppack.h -FILE 4472 f:\sp\public\sdk\inc\ntimage.h -FILE 4473 f:\sp\public\sdk\inc\pshpack2.h -FILE 4474 f:\sp\public\sdk\inc\ntpsapi.h -FILE 4475 f:\sp\public\sdk\inc\nti386.h -FILE 4476 f:\sp\public\sdk\inc\nt.h -FILE 4477 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 4478 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 4479 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 4480 f:\sp\public\sdk\inc\specstrings.h -FILE 4481 f:\sp\public\sdk\inc\basetsd.h -FILE 4482 f:\sp\public\sdk\inc\ntxcapi.h -FILE 4483 f:\sp\public\sdk\inc\guiddef.h -FILE 4484 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\misc\i386\chandler4.c -FILE 4485 f:\sp\public\sdk\inc\ntstatus.h -FILE 4486 f:\sp\public\sdk\inc\ntkeapi.h -FILE 4487 f:\sp\public\sdk\inc\ntconfig.h -FILE 4488 f:\sp\public\sdk\inc\ntregapi.h -FILE 4489 f:\sp\public\sdk\inc\ntmmapi.h -FILE 4490 f:\sp\public\sdk\inc\ntobapi.h -FILE 4491 f:\sp\public\sdk\inc\nxi386.h -FILE 4492 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\process.h -FILE 4493 f:\sp\public\sdk\inc\ntioapi.h -FILE 4494 f:\sp\public\sdk\inc\devioctl.h -FILE 4495 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 4496 f:\sp\public\sdk\inc\ntseapi.h -FILE 4497 f:\sp\public\sdk\inc\ddbanned.h -FILE 4498 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 4499 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 4500 f:\sp\public\sdk\inc\ntnls.h -FILE 4501 f:\sp\public\sdk\inc\ntelfapi.h -FILE 4502 f:\sp\public\sdk\inc\pshpack4.h -FILE 4503 f:\sp\public\sdk\inc\ntiolog.h -FILE 4504 f:\sp\public\sdk\inc\ntlpcapi.h -FILE 4505 f:\sp\public\sdk\inc\ntpnpapi.h -FILE 4506 f:\sp\public\sdk\inc\cfg.h -FILE 4507 f:\sp\public\sdk\inc\pebteb.h -FILE 4508 f:\sp\public\sdk\inc\wincon.h -FILE 4509 f:\sp\public\sdk\inc\imm.h -FILE 4510 f:\sp\public\sdk\inc\winbase.h -FILE 4511 f:\sp\public\sdk\inc\wingdi.h -FILE 4512 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4513 f:\sp\public\sdk\inc\winver.h -FILE 4514 f:\sp\public\sdk\inc\pshpack2.h -FILE 4515 f:\sp\public\sdk\inc\reason.h -FILE 4516 f:\sp\vctools\crt_bld\self_x86\crt\src\mbdata.h -FILE 4517 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4518 f:\sp\vctools\crt_bld\self_x86\crt\src\mbsnbico.c -FILE 4519 f:\sp\public\sdk\inc\specstrings.h -FILE 4520 f:\sp\public\sdk\inc\basetsd.h -FILE 4521 f:\sp\public\sdk\inc\pshpack4.h -FILE 4522 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 4523 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h -FILE 4524 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4525 f:\sp\public\sdk\inc\winnetwk.h -FILE 4526 f:\sp\public\sdk\inc\stralign.h -FILE 4527 f:\sp\public\sdk\inc\poppack.h -FILE 4528 f:\sp\public\sdk\inc\winsvc.h -FILE 4529 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4530 f:\sp\public\sdk\inc\windef.h -FILE 4531 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 4532 f:\sp\public\sdk\inc\winuser.h -FILE 4533 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4534 f:\sp\public\sdk\inc\windows.h -FILE 4535 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4536 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4537 f:\sp\public\sdk\inc\mcx.h -FILE 4538 f:\sp\public\sdk\inc\pshpack8.h -FILE 4539 f:\sp\public\sdk\inc\guiddef.h -FILE 4540 f:\sp\public\sdk\inc\winnt.h -FILE 4541 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4542 f:\sp\public\sdk\inc\winnls.h -FILE 4543 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4544 f:\sp\public\sdk\inc\pshpack1.h -FILE 4545 f:\sp\public\sdk\inc\winerror.h -FILE 4546 f:\sp\public\sdk\inc\winreg.h -FILE 4547 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4548 f:\sp\public\sdk\inc\ddbanned.h -FILE 4549 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4550 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4551 f:\sp\public\sdk\inc\tvout.h -FILE 4552 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4553 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4554 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 4555 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 4556 f:\sp\public\sdk\inc\wincon.h -FILE 4557 f:\sp\public\sdk\inc\imm.h -FILE 4558 f:\sp\public\sdk\inc\winbase.h -FILE 4559 f:\sp\public\sdk\inc\wingdi.h -FILE 4560 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h -FILE 4561 f:\sp\public\sdk\inc\winver.h -FILE 4562 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4563 f:\sp\public\sdk\inc\windows.h -FILE 4564 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4565 f:\sp\public\sdk\inc\pshpack2.h -FILE 4566 f:\sp\public\sdk\inc\reason.h -FILE 4567 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 4568 f:\sp\vctools\crt_bld\self_x86\crt\src\mbschr.c -FILE 4569 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4570 f:\sp\public\sdk\inc\specstrings.h -FILE 4571 f:\sp\public\sdk\inc\basetsd.h -FILE 4572 f:\sp\public\sdk\inc\pshpack4.h -FILE 4573 f:\sp\public\sdk\inc\winnetwk.h -FILE 4574 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4575 f:\sp\public\sdk\inc\stralign.h -FILE 4576 f:\sp\public\sdk\inc\poppack.h -FILE 4577 f:\sp\public\sdk\inc\winsvc.h -FILE 4578 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4579 f:\sp\public\sdk\inc\windef.h -FILE 4580 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4581 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4582 f:\sp\public\sdk\inc\winuser.h -FILE 4583 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4584 f:\sp\public\sdk\inc\mcx.h -FILE 4585 f:\sp\public\sdk\inc\pshpack8.h -FILE 4586 f:\sp\public\sdk\inc\guiddef.h -FILE 4587 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 4588 f:\sp\public\sdk\inc\winnt.h -FILE 4589 f:\sp\public\sdk\inc\winnls.h -FILE 4590 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4591 f:\sp\public\sdk\inc\pshpack1.h -FILE 4592 f:\sp\public\sdk\inc\winerror.h -FILE 4593 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 4594 f:\sp\public\sdk\inc\winreg.h -FILE 4595 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4596 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 4597 f:\sp\public\sdk\inc\ddbanned.h -FILE 4598 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4599 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4600 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4601 f:\sp\public\sdk\inc\tvout.h -FILE 4602 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4603 f:\sp\vctools\crt_bld\self_x86\crt\src\mbdata.h -FILE 4604 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 4605 f:\sp\public\sdk\inc\wincon.h -FILE 4606 f:\sp\public\sdk\inc\imm.h -FILE 4607 f:\sp\public\sdk\inc\winbase.h -FILE 4608 f:\sp\public\sdk\inc\wingdi.h -FILE 4609 f:\sp\public\sdk\inc\winver.h -FILE 4610 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 4611 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4612 f:\sp\public\sdk\inc\pshpack2.h -FILE 4613 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 4614 f:\sp\public\sdk\inc\reason.h -FILE 4615 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.c -FILE 4616 f:\sp\public\sdk\inc\specstrings.h -FILE 4617 f:\sp\public\sdk\inc\basetsd.h -FILE 4618 f:\sp\public\sdk\inc\pshpack4.h -FILE 4619 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 4620 f:\sp\public\sdk\inc\winnetwk.h -FILE 4621 f:\sp\public\sdk\inc\stralign.h -FILE 4622 f:\sp\public\sdk\inc\poppack.h -FILE 4623 f:\sp\public\sdk\inc\winsvc.h -FILE 4624 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4625 f:\sp\public\sdk\inc\windef.h -FILE 4626 f:\sp\public\sdk\inc\winuser.h -FILE 4627 f:\sp\public\sdk\inc\windows.h -FILE 4628 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4629 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4630 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4631 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4632 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4633 f:\sp\public\sdk\inc\mcx.h -FILE 4634 f:\sp\public\sdk\inc\pshpack8.h -FILE 4635 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4636 f:\sp\public\sdk\inc\guiddef.h -FILE 4637 f:\sp\public\sdk\inc\winnt.h -FILE 4638 f:\sp\public\sdk\inc\winnls.h -FILE 4639 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4640 f:\sp\vctools\crt_bld\self_x86\crt\src\mbdata.h -FILE 4641 f:\sp\public\sdk\inc\pshpack1.h -FILE 4642 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 4643 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 4644 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4645 f:\sp\public\sdk\inc\winerror.h -FILE 4646 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h -FILE 4647 f:\sp\public\sdk\inc\winreg.h -FILE 4648 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4649 f:\sp\public\sdk\inc\ddbanned.h -FILE 4650 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 4651 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4652 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h -FILE 4653 f:\sp\public\sdk\inc\tvout.h -FILE 4654 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4655 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4656 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4657 f:\sp\public\sdk\inc\wincon.h -FILE 4658 f:\sp\public\sdk\inc\imm.h -FILE 4659 f:\sp\public\sdk\inc\winbase.h -FILE 4660 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4661 f:\sp\public\sdk\inc\wingdi.h -FILE 4662 f:\sp\public\sdk\inc\windef.h -FILE 4663 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h -FILE 4664 f:\sp\public\sdk\inc\winver.h -FILE 4665 f:\sp\public\sdk\inc\pshpack2.h -FILE 4666 f:\sp\public\sdk\inc\reason.h -FILE 4667 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 4668 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4669 f:\sp\vctools\crt_bld\self_x86\crt\src\ismbbyte.c -FILE 4670 f:\sp\public\sdk\inc\winnt.h -FILE 4671 f:\sp\public\sdk\inc\specstrings.h -FILE 4672 f:\sp\public\sdk\inc\basetsd.h -FILE 4673 f:\sp\public\sdk\inc\pshpack4.h -FILE 4674 f:\sp\public\sdk\inc\winnetwk.h -FILE 4675 f:\sp\public\sdk\inc\stralign.h -FILE 4676 f:\sp\public\sdk\inc\poppack.h -FILE 4677 f:\sp\public\sdk\inc\winsvc.h -FILE 4678 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4679 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4680 f:\sp\public\sdk\inc\winuser.h -FILE 4681 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4682 f:\sp\public\sdk\inc\mcx.h -FILE 4683 f:\sp\public\sdk\inc\pshpack8.h -FILE 4684 f:\sp\public\sdk\inc\guiddef.h -FILE 4685 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4686 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 4687 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4688 f:\sp\public\sdk\inc\windows.h -FILE 4689 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4690 f:\sp\public\sdk\inc\winnls.h -FILE 4691 f:\sp\public\sdk\inc\pshpack1.h -FILE 4692 f:\sp\public\sdk\inc\winerror.h -FILE 4693 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 4694 f:\sp\public\sdk\inc\winreg.h -FILE 4695 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4696 f:\sp\public\sdk\inc\ddbanned.h -FILE 4697 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4698 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4699 f:\sp\public\sdk\inc\tvout.h -FILE 4700 f:\sp\vctools\crt_bld\self_x86\crt\src\mbdata.h -FILE 4701 f:\sp\public\sdk\inc\winnetwk.h -FILE 4702 f:\sp\public\sdk\inc\imm.h -FILE 4703 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h -FILE 4704 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4705 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 4706 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4707 f:\sp\public\sdk\inc\windef.h -FILE 4708 f:\sp\public\sdk\inc\pshpack1.h -FILE 4709 f:\sp\public\sdk\inc\winver.h -FILE 4710 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 4711 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4712 f:\sp\public\sdk\inc\winnt.h -FILE 4713 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4714 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4715 f:\sp\public\sdk\inc\winreg.h -FILE 4716 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4717 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4718 f:\sp\public\sdk\inc\winbase.h -FILE 4719 f:\sp\public\sdk\inc\winerror.h -FILE 4720 f:\sp\public\sdk\inc\pshpack8.h -FILE 4721 f:\sp\vctools\crt_bld\self_x86\crt\src\putwch.c -FILE 4722 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4723 f:\sp\public\sdk\inc\reason.h -FILE 4724 f:\sp\public\sdk\inc\wincon.h -FILE 4725 f:\sp\public\sdk\inc\pshpack2.h -FILE 4726 f:\sp\public\sdk\inc\mcx.h -FILE 4727 f:\sp\public\sdk\inc\winuser.h -FILE 4728 f:\sp\public\sdk\inc\winnls.h -FILE 4729 f:\sp\public\sdk\inc\guiddef.h -FILE 4730 f:\sp\public\sdk\inc\stralign.h -FILE 4731 f:\sp\public\sdk\inc\ddbanned.h -FILE 4732 f:\sp\public\sdk\inc\specstrings.h -FILE 4733 f:\sp\vctools\crt_bld\self_x86\crt\src\file2.h -FILE 4734 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4735 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4736 f:\sp\public\sdk\inc\basetsd.h -FILE 4737 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 4738 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4739 f:\sp\public\sdk\inc\windows.h -FILE 4740 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4741 f:\sp\public\sdk\inc\tvout.h -FILE 4742 f:\sp\public\sdk\inc\winsvc.h -FILE 4743 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4744 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4745 f:\sp\public\sdk\inc\wingdi.h -FILE 4746 f:\sp\public\sdk\inc\pshpack4.h -FILE 4747 f:\sp\vctools\crt_bld\self_x86\crt\src\conio.h -FILE 4748 f:\sp\public\sdk\inc\poppack.h -FILE 4749 f:\sp\public\sdk\inc\reason.h -FILE 4750 f:\sp\public\sdk\inc\wincon.h -FILE 4751 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h -FILE 4752 f:\sp\public\sdk\inc\poppack.h -FILE 4753 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4754 f:\sp\public\sdk\inc\mcx.h -FILE 4755 f:\sp\public\sdk\inc\winuser.h -FILE 4756 f:\sp\public\sdk\inc\winnls.h -FILE 4757 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h -FILE 4758 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4759 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4760 f:\sp\public\sdk\inc\stralign.h -FILE 4761 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4762 f:\sp\public\sdk\inc\windef.h -FILE 4763 f:\sp\public\sdk\inc\tvout.h -FILE 4764 f:\sp\public\sdk\inc\winsvc.h -FILE 4765 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 4766 f:\sp\public\sdk\inc\wingdi.h -FILE 4767 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 4768 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4769 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4770 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4771 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4772 f:\sp\public\sdk\inc\winnt.h -FILE 4773 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4774 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4775 f:\sp\public\sdk\inc\winnetwk.h -FILE 4776 f:\sp\public\sdk\inc\imm.h -FILE 4777 f:\sp\vctools\crt_bld\self_x86\crt\src\write.c -FILE 4778 f:\sp\public\sdk\inc\winbase.h -FILE 4779 f:\sp\public\sdk\inc\winerror.h -FILE 4780 f:\sp\public\sdk\inc\pshpack1.h -FILE 4781 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 4782 f:\sp\public\sdk\inc\pshpack8.h -FILE 4783 f:\sp\public\sdk\inc\winver.h -FILE 4784 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h -FILE 4785 f:\sp\public\sdk\inc\ddbanned.h -FILE 4786 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4787 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4788 f:\sp\public\sdk\inc\pshpack2.h -FILE 4789 f:\sp\public\sdk\inc\winreg.h -FILE 4790 f:\sp\public\sdk\inc\guiddef.h -FILE 4791 f:\sp\public\sdk\inc\windows.h -FILE 4792 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4793 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 4794 f:\sp\public\sdk\inc\specstrings.h -FILE 4795 f:\sp\public\sdk\inc\basetsd.h -FILE 4796 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4797 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4798 f:\sp\public\sdk\inc\pshpack4.h -FILE 4799 f:\sp\public\sdk\inc\reason.h -FILE 4800 f:\sp\public\sdk\inc\wincon.h -FILE 4801 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4802 f:\sp\public\sdk\inc\poppack.h -FILE 4803 f:\sp\public\sdk\inc\mcx.h -FILE 4804 f:\sp\public\sdk\inc\winuser.h -FILE 4805 f:\sp\public\sdk\inc\winnls.h -FILE 4806 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4807 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4808 f:\sp\public\sdk\inc\stralign.h -FILE 4809 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4810 f:\sp\public\sdk\inc\windef.h -FILE 4811 f:\sp\public\sdk\inc\tvout.h -FILE 4812 f:\sp\public\sdk\inc\winsvc.h -FILE 4813 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 4814 f:\sp\public\sdk\inc\wingdi.h -FILE 4815 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4816 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4817 f:\sp\public\sdk\inc\winnt.h -FILE 4818 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4819 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4820 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h -FILE 4821 f:\sp\public\sdk\inc\winnetwk.h -FILE 4822 f:\sp\public\sdk\inc\imm.h -FILE 4823 f:\sp\vctools\crt_bld\self_x86\crt\src\fcntl.h -FILE 4824 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 4825 f:\sp\vctools\crt_bld\self_x86\crt\src\osfinfo.c -FILE 4826 f:\sp\public\sdk\inc\winbase.h -FILE 4827 f:\sp\public\sdk\inc\winerror.h -FILE 4828 f:\sp\public\sdk\inc\pshpack1.h -FILE 4829 f:\sp\public\sdk\inc\pshpack8.h -FILE 4830 f:\sp\public\sdk\inc\winver.h -FILE 4831 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4832 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h -FILE 4833 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4834 f:\sp\public\sdk\inc\ddbanned.h -FILE 4835 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4836 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4837 f:\sp\public\sdk\inc\pshpack2.h -FILE 4838 f:\sp\public\sdk\inc\winreg.h -FILE 4839 f:\sp\public\sdk\inc\guiddef.h -FILE 4840 f:\sp\public\sdk\inc\windows.h -FILE 4841 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4842 f:\sp\public\sdk\inc\specstrings.h -FILE 4843 f:\sp\public\sdk\inc\basetsd.h -FILE 4844 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4845 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4846 f:\sp\public\sdk\inc\pshpack4.h -FILE 4847 f:\sp\public\sdk\inc\reason.h -FILE 4848 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4849 f:\sp\public\sdk\inc\wincon.h -FILE 4850 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4851 f:\sp\public\sdk\inc\poppack.h -FILE 4852 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4853 f:\sp\public\sdk\inc\mcx.h -FILE 4854 f:\sp\public\sdk\inc\winuser.h -FILE 4855 f:\sp\public\sdk\inc\winnls.h -FILE 4856 f:\sp\public\sdk\inc\stralign.h -FILE 4857 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4858 f:\sp\public\sdk\inc\windef.h -FILE 4859 f:\sp\public\sdk\inc\tvout.h -FILE 4860 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h -FILE 4861 f:\sp\public\sdk\inc\winsvc.h -FILE 4862 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4863 f:\sp\public\sdk\inc\wingdi.h -FILE 4864 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 4865 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4866 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4867 f:\sp\public\sdk\inc\winnt.h -FILE 4868 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4869 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4870 f:\sp\public\sdk\inc\winnetwk.h -FILE 4871 f:\sp\public\sdk\inc\imm.h -FILE 4872 f:\sp\vctools\crt_bld\self_x86\crt\src\lseeki64.c -FILE 4873 f:\sp\public\sdk\inc\winbase.h -FILE 4874 f:\sp\public\sdk\inc\winerror.h -FILE 4875 f:\sp\public\sdk\inc\pshpack1.h -FILE 4876 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h -FILE 4877 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 4878 f:\sp\public\sdk\inc\pshpack8.h -FILE 4879 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4880 f:\sp\public\sdk\inc\winver.h -FILE 4881 f:\sp\public\sdk\inc\ddbanned.h -FILE 4882 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4883 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4884 f:\sp\public\sdk\inc\pshpack2.h -FILE 4885 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4886 f:\sp\public\sdk\inc\winreg.h -FILE 4887 f:\sp\public\sdk\inc\guiddef.h -FILE 4888 f:\sp\public\sdk\inc\windows.h -FILE 4889 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4890 f:\sp\public\sdk\inc\specstrings.h -FILE 4891 f:\sp\public\sdk\inc\basetsd.h -FILE 4892 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4893 f:\sp\public\sdk\inc\pshpack4.h -FILE 4894 f:\sp\public\sdk\inc\pshpack4.h -FILE 4895 f:\sp\public\sdk\inc\poppack.h -FILE 4896 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h -FILE 4897 f:\sp\public\sdk\inc\winnetwk.h -FILE 4898 f:\sp\public\sdk\inc\imm.h -FILE 4899 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4900 f:\sp\public\sdk\inc\windef.h -FILE 4901 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4902 f:\sp\public\sdk\inc\pshpack1.h -FILE 4903 f:\sp\public\sdk\inc\winver.h -FILE 4904 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h -FILE 4905 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4906 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4907 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4908 f:\sp\public\sdk\inc\winnt.h -FILE 4909 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4910 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4911 f:\sp\public\sdk\inc\winreg.h -FILE 4912 f:\sp\vctools\crt_bld\self_x86\crt\src\isatty.c -FILE 4913 f:\sp\public\sdk\inc\winbase.h -FILE 4914 f:\sp\public\sdk\inc\winerror.h -FILE 4915 f:\sp\public\sdk\inc\pshpack8.h -FILE 4916 f:\sp\public\sdk\inc\reason.h -FILE 4917 f:\sp\public\sdk\inc\wincon.h -FILE 4918 f:\sp\public\sdk\inc\ddbanned.h -FILE 4919 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4920 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4921 f:\sp\public\sdk\inc\pshpack2.h -FILE 4922 f:\sp\public\sdk\inc\mcx.h -FILE 4923 f:\sp\public\sdk\inc\winuser.h -FILE 4924 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4925 f:\sp\public\sdk\inc\winnls.h -FILE 4926 f:\sp\public\sdk\inc\guiddef.h -FILE 4927 f:\sp\public\sdk\inc\windows.h -FILE 4928 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4929 f:\sp\public\sdk\inc\specstrings.h -FILE 4930 f:\sp\public\sdk\inc\basetsd.h -FILE 4931 f:\sp\public\sdk\inc\stralign.h -FILE 4932 f:\sp\public\sdk\inc\tvout.h -FILE 4933 f:\sp\public\sdk\inc\winsvc.h -FILE 4934 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4935 f:\sp\public\sdk\inc\wingdi.h -FILE 4936 f:\sp\public\sdk\inc\poppack.h -FILE 4937 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 4938 f:\sp\public\sdk\inc\winnetwk.h -FILE 4939 f:\sp\public\sdk\inc\imm.h -FILE 4940 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4941 f:\sp\public\sdk\inc\windef.h -FILE 4942 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4943 f:\sp\public\sdk\inc\pshpack1.h -FILE 4944 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h -FILE 4945 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 4946 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 4947 f:\sp\public\sdk\inc\winver.h -FILE 4948 f:\sp\public\sdk\inc\windows.h -FILE 4949 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4950 f:\sp\public\sdk\inc\winnt.h -FILE 4951 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4952 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4953 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4954 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4955 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4956 f:\sp\public\sdk\inc\winreg.h -FILE 4957 f:\sp\public\sdk\inc\winbase.h -FILE 4958 f:\sp\vctools\crt_bld\self_x86\crt\src\ioinit.c -FILE 4959 f:\sp\public\sdk\inc\winerror.h -FILE 4960 f:\sp\public\sdk\inc\pshpack8.h -FILE 4961 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4962 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4963 f:\sp\public\sdk\inc\reason.h -FILE 4964 f:\sp\public\sdk\inc\wincon.h -FILE 4965 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 4966 f:\sp\public\sdk\inc\ddbanned.h -FILE 4967 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4968 f:\sp\public\sdk\inc\pshpack2.h -FILE 4969 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4970 f:\sp\public\sdk\inc\mcx.h -FILE 4971 f:\sp\public\sdk\inc\winuser.h -FILE 4972 f:\sp\public\sdk\inc\winnls.h -FILE 4973 f:\sp\public\sdk\inc\guiddef.h -FILE 4974 f:\sp\public\sdk\inc\specstrings.h -FILE 4975 f:\sp\public\sdk\inc\basetsd.h -FILE 4976 f:\sp\public\sdk\inc\stralign.h -FILE 4977 f:\sp\public\sdk\inc\tvout.h -FILE 4978 f:\sp\public\sdk\inc\winsvc.h -FILE 4979 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4980 f:\sp\public\sdk\inc\wingdi.h -FILE 4981 f:\sp\public\sdk\inc\pshpack4.h -FILE 4982 f:\sp\public\sdk\inc\reason.h -FILE 4983 f:\sp\public\sdk\inc\wincon.h -FILE 4984 f:\sp\public\sdk\inc\pshpack2.h -FILE 4985 f:\sp\public\sdk\inc\mcx.h -FILE 4986 f:\sp\public\sdk\inc\winuser.h -FILE 4987 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4988 f:\sp\public\sdk\inc\winnls.h -FILE 4989 f:\sp\public\sdk\inc\guiddef.h -FILE 4990 f:\sp\public\sdk\inc\windows.h -FILE 4991 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4992 f:\sp\public\sdk\inc\specstrings.h -FILE 4993 f:\sp\public\sdk\inc\basetsd.h -FILE 4994 f:\sp\public\sdk\inc\stralign.h -FILE 4995 f:\sp\public\sdk\inc\tvout.h -FILE 4996 f:\sp\public\sdk\inc\winsvc.h -FILE 4997 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4998 f:\sp\public\sdk\inc\wingdi.h -FILE 4999 f:\sp\public\sdk\inc\pshpack4.h -FILE 5000 f:\sp\public\sdk\inc\poppack.h -FILE 5001 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h -FILE 5002 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 5003 f:\sp\public\sdk\inc\winnetwk.h -FILE 5004 f:\sp\public\sdk\inc\imm.h -FILE 5005 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 5006 f:\sp\public\sdk\inc\windef.h -FILE 5007 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 5008 f:\sp\vctools\crt_bld\self_x86\crt\src\initcon.c -FILE 5009 f:\sp\public\sdk\inc\pshpack1.h -FILE 5010 f:\sp\public\sdk\inc\winver.h -FILE 5011 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 5012 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 5013 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 5014 f:\sp\public\sdk\inc\winnt.h -FILE 5015 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 5016 f:\sp\public\sdk\inc\ddbanned.h -FILE 5017 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 5018 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 5019 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 5020 f:\sp\public\sdk\inc\winreg.h -FILE 5021 f:\sp\public\sdk\inc\winbase.h -FILE 5022 f:\sp\public\sdk\inc\winerror.h -FILE 5023 f:\sp\public\sdk\inc\pshpack8.h -FILE 5024 f:\sp\public\sdk\inc\poppack.h -FILE 5025 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h -FILE 5026 f:\sp\public\sdk\inc\winnetwk.h -FILE 5027 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 5028 f:\sp\public\sdk\inc\imm.h -FILE 5029 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 5030 f:\sp\public\sdk\inc\windef.h -FILE 5031 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 5032 f:\sp\public\sdk\inc\pshpack1.h -FILE 5033 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 5034 f:\sp\public\sdk\inc\winver.h -FILE 5035 f:\sp\public\sdk\inc\windows.h -FILE 5036 f:\sp\public\sdk\inc\winnt.h -FILE 5037 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 5038 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 5039 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 5040 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 5041 f:\sp\public\sdk\inc\winreg.h -FILE 5042 f:\sp\public\sdk\inc\winbase.h -FILE 5043 f:\sp\vctools\crt_bld\self_x86\crt\src\commit.c -FILE 5044 f:\sp\public\sdk\inc\winerror.h -FILE 5045 f:\sp\public\sdk\inc\pshpack8.h -FILE 5046 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 5047 f:\sp\public\sdk\inc\reason.h -FILE 5048 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h -FILE 5049 f:\sp\public\sdk\inc\wincon.h -FILE 5050 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 5051 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 5052 f:\sp\public\sdk\inc\ddbanned.h -FILE 5053 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 5054 f:\sp\public\sdk\inc\pshpack2.h -FILE 5055 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 5056 f:\sp\public\sdk\inc\mcx.h -FILE 5057 f:\sp\public\sdk\inc\winuser.h -FILE 5058 f:\sp\public\sdk\inc\winnls.h -FILE 5059 f:\sp\public\sdk\inc\guiddef.h -FILE 5060 f:\sp\public\sdk\inc\specstrings.h -FILE 5061 f:\sp\public\sdk\inc\basetsd.h -FILE 5062 f:\sp\public\sdk\inc\stralign.h -FILE 5063 f:\sp\public\sdk\inc\tvout.h -FILE 5064 f:\sp\public\sdk\inc\winsvc.h -FILE 5065 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 5066 f:\sp\public\sdk\inc\wingdi.h -FILE 5067 f:\sp\public\sdk\inc\pshpack4.h -FILE 5068 f:\sp\public\sdk\inc\reason.h -FILE 5069 f:\sp\public\sdk\inc\wincon.h -FILE 5070 f:\sp\vctools\crt_bld\self_x86\crt\src\io.h -FILE 5071 f:\sp\public\sdk\inc\poppack.h -FILE 5072 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 5073 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 5074 f:\sp\public\sdk\inc\mcx.h -FILE 5075 f:\sp\public\sdk\inc\winuser.h -FILE 5076 f:\sp\public\sdk\inc\winnls.h -FILE 5077 f:\sp\public\sdk\inc\stralign.h -FILE 5078 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 5079 f:\sp\public\sdk\inc\windef.h -FILE 5080 f:\sp\public\sdk\inc\tvout.h -FILE 5081 f:\sp\public\sdk\inc\winsvc.h -FILE 5082 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 5083 f:\sp\public\sdk\inc\wingdi.h -FILE 5084 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h -FILE 5085 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 5086 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 5087 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 5088 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 5089 f:\sp\public\sdk\inc\winnt.h -FILE 5090 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 5091 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 5092 f:\sp\public\sdk\inc\winnetwk.h -FILE 5093 f:\sp\public\sdk\inc\imm.h -FILE 5094 f:\sp\vctools\crt_bld\self_x86\crt\src\close.c -FILE 5095 f:\sp\public\sdk\inc\winbase.h -FILE 5096 f:\sp\public\sdk\inc\winerror.h -FILE 5097 f:\sp\public\sdk\inc\pshpack1.h -FILE 5098 f:\sp\public\sdk\inc\pshpack8.h -FILE 5099 f:\sp\public\sdk\inc\winver.h -FILE 5100 f:\sp\public\sdk\inc\ddbanned.h -FILE 5101 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 5102 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 5103 f:\sp\public\sdk\inc\pshpack2.h -FILE 5104 f:\sp\public\sdk\inc\winreg.h -FILE 5105 f:\sp\public\sdk\inc\guiddef.h -FILE 5106 f:\sp\public\sdk\inc\windows.h -FILE 5107 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 5108 f:\sp\public\sdk\inc\specstrings.h -FILE 5109 f:\sp\public\sdk\inc\basetsd.h -FILE 5110 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 5111 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 5112 f:\sp\public\sdk\inc\pshpack4.h -FILE 5113 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\ulldvrm.asm -FILE 5114 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 5115 F:\SP\vctools\crt_bld\SELF_X86\crt\src\mm.inc -FILE 5116 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\llmul.asm -FILE 5117 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 5118 F:\SP\vctools\crt_bld\SELF_X86\crt\src\mm.inc -FILE 5119 f:\sp\vctools\crt_bld\self_x86\crt\src\use_ansi.h -FILE 5120 f:\sp\vctools\crt_bld\self_x86\crt\src\new -FILE 5121 f:\sp\vctools\crt_bld\self_x86\crt\src\exception -FILE 5122 f:\sp\vctools\crt_bld\self_x86\crt\src\xstddef -FILE 5123 f:\sp\vctools\crt_bld\self_x86\crt\src\new.cpp -FILE 5124 f:\sp\vctools\crt_bld\self_x86\crt\src\cstddef -FILE 5125 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 5126 f:\sp\vctools\crt_bld\self_x86\crt\src\eh.h -FILE 5127 f:\sp\vctools\crt_bld\self_x86\crt\src\cstdlib -FILE 5128 f:\sp\vctools\crt_bld\self_x86\crt\src\yvals.h -FILE 5129 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 5130 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 5131 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 5132 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 5133 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 5134 f:\sp\public\sdk\inc\ddbanned.h -FILE 5135 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 5136 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 5137 f:\sp\public\sdk\inc\poppack.h -FILE 5138 f:\sp\public\sdk\inc\winnetwk.h -FILE 5139 f:\sp\public\sdk\inc\imm.h -FILE 5140 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 5141 f:\sp\public\sdk\inc\windef.h -FILE 5142 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 5143 f:\sp\public\sdk\inc\pshpack1.h -FILE 5144 f:\sp\public\sdk\inc\winver.h -FILE 5145 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 5146 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 5147 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 5148 f:\sp\public\sdk\inc\winnt.h -FILE 5149 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 5150 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 5151 f:\sp\public\sdk\inc\winreg.h -FILE 5152 f:\sp\vctools\crt_bld\self_x86\crt\src\_newmode.c -FILE 5153 f:\sp\public\sdk\inc\winbase.h -FILE 5154 f:\sp\public\sdk\inc\winerror.h -FILE 5155 f:\sp\public\sdk\inc\pshpack8.h -FILE 5156 f:\sp\public\sdk\inc\reason.h -FILE 5157 f:\sp\public\sdk\inc\wincon.h -FILE 5158 f:\sp\public\sdk\inc\ddbanned.h -FILE 5159 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 5160 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 5161 f:\sp\public\sdk\inc\pshpack2.h -FILE 5162 f:\sp\public\sdk\inc\mcx.h -FILE 5163 f:\sp\public\sdk\inc\winuser.h -FILE 5164 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 5165 f:\sp\public\sdk\inc\winnls.h -FILE 5166 f:\sp\public\sdk\inc\guiddef.h -FILE 5167 f:\sp\public\sdk\inc\windows.h -FILE 5168 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 5169 f:\sp\public\sdk\inc\specstrings.h -FILE 5170 f:\sp\public\sdk\inc\basetsd.h -FILE 5171 f:\sp\public\sdk\inc\stralign.h -FILE 5172 f:\sp\public\sdk\inc\tvout.h -FILE 5173 f:\sp\public\sdk\inc\winsvc.h -FILE 5174 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 5175 f:\sp\public\sdk\inc\wingdi.h -FILE 5176 f:\sp\public\sdk\inc\pshpack4.h -FILE 5177 f:\sp\vctools\crt_bld\self_x86\crt\src\new.h -FILE 5178 f:\sp\public\sdk\inc\winerror.h -FILE 5179 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcsup.h -FILE 5180 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcapi.h -FILE 5181 f:\sp\public\sdk\inc\winreg.h -FILE 5182 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 5183 f:\sp\public\sdk\inc\tvout.h -FILE 5184 f:\sp\vctools\crt_bld\self_x86\crt\src\delete.cpp -FILE 5185 f:\sp\public\sdk\inc\wincon.h -FILE 5186 f:\sp\public\sdk\inc\imm.h -FILE 5187 f:\sp\public\sdk\inc\winbase.h -FILE 5188 f:\sp\public\sdk\inc\wingdi.h -FILE 5189 f:\sp\public\sdk\inc\winver.h -FILE 5190 f:\sp\public\sdk\inc\windows.h -FILE 5191 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 5192 f:\sp\public\sdk\inc\pshpack2.h -FILE 5193 f:\sp\public\sdk\inc\reason.h -FILE 5194 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 5195 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 5196 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 5197 f:\sp\public\sdk\inc\specstrings.h -FILE 5198 f:\sp\public\sdk\inc\basetsd.h -FILE 5199 f:\sp\public\sdk\inc\pshpack4.h -FILE 5200 f:\sp\public\sdk\inc\winnetwk.h -FILE 5201 f:\sp\public\sdk\inc\stralign.h -FILE 5202 f:\sp\public\sdk\inc\poppack.h -FILE 5203 f:\sp\public\sdk\inc\winsvc.h -FILE 5204 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 5205 f:\sp\public\sdk\inc\windef.h -FILE 5206 f:\sp\public\sdk\inc\winuser.h -FILE 5207 f:\sp\public\sdk\inc\mcx.h -FILE 5208 f:\sp\public\sdk\inc\pshpack8.h -FILE 5209 f:\sp\public\sdk\inc\ddbanned.h -FILE 5210 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 5211 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 5212 f:\sp\public\sdk\inc\guiddef.h -FILE 5213 f:\sp\public\sdk\inc\winnt.h -FILE 5214 f:\sp\public\sdk\inc\winnls.h -FILE 5215 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 5216 f:\sp\public\sdk\inc\pshpack1.h -FILE 5217 f:\sp\public\sdk\inc\tvout.h -FILE 5218 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 5219 f:\sp\vctools\crt_bld\self_x86\crt\src\process.h -FILE 5220 f:\sp\public\sdk\inc\wincon.h -FILE 5221 f:\sp\public\sdk\inc\imm.h -FILE 5222 f:\sp\public\sdk\inc\winbase.h -FILE 5223 f:\sp\public\sdk\inc\wingdi.h -FILE 5224 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 5225 f:\sp\public\sdk\inc\winver.h -FILE 5226 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 5227 f:\sp\public\sdk\inc\windows.h -FILE 5228 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 5229 f:\sp\public\sdk\inc\pshpack2.h -FILE 5230 f:\sp\vctools\crt_bld\self_x86\crt\src\handler.cpp -FILE 5231 f:\sp\public\sdk\inc\reason.h -FILE 5232 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 5233 f:\sp\public\sdk\inc\specstrings.h -FILE 5234 f:\sp\public\sdk\inc\basetsd.h -FILE 5235 f:\sp\public\sdk\inc\pshpack4.h -FILE 5236 f:\sp\public\sdk\inc\winnetwk.h -FILE 5237 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 5238 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 5239 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 5240 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 5241 f:\sp\public\sdk\inc\stralign.h -FILE 5242 f:\sp\public\sdk\inc\poppack.h -FILE 5243 f:\sp\public\sdk\inc\winsvc.h -FILE 5244 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 5245 f:\sp\public\sdk\inc\windef.h -FILE 5246 f:\sp\public\sdk\inc\winuser.h -FILE 5247 f:\sp\public\sdk\inc\mcx.h -FILE 5248 f:\sp\public\sdk\inc\pshpack8.h -FILE 5249 f:\sp\public\sdk\inc\guiddef.h -FILE 5250 f:\sp\public\sdk\inc\winnt.h -FILE 5251 f:\sp\public\sdk\inc\winnls.h -FILE 5252 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 5253 f:\sp\public\sdk\inc\pshpack1.h -FILE 5254 f:\sp\public\sdk\inc\winerror.h -FILE 5255 f:\sp\public\sdk\inc\ddbanned.h -FILE 5256 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 5257 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 5258 f:\sp\public\sdk\inc\winreg.h -FILE 5259 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 5260 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 5261 f:\sp\vctools\crt_bld\self_x86\crt\src\new.h -FILE 5262 f:\sp\public\sdk\inc\winsvc.h -FILE 5263 f:\sp\public\sdk\inc\wingdi.h -FILE 5264 f:\sp\public\sdk\inc\pshpack4.h -FILE 5265 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 5266 f:\sp\public\sdk\inc\poppack.h -FILE 5267 f:\sp\public\sdk\inc\winnt.h -FILE 5268 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 5269 f:\sp\public\sdk\inc\winnetwk.h -FILE 5270 f:\sp\public\sdk\inc\imm.h -FILE 5271 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 5272 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 5273 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 5274 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 5275 f:\sp\public\sdk\inc\pshpack1.h -FILE 5276 f:\sp\public\sdk\inc\winver.h -FILE 5277 f:\sp\public\sdk\inc\guiddef.h -FILE 5278 f:\sp\public\sdk\inc\specstrings.h -FILE 5279 f:\sp\public\sdk\inc\basetsd.h -FILE 5280 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h -FILE 5281 f:\sp\vctools\crt_bld\self_x86\crt\src\sbheap.c -FILE 5282 f:\sp\public\sdk\inc\windows.h -FILE 5283 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 5284 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 5285 f:\sp\public\sdk\inc\winreg.h -FILE 5286 f:\sp\public\sdk\inc\winbase.h -FILE 5287 f:\sp\public\sdk\inc\winerror.h -FILE 5288 f:\sp\public\sdk\inc\pshpack8.h -FILE 5289 f:\sp\public\sdk\inc\ddbanned.h -FILE 5290 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 5291 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 5292 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 5293 f:\sp\public\sdk\inc\reason.h -FILE 5294 f:\sp\public\sdk\inc\wincon.h -FILE 5295 f:\sp\public\sdk\inc\pshpack2.h -FILE 5296 f:\sp\public\sdk\inc\mcx.h -FILE 5297 f:\sp\public\sdk\inc\winuser.h -FILE 5298 f:\sp\public\sdk\inc\winnls.h -FILE 5299 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 5300 f:\sp\public\sdk\inc\windef.h -FILE 5301 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 5302 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 5303 f:\sp\public\sdk\inc\stralign.h -FILE 5304 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 5305 f:\sp\public\sdk\inc\tvout.h -FILE 5306 f:\sp\public\sdk\inc\winver.h -FILE 5307 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcsup.h -FILE 5308 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcapi.h -FILE 5309 f:\sp\public\sdk\inc\guiddef.h -FILE 5310 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 5311 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 5312 f:\sp\public\sdk\inc\specstrings.h -FILE 5313 f:\sp\public\sdk\inc\basetsd.h -FILE 5314 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h -FILE 5315 f:\sp\public\sdk\inc\windows.h -FILE 5316 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 5317 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 5318 f:\sp\public\sdk\inc\winreg.h -FILE 5319 f:\sp\public\sdk\inc\winbase.h -FILE 5320 f:\sp\public\sdk\inc\winerror.h -FILE 5321 f:\sp\public\sdk\inc\pshpack8.h -FILE 5322 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 5323 f:\sp\public\sdk\inc\reason.h -FILE 5324 f:\sp\public\sdk\inc\wincon.h -FILE 5325 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 5326 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 5327 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 5328 f:\sp\public\sdk\inc\pshpack2.h -FILE 5329 f:\sp\public\sdk\inc\mcx.h -FILE 5330 f:\sp\public\sdk\inc\winuser.h -FILE 5331 f:\sp\public\sdk\inc\winnls.h -FILE 5332 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 5333 f:\sp\public\sdk\inc\windef.h -FILE 5334 f:\sp\public\sdk\inc\stralign.h -FILE 5335 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 5336 f:\sp\public\sdk\inc\tvout.h -FILE 5337 f:\sp\public\sdk\inc\winsvc.h -FILE 5338 f:\sp\vctools\crt_bld\self_x86\crt\src\realloc.c -FILE 5339 f:\sp\public\sdk\inc\wingdi.h -FILE 5340 f:\sp\public\sdk\inc\pshpack4.h -FILE 5341 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 5342 f:\sp\public\sdk\inc\poppack.h -FILE 5343 f:\sp\public\sdk\inc\winnt.h -FILE 5344 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 5345 f:\sp\public\sdk\inc\winnetwk.h -FILE 5346 f:\sp\public\sdk\inc\ddbanned.h -FILE 5347 f:\sp\public\sdk\inc\imm.h -FILE 5348 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 5349 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 5350 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 5351 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 5352 f:\sp\public\sdk\inc\pshpack1.h -FILE 5353 f:\sp\public\sdk\inc\pshpack2.h -FILE 5354 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h -FILE 5355 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 5356 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 5357 f:\sp\public\sdk\inc\mcx.h -FILE 5358 f:\sp\public\sdk\inc\winuser.h -FILE 5359 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 5360 f:\sp\public\sdk\inc\winnls.h -FILE 5361 f:\sp\public\sdk\inc\guiddef.h -FILE 5362 f:\sp\public\sdk\inc\windows.h -FILE 5363 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 5364 f:\sp\public\sdk\inc\specstrings.h -FILE 5365 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 5366 f:\sp\public\sdk\inc\basetsd.h -FILE 5367 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 5368 f:\sp\public\sdk\inc\stralign.h -FILE 5369 f:\sp\public\sdk\inc\tvout.h -FILE 5370 f:\sp\public\sdk\inc\winsvc.h -FILE 5371 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 5372 f:\sp\public\sdk\inc\wingdi.h -FILE 5373 f:\sp\public\sdk\inc\pshpack4.h -FILE 5374 f:\sp\public\sdk\inc\poppack.h -FILE 5375 f:\sp\public\sdk\inc\winnetwk.h -FILE 5376 f:\sp\public\sdk\inc\imm.h -FILE 5377 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 5378 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 5379 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 5380 f:\sp\public\sdk\inc\windef.h -FILE 5381 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 5382 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 5383 f:\sp\vctools\crt_bld\self_x86\crt\src\msize.c -FILE 5384 f:\sp\public\sdk\inc\pshpack1.h -FILE 5385 f:\sp\public\sdk\inc\winver.h -FILE 5386 f:\sp\public\sdk\inc\winnt.h -FILE 5387 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 5388 f:\sp\public\sdk\inc\winreg.h -FILE 5389 f:\sp\public\sdk\inc\ddbanned.h -FILE 5390 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 5391 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 5392 f:\sp\public\sdk\inc\winbase.h -FILE 5393 f:\sp\public\sdk\inc\winerror.h -FILE 5394 f:\sp\public\sdk\inc\pshpack8.h -FILE 5395 f:\sp\public\sdk\inc\reason.h -FILE 5396 f:\sp\public\sdk\inc\wincon.h -FILE 5397 f:\sp\public\sdk\inc\pshpack2.h -FILE 5398 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 5399 f:\sp\public\sdk\inc\mcx.h -FILE 5400 f:\sp\public\sdk\inc\winuser.h -FILE 5401 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 5402 f:\sp\public\sdk\inc\winnls.h -FILE 5403 f:\sp\public\sdk\inc\guiddef.h -FILE 5404 f:\sp\public\sdk\inc\windows.h -FILE 5405 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 5406 f:\sp\public\sdk\inc\specstrings.h -FILE 5407 f:\sp\public\sdk\inc\basetsd.h -FILE 5408 f:\sp\public\sdk\inc\stralign.h -FILE 5409 f:\sp\public\sdk\inc\tvout.h -FILE 5410 f:\sp\public\sdk\inc\winsvc.h -FILE 5411 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 5412 f:\sp\public\sdk\inc\wingdi.h -FILE 5413 f:\sp\public\sdk\inc\pshpack4.h -FILE 5414 f:\sp\public\sdk\inc\poppack.h -FILE 5415 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 5416 f:\sp\public\sdk\inc\winnetwk.h -FILE 5417 f:\sp\public\sdk\inc\imm.h -FILE 5418 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 5419 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 5420 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 5421 f:\sp\public\sdk\inc\windef.h -FILE 5422 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 5423 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 5424 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 5425 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.c -FILE 5426 f:\sp\public\sdk\inc\pshpack1.h -FILE 5427 f:\sp\public\sdk\inc\winver.h -FILE 5428 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcsup.h -FILE 5429 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcapi.h -FILE 5430 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 5431 f:\sp\public\sdk\inc\winnt.h -FILE 5432 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h -FILE 5433 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 5434 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 5435 f:\sp\public\sdk\inc\winreg.h -FILE 5436 f:\sp\public\sdk\inc\ddbanned.h -FILE 5437 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 5438 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 5439 f:\sp\public\sdk\inc\winbase.h -FILE 5440 f:\sp\public\sdk\inc\winerror.h -FILE 5441 f:\sp\public\sdk\inc\pshpack8.h -FILE 5442 f:\sp\public\sdk\inc\reason.h -FILE 5443 f:\sp\public\sdk\inc\wincon.h -FILE 5444 f:\sp\public\sdk\inc\winver.h -FILE 5445 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 5446 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 5447 f:\sp\public\sdk\inc\winnt.h -FILE 5448 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 5449 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 5450 f:\sp\public\sdk\inc\winreg.h -FILE 5451 f:\sp\public\sdk\inc\winbase.h -FILE 5452 f:\sp\public\sdk\inc\winerror.h -FILE 5453 f:\sp\public\sdk\inc\pshpack8.h -FILE 5454 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 5455 f:\sp\public\sdk\inc\reason.h -FILE 5456 f:\sp\public\sdk\inc\wincon.h -FILE 5457 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 5458 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 5459 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 5460 f:\sp\public\sdk\inc\pshpack2.h -FILE 5461 f:\sp\public\sdk\inc\mcx.h -FILE 5462 f:\sp\public\sdk\inc\winuser.h -FILE 5463 f:\sp\public\sdk\inc\winnls.h -FILE 5464 f:\sp\public\sdk\inc\guiddef.h -FILE 5465 f:\sp\public\sdk\inc\stralign.h -FILE 5466 f:\sp\public\sdk\inc\specstrings.h -FILE 5467 f:\sp\public\sdk\inc\basetsd.h -FILE 5468 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h -FILE 5469 f:\sp\public\sdk\inc\windows.h -FILE 5470 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 5471 f:\sp\public\sdk\inc\tvout.h -FILE 5472 f:\sp\public\sdk\inc\winsvc.h -FILE 5473 f:\sp\vctools\crt_bld\self_x86\crt\src\heapinit.c -FILE 5474 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 5475 f:\sp\public\sdk\inc\wingdi.h -FILE 5476 f:\sp\public\sdk\inc\pshpack4.h -FILE 5477 f:\sp\public\sdk\inc\poppack.h -FILE 5478 f:\sp\public\sdk\inc\winnetwk.h -FILE 5479 f:\sp\public\sdk\inc\ddbanned.h -FILE 5480 f:\sp\public\sdk\inc\imm.h -FILE 5481 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 5482 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 5483 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 5484 f:\sp\public\sdk\inc\windef.h -FILE 5485 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 5486 f:\sp\public\sdk\inc\pshpack1.h -FILE 5487 f:\sp\public\sdk\inc\pshpack2.h -FILE 5488 f:\sp\public\sdk\inc\mcx.h -FILE 5489 f:\sp\public\sdk\inc\winuser.h -FILE 5490 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h -FILE 5491 f:\sp\public\sdk\inc\winnls.h -FILE 5492 f:\sp\public\sdk\inc\guiddef.h -FILE 5493 f:\sp\public\sdk\inc\windows.h -FILE 5494 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 5495 f:\sp\public\sdk\inc\specstrings.h -FILE 5496 f:\sp\public\sdk\inc\basetsd.h -FILE 5497 f:\sp\public\sdk\inc\stralign.h -FILE 5498 f:\sp\public\sdk\inc\tvout.h -FILE 5499 f:\sp\public\sdk\inc\winsvc.h -FILE 5500 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 5501 f:\sp\public\sdk\inc\wingdi.h -FILE 5502 f:\sp\public\sdk\inc\pshpack4.h -FILE 5503 f:\sp\public\sdk\inc\poppack.h -FILE 5504 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 5505 f:\sp\public\sdk\inc\winnetwk.h -FILE 5506 f:\sp\public\sdk\inc\imm.h -FILE 5507 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 5508 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 5509 f:\sp\public\sdk\inc\windef.h -FILE 5510 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 5511 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 5512 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 5513 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 5514 f:\sp\public\sdk\inc\pshpack1.h -FILE 5515 f:\sp\vctools\crt_bld\self_x86\crt\src\free.c -FILE 5516 f:\sp\public\sdk\inc\winver.h -FILE 5517 f:\sp\public\sdk\inc\winnt.h -FILE 5518 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 5519 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcsup.h -FILE 5520 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcapi.h -FILE 5521 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 5522 f:\sp\public\sdk\inc\winreg.h -FILE 5523 f:\sp\public\sdk\inc\ddbanned.h -FILE 5524 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 5525 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 5526 f:\sp\public\sdk\inc\winbase.h -FILE 5527 f:\sp\public\sdk\inc\winerror.h -FILE 5528 f:\sp\public\sdk\inc\pshpack8.h -FILE 5529 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 5530 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 5531 f:\sp\public\sdk\inc\reason.h -FILE 5532 f:\sp\public\sdk\inc\wincon.h -FILE 5533 f:\sp\public\sdk\inc\pshpack2.h -FILE 5534 f:\sp\public\sdk\inc\mcx.h -FILE 5535 f:\sp\public\sdk\inc\winuser.h -FILE 5536 f:\sp\public\sdk\inc\winnls.h -FILE 5537 f:\sp\public\sdk\inc\guiddef.h -FILE 5538 f:\sp\public\sdk\inc\windows.h -FILE 5539 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 5540 f:\sp\public\sdk\inc\specstrings.h -FILE 5541 f:\sp\public\sdk\inc\basetsd.h -FILE 5542 f:\sp\public\sdk\inc\stralign.h -FILE 5543 f:\sp\public\sdk\inc\tvout.h -FILE 5544 f:\sp\public\sdk\inc\winsvc.h -FILE 5545 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 5546 f:\sp\public\sdk\inc\wingdi.h -FILE 5547 f:\sp\public\sdk\inc\pshpack4.h -FILE 5548 f:\sp\public\sdk\inc\poppack.h -FILE 5549 f:\sp\public\sdk\inc\winnetwk.h -FILE 5550 f:\sp\public\sdk\inc\imm.h -FILE 5551 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 5552 f:\sp\public\sdk\inc\windef.h -FILE 5553 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 5554 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 5555 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 5556 f:\sp\public\sdk\inc\pshpack1.h -FILE 5557 f:\sp\vctools\crt_bld\self_x86\crt\src\crtheap.c -FILE 5558 f:\sp\public\sdk\inc\winver.h -FILE 5559 f:\sp\public\sdk\inc\winnt.h -FILE 5560 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 5561 f:\sp\public\sdk\inc\winreg.h -FILE 5562 f:\sp\public\sdk\inc\ddbanned.h -FILE 5563 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 5564 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 5565 f:\sp\public\sdk\inc\winbase.h -FILE 5566 f:\sp\public\sdk\inc\winerror.h -FILE 5567 f:\sp\public\sdk\inc\pshpack8.h -FILE 5568 f:\sp\public\sdk\inc\reason.h -FILE 5569 f:\sp\public\sdk\inc\wincon.h -FILE 5570 f:\sp\public\sdk\inc\pshpack2.h -FILE 5571 f:\sp\public\sdk\inc\mcx.h -FILE 5572 f:\sp\public\sdk\inc\winuser.h -FILE 5573 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 5574 f:\sp\public\sdk\inc\winnls.h -FILE 5575 f:\sp\public\sdk\inc\stralign.h -FILE 5576 f:\sp\public\sdk\inc\tvout.h -FILE 5577 f:\sp\public\sdk\inc\winsvc.h -FILE 5578 f:\sp\public\sdk\inc\wingdi.h -FILE 5579 f:\sp\public\sdk\inc\winnt.h -FILE 5580 f:\sp\public\sdk\inc\pshpack4.h -FILE 5581 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 5582 f:\sp\public\sdk\inc\poppack.h -FILE 5583 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 5584 f:\sp\public\sdk\inc\winnetwk.h -FILE 5585 f:\sp\public\sdk\inc\imm.h -FILE 5586 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 5587 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 5588 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 5589 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 5590 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 5591 f:\sp\public\sdk\inc\pshpack1.h -FILE 5592 f:\sp\vctools\crt_bld\self_x86\crt\src\calloc.c -FILE 5593 f:\sp\public\sdk\inc\winver.h -FILE 5594 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h -FILE 5595 f:\sp\public\sdk\inc\guiddef.h -FILE 5596 f:\sp\public\sdk\inc\windows.h -FILE 5597 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 5598 f:\sp\public\sdk\inc\specstrings.h -FILE 5599 f:\sp\public\sdk\inc\basetsd.h -FILE 5600 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcsup.h -FILE 5601 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcapi.h -FILE 5602 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 5603 f:\sp\public\sdk\inc\winreg.h -FILE 5604 f:\sp\public\sdk\inc\ddbanned.h -FILE 5605 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 5606 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 5607 f:\sp\public\sdk\inc\winbase.h -FILE 5608 f:\sp\public\sdk\inc\winerror.h -FILE 5609 f:\sp\public\sdk\inc\pshpack8.h -FILE 5610 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 5611 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 5612 f:\sp\public\sdk\inc\reason.h -FILE 5613 f:\sp\public\sdk\inc\wincon.h -FILE 5614 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 5615 f:\sp\public\sdk\inc\windef.h -FILE 5616 f:\sp\public\sdk\inc\wincon.h -FILE 5617 f:\sp\public\sdk\inc\imm.h -FILE 5618 f:\sp\public\sdk\inc\winbase.h -FILE 5619 f:\sp\public\sdk\inc\wingdi.h -FILE 5620 f:\sp\public\sdk\inc\winver.h -FILE 5621 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehhooks.h -FILE 5622 f:\sp\public\sdk\inc\pshpack2.h -FILE 5623 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\internal.h -FILE 5624 f:\sp\public\sdk\inc\reason.h -FILE 5625 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehassert.h -FILE 5626 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\setjmp.h -FILE 5627 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\i386\trnsctrl.cpp -FILE 5628 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\process.h -FILE 5629 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h -FILE 5630 f:\sp\public\sdk\inc\specstrings.h -FILE 5631 f:\sp\public\sdk\inc\basetsd.h -FILE 5632 f:\sp\public\sdk\inc\pshpack4.h -FILE 5633 f:\sp\public\sdk\inc\winnetwk.h -FILE 5634 f:\sp\public\sdk\inc\stralign.h -FILE 5635 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\trnsctrl.h -FILE 5636 f:\sp\public\sdk\inc\poppack.h -FILE 5637 f:\sp\public\sdk\inc\winsvc.h -FILE 5638 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 5639 f:\sp\public\sdk\inc\windef.h -FILE 5640 f:\sp\public\sdk\inc\winuser.h -FILE 5641 f:\sp\public\sdk\inc\windows.h -FILE 5642 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 5643 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 5644 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 5645 f:\sp\public\sdk\inc\mcx.h -FILE 5646 f:\sp\public\sdk\inc\pshpack8.h -FILE 5647 f:\sp\public\sdk\inc\guiddef.h -FILE 5648 f:\sp\public\sdk\inc\winnt.h -FILE 5649 f:\sp\public\sdk\inc\winnls.h -FILE 5650 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 5651 f:\sp\public\sdk\inc\pshpack1.h -FILE 5652 f:\sp\public\sdk\inc\winerror.h -FILE 5653 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\mtdll.h -FILE 5654 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 5655 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\errno.h -FILE 5656 f:\sp\public\sdk\inc\winreg.h -FILE 5657 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 5658 f:\sp\public\sdk\inc\ddbanned.h -FILE 5659 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 5660 f:\sp\public\sdk\inc\tvout.h -FILE 5661 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 5662 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\eh.h -FILE 5663 f:\sp\vctools\langapi\include\ehdata.h -FILE 5664 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stddef.h -FILE 5665 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\eh\i386\lowhelpr.asm -FILE 5666 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\h\cruntime.inc -FILE 5667 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\h\exsup.inc -FILE 5668 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\process.h -FILE 5669 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 5670 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 5671 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\i386\ehprolg3.c -FILE 5672 f:\sp\public\sdk\inc\ddbanned.h -FILE 5673 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 5674 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 5675 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehassert.h -FILE 5676 f:\sp\public\sdk\inc\wincon.h -FILE 5677 f:\sp\public\sdk\inc\imm.h -FILE 5678 f:\sp\public\sdk\inc\winbase.h -FILE 5679 f:\sp\public\sdk\inc\wingdi.h -FILE 5680 f:\sp\public\sdk\inc\winver.h -FILE 5681 f:\sp\public\sdk\inc\pshpack2.h -FILE 5682 f:\sp\public\sdk\inc\reason.h -FILE 5683 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\validate.cpp -FILE 5684 f:\sp\public\sdk\inc\specstrings.h -FILE 5685 f:\sp\public\sdk\inc\basetsd.h -FILE 5686 f:\sp\public\sdk\inc\pshpack4.h -FILE 5687 f:\sp\public\sdk\inc\winnetwk.h -FILE 5688 f:\sp\public\sdk\inc\stralign.h -FILE 5689 f:\sp\public\sdk\inc\poppack.h -FILE 5690 f:\sp\public\sdk\inc\winsvc.h -FILE 5691 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 5692 f:\sp\public\sdk\inc\windef.h -FILE 5693 f:\sp\public\sdk\inc\winuser.h -FILE 5694 f:\sp\public\sdk\inc\windows.h -FILE 5695 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 5696 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 5697 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 5698 f:\sp\public\sdk\inc\mcx.h -FILE 5699 f:\sp\public\sdk\inc\pshpack8.h -FILE 5700 f:\sp\public\sdk\inc\guiddef.h -FILE 5701 f:\sp\public\sdk\inc\winnt.h -FILE 5702 f:\sp\public\sdk\inc\winnls.h -FILE 5703 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 5704 f:\sp\public\sdk\inc\pshpack1.h -FILE 5705 f:\sp\public\sdk\inc\winerror.h -FILE 5706 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\eh.h -FILE 5707 f:\sp\public\sdk\inc\winreg.h -FILE 5708 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 5709 f:\sp\public\sdk\inc\ddbanned.h -FILE 5710 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 5711 f:\sp\public\sdk\inc\tvout.h -FILE 5712 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 5713 f:\sp\public\sdk\inc\wincon.h -FILE 5714 f:\sp\public\sdk\inc\imm.h -FILE 5715 f:\sp\public\sdk\inc\winbase.h -FILE 5716 f:\sp\public\sdk\inc\wingdi.h -FILE 5717 f:\sp\public\sdk\inc\winver.h -FILE 5718 f:\sp\public\sdk\inc\pshpack2.h -FILE 5719 f:\sp\public\sdk\inc\reason.h -FILE 5720 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sect_attribs.h -FILE 5721 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\unhandld.cpp -FILE 5722 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\eh.h -FILE 5723 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\errno.h -FILE 5724 f:\sp\public\sdk\inc\specstrings.h -FILE 5725 f:\sp\public\sdk\inc\basetsd.h -FILE 5726 f:\sp\public\sdk\inc\pshpack4.h -FILE 5727 f:\sp\public\sdk\inc\winnetwk.h -FILE 5728 f:\sp\public\sdk\inc\stralign.h -FILE 5729 f:\sp\public\sdk\inc\poppack.h -FILE 5730 f:\sp\public\sdk\inc\winsvc.h -FILE 5731 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 5732 f:\sp\public\sdk\inc\windef.h -FILE 5733 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehhooks.h -FILE 5734 f:\sp\public\sdk\inc\winuser.h -FILE 5735 f:\sp\public\sdk\inc\windows.h -FILE 5736 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 5737 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 5738 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 5739 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehassert.h -FILE 5740 f:\sp\public\sdk\inc\mcx.h -FILE 5741 f:\sp\public\sdk\inc\pshpack8.h -FILE 5742 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\internal.h -FILE 5743 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 5744 f:\sp\public\sdk\inc\guiddef.h -FILE 5745 f:\sp\public\sdk\inc\winnt.h -FILE 5746 f:\sp\public\sdk\inc\winnls.h -FILE 5747 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 5748 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdlib.h -FILE 5749 f:\sp\public\sdk\inc\pshpack1.h -FILE 5750 f:\sp\public\sdk\inc\winerror.h -FILE 5751 f:\sp\vctools\langapi\include\ehdata.h -FILE 5752 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stddef.h -FILE 5753 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h -FILE 5754 f:\sp\public\sdk\inc\winreg.h -FILE 5755 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 5756 f:\sp\public\sdk\inc\ddbanned.h -FILE 5757 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 5758 f:\sp\public\sdk\inc\tvout.h -FILE 5759 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 5760 f:\sp\public\sdk\inc\specstrings.h -FILE 5761 f:\sp\public\sdk\inc\basetsd.h -FILE 5762 f:\sp\public\sdk\inc\pshpack4.h -FILE 5763 f:\sp\public\sdk\inc\winnetwk.h -FILE 5764 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 5765 f:\sp\public\sdk\inc\stralign.h -FILE 5766 f:\sp\public\sdk\inc\poppack.h -FILE 5767 f:\sp\public\sdk\inc\winsvc.h -FILE 5768 f:\sp\public\sdk\inc\winuser.h -FILE 5769 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 5770 f:\sp\public\sdk\inc\windef.h -FILE 5771 f:\sp\vctools\langapi\undname\undname.cxx -FILE 5772 f:\sp\public\sdk\inc\mcx.h -FILE 5773 f:\sp\public\sdk\inc\pshpack8.h -FILE 5774 f:\sp\public\sdk\inc\guiddef.h -FILE 5775 f:\sp\vctools\langapi\undname\utf8.h -FILE 5776 f:\sp\public\sdk\inc\winnls.h -FILE 5777 f:\sp\public\sdk\inc\pshpack1.h -FILE 5778 f:\sp\public\sdk\inc\winnt.h -FILE 5779 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 5780 f:\sp\public\sdk\inc\winerror.h -FILE 5781 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\swprintf.inl -FILE 5782 f:\sp\vctools\langapi\undname\undname.hxx -FILE 5783 f:\sp\vctools\langapi\undname\undname.h -FILE 5784 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdlib.h -FILE 5785 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 5786 f:\sp\public\sdk\inc\winreg.h -FILE 5787 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 5788 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 5789 f:\sp\public\sdk\inc\tvout.h -FILE 5790 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdio.h -FILE 5791 f:\sp\public\sdk\inc\wincon.h -FILE 5792 f:\sp\public\sdk\inc\imm.h -FILE 5793 f:\sp\public\sdk\inc\winbase.h -FILE 5794 f:\sp\public\sdk\inc\wingdi.h -FILE 5795 f:\sp\public\sdk\inc\winver.h -FILE 5796 f:\sp\public\sdk\inc\pshpack2.h -FILE 5797 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\mtdll.h -FILE 5798 f:\sp\public\sdk\inc\windows.h -FILE 5799 f:\sp\public\sdk\inc\reason.h -FILE 5800 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 5801 f:\sp\public\sdk\inc\ddbanned.h -FILE 5802 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 5803 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 5804 f:\sp\vctools\langapi\undname\undname.inl -FILE 5805 f:\sp\public\sdk\inc\guiddef.h -FILE 5806 f:\sp\public\sdk\inc\winnt.h -FILE 5807 f:\sp\public\sdk\inc\winnls.h -FILE 5808 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 5809 f:\sp\public\sdk\inc\pshpack1.h -FILE 5810 f:\sp\public\sdk\inc\winerror.h -FILE 5811 f:\sp\public\sdk\inc\winreg.h -FILE 5812 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 5813 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdlib.h -FILE 5814 f:\sp\public\sdk\inc\tvout.h -FILE 5815 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\typname.cpp -FILE 5816 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h -FILE 5817 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\cstddef -FILE 5818 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stddef.h -FILE 5819 f:\sp\public\sdk\inc\wincon.h -FILE 5820 f:\sp\public\sdk\inc\imm.h -FILE 5821 f:\sp\public\sdk\inc\winbase.h -FILE 5822 f:\sp\public\sdk\inc\wingdi.h -FILE 5823 f:\sp\public\sdk\inc\winver.h -FILE 5824 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 5825 f:\sp\public\sdk\inc\windows.h -FILE 5826 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 5827 f:\sp\public\sdk\inc\pshpack2.h -FILE 5828 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\mtdll.h -FILE 5829 f:\sp\public\sdk\inc\reason.h -FILE 5830 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sect_attribs.h -FILE 5831 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\dbgint.h -FILE 5832 f:\sp\public\sdk\inc\specstrings.h -FILE 5833 f:\sp\public\sdk\inc\basetsd.h -FILE 5834 f:\sp\public\sdk\inc\pshpack4.h -FILE 5835 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\typeinfo.h -FILE 5836 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\typeinfo -FILE 5837 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\exception -FILE 5838 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\xstddef -FILE 5839 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\eh.h -FILE 5840 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\yvals.h -FILE 5841 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\use_ansi.h -FILE 5842 f:\sp\public\sdk\inc\winnetwk.h -FILE 5843 f:\sp\vctools\langapi\undname\undname.h -FILE 5844 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\errno.h -FILE 5845 f:\sp\public\sdk\inc\stralign.h -FILE 5846 f:\sp\public\sdk\inc\poppack.h -FILE 5847 f:\sp\public\sdk\inc\winsvc.h -FILE 5848 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 5849 f:\sp\public\sdk\inc\windef.h -FILE 5850 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\internal.h -FILE 5851 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 5852 f:\sp\public\sdk\inc\winuser.h -FILE 5853 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 5854 f:\sp\public\sdk\inc\ddbanned.h -FILE 5855 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 5856 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 5857 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\malloc.h -FILE 5858 f:\sp\public\sdk\inc\mcx.h -FILE 5859 f:\sp\public\sdk\inc\pshpack8.h -FILE 5860 f:\sp\public\sdk\inc\winnls.h -FILE 5861 f:\sp\public\sdk\inc\pshpack1.h -FILE 5862 f:\sp\public\sdk\inc\winnt.h -FILE 5863 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 5864 f:\sp\public\sdk\inc\winerror.h -FILE 5865 f:\sp\public\sdk\inc\winreg.h -FILE 5866 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 5867 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 5868 f:\sp\public\sdk\inc\tvout.h -FILE 5869 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\dbgint.h -FILE 5870 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h -FILE 5871 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\cstddef -FILE 5872 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stddef.h -FILE 5873 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\typinfo.cpp -FILE 5874 f:\sp\public\sdk\inc\wincon.h -FILE 5875 f:\sp\public\sdk\inc\imm.h -FILE 5876 f:\sp\public\sdk\inc\winbase.h -FILE 5877 f:\sp\public\sdk\inc\wingdi.h -FILE 5878 f:\sp\public\sdk\inc\winver.h -FILE 5879 f:\sp\public\sdk\inc\pshpack2.h -FILE 5880 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\mtdll.h -FILE 5881 f:\sp\public\sdk\inc\reason.h -FILE 5882 f:\sp\public\sdk\inc\windows.h -FILE 5883 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 5884 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdlib.h -FILE 5885 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 5886 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 5887 f:\sp\public\sdk\inc\specstrings.h -FILE 5888 f:\sp\public\sdk\inc\basetsd.h -FILE 5889 f:\sp\public\sdk\inc\pshpack4.h -FILE 5890 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\typeinfo -FILE 5891 f:\sp\public\sdk\inc\winnetwk.h -FILE 5892 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\exception -FILE 5893 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\xstddef -FILE 5894 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\eh.h -FILE 5895 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\yvals.h -FILE 5896 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\use_ansi.h -FILE 5897 f:\sp\public\sdk\inc\stralign.h -FILE 5898 f:\sp\public\sdk\inc\poppack.h -FILE 5899 f:\sp\public\sdk\inc\winsvc.h -FILE 5900 f:\sp\public\sdk\inc\winuser.h -FILE 5901 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 5902 f:\sp\public\sdk\inc\windef.h -FILE 5903 f:\sp\vctools\langapi\undname\undname.h -FILE 5904 f:\sp\public\sdk\inc\ddbanned.h -FILE 5905 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\malloc.h -FILE 5906 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 5907 f:\sp\public\sdk\inc\mcx.h -FILE 5908 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 5909 f:\sp\public\sdk\inc\pshpack8.h -FILE 5910 f:\sp\public\sdk\inc\guiddef.h -FILE 5911 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\eh.h -FILE 5912 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\typeinfo -FILE 5913 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 5914 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\exception -FILE 5915 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\xstddef -FILE 5916 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\stdexcpt.cpp -FILE 5917 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\yvals.h -FILE 5918 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\use_ansi.h -FILE 5919 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdlib.h -FILE 5920 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 5921 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 5922 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 5923 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\cstddef -FILE 5924 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stddef.h -FILE 5925 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\malloc.h -FILE 5926 f:\sp\public\sdk\inc\ddbanned.h -FILE 5927 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 5928 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 5929 f:\sp\vctools\langapi\include\ehdata.h -FILE 5930 f:\sp\public\sdk\inc\wincon.h -FILE 5931 f:\sp\public\sdk\inc\imm.h -FILE 5932 f:\sp\public\sdk\inc\winbase.h -FILE 5933 f:\sp\public\sdk\inc\wingdi.h -FILE 5934 f:\sp\public\sdk\inc\winver.h -FILE 5935 f:\sp\public\sdk\inc\windows.h -FILE 5936 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 5937 f:\sp\public\sdk\inc\pshpack2.h -FILE 5938 f:\sp\public\sdk\inc\reason.h -FILE 5939 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\throw.cpp -FILE 5940 f:\sp\public\sdk\inc\specstrings.h -FILE 5941 f:\sp\public\sdk\inc\basetsd.h -FILE 5942 f:\sp\public\sdk\inc\pshpack4.h -FILE 5943 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\eh.h -FILE 5944 f:\sp\public\sdk\inc\winnetwk.h -FILE 5945 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stddef.h -FILE 5946 f:\sp\public\sdk\inc\stralign.h -FILE 5947 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 5948 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 5949 f:\sp\public\sdk\inc\poppack.h -FILE 5950 f:\sp\public\sdk\inc\winsvc.h -FILE 5951 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 5952 f:\sp\public\sdk\inc\windef.h -FILE 5953 f:\sp\public\sdk\inc\winuser.h -FILE 5954 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehhooks.h -FILE 5955 f:\sp\public\sdk\inc\mcx.h -FILE 5956 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehassert.h -FILE 5957 f:\sp\public\sdk\inc\pshpack8.h -FILE 5958 f:\sp\public\sdk\inc\guiddef.h -FILE 5959 f:\sp\public\sdk\inc\winnt.h -FILE 5960 f:\sp\public\sdk\inc\winnls.h -FILE 5961 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 5962 f:\sp\public\sdk\inc\pshpack1.h -FILE 5963 f:\sp\public\sdk\inc\winerror.h -FILE 5964 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\mtdll.h -FILE 5965 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 5966 f:\sp\public\sdk\inc\ddbanned.h -FILE 5967 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 5968 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 5969 f:\sp\public\sdk\inc\winreg.h -FILE 5970 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 5971 f:\sp\public\sdk\inc\tvout.h -FILE 5972 f:\sp\public\sdk\inc\poppack.h -FILE 5973 f:\sp\public\sdk\inc\winsvc.h -FILE 5974 f:\sp\public\sdk\inc\windows.h -FILE 5975 f:\sp\public\sdk\inc\winuser.h -FILE 5976 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 5977 f:\sp\public\sdk\inc\windef.h -FILE 5978 f:\sp\public\sdk\inc\mcx.h -FILE 5979 f:\sp\public\sdk\inc\pshpack8.h -FILE 5980 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdlib.h -FILE 5981 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 5982 f:\sp\public\sdk\inc\guiddef.h -FILE 5983 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\hooks.cpp -FILE 5984 f:\sp\public\sdk\inc\winnls.h -FILE 5985 f:\sp\public\sdk\inc\pshpack1.h -FILE 5986 f:\sp\public\sdk\inc\winnt.h -FILE 5987 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 5988 f:\sp\public\sdk\inc\winerror.h -FILE 5989 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\mtdll.h -FILE 5990 f:\sp\public\sdk\inc\winreg.h -FILE 5991 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 5992 f:\sp\public\sdk\inc\tvout.h -FILE 5993 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\eh.h -FILE 5994 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\errno.h -FILE 5995 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stddef.h -FILE 5996 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 5997 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 5998 f:\sp\public\sdk\inc\wincon.h -FILE 5999 f:\sp\public\sdk\inc\imm.h -FILE 6000 f:\sp\public\sdk\inc\winbase.h -FILE 6001 f:\sp\public\sdk\inc\wingdi.h -FILE 6002 f:\sp\public\sdk\inc\winver.h -FILE 6003 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehhooks.h -FILE 6004 f:\sp\public\sdk\inc\pshpack2.h -FILE 6005 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 6006 f:\sp\public\sdk\inc\reason.h -FILE 6007 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehassert.h -FILE 6008 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\internal.h -FILE 6009 f:\sp\public\sdk\inc\specstrings.h -FILE 6010 f:\sp\public\sdk\inc\basetsd.h -FILE 6011 f:\sp\public\sdk\inc\pshpack4.h -FILE 6012 f:\sp\public\sdk\inc\ddbanned.h -FILE 6013 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 6014 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 6015 f:\sp\public\sdk\inc\winnetwk.h -FILE 6016 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h -FILE 6017 f:\sp\public\sdk\inc\stralign.h -FILE 6018 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h -FILE 6019 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehassert.h -FILE 6020 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\malloc.h -FILE 6021 f:\sp\public\sdk\inc\wincon.h -FILE 6022 f:\sp\public\sdk\inc\imm.h -FILE 6023 f:\sp\public\sdk\inc\guiddef.h -FILE 6024 f:\sp\public\sdk\inc\winbase.h -FILE 6025 f:\sp\public\sdk\inc\wingdi.h -FILE 6026 f:\sp\vctools\langapi\include\ehdata.h -FILE 6027 f:\sp\public\sdk\inc\winver.h -FILE 6028 f:\sp\public\sdk\inc\winnt.h -FILE 6029 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 6030 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdlib.h -FILE 6031 f:\sp\public\sdk\inc\pshpack2.h -FILE 6032 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 6033 f:\sp\public\sdk\inc\reason.h -FILE 6034 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\frame.cpp -FILE 6035 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\exception -FILE 6036 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\typeinfo.h -FILE 6037 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\typeinfo -FILE 6038 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\xstddef -FILE 6039 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\yvals.h -FILE 6040 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\use_ansi.h -FILE 6041 f:\sp\public\sdk\inc\pshpack4.h -FILE 6042 f:\sp\public\sdk\inc\winnetwk.h -FILE 6043 f:\sp\public\sdk\inc\stralign.h -FILE 6044 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\errno.h -FILE 6045 f:\sp\public\sdk\inc\poppack.h -FILE 6046 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stddef.h -FILE 6047 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 6048 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 6049 f:\sp\public\sdk\inc\winsvc.h -FILE 6050 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehstate.h -FILE 6051 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\eh.h -FILE 6052 f:\sp\public\sdk\inc\winuser.h -FILE 6053 f:\sp\public\sdk\inc\windows.h -FILE 6054 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 6055 f:\sp\public\sdk\inc\mcx.h -FILE 6056 f:\sp\public\sdk\inc\pshpack8.h -FILE 6057 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 6058 f:\sp\public\sdk\inc\specstrings.h -FILE 6059 f:\sp\public\sdk\inc\basetsd.h -FILE 6060 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehhooks.h -FILE 6061 f:\sp\public\sdk\inc\winnls.h -FILE 6062 f:\sp\public\sdk\inc\pshpack1.h -FILE 6063 f:\sp\public\sdk\inc\winerror.h -FILE 6064 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\trnsctrl.h -FILE 6065 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\internal.h -FILE 6066 f:\sp\public\sdk\inc\winreg.h -FILE 6067 f:\sp\public\sdk\inc\ddbanned.h -FILE 6068 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 6069 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\cstddef -FILE 6070 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 6071 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\mtdll.h -FILE 6072 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 6073 f:\sp\public\sdk\inc\windef.h -FILE 6074 f:\sp\public\sdk\inc\tvout.h -FILE 6075 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 6076 f:\sp\public\sdk\inc\pshpack4.h -FILE 6077 f:\sp\public\sdk\inc\reason.h -FILE 6078 f:\sp\public\sdk\inc\wincon.h -FILE 6079 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 6080 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 6081 f:\sp\public\sdk\inc\poppack.h -FILE 6082 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 6083 f:\sp\public\sdk\inc\mcx.h -FILE 6084 f:\sp\public\sdk\inc\winuser.h -FILE 6085 f:\sp\public\sdk\inc\winnls.h -FILE 6086 f:\sp\public\sdk\inc\stralign.h -FILE 6087 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 6088 f:\sp\public\sdk\inc\windef.h -FILE 6089 f:\sp\public\sdk\inc\tvout.h -FILE 6090 f:\sp\public\sdk\inc\winsvc.h -FILE 6091 f:\sp\public\sdk\inc\wingdi.h -FILE 6092 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 6093 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 6094 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 6095 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 6096 f:\sp\public\sdk\inc\winnt.h -FILE 6097 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 6098 f:\sp\public\sdk\inc\winnetwk.h -FILE 6099 f:\sp\public\sdk\inc\imm.h -FILE 6100 f:\sp\vctools\crt_bld\self_x86\crt\src\dosmap.c -FILE 6101 f:\sp\public\sdk\inc\winbase.h -FILE 6102 f:\sp\public\sdk\inc\winerror.h -FILE 6103 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 6104 f:\sp\public\sdk\inc\pshpack1.h -FILE 6105 f:\sp\public\sdk\inc\pshpack8.h -FILE 6106 f:\sp\public\sdk\inc\winver.h -FILE 6107 f:\sp\public\sdk\inc\ddbanned.h -FILE 6108 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 6109 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 6110 f:\sp\public\sdk\inc\pshpack2.h -FILE 6111 f:\sp\public\sdk\inc\winreg.h -FILE 6112 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 6113 f:\sp\public\sdk\inc\guiddef.h -FILE 6114 f:\sp\public\sdk\inc\windows.h -FILE 6115 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 6116 f:\sp\public\sdk\inc\specstrings.h -FILE 6117 f:\sp\public\sdk\inc\basetsd.h -FILE 6118 f:\sp\public\sdk\inc\winver.h -FILE 6119 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 6120 f:\sp\public\sdk\inc\pshpack2.h -FILE 6121 f:\sp\public\sdk\inc\windows.h -FILE 6122 f:\sp\public\sdk\inc\reason.h -FILE 6123 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 6124 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 6125 f:\sp\public\sdk\inc\specstrings.h -FILE 6126 f:\sp\public\sdk\inc\basetsd.h -FILE 6127 f:\sp\public\sdk\inc\pshpack4.h -FILE 6128 f:\sp\vctools\crt_bld\self_x86\crt\src\wctomb.c -FILE 6129 f:\sp\public\sdk\inc\winnetwk.h -FILE 6130 f:\sp\public\sdk\inc\stralign.h -FILE 6131 f:\sp\public\sdk\inc\poppack.h -FILE 6132 f:\sp\public\sdk\inc\winsvc.h -FILE 6133 f:\sp\public\sdk\inc\winuser.h -FILE 6134 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 6135 f:\sp\public\sdk\inc\windef.h -FILE 6136 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 6137 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 6138 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 6139 f:\sp\public\sdk\inc\mcx.h -FILE 6140 f:\sp\public\sdk\inc\pshpack8.h -FILE 6141 f:\sp\public\sdk\inc\guiddef.h -FILE 6142 f:\sp\public\sdk\inc\winnls.h -FILE 6143 f:\sp\public\sdk\inc\pshpack1.h -FILE 6144 f:\sp\public\sdk\inc\winnt.h -FILE 6145 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 6146 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 6147 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 6148 f:\sp\public\sdk\inc\winerror.h -FILE 6149 f:\sp\public\sdk\inc\winreg.h -FILE 6150 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 6151 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 6152 f:\sp\public\sdk\inc\tvout.h -FILE 6153 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 6154 f:\sp\public\sdk\inc\ddbanned.h -FILE 6155 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 6156 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 6157 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 6158 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 6159 f:\sp\public\sdk\inc\wincon.h -FILE 6160 f:\sp\public\sdk\inc\imm.h -FILE 6161 f:\sp\public\sdk\inc\winbase.h -FILE 6162 f:\sp\public\sdk\inc\wingdi.h -FILE 6163 f:\sp\public\sdk\inc\winsvc.h -FILE 6164 f:\sp\public\sdk\inc\winuser.h -FILE 6165 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 6166 f:\sp\public\sdk\inc\mcx.h -FILE 6167 f:\sp\public\sdk\inc\pshpack8.h -FILE 6168 f:\sp\public\sdk\inc\guiddef.h -FILE 6169 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 6170 f:\sp\public\sdk\inc\windows.h -FILE 6171 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 6172 f:\sp\public\sdk\inc\winnls.h -FILE 6173 f:\sp\vctools\crt_bld\self_x86\crt\src\wcstol.c -FILE 6174 f:\sp\public\sdk\inc\pshpack1.h -FILE 6175 f:\sp\public\sdk\inc\winerror.h -FILE 6176 f:\sp\public\sdk\inc\winreg.h -FILE 6177 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 6178 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 6179 f:\sp\public\sdk\inc\tvout.h -FILE 6180 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 6181 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 6182 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 6183 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 6184 f:\sp\public\sdk\inc\wincon.h -FILE 6185 f:\sp\public\sdk\inc\imm.h -FILE 6186 f:\sp\public\sdk\inc\winbase.h -FILE 6187 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 6188 f:\sp\public\sdk\inc\wingdi.h -FILE 6189 f:\sp\public\sdk\inc\windef.h -FILE 6190 f:\sp\public\sdk\inc\winver.h -FILE 6191 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 6192 f:\sp\public\sdk\inc\pshpack2.h -FILE 6193 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 6194 f:\sp\public\sdk\inc\reason.h -FILE 6195 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 6196 f:\sp\public\sdk\inc\winnt.h -FILE 6197 f:\sp\public\sdk\inc\specstrings.h -FILE 6198 f:\sp\public\sdk\inc\basetsd.h -FILE 6199 f:\sp\public\sdk\inc\pshpack4.h -FILE 6200 f:\sp\public\sdk\inc\ddbanned.h -FILE 6201 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 6202 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 6203 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 6204 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 6205 f:\sp\public\sdk\inc\winnetwk.h -FILE 6206 f:\sp\public\sdk\inc\stralign.h -FILE 6207 f:\sp\public\sdk\inc\poppack.h -FILE 6208 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 6209 f:\sp\public\sdk\inc\mcx.h -FILE 6210 f:\sp\public\sdk\inc\pshpack8.h -FILE 6211 f:\sp\public\sdk\inc\guiddef.h -FILE 6212 f:\sp\public\sdk\inc\winnt.h -FILE 6213 f:\sp\public\sdk\inc\winnls.h -FILE 6214 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 6215 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 6216 f:\sp\public\sdk\inc\pshpack1.h -FILE 6217 f:\sp\public\sdk\inc\winerror.h -FILE 6218 f:\sp\vctools\crt_bld\self_x86\crt\src\tolower.c -FILE 6219 f:\sp\public\sdk\inc\winreg.h -FILE 6220 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 6221 f:\sp\public\sdk\inc\tvout.h -FILE 6222 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 6223 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 6224 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 6225 f:\sp\public\sdk\inc\wincon.h -FILE 6226 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 6227 f:\sp\public\sdk\inc\imm.h -FILE 6228 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 6229 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 6230 f:\sp\public\sdk\inc\winbase.h -FILE 6231 f:\sp\public\sdk\inc\wingdi.h -FILE 6232 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 6233 f:\sp\public\sdk\inc\winver.h -FILE 6234 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 6235 f:\sp\public\sdk\inc\windows.h -FILE 6236 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 6237 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 6238 f:\sp\public\sdk\inc\pshpack2.h -FILE 6239 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 6240 f:\sp\public\sdk\inc\reason.h -FILE 6241 f:\sp\public\sdk\inc\specstrings.h -FILE 6242 f:\sp\public\sdk\inc\basetsd.h -FILE 6243 f:\sp\public\sdk\inc\pshpack4.h -FILE 6244 f:\sp\public\sdk\inc\winnetwk.h -FILE 6245 f:\sp\public\sdk\inc\ddbanned.h -FILE 6246 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 6247 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 6248 f:\sp\public\sdk\inc\stralign.h -FILE 6249 f:\sp\public\sdk\inc\poppack.h -FILE 6250 f:\sp\public\sdk\inc\winsvc.h -FILE 6251 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 6252 f:\sp\public\sdk\inc\windef.h -FILE 6253 f:\sp\public\sdk\inc\winuser.h -FILE 6254 f:\sp\public\sdk\inc\winsvc.h -FILE 6255 f:\sp\public\sdk\inc\winuser.h -FILE 6256 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 6257 f:\sp\public\sdk\inc\mcx.h -FILE 6258 f:\sp\public\sdk\inc\pshpack8.h -FILE 6259 f:\sp\public\sdk\inc\guiddef.h -FILE 6260 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 6261 f:\sp\public\sdk\inc\windows.h -FILE 6262 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 6263 f:\sp\public\sdk\inc\winnls.h -FILE 6264 f:\sp\vctools\crt_bld\self_x86\crt\src\strtoq.c -FILE 6265 f:\sp\public\sdk\inc\pshpack1.h -FILE 6266 f:\sp\public\sdk\inc\winerror.h -FILE 6267 f:\sp\public\sdk\inc\winreg.h -FILE 6268 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 6269 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 6270 f:\sp\public\sdk\inc\tvout.h -FILE 6271 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 6272 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 6273 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 6274 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 6275 f:\sp\public\sdk\inc\wincon.h -FILE 6276 f:\sp\public\sdk\inc\imm.h -FILE 6277 f:\sp\public\sdk\inc\winbase.h -FILE 6278 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 6279 f:\sp\public\sdk\inc\wingdi.h -FILE 6280 f:\sp\public\sdk\inc\windef.h -FILE 6281 f:\sp\public\sdk\inc\winver.h -FILE 6282 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 6283 f:\sp\public\sdk\inc\pshpack2.h -FILE 6284 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 6285 f:\sp\public\sdk\inc\reason.h -FILE 6286 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 6287 f:\sp\public\sdk\inc\winnt.h -FILE 6288 f:\sp\public\sdk\inc\specstrings.h -FILE 6289 f:\sp\public\sdk\inc\basetsd.h -FILE 6290 f:\sp\public\sdk\inc\pshpack4.h -FILE 6291 f:\sp\public\sdk\inc\ddbanned.h -FILE 6292 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 6293 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 6294 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 6295 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 6296 f:\sp\public\sdk\inc\winnetwk.h -FILE 6297 f:\sp\public\sdk\inc\stralign.h -FILE 6298 f:\sp\public\sdk\inc\poppack.h -FILE 6299 f:\sp\public\sdk\inc\winsvc.h -FILE 6300 f:\sp\public\sdk\inc\winuser.h -FILE 6301 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 6302 f:\sp\public\sdk\inc\mcx.h -FILE 6303 f:\sp\public\sdk\inc\pshpack8.h -FILE 6304 f:\sp\public\sdk\inc\guiddef.h -FILE 6305 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 6306 f:\sp\public\sdk\inc\windows.h -FILE 6307 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 6308 f:\sp\public\sdk\inc\winnls.h -FILE 6309 f:\sp\vctools\crt_bld\self_x86\crt\src\strtol.c -FILE 6310 f:\sp\public\sdk\inc\pshpack1.h -FILE 6311 f:\sp\public\sdk\inc\winerror.h -FILE 6312 f:\sp\public\sdk\inc\winreg.h -FILE 6313 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 6314 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 6315 f:\sp\public\sdk\inc\tvout.h -FILE 6316 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 6317 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 6318 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 6319 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 6320 f:\sp\public\sdk\inc\wincon.h -FILE 6321 f:\sp\public\sdk\inc\imm.h -FILE 6322 f:\sp\public\sdk\inc\winbase.h -FILE 6323 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 6324 f:\sp\public\sdk\inc\wingdi.h -FILE 6325 f:\sp\public\sdk\inc\windef.h -FILE 6326 f:\sp\public\sdk\inc\winver.h -FILE 6327 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 6328 f:\sp\public\sdk\inc\pshpack2.h -FILE 6329 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 6330 f:\sp\public\sdk\inc\reason.h -FILE 6331 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 6332 f:\sp\public\sdk\inc\winnt.h -FILE 6333 f:\sp\public\sdk\inc\specstrings.h -FILE 6334 f:\sp\public\sdk\inc\basetsd.h -FILE 6335 f:\sp\public\sdk\inc\pshpack4.h -FILE 6336 f:\sp\public\sdk\inc\ddbanned.h -FILE 6337 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 6338 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 6339 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 6340 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 6341 f:\sp\public\sdk\inc\winnetwk.h -FILE 6342 f:\sp\public\sdk\inc\stralign.h -FILE 6343 f:\sp\public\sdk\inc\poppack.h -FILE 6344 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 6345 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 6346 f:\sp\public\sdk\inc\tvout.h -FILE 6347 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 6348 f:\sp\public\sdk\inc\wincon.h -FILE 6349 f:\sp\public\sdk\inc\imm.h -FILE 6350 f:\sp\public\sdk\inc\winbase.h -FILE 6351 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 6352 f:\sp\public\sdk\inc\wingdi.h -FILE 6353 f:\sp\public\sdk\inc\windef.h -FILE 6354 f:\sp\public\sdk\inc\winver.h -FILE 6355 f:\sp\vctools\crt_bld\self_x86\crt\src\mbtowc.c -FILE 6356 f:\sp\public\sdk\inc\pshpack2.h -FILE 6357 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 6358 f:\sp\public\sdk\inc\reason.h -FILE 6359 f:\sp\public\sdk\inc\winnt.h -FILE 6360 f:\sp\public\sdk\inc\specstrings.h -FILE 6361 f:\sp\public\sdk\inc\basetsd.h -FILE 6362 f:\sp\public\sdk\inc\pshpack4.h -FILE 6363 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 6364 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 6365 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 6366 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 6367 f:\sp\public\sdk\inc\winnetwk.h -FILE 6368 f:\sp\public\sdk\inc\stralign.h -FILE 6369 f:\sp\public\sdk\inc\poppack.h -FILE 6370 f:\sp\public\sdk\inc\winsvc.h -FILE 6371 f:\sp\public\sdk\inc\winuser.h -FILE 6372 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 6373 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 6374 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 6375 f:\sp\public\sdk\inc\mcx.h -FILE 6376 f:\sp\public\sdk\inc\pshpack8.h -FILE 6377 f:\sp\public\sdk\inc\guiddef.h -FILE 6378 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 6379 f:\sp\public\sdk\inc\windows.h -FILE 6380 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 6381 f:\sp\public\sdk\inc\winnls.h -FILE 6382 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 6383 f:\sp\public\sdk\inc\pshpack1.h -FILE 6384 f:\sp\public\sdk\inc\ddbanned.h -FILE 6385 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 6386 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 6387 f:\sp\public\sdk\inc\winerror.h -FILE 6388 f:\sp\public\sdk\inc\winreg.h -FILE 6389 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 6390 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 6391 f:\sp\public\sdk\inc\winreg.h -FILE 6392 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 6393 f:\sp\public\sdk\inc\tvout.h -FILE 6394 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 6395 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 6396 f:\sp\public\sdk\inc\wincon.h -FILE 6397 f:\sp\public\sdk\inc\imm.h -FILE 6398 f:\sp\public\sdk\inc\winbase.h -FILE 6399 f:\sp\vctools\crt_bld\self_x86\crt\src\isctype.c -FILE 6400 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 6401 f:\sp\public\sdk\inc\wingdi.h -FILE 6402 f:\sp\public\sdk\inc\windef.h -FILE 6403 f:\sp\public\sdk\inc\winver.h -FILE 6404 f:\sp\public\sdk\inc\pshpack2.h -FILE 6405 f:\sp\public\sdk\inc\reason.h -FILE 6406 f:\sp\public\sdk\inc\winnt.h -FILE 6407 f:\sp\public\sdk\inc\specstrings.h -FILE 6408 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 6409 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 6410 f:\sp\public\sdk\inc\basetsd.h -FILE 6411 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 6412 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 6413 f:\sp\public\sdk\inc\pshpack4.h -FILE 6414 f:\sp\public\sdk\inc\winnetwk.h -FILE 6415 f:\sp\public\sdk\inc\stralign.h -FILE 6416 f:\sp\public\sdk\inc\poppack.h -FILE 6417 f:\sp\public\sdk\inc\winsvc.h -FILE 6418 f:\sp\public\sdk\inc\winuser.h -FILE 6419 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 6420 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 6421 f:\sp\public\sdk\inc\mcx.h -FILE 6422 f:\sp\public\sdk\inc\pshpack8.h -FILE 6423 f:\sp\public\sdk\inc\guiddef.h -FILE 6424 f:\sp\public\sdk\inc\ddbanned.h -FILE 6425 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 6426 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 6427 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 6428 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 6429 f:\sp\public\sdk\inc\windows.h -FILE 6430 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 6431 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 6432 f:\sp\public\sdk\inc\winnls.h -FILE 6433 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 6434 f:\sp\public\sdk\inc\pshpack1.h -FILE 6435 f:\sp\public\sdk\inc\winerror.h -FILE 6436 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 6437 f:\sp\public\sdk\inc\winreg.h -FILE 6438 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 6439 f:\sp\public\sdk\inc\tvout.h -FILE 6440 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 6441 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 6442 f:\sp\public\sdk\inc\wincon.h -FILE 6443 f:\sp\public\sdk\inc\imm.h -FILE 6444 f:\sp\public\sdk\inc\winbase.h -FILE 6445 f:\sp\vctools\crt_bld\self_x86\crt\src\iswctype.c -FILE 6446 f:\sp\public\sdk\inc\wingdi.h -FILE 6447 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 6448 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 6449 f:\sp\public\sdk\inc\winver.h -FILE 6450 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 6451 f:\sp\public\sdk\inc\windows.h -FILE 6452 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 6453 f:\sp\public\sdk\inc\pshpack2.h -FILE 6454 f:\sp\public\sdk\inc\reason.h -FILE 6455 f:\sp\public\sdk\inc\specstrings.h -FILE 6456 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 6457 f:\sp\public\sdk\inc\basetsd.h -FILE 6458 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 6459 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 6460 f:\sp\public\sdk\inc\pshpack4.h -FILE 6461 f:\sp\public\sdk\inc\winnetwk.h -FILE 6462 f:\sp\public\sdk\inc\stralign.h -FILE 6463 f:\sp\public\sdk\inc\poppack.h -FILE 6464 f:\sp\public\sdk\inc\winsvc.h -FILE 6465 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 6466 f:\sp\public\sdk\inc\windef.h -FILE 6467 f:\sp\public\sdk\inc\winuser.h -FILE 6468 f:\sp\public\sdk\inc\mcx.h -FILE 6469 f:\sp\public\sdk\inc\pshpack8.h -FILE 6470 f:\sp\public\sdk\inc\guiddef.h -FILE 6471 f:\sp\public\sdk\inc\ddbanned.h -FILE 6472 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 6473 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 6474 f:\sp\public\sdk\inc\winnt.h -FILE 6475 f:\sp\public\sdk\inc\winnls.h -FILE 6476 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 6477 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 6478 f:\sp\public\sdk\inc\pshpack1.h -FILE 6479 f:\sp\public\sdk\inc\winerror.h -FILE 6480 f:\sp\public\sdk\inc\winsvc.h -FILE 6481 f:\sp\public\sdk\inc\winuser.h -FILE 6482 f:\sp\public\sdk\inc\mcx.h -FILE 6483 f:\sp\public\sdk\inc\pshpack8.h -FILE 6484 f:\sp\public\sdk\inc\guiddef.h -FILE 6485 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 6486 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 6487 f:\sp\public\sdk\inc\windows.h -FILE 6488 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 6489 f:\sp\public\sdk\inc\winnls.h -FILE 6490 f:\sp\vctools\crt_bld\self_x86\crt\src\_wctype.c -FILE 6491 f:\sp\public\sdk\inc\pshpack1.h -FILE 6492 f:\sp\public\sdk\inc\winerror.h -FILE 6493 f:\sp\public\sdk\inc\winreg.h -FILE 6494 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 6495 f:\sp\public\sdk\inc\tvout.h -FILE 6496 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 6497 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 6498 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 6499 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 6500 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 6501 f:\sp\public\sdk\inc\wincon.h -FILE 6502 f:\sp\public\sdk\inc\imm.h -FILE 6503 f:\sp\public\sdk\inc\winbase.h -FILE 6504 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 6505 f:\sp\public\sdk\inc\wingdi.h -FILE 6506 f:\sp\public\sdk\inc\windef.h -FILE 6507 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h -FILE 6508 f:\sp\public\sdk\inc\winver.h -FILE 6509 f:\sp\public\sdk\inc\pshpack2.h -FILE 6510 f:\sp\public\sdk\inc\reason.h -FILE 6511 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 6512 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 6513 f:\sp\public\sdk\inc\winnt.h -FILE 6514 f:\sp\public\sdk\inc\specstrings.h -FILE 6515 f:\sp\public\sdk\inc\basetsd.h -FILE 6516 f:\sp\public\sdk\inc\pshpack4.h -FILE 6517 f:\sp\public\sdk\inc\ddbanned.h -FILE 6518 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 6519 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 6520 f:\sp\public\sdk\inc\winnetwk.h -FILE 6521 f:\sp\public\sdk\inc\stralign.h -FILE 6522 f:\sp\public\sdk\inc\poppack.h -FILE 6523 f:\sp\public\sdk\inc\mcx.h -FILE 6524 f:\sp\public\sdk\inc\pshpack8.h -FILE 6525 f:\sp\public\sdk\inc\guiddef.h -FILE 6526 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 6527 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 6528 f:\sp\public\sdk\inc\windows.h -FILE 6529 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 6530 f:\sp\public\sdk\inc\winnls.h -FILE 6531 f:\sp\public\sdk\inc\pshpack1.h -FILE 6532 f:\sp\public\sdk\inc\winerror.h -FILE 6533 f:\sp\public\sdk\inc\winreg.h -FILE 6534 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 6535 f:\sp\vctools\crt_bld\self_x86\crt\src\_ctype.c -FILE 6536 f:\sp\public\sdk\inc\tvout.h -FILE 6537 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 6538 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 6539 f:\sp\public\sdk\inc\wincon.h -FILE 6540 f:\sp\public\sdk\inc\imm.h -FILE 6541 f:\sp\public\sdk\inc\winbase.h -FILE 6542 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 6543 f:\sp\public\sdk\inc\wingdi.h -FILE 6544 f:\sp\public\sdk\inc\windef.h -FILE 6545 f:\sp\public\sdk\inc\winver.h -FILE 6546 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 6547 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 6548 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 6549 f:\sp\public\sdk\inc\pshpack2.h -FILE 6550 f:\sp\public\sdk\inc\reason.h -FILE 6551 f:\sp\public\sdk\inc\winnt.h -FILE 6552 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 6553 f:\sp\public\sdk\inc\specstrings.h -FILE 6554 f:\sp\public\sdk\inc\basetsd.h -FILE 6555 f:\sp\public\sdk\inc\pshpack4.h -FILE 6556 f:\sp\public\sdk\inc\winnetwk.h -FILE 6557 f:\sp\public\sdk\inc\stralign.h -FILE 6558 f:\sp\public\sdk\inc\poppack.h -FILE 6559 f:\sp\public\sdk\inc\winsvc.h -FILE 6560 f:\sp\public\sdk\inc\ddbanned.h -FILE 6561 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 6562 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 6563 f:\sp\public\sdk\inc\winuser.h -FILE 6564 f:\sp\public\sdk\inc\pshpack2.h -FILE 6565 f:\sp\public\sdk\inc\mcx.h -FILE 6566 f:\sp\public\sdk\inc\winuser.h -FILE 6567 f:\sp\public\sdk\inc\winnls.h -FILE 6568 f:\sp\public\sdk\inc\stralign.h -FILE 6569 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 6570 f:\sp\public\sdk\inc\windef.h -FILE 6571 f:\sp\public\sdk\inc\tvout.h -FILE 6572 f:\sp\public\sdk\inc\winsvc.h -FILE 6573 f:\sp\vctools\crt_bld\self_x86\crt\src\internal_securecrt.h -FILE 6574 f:\sp\public\sdk\inc\wingdi.h -FILE 6575 f:\sp\public\sdk\inc\pshpack4.h -FILE 6576 f:\sp\public\sdk\inc\poppack.h -FILE 6577 f:\sp\public\sdk\inc\winnt.h -FILE 6578 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 6579 f:\sp\public\sdk\inc\winnetwk.h -FILE 6580 f:\sp\public\sdk\inc\imm.h -FILE 6581 f:\sp\vctools\crt_bld\self_x86\crt\src\xtoa.c -FILE 6582 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 6583 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 6584 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 6585 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 6586 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 6587 f:\sp\vctools\crt_bld\self_x86\crt\src\xtoas.c -FILE 6588 f:\sp\public\sdk\inc\pshpack1.h -FILE 6589 f:\sp\public\sdk\inc\winver.h -FILE 6590 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 6591 f:\sp\public\sdk\inc\guiddef.h -FILE 6592 f:\sp\public\sdk\inc\specstrings.h -FILE 6593 f:\sp\public\sdk\inc\basetsd.h -FILE 6594 f:\sp\public\sdk\inc\winreg.h -FILE 6595 f:\sp\public\sdk\inc\ddbanned.h -FILE 6596 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 6597 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 6598 f:\sp\public\sdk\inc\windows.h -FILE 6599 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 6600 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 6601 f:\sp\public\sdk\inc\winbase.h -FILE 6602 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 6603 f:\sp\public\sdk\inc\winerror.h -FILE 6604 f:\sp\public\sdk\inc\pshpack8.h -FILE 6605 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 6606 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 6607 f:\sp\public\sdk\inc\reason.h -FILE 6608 f:\sp\public\sdk\inc\wincon.h -FILE 6609 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 6610 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h -FILE 6611 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 6612 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 6613 f:\sp\vctools\crt_bld\self_x86\crt\src\wchtodig.c -FILE 6614 f:\sp\public\sdk\inc\ddbanned.h -FILE 6615 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 6616 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 6617 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 6618 f:\sp\public\sdk\inc\poppack.h -FILE 6619 f:\sp\public\sdk\inc\winnetwk.h -FILE 6620 f:\sp\public\sdk\inc\imm.h -FILE 6621 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 6622 f:\sp\public\sdk\inc\windef.h -FILE 6623 f:\sp\public\sdk\inc\pshpack1.h -FILE 6624 f:\sp\public\sdk\inc\winver.h -FILE 6625 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 6626 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 6627 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 6628 f:\sp\public\sdk\inc\winnt.h -FILE 6629 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 6630 f:\sp\public\sdk\inc\winreg.h -FILE 6631 f:\sp\vctools\crt_bld\self_x86\crt\src\atox.c -FILE 6632 f:\sp\public\sdk\inc\winbase.h -FILE 6633 f:\sp\public\sdk\inc\winerror.h -FILE 6634 f:\sp\public\sdk\inc\pshpack8.h -FILE 6635 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 6636 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 6637 f:\sp\public\sdk\inc\reason.h -FILE 6638 f:\sp\public\sdk\inc\wincon.h -FILE 6639 f:\sp\public\sdk\inc\ddbanned.h -FILE 6640 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 6641 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 6642 f:\sp\public\sdk\inc\pshpack2.h -FILE 6643 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 6644 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 6645 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 6646 f:\sp\public\sdk\inc\mcx.h -FILE 6647 f:\sp\public\sdk\inc\winuser.h -FILE 6648 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 6649 f:\sp\public\sdk\inc\winnls.h -FILE 6650 f:\sp\public\sdk\inc\guiddef.h -FILE 6651 f:\sp\public\sdk\inc\windows.h -FILE 6652 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 6653 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h -FILE 6654 f:\sp\public\sdk\inc\specstrings.h -FILE 6655 f:\sp\public\sdk\inc\basetsd.h -FILE 6656 f:\sp\public\sdk\inc\stralign.h -FILE 6657 f:\sp\public\sdk\inc\tvout.h -FILE 6658 f:\sp\public\sdk\inc\winsvc.h -FILE 6659 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 6660 f:\sp\public\sdk\inc\wingdi.h -FILE 6661 f:\sp\public\sdk\inc\pshpack4.h -FUNC 1000 13 4 vswprintf -1000 0 50 71 -1000 12 51 71 -1012 1 52 71 -FUNC 1020 1b 10 wmemcpy_s -1020 0 1230 66 -1020 1b 1233 66 -FUNC 1040 1b 10 wmemmove_s -1040 0 1250 66 -1040 1b 1253 66 -FUNC 1060 19 4 std::bad_alloc::bad_alloc(char const *) -1060 13 371 83 -1073 6 372 83 -FUNC 1080 b 0 std::bad_alloc::~bad_alloc() -1080 6 380 83 -1086 5 381 83 -FUNC 1090 24 0 std::bad_alloc::`vector deleting destructor'(unsigned int) -FUNC 10c0 f 8 std::char_traits::assign(wchar_t &,wchar_t const &) -10c0 0 302 70 -10c0 e 303 70 -10ce 1 304 70 -FUNC 10d0 17 4 std::char_traits::length(wchar_t const *) -10d0 0 325 70 -10d0 16 327 70 -10e6 1 328 70 -FUNC 10f0 27 10 std::char_traits::_Copy_s(wchar_t *,unsigned int,wchar_t const *,unsigned int) -10f0 0 340 70 -10f0 23 343 70 -1113 3 344 70 -1116 1 345 70 -FUNC 1120 27 10 std::char_traits::_Move_s(wchar_t *,unsigned int,wchar_t const *,unsigned int) -1120 0 364 70 -1120 23 367 70 -1143 3 368 70 -1146 1 369 70 -FUNC 1150 d 8 std::char_traits::assign(char &,char const &) -1150 0 417 70 -1150 c 418 70 -115c 1 419 70 -FUNC 1160 13 4 std::char_traits::length(char const *) -1160 0 440 70 -1160 12 442 70 -1172 1 443 70 -FUNC 1180 21 10 std::char_traits::_Copy_s(char *,unsigned int,char const *,unsigned int) -1180 0 455 70 -1180 1d 458 70 -119d 3 459 70 -11a0 1 460 70 -FUNC 11b0 21 10 std::char_traits::_Move_s(char *,unsigned int,char const *,unsigned int) -11b0 0 479 70 -11b0 1d 482 70 -11cd 3 483 70 -11d0 1 484 70 -FUNC 11e0 7 0 std::_Iterator_base::_Iterator_base() -11e0 6 441 65 -11e6 1 442 65 -FUNC 11f0 6b 4 std::logic_error::logic_error(std::basic_string,std::allocator > const &) -11f0 56 27 82 -1246 15 28 82 -FUNC 1260 32 0 std::logic_error::~logic_error() -1260 9 31 82 -1269 29 32 82 -FUNC 12a0 e 0 std::logic_error::what() -12a0 0 35 82 -12a0 9 36 82 -12a9 1 37 82 -12aa 3 36 82 -12ad 1 37 82 -FUNC 12b0 47 0 std::logic_error::`scalar deleting destructor'(unsigned int) -FUNC 1300 19 4 std::length_error::length_error(std::basic_string,std::allocator > const &) -1300 13 106 82 -1313 6 107 82 -FUNC 1320 32 0 std::length_error::~length_error() -1320 3 110 82 -1323 2f 111 82 -FUNC 1360 47 0 std::length_error::`vector deleting destructor'(unsigned int) -FUNC 13b0 19 4 std::out_of_range::out_of_range(std::basic_string,std::allocator > const &) -13b0 13 130 82 -13c3 6 131 82 -FUNC 13d0 32 0 std::out_of_range::~out_of_range() -13d0 3 134 82 -13d3 2f 135 82 -FUNC 1410 47 0 std::out_of_range::`vector deleting destructor'(unsigned int) -FUNC 1460 19 4 std::out_of_range::out_of_range(std::out_of_range const &) -FUNC 1480 71 4 std::logic_error::logic_error(std::logic_error const &) -FUNC 1500 1b 8 google_breakpad::WindowsStringUtils::safe_swprintf(wchar_t *,unsigned int,wchar_t const *,...) -1500 0 94 63 -1500 1a 97 63 -151a 1 105 63 -FUNC 1520 35 0 google_breakpad::ExceptionHandler::set_dump_path(std::basic_string,std::allocator > const &) -1520 4 137 43 -1524 f 138 43 -1533 c 139 43 -153f 7 140 43 -1546 1 141 43 -1547 6 139 43 -154d 7 140 43 -1554 1 141 43 -FUNC 1560 20b 14 google_breakpad::ExceptionHandler::ExceptionHandler(std::basic_string,std::allocator > const &,bool (*)(void *,_EXCEPTION_POINTERS *,MDRawAssertionInfo *),bool (*)(wchar_t const *,wchar_t const *,void *,_EXCEPTION_POINTERS *,MDRawAssertionInfo *,bool),void *,bool) -1560 6d 75 12 -15cd 90 78 12 -165d 9 86 12 -1666 d 87 12 -1673 d 88 12 -1680 1e 96 12 -169e 11 98 12 -16af 7 99 12 -16b6 f 101 12 -16c5 a 104 12 -16cf 8 105 12 -16d7 7 106 12 -16de 7 107 12 -16e5 b 110 12 -16f0 8 114 12 -16f8 25 115 12 -171d d 117 12 -172a b 118 12 -1735 10 121 12 -1745 e 124 12 -1753 18 126 12 -FUNC 1770 274 0 google_breakpad::ExceptionHandler::~ExceptionHandler() -1770 e 128 12 -177e a 129 12 -1788 7 130 12 -178f a 133 12 -1799 b 134 12 -17a4 a 136 12 -17ae 9 139 12 -17b7 63 142 12 -181a 23 143 12 -183d 5 144 12 -1842 13 147 12 -1855 2b 149 12 -1880 2a 151 12 -18aa 17 152 12 -18c1 2c 153 12 -18ed 19 151 12 -1906 11 158 12 -1917 23 161 12 -193a 6 162 12 -1940 d 165 12 -194d f 169 12 -195c d 170 12 -1969 f 171 12 -1978 9 172 12 -1981 63 173 12 -FUNC 19f0 31 0 std::vector >::`scalar deleting destructor'(unsigned int) -FUNC 1a30 51 4 google_breakpad::ExceptionHandler::ExceptionHandlerThreadMain(void *) -1a30 13 176 12 -1a43 f 182 12 -1a52 1a 185 12 -1a6c 13 188 12 -1a7f 2 190 12 -FUNC 1a90 c7 4 google_breakpad::AutoExceptionHandler::AutoExceptionHandler() -1a90 7 204 12 -1a97 b 221 12 -1aa2 82 224 12 -1b24 d 225 12 -1b31 c 229 12 -1b3d e 231 12 -1b4b c 233 12 -FUNC 1b60 36 0 google_breakpad::AutoExceptionHandler::~AutoExceptionHandler() -1b60 0 235 12 -1b60 b 237 12 -1b6b d 239 12 -1b78 b 242 12 -1b83 7 243 12 -1b8a b 244 12 -1b95 1 245 12 -FUNC 1ba0 3 0 google_breakpad::AutoExceptionHandler::get_handler() -1ba0 3 247 12 -FUNC 1bb0 c4 4 google_breakpad::ExceptionHandler::HandleException(_EXCEPTION_POINTERS *) -1bb0 2b 254 12 -1bdb a 255 12 -1be5 f 262 12 -1bf4 1e 265 12 -1c12 5 273 12 -1c17 2 274 12 -1c19 7 283 12 -1c20 5 284 12 -1c25 2 285 12 -1c27 2 286 12 -1c29 37 290 12 -1c60 14 291 12 -FUNC 1c80 121 14 google_breakpad::ExceptionHandler::HandleInvalidParameter(wchar_t const *,wchar_t const *,wchar_t const *,unsigned int,unsigned int) -1c80 40 299 12 -1cc0 b7 319 12 -1d77 7 320 12 -1d7e 14 323 12 -1d92 2 324 12 -1d94 5 337 12 -1d99 8 345 12 -FUNC 1db0 81 8 google_breakpad::ExceptionHandler::WriteMinidumpOnHandlerThread(_EXCEPTION_POINTERS *,MDRawAssertionInfo *) -1db0 2 350 12 -1db2 d 351 12 -1dbf 6 354 12 -1dc5 2b 359 12 -1df0 f 362 12 -1dff 6 363 12 -1e05 26 370 12 -1e2b 3 372 12 -1e2e 3 373 12 -FUNC 1e40 1d 0 google_breakpad::ExceptionHandler::WriteMinidump() -1e40 3 375 12 -1e43 b 376 12 -1e4e b 377 12 -1e59 3 378 12 -1e5c 1 379 12 -FUNC 1e60 a2 4 google_breakpad::ExceptionHandler::WriteMinidump(std::basic_string,std::allocator > const &,bool (*)(wchar_t const *,wchar_t const *,void *,_EXCEPTION_POINTERS *,MDRawAssertionInfo *,bool),void *) -1e60 41 384 12 -1ea1 10 385 12 -1eb1 2a 386 12 -1edb 27 387 12 -FUNC 1f10 142 c google_breakpad::ExceptionHandler::WriteMinidumpWithException(unsigned long,_EXCEPTION_POINTERS *,MDRawAssertionInfo *) -1f10 0 392 12 -1f10 22 399 12 -1f32 7 466 12 -1f39 2 403 12 -1f3b e 404 12 -1f49 1f 411 12 -1f68 9 412 12 -1f71 8 414 12 -1f79 4 415 12 -1f7d 8 416 12 -1f85 8 426 12 -1f8d a 427 12 -1f97 34 440 12 -1fcb 8 441 12 -1fd3 8 442 12 -1fdb 4 443 12 -1fdf 8 444 12 -1fe7 30 454 12 -2017 c 456 12 -2023 7 460 12 -202a 1e 462 12 -2048 4 465 12 -204c 6 466 12 -FUNC 2060 138 0 google_breakpad::ExceptionHandler::UpdateNextID() -2060 38 468 12 -2098 b 470 12 -20a3 4a 471 12 -20ed 25 472 12 -2112 1c 477 12 -212e 31 478 12 -215f 14 479 12 -2173 25 480 12 -FUNC 21a0 3b 4 std::basic_string,std::allocator >::basic_string,std::allocator >(char const *) -21a0 0 650 17 -21a0 35 652 17 -21d5 6 653 17 -FUNC 21e0 25 4 std::basic_string,std::allocator >::basic_string,std::allocator >(std::basic_string,std::allocator > const &) -21e0 1 720 17 -21e1 4 721 17 -21e5 1a 722 17 -21ff 6 723 17 -FUNC 2210 26 0 std::basic_string,std::allocator >::~basic_string,std::allocator >() -2210 3 904 17 -2213 22 905 17 -2235 1 906 17 -FUNC 2240 e 0 std::basic_string,std::allocator >::c_str() -2240 0 1621 17 -2240 9 1622 17 -2249 1 1623 17 -224a 3 1622 17 -224d 1 1623 17 -FUNC 2250 4 0 std::basic_string,std::allocator >::size() -2250 0 1636 17 -2250 3 1637 17 -2253 1 1638 17 -FUNC 2260 11 0 std::basic_string,std::allocator >::basic_string,std::allocator >() -2260 0 564 17 -2260 10 565 17 -2270 1 566 17 -FUNC 2280 27 0 std::basic_string,std::allocator >::~basic_string,std::allocator >() -2280 3 904 17 -2283 23 905 17 -22a6 1 906 17 -FUNC 22b0 b 0 std::basic_string,std::allocator >::operator=(std::basic_string,std::allocator > const &) -22b0 0 914 17 -22b0 a 915 17 -22ba 1 916 17 -FUNC 22c0 24 4 std::basic_string,std::allocator >::operator=(wchar_t const *) -22c0 0 919 17 -22c0 21 920 17 -22e1 3 921 17 -FUNC 22f0 e 0 std::basic_string,std::allocator >::c_str() -22f0 0 1621 17 -22f0 9 1622 17 -22f9 1 1623 17 -22fa 3 1622 17 -22fd 1 1623 17 -FUNC 2300 c 0 std::vector >::vector >() -2300 0 457 23 -2300 b 458 23 -230b 1 459 23 -FUNC 2310 26 0 std::vector >::~vector >() -2310 0 545 23 -2310 25 546 23 -2335 1 547 23 -FUNC 2340 1d 0 std::vector >::begin() -2340 1 627 23 -2341 1b 628 23 -235c 1 629 23 -FUNC 2360 1d 0 std::vector >::end() -2360 1 637 23 -2361 1b 638 23 -237c 1 639 23 -FUNC 2380 13 0 std::vector >::size() -2380 0 702 23 -2380 9 703 23 -2389 1 704 23 -238a 8 703 23 -2392 1 704 23 -FUNC 23a0 23 0 std::vector >::empty() -23a0 0 712 23 -23a0 10 713 23 -23b0 1 714 23 -23b1 11 713 23 -23c2 1 714 23 -FUNC 23d0 56 0 std::vector >::at(unsigned int) -23d0 b 729 23 -23db 15 730 23 -23f0 5 731 23 -23f5 29 732 23 -241e 8 733 23 -FUNC 2430 47 0 std::vector >::back() -2430 c 776 23 -243c 32 777 23 -246e 9 778 23 -FUNC 2480 68 0 std::vector >::push_back(google_breakpad::ExceptionHandler * const &) -2480 10 786 23 -2490 24 787 23 -24b4 d 796 23 -24c1 6 801 23 -24c7 1b 800 23 -24e2 6 801 23 -FUNC 24f0 23 0 std::vector >::pop_back() -24f0 6 818 23 -24f6 15 819 23 -250b 6 822 23 -2511 2 824 23 -FUNC 2520 3f 8 std::vector >::erase(std::_Vector_iterator >) -2520 7 996 23 -2527 24 998 23 -254b 11 1001 23 -255c 3 1002 23 -FUNC 2560 20 0 std::_Vector_iterator >::operator*() -2560 0 325 23 -2560 1c 326 23 -257c 1 327 23 -257d 2 326 23 -257f 1 327 23 -FUNC 2580 20 0 std::_Vector_iterator >::operator++() -2580 0 335 23 -2580 1d 336 23 -259d 2 337 23 -259f 1 338 23 -FUNC 25a0 1d 0 std::_Vector_const_iterator >::operator!=(std::_Vector_const_iterator > const &) -25a0 0 202 23 -25a0 1c 203 23 -25bc 1 204 23 -FUNC 25c0 da c std::basic_string,std::allocator >::assign(std::basic_string,std::allocator > const &,unsigned int,unsigned int) -25c0 1 1038 17 -25c1 12 1039 17 -25d3 5 1040 17 -25d8 3 1041 17 -25db a 1042 17 -25e5 2 1043 17 -25e7 4 1045 17 -25eb 17 1046 17 -2602 5 1052 17 -2607 3 1053 17 -260a 21 1047 17 -262b b 1049 17 -2636 13 1047 17 -2649 5 1052 17 -264e 3 1053 17 -2651 7 1047 17 -2658 5 1052 17 -265d 3 1053 17 -2660 22 1049 17 -2682 10 1050 17 -2692 5 1052 17 -2697 3 1053 17 -FUNC 26a0 27 4 std::basic_string,std::allocator >::assign(char const *) -26a0 1 1069 17 -26a1 23 1070 17 -26c4 3 1071 17 -FUNC 26d0 4a 8 std::basic_string,std::allocator >::_Tidy(bool,unsigned int) -26d0 0 2066 17 -26d0 f 2067 17 -26df 6 2069 17 -26e5 a 2072 17 -26ef d 2073 17 -26fc a 2074 17 -2706 11 2077 17 -2717 3 2078 17 -FUNC 2720 e 0 std::basic_string,std::allocator >::_Myptr() -2720 0 2092 17 -2720 9 2093 17 -2729 1 2094 17 -272a 3 2093 17 -272d 1 2094 17 -FUNC 2730 5 4 std::_String_val >::_String_val >(std::allocator) -2730 2 471 17 -2732 3 472 17 -FUNC 2740 5 4 std::_String_val >::_String_val >(std::_String_val > const &) -2740 2 477 17 -2742 3 484 17 -FUNC 2750 3 0 std::allocator::allocator() -2750 2 120 19 -2752 1 122 19 -FUNC 2760 b 0 std::basic_string,std::allocator >::assign(std::basic_string,std::allocator > const &) -2760 0 1032 17 -2760 a 1033 17 -276a 1 1034 17 -FUNC 2770 ef c std::basic_string,std::allocator >::assign(std::basic_string,std::allocator > const &,unsigned int,unsigned int) -2770 1 1038 17 -2771 12 1039 17 -2783 5 1040 17 -2788 3 1041 17 -278b a 1042 17 -2795 2 1043 17 -2797 4 1045 17 -279b 17 1046 17 -27b2 5 1052 17 -27b7 3 1053 17 -27ba 24 1047 17 -27de b 1049 17 -27e9 13 1047 17 -27fc 5 1052 17 -2801 3 1053 17 -2804 9 1047 17 -280d 5 1052 17 -2812 3 1053 17 -2815 2f 1049 17 -2844 13 1050 17 -2857 5 1052 17 -285c 3 1053 17 -FUNC 2860 2b 4 std::basic_string,std::allocator >::assign(wchar_t const *) -2860 1 1069 17 -2861 27 1070 17 -2888 3 1071 17 -FUNC 2890 4f 8 std::basic_string,std::allocator >::_Tidy(bool,unsigned int) -2890 0 2066 17 -2890 f 2067 17 -289f 6 2069 17 -28a5 a 2072 17 -28af 10 2073 17 -28bf a 2074 17 -28c9 13 2077 17 -28dc 3 2078 17 -FUNC 28e0 e 0 std::basic_string,std::allocator >::_Myptr() -28e0 0 2092 17 -28e0 9 2093 17 -28e9 1 2094 17 -28ea 3 2093 17 -28ed 1 2094 17 -FUNC 28f0 5 4 std::_String_val >::_String_val >(std::allocator) -28f0 2 471 17 -28f2 3 472 17 -FUNC 2900 3 0 std::allocator::allocator() -2900 2 120 19 -2902 1 122 19 -FUNC 2910 13 0 std::vector >::capacity() -2910 0 621 23 -2910 9 622 23 -2919 1 623 23 -291a 8 622 23 -2922 1 623 23 -FUNC 2930 86 c std::vector >::insert(std::_Vector_iterator >,google_breakpad::ExceptionHandler * const &) -2930 3 852 23 -2933 3e 853 23 -2971 11 854 23 -2982 2a 855 23 -29ac a 856 23 -FUNC 29c0 23 0 std::vector >::_Buy(unsigned int) -29c0 0 1066 23 -29c0 8 1070 23 -29c8 5 1071 23 -29cd a 1074 23 -29d7 3 1075 23 -29da 6 1076 23 -29e0 2 1078 23 -29e2 1 1079 23 -FUNC 29f0 1 0 std::vector >::_Destroy(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *) -29f0 0 1082 23 -29f0 1 1084 23 -FUNC 2a00 26 0 std::vector >::_Tidy() -2a00 0 1087 23 -2a00 7 1088 23 -2a07 9 1096 23 -2a10 15 1098 23 -2a25 1 1099 23 -FUNC 2a30 23 0 std::vector >::_Ufill(google_breakpad::ExceptionHandler * *,unsigned int,google_breakpad::ExceptionHandler * const &) -2a30 0 1207 23 -2a30 1f 1208 23 -2a4f 3 1209 23 -2a52 1 1210 23 -FUNC 2a60 76 0 std::vector >::_Xran() -2a60 23 1218 23 -2a83 53 1219 23 -FUNC 2ae0 3 4 std::_Vector_val >::_Vector_val >(std::allocator) -2ae0 0 412 23 -2ae0 3 413 23 -FUNC 2af0 1 0 std::allocator::allocator() -2af0 0 120 19 -2af0 1 122 19 -FUNC 2b00 21 0 std::_Vector_iterator >::_Vector_iterator >(google_breakpad::ExceptionHandler * *,std::_Container_base const *) -2b00 1e 314 23 -2b1e 3 315 23 -FUNC 2b30 32 4 std::_Vector_iterator >::operator+(int) -2b30 1 367 23 -2b31 2 368 23 -2b33 26 369 23 -2b59 9 370 23 -FUNC 2b70 2f 0 std::_Vector_iterator >::operator-(int) -2b70 1 378 23 -2b71 2 379 23 -2b73 25 380 23 -2b98 7 381 23 -FUNC 2ba0 20 0 std::_Vector_const_iterator >::operator*() -2ba0 0 92 23 -2ba0 a 103 23 -2baa f 104 23 -2bb9 3 107 23 -2bbc 1 108 23 -2bbd 2 107 23 -2bbf 1 108 23 -FUNC 2bc0 20 0 std::_Vector_const_iterator >::operator++() -2bc0 0 116 23 -2bc0 a 117 23 -2bca f 118 23 -2bd9 4 119 23 -2bdd 2 120 23 -2bdf 1 121 23 -FUNC 2be0 1d 0 std::_Vector_const_iterator >::operator==(std::_Vector_const_iterator > const &) -2be0 0 190 23 -2be0 f 195 23 -2bef d 198 23 -2bfc 1 199 23 -FUNC 2c00 c1 8 std::basic_string,std::allocator >::assign(char const *,unsigned int) -2c00 5 1056 17 -2c05 2d 1057 17 -2c32 1a 1058 17 -2c4c 4 1066 17 -2c50 25 1060 17 -2c75 c 1062 17 -2c81 f 1060 17 -2c90 8 1065 17 -2c98 3 1066 17 -2c9b e 1062 17 -2ca9 10 1063 17 -2cb9 5 1065 17 -2cbe 3 1066 17 -FUNC 2cd0 83 8 std::basic_string,std::allocator >::erase(unsigned int,unsigned int) -2cd0 1 1240 17 -2cd1 d 1241 17 -2cde 5 1242 17 -2ce3 d 1243 17 -2cf0 2 1244 17 -2cf2 4 1245 17 -2cf6 3c 1248 17 -2d32 8 1249 17 -2d3a 12 1250 17 -2d4c 4 1252 17 -2d50 3 1253 17 -FUNC 2d60 1f 4 std::basic_string,std::allocator >::_Eos(unsigned int) -2d60 0 2030 17 -2d60 14 2031 17 -2d74 3 2032 17 -2d77 5 2031 17 -2d7c 3 2032 17 -FUNC 2d80 bc 8 std::basic_string,std::allocator >::_Grow(unsigned int,bool) -2d80 1 2036 17 -2d81 c 2037 17 -2d8d 5 2038 17 -2d92 7 2039 17 -2d99 c 2040 17 -2da5 a 2046 17 -2daf 3 2047 17 -2db2 d 2041 17 -2dbf 39 2043 17 -2df8 10 2046 17 -2e08 3 2047 17 -2e0b 4 2044 17 -2e0f b 2045 17 -2e1a c 2046 17 -2e26 3 2047 17 -2e29 6 2045 17 -2e2f a 2046 17 -2e39 3 2047 17 -FUNC 2e40 e 0 std::basic_string,std::allocator >::_Myptr() -2e40 0 2087 17 -2e40 9 2088 17 -2e49 1 2089 17 -2e4a 3 2088 17 -2e4d 1 2089 17 -FUNC 2e50 5 4 std::allocator::allocator(std::allocator const &) -2e50 2 124 19 -2e52 3 126 19 -FUNC 2e60 e 8 std::allocator::deallocate(char *,unsigned int) -2e60 0 140 19 -2e60 b 141 19 -2e6b 3 142 19 -FUNC 2e70 da 8 std::basic_string,std::allocator >::assign(wchar_t const *,unsigned int) -2e70 4 1056 17 -2e74 31 1057 17 -2ea5 1d 1058 17 -2ec2 3 1066 17 -2ec5 28 1060 17 -2eed d 1062 17 -2efa 10 1060 17 -2f0a a 1065 17 -2f14 3 1066 17 -2f17 18 1062 17 -2f2f 14 1063 17 -2f43 4 1065 17 -2f47 3 1066 17 -FUNC 2f50 97 8 std::basic_string,std::allocator >::erase(unsigned int,unsigned int) -2f50 1 1240 17 -2f51 d 1241 17 -2f5e 5 1242 17 -2f63 d 1243 17 -2f70 2 1244 17 -2f72 4 1245 17 -2f76 4d 1248 17 -2fc3 8 1249 17 -2fcb 15 1250 17 -2fe0 4 1252 17 -2fe4 3 1253 17 -FUNC 2ff0 4 0 std::basic_string,std::allocator >::size() -2ff0 0 1636 17 -2ff0 3 1637 17 -2ff3 1 1638 17 -FUNC 3000 23 4 std::basic_string,std::allocator >::_Eos(unsigned int) -3000 0 2030 17 -3000 16 2031 17 -3016 3 2032 17 -3019 7 2031 17 -3020 3 2032 17 -FUNC 3030 c7 8 std::basic_string,std::allocator >::_Grow(unsigned int,bool) -3030 1 2036 17 -3031 f 2037 17 -3040 5 2038 17 -3045 7 2039 17 -304c c 2040 17 -3058 a 2046 17 -3062 3 2047 17 -3065 d 2041 17 -3072 3c 2043 17 -30ae 12 2046 17 -30c0 3 2047 17 -30c3 4 2044 17 -30c7 b 2045 17 -30d2 d 2046 17 -30df 3 2047 17 -30e2 8 2045 17 -30ea a 2046 17 -30f4 3 2047 17 -FUNC 3100 e 0 std::basic_string,std::allocator >::_Myptr() -3100 0 2087 17 -3100 9 2088 17 -3109 1 2089 17 -310a 3 2088 17 -310d 1 2089 17 -FUNC 3110 5 4 std::allocator::allocator(std::allocator const &) -3110 2 124 19 -3112 3 126 19 -FUNC 3120 e 8 std::allocator::deallocate(wchar_t *,unsigned int) -3120 0 140 19 -3120 b 141 19 -312b 3 142 19 -FUNC 3130 6 0 std::vector >::max_size() -3130 0 707 23 -3130 5 708 23 -3135 1 709 23 -FUNC 3140 208 8 std::vector >::_Insert_n(std::_Vector_iterator >,unsigned int,google_breakpad::ExceptionHandler * const &) -3140 6 1117 23 -3146 2 1125 23 -3148 1c 1126 23 -3164 1c 1130 23 -3180 5 1131 23 -3185 1b 1132 23 -31a0 23 1135 23 -31c3 17 1136 23 -31da 19 1137 23 -31f3 7 1138 23 -31fa 25 1143 23 -321f 7 1144 23 -3226 1e 1145 23 -3244 13 1152 23 -3257 4 1153 23 -325b 9 1156 23 -3264 7 1163 23 -326b a 1164 23 -3275 3 1165 23 -3278 a 1204 23 -3282 13 1167 23 -3295 17 1170 23 -32ac 1a 1174 23 -32c6 7 1180 23 -32cd 16 1187 23 -32e3 a 1204 23 -32ed 2a 1193 23 -3317 e 1200 23 -3325 19 1202 23 -333e a 1204 23 -FUNC 3350 7c 0 std::vector >::_Xlen() -3350 29 1213 23 -3379 53 1214 23 -FUNC 33d0 1 0 std::allocator::allocator(std::allocator const &) -33d0 0 124 19 -33d0 1 126 19 -FUNC 33e0 8 0 std::allocator::deallocate(google_breakpad::ExceptionHandler * *,unsigned int) -33e0 0 140 19 -33e0 7 141 19 -33e7 1 142 19 -FUNC 33f0 56 0 std::allocator::allocate(unsigned int) -33f0 3 145 19 -33f3 16 146 19 -3409 4 147 19 -340d 39 146 19 -FUNC 3450 32 4 std::_Vector_iterator >::operator+=(int) -3450 0 361 23 -3450 2c 362 23 -347c 3 363 23 -347f 3 364 23 -FUNC 3490 28 0 std::_Vector_iterator >::operator-=(int) -3490 0 373 23 -3490 27 374 23 -34b7 1 375 23 -FUNC 34c0 19 0 std::_Vector_iterator >::operator-(std::_Vector_const_iterator > const &) -34c0 0 384 23 -34c0 18 385 23 -34d8 1 386 23 -FUNC 34e0 21 0 std::_Vector_const_iterator >::_Vector_const_iterator >(google_breakpad::ExceptionHandler * *,std::_Container_base const *) -34e0 0 77 23 -34e0 19 79 23 -34f9 2 80 23 -34fb 3 81 23 -34fe 3 82 23 -FUNC 3510 19 4 std::length_error::length_error(std::length_error const &) -FUNC 3530 7 0 std::_Ranit::_Ranit() -FUNC 3540 6 0 std::basic_string,std::allocator >::max_size() -3540 0 1641 17 -3540 5 1643 17 -3545 1 1644 17 -FUNC 3550 171 8 std::basic_string,std::allocator >::_Copy(unsigned int,unsigned int) -3550 30 2000 17 -3580 8 2001 17 -3588 5 2002 17 -358d 2 2003 17 -358f 2 2004 17 -3591 1f 2005 17 -35b0 3 2006 17 -35b3 2 2009 17 -35b5 18 2010 17 -35cd 2 2019 17 -35cf 30 2010 17 -35ff 3 2012 17 -3602 19 2014 17 -361b c 2019 17 -3627 7 2021 17 -362e 20 2022 17 -364e 12 2023 17 -3660 1c 2026 17 -367c 14 2027 17 -3690 15 2016 17 -36a5 1c 2017 17 -FUNC 36d0 39 4 std::basic_string,std::allocator >::_Inside(char const *) -36d0 1 2050 17 -36d1 2b 2052 17 -36fc 3 2055 17 -36ff 4 2056 17 -3703 3 2053 17 -3706 3 2056 17 -FUNC 3710 6 0 std::basic_string,std::allocator >::max_size() -3710 0 1641 17 -3710 5 1643 17 -3715 1 1644 17 -FUNC 3720 17b 8 std::basic_string,std::allocator >::_Copy(unsigned int,unsigned int) -3720 30 2000 17 -3750 8 2001 17 -3758 8 2002 17 -3760 2 2003 17 -3762 2 2004 17 -3764 1f 2005 17 -3783 3 2006 17 -3786 2 2009 17 -3788 1b 2010 17 -37a3 2 2019 17 -37a5 30 2010 17 -37d5 3 2012 17 -37d8 19 2014 17 -37f1 c 2019 17 -37fd 7 2021 17 -3804 24 2022 17 -3828 12 2023 17 -383a 20 2026 17 -385a 14 2027 17 -386e 17 2016 17 -3885 16 2017 17 -FUNC 38a0 3a 4 std::basic_string,std::allocator >::_Inside(wchar_t const *) -38a0 1 2050 17 -38a1 2c 2052 17 -38cd 3 2055 17 -38d0 4 2056 17 -38d4 3 2053 17 -38d7 3 2056 17 -FUNC 38e0 6 0 std::allocator::max_size() -38e0 0 165 19 -38e0 5 167 19 -38e5 1 168 19 -FUNC 38f0 32 4 std::_Vector_const_iterator >::operator+=(int) -38f0 0 146 23 -38f0 a 147 23 -38fa 1a 148 23 -3914 5 150 23 -3919 3 151 23 -391c 3 152 23 -391f 3 153 23 -FUNC 3930 19 0 std::_Vector_const_iterator >::operator-(std::_Vector_const_iterator > const &) -3930 0 173 23 -3930 f 178 23 -393f 9 181 23 -3948 1 182 23 -FUNC 3950 56 4 std::allocator::allocate(unsigned int) -3950 0 145 19 -3950 16 146 19 -3966 6 147 19 -396c 3a 146 19 -FUNC 39b0 4 0 std::allocator::max_size() -39b0 0 165 19 -39b0 3 167 19 -39b3 1 168 19 -FUNC 39c0 59 4 std::allocator::allocate(unsigned int) -39c0 0 145 19 -39c0 19 146 19 -39d9 6 147 19 -39df 3a 146 19 -FUNC 3a20 6 0 std::allocator::max_size() -3a20 0 165 19 -3a20 5 167 19 -3a25 1 168 19 -FUNC 3a30 21 10 std::_Traits_helper::copy_s >(char *,unsigned int,char const *,unsigned int) -3a30 0 581 70 -3a30 20 582 70 -3a50 1 583 70 -FUNC 3a60 27 10 std::_Traits_helper::copy_s >(wchar_t *,unsigned int,wchar_t const *,unsigned int) -3a60 0 581 70 -3a60 26 582 70 -3a86 1 583 70 -FUNC 3a90 24 0 stdext::unchecked_copy(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *) -3a90 0 3407 65 -3a90 23 3409 65 -3ab3 1 3410 65 -FUNC 3ac0 1 0 std::_Destroy_range >(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::allocator &) -3ac0 0 225 19 -3ac0 1 227 19 -FUNC 3ad0 15 0 stdext::unchecked_uninitialized_fill_n >(google_breakpad::ExceptionHandler * *,unsigned int,google_breakpad::ExceptionHandler * const &,std::allocator &) -3ad0 0 914 24 -3ad0 14 916 24 -3ae4 1 917 24 -FUNC 3af0 21 10 std::_Traits_helper::move_s >(char *,unsigned int,char const *,unsigned int) -3af0 0 608 70 -3af0 20 609 70 -3b10 1 610 70 -FUNC 3b20 27 10 std::_Traits_helper::move_s >(wchar_t *,unsigned int,wchar_t const *,unsigned int) -3b20 0 608 70 -3b20 26 609 70 -3b46 1 610 70 -FUNC 3b50 22 0 std::vector >::_Umove(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *) -3b50 0 1109 23 -3b50 21 1112 23 -3b71 1 1113 23 -FUNC 3b80 10 0 std::fill(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * const &) -3b80 0 2976 65 -3b80 f 2977 65 -3b8f 1 2978 65 -FUNC 3b90 25 0 stdext::_Unchecked_move_backward(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *) -3b90 0 3497 65 -3b90 24 3499 65 -3bb4 1 3500 65 -FUNC 3bc0 4f 0 std::_Allocate(unsigned int,google_breakpad::ExceptionHandler * *) -3bc0 0 37 19 -3bc0 f 40 19 -3bcf 2c 41 19 -3bfb 10 44 19 -3c0b 4 45 19 -FUNC 3c10 54 8 std::_Allocate(unsigned int,char *) -3c10 0 37 19 -3c10 b 38 19 -3c1b 2 39 19 -3c1d 9 44 19 -3c26 4 45 19 -3c2a c 40 19 -3c36 2e 41 19 -FUNC 3c70 57 8 std::_Allocate(unsigned int,wchar_t *) -3c70 0 37 19 -3c70 b 38 19 -3c7b 2 39 19 -3c7d c 44 19 -3c89 4 45 19 -3c8d c 40 19 -3c99 2e 41 19 -FUNC 3cd0 19 4 std::bad_alloc::bad_alloc(std::bad_alloc const &) -FUNC 3cf0 7 0 std::_Char_traits_cat >() -3cf0 1 568 70 -3cf1 4 570 70 -3cf5 2 571 70 -FUNC 3d00 21 14 std::_Traits_helper::copy_s >(char *,unsigned int,char const *,unsigned int,std::_Secure_char_traits_tag) -3d00 0 589 70 -3d00 20 590 70 -3d20 1 591 70 -FUNC 3d30 7 0 std::_Char_traits_cat >() -3d30 1 568 70 -3d31 4 570 70 -3d35 2 571 70 -FUNC 3d40 27 14 std::_Traits_helper::copy_s >(wchar_t *,unsigned int,wchar_t const *,unsigned int,std::_Secure_char_traits_tag) -3d40 0 589 70 -3d40 26 590 70 -3d66 1 591 70 -FUNC 3d70 3 0 std::_Checked_base(google_breakpad::ExceptionHandler * * &) -3d70 0 1009 65 -3d70 2 1011 65 -3d72 1 1012 65 -FUNC 3d80 1 0 std::_Iter_random(google_breakpad::ExceptionHandler * * const &,google_breakpad::ExceptionHandler * * const &) -3d80 0 839 65 -3d80 1 844 65 -FUNC 3d90 7 0 std::_Ptr_cat(google_breakpad::ExceptionHandler * * &,google_breakpad::ExceptionHandler * * &) -3d90 1 1329 65 -3d91 4 1331 65 -3d95 2 1332 65 -FUNC 3da0 15 4 std::_Copy_opt(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::random_access_iterator_tag,std::_Scalar_ptr_iterator_tag,std::_Range_checked_iterator_tag) -3da0 0 2288 65 -3da0 d 2300 65 -3dad 7 2301 65 -3db4 1 2302 65 -FUNC 3dc0 1 4 std::_Destroy_range >(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::allocator &,std::_Scalar_ptr_iterator_tag) -3dc0 0 242 19 -3dc0 1 243 19 -FUNC 3dd0 15 8 std::_Uninit_fill_n >(google_breakpad::ExceptionHandler * *,unsigned int,google_breakpad::ExceptionHandler * const &,std::allocator &,std::_Scalar_ptr_iterator_tag,std::_Range_checked_iterator_tag) -3dd0 0 415 24 -3dd0 14 416 24 -3de4 1 417 24 -FUNC 3df0 21 14 std::_Traits_helper::move_s >(char *,unsigned int,char const *,unsigned int,std::_Secure_char_traits_tag) -3df0 0 616 70 -3df0 20 617 70 -3e10 1 618 70 -FUNC 3e20 27 14 std::_Traits_helper::move_s >(wchar_t *,unsigned int,wchar_t const *,unsigned int,std::_Secure_char_traits_tag) -3e20 0 616 70 -3e20 26 617 70 -3e46 1 618 70 -FUNC 3e50 22 0 stdext::_Unchecked_uninitialized_move >(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::allocator &) -3e50 0 843 24 -3e50 21 845 24 -3e71 1 846 24 -FUNC 3e80 10 0 std::_Fill(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * const &) -3e80 0 2946 65 -3e80 6 2948 65 -3e86 9 2949 65 -3e8f 1 2950 65 -FUNC 3e90 7 0 std::_Move_cat(google_breakpad::ExceptionHandler * * const &) -3e90 1 1046 65 -3e91 4 1048 65 -3e95 2 1049 65 -FUNC 3ea0 25 c std::_Move_backward_opt(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::random_access_iterator_tag,std::_Undefined_move_tag,std::_Range_checked_iterator_tag) -3ea0 0 2546 65 -3ea0 24 2548 65 -3ec4 1 2549 65 -FUNC 3ed0 3 4 std::_Checked_base(google_breakpad::ExceptionHandler * * &,std::_Unchanged_checked_iterator_base_type_tag) -3ed0 0 992 65 -3ed0 2 993 65 -3ed2 1 994 65 -FUNC 3ee0 15 0 stdext::unchecked_fill_n(google_breakpad::ExceptionHandler * *,unsigned int,google_breakpad::ExceptionHandler * const &) -3ee0 0 3523 65 -3ee0 14 3524 65 -3ef4 1 3525 65 -FUNC 3f00 22 8 std::_Uninit_move,std::_Undefined_move_tag>(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::allocator &,std::_Undefined_move_tag,std::_Range_checked_iterator_tag) -3f00 0 205 24 -3f00 21 206 24 -3f21 1 207 24 -FUNC 3f30 13 0 std::_Copy_backward_opt(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::random_access_iterator_tag,std::_Scalar_ptr_iterator_tag,std::_Range_checked_iterator_tag) -3f30 0 2492 65 -3f30 10 2506 65 -3f40 2 2507 65 -3f42 1 2508 65 -FUNC 3f50 1 0 std::_Iter_cat(google_breakpad::ExceptionHandler * * const &) -3f50 0 798 65 -3f50 1 801 65 -FUNC 3f60 15 8 std::_Fill_n(google_breakpad::ExceptionHandler * *,unsigned int,google_breakpad::ExceptionHandler * const &,std::random_access_iterator_tag,std::_Range_checked_iterator_tag) -3f60 0 3040 65 -3f60 14 3044 65 -3f74 1 3045 65 -FUNC 3f80 22 0 stdext::unchecked_uninitialized_copy >(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::allocator &) -3f80 0 803 24 -3f80 21 805 24 -3fa1 1 806 24 -FUNC 3fb0 15 4 std::_Fill_n(google_breakpad::ExceptionHandler * *,unsigned int,google_breakpad::ExceptionHandler * const &,std::_Range_checked_iterator_tag) -3fb0 0 2986 65 -3fb0 5 2987 65 -3fb5 f 2988 65 -3fc4 1 2989 65 -FUNC 3fd0 15 4 std::_Uninit_copy >(google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,google_breakpad::ExceptionHandler * *,std::allocator &,std::_Scalar_ptr_iterator_tag,std::_Range_checked_iterator_tag) -3fd0 0 144 24 -3fd0 d 150 24 -3fdd 7 151 24 -3fe4 1 152 24 -FUNC 3ff0 13 4 vswprintf -3ff0 0 50 147 -3ff0 12 51 147 -4002 1 52 147 -FUNC 4010 ae 4 google_breakpad::GUIDString::GUIDToWString(_GUID *) -4010 12 43 126 -4022 51 51 126 -4073 3a 52 126 -40ad 11 53 126 -FUNC 40c0 ae 4 google_breakpad::GUIDString::GUIDToSymbolServerWString(_GUID *) -40c0 12 56 126 -40d2 51 64 126 -4123 3a 65 126 -415d 11 66 126 -FUNC 4170 40 4 std::basic_string,std::allocator >::basic_string,std::allocator >(wchar_t const *) -4170 0 650 143 -4170 3a 652 143 -41aa 6 653 143 -FUNC 41b0 86 8 main -41b0 13 63 178 -41c3 38 64 178 -41fb 5 65 178 -4200 d 66 178 -420d 1b 67 178 -4228 e 68 178 -FUNC 4240 41 18 `anonymous namespace'::callback -4240 3 45 178 -4243 8 46 178 -424b 11 47 178 -425c 2 48 178 -425e d 49 178 -426b 11 51 178 -427c 3 53 178 -427f 2 54 178 -FUNC 4290 18 0 `anonymous namespace'::CrashFunction -4290 4 56 178 -4294 7 57 178 -429b 9 58 178 -42a4 4 59 178 -FUNC 42ae 18 4 std::invalid_argument::invalid_argument(std::basic_string,std::allocator > const &) -42ae 12 82 298 -42c0 6 83 298 -FUNC 42c6 b 0 std::invalid_argument::~invalid_argument() -42c6 6 86 298 -42cc 5 87 298 -FUNC 42d1 22 0 std::invalid_argument::`vector deleting destructor'(unsigned int) -FUNC 42f3 3f 0 std::_String_base::_Xlen() -42f3 c 12 291 -42ff 33 13 291 -FUNC 4332 3f 0 std::_String_base::_Xran() -4332 c 17 291 -433e 33 18 291 -FUNC 4371 3f 0 std::_String_base::_Xinvarg() -4371 c 22 291 -437d 33 23 291 -FUNC 43b0 18 4 std::invalid_argument::invalid_argument(std::invalid_argument const &) -FUNC 43c8 af 4 printf -43c8 c 49 1601 -43d4 2b 54 1601 -43ff 14 58 1601 -4413 3 59 1601 -4416 10 61 1601 -4426 18 63 1601 -443e 11 65 1601 -444f c 68 1601 -445b 3 72 1601 -445e 6 73 1601 -4464 13 69 1601 -FUNC 4477 16 8 _printf_l -4477 0 80 1601 -4477 15 85 1601 -448c 1 86 1601 -FUNC 448d 16 8 _printf_s_l -448d 0 94 1601 -448d 15 99 1601 -44a2 1 100 1601 -FUNC 44a3 14 4 printf_s -44a3 0 106 1601 -44a3 13 111 1601 -44b6 1 112 1601 -FUNC 44b7 16 8 _printf_p_l -44b7 0 119 1601 -44b7 15 124 1601 -44cc 1 125 1601 -FUNC 44cd 14 4 _printf_p -44cd 0 131 1601 -44cd 13 136 1601 -44e0 1 137 1601 -FUNC 44e1 25 4 _set_printf_count_output -44e1 0 154 1601 -44e1 6 155 1601 -44e7 1e 156 1601 -4505 1 158 1601 -FUNC 4506 16 0 _get_printf_count_output -4506 0 167 1601 -4506 15 168 1601 -451b 1 169 1601 -FUNC 451c f 0 __security_check_cookie -451c 0 52 4397 -451c 6 55 4397 -4522 2 56 4397 -4524 2 57 4397 -4526 5 59 4397 -FUNC 452b 62 4 _flush -452b 2 142 1704 -452d 25 152 1704 -4552 16 154 1704 -4568 7 158 1704 -456f 6 159 1704 -4575 2 161 1704 -4577 4 162 1704 -457b 4 163 1704 -457f 3 167 1704 -4582 7 168 1704 -4589 3 170 1704 -458c 1 171 1704 -FUNC 458d 42 4 _fflush_nolock -458d 1 98 1704 -458e 8 102 1704 -4596 8 103 1704 -459e 1 116 1704 -459f b 106 1704 -45aa 4 108 1704 -45ae 1 116 1704 -45af 8 112 1704 -45b7 13 113 1704 -45ca 1 116 1704 -45cb 3 115 1704 -45ce 1 116 1704 -FUNC 45cf da 4 flsall -45cf c 228 1704 -45db 5 230 1704 -45e0 3 231 1704 -45e3 8 233 1704 -45eb 3 234 1704 -45ee 11 236 1704 -45ff 14 238 1704 -4613 9 246 1704 -461c 6 248 1704 -4622 10 254 1704 -4632 5 256 1704 -4637 c 262 1704 -4643 3 266 1704 -4646 2 268 1704 -4648 a 269 1704 -4652 c 275 1704 -465e 3 276 1704 -4661 8 281 1704 -4669 3 236 1704 -466c 5 281 1704 -4671 11 282 1704 -4682 c 288 1704 -468e 4 292 1704 -4692 3 293 1704 -4695 2 292 1704 -4697 3 295 1704 -469a 6 296 1704 -46a0 9 289 1704 -FUNC 46a9 53 4 fflush -46a9 c 57 1704 -46b5 7 62 1704 -46bc 9 63 1704 -46c5 9 65 1704 -46ce 3 67 1704 -46d1 c 68 1704 -46dd c 70 1704 -46e9 3 74 1704 -46ec 6 75 1704 -46f2 a 71 1704 -FUNC 46fc 9 0 _flushall -46fc 0 193 1704 -46fc 8 194 1704 -4704 1 195 1704 -FUNC 4705 6 0 __iob_func -4705 0 53 2087 -4705 5 54 2087 -470a 1 55 2087 -FUNC 470b b1 0 __initstdio -470b 0 113 2087 -470b d 122 2087 -4718 7 123 2087 -471f 4 124 2087 -4723 7 125 2087 -472a 13 134 2087 -473d 19 137 2087 -4756 4 138 2087 -475a 1 163 2087 -475b e 145 2087 -4769 11 146 2087 -477a b 148 2087 -4785 24 151 2087 -47a9 2 158 2087 -47ab d 148 2087 -47b8 3 162 2087 -47bb 1 163 2087 -FUNC 47bc 20 0 __endstdio -47bc 0 191 2087 -47bc 5 193 2087 -47c1 9 196 2087 -47ca 5 197 2087 -47cf c 198 2087 -47db 1 199 2087 -FUNC 47dc 3c 4 _lock_file -47dc 1 221 2087 -47dd 15 226 2087 -47f2 10 231 2087 -4802 9 233 2087 -480b 1 242 2087 -480c b 241 2087 -4817 1 242 2087 -FUNC 4818 2e 8 _lock_file2 -4818 0 264 2087 -4818 9 269 2087 -4821 9 274 2087 -482a c 276 2087 -4836 1 285 2087 -4837 e 284 2087 -4845 1 285 2087 -FUNC 4846 36 4 _unlock_file -4846 0 306 2087 -4846 14 311 2087 -485a 7 317 2087 -4861 f 318 2087 -4870 1 327 2087 -4871 a 326 2087 -487b 1 327 2087 -FUNC 487c 2a 8 _unlock_file2 -487c 0 349 2087 -487c 7 354 2087 -4883 d 360 2087 -4890 a 361 2087 -489a 1 370 2087 -489b a 369 2087 -48a5 1 370 2087 -FUNC 48a6 16 4 wcslen -48a6 0 41 731 -48a6 4 42 731 -48aa a 44 731 -48b4 7 46 731 -48bb 1 47 731 -FUNC 48bc 5 4 operator delete(void *) -48bc 0 20 5184 -48bc 5 23 5184 -FUNC 48c1 30 8 _JumpToContinuation(void *,EHRegistrationNode *) -48c1 5 77 5627 -48c6 9 84 5627 -48cf 7 93 5627 -48d6 2 94 5627 -48d8 6 95 5627 -48de 3 100 5627 -48e1 3 101 5627 -48e4 3 102 5627 -48e7 3 103 5627 -48ea 2 104 5627 -48ec 5 106 5627 -FUNC 48f1 7 8 _CallMemberFunction0(void *,void *) -48f1 0 118 5627 -48f1 1 120 5627 -48f2 1 121 5627 -48f3 3 122 5627 -48f6 2 123 5627 -FUNC 48f8 7 c _CallMemberFunction1(void *,void *,void *) -48f8 0 139 5627 -48f8 1 141 5627 -48f9 1 142 5627 -48fa 3 143 5627 -48fd 2 144 5627 -FUNC 48ff 7 10 _CallMemberFunction2(void *,void *,void *,int) -48ff 0 161 5627 -48ff 1 163 5627 -4900 1 164 5627 -4901 3 165 5627 -4904 2 166 5627 -FUNC 4906 52 8 _UnwindNestedFrames(EHRegistrationNode *,EHExceptionRecord *) -4906 8 218 5627 -490e 7 232 5627 -4915 3 233 5627 -4918 7 236 5627 -491f 10 237 5627 -492f f 241 5627 -493e 7 247 5627 -4945 3 248 5627 -4948 2 249 5627 -494a 7 250 5627 -4951 7 256 5627 -FUNC 4958 36 10 __CxxFrameHandler -4958 0 287 5627 -4958 1 295 5627 -4959 2 296 5627 -495b 3 297 5627 -495e 1 298 5627 -495f 1 299 5627 -4960 1 300 5627 -4961 1 301 5627 -4962 3 306 5627 -4965 1f 311 5627 -4984 1 316 5627 -4985 1 317 5627 -4986 1 318 5627 -4987 3 319 5627 -498a 2 320 5627 -498c 1 321 5627 -498d 1 322 5627 -FUNC 498e 36 10 __CxxFrameHandler3 -498e 0 341 5627 -498e 1 349 5627 -498f 2 350 5627 -4991 3 351 5627 -4994 1 352 5627 -4995 1 353 5627 -4996 1 354 5627 -4997 1 355 5627 -4998 3 360 5627 -499b 1f 365 5627 -49ba 1 370 5627 -49bb 1 371 5627 -49bc 1 372 5627 -49bd 3 373 5627 -49c0 2 374 5627 -49c2 1 375 5627 -49c3 1 376 5627 -FUNC 49c4 36 10 __CxxFrameHandler2 -49c4 0 391 5627 -49c4 1 399 5627 -49c5 2 400 5627 -49c7 3 401 5627 -49ca 1 402 5627 -49cb 1 403 5627 -49cc 1 404 5627 -49cd 1 405 5627 -49ce 3 410 5627 -49d1 1f 415 5627 -49f0 1 420 5627 -49f1 1 421 5627 -49f2 1 422 5627 -49f3 3 423 5627 -49f6 2 424 5627 -49f8 1 425 5627 -49f9 1 426 5627 -FUNC 49fa 1a 4 __CxxLongjmpUnwind -49fa 0 443 5627 -49fa 17 449 5627 -4a11 3 452 5627 -FUNC 4a14 30 10 CatchGuardHandler -4a14 1 545 5627 -4a15 1 551 5627 -4a16 e 557 5627 -4a24 1f 567 5627 -4a43 1 572 5627 -FUNC 4a44 d5 1c _CallSETranslator(EHExceptionRecord *,EHRegistrationNode *,void *,void *,_s_FuncInfo const *,int,EHRegistrationNode *) -4a44 7 637 5627 -4a4b 9 642 5627 -4a54 5 644 5627 -4a59 3 645 5627 -4a5c 2 646 5627 -4a5e 8 648 5627 -4a66 4 656 5627 -4a6a 7 657 5627 -4a71 d 658 5627 -4a7e 6 659 5627 -4a84 6 660 5627 -4a8a 6 661 5627 -4a90 6 662 5627 -4a96 4 663 5627 -4a9a 4 664 5627 -4a9e 4 669 5627 -4aa2 3 675 5627 -4aa5 3 676 5627 -4aa8 6 681 5627 -4aae 3 682 5627 -4ab1 3 683 5627 -4ab4 6 684 5627 -4aba 7 690 5627 -4ac1 6 692 5627 -4ac7 6 693 5627 -4acd e 697 5627 -4adb e 701 5627 -4ae9 4 707 5627 -4aed 6 715 5627 -4af3 7 724 5627 -4afa 2 725 5627 -4afc 3 726 5627 -4aff 2 727 5627 -4b01 7 728 5627 -4b08 2 731 5627 -4b0a 3 737 5627 -4b0d 6 738 5627 -4b13 3 744 5627 -4b16 3 745 5627 -FUNC 4b19 9d 10 TranslatorGuardHandler -4b19 5 770 5627 -4b1e 1 776 5627 -4b1f e 782 5627 -4b2d b 784 5627 -4b38 a 786 5627 -4b42 5 790 5627 -4b47 2 792 5627 -4b49 2a 796 5627 -4b73 9 798 5627 -4b7c b 802 5627 -4b87 1b 811 5627 -4ba2 3 818 5627 -4ba5 3 819 5627 -4ba8 3 820 5627 -4bab 3 821 5627 -4bae 2 822 5627 -4bb0 3 826 5627 -4bb3 3 828 5627 -FUNC 4bb6 73 14 _GetRangeOfTrysToCheck(_s_FuncInfo const *,int,int,unsigned int *,unsigned int *) -4bb6 7 848 5627 -4bbd 6 849 5627 -4bc3 6 850 5627 -4bc9 2 851 5627 -4bcb 2 852 5627 -4bcd a 855 5627 -4bd7 1d 859 5627 -4bf4 3 860 5627 -4bf7 3 861 5627 -4bfa 3 862 5627 -4bfd 6 854 5627 -4c03 6 866 5627 -4c09 5 867 5627 -4c0e e 869 5627 -4c1c b 871 5627 -4c27 2 872 5627 -FUNC 4c29 28 8 _CreateFrameInfo -4c29 0 889 5627 -4c29 b 890 5627 -4c34 e 891 5627 -4c42 b 892 5627 -4c4d 3 893 5627 -4c50 1 894 5627 -FUNC 4c51 21 4 _IsExceptionObjectToBeDestroyed -4c51 0 907 5627 -4c51 d 910 5627 -4c5e 8 911 5627 -4c66 7 910 5627 -4c6d 1 915 5627 -4c6e 1 916 5627 -4c6f 2 912 5627 -4c71 1 916 5627 -FUNC 4c72 4c 4 _FindAndUnlinkFrame -4c72 1 926 5627 -4c73 11 927 5627 -4c84 f 928 5627 -4c93 1 944 5627 -4c94 d 931 5627 -4ca1 7 935 5627 -4ca8 9 933 5627 -4cb1 5 943 5627 -4cb6 7 936 5627 -4cbd 1 944 5627 -FUNC 4cbe 5e 14 _CallCatchBlock2(EHRegistrationNode *,_s_FuncInfo const *,void *,int,unsigned long) -4cbe 6 485 5627 -4cc4 e 493 5627 -4cd2 c 495 5627 -4cde 11 500 5627 -4cef 6 503 5627 -4cf5 3 504 5627 -4cf8 3 505 5627 -4cfb 6 506 5627 -4d01 e 512 5627 -4d0f 3 518 5627 -4d12 6 519 5627 -4d18 2 524 5627 -4d1a 2 525 5627 -FUNC 4d1c 4a 8 _CxxThrowException -4d1c 6 95 5939 -4d22 15 117 5939 -4d37 3 118 5939 -4d3a 9 134 5939 -4d43 5 136 5939 -4d48 7 138 5939 -4d4f 13 159 5939 -4d62 4 161 5939 -FUNC 4d66 19 0 std::bad_alloc::bad_alloc() -4d66 15 382 5121 -4d7b 4 383 5121 -FUNC 4d7f 6a 4 operator new(unsigned int) -4d7f 6 57 5123 -4d85 2 59 5123 -4d87 d 60 5123 -4d94 d 59 5123 -4da1 2 67 5123 -4da3 27 62 5123 -4dca 1f 63 5123 -FUNC 4de9 f 4 type_info::name(__type_info_node *) -4de9 0 44 5873 -4de9 c 45 5873 -4df5 3 46 5873 -FUNC 4df8 e 0 type_info::~type_info() -4df8 0 49 5873 -4df8 d 50 5873 -4e05 1 51 5873 -FUNC 4e06 1c 0 type_info::`scalar deleting destructor'(unsigned int) -FUNC 4e22 f 4 type_info::_name_internal_method(__type_info_node *) -4e22 0 54 5873 -4e22 c 55 5873 -4e2e 3 56 5873 -FUNC 4e31 8 0 type_info::_type_info_dtor_internal_method() -4e31 0 59 5873 -4e31 7 60 5873 -4e38 1 61 5873 -FUNC 4e39 1b 4 type_info::operator==(type_info const &) -4e39 0 89 5873 -4e39 18 90 5873 -4e51 3 91 5873 -FUNC 4e54 1c 4 type_info::operator!=(type_info const &) -4e54 0 98 5873 -4e54 19 99 5873 -4e6d 3 100 5873 -FUNC 4e70 1f 4 type_info::before(type_info const &) -4e70 0 103 5873 -4e70 1c 104 5873 -4e8c 3 105 5873 -FUNC 4e8f 4 0 type_info::raw_name() -4e8f 0 108 5873 -4e8f 3 109 5873 -4e92 1 110 5873 -FUNC 4e93 b 4 type_info::type_info(type_info const &) -4e93 8 113 5873 -4e9b 3 123 5873 -FUNC 4e9e 5 4 type_info::operator=(type_info const &) -4e9e 2 127 5873 -4ea0 3 135 5873 -FUNC 4ea3 11 0 std::exception::exception() -4ea3 2 68 5916 -4ea5 4 69 5916 -4ea9 a 70 5916 -4eb3 1 71 5916 -FUNC 4eb4 4e 4 std::exception::exception(char const * const &) -4eb4 1 77 5916 -4eb5 14 78 5916 -4ec9 9 80 5916 -4ed2 6 81 5916 -4ed8 9 82 5916 -4ee1 c 84 5916 -4eed 2 87 5916 -4eef 4 89 5916 -4ef3 7 91 5916 -4efa 8 92 5916 -FUNC 4f02 18 8 std::exception::exception(char const * const &,int) -4f02 2 98 5916 -4f04 c 99 5916 -4f10 7 100 5916 -4f17 3 101 5916 -FUNC 4f1a 58 4 std::exception::exception(std::exception const &) -4f1a 1 107 5916 -4f1b 13 108 5916 -4f2e 2 109 5916 -4f30 a 111 5916 -4f3a 9 113 5916 -4f43 6 114 5916 -4f49 9 115 5916 -4f52 d 117 5916 -4f5f 2 120 5916 -4f61 4 122 5916 -4f65 2 125 5916 -4f67 4 126 5916 -4f6b 7 127 5916 -FUNC 4f72 56 4 std::exception::operator=(std::exception const &) -4f72 1 133 5916 -4f73 c 134 5916 -4f7f 6 136 5916 -4f85 2 137 5916 -4f87 9 139 5916 -4f90 9 141 5916 -4f99 6 144 5916 -4f9f 9 146 5916 -4fa8 d 148 5916 -4fb5 2 151 5916 -4fb7 4 153 5916 -4fbb 2 156 5916 -4fbd 3 157 5916 -4fc0 5 159 5916 -4fc5 3 160 5916 -FUNC 4fc8 16 0 std::exception::~exception() -4fc8 0 167 5916 -4fc8 c 168 5916 -4fd4 9 169 5916 -4fdd 1 170 5916 -FUNC 4fde d 0 std::exception::what() -4fde 0 180 5916 -4fde 5 181 5916 -4fe3 2 182 5916 -4fe5 5 184 5916 -4fea 1 185 5916 -FUNC 4feb 19 4 std::bad_cast::bad_cast(char const *) -4feb 13 194 5916 -4ffe 6 195 5916 -FUNC 5004 18 4 std::bad_cast::bad_cast(std::bad_cast const &) -5004 12 199 5916 -5016 6 200 5916 -FUNC 501c b 0 std::bad_cast::~bad_cast() -501c 6 203 5916 -5022 5 204 5916 -FUNC 5027 19 4 std::bad_typeid::bad_typeid(char const *) -5027 13 229 5916 -503a 6 230 5916 -FUNC 5040 18 4 std::bad_typeid::bad_typeid(std::bad_typeid const &) -5040 12 234 5916 -5052 6 235 5916 -FUNC 5058 b 0 std::bad_typeid::~bad_typeid() -5058 6 238 5916 -505e 5 239 5916 -FUNC 5063 18 4 std::__non_rtti_object::__non_rtti_object(char const *) -5063 12 248 5916 -5075 6 249 5916 -FUNC 507b 18 4 std::__non_rtti_object::__non_rtti_object(std::__non_rtti_object const &) -507b 12 253 5916 -508d 6 254 5916 -FUNC 5093 b 0 std::__non_rtti_object::~__non_rtti_object() -5093 0 257 5916 -5093 b 258 5916 -FUNC 509e 1c 0 std::exception::`vector deleting destructor'(unsigned int) -FUNC 50ba 22 0 std::bad_cast::`vector deleting destructor'(unsigned int) -FUNC 50dc 22 0 std::bad_typeid::`scalar deleting destructor'(unsigned int) -FUNC 50fe 22 0 std::__non_rtti_object::`scalar deleting destructor'(unsigned int) -FUNC 5120 7b 10 memcpy_s -5120 4 47 1002 -5124 a 48 1002 -512e 4 51 1002 -5132 20 55 1002 -5152 a 56 1002 -515c f 67 1002 -516b 2 68 1002 -516d f 59 1002 -517c 5 61 1002 -5181 13 62 1002 -5194 5 64 1002 -5199 2 69 1002 -FUNC 519b 5b 10 memmove_s -519b 3 46 955 -519e 9 47 955 -51a7 2 50 955 -51a9 20 54 955 -51c9 5 55 955 -51ce 13 56 955 -51e1 f 58 955 -51f0 4 59 955 -51f4 2 60 955 -FUNC 51f6 a 4 _set_osplatform -51f6 a 385 2595 -FUNC 5200 a 4 _set_osver -5200 a 386 2595 -FUNC 520a a 4 _set_winver -520a a 387 2595 -FUNC 5214 a 4 _set_winmajor -5214 a 388 2595 -FUNC 521e a 4 _set_winminor -521e a 389 2595 -FUNC 5228 24 4 fast_error_exit -5228 0 375 2608 -5228 9 384 2608 -5231 5 386 2608 -5236 9 388 2608 -523f c 389 2608 -524b 1 390 2608 -FUNC 524c 41 0 check_managed_app -524c 0 413 2608 -524c b 418 2608 -5257 5 422 2608 -525c a 424 2608 -5266 2 425 2608 -5268 9 427 2608 -5271 2 428 2608 -5273 7 433 2608 -527a 2 434 2608 -527c d 437 2608 -5289 1 438 2608 -528a 2 419 2608 -528c 1 438 2608 -FUNC 528d 1b6 0 __tmainCRTStartup -528d c 203 2608 -5299 19 233 2608 -52b2 4 234 2608 -52b6 8 235 2608 -52be a 236 2608 -52c8 2 242 2608 -52ca 7 243 2608 -52d1 3 244 2608 -52d4 4 243 2608 -52d8 9 244 2608 -52e1 2 245 2608 -52e3 6 248 2608 -52e9 6 249 2608 -52ef 6 250 2608 -52f5 9 256 2608 -52fe 9 257 2608 -5307 8 258 2608 -530f 6 259 2608 -5315 d 260 2608 -5322 6 262 2608 -5328 5 263 2608 -532d 6 264 2608 -5333 6 265 2608 -5339 6 266 2608 -533f 8 271 2608 -5347 c 273 2608 -5353 8 274 2608 -535b 9 276 2608 -5364 8 277 2608 -536c 5 286 2608 -5371 4 294 2608 -5375 9 296 2608 -537e 8 297 2608 -5386 b 300 2608 -5391 a 303 2608 -539b 9 305 2608 -53a4 8 306 2608 -53ac 9 307 2608 -53b5 8 308 2608 -53bd 8 310 2608 -53c5 4 311 2608 -53c9 7 312 2608 -53d0 a 326 2608 -53da 18 327 2608 -53f2 6 330 2608 -53f8 6 331 2608 -53fe 5 333 2608 -5403 2 335 2608 -5405 17 336 2608 -541c 6 342 2608 -5422 6 344 2608 -5428 6 345 2608 -542e 5 347 2608 -5433 7 349 2608 -543a 3 351 2608 -543d 6 352 2608 -FUNC 5443 a 0 mainCRTStartup -5443 0 186 2608 -5443 5 193 2608 -5448 5 195 2608 -FUNC 544d a 4 _initp_misc_invarg -544d 0 38 3328 -544d 9 39 3328 -5456 1 40 3328 -FUNC 5457 fc 14 _invoke_watson -5457 1c 111 3328 -5473 6 128 3328 -5479 6 129 3328 -547f 6 130 3328 -5485 3 131 3328 -5488 3 132 3328 -548b 3 133 3328 -548e 7 134 3328 -5495 7 135 3328 -549c 4 136 3328 -54a0 4 137 3328 -54a4 4 138 3328 -54a8 4 139 3328 -54ac 1 140 3328 -54ad 6 141 3328 -54b3 6 147 3328 -54b9 19 148 3328 -54d2 3 150 3328 -54d5 13 163 3328 -54e8 6 168 3328 -54ee 13 169 3328 -5501 6 171 3328 -5507 a 174 3328 -5511 a 176 3328 -551b 8 180 3328 -5523 8 181 3328 -552b 12 184 3328 -553d 16 185 3328 -FUNC 5553 22 4 _set_invalid_parameter_handler -5553 1 207 3328 -5554 b 211 3328 -555f d 212 3328 -556c 5 214 3328 -5571 3 216 3328 -5574 1 217 3328 -FUNC 5575 d 0 _get_invalid_parameter_handler -5575 0 221 3328 -5575 c 225 3328 -5581 1 228 3328 -FUNC 5582 9 14 _invoke_watson(unsigned short const *,unsigned short const *,unsigned short const *,unsigned int,unsigned int) -5582 3 266 3328 -5585 1 274 3328 -5586 5 273 3328 -FUNC 558b 24 14 _invalid_parameter -558b 3 70 3328 -558e b 77 3328 -5599 5 78 3328 -559e 1 89 3328 -559f 2 80 3328 -55a1 8 86 3328 -55a9 1 89 3328 -55aa 5 88 3328 -FUNC 55af 10 0 _invalid_parameter_noinfo -55af 0 98 3328 -55af f 99 3328 -55be 1 100 3328 -FUNC 55bf 9 14 _invalid_parameter(unsigned short const *,unsigned short const *,unsigned short const *,unsigned int,unsigned int) -55bf 3 249 3328 -55c2 1 257 3328 -55c3 5 256 3328 -FUNC 55c8 96 8 _swprintf -55c8 7 122 1564 -55cf 24 128 1564 -55f3 8 133 1564 -55fb 6 138 1564 -5601 22 153 1564 -5623 1d 160 1564 -5640 18 161 1564 -5658 4 163 1564 -565c 2 171 1564 -FUNC 565e 1a c __swprintf_l -565e 0 181 1564 -565e 19 186 1564 -5677 1 188 1564 -FUNC 5678 1c c swprintf_s -5678 0 238 1564 -5678 1b 243 1564 -5693 1 244 1564 -FUNC 5694 1f 10 _snwprintf_s -5694 3 253 1564 -5697 1a 258 1564 -56b1 2 259 1564 -FUNC 56b3 1c c _swprintf_p -56b3 0 267 1564 -56b3 1b 272 1564 -56ce 1 273 1564 -FUNC 56cf 1d 10 _swprintf_s_l -56cf 3 282 1564 -56d2 18 287 1564 -56ea 2 288 1564 -FUNC 56ec 20 14 _snwprintf_s_l -56ec 3 298 1564 -56ef 1b 303 1564 -570a 2 304 1564 -FUNC 570c 1d 10 _swprintf_p_l -570c 3 313 1564 -570f 18 318 1564 -5727 2 319 1564 -FUNC 5729 11 4 _scwprintf -5729 0 347 1564 -5729 10 352 1564 -5739 1 353 1564 -FUNC 573a 11 4 _scwprintf_p -573a 0 359 1564 -573a 10 364 1564 -574a 1 365 1564 -FUNC 574b 16 8 _scwprintf_l -574b 0 372 1564 -574b 15 376 1564 -5760 1 377 1564 -FUNC 5761 16 8 _scwprintf_p_l -5761 0 384 1564 -5761 15 389 1564 -5776 1 390 1564 -FUNC 5777 14f 8 fprintf -5777 c 49 1648 -5783 5 53 1648 -5788 2e 55 1648 -57b6 c 56 1648 -57c2 3 61 1648 -57c5 7 63 1648 -57cc 3 64 1648 -57cf b0 66 1648 -587f 5 67 1648 -5884 8 69 1648 -588c 11 70 1648 -589d a 71 1648 -58a7 c 75 1648 -58b3 3 79 1648 -58b6 6 80 1648 -58bc a 76 1648 -FUNC 58c6 1a c _fprintf_l -58c6 0 88 1648 -58c6 19 93 1648 -58df 1 94 1648 -FUNC 58e0 1a c _fprintf_s_l -58e0 0 102 1648 -58e0 19 107 1648 -58f9 1 108 1648 -FUNC 58fa 18 8 fprintf_s -58fa 0 115 1648 -58fa 17 120 1648 -5911 1 121 1648 -FUNC 5912 1a c _fprintf_p_l -5912 0 129 1648 -5912 19 134 1648 -592b 1 135 1648 -FUNC 592c 18 8 _fprintf_p -592c 0 142 1648 -592c 17 147 1648 -5943 1 148 1648 -FUNC 5944 f6 18 _vswprintf_helper -5944 7 125 1380 -594b 28 130 1380 -5973 2f 133 1380 -59a2 15 143 1380 -59b7 7 146 1380 -59be 2 148 1380 -59c0 6 150 1380 -59c6 13 157 1380 -59d9 5 160 1380 -59de 2 162 1380 -59e0 41 171 1380 -5a21 5 172 1380 -5a26 12 175 1380 -5a38 2 183 1380 -FUNC 5a3a 27 10 _vswprintf_c -5a3a 0 241 1380 -5a3a 1f 242 1380 -5a59 7 243 1380 -5a60 1 244 1380 -FUNC 5a61 28 14 _vswprintf_c_l -5a61 3 253 1380 -5a64 1c 254 1380 -5a80 7 255 1380 -5a87 2 256 1380 -FUNC 5a89 87 14 _vswprintf_s_l -5a89 4 265 1380 -5a8d 25 269 1380 -5ab2 19 270 1380 -5acb 1a 272 1380 -5ae5 4 273 1380 -5ae9 3 275 1380 -5aec 5 278 1380 -5af1 1d 280 1380 -5b0e 2 288 1380 -FUNC 5b10 1b 10 vswprintf_s -5b10 0 296 1380 -5b10 1a 297 1380 -5b2a 1 298 1380 -FUNC 5b2b 107 18 _vsnwprintf_s_l -5b2b 5 308 1380 -5b30 27 313 1380 -5b57 13 314 1380 -5b6a 7 317 1380 -5b71 1b 319 1380 -5b8c 8 323 1380 -5b94 20 324 1380 -5bb4 5 325 1380 -5bb9 a 329 1380 -5bc3 7 331 1380 -5bca 2 333 1380 -5bcc 2 338 1380 -5bce 12 339 1380 -5be0 10 342 1380 -5bf0 a 344 1380 -5bfa a 346 1380 -5c04 2 348 1380 -5c06 4 352 1380 -5c0a 8 356 1380 -5c12 18 358 1380 -5c2a 6 360 1380 -5c30 2 366 1380 -FUNC 5c32 1e 14 _vsnwprintf_s -5c32 3 375 1380 -5c35 19 376 1380 -5c4e 2 377 1380 -FUNC 5c50 27 10 _vswprintf_p -5c50 0 385 1380 -5c50 1f 386 1380 -5c6f 7 387 1380 -5c76 1 388 1380 -FUNC 5c77 28 14 _vswprintf_p_l -5c77 3 397 1380 -5c7a 1c 398 1380 -5c96 7 399 1380 -5c9d 2 400 1380 -FUNC 5c9f 24 4 _amsg_exit -5c9f 0 446 2560 -5c9f 5 449 2560 -5ca4 9 450 2560 -5cad b 451 2560 -5cb8 a 452 2560 -5cc2 1 453 2560 -FUNC 5cc3 26 4 __crtCorExitProcess -5cc3 0 650 2560 -5cc3 b 654 2560 -5cce 4 655 2560 -5cd2 c 656 2560 -5cde 4 657 2560 -5ce2 6 658 2560 -5ce8 1 668 2560 -FUNC 5ce9 15 4 __crtExitProcess -5ce9 0 673 2560 -5ce9 a 674 2560 -5cf3 b 683 2560 -FUNC 5cfe 9 0 _lockexit -5cfe 0 733 2560 -5cfe 8 734 2560 -5d06 1 735 2560 -FUNC 5d07 9 0 _unlockexit -5d07 0 759 2560 -5d07 8 760 2560 -5d0f 1 761 2560 -FUNC 5d10 18 4 _initterm -5d10 3 841 2560 -5d13 2 855 2560 -5d15 6 853 2560 -5d1b 2 854 2560 -5d1d 3 855 2560 -5d20 7 848 2560 -5d27 1 857 2560 -FUNC 5d28 20 8 _initterm_e -5d28 1 890 2560 -5d29 c 899 2560 -5d35 6 904 2560 -5d3b 2 905 2560 -5d3d 3 906 2560 -5d40 7 899 2560 -5d47 1 910 2560 -FUNC 5d48 37 4 _get_osplatform -5d48 0 929 2560 -5d48 27 931 2560 -5d6f 1 939 2560 -5d70 9 934 2560 -5d79 2 936 2560 -5d7b 3 938 2560 -5d7e 1 939 2560 -FUNC 5d7f 3c 4 _get_osver -5d7f 0 958 2560 -5d7f 27 960 2560 -5da6 1 968 2560 -5da7 8 963 2560 -5daf 8 965 2560 -5db7 3 967 2560 -5dba 1 968 2560 -FUNC 5dbb 3c 4 _get_winver -5dbb 0 987 2560 -5dbb 27 989 2560 -5de2 1 997 2560 -5de3 8 992 2560 -5deb 8 994 2560 -5df3 3 996 2560 -5df6 1 997 2560 -FUNC 5df7 3c 4 _get_winmajor -5df7 0 1016 2560 -5df7 27 1018 2560 -5e1e 1 1026 2560 -5e1f 8 1021 2560 -5e27 8 1023 2560 -5e2f 3 1025 2560 -5e32 1 1026 2560 -FUNC 5e33 3c 4 _get_winminor -5e33 0 1045 2560 -5e33 27 1047 2560 -5e5a 1 1055 2560 -5e5b 8 1050 2560 -5e63 8 1052 2560 -5e6b 3 1054 2560 -5e6e 1 1055 2560 -FUNC 5e6f 37 4 _get_wpgmptr -5e6f 0 1074 2560 -5e6f 27 1076 2560 -5e96 1 1085 2560 -5e97 9 1080 2560 -5ea0 2 1082 2560 -5ea2 3 1084 2560 -5ea5 1 1085 2560 -FUNC 5ea6 37 4 _get_pgmptr -5ea6 0 1104 2560 -5ea6 27 1106 2560 -5ecd 1 1115 2560 -5ece 9 1110 2560 -5ed7 2 1112 2560 -5ed9 3 1114 2560 -5edc 1 1115 2560 -FUNC 5edd 92 4 _cinit -5edd 0 263 2560 -5edd 18 273 2560 -5ef5 b 275 2560 -5f00 5 277 2560 -5f05 f 283 2560 -5f14 4 284 2560 -5f18 4 285 2560 -5f1c a 288 2560 -5f26 20 293 2560 -5f46 1a 306 2560 -5f60 c 308 2560 -5f6c 2 312 2560 -5f6e 1 313 2560 -FUNC 5f6f e2 c doexit -5f6f c 499 2560 -5f7b 8 517 2560 -5f83 5 518 2560 -5f88 b 520 2560 -5f93 6 521 2560 -5f99 8 524 2560 -5fa1 5 526 2560 -5fa6 e 542 2560 -5fb4 12 543 2560 -5fc6 5 545 2560 -5fcb b 546 2560 -5fd6 10 551 2560 -5fe6 9 552 2560 -5fef 2 553 2560 -5ff1 10 558 2560 -6001 10 566 2560 -6011 c 584 2560 -601d 6 588 2560 -6023 6 592 2560 -6029 8 594 2560 -6031 8 596 2560 -6039 3 584 2560 -603c 6 585 2560 -6042 9 586 2560 -604b 6 597 2560 -FUNC 6051 11 4 exit -6051 0 397 2560 -6051 10 398 2560 -6061 1 399 2560 -FUNC 6062 11 4 _exit -6062 0 405 2560 -6062 10 406 2560 -6072 1 407 2560 -FUNC 6073 f 0 _cexit -6073 0 412 2560 -6073 e 413 2560 -6081 1 414 2560 -FUNC 6082 f 0 _c_exit -6082 0 419 2560 -6082 e 420 2560 -6090 1 421 2560 -FUNC 6091 4c 0 _init_pointers -6091 1 786 2560 -6092 7 787 2560 -6099 6 789 2560 -609f 6 790 2560 -60a5 6 791 2560 -60ab 6 792 2560 -60b1 6 793 2560 -60b7 6 794 2560 -60bd 6 795 2560 -60c3 6 796 2560 -60c9 13 799 2560 -60dc 1 800 2560 -FUNC 60e0 8b 4 strlen -60e0 0 54 880 -60e0 4 63 880 -60e4 6 64 880 -60ea 2 65 880 -60ec 2 69 880 -60ee 3 70 880 -60f1 2 71 880 -60f3 2 72 880 -60f5 6 73 880 -60fb 2 74 880 -60fd 13 76 880 -6110 2 81 880 -6112 5 82 880 -6117 2 83 880 -6119 3 84 880 -611c 2 85 880 -611e 3 86 880 -6121 5 87 880 -6126 2 88 880 -6128 3 90 880 -612b 2 91 880 -612d 2 92 880 -612f 2 93 880 -6131 2 94 880 -6133 5 95 880 -6138 2 96 880 -613a 5 97 880 -613f 2 98 880 -6141 2 99 880 -6143 3 103 880 -6146 4 104 880 -614a 2 105 880 -614c 1 106 880 -614d 3 108 880 -6150 4 109 880 -6154 2 110 880 -6156 1 111 880 -6157 3 113 880 -615a 4 114 880 -615e 2 115 880 -6160 1 116 880 -6161 3 118 880 -6164 4 119 880 -6168 2 120 880 -616a 1 121 880 -FUNC 616b 33 4 _EH_prolog3 -616b 0 93 5671 -616b 1 101 5671 -616c 7 103 5671 -6173 4 112 5671 -6177 4 113 5671 -617b 1 114 5671 -617c 1 115 5671 -617d 1 116 5671 -617e 2 117 5671 -6180 2 118 5671 -6182 5 131 5671 -6187 2 132 5671 -6189 1 133 5671 -618a 3 134 5671 -618d 7 135 5671 -6194 3 150 5671 -6197 6 151 5671 -619d 1 153 5671 -FUNC 619e 36 4 _EH_prolog3_catch -619e 0 206 5671 -619e 1 214 5671 -619f 7 216 5671 -61a6 4 225 5671 -61aa 4 226 5671 -61ae 1 228 5671 -61af 1 229 5671 -61b0 1 230 5671 -61b1 2 231 5671 -61b3 2 232 5671 -61b5 5 246 5671 -61ba 2 247 5671 -61bc 1 248 5671 -61bd 3 249 5671 -61c0 3 250 5671 -61c3 7 251 5671 -61ca 3 267 5671 -61cd 6 268 5671 -61d3 1 270 5671 -FUNC 61d4 36 4 _EH_prolog3_GS -61d4 0 322 5671 -61d4 1 330 5671 -61d5 7 332 5671 -61dc 4 341 5671 -61e0 4 342 5671 -61e4 1 344 5671 -61e5 1 345 5671 -61e6 1 346 5671 -61e7 2 347 5671 -61e9 2 348 5671 -61eb 5 362 5671 -61f0 2 363 5671 -61f2 1 364 5671 -61f3 3 365 5671 -61f6 3 366 5671 -61f9 7 367 5671 -6200 3 384 5671 -6203 6 385 5671 -6209 1 387 5671 -FUNC 620a 39 4 _EH_prolog3_catch_GS -620a 0 441 5671 -620a 1 449 5671 -620b 7 451 5671 -6212 4 460 5671 -6216 4 461 5671 -621a 1 463 5671 -621b 1 464 5671 -621c 1 465 5671 -621d 2 466 5671 -621f 2 467 5671 -6221 5 482 5671 -6226 2 483 5671 -6228 1 484 5671 -6229 3 485 5671 -622c 3 486 5671 -622f 3 487 5671 -6232 7 488 5671 -6239 3 505 5671 -623c 6 506 5671 -6242 1 508 5671 -FUNC 6243 14 0 _EH_epilog3 -6243 0 534 5671 -6243 3 537 5671 -6246 7 538 5671 -624d 1 539 5671 -624e 1 540 5671 -624f 1 541 5671 -6250 1 542 5671 -6251 1 543 5671 -6252 2 544 5671 -6254 1 545 5671 -6255 1 546 5671 -6256 1 547 5671 -FUNC 6257 f 0 _EH_epilog3_GS -6257 0 575 5671 -6257 3 578 5671 -625a 2 579 5671 -625c 5 580 5671 -6261 5 581 5671 -FUNC 6266 f 0 _EH_epilog3_catch_GS -6266 0 609 5671 -6266 3 612 5671 -6269 2 613 5671 -626b 5 614 5671 -6270 5 615 5671 -FUNC 6275 96 4 _stbuf -6275 1 59 1850 -6276 14 69 1850 -628a 2 70 1850 -628c c 73 1850 -6298 4 74 1850 -629c c 75 1850 -62a8 3 76 1850 -62ab 6 82 1850 -62b1 6 86 1850 -62b7 4 87 1850 -62bb 1e 91 1850 -62d9 3 93 1850 -62dc e 94 1850 -62ea 2 96 1850 -62ec 7 98 1850 -62f3 6 99 1850 -62f9 8 102 1850 -6301 5 104 1850 -6306 1 105 1850 -6307 3 78 1850 -630a 1 105 1850 -FUNC 630b 2f 8 _ftbuf -630b 0 138 1850 -630b 8 146 1850 -6313 c 148 1850 -631f 6 151 1850 -6325 7 152 1850 -632c 4 153 1850 -6330 9 154 1850 -6339 1 166 1850 -FUNC 633a 82 4 _LocaleUpdate::_LocaleUpdate(localeinfo_struct *) -633a 0 261 1343 -633a f 262 1343 -6349 8 264 1343 -6351 5 265 1343 -6356 6 266 1343 -635c 1c 268 1343 -6378 21 269 1343 -6399 9 270 1343 -63a2 4 272 1343 -63a6 4 273 1343 -63aa 2 276 1343 -63ac a 278 1343 -63b6 6 280 1343 -FUNC 63bc e 0 _LocaleUpdate::~_LocaleUpdate() -63bc 0 282 1343 -63bc 6 283 1343 -63c2 7 284 1343 -63c9 1 285 1343 -FUNC 63ca 3 0 _LocaleUpdate::GetLocaleT() -63ca 2 287 1343 -63cc 1 289 1343 -FUNC 63cd 33 0 write_char -63cd 0 2433 1312 -63cd a 2434 1312 -63d7 2 2437 1312 -63d9 21 2442 1312 -63fa 2 2444 1312 -63fc 1 2447 1312 -63fd 2 2446 1312 -63ff 1 2447 1312 -FUNC 6400 24 c write_multi_char -6400 6 2498 1312 -6406 2 2501 1312 -6408 e 2500 1312 -6416 5 2501 1312 -641b 7 2499 1312 -6422 2 2504 1312 -FUNC 6424 4a 4 write_string -6424 0 2563 1312 -6424 12 2564 1312 -6436 6 2566 1312 -643c 2 2567 1312 -643e e 2570 1312 -644c 5 2571 1312 -6451 a 2573 1312 -645b 9 2574 1312 -6464 9 2569 1312 -646d 1 2579 1312 -FUNC 646e d 4 get_int_arg -646e 0 2602 1312 -646e c 2603 1312 -647a 1 2604 1312 -FUNC 647b 10 4 get_int64_arg -647b 0 2644 1312 -647b f 2645 1312 -648a 1 2646 1312 -FUNC 648b e 4 get_short_arg -648b 0 2671 1312 -648b d 2672 1312 -6498 1 2673 1312 -FUNC 6499 994 10 _output_l -6499 1b 975 1312 -64b4 45 1036 1312 -64f9 2d 1031 1312 -6526 b1 1033 1312 -65d7 8 1036 1312 -65df 26 1073 1312 -6605 1d 1075 1312 -6622 8 1076 1312 -662a 18 1131 1312 -6642 13 1173 1312 -6655 3 1174 1312 -6658 5 1175 1312 -665d 1f 1179 1312 -667c 4 1193 1312 -6680 5 1194 1312 -6685 4 1181 1312 -6689 5 1182 1312 -668e 4 1184 1312 -6692 5 1185 1312 -6697 7 1190 1312 -669e 5 1191 1312 -66a3 4 1187 1312 -66a7 5 1196 1312 -66ac 5 1200 1312 -66b1 9 1206 1312 -66ba b 1233 1312 -66c5 4 1235 1312 -66c9 3 1236 1312 -66cc 5 1239 1312 -66d1 10 1241 1312 -66e1 5 1243 1312 -66e6 3 1248 1312 -66e9 5 1249 1312 -66ee 5 1253 1312 -66f3 9 1259 1312 -66fc b 1284 1312 -6707 4 1285 1312 -670b 5 1287 1312 -6710 10 1289 1312 -6720 5 1291 1312 -6725 18 1295 1312 -673d 7 1362 1312 -6744 5 1363 1312 -6749 5 1301 1312 -674e 1 1303 1312 -674f a 1304 1312 -6759 5 1306 1312 -675e 4 1308 1312 -6762 5 1310 1312 -6767 4 1358 1312 -676b 5 1359 1312 -6770 c 1322 1312 -677c 2 1324 1312 -677e f 1325 1312 -678d a 1327 1312 -6797 2 1329 1312 -6799 a 1330 1312 -67a3 5 1332 1312 -67a8 30 1337 1312 -67d8 3 1352 1312 -67db 13 1158 1312 -67ee 11 1160 1312 -67ff 3 1161 1312 -6802 b 1163 1312 -680d b 1166 1312 -6818 5 1167 1312 -681d 32 1378 1312 -684f d 1716 1312 -685c 4 1724 1312 -6860 17 1749 1312 -6877 c 1750 1312 -6883 8 1381 1312 -688b 9 1385 1312 -6894 8 1561 1312 -689c 7 1562 1312 -68a3 d 1584 1312 -68b0 3 1589 1312 -68b3 15 1635 1312 -68c8 4 1636 1312 -68cc 8 1637 1312 -68d4 f 1639 1312 -68e3 1d 1378 1312 -6900 12 1448 1312 -6912 16 1467 1312 -6928 4 1470 1312 -692c 7 1471 1312 -6933 2 1472 1312 -6935 6 1499 1312 -693b 7 1500 1312 -6942 6 1503 1312 -6948 5 1506 1312 -694d 5 1523 1312 -6952 e 1541 1312 -6960 6 1546 1312 -6966 d 1548 1312 -6973 7 1549 1312 -697a 5 1550 1312 -697f 3 1551 1312 -6982 5 1553 1312 -6987 8 1543 1312 -698f 7 1544 1312 -6996 5 1557 1312 -699b 34 1378 1312 -69cf d 1908 1312 -69dc 9 1910 1312 -69e5 8 1668 1312 -69ed d 1688 1312 -69fa 6 1702 1312 -6a00 7 1703 1312 -6a07 2 1704 1312 -6a09 5 1706 1312 -6a0e 7 1708 1312 -6a15 5 1710 1312 -6a1a 4 1864 1312 -6a1e 7 1869 1312 -6a25 c 1933 1312 -6a31 8 1939 1312 -6a39 5 1958 1312 -6a3e 7 1751 1312 -6a45 9 1752 1312 -6a4e 5 1753 1312 -6a53 3 1754 1312 -6a56 9 1756 1312 -6a5f f 1759 1312 -6a6e 2 1760 1312 -6a70 13 1765 1312 -6a83 9 1767 1312 -6a8c e 1809 1312 -6a9a 27 1828 1312 -6ac1 13 1838 1312 -6ad4 15 1840 1312 -6ae9 a 1844 1312 -6af3 15 1846 1312 -6b08 5 1852 1312 -6b0d 7 1853 1312 -6b14 4 1854 1312 -6b18 1 1857 1312 -6b19 5 1859 1312 -6b1e 7 1877 1312 -6b25 3 1887 1312 -6b28 2 1888 1312 -6b2a 1a 1378 1312 -6b44 7 1892 1312 -6b4b 11 1897 1312 -6b5c c 1900 1312 -6b68 7 1901 1312 -6b6f 5 1903 1312 -6b74 5 1961 1312 -6b79 6 1987 1312 -6b7f 14 2026 1312 -6b93 2 2045 1312 -6b95 5 2051 1312 -6b9a 2 2071 1312 -6b9c 3 2074 1312 -6b9f 6 2080 1312 -6ba5 2 2099 1312 -6ba7 5 2105 1312 -6bac f 2128 1312 -6bbb 7 2129 1312 -6bc2 7 2130 1312 -6bc9 c 2136 1312 -6bd5 2 2142 1312 -6bd7 6 2148 1312 -6bdd 7 2149 1312 -6be4 2 2150 1312 -6be6 4 2151 1312 -6bea a 2152 1312 -6bf4 3 2153 1312 -6bf7 6 2157 1312 -6bfd 3 2158 1312 -6c00 6 2163 1312 -6c06 10 2165 1312 -6c16 10 2166 1312 -6c26 c 2168 1312 -6c32 3 2170 1312 -6c35 3 2172 1312 -6c38 2 2173 1312 -6c3a 8 2175 1312 -6c42 1 2176 1312 -6c43 19 2180 1312 -6c5c 9 2181 1312 -6c65 1 2182 1312 -6c66 2 2185 1312 -6c68 6 1640 1312 -6c6e 2 1641 1312 -6c70 4 1640 1312 -6c74 5 1642 1312 -6c79 2 1644 1312 -6c7b 4 1645 1312 -6c7f 8 1646 1312 -6c87 5 1647 1312 -6c8c 6 1648 1312 -6c92 1 1649 1312 -6c93 4 1648 1312 -6c97 6 1650 1312 -6c9d a 2201 1312 -6ca7 7 2204 1312 -6cae 6 2205 1312 -6cb4 4 2207 1312 -6cb8 2 2208 1312 -6cba 4 2210 1312 -6cbe 4 2212 1312 -6cc2 2 2213 1312 -6cc4 4 2215 1312 -6cc8 4 2217 1312 -6ccc 7 2218 1312 -6cd3 9 2224 1312 -6cdc 6 2228 1312 -6ce2 11 2230 1312 -6cf3 11 2234 1312 -6d04 d 2236 1312 -6d11 f 2238 1312 -6d20 d 2243 1312 -6d2d 3 2249 1312 -6d30 3 2250 1312 -6d33 1e 2252 1312 -6d51 9 2253 1312 -6d5a 18 2257 1312 -6d72 2 1690 1312 -6d74 4 2254 1312 -6d78 2 2259 1312 -6d7a d 2260 1312 -6d87 c 2290 1312 -6d93 f 2292 1312 -6da2 6 2297 1312 -6da8 8 2298 1312 -6db0 1e 2299 1312 -6dce 17 1163 1312 -6de5 10 2376 1312 -6df5 38 2377 1312 -FUNC 6e2d 3b 4 _get_errno_from_oserr -6e2d 0 119 6100 -6e2d 6 123 6100 -6e33 f 124 6100 -6e42 8 133 6100 -6e4a 3 134 6100 -6e4d 1 139 6100 -6e4e 7 125 6100 -6e55 1 139 6100 -6e56 11 135 6100 -6e67 1 139 6100 -FUNC 6e68 13 0 _errno -6e68 0 280 6100 -6e68 5 281 6100 -6e6d 4 282 6100 -6e71 5 283 6100 -6e76 1 288 6100 -6e77 3 285 6100 -6e7a 1 288 6100 -FUNC 6e7b 13 0 __doserrno -6e7b 0 293 6100 -6e7b 5 294 6100 -6e80 4 295 6100 -6e84 5 296 6100 -6e89 1 300 6100 -6e8a 3 298 6100 -6e8d 1 300 6100 -FUNC 6e8e 1e 4 _dosmaperr -6e8e 1 110 6100 -6e8f 9 111 6100 -6e98 13 113 6100 -6eab 1 114 6100 -FUNC 6eac 1b 4 _set_errno -6eac 0 157 6100 -6eac 5 158 6100 -6eb1 4 159 6100 -6eb5 3 161 6100 -6eb8 1 168 6100 -6eb9 b 165 6100 -6ec4 2 166 6100 -6ec6 1 168 6100 -FUNC 6ec7 2a 4 _get_errno -6ec7 1 187 6100 -6ec8 1b 189 6100 -6ee3 1 195 6100 -6ee4 9 193 6100 -6eed 3 194 6100 -6ef0 1 195 6100 -FUNC 6ef1 1b 4 _set_doserrno -6ef1 0 213 6100 -6ef1 5 214 6100 -6ef6 4 215 6100 -6efa 3 217 6100 -6efd 1 224 6100 -6efe b 221 6100 -6f09 2 222 6100 -6f0b 1 224 6100 -FUNC 6f0c 2a 4 _get_doserrno -6f0c 1 243 6100 -6f0d 1b 245 6100 -6f28 1 251 6100 -6f29 9 249 6100 -6f32 3 250 6100 -6f35 1 251 6100 -FUNC 6f38 45 0 _SEH_prolog4 -FUNC 6f7d 14 0 _SEH_epilog4 -FUNC 6fa0 24 0 ValidateLocalCookies -FUNC 6fd0 196 10 _except_handler4 -FUNC 7166 90 10 vprintf_helper -7166 c 47 1507 -7172 d 48 1507 -717f 2b 52 1507 -71aa 7 55 1507 -71b1 3 56 1507 -71b4 8 58 1507 -71bc 10 59 1507 -71cc a 60 1507 -71d6 c 63 1507 -71e2 3 67 1507 -71e5 6 68 1507 -71eb 3 63 1507 -71ee 8 64 1507 -FUNC 71f6 1a c _vprintf_l -71f6 0 75 1507 -71f6 19 76 1507 -720f 1 77 1507 -FUNC 7210 1a c _vprintf_s_l -7210 0 84 1507 -7210 19 85 1507 -7229 1 86 1507 -FUNC 722a 1a c _vprintf_p_l -722a 0 93 1507 -722a 19 94 1507 -7243 1 95 1507 -FUNC 7244 18 8 vprintf -7244 0 101 1507 -7244 17 102 1507 -725b 1 103 1507 -FUNC 725c 18 8 vprintf_s -725c 0 109 1507 -725c 17 110 1507 -7273 1 111 1507 -FUNC 7274 18 8 _vprintf_p -7274 0 117 1507 -7274 17 118 1507 -728b 1 119 1507 -FUNC 728c 104 0 __report_gsfailure -728c 9 140 3731 -7295 5 170 3731 -729a 6 171 3731 -72a0 6 172 3731 -72a6 6 173 3731 -72ac 6 174 3731 -72b2 6 175 3731 -72b8 7 176 3731 -72bf 7 177 3731 -72c6 7 178 3731 -72cd 7 179 3731 -72d4 7 180 3731 -72db 7 181 3731 -72e2 1 182 3731 -72e3 6 183 3731 -72e9 3 190 3731 -72ec 5 191 3731 -72f1 3 192 3731 -72f4 5 193 3731 -72f9 3 194 3731 -72fc 5 195 3731 -7301 6 201 3731 -7307 a 204 3731 -7311 a 206 3731 -731b a 285 3731 -7325 a 286 3731 -732f b 293 3731 -733a b 294 3731 -7345 b 297 3731 -7350 8 298 3731 -7358 8 302 3731 -7360 b 304 3731 -736b 9 313 3731 -7374 8 315 3731 -737c 12 319 3731 -738e 2 320 3731 -FUNC 7390 5c6 c _write_nolock -7390 22 95 4777 -73b2 2 106 4777 -73b4 11 108 4777 -73c5 7 109 4777 -73cc 2b 111 4777 -73f7 27 113 4777 -741e 10 116 4777 -742e 33 119 4777 -7461 6 122 4777 -7467 f 126 4777 -7476 1c 143 4777 -7492 5 146 4777 -7497 8 147 4777 -749f 14 148 4777 -74b3 16 152 4777 -74c9 6 153 4777 -74cf 4 157 4777 -74d3 16 160 4777 -74e9 9 153 4777 -74f2 b 163 4777 -74fd 9 164 4777 -7506 11 170 4777 -7517 18 171 4777 -752f 2 173 4777 -7531 14 174 4777 -7545 18 175 4777 -755d 4 181 4777 -7561 2e 205 4777 -758f 21 212 4777 -75b0 6 213 4777 -75b6 8 214 4777 -75be a 222 4777 -75c8 29 229 4777 -75f1 a 230 4777 -75fb 3 232 4777 -75fe 3 233 4777 -7601 2 238 4777 -7603 8 186 4777 -760b 3 191 4777 -760e 9 192 4777 -7617 f 193 4777 -7626 8 240 4777 -762e 13 242 4777 -7641 3 244 4777 -7644 6 251 4777 -764a 3 254 4777 -764d 14 255 4777 -7661 3 257 4777 -7664 12 258 4777 -7676 5 236 4777 -767b e 268 4777 -7689 12 277 4777 -769b f 278 4777 -76aa d 279 4777 -76b7 8 283 4777 -76bf 9 284 4777 -76c8 5 285 4777 -76cd 3 286 4777 -76d0 7 287 4777 -76d7 f 289 4777 -76e6 25 297 4777 -770b 6 299 4777 -7711 16 300 4777 -7727 f 308 4777 -7736 f 314 4777 -7745 b 315 4777 -7750 8 319 4777 -7758 c 320 4777 -7764 6 321 4777 -776a 4 322 4777 -776e c 323 4777 -777a f 325 4777 -7789 25 333 4777 -77ae 6 335 4777 -77b4 1a 336 4777 -77ce 5 344 4777 -77d3 f 359 4777 -77e2 13 361 4777 -77f5 8 365 4777 -77fd b 366 4777 -7808 6 367 4777 -780e a 369 4777 -7818 11 371 4777 -7829 2f 382 4777 -7858 4 384 4777 -785c 25 406 4777 -7881 3 407 4777 -7884 6 412 4777 -788a 9 409 4777 -7893 4 419 4777 -7897 15 423 4777 -78ac 2 428 4777 -78ae 1b 434 4777 -78c9 a 437 4777 -78d3 2 439 4777 -78d5 9 440 4777 -78de a 443 4777 -78e8 7 447 4777 -78ef 8 449 4777 -78f7 b 452 4777 -7902 2 455 4777 -7904 9 456 4777 -790d 2 457 4777 -790f 11 459 4777 -7920 4 460 4777 -7924 b 462 4777 -792f 7 463 4777 -7936 5 464 4777 -793b 5 469 4777 -7940 16 470 4777 -FUNC 7956 dc c _write -7956 c 61 4777 -7962 23 66 4777 -7985 2f 67 4777 -79b4 20 68 4777 -79d4 7 70 4777 -79db 3 72 4777 -79de 9 73 4777 -79e7 14 74 4777 -79fb 2 75 4777 -79fd b 76 4777 -7a08 7 77 4777 -7a0f 4 78 4777 -7a13 c 82 4777 -7a1f 3 86 4777 -7a22 6 87 4777 -7a28 a 83 4777 -FUNC 7a32 2d 4 _fileno -7a32 0 40 2176 -7a32 27 41 2176 -7a59 1 43 2176 -7a5a 4 42 2176 -7a5e 1 43 2176 -FUNC 7a5f e1 4 _commit -7a5f c 39 5043 -7a6b 1b 43 5043 -7a86 28 44 5043 -7aae 20 45 5043 -7ace 7 47 5043 -7ad5 3 48 5043 -7ad8 9 49 5043 -7ae1 14 51 5043 -7af5 9 52 5043 -7afe 2 54 5043 -7b00 3 55 5043 -7b03 5 59 5043 -7b08 a 62 5043 -7b12 b 66 5043 -7b1d 4 67 5043 -7b21 c 72 5043 -7b2d 3 75 5043 -7b30 6 76 5043 -7b36 a 73 5043 -FUNC 7b40 49 0 _mtinitlocks -7b40 2 137 2371 -7b42 7 144 2371 -7b49 11 145 2371 -7b5a 2 146 2371 -7b5c 15 148 2371 -7b71 6 144 2371 -7b77 5 157 2371 -7b7c d 158 2371 -FUNC 7b89 55 0 _mtdeletelocks -7b89 1 188 2371 -7b8a d 194 2371 -7b97 c 196 2371 -7ba3 3 200 2371 -7ba6 6 206 2371 -7bac f 207 2371 -7bbb 6 215 2371 -7bc1 c 217 2371 -7bcd 10 221 2371 -7bdd 1 224 2371 -FUNC 7bde 15 4 _unlock -7bde 3 371 2371 -7be1 10 375 2371 -7bf1 2 376 2371 -FUNC 7bf3 18 4 _lockerr_exit -7bf3 0 403 2371 -7bf3 c 404 2371 -7bff b 405 2371 -7c0a 1 406 2371 -FUNC 7c0b c3 4 _mtinitlocknum -7c0b c 259 2371 -7c17 6 261 2371 -7c1d a 269 2371 -7c27 5 270 2371 -7c2c 7 271 2371 -7c33 c 272 2371 -7c3f e 276 2371 -7c4d 4 277 2371 -7c51 e 279 2371 -7c5f b 280 2371 -7c6a 4 281 2371 -7c6e 8 284 2371 -7c76 3 285 2371 -7c79 4 287 2371 -7c7d 11 288 2371 -7c8e 7 289 2371 -7c95 b 290 2371 -7ca0 3 291 2371 -7ca3 2 292 2371 -7ca5 2 293 2371 -7ca7 2 296 2371 -7ca9 7 297 2371 -7cb0 c 300 2371 -7cbc 3 304 2371 -7cbf 6 305 2371 -7cc5 9 301 2371 -FUNC 7cce 31 4 _lock -7cce 3 333 2371 -7cd1 10 338 2371 -7ce1 b 340 2371 -7cec 8 341 2371 -7cf4 9 348 2371 -7cfd 2 349 2371 -FUNC 7cff 240 0 _ioinit -7cff c 111 4958 -7d0b 5 122 4958 -7d10 a 127 4958 -7d1a 7 128 4958 -7d21 f 137 4958 -7d30 6 139 4958 -7d36 5 142 4958 -7d3b 6 143 4958 -7d41 8 145 4958 -7d49 4 146 4958 -7d4d 3 147 4958 -7d50 4 148 4958 -7d54 3 149 4958 -7d57 4 151 4958 -7d5b 4 152 4958 -7d5f 4 153 4958 -7d63 13 145 4958 -7d76 15 161 4958 -7d8b 2 166 4958 -7d8d 3 172 4958 -7d90 6 173 4958 -7d96 b 179 4958 -7da1 5 185 4958 -7da6 f 191 4958 -7db5 9 204 4958 -7dbe 7 205 4958 -7dc5 8 207 4958 -7dcd 4 208 4958 -7dd1 3 209 4958 -7dd4 4 210 4958 -7dd8 4 211 4958 -7ddc 4 212 4958 -7de0 4 213 4958 -7de4 4 214 4958 -7de8 f 207 4958 -7df7 9 185 4958 -7e00 2 284 4958 -7e02 6 197 4958 -7e08 8 221 4958 -7e10 24 234 4958 -7e34 15 236 4958 -7e49 7 237 4958 -7e50 5 238 4958 -7e55 18 241 4958 -7e6d 3 243 4958 -7e70 d 221 4958 -7e7d 2 253 4958 -7e7f b 255 4958 -7e8a c 258 4958 -7e96 6 306 4958 -7e9c 4 262 4958 -7ea0 30 266 4958 -7ed0 2 271 4958 -7ed2 a 277 4958 -7edc 6 278 4958 -7ee2 5 279 4958 -7ee7 4 280 4958 -7eeb 14 284 4958 -7eff 3 286 4958 -7f02 2 288 4958 -7f04 4 297 4958 -7f08 6 298 4958 -7f0e a 253 4958 -7f18 c 313 4958 -7f24 4 315 4958 -7f28 7 128 4958 -7f2f a 129 4958 -7f39 6 316 4958 -FUNC 7f3f 4c 0 _ioterm -7f3f 2 341 4958 -7f41 5 345 4958 -7f46 6 347 4958 -7f4c 8 353 4958 -7f54 9 355 4958 -7f5d 11 356 4958 -7f6e 4 353 4958 -7f72 7 361 4958 -7f79 11 362 4958 -7f8a 1 365 4958 -FUNC 7f8b 21 4 wait_a_bit -7f8b 1 18 5557 -7f8c b 19 5557 -7f97 6 20 5557 -7f9d 8 21 5557 -7fa5 3 22 5557 -7fa8 3 23 5557 -7fab 1 24 5557 -FUNC 7fac 10 4 _set_malloc_crt_max_wait -7fac 0 32 5557 -7fac f 34 5557 -7fbb 1 36 5557 -FUNC 7fbc 40 4 _malloc_crt -7fbc 2 39 5557 -7fbe 2 40 5557 -7fc0 b 44 5557 -7fcb d 45 5557 -7fd8 18 46 5557 -7ff0 7 47 5557 -7ff7 4 50 5557 -7ffb 1 51 5557 -FUNC 7ffc 48 8 _calloc_crt -7ffc 2 54 5557 -7ffe 2 55 5557 -8000 14 61 5557 -8014 c 62 5557 -8020 18 63 5557 -8038 7 64 5557 -803f 4 67 5557 -8043 1 68 5557 -FUNC 8044 4b 8 _realloc_crt -8044 2 71 5557 -8046 2 72 5557 -8048 f 76 5557 -8057 14 77 5557 -806b 18 78 5557 -8083 7 79 5557 -808a 4 82 5557 -808e 1 83 5557 -FUNC 808f 50 c _recalloc_crt -808f 2 86 5557 -8091 2 87 5557 -8093 16 91 5557 -80a9 12 92 5557 -80bb 18 94 5557 -80d3 7 95 5557 -80da 4 100 5557 -80de 1 101 5557 -FUNC 80df 8 0 _malloc_crt_fastcall -80df 0 105 5557 -80df 7 106 5557 -80e6 1 107 5557 -FUNC 80e7 a 0 _calloc_crt_fastcall -80e7 0 110 5557 -80e7 9 111 5557 -80f0 1 112 5557 -FUNC 80f1 a 0 _realloc_crt_fastcall -80f1 0 115 5557 -80f1 9 116 5557 -80fa 1 117 5557 -FUNC 80fb 8e 4 free -80fb c 42 5515 -8107 7 47 5515 -810e 9 53 5515 -8117 8 57 5515 -811f 4 58 5515 -8123 e 60 5515 -8131 9 61 5515 -813a c 64 5515 -8146 6 68 5515 -814c 3 70 5515 -814f 2 106 5515 -8151 9 65 5515 -815a f 109 5515 -8169 4 110 5515 -816d 16 112 5515 -8183 6 115 5515 -FUNC 8189 9f 0 _fcloseall -8189 c 43 1792 -8195 5 44 1792 -819a 8 47 1792 -81a2 3 48 1792 -81a5 e 50 1792 -81b3 10 52 1792 -81c3 14 57 1792 -81d7 3 58 1792 -81da 5 63 1792 -81df 12 65 1792 -81f1 e 66 1792 -81ff 8 67 1792 -8207 3 50 1792 -820a c 73 1792 -8216 3 77 1792 -8219 6 78 1792 -821f 9 74 1792 -FUNC 8228 19 4 std::bad_exception::bad_exception(char const *) -8228 13 351 6035 -823b 6 352 6035 -FUNC 8241 b 0 std::bad_exception::~bad_exception() -8241 6 355 6035 -8247 5 356 6035 -FUNC 824c 22 0 std::bad_exception::`vector deleting destructor'(unsigned int) -FUNC 826e 5c c __TypeMatch -826e 2 999 6034 -8270 13 1001 6034 -8283 1b 1008 6034 -829e 4 1009 6034 -82a2 22 1023 6034 -82c4 5 1002 6034 -82c9 1 1024 6034 -FUNC 82ca 44 4 __FrameUnwindFilter -82ca 0 1035 6034 -82ca 6 1038 6034 -82d0 e 1040 6034 -82de 13 1076 6034 -82f1 e 1068 6034 -82ff c 1070 6034 -830b 2 1072 6034 -830d 1 1078 6034 -FUNC 830e e1 10 __FrameUnwindToState -830e c 1105 6034 -831a 1b 1112 6034 -8335 c 1114 6034 -8341 4 1115 6034 -8345 5 1119 6034 -834a f 1123 6034 -8359 f 1126 6034 -8368 7 1128 6034 -836f 6 1131 6034 -8375 3 1138 6034 -8378 12 1145 6034 -838a 6 1149 6034 -8390 d 1151 6034 -839d d 1153 6034 -83aa 3 1155 6034 -83ad 2 1156 6034 -83af c 1157 6034 -83bb a 1169 6034 -83c5 3 1176 6034 -83c8 6 1180 6034 -83ce 6 1157 6034 -83d4 e 1158 6034 -83e2 d 1159 6034 -FUNC 83ef 45 0 ExFilterRethrow -83ef 0 1533 6034 -83ef 2 1535 6034 -83f1 2f 1538 6034 -8420 e 1542 6034 -842e 2 1543 6034 -8430 1 1547 6034 -8431 2 1545 6034 -8433 1 1547 6034 -FUNC 8434 54 8 __DestructExceptionObject -8434 c 1791 6034 -8440 f 1794 6034 -844f e 1801 6034 -845d 4 1803 6034 -8461 9 1810 6034 -846a 7 1814 6034 -8471 6 1824 6034 -8477 c 1815 6034 -8483 5 1819 6034 -FUNC 8488 25 8 __AdjustPointer -8488 0 1842 6034 -8488 d 1843 6034 -8495 6 1845 6034 -849b 3 1850 6034 -849e e 1852 6034 -84ac 1 1856 6034 -FUNC 84ad 13 0 __uncaught_exception() -84ad 0 1867 6034 -84ad 12 1868 6034 -84bf 1 1869 6034 -FUNC 84c0 b3 8 __CxxRegisterExceptionObject -84c0 0 2077 6034 -84c0 14 2085 6034 -84d4 26 2087 6034 -84fa 6 2088 6034 -8500 b 2090 6034 -850b b 2093 6034 -8516 e 2094 6034 -8524 e 2095 6034 -8532 b 2096 6034 -853d 2 2097 6034 -853f 4 2098 6034 -8543 4 2099 6034 -8547 c 2101 6034 -8553 10 2102 6034 -8563 c 2103 6034 -856f 3 2104 6034 -8572 1 2105 6034 -FUNC 8573 4c 4 __CxxDetectRethrow -8573 0 2117 6034 -8573 6 2119 6034 -8579 2 2120 6034 -857b 2 2121 6034 -857d 2f 2122 6034 -85ac c 2123 6034 -85b8 3 2124 6034 -85bb 1 2127 6034 -85bc 2 2126 6034 -85be 1 2127 6034 -FUNC 85bf 139 8 __CxxUnregisterExceptionObject -85bf 1 2139 6034 -85c0 4 2143 6034 -85c4 d 2145 6034 -85d1 6 2146 6034 -85d7 85 2149 6034 -865c 14 2150 6034 -8670 5b 2152 6034 -86cb c 2153 6034 -86d7 e 2154 6034 -86e5 12 2155 6034 -86f7 1 2157 6034 -FUNC 86f8 4 0 __CxxQueryExceptionSize -86f8 0 2167 6034 -86f8 3 2168 6034 -86fb 1 2169 6034 -FUNC 86fc 32 8 __CxxCallUnwindDtor -86fc c 2189 6034 -8708 4 2190 6034 -870c 6 2192 6034 -8712 2 2193 6034 -8714 d 2194 6034 -8721 7 2197 6034 -8728 6 2198 6034 -FUNC 872e 33 8 __CxxCallUnwindDelDtor -872e c 2218 6034 -873a 4 2219 6034 -873e 7 2221 6034 -8745 2 2222 6034 -8747 d 2223 6034 -8754 7 2226 6034 -875b 6 2227 6034 -FUNC 8761 32 8 __CxxCallUnwindStdDelDtor -8761 c 2247 6034 -876d 4 2248 6034 -8771 6 2250 6034 -8777 2 2251 6034 -8779 d 2252 6034 -8786 7 2255 6034 -878d 6 2256 6034 -FUNC 8793 3b 14 __CxxCallUnwindVecDtor -8793 c 2282 6034 -879f 4 2283 6034 -87a3 f 2285 6034 -87b2 2 2286 6034 -87b4 d 2287 6034 -87c1 7 2290 6034 -87c8 6 2291 6034 -FUNC 87ce 79 4 IsInExceptionSpec -87ce 6 2302 6034 -87d4 9 2303 6034 -87dd 5 2307 6034 -87e2 f 2323 6034 -87f1 9 2326 6034 -87fa 2 2327 6034 -87fc 10 2328 6034 -880c 26 2335 6034 -8832 4 2337 6034 -8836 c 2323 6034 -8842 3 2343 6034 -8845 2 2344 6034 -FUNC 8847 49 4 CallUnexpected -8847 c 2379 6034 -8853 13 2380 6034 -8866 4 2383 6034 -886a 5 2384 6034 -886f 4 2391 6034 -8873 5 2392 6034 -8878 8 2388 6034 -8880 10 2390 6034 -FUNC 8890 30 0 Is_bad_exception_allowed -8890 2 2399 6034 -8892 8 2400 6034 -889a 1d 2402 6034 -88b7 4 2408 6034 -88bb 1 2409 6034 -88bc 4 2404 6034 -FUNC 88c0 82 8 _is_exception_typeof(type_info const &,_EXCEPTION_POINTERS *) -88c0 1 2416 6034 -88c1 e 2417 6034 -88cf 2 2419 6034 -88d1 9 2422 6034 -88da 2b 2423 6034 -8905 6 2432 6034 -890b 7 2433 6034 -8912 2 2445 6034 -8914 20 2446 6034 -8934 4 2439 6034 -8938 4 2454 6034 -893c 6 2455 6034 -FUNC 8942 19c 18 CallCatchBlock -8942 14 1431 6034 -8956 3 1437 6034 -8959 4 1439 6034 -895d 6 1443 6034 -8963 11 1447 6034 -8974 e 1451 6034 -8982 e 1452 6034 -8990 b 1454 6034 -899b e 1455 6034 -89a9 a 1457 6034 -89b3 3 1458 6034 -89b6 16 1463 6034 -89cc 12 1464 6034 -89de c 1465 6034 -89ea 3 1470 6034 -89ed 15 1471 6034 -8a02 3 1472 6034 -8a05 c 1474 6034 -8a11 11 1476 6034 -8a22 7 1478 6034 -8a29 d 1482 6034 -8a36 b 1486 6034 -8a41 13 1488 6034 -8a54 3 1517 6034 -8a57 6 1518 6034 -8a5d 5 1474 6034 -8a62 6 1488 6034 -8a68 6 1494 6034 -8a6e 9 1497 6034 -8a77 e 1500 6034 -8a85 e 1501 6034 -8a93 3f 1510 6034 -8ad2 c 1511 6034 -FUNC 8ade 17f 10 __BuildCatchObjectHelper -8ade c 1575 6034 -8aea 5 1576 6034 -8aef 2a 1582 6034 -8b19 2 1588 6034 -8b1b 3 1590 6034 -8b1e 2 1588 6034 -8b20 2 1592 6034 -8b22 4 1611 6034 -8b26 3 1614 6034 -8b29 4 1622 6034 -8b2d 4 1615 6034 -8b31 26 1622 6034 -8b57 5 1623 6034 -8b5c 11 1625 6034 -8b6d 5 1628 6034 -8b72 3 1629 6034 -8b75 6 1636 6034 -8b7b 4 1629 6034 -8b7f 20 1636 6034 -8b9f 12 1637 6034 -8bb1 10 1639 6034 -8bc1 4 1641 6034 -8bc5 2 1646 6034 -8bc7 5 1649 6034 -8bcc 18 1654 6034 -8be4 1e 1656 6034 -8c02 2 1660 6034 -8c04 25 1668 6034 -8c29 d 1672 6034 -8c36 2 1677 6034 -8c38 5 1678 6034 -8c3d 7 1681 6034 -8c44 5 1688 6034 -8c49 7 1682 6034 -8c50 5 1684 6034 -8c55 2 1584 6034 -8c57 6 1689 6034 -FUNC 8c5d 91 10 __BuildCatchObject -8c5d c 1712 6034 -8c69 b 1716 6034 -8c74 3 1718 6034 -8c77 2 1720 6034 -8c79 a 1739 6034 -8c83 4 1743 6034 -8c87 1a 1744 6034 -8ca1 1a 1756 6034 -8cbb 2 1757 6034 -8cbd 18 1750 6034 -8cd5 7 1762 6034 -8cdc 6 1769 6034 -8ce2 7 1763 6034 -8ce9 5 1765 6034 -FUNC 8cee 143 10 __CxxExceptionFilter -8cee 3 1973 6034 -8cf1 a 1985 6034 -8cfb 3 2065 6034 -8cfe 2a 1993 6034 -8d28 32 2008 6034 -8d5a 6 2010 6034 -8d60 c 2011 6034 -8d6c 6 2012 6034 -8d72 b 2013 6034 -8d7d f 2040 6034 -8d8c a 2041 6034 -8d96 2 2047 6034 -8d98 1b 2050 6034 -8db3 4 2042 6034 -8db7 2 2050 6034 -8db9 c 2052 6034 -8dc5 6 2053 6034 -8dcb 13 2054 6034 -8dde 2 2055 6034 -8de0 25 1995 6034 -8e05 6 1997 6034 -8e0b e 1999 6034 -8e19 4 2000 6034 -8e1d c 2004 6034 -8e29 6 2005 6034 -8e2f 2 2065 6034 -FUNC 8e31 6c 20 CatchIt -8e31 3 1217 6034 -8e34 6 1233 6034 -8e3a 10 1234 6034 -8e4a 4 1253 6034 -8e4e 6 1254 6034 -8e54 2 1255 6034 -8e56 8 1256 6034 -8e5e e 1259 6034 -8e6c 3 1265 6034 -8e6f 21 1273 6034 -8e90 4 1278 6034 -8e94 7 1280 6034 -8e9b 2 1286 6034 -FUNC 8e9d f2 20 FindHandlerForForeignException -8e9d 6 913 6034 -8ea3 10 920 6034 -8eb3 2a 926 6034 -8edd 23 934 6034 -8f00 e 940 6034 -8f0e 17 945 6034 -8f25 c 948 6034 -8f31 29 954 6034 -8f5a 33 974 6034 -8f8d 2 984 6034 -FUNC 8f8f 356 20 FindHandler -8f8f 6 569 6034 -8f95 20 632 6034 -8fb5 11 634 6034 -8fc6 42 637 6034 -9008 12 639 6034 -901a e 645 6034 -9028 b 646 6034 -9033 16 652 6034 -9049 2a 653 6034 -9073 12 659 6034 -9085 b 661 6034 -9090 5 662 6034 -9095 15 666 6034 -90aa 23 676 6034 -90cd 5 692 6034 -90d2 c 686 6034 -90de 30 688 6034 -910e 2b 698 6034 -9139 d 707 6034 -9146 19 715 6034 -915f c 718 6034 -916b 10 729 6034 -917b 6 735 6034 -9181 3 736 6034 -9184 7 737 6034 -918b 9 740 6034 -9194 2 741 6034 -9196 7 742 6034 -919d 23 750 6034 -91c0 d 737 6034 -91cd 2 676 6034 -91cf 33 774 6034 -9202 3 718 6034 -9205 6 795 6034 -920b a 804 6034 -9215 27 812 6034 -923c f 814 6034 -924b 5 840 6034 -9250 5 841 6034 -9255 b 843 6034 -9260 5 844 6034 -9265 d 846 6034 -9272 6 847 6034 -9278 2 848 6034 -927a 8 849 6034 -9282 14 851 6034 -9296 b 853 6034 -92a1 6 863 6034 -92a7 a 864 6034 -92b1 1c 866 6034 -92cd 16 877 6034 -92e3 2 880 6034 -FUNC 92e5 18 4 std::bad_exception::bad_exception(std::bad_exception const &) -FUNC 92fd e4 20 __InternalCxxFrameHandler -92fd 6 412 6034 -9303 3d 426 6034 -9340 6 432 6034 -9346 6 435 6034 -934c 10 440 6034 -935c 11 479 6034 -936d 2 482 6034 -936f 18 489 6034 -9387 19 499 6034 -93a0 1d 513 6034 -93bd 1c 524 6034 -93d9 6 533 6034 -93df 2 535 6034 -FUNC 93e1 6c 0 _use_encode_pointer -93e1 7 66 2227 -93e8 2 72 2227 -93ea 12 75 2227 -93fc 7 76 2227 -9403 5 78 2227 -9408 7 82 2227 -940f 5 85 2227 -9414 e 91 2227 -9422 1f 93 2227 -9441 4 95 2227 -9445 6 100 2227 -944b 2 101 2227 -FUNC 944d 6e 4 _encode_pointer -944d 1 120 2227 -944e 2b 129 2227 -9479 8 145 2227 -9481 d 133 2227 -948e d 135 2227 -949b c 138 2227 -94a7 4 148 2227 -94ab a 150 2227 -94b5 5 153 2227 -94ba 1 154 2227 -FUNC 94bb 9 0 _encoded_null -94bb 0 173 2227 -94bb 8 174 2227 -94c3 1 175 2227 -FUNC 94c4 6e 4 _decode_pointer -94c4 1 194 2227 -94c5 2b 203 2227 -94f0 8 219 2227 -94f8 d 207 2227 -9505 d 209 2227 -9512 c 212 2227 -951e 4 222 2227 -9522 a 224 2227 -952c 5 227 2227 -9531 1 228 2227 -FUNC 9532 9 4 __crtTlsAlloc -9532 0 240 2227 -9532 6 241 2227 -9538 3 242 2227 -FUNC 953b 15 4 __fls_getvalue -953b 0 258 2227 -953b 12 259 2227 -954d 3 260 2227 -FUNC 9550 6 0 __get_flsindex -9550 0 272 2227 -9550 5 273 2227 -9555 1 274 2227 -FUNC 9556 32 0 __set_flsgetvalue -9556 1 286 2227 -9557 e 288 2227 -9565 4 289 2227 -9569 e 291 2227 -9577 d 292 2227 -9584 3 294 2227 -9587 1 298 2227 -FUNC 9588 19 8 __fls_setvalue -9588 0 315 2227 -9588 16 316 2227 -959e 3 317 2227 -FUNC 95a1 3d 0 _mtterm -95a1 0 473 2227 -95a1 a 480 2227 -95ab f 481 2227 -95ba 7 482 2227 -95c1 a 485 2227 -95cb 7 486 2227 -95d2 7 487 2227 -95d9 5 494 2227 -FUNC 95de bf 8 _initptd -95de c 521 2227 -95ea e 522 2227 -95f8 a 524 2227 -9602 6 525 2227 -9608 4 527 2227 -960c 9 529 2227 -9615 16 532 2227 -962b 10 533 2227 -963b 3 540 2227 -963e 7 544 2227 -9645 7 545 2227 -964c 8 546 2227 -9654 7 547 2227 -965b 8 551 2227 -9663 4 552 2227 -9667 6 553 2227 -966d 4 561 2227 -9671 8 562 2227 -9679 9 563 2227 -9682 c 565 2227 -968e 6 568 2227 -9694 9 566 2227 -FUNC 969d 77 0 _getptd_noexit -969d 2 588 2227 -969f 6 592 2227 -96a5 15 600 2227 -96ba 14 608 2227 -96ce 19 610 2227 -96e7 a 616 2227 -96f1 6 618 2227 -96f7 6 619 2227 -96fd 2 621 2227 -96ff 7 627 2227 -9706 2 628 2227 -9708 8 633 2227 -9710 3 635 2227 -9713 1 636 2227 -FUNC 9714 18 0 _getptd -9714 1 657 2227 -9715 7 658 2227 -971c 4 659 2227 -9720 8 660 2227 -9728 3 662 2227 -972b 1 663 2227 -FUNC 972c 121 4 _freefls -972c c 691 2227 -9738 b 702 2227 -9743 7 703 2227 -974a 7 704 2227 -9751 7 706 2227 -9758 7 707 2227 -975f 7 709 2227 -9766 7 710 2227 -976d 7 712 2227 -9774 7 713 2227 -977b 7 715 2227 -9782 7 716 2227 -9789 7 718 2227 -9790 7 719 2227 -9797 a 721 2227 -97a1 7 722 2227 -97a8 8 724 2227 -97b0 4 725 2227 -97b4 1a 728 2227 -97ce 7 729 2227 -97d5 c 731 2227 -97e1 8 735 2227 -97e9 7 737 2227 -97f0 7 738 2227 -97f7 7 740 2227 -97fe 15 743 2227 -9813 7 744 2227 -981a c 747 2227 -9826 7 751 2227 -982d 8 754 2227 -9835 3 731 2227 -9838 9 732 2227 -9841 3 747 2227 -9844 9 748 2227 -FUNC 984d 69 4 _freeptd -984d 0 778 2227 -984d a 783 2227 -9857 1b 795 2227 -9872 13 796 2227 -9885 16 802 2227 -989b 7 804 2227 -98a2 a 807 2227 -98ac 9 811 2227 -98b5 1 813 2227 -FUNC 98b6 6 0 __threadid -98b6 0 837 2227 -98b6 6 838 2227 -FUNC 98bc 6 0 __threadhandle -98bc 0 844 2227 -98bc 6 845 2227 -FUNC 98c2 184 0 _mtinit -98c2 1 346 2227 -98c3 d 355 2227 -98d0 4 356 2227 -98d4 5 357 2227 -98d9 3 358 2227 -98dc 2 444 2227 -98de e 362 2227 -98ec d 365 2227 -98f9 d 368 2227 -9906 d 371 2227 -9913 2a 372 2227 -993d a 375 2227 -9947 1a 379 2227 -9961 25 388 2227 -9986 5 393 2227 -998b b 400 2227 -9996 10 401 2227 -99a6 10 402 2227 -99b6 18 403 2227 -99ce 7 410 2227 -99d5 2 412 2227 -99d7 1b 418 2227 -99f2 2 420 2227 -99f4 2d 428 2227 -9a21 a 438 2227 -9a2b 6 440 2227 -9a31 6 441 2227 -9a37 5 443 2227 -9a3c 5 430 2227 -9a41 4 389 2227 -9a45 1 444 2227 -FUNC 9a46 39 0 terminate() -9a46 c 94 5983 -9a52 8 107 5983 -9a5a 4 111 5983 -9a5e 4 116 5983 -9a62 2 120 5983 -9a64 2 121 5983 -9a66 7 122 5983 -9a6d 7 127 5983 -9a74 5 135 5983 -9a79 6 136 5983 -FUNC 9a7f 13 0 unexpected() -9a7f 0 149 5983 -9a7f 8 159 5983 -9a87 4 163 5983 -9a8b 2 167 5983 -9a8d 5 173 5983 -FUNC 9a92 37 0 _inconsistency() -9a92 c 187 5983 -9a9e c 196 5983 -9aaa 4 197 5983 -9aae 4 202 5983 -9ab2 2 203 5983 -9ab4 2 204 5983 -9ab6 7 205 5983 -9abd 7 211 5983 -9ac4 5 217 5983 -FUNC 9ac9 11 4 _initp_eh_hooks -9ac9 0 74 5983 -9ac9 10 80 5983 -9ad9 1 81 5983 -FUNC 9ae0 4c c _CallSettingFrame -9ae0 3 48 5665 -9ae3 3 57 5665 -9ae6 1 58 5665 -9ae7 1 59 5665 -9ae8 3 60 5665 -9aeb 3 61 5665 -9aee 3 62 5665 -9af1 3 63 5665 -9af4 1 64 5665 -9af5 3 65 5665 -9af8 3 66 5665 -9afb 3 67 5665 -9afe 5 68 5665 -9b03 1 69 5665 -9b04 1 70 5665 -9b05 2 71 5665 -9b07 1 73 5665 -9b08 1 74 5665 -9b09 2 75 5665 -9b0b 1 76 5665 -9b0c 3 77 5665 -9b0f 1 78 5665 -9b10 2 79 5665 -9b12 6 80 5665 -9b18 2 81 5665 -9b1a 5 82 5665 -9b1f 1 84 5665 -9b20 5 85 5665 -9b25 1 86 5665 -9b26 1 87 5665 -9b27 1 88 5665 -9b28 4 89 5665 -PUBLIC 9b07 0 _NLG_Return -FUNC 9b2c b9 4 _onexit_nolock -9b2c 5 104 3259 -9b31 b 107 3259 -9b3c 13 108 3259 -9b4f 16 112 3259 -9b65 d 122 3259 -9b72 d 127 3259 -9b7f 14 129 3259 -9b93 3 134 3259 -9b96 14 136 3259 -9baa 3 147 3259 -9bad f 149 3259 -9bbc e 156 3259 -9bca c 157 3259 -9bd6 7 159 3259 -9bdd 6 114 3259 -9be3 2 160 3259 -FUNC 9be5 2f 0 __onexitinit -9be5 1 205 3259 -9be6 b 208 3259 -9bf1 9 209 3259 -9bfa e 211 3259 -9c08 4 216 3259 -9c0c 1 221 3259 -9c0d 3 218 3259 -9c10 3 220 3259 -9c13 1 221 3259 -FUNC 9c14 3c 4 _onexit -9c14 c 85 3259 -9c20 5 88 3259 -9c25 4 90 3259 -9c29 c 91 3259 -9c35 c 93 3259 -9c41 3 97 3259 -9c44 6 98 3259 -9c4a 6 94 3259 -FUNC 9c50 12 4 atexit -9c50 0 165 3259 -9c50 11 166 3259 -9c61 1 167 3259 -FUNC 9c62 4f 4 V6_HeapAlloc -9c62 c 27 5425 -9c6e 4 28 5425 -9c72 b 29 5425 -9c7d 8 31 5425 -9c85 4 32 5425 -9c89 a 33 5425 -9c93 c 35 5425 -9c9f 3 39 5425 -9ca2 6 40 5425 -9ca8 9 36 5425 -FUNC 9cb1 75 4 _heap_alloc -9cb1 0 90 5425 -9cb1 9 95 5425 -9cba 5 96 5425 -9cbf 7 97 5425 -9cc6 c 98 5425 -9cd2 a 104 5425 -9cdc 18 105 5425 -9cf4 1 129 5425 -9cf5 a 107 5425 -9cff 9 108 5425 -9d08 2 109 5425 -9d0a 4 121 5425 -9d0e 1 122 5425 -9d0f 6 124 5425 -9d15 10 126 5425 -9d25 1 129 5425 -FUNC 9d26 c3 4 malloc -9d26 1 155 5425 -9d27 16 159 5425 -9d3d 65 163 5425 -9da2 4 168 5425 -9da6 b 172 5425 -9db1 b 179 5425 -9dbc 2 183 5425 -9dbe 7 174 5425 -9dc5 8 193 5425 -9dcd 5 195 5425 -9dd2 1 196 5425 -9dd3 7 185 5425 -9dda b 186 5425 -9de5 3 187 5425 -9de8 1 196 5425 -FUNC 9de9 a 4 _initp_heap_handler -9de9 0 31 5230 -9de9 9 32 5230 -9df2 1 33 5230 -FUNC 9df3 31 4 _set_new_handler(int (*)(unsigned int)) -9df3 1 53 5230 -9df4 7 57 5230 -9dfb b 59 5230 -9e06 b 60 5230 -9e11 f 63 5230 -9e20 3 65 5230 -9e23 1 66 5230 -FUNC 9e24 9 4 _set_new_handler(int) -9e24 0 86 5230 -9e24 8 89 5230 -9e2c 1 90 5230 -FUNC 9e2d d 0 _query_new_handler() -9e2d 0 110 5230 -9e2d c 111 5230 -9e39 1 112 5230 -FUNC 9e3a 22 4 _callnewh -9e3a 0 131 5230 -9e3a b 133 5230 -9e45 10 135 5230 -9e55 3 138 5230 -9e58 1 139 5230 -9e59 2 136 5230 -9e5b 1 139 5230 -FUNC 9e5c 22 18 _invoke_watson_if_error -9e5c 3 754 5850 -9e5f 6 755 5850 -9e65 17 759 5850 -9e7c 2 760 5850 -FUNC 9e7e 70 4 type_info::_Type_info_dtor(type_info *) -9e7e c 62 5815 -9e8a 8 63 5815 -9e92 4 64 5815 -9e96 a 65 5815 -9ea0 d 70 5815 -9ead 4 72 5815 -9eb1 4 74 5815 -9eb5 6 79 5815 -9ebb 7 80 5815 -9ec2 9 94 5815 -9ecb 4 101 5815 -9ecf c 103 5815 -9edb 6 107 5815 -9ee1 2 83 5815 -9ee3 2 72 5815 -9ee5 9 104 5815 -FUNC 9eee f5 8 type_info::_Name_base(type_info const *,__type_info_node *) -9eee c 109 5815 -9efa e 113 5815 -9f08 24 124 5815 -9f2c 7 125 5815 -9f33 16 132 5815 -9f49 2 133 5815 -9f4b 5 132 5815 -9f50 b 136 5815 -9f5b 5 142 5815 -9f60 a 149 5815 -9f6a 4 150 5815 -9f6e 11 157 5815 -9f7f 20 158 5815 -9f9f 5 159 5815 -9fa4 9 165 5815 -9fad 3 166 5815 -9fb0 2 167 5815 -9fb2 7 173 5815 -9fb9 9 180 5815 -9fc2 c 181 5815 -9fce 3 188 5815 -9fd1 6 189 5815 -9fd7 3 181 5815 -9fda 9 182 5815 -FUNC 9fe3 70 4 type_info::_Type_info_dtor_internal(type_info *) -9fe3 c 197 5815 -9fef 8 198 5815 -9ff7 4 199 5815 -9ffb a 200 5815 -a005 d 205 5815 -a012 4 207 5815 -a016 4 209 5815 -a01a 6 214 5815 -a020 7 215 5815 -a027 9 229 5815 -a030 4 236 5815 -a034 c 238 5815 -a040 6 242 5815 -a046 2 218 5815 -a048 2 207 5815 -a04a 9 239 5815 -FUNC a053 31 10 __unDNameHelper -a053 3 249 5815 -a056 7 250 5815 -a05d 7 252 5815 -a064 1e 260 5815 -a082 2 261 5815 -FUNC a084 eb 8 type_info::_Name_base_internal(type_info const *,__type_info_node *) -a084 c 265 5815 -a090 e 269 5815 -a09e 1a 273 5815 -a0b8 7 274 5815 -a0bf 16 281 5815 -a0d5 2 282 5815 -a0d7 5 281 5815 -a0dc b 285 5815 -a0e7 5 291 5815 -a0ec a 298 5815 -a0f6 4 299 5815 -a0fa 11 306 5815 -a10b 20 307 5815 -a12b 5 308 5815 -a130 9 314 5815 -a139 3 315 5815 -a13c 2 316 5815 -a13e 7 322 5815 -a145 9 329 5815 -a14e c 330 5815 -a15a 3 337 5815 -a15d 6 338 5815 -a163 3 330 5815 -a166 9 331 5815 -FUNC a16f 53 4 __clean_type_info_names_internal -a16f c 346 5815 -a17b 8 347 5815 -a183 4 348 5815 -a187 6 352 5815 -a18d 4 354 5815 -a191 3 356 5815 -a194 7 357 5815 -a19b 8 358 5815 -a1a3 4 354 5815 -a1a7 c 359 5815 -a1b3 6 363 5815 -a1b9 9 361 5815 -FUNC a1d0 88 8 strcmp -a1d0 0 65 926 -a1d0 4 73 926 -a1d4 4 74 926 -a1d8 6 76 926 -a1de 2 77 926 -a1e0 2 81 926 -a1e2 2 83 926 -a1e4 2 84 926 -a1e6 2 85 926 -a1e8 2 86 926 -a1ea 3 87 926 -a1ed 2 88 926 -a1ef 2 89 926 -a1f1 2 90 926 -a1f3 3 92 926 -a1f6 3 94 926 -a1f9 2 95 926 -a1fb 2 96 926 -a1fd 2 97 926 -a1ff 3 98 926 -a202 2 99 926 -a204 3 100 926 -a207 3 101 926 -a20a 2 102 926 -a20c 4 103 926 -a210 2 107 926 -a212 2 108 926 -a214 2 115 926 -a216 2 116 926 -a218 3 117 926 -a21b 1 118 926 -a21c 6 122 926 -a222 2 123 926 -a224 2 125 926 -a226 3 126 926 -a229 2 127 926 -a22b 2 128 926 -a22d 3 129 926 -a230 2 130 926 -a232 2 131 926 -a234 6 133 926 -a23a 2 134 926 -a23c 3 139 926 -a23f 3 140 926 -a242 2 141 926 -a244 2 142 926 -a246 2 143 926 -a248 2 144 926 -a24a 3 145 926 -a24d 2 146 926 -a24f 2 147 926 -a251 2 148 926 -a253 3 149 926 -a256 2 150 926 -FUNC a258 65 c strcpy_s -a258 0 13 781 -a258 30 18 781 -a288 c 19 781 -a294 2 21 781 -a296 d 23 781 -a2a3 4 27 781 -a2a7 2 29 781 -a2a9 e 30 781 -a2b7 5 33 781 -a2bc 1 34 781 -FUNC a2c0 7a c memset -a2c0 0 59 934 -a2c0 4 68 934 -a2c4 4 69 934 -a2c8 2 71 934 -a2ca 2 72 934 -a2cc 2 74 934 -a2ce 4 75 934 -a2d2 2 78 934 -a2d4 2 79 934 -a2d6 6 80 934 -a2dc 2 81 934 -a2de 7 82 934 -a2e5 2 83 934 -a2e7 5 85 934 -a2ec 1 91 934 -a2ed 2 92 934 -a2ef 3 94 934 -a2f2 2 95 934 -a2f4 2 97 934 -a2f6 3 98 934 -a2f9 2 99 934 -a2fb 2 101 934 -a2fd 2 103 934 -a2ff 3 104 934 -a302 3 105 934 -a305 2 106 934 -a307 2 110 934 -a309 3 111 934 -a30c 2 113 934 -a30e 2 115 934 -a310 3 117 934 -a313 2 119 934 -a315 2 122 934 -a317 3 123 934 -a31a 3 124 934 -a31d 2 125 934 -a31f 2 127 934 -a321 2 129 934 -a323 2 130 934 -a325 2 134 934 -a327 3 135 934 -a32a 3 137 934 -a32d 2 138 934 -a32f 4 142 934 -a333 1 143 934 -a334 1 145 934 -a335 4 148 934 -a339 1 150 934 -FUNC a340 365 c memcpy -a340 3 101 1027 -a343 1 113 1027 -a344 1 114 1027 -a345 3 116 1027 -a348 3 117 1027 -a34b 3 119 1027 -a34e 2 129 1027 -a350 2 131 1027 -a352 2 132 1027 -a354 2 134 1027 -a356 2 135 1027 -a358 2 137 1027 -a35a 6 138 1027 -a360 6 147 1027 -a366 2 148 1027 -a368 7 150 1027 -a36f 2 151 1027 -a371 1 153 1027 -a372 1 154 1027 -a373 3 155 1027 -a376 3 156 1027 -a379 2 157 1027 -a37b 1 158 1027 -a37c 1 159 1027 -a37d 2 160 1027 -a37f 1 163 1027 -a380 1 164 1027 -a381 1 165 1027 -a382 5 166 1027 -a387 6 179 1027 -a38d 2 180 1027 -a38f 3 182 1027 -a392 3 183 1027 -a395 3 185 1027 -a398 2 186 1027 -a39a 2 188 1027 -a39c 8 190 1027 -a3a4 2 208 1027 -a3a6 5 209 1027 -a3ab 3 211 1027 -a3ae 2 212 1027 -a3b0 3 214 1027 -a3b3 2 215 1027 -a3b5 7 217 1027 -a3bc 8 221 1027 -a3c4 14 225 1027 -a3d8 2 232 1027 -a3da 2 233 1027 -a3dc 2 235 1027 -a3de 3 236 1027 -a3e1 3 238 1027 -a3e4 3 239 1027 -a3e7 3 241 1027 -a3ea 3 242 1027 -a3ed 3 244 1027 -a3f0 3 245 1027 -a3f3 3 247 1027 -a3f6 2 248 1027 -a3f8 2 250 1027 -a3fa a 252 1027 -a404 2 256 1027 -a406 2 257 1027 -a408 2 259 1027 -a40a 3 260 1027 -a40d 3 262 1027 -a410 3 263 1027 -a413 3 265 1027 -a416 3 266 1027 -a419 3 268 1027 -a41c 2 269 1027 -a41e 2 271 1027 -a420 8 273 1027 -a428 2 277 1027 -a42a 2 278 1027 -a42c 2 280 1027 -a42e 3 281 1027 -a431 3 283 1027 -a434 3 284 1027 -a437 3 286 1027 -a43a 2 287 1027 -a43c 2 289 1027 -a43e 2a 291 1027 -a468 4 298 1027 -a46c 4 300 1027 -a470 4 302 1027 -a474 4 304 1027 -a478 4 306 1027 -a47c 4 308 1027 -a480 4 310 1027 -a484 4 312 1027 -a488 4 314 1027 -a48c 4 316 1027 -a490 4 318 1027 -a494 4 320 1027 -a498 4 322 1027 -a49c 4 324 1027 -a4a0 7 326 1027 -a4a7 2 328 1027 -a4a9 2 329 1027 -a4ab 19 331 1027 -a4c4 3 340 1027 -a4c7 1 341 1027 -a4c8 1 342 1027 -a4c9 3 344 1027 -a4cc 2 348 1027 -a4ce 2 350 1027 -a4d0 3 351 1027 -a4d3 1 352 1027 -a4d4 1 353 1027 -a4d5 3 354 1027 -a4d8 2 358 1027 -a4da 2 360 1027 -a4dc 3 361 1027 -a4df 3 362 1027 -a4e2 3 363 1027 -a4e5 1 364 1027 -a4e6 1 365 1027 -a4e7 5 366 1027 -a4ec 2 370 1027 -a4ee 2 372 1027 -a4f0 3 373 1027 -a4f3 3 374 1027 -a4f6 3 375 1027 -a4f9 3 376 1027 -a4fc 3 377 1027 -a4ff 1 378 1027 -a500 1 379 1027 -a501 3 380 1027 -a504 4 391 1027 -a508 4 392 1027 -a50c 6 397 1027 -a512 2 398 1027 -a514 3 400 1027 -a517 3 401 1027 -a51a 3 403 1027 -a51d 2 404 1027 -a51f 1 406 1027 -a520 2 407 1027 -a522 1 408 1027 -a523 9 410 1027 -a52c 2 414 1027 -a52e a 417 1027 -a538 2 422 1027 -a53a 5 423 1027 -a53f 3 425 1027 -a542 2 426 1027 -a544 3 428 1027 -a547 2 429 1027 -a549 7 431 1027 -a550 14 435 1027 -a564 3 442 1027 -a567 2 443 1027 -a569 3 445 1027 -a56c 3 446 1027 -a56f 3 448 1027 -a572 3 449 1027 -a575 3 451 1027 -a578 2 452 1027 -a57a 1 454 1027 -a57b 2 455 1027 -a57d 1 456 1027 -a57e a 458 1027 -a588 3 462 1027 -a58b 2 463 1027 -a58d 3 465 1027 -a590 3 466 1027 -a593 3 468 1027 -a596 3 469 1027 -a599 3 471 1027 -a59c 3 472 1027 -a59f 3 474 1027 -a5a2 2 475 1027 -a5a4 1 477 1027 -a5a5 2 478 1027 -a5a7 1 479 1027 -a5a8 8 481 1027 -a5b0 3 485 1027 -a5b3 2 486 1027 -a5b5 3 488 1027 -a5b8 3 489 1027 -a5bb 3 491 1027 -a5be 3 492 1027 -a5c1 3 494 1027 -a5c4 3 495 1027 -a5c7 3 497 1027 -a5ca 3 498 1027 -a5cd 3 500 1027 -a5d0 6 501 1027 -a5d6 1 503 1027 -a5d7 2 504 1027 -a5d9 1 505 1027 -a5da 2a 507 1027 -a604 4 516 1027 -a608 4 518 1027 -a60c 4 520 1027 -a610 4 522 1027 -a614 4 524 1027 -a618 4 526 1027 -a61c 4 528 1027 -a620 4 530 1027 -a624 4 532 1027 -a628 4 534 1027 -a62c 4 536 1027 -a630 4 538 1027 -a634 4 540 1027 -a638 4 542 1027 -a63c 7 544 1027 -a643 2 546 1027 -a645 2 547 1027 -a647 19 549 1027 -a660 3 558 1027 -a663 1 560 1027 -a664 1 561 1027 -a665 3 562 1027 -a668 3 566 1027 -a66b 3 568 1027 -a66e 3 569 1027 -a671 1 570 1027 -a672 1 571 1027 -a673 5 572 1027 -a678 3 576 1027 -a67b 3 578 1027 -a67e 3 579 1027 -a681 3 580 1027 -a684 3 581 1027 -a687 1 582 1027 -a688 1 583 1027 -a689 3 584 1027 -a68c 3 588 1027 -a68f 3 590 1027 -a692 3 591 1027 -a695 3 592 1027 -a698 3 593 1027 -a69b 3 594 1027 -a69e 3 595 1027 -a6a1 1 596 1027 -a6a2 1 597 1027 -a6a3 2 598 1027 -FUNC a6b0 365 c memmove -a6b0 3 101 977 -a6b3 1 113 977 -a6b4 1 114 977 -a6b5 3 116 977 -a6b8 3 117 977 -a6bb 3 119 977 -a6be 2 129 977 -a6c0 2 131 977 -a6c2 2 132 977 -a6c4 2 134 977 -a6c6 2 135 977 -a6c8 2 137 977 -a6ca 6 138 977 -a6d0 6 147 977 -a6d6 2 148 977 -a6d8 7 150 977 -a6df 2 151 977 -a6e1 1 153 977 -a6e2 1 154 977 -a6e3 3 155 977 -a6e6 3 156 977 -a6e9 2 157 977 -a6eb 1 158 977 -a6ec 1 159 977 -a6ed 2 160 977 -a6ef 1 163 977 -a6f0 1 164 977 -a6f1 1 165 977 -a6f2 5 166 977 -a6f7 6 179 977 -a6fd 2 180 977 -a6ff 3 182 977 -a702 3 183 977 -a705 3 185 977 -a708 2 186 977 -a70a 2 188 977 -a70c 8 190 977 -a714 2 208 977 -a716 5 209 977 -a71b 3 211 977 -a71e 2 212 977 -a720 3 214 977 -a723 2 215 977 -a725 7 217 977 -a72c 8 221 977 -a734 14 225 977 -a748 2 232 977 -a74a 2 233 977 -a74c 2 235 977 -a74e 3 236 977 -a751 3 238 977 -a754 3 239 977 -a757 3 241 977 -a75a 3 242 977 -a75d 3 244 977 -a760 3 245 977 -a763 3 247 977 -a766 2 248 977 -a768 2 250 977 -a76a a 252 977 -a774 2 256 977 -a776 2 257 977 -a778 2 259 977 -a77a 3 260 977 -a77d 3 262 977 -a780 3 263 977 -a783 3 265 977 -a786 3 266 977 -a789 3 268 977 -a78c 2 269 977 -a78e 2 271 977 -a790 8 273 977 -a798 2 277 977 -a79a 2 278 977 -a79c 2 280 977 -a79e 3 281 977 -a7a1 3 283 977 -a7a4 3 284 977 -a7a7 3 286 977 -a7aa 2 287 977 -a7ac 2 289 977 -a7ae 2a 291 977 -a7d8 4 298 977 -a7dc 4 300 977 -a7e0 4 302 977 -a7e4 4 304 977 -a7e8 4 306 977 -a7ec 4 308 977 -a7f0 4 310 977 -a7f4 4 312 977 -a7f8 4 314 977 -a7fc 4 316 977 -a800 4 318 977 -a804 4 320 977 -a808 4 322 977 -a80c 4 324 977 -a810 7 326 977 -a817 2 328 977 -a819 2 329 977 -a81b 19 331 977 -a834 3 340 977 -a837 1 341 977 -a838 1 342 977 -a839 3 344 977 -a83c 2 348 977 -a83e 2 350 977 -a840 3 351 977 -a843 1 352 977 -a844 1 353 977 -a845 3 354 977 -a848 2 358 977 -a84a 2 360 977 -a84c 3 361 977 -a84f 3 362 977 -a852 3 363 977 -a855 1 364 977 -a856 1 365 977 -a857 5 366 977 -a85c 2 370 977 -a85e 2 372 977 -a860 3 373 977 -a863 3 374 977 -a866 3 375 977 -a869 3 376 977 -a86c 3 377 977 -a86f 1 378 977 -a870 1 379 977 -a871 3 380 977 -a874 4 391 977 -a878 4 392 977 -a87c 6 397 977 -a882 2 398 977 -a884 3 400 977 -a887 3 401 977 -a88a 3 403 977 -a88d 2 404 977 -a88f 1 406 977 -a890 2 407 977 -a892 1 408 977 -a893 9 410 977 -a89c 2 414 977 -a89e a 417 977 -a8a8 2 422 977 -a8aa 5 423 977 -a8af 3 425 977 -a8b2 2 426 977 -a8b4 3 428 977 -a8b7 2 429 977 -a8b9 7 431 977 -a8c0 14 435 977 -a8d4 3 442 977 -a8d7 2 443 977 -a8d9 3 445 977 -a8dc 3 446 977 -a8df 3 448 977 -a8e2 3 449 977 -a8e5 3 451 977 -a8e8 2 452 977 -a8ea 1 454 977 -a8eb 2 455 977 -a8ed 1 456 977 -a8ee a 458 977 -a8f8 3 462 977 -a8fb 2 463 977 -a8fd 3 465 977 -a900 3 466 977 -a903 3 468 977 -a906 3 469 977 -a909 3 471 977 -a90c 3 472 977 -a90f 3 474 977 -a912 2 475 977 -a914 1 477 977 -a915 2 478 977 -a917 1 479 977 -a918 8 481 977 -a920 3 485 977 -a923 2 486 977 -a925 3 488 977 -a928 3 489 977 -a92b 3 491 977 -a92e 3 492 977 -a931 3 494 977 -a934 3 495 977 -a937 3 497 977 -a93a 3 498 977 -a93d 3 500 977 -a940 6 501 977 -a946 1 503 977 -a947 2 504 977 -a949 1 505 977 -a94a 2a 507 977 -a974 4 516 977 -a978 4 518 977 -a97c 4 520 977 -a980 4 522 977 -a984 4 524 977 -a988 4 526 977 -a98c 4 528 977 -a990 4 530 977 -a994 4 532 977 -a998 4 534 977 -a99c 4 536 977 -a9a0 4 538 977 -a9a4 4 540 977 -a9a8 4 542 977 -a9ac 7 544 977 -a9b3 2 546 977 -a9b5 2 547 977 -a9b7 19 549 977 -a9d0 3 558 977 -a9d3 1 560 977 -a9d4 1 561 977 -a9d5 3 562 977 -a9d8 3 566 977 -a9db 3 568 977 -a9de 3 569 977 -a9e1 1 570 977 -a9e2 1 571 977 -a9e3 5 572 977 -a9e8 3 576 977 -a9eb 3 578 977 -a9ee 3 579 977 -a9f1 3 580 977 -a9f4 3 581 977 -a9f7 1 582 977 -a9f8 1 583 977 -a9f9 3 584 977 -a9fc 3 588 977 -a9ff 3 590 977 -aa02 3 591 977 -aa05 3 592 977 -aa08 3 593 977 -aa0b 3 594 977 -aa0e 3 595 977 -aa11 1 596 977 -aa12 1 597 977 -aa13 2 598 977 -FUNC aa15 3d 4 __CxxUnhandledExceptionFilter(_EXCEPTION_POINTERS *) -aa15 0 67 5721 -aa15 33 68 5721 -aa48 5 69 5721 -aa4d 2 72 5721 -aa4f 3 73 5721 -FUNC aa52 e 0 __CxxSetUnhandledExceptionFilter -aa52 0 86 5721 -aa52 b 89 5721 -aa5d 2 90 5721 -aa5f 1 91 5721 -FUNC aa60 1a0 4 _NMSG_WRITE -aa60 2 174 2418 -aa62 a 178 2418 -aa6c f 179 2418 -aa7b a 182 2418 -aa85 2a 203 2418 -aaaf c 215 2418 -aabb 2a 224 2418 -aae5 1e 227 2418 -ab03 26 228 2418 -ab29 d 231 2418 -ab36 b 233 2418 -ab41 2f 234 2418 -ab70 20 237 2418 -ab90 22 238 2418 -abb2 15 242 2418 -abc7 a 205 2418 -abd1 9 206 2418 -abda 24 212 2418 -abfe 2 245 2418 -FUNC ac00 20 4 _GET_RTERRMSG -ac00 0 268 2418 -ac00 2 271 2418 -ac02 13 272 2418 -ac15 2 275 2418 -ac17 1 276 2418 -ac18 7 273 2418 -ac1f 1 276 2418 -FUNC ac20 39 0 _FF_MSGBANNER -ac20 0 141 2418 -ac20 22 145 2418 -ac42 a 147 2418 -ac4c c 148 2418 -ac58 1 150 2418 -FUNC ac59 1 4 _initp_misc_winxfltr -ac59 0 105 2752 -ac59 1 106 2752 -FUNC ac5a 32 4 xcptlookup -ac5a 0 410 2752 -ac5a b 411 2752 -ac65 14 418 2752 -ac79 e 425 2752 -ac87 2 428 2752 -ac89 2 426 2752 -ac8b 1 429 2752 -FUNC ac8c 15e 8 _XcptFilter -ac8c 6 206 2752 -ac92 7 213 2752 -ac99 8 214 2752 -aca1 34 219 2752 -acd5 2 221 2752 -acd7 2 225 2752 -acd9 3 227 2752 -acdc 7 234 2752 -ace3 7 235 2752 -acea 5 243 2752 -acef 4 248 2752 -acf3 8 249 2752 -acfb 3 255 2752 -acfe 6 259 2752 -ad04 6 273 2752 -ad0a 6 274 2752 -ad10 c 283 2752 -ad1c 17 291 2752 -ad33 1e 294 2752 -ad51 3 291 2752 -ad54 c 321 2752 -ad60 9 323 2752 -ad69 7 325 2752 -ad70 9 327 2752 -ad79 7 329 2752 -ad80 9 331 2752 -ad89 7 333 2752 -ad90 9 335 2752 -ad99 7 337 2752 -ada0 9 339 2752 -ada9 7 341 2752 -adb0 9 343 2752 -adb9 7 345 2752 -adc0 7 347 2752 -adc7 8 356 2752 -adcf 3 361 2752 -add2 2 363 2752 -add4 4 368 2752 -add8 3 369 2752 -addb 7 375 2752 -ade2 6 377 2752 -ade8 2 379 2752 -FUNC adea 1b 8 __CppXcptFilter -adea 0 145 2752 -adea b 146 2752 -adf5 c 147 2752 -ae01 1 151 2752 -ae02 2 149 2752 -ae04 1 151 2752 -FUNC ae05 db 0 _setenvp -ae05 1 77 2280 -ae06 c 85 2280 -ae12 5 86 2280 -ae17 8 91 2280 -ae1f 4 98 2280 -ae23 8 99 2280 -ae2b 4 110 2280 -ae2f 1 111 2280 -ae30 11 112 2280 -ae41 15 117 2280 -ae56 2 118 2280 -ae58 9 121 2280 -ae61 9 123 2280 -ae6a 6 125 2280 -ae70 10 127 2280 -ae80 1c 133 2280 -ae9c 3 134 2280 -ae9f 6 121 2280 -aea5 b 138 2280 -aeb0 6 139 2280 -aeb6 2 142 2280 -aeb8 a 149 2280 -aec2 7 152 2280 -aec9 17 153 2280 -FUNC aee0 a 4 _set_pgmptr -aee0 a 334 2303 -FUNC aeea 198 c parse_cmdline -aeea 4 218 2322 -aeee 6 226 2322 -aef4 8 230 2322 -aefc 14 231 2322 -af10 3 250 2322 -af13 5 252 2322 -af18 5 254 2322 -af1d 9 255 2322 -af26 2 256 2322 -af28 2 258 2322 -af2a 4 259 2322 -af2e 8 260 2322 -af36 2 262 2322 -af38 f 264 2322 -af47 2 265 2322 -af49 6 266 2322 -af4f a 267 2322 -af59 1 268 2322 -af5a 1a 272 2322 -af74 4 277 2322 -af78 4 278 2322 -af7c 4 281 2322 -af80 9 286 2322 -af89 a 287 2322 -af93 3 288 2322 -af96 1 275 2322 -af97 2 276 2322 -af99 9 291 2322 -afa2 6 295 2322 -afa8 9 296 2322 -afb1 2 297 2322 -afb3 3 311 2322 -afb6 4 315 2322 -afba 1 318 2322 -afbb 1 319 2322 -afbc 5 316 2322 -afc1 5 321 2322 -afc6 5 324 2322 -afcb e 325 2322 -afd9 2 326 2322 -afdb 2 327 2322 -afdd d 329 2322 -afea 2 332 2322 -afec 5 336 2322 -aff1 4 337 2322 -aff5 4 338 2322 -aff9 6 339 2322 -afff 3 338 2322 -b002 14 343 2322 -b016 4 348 2322 -b01a 2 349 2322 -b01c 10 350 2322 -b02c b 351 2322 -b037 2 352 2322 -b039 a 354 2322 -b043 2 355 2322 -b045 a 356 2322 -b04f 1 357 2322 -b050 2 358 2322 -b052 5 361 2322 -b057 1 363 2322 -b058 5 372 2322 -b05d 4 376 2322 -b061 7 377 2322 -b068 2 378 2322 -b06a 8 379 2322 -b072 9 382 2322 -b07b 3 383 2322 -b07e 2 384 2322 -b080 2 385 2322 -FUNC b082 b9 0 _setargv -b082 7 88 2322 -b089 c 97 2322 -b095 5 98 2322 -b09a 18 104 2322 -b0b2 19 120 2322 -b0cb 11 127 2322 -b0dc 15 132 2322 -b0f1 a 136 2322 -b0fb 2 138 2322 -b0fd 8 140 2322 -b105 3 141 2322 -b108 2 142 2322 -b10a 13 149 2322 -b11d c 153 2322 -b129 6 157 2322 -b12f 4 172 2322 -b133 6 134 2322 -b139 2 173 2322 -FUNC b13b 135 0 __crtGetEnvironmentStringsA -b13b 2 43 4307 -b13d 1a 57 4307 -b157 8 59 4307 -b15f c 60 4307 -b16b b 62 4307 -b176 e 63 4307 -b184 9 68 4307 -b18d 4 71 4307 -b191 8 72 4307 -b199 7 73 4307 -b1a0 7 77 4307 -b1a7 7 78 4307 -b1ae 7 79 4307 -b1b5 1b 93 4307 -b1d0 13 97 4307 -b1e3 11 111 4307 -b1f4 a 113 4307 -b1fe 8 114 4307 -b206 7 99 4307 -b20d 4 100 4307 -b211 6 123 4307 -b217 2 152 4307 -b219 a 126 4307 -b223 6 127 4307 -b229 4 133 4307 -b22d 5 134 4307 -b232 5 135 4307 -b237 5 138 4307 -b23c d 140 4307 -b249 7 141 4307 -b250 5 142 4307 -b255 b 145 4307 -b260 7 147 4307 -b267 6 149 4307 -b26d 3 153 4307 -FUNC b270 24 0 _RTC_Initialize -FUNC b294 24 0 _RTC_Terminate -FUNC b2b8 5b 0 __heap_select -b2b8 6 70 5473 -b2be 23 143 5473 -b2e1 1b 144 5473 -b2fc d 145 5473 -b309 3 146 5473 -b30c 2 164 5473 -b30e 3 161 5473 -b311 2 164 5473 -FUNC b313 5a 4 _heap_init -b313 0 192 5473 -b313 20 199 5473 -b333 2 200 5473 -b335 1 240 5473 -b336 5 204 5473 -b33b a 206 5473 -b345 f 209 5473 -b354 c 211 5473 -b360 7 212 5473 -b367 2 213 5473 -b369 3 239 5473 -b36c 1 240 5473 -FUNC b36d 74 0 _heap_term -b36d 1 261 5473 -b36e c 264 5473 -b37a 1b 270 5473 -b395 f 273 5473 -b3a4 b 276 5473 -b3af d 278 5473 -b3bc 11 281 5473 -b3cd c 300 5473 -b3d9 7 301 5473 -b3e0 1 302 5473 -FUNC b3e1 6 0 _get_heap_handle -b3e1 0 320 5473 -b3e1 5 322 5473 -b3e6 1 323 5473 -FUNC b3e7 94 0 __security_init_cookie -b3e7 6 97 3689 -b3ed 21 114 3689 -b40e 7 116 3689 -b415 3 117 3689 -b418 a 127 3689 -b422 6 132 3689 -b428 8 135 3689 -b430 8 136 3689 -b438 8 137 3689 -b440 10 139 3689 -b450 2 144 3689 -b452 4 161 3689 -b456 7 163 3689 -b45d 4 166 3689 -b461 7 168 3689 -b468 6 172 3689 -b46e b 173 3689 -b479 2 175 3689 -FUNC b47b 8 4 _crt_debugger_hook -b47b 0 62 3966 -b47b 7 65 3966 -b482 1 66 3966 -FUNC b483 160 8 _flsbuf -b483 5 93 2041 -b488 c 104 2041 -b494 8 106 2041 -b49c b 107 2041 -b4a7 4 108 2041 -b4ab 8 109 2041 -b4b3 4 110 2041 -b4b7 b 111 2041 -b4c2 3 113 2041 -b4c5 6 124 2041 -b4cb b 126 2041 -b4d6 3 127 2041 -b4d9 8 128 2041 -b4e1 9 137 2041 -b4ea f 141 2041 -b4f9 25 151 2041 -b51e 7 153 2041 -b525 d 158 2041 -b532 5 162 2041 -b537 5 163 2041 -b53c 6 164 2041 -b542 7 166 2041 -b549 10 167 2041 -b559 2 168 2041 -b55b 6 131 2041 -b561 5 132 2041 -b566 2e 169 2041 -b594 12 171 2041 -b5a6 2 174 2041 -b5a8 8 179 2041 -b5b0 2 186 2041 -b5b2 3 187 2041 -b5b5 13 189 2041 -b5c8 5 201 2041 -b5cd 4 202 2041 -b5d1 5 203 2041 -b5d6 b 207 2041 -b5e1 2 212 2041 -FUNC b5e3 25 4 write_char -b5e3 0 2433 1163 -b5e3 a 2434 1163 -b5ed 2 2437 1163 -b5ef 12 2440 1163 -b601 3 2444 1163 -b604 1 2447 1163 -b605 2 2446 1163 -b607 1 2447 1163 -FUNC b608 25 c write_multi_char -b608 6 2498 1163 -b60e 2 2501 1163 -b610 e 2500 1163 -b61e 6 2501 1163 -b624 7 2499 1163 -b62b 2 2504 1163 -FUNC b62d 4f 4 write_string -b62d 0 2563 1163 -b62d 12 2564 1163 -b63f 6 2566 1163 -b645 2 2567 1163 -b647 11 2570 1163 -b658 6 2571 1163 -b65e a 2573 1163 -b668 a 2574 1163 -b672 9 2569 1163 -b67b 1 2579 1163 -FUNC b67c 910 10 _woutput_l -b67c 1b 975 1163 -b697 72 1031 1163 -b709 4 1036 1163 -b70d 2c 1073 1163 -b739 1a 1075 1163 -b753 8 1076 1163 -b75b 18 1131 1163 -b773 2 1171 1163 -b775 13 1173 1163 -b788 3 1174 1163 -b78b 5 1175 1163 -b790 1f 1179 1163 -b7af 4 1193 1163 -b7b3 5 1194 1163 -b7b8 4 1181 1163 -b7bc 5 1182 1163 -b7c1 4 1184 1163 -b7c5 5 1185 1163 -b7ca 7 1190 1163 -b7d1 5 1191 1163 -b7d6 3 1187 1163 -b7d9 5 1196 1163 -b7de 6 1200 1163 -b7e4 9 1206 1163 -b7ed b 1233 1163 -b7f8 4 1235 1163 -b7fc 3 1236 1163 -b7ff 5 1239 1163 -b804 10 1241 1163 -b814 5 1243 1163 -b819 4 1248 1163 -b81d 5 1249 1163 -b822 6 1253 1163 -b828 9 1259 1163 -b831 b 1284 1163 -b83c 4 1285 1163 -b840 5 1287 1163 -b845 10 1289 1163 -b855 5 1291 1163 -b85a 1b 1295 1163 -b875 7 1362 1163 -b87c 5 1363 1163 -b881 6 1301 1163 -b887 2 1303 1163 -b889 a 1304 1163 -b893 5 1306 1163 -b898 4 1308 1163 -b89c 5 1310 1163 -b8a1 4 1358 1163 -b8a5 5 1359 1163 -b8aa 10 1322 1163 -b8ba 3 1324 1163 -b8bd f 1325 1163 -b8cc d 1327 1163 -b8d9 3 1329 1163 -b8dc a 1330 1163 -b8e6 5 1332 1163 -b8eb 3c 1337 1163 -b927 4 1352 1163 -b92b 13 1166 1163 -b93e 5 1167 1163 -b943 32 1378 1163 -b975 d 1716 1163 -b982 4 1724 1163 -b986 18 1749 1163 -b99e c 1750 1163 -b9aa c 1381 1163 -b9b6 9 1383 1163 -b9bf 8 1564 1163 -b9c7 4 1565 1163 -b9cb d 1584 1163 -b9d8 3 1589 1163 -b9db 13 1610 1163 -b9ee 4 1611 1163 -b9f2 8 1612 1163 -b9fa 19 1614 1163 -ba13 13 1618 1163 -ba26 1 1620 1163 -ba27 9 1621 1163 -ba30 5 1622 1163 -ba35 1d 1378 1163 -ba52 9 1397 1163 -ba5b f 1415 1163 -ba6a 3 1420 1163 -ba6d 25 1430 1163 -ba92 3 1434 1163 -ba95 2 1436 1163 -ba97 4 1437 1163 -ba9b 6 1439 1163 -baa1 3 1440 1163 -baa4 5 1506 1163 -baa9 5 1523 1163 -baae e 1541 1163 -babc 6 1546 1163 -bac2 b 1548 1163 -bacd 7 1549 1163 -bad4 5 1550 1163 -bad9 4 1551 1163 -badd 5 1553 1163 -bae2 8 1543 1163 -baea 7 1544 1163 -baf1 5 1557 1163 -baf6 34 1378 1163 -bb2a d 1908 1163 -bb37 9 1910 1163 -bb40 8 1668 1163 -bb48 d 1688 1163 -bb55 6 1702 1163 -bb5b 7 1703 1163 -bb62 2 1704 1163 -bb64 5 1706 1163 -bb69 7 1708 1163 -bb70 5 1710 1163 -bb75 4 1864 1163 -bb79 7 1869 1163 -bb80 c 1933 1163 -bb8c 8 1939 1163 -bb94 5 1958 1163 -bb99 8 1751 1163 -bba1 9 1752 1163 -bbaa 5 1753 1163 -bbaf 3 1754 1163 -bbb2 9 1756 1163 -bbbb f 1759 1163 -bbca 2 1760 1163 -bbcc 13 1765 1163 -bbdf 7 1767 1163 -bbe6 e 1809 1163 -bbf4 27 1828 1163 -bc1b 14 1838 1163 -bc2f 15 1840 1163 -bc44 b 1844 1163 -bc4f 15 1846 1163 -bc64 5 1852 1163 -bc69 7 1853 1163 -bc70 4 1854 1163 -bc74 1 1857 1163 -bc75 5 1859 1163 -bc7a 7 1877 1163 -bc81 3 1887 1163 -bc84 2 1888 1163 -bc86 1a 1378 1163 -bca0 7 1892 1163 -bca7 11 1897 1163 -bcb8 10 1900 1163 -bcc8 3 1901 1163 -bccb 5 1903 1163 -bcd0 6 1961 1163 -bcd6 6 1987 1163 -bcdc 16 2026 1163 -bcf2 2 2045 1163 -bcf4 5 2051 1163 -bcf9 2 2071 1163 -bcfb 4 2074 1163 -bcff 6 2080 1163 -bd05 2 2099 1163 -bd07 5 2105 1163 -bd0c 10 2128 1163 -bd1c 7 2129 1163 -bd23 7 2130 1163 -bd2a c 2136 1163 -bd36 2 2142 1163 -bd38 6 2148 1163 -bd3e 7 2149 1163 -bd45 2 2150 1163 -bd47 4 2151 1163 -bd4b a 2152 1163 -bd55 3 2153 1163 -bd58 6 2157 1163 -bd5e 3 2158 1163 -bd61 6 2163 1163 -bd67 10 2165 1163 -bd77 10 2166 1163 -bd87 c 2168 1163 -bd93 3 2170 1163 -bd96 3 2172 1163 -bd99 2 2173 1163 -bd9b 8 2175 1163 -bda3 1 2176 1163 -bda4 19 2180 1163 -bdbd 9 2181 1163 -bdc6 1 2182 1163 -bdc7 2 2185 1163 -bdc9 4 1625 1163 -bdcd 8 1626 1163 -bdd5 c 1628 1163 -bde1 7 1629 1163 -bde8 2 1630 1163 -bdea 4 1629 1163 -bdee 8 1631 1163 -bdf6 a 2201 1163 -be00 7 2204 1163 -be07 6 2205 1163 -be0d 6 2207 1163 -be13 2 2208 1163 -be15 4 2210 1163 -be19 6 2212 1163 -be1f 2 2213 1163 -be21 4 2215 1163 -be25 6 2217 1163 -be2b 7 2218 1163 -be32 b 2224 1163 -be3d 6 2228 1163 -be43 11 2230 1163 -be54 11 2234 1163 -be65 d 2236 1163 -be72 f 2238 1163 -be81 a 2263 1163 -be8b 3 2267 1163 -be8e 3 2268 1163 -be91 3 2269 1163 -be94 1a 2276 1163 -beae 7 2278 1163 -beb5 e 2282 1163 -bec3 a 2283 1163 -becd 2 1690 1163 -becf 4 2279 1163 -bed3 2 2285 1163 -bed5 d 2286 1163 -bee2 c 2290 1163 -beee 11 2292 1163 -beff 6 2297 1163 -bf05 8 2298 1163 -bf0d 4 2299 1163 -bf11 1 2298 1163 -bf12 1b 1073 1163 -bf2d 17 1690 1163 -bf44 10 2376 1163 -bf54 38 2377 1163 -FUNC bf8c 97 10 _vswprintf_l -bf8c 7 125 1425 -bf93 24 130 1425 -bfb7 8 135 1425 -bfbf 29 155 1425 -bfe8 1d 166 1425 -c005 18 167 1425 -c01d 4 169 1425 -c021 2 183 1425 -FUNC c023 17 c _vswprintf -c023 0 192 1425 -c023 16 195 1425 -c039 1 197 1425 -FUNC c03a 5 10 __vswprintf_l -c03a 0 205 1425 -c03a 5 208 1425 -FUNC c03f 55 10 _vscwprintf_helper -c03f 7 430 1425 -c046 24 435 1425 -c06a 28 441 1425 -c092 2 443 1425 -FUNC c094 18 8 _vscwprintf -c094 0 449 1425 -c094 17 450 1425 -c0ab 1 451 1425 -FUNC c0ac 1a c _vscwprintf_l -c0ac 0 458 1425 -c0ac 19 459 1425 -c0c5 1 460 1425 -FUNC c0c6 18 8 _vscwprintf_p -c0c6 0 466 1425 -c0c6 17 467 1425 -c0dd 1 468 1425 -FUNC c0de 1a c _vscwprintf_p_l -c0de 0 475 1425 -c0de 19 476 1425 -c0f7 1 477 1425 -FUNC c0f8 14e 14 vfprintf_helper -c0f8 c 51 1462 -c104 5 54 1462 -c109 2e 56 1462 -c137 c 57 1462 -c143 3 60 1462 -c146 7 62 1462 -c14d 3 63 1462 -c150 b0 65 1462 -c200 5 66 1462 -c205 8 68 1462 -c20d 10 69 1462 -c21d a 70 1462 -c227 c 74 1462 -c233 3 78 1462 -c236 6 79 1462 -c23c a 75 1462 -FUNC c246 1e 10 _vfprintf_l -c246 0 87 1462 -c246 1d 88 1462 -c263 1 89 1462 -FUNC c264 1e 10 _vfprintf_s_l -c264 0 97 1462 -c264 1d 98 1462 -c281 1 99 1462 -FUNC c282 1e 10 _vfprintf_p_l -c282 0 107 1462 -c282 1d 108 1462 -c29f 1 109 1462 -FUNC c2a0 1c c vfprintf -c2a0 0 116 1462 -c2a0 1b 117 1462 -c2bb 1 118 1462 -FUNC c2bc 1c c vfprintf_s -c2bc 0 125 1462 -c2bc 1b 126 1462 -c2d7 1 127 1462 -FUNC c2d8 1c c _vfprintf_p -c2d8 0 134 1462 -c2d8 1b 135 1462 -c2f3 1 136 1462 -FUNC c2f4 25 4 write_char -c2f4 0 2433 1053 -c2f4 a 2434 1053 -c2fe 2 2437 1053 -c300 12 2440 1053 -c312 3 2444 1053 -c315 1 2447 1053 -c316 2 2446 1053 -c318 1 2447 1053 -FUNC c319 25 c write_multi_char -c319 6 2498 1053 -c31f 2 2501 1053 -c321 e 2500 1053 -c32f 6 2501 1053 -c335 7 2499 1053 -c33c 2 2504 1053 -FUNC c33e 4f 4 write_string -c33e 0 2563 1053 -c33e 12 2564 1053 -c350 6 2566 1053 -c356 2 2567 1053 -c358 11 2570 1053 -c369 6 2571 1053 -c36f a 2573 1053 -c379 a 2574 1053 -c383 9 2569 1053 -c38c 1 2579 1053 -FUNC c38d 91c 10 _woutput_s_l -c38d 29 975 1053 -c3b6 3 976 1053 -c3b9 f 1007 1053 -c3c8 24 2172 1053 -c3ec 2f 1031 1053 -c41b 18 1036 1053 -c433 2e 1073 1053 -c461 16 1078 1053 -c477 e 1079 1053 -c485 11 1124 1053 -c496 10 1131 1053 -c4a6 2 1171 1053 -c4a8 13 1173 1053 -c4bb 3 1174 1053 -c4be 5 1175 1053 -c4c3 1e 1179 1053 -c4e1 3 1193 1053 -c4e4 5 1194 1053 -c4e9 4 1181 1053 -c4ed 5 1182 1053 -c4f2 4 1184 1053 -c4f6 5 1185 1053 -c4fb 7 1190 1053 -c502 5 1191 1053 -c507 3 1187 1053 -c50a 5 1196 1053 -c50f 6 1200 1053 -c515 5 1206 1053 -c51a e 1233 1053 -c528 4 1235 1053 -c52c 3 1236 1053 -c52f 5 1239 1053 -c534 10 1241 1053 -c544 5 1243 1053 -c549 4 1248 1053 -c54d 5 1249 1053 -c552 6 1253 1053 -c558 5 1259 1053 -c55d e 1284 1053 -c56b 4 1285 1053 -c56f 5 1287 1053 -c574 10 1289 1053 -c584 5 1291 1053 -c589 1b 1295 1053 -c5a4 7 1362 1053 -c5ab 5 1363 1053 -c5b0 6 1301 1053 -c5b6 2 1303 1053 -c5b8 7 1304 1053 -c5bf 5 1306 1053 -c5c4 4 1308 1053 -c5c8 5 1310 1053 -c5cd 4 1358 1053 -c5d1 5 1359 1053 -c5d6 10 1322 1053 -c5e6 3 1324 1053 -c5e9 c 1325 1053 -c5f5 d 1327 1053 -c602 3 1329 1053 -c605 7 1330 1053 -c60c 5 1332 1053 -c611 3c 1337 1053 -c64d 4 1352 1053 -c651 14 1166 1053 -c665 5 1167 1053 -c66a 32 1378 1053 -c69c d 1716 1053 -c6a9 4 1724 1053 -c6ad 18 1749 1053 -c6c5 c 1750 1053 -c6d1 c 1381 1053 -c6dd 9 1383 1053 -c6e6 8 1564 1053 -c6ee 4 1565 1053 -c6f2 d 1584 1053 -c6ff 3 1589 1053 -c702 13 1610 1053 -c715 4 1611 1053 -c719 8 1612 1053 -c721 19 1614 1053 -c73a 13 1618 1053 -c74d 1 1620 1053 -c74e 9 1621 1053 -c757 5 1622 1053 -c75c 1e 1378 1053 -c77a 9 1397 1053 -c783 f 1415 1053 -c792 3 1420 1053 -c795 25 1430 1053 -c7ba 3 1434 1053 -c7bd 2 1436 1053 -c7bf 4 1437 1053 -c7c3 6 1439 1053 -c7c9 3 1440 1053 -c7cc 5 1506 1053 -c7d1 5 1523 1053 -c7d6 e 1541 1053 -c7e4 6 1546 1053 -c7ea b 1548 1053 -c7f5 7 1549 1053 -c7fc 5 1550 1053 -c801 4 1551 1053 -c805 5 1553 1053 -c80a 8 1543 1053 -c812 7 1544 1053 -c819 5 1557 1053 -c81e 34 1378 1053 -c852 9 1908 1053 -c85b 9 1910 1053 -c864 8 1668 1053 -c86c d 1688 1053 -c879 6 1702 1053 -c87f 7 1703 1053 -c886 2 1704 1053 -c888 5 1706 1053 -c88d 7 1708 1053 -c894 5 1710 1053 -c899 4 1864 1053 -c89d 7 1869 1053 -c8a4 c 1933 1053 -c8b0 8 1939 1053 -c8b8 5 1958 1053 -c8bd 8 1751 1053 -c8c5 9 1752 1053 -c8ce 5 1753 1053 -c8d3 3 1754 1053 -c8d6 9 1756 1053 -c8df f 1759 1053 -c8ee 3 1760 1053 -c8f1 15 1765 1053 -c906 7 1767 1053 -c90d e 1809 1053 -c91b 27 1828 1053 -c942 14 1838 1053 -c956 15 1840 1053 -c96b b 1844 1053 -c976 15 1846 1053 -c98b 5 1852 1053 -c990 7 1853 1053 -c997 4 1854 1053 -c99b 1 1857 1053 -c99c 5 1859 1053 -c9a1 3 1877 1053 -c9a4 7 1887 1053 -c9ab 2 1888 1053 -c9ad 1a 1378 1053 -c9c7 7 1892 1053 -c9ce 11 1897 1053 -c9df 10 1900 1053 -c9ef 3 1901 1053 -c9f2 5 1903 1053 -c9f7 6 1961 1053 -c9fd 6 1987 1053 -ca03 16 2026 1053 -ca19 2 2045 1053 -ca1b 5 2051 1053 -ca20 2 2071 1053 -ca22 4 2074 1053 -ca26 6 2080 1053 -ca2c 2 2099 1053 -ca2e 5 2105 1053 -ca33 10 2128 1053 -ca43 7 2129 1053 -ca4a 7 2130 1053 -ca51 c 2136 1053 -ca5d 2 2142 1053 -ca5f 6 2148 1053 -ca65 7 2149 1053 -ca6c 2 2150 1053 -ca6e 4 2151 1053 -ca72 a 2152 1053 -ca7c 3 2153 1053 -ca7f 6 2157 1053 -ca85 3 2158 1053 -ca88 6 2163 1053 -ca8e 10 2165 1053 -ca9e 10 2166 1053 -caae c 2168 1053 -caba 3 2170 1053 -cabd 3 2172 1053 -cac0 2 2173 1053 -cac2 8 2175 1053 -caca 1 2176 1053 -cacb 19 2180 1053 -cae4 9 2181 1053 -caed 1 2182 1053 -caee 2 2185 1053 -caf0 4 1625 1053 -caf4 8 1626 1053 -cafc c 1628 1053 -cb08 7 1629 1053 -cb0f 2 1630 1053 -cb11 4 1629 1053 -cb15 8 1631 1053 -cb1d a 2201 1053 -cb27 7 2204 1053 -cb2e 6 2205 1053 -cb34 6 2207 1053 -cb3a 2 2208 1053 -cb3c 4 2210 1053 -cb40 6 2212 1053 -cb46 2 2213 1053 -cb48 4 2215 1053 -cb4c 6 2217 1053 -cb52 7 2218 1053 -cb59 b 2224 1053 -cb64 6 2228 1053 -cb6a 11 2230 1053 -cb7b 11 2234 1053 -cb8c d 2236 1053 -cb99 f 2238 1053 -cba8 a 2263 1053 -cbb2 3 2267 1053 -cbb5 3 2268 1053 -cbb8 3 2269 1053 -cbbb 1a 2276 1053 -cbd5 7 2278 1053 -cbdc e 2282 1053 -cbea a 2283 1053 -cbf4 2 1690 1053 -cbf6 4 2279 1053 -cbfa 2 2285 1053 -cbfc d 2286 1053 -cc09 c 2290 1053 -cc15 11 2292 1053 -cc26 6 2297 1053 -cc2c 8 2298 1053 -cc34 16 2299 1053 -cc4a 7 1073 1053 -cc51 10 2310 1053 -cc61 10 2376 1053 -cc71 38 2377 1053 -FUNC cca9 154 10 _validate_param_reuseW -cca9 3 606 1108 -ccac 21 610 1108 -cccd 13 617 1108 -cce0 13 618 1108 -ccf3 10 620 1108 -cd03 4a 629 1108 -cd4d 54 632 1108 -cda1 2 633 1108 -cda3 1a 639 1108 -cdbd f 645 1108 -cdcc 23 626 1108 -cdef c 614 1108 -cdfb 2 646 1108 -FUNC cdfd 25 4 write_char -cdfd 0 2433 1108 -cdfd a 2434 1108 -ce07 2 2437 1108 -ce09 12 2440 1108 -ce1b 3 2444 1108 -ce1e 1 2447 1108 -ce1f 2 2446 1108 -ce21 1 2447 1108 -FUNC ce22 25 c write_multi_char -ce22 6 2498 1108 -ce28 2 2501 1108 -ce2a e 2500 1108 -ce38 6 2501 1108 -ce3e 7 2499 1108 -ce45 2 2504 1108 -FUNC ce47 4f 4 write_string -ce47 0 2563 1108 -ce47 12 2564 1108 -ce59 6 2566 1108 -ce5f 2 2567 1108 -ce61 11 2570 1108 -ce72 6 2571 1108 -ce78 a 2573 1108 -ce82 a 2574 1108 -ce8c 9 2569 1108 -ce95 1 2579 1108 -FUNC ce96 f60 10 _woutput_p_l -ce96 1b 975 1108 -ceb1 20 1013 1108 -ced1 28 2172 1108 -cef9 2c 1031 1108 -cf25 4 1036 1108 -cf29 3 1038 1108 -cf2c 3 1041 1108 -cf2f 3 1043 1108 -cf32 f 1046 1108 -cf41 44 1073 1108 -cf85 1a 1078 1108 -cf9f 11 1079 1108 -cfb0 16 1082 1108 -cfc6 6 1084 1108 -cfcc 1c 1087 1108 -cfe8 6 1089 1108 -cfee 16 1091 1108 -d004 7 1093 1108 -d00b 2 1095 1108 -d00d 7 1097 1108 -d014 6 1101 1108 -d01a c 1103 1108 -d026 7 1104 1108 -d02d f 1106 1108 -d03c 1d 1109 1108 -d059 8 1112 1108 -d061 5 1131 1108 -d066 3 1117 1108 -d069 7 1131 1108 -d070 9 1120 1108 -d079 b 1131 1108 -d084 24 1137 1108 -d0a8 5 1145 1108 -d0ad 2 1171 1108 -d0af 16 1173 1108 -d0c5 3 1174 1108 -d0c8 5 1175 1108 -d0cd 1f 1179 1108 -d0ec 7 1193 1108 -d0f3 5 1194 1108 -d0f8 7 1181 1108 -d0ff 5 1182 1108 -d104 7 1184 1108 -d10b 5 1185 1108 -d110 a 1190 1108 -d11a 5 1191 1108 -d11f 6 1187 1108 -d125 5 1196 1108 -d12a a 1200 1108 -d134 6 1203 1108 -d13a a 1206 1108 -d144 2 1209 1108 -d146 c 1211 1108 -d152 6 1212 1108 -d158 e 1214 1108 -d166 1c 1216 1108 -d182 8 1219 1108 -d18a 12 1221 1108 -d19c a 1274 1108 -d1a6 5 1275 1108 -d1ab c 1228 1108 -d1b7 b 1233 1108 -d1c2 7 1235 1108 -d1c9 3 1236 1108 -d1cc 5 1239 1108 -d1d1 10 1241 1108 -d1e1 5 1243 1108 -d1e6 4 1248 1108 -d1ea 5 1249 1108 -d1ef 6 1253 1108 -d1f5 6 1256 1108 -d1fb a 1259 1108 -d205 2 1262 1108 -d207 c 1264 1108 -d213 6 1265 1108 -d219 12 1267 1108 -d22b c 1280 1108 -d237 b 1284 1108 -d242 4 1285 1108 -d246 5 1287 1108 -d24b 22 1274 1108 -d26d 10 1289 1108 -d27d 5 1291 1108 -d282 1b 1295 1108 -d29d a 1362 1108 -d2a7 5 1363 1108 -d2ac 6 1301 1108 -d2b2 2 1303 1108 -d2b4 d 1304 1108 -d2c1 5 1306 1108 -d2c6 7 1308 1108 -d2cd 5 1310 1108 -d2d2 7 1358 1108 -d2d9 5 1359 1108 -d2de 10 1322 1108 -d2ee 3 1324 1108 -d2f1 12 1325 1108 -d303 d 1327 1108 -d310 3 1329 1108 -d313 d 1330 1108 -d320 5 1332 1108 -d325 24 1337 1108 -d349 4 1352 1108 -d34d 13 1166 1108 -d360 5 1167 1108 -d365 a 1342 1108 -d36f 5 1366 1108 -d374 36 1378 1108 -d3aa d 1716 1108 -d3b7 7 1724 1108 -d3be 14 1726 1108 -d3d2 9 1728 1108 -d3db 2a 1739 1108 -d405 b 1381 1108 -d410 9 1383 1108 -d419 b 1564 1108 -d424 7 1565 1108 -d42b d 1584 1108 -d438 b 1586 1108 -d443 a 1589 1108 -d44d 5 1592 1108 -d452 22 1378 1108 -d474 d 1394 1108 -d481 b 1397 1108 -d48c 2 1400 1108 -d48e 9 1402 1108 -d497 6 1404 1108 -d49d 24 1406 1108 -d4c1 5 1407 1108 -d4c6 d 1411 1108 -d4d3 c 1415 1108 -d4df 3 1420 1108 -d4e2 28 1430 1108 -d50a 7 1434 1108 -d511 2 1436 1108 -d513 7 1437 1108 -d51a 9 1439 1108 -d523 7 1440 1108 -d52a 5 1506 1108 -d52f 6 1520 1108 -d535 a 1523 1108 -d53f 2 1526 1108 -d541 9 1528 1108 -d54a 4 1530 1108 -d54e 6 1533 1108 -d554 c 1537 1108 -d560 b 1541 1108 -d56b 9 1546 1108 -d574 b 1548 1108 -d57f 7 1549 1108 -d586 5 1550 1108 -d58b 4 1551 1108 -d58f 5 1553 1108 -d594 8 1543 1108 -d59c 7 1544 1108 -d5a3 5 1557 1108 -d5a8 38 1378 1108 -d5e0 15 1908 1108 -d5f5 11 1910 1108 -d606 6 1665 1108 -d60c a 1668 1108 -d616 2 1671 1108 -d618 9 1673 1108 -d621 6 1675 1108 -d627 1f 1677 1108 -d646 5 1678 1108 -d64b c 1682 1108 -d657 d 1688 1108 -d664 9 1702 1108 -d66d 7 1703 1108 -d674 2 1704 1108 -d676 5 1706 1108 -d67b 7 1708 1108 -d682 5 1710 1108 -d687 7 1864 1108 -d68e 7 1869 1108 -d695 6 1910 1108 -d69b 9 1933 1108 -d6a4 a 1936 1108 -d6ae f 1939 1108 -d6bd 5 1942 1108 -d6c2 1a 1739 1108 -d6dc 21 1109 1108 -d6fd 17 1749 1108 -d714 9 1750 1108 -d71d 8 1751 1108 -d725 9 1752 1108 -d72e 5 1753 1108 -d733 3 1754 1108 -d736 a 1756 1108 -d740 f 1759 1108 -d74f 2 1760 1108 -d751 13 1765 1108 -d764 3 1767 1108 -d767 7 1806 1108 -d76e 9 1809 1108 -d777 2 1812 1108 -d779 a 1818 1108 -d783 6 1821 1108 -d789 16 1822 1108 -d79f 24 1828 1108 -d7c3 16 1838 1108 -d7d9 15 1840 1108 -d7ee b 1844 1108 -d7f9 15 1846 1108 -d80e 5 1852 1108 -d813 a 1853 1108 -d81d 4 1854 1108 -d821 1 1857 1108 -d822 5 1859 1108 -d827 7 1877 1108 -d82e 7 1887 1108 -d835 2 1888 1108 -d837 1a 1378 1108 -d851 7 1892 1108 -d858 14 1897 1108 -d86c 10 1900 1108 -d87c 3 1901 1108 -d87f 5 1903 1108 -d884 9 1944 1108 -d88d 28 1948 1108 -d8b5 5 1949 1108 -d8ba 7 1961 1108 -d8c1 4 1964 1108 -d8c5 6 1970 1108 -d8cb 9 1972 1108 -d8d4 28 1976 1108 -d8fc 5 1977 1108 -d901 c 1981 1108 -d90d 5 1987 1108 -d912 5 2019 1108 -d917 5 2020 1108 -d91c 6 2023 1108 -d922 b 2026 1108 -d92d 5 2029 1108 -d932 9 2031 1108 -d93b 4 2033 1108 -d93f 2 2036 1108 -d941 d 2040 1108 -d94e 5 2045 1108 -d953 6 2048 1108 -d959 b 2051 1108 -d964 5 2054 1108 -d969 9 2056 1108 -d972 4 2058 1108 -d976 2 2061 1108 -d978 d 2065 1108 -d985 2 2071 1108 -d987 5 2074 1108 -d98c 6 2077 1108 -d992 a 2080 1108 -d99c 2 2083 1108 -d99e 9 2085 1108 -d9a7 6 2087 1108 -d9ad 17 2089 1108 -d9c4 15 2114 1108 -d9d9 5 2115 1108 -d9de d 2094 1108 -d9eb 2 2099 1108 -d9ed 6 2102 1108 -d9f3 a 2105 1108 -d9fd 2 2108 1108 -d9ff 9 2110 1108 -da08 6 2112 1108 -da0e e 2119 1108 -da1c f 2128 1108 -da2b 7 2129 1108 -da32 c 2130 1108 -da3e c 2136 1108 -da4a 4 2142 1108 -da4e 6 2148 1108 -da54 7 2149 1108 -da5b 2 2150 1108 -da5d 1a 2114 1108 -da77 3 2151 1108 -da7a 10 2152 1108 -da8a 3 2153 1108 -da8d 7 2157 1108 -da94 3 2158 1108 -da97 6 2163 1108 -da9d 11 2165 1108 -daae 12 2166 1108 -dac0 d 2168 1108 -dacd 3 2170 1108 -dad0 b 2173 1108 -dadb 8 2175 1108 -dae3 1 2176 1108 -dae4 20 2180 1108 -db04 9 2181 1108 -db0d 1 2182 1108 -db0e 5 2185 1108 -db13 9 1594 1108 -db1c 9 1596 1108 -db25 c 1603 1108 -db31 c 1610 1108 -db3d 4 1611 1108 -db41 8 1612 1108 -db49 11 1614 1108 -db5a 13 1618 1108 -db6d 1 1620 1108 -db6e 9 1621 1108 -db77 2 1622 1108 -db79 19 1598 1108 -db92 5 1625 1108 -db97 8 1626 1108 -db9f c 1628 1108 -dbab 6 1629 1108 -dbb1 2 1630 1108 -dbb3 4 1629 1108 -dbb7 8 1631 1108 -dbbf 10 2189 1108 -dbcf a 2201 1108 -dbd9 a 2204 1108 -dbe3 6 2205 1108 -dbe9 6 2207 1108 -dbef 2 2208 1108 -dbf1 4 2210 1108 -dbf5 6 2212 1108 -dbfb 2 2213 1108 -dbfd 4 2215 1108 -dc01 6 2217 1108 -dc07 7 2218 1108 -dc0e b 2224 1108 -dc19 9 2228 1108 -dc22 11 2230 1108 -dc33 11 2234 1108 -dc44 13 2236 1108 -dc57 f 2238 1108 -dc66 a 2263 1108 -dc70 3 2267 1108 -dc73 3 2268 1108 -dc76 3 2269 1108 -dc79 1a 2276 1108 -dc93 7 2278 1108 -dc9a e 2282 1108 -dca8 a 2283 1108 -dcb2 2 2310 1108 -dcb4 4 2279 1108 -dcb8 2 2285 1108 -dcba d 2286 1108 -dcc7 f 2290 1108 -dcd6 11 2292 1108 -dce7 6 2297 1108 -dced 8 2298 1108 -dcf5 4 2299 1108 -dcf9 1 2298 1108 -dcfa 12 1073 1108 -dd0c c 2310 1108 -dd18 c 2314 1108 -dd24 10 2319 1108 -dd34 16 2321 1108 -dd4a 2 2360 1108 -dd4c 9 2361 1108 -dd55 6 2362 1108 -dd5b 2 2344 1108 -dd5d 3 2345 1108 -dd60 2 2346 1108 -dd62 2 2324 1108 -dd64 6 2325 1108 -dd6a 9 2319 1108 -dd73 13 1043 1108 -dd86 17 1121 1108 -dd9d f 1818 1108 -ddac 10 2376 1108 -ddbc 3a 2377 1108 -FUNC ddf6 1f 0 _initp_misc_cfltcvt_tab -ddf6 2 54 4074 -ddf8 8 56 4074 -de00 14 58 4074 -de14 1 60 4074 -FUNC de20 29 4 _ValidateImageBase -de20 0 44 3159 -de20 b 50 3159 -de2b 2 52 3159 -de2d 1 68 3159 -de2e 5 55 3159 -de33 6 56 3159 -de39 2 58 3159 -de3b d 62 3159 -de48 1 68 3159 -FUNC de50 42 8 _FindPESection -de50 0 92 3159 -de50 9 99 3159 -de59 19 108 3159 -de72 10 111 3159 -de82 a 108 3159 -de8c 5 123 3159 -de91 1 124 3159 -FUNC dea0 bb 4 _IsNonwritableInCurrentImage -dea0 33 149 3159 -ded3 7 156 3159 -deda f 164 3159 -dee9 2 166 3159 -deeb 8 174 3159 -def3 e 175 3159 -df01 2 176 3159 -df03 2 178 3159 -df05 12 185 3159 -df17 12 195 3159 -df29 17 187 3159 -df40 9 193 3159 -df49 12 195 3159 -FUNC df5b 19 4 _initp_misc_winsig -df5b 0 57 2785 -df5b 9 58 2785 -df64 5 59 2785 -df69 5 60 2785 -df6e 5 61 2785 -df73 1 62 2785 -FUNC df74 9b 4 ctrlevent_capture -df74 c 89 2785 -df80 9 94 2785 -df89 3 95 2785 -df8c 5 102 2785 -df91 5 103 2785 -df96 e 104 2785 -dfa4 7 105 2785 -dfab 2 107 2785 -dfad 5 108 2785 -dfb2 e 109 2785 -dfc0 7 110 2785 -dfc7 1 109 2785 -dfc8 9 113 2785 -dfd1 7 117 2785 -dfd8 c 120 2785 -dfe4 5 124 2785 -dfe9 4 128 2785 -dfed 2 120 2785 -dfef 8 121 2785 -dff7 6 130 2785 -dffd 7 131 2785 -e004 3 138 2785 -e007 8 139 2785 -FUNC e00f 34 4 siglookup -e00f 0 634 2785 -e00f b 635 2785 -e01a 15 645 2785 -e02f f 649 2785 -e03e 2 653 2785 -e040 2 658 2785 -e042 1 659 2785 -FUNC e043 d 0 __get_sigabrt -e043 0 676 2785 -e043 c 677 2785 -e04f 1 678 2785 -FUNC e050 9 0 __fpecode -e050 0 699 2785 -e050 8 700 2785 -e058 1 701 2785 -FUNC e059 9 0 __pxcptinfoptrs -e059 0 721 2785 -e059 8 722 2785 -e061 1 723 2785 -FUNC e062 23d 8 signal -e062 c 219 2785 -e06e 4 224 2785 -e072 3 230 2785 -e075 3 244 2785 -e078 12 230 2785 -e08a 2f 244 2785 -e0b9 13 327 2785 -e0cc 7 334 2785 -e0d3 8 335 2785 -e0db a 342 2785 -e0e5 17 346 2785 -e0fc 10 352 2785 -e10c 13 367 2785 -e11f 3 380 2785 -e122 e 382 2785 -e130 3 395 2785 -e133 17 401 2785 -e14a 5 390 2785 -e14f 5 401 2785 -e154 8 246 2785 -e15c 4 247 2785 -e160 12 254 2785 -e172 14 257 2785 -e186 6 259 2785 -e18c 2 261 2785 -e18e f 263 2785 -e19d a 264 2785 -e1a7 18 268 2785 -e1bf f 288 2785 -e1ce 4 289 2785 -e1d2 b 291 2785 -e1dd 2 293 2785 -e1df f 279 2785 -e1ee 4 280 2785 -e1f2 b 282 2785 -e1fd 2 284 2785 -e1ff f 296 2785 -e20e 4 297 2785 -e212 b 299 2785 -e21d 2 301 2785 -e21f f 271 2785 -e22e 4 272 2785 -e232 c 274 2785 -e23e c 305 2785 -e24a 9 309 2785 -e253 4 407 2785 -e257 3 305 2785 -e25a 9 306 2785 -e263 19 410 2785 -e27c 1a 419 2785 -e296 3 417 2785 -e299 6 423 2785 -FUNC e29f 1b0 4 raise -e29f c 452 2785 -e2ab 5 459 2785 -e2b0 3 460 2785 -e2b3 1f 462 2785 -e2d2 a 488 2785 -e2dc 4 489 2785 -e2e0 8 490 2785 -e2e8 a 465 2785 -e2f2 2 467 2785 -e2f4 11 492 2785 -e305 2 493 2785 -e307 f 462 2785 -e316 1c 500 2785 -e332 a 476 2785 -e33c 2 478 2785 -e33e a 470 2785 -e348 2 472 2785 -e34a a 481 2785 -e354 7 482 2785 -e35b a 502 2785 -e365 2 510 2785 -e367 4 509 2785 -e36b 6 510 2785 -e371 5 515 2785 -e376 7 520 2785 -e37d 5 527 2785 -e382 7 528 2785 -e389 5 530 2785 -e38e f 543 2785 -e39d 6 544 2785 -e3a3 3 545 2785 -e3a6 5 551 2785 -e3ab 6 552 2785 -e3b1 7 553 2785 -e3b8 5 561 2785 -e3bd 1c 568 2785 -e3d9 d 571 2785 -e3e6 5 568 2785 -e3eb 7 574 2785 -e3f2 c 577 2785 -e3fe 5 582 2785 -e403 8 588 2785 -e40b 2 589 2785 -e40d 6 577 2785 -e413 6 578 2785 -e419 9 579 2785 -e422 5 590 2785 -e427 f 597 2785 -e436 6 598 2785 -e43c 5 603 2785 -e441 6 604 2785 -e447 2 607 2785 -e449 6 608 2785 -FUNC e44f a 4 _initp_misc_rand_s -e44f 0 58 3075 -e44f 9 59 3075 -e458 1 60 3075 -FUNC e459 104 4 rand_s -e459 3 66 3075 -e45c b 67 3075 -e467 2b 68 3075 -e492 c 71 3075 -e49e d 77 3075 -e4ab 4 78 3075 -e4af 1e 80 3075 -e4cd e 83 3075 -e4db 4 84 3075 -e4df 2f 86 3075 -e50e 9 88 3075 -e517 5 89 3075 -e51c 16 94 3075 -e532 7 103 3075 -e539 9 107 3075 -e542 b 109 3075 -e54d 9 110 3075 -e556 6 112 3075 -e55c 1 113 3075 -FUNC e55d 15a 14 __getlocaleinfo -e55d 1d 70 3523 -e57a 7 76 3523 -e581 87 109 3523 -e608 13 103 3523 -e61b 5 114 3523 -e620 7 115 3523 -e627 3 141 3523 -e62a 12 142 3523 -e63c 20 106 3523 -e65c 5 108 3523 -e661 7 109 3523 -e668 4 111 3523 -e66c 5 118 3523 -e671 1a 126 3523 -e68b 2 127 3523 -e68d 2 129 3523 -e68f 10 134 3523 -e69f 16 135 3523 -e6b5 2 139 3523 -FUNC e6b7 a 4 _initp_misc_purevirt -e6b7 0 166 3523 -e6b7 9 167 3523 -e6c0 1 168 3523 -FUNC e6c1 a 4 _initp_misc_initcrit -e6c1 0 47 3609 -e6c1 9 48 3609 -e6ca 1 49 3609 -FUNC e6cb 10 8 __crtInitCritSecNoSpinCount -e6cb 0 76 3609 -e6cb a 77 3609 -e6d5 3 78 3609 -e6d8 3 79 3609 -FUNC e6db c5 8 __crtInitCritSecAndSpinCount -e6db c 109 3609 -e6e7 5 111 3609 -e6ec e 112 3609 -e6fa 4 114 3609 -e6fe 1b 120 3609 -e719 4 121 3609 -e71d 2 129 3609 -e71f b 130 3609 -e72a 4 131 3609 -e72e e 134 3609 -e73c 4 136 3609 -e740 5 149 3609 -e745 c 152 3609 -e751 3 155 3609 -e754 b 161 3609 -e75f 2 162 3609 -e761 1a 163 3609 -e77b 9 170 3609 -e784 8 171 3609 -e78c 4 173 3609 -e790 7 174 3609 -e797 3 176 3609 -e79a 6 177 3609 -FUNC e7a0 5e 4 _isatty -e7a0 0 37 4912 -e7a0 16 44 4912 -e7b6 2 59 4912 -e7b8 29 45 4912 -e7e1 1 59 4912 -e7e2 1b 58 4912 -e7fd 1 59 4912 -FUNC e7fe 2f 0 CPtoLCID -e7fe 0 329 4615 -e7fe 14 330 4615 -e812 2 345 4615 -e814 1 346 4615 -e815 5 342 4615 -e81a 1 346 4615 -e81b 5 339 4615 -e820 1 346 4615 -e821 5 336 4615 -e826 1 346 4615 -e827 5 333 4615 -e82c 1 346 4615 -FUNC e82d 55 0 setSBCS -e82d 4 363 4615 -e831 14 368 4615 -e845 3 371 4615 -e848 3 374 4615 -e84b 3 376 4615 -e84e 8 379 4615 -e856 a 381 4615 -e860 9 382 4615 -e869 b 384 4615 -e874 d 385 4615 -e881 1 386 4615 -FUNC e882 18a 0 setSBUpLow -e882 1d 402 4615 -e89f f 412 4615 -e8ae d 415 4615 -e8bb c 416 4615 -e8c7 e 420 4615 -e8d5 3 419 4615 -e8d8 28 421 4615 -e900 1d 427 4615 -e91d 23 432 4615 -e940 25 437 4615 -e965 2 442 4615 -e967 a 443 4615 -e971 5 445 4615 -e976 9 446 4615 -e97f 5 448 4615 -e984 5 450 4615 -e989 e 451 4615 -e997 2 453 4615 -e999 8 454 4615 -e9a1 5 442 4615 -e9a6 8 456 4615 -e9ae 2c 472 4615 -e9da 5 466 4615 -e9df 5 468 4615 -e9e4 7 469 4615 -e9eb 2 471 4615 -e9ed 3 472 4615 -e9f0 5 460 4615 -e9f5 17 474 4615 -FUNC ea0c a4 0 __updatetmbcinfo -ea0c c 496 4615 -ea18 7 499 4615 -ea1f 10 500 4615 -ea2f 3 533 4615 -ea32 4 536 4615 -ea36 8 538 4615 -ea3e 2 541 4615 -ea40 6 542 4615 -ea46 8 501 4615 -ea4e 4 503 4615 -ea52 e 506 4615 -ea60 17 512 4615 -ea77 7 517 4615 -ea7e 11 524 4615 -ea8f 7 525 4615 -ea96 11 528 4615 -eaa7 9 530 4615 -FUNC eab0 7a 0 getSystemCP -eab0 7 282 4615 -eab7 b 284 4615 -eac2 b 289 4615 -eacd a 291 4615 -ead7 14 292 4615 -eaeb 5 295 4615 -eaf0 a 297 4615 -eafa 8 298 4615 -eb02 5 302 4615 -eb07 12 305 4615 -eb19 f 308 4615 -eb28 2 309 4615 -FUNC eb2a 1d9 8 _setmbcp_nolock -eb2a 15 686 4615 -eb3f b 693 4615 -eb4a 9 696 4615 -eb53 7 698 4615 -eb5a 7 699 4615 -eb61 3 703 4615 -eb64 2 705 4615 -eb66 19 708 4615 -eb7f 2a 743 4615 -eba9 13 751 4615 -ebbc f 756 4615 -ebcb 15 761 4615 -ebe0 17 764 4615 -ebf7 c 766 4615 -ec03 f 712 4615 -ec12 15 715 4615 -ec27 9 720 4615 -ec30 8 723 4615 -ec38 12 724 4615 -ec4a 9 723 4615 -ec53 5 720 4615 -ec58 12 715 4615 -ec6a 20 731 4615 -ec8a d 733 4615 -ec97 7 736 4615 -ec9e 5 737 4615 -eca3 6 767 4615 -eca9 10 766 4615 -ecb9 8 771 4615 -ecc1 7 772 4615 -ecc8 b 775 4615 -ecd3 3 778 4615 -ecd6 2 780 4615 -ecd8 3 782 4615 -ecdb 8 785 4615 -ece3 2 789 4615 -ece5 6 794 4615 -eceb 6 797 4615 -ecf1 3 746 4615 -ecf4 f 802 4615 -FUNC ed03 3c 0 _getmbcp -ed03 6 819 4615 -ed09 a 821 4615 -ed13 9 822 4615 -ed1c 10 823 4615 -ed2c 2 826 4615 -ed2e f 825 4615 -ed3d 2 826 4615 -FUNC ed3f 19a 4 _setmbcp -ed3f c 574 4615 -ed4b 4 575 4615 -ed4f a 579 4615 -ed59 5 581 4615 -ed5e 3 582 4615 -ed61 b 585 4615 -ed6c 9 587 4615 -ed75 d 593 4615 -ed82 8 595 4615 -ed8a c 597 4615 -ed96 3 607 4615 -ed99 16 612 4615 -edaf 1a 614 4615 -edc9 7 615 4615 -edd0 3 619 4615 -edd3 9 620 4615 -eddc 17 622 4615 -edf3 8 624 4615 -edfb 4 625 4615 -edff 8 630 4615 -ee07 8 631 4615 -ee0f 8 632 4615 -ee17 a 633 4615 -ee21 d 634 4615 -ee2e 3 633 4615 -ee31 c 635 4615 -ee3d a 636 4615 -ee47 3 635 4615 -ee4a c 637 4615 -ee56 d 638 4615 -ee63 3 637 4615 -ee66 1c 640 4615 -ee82 7 641 4615 -ee89 6 645 4615 -ee8f 3 646 4615 -ee92 e 648 4615 -eea0 9 650 4615 -eea9 2 653 4615 -eeab 5 654 4615 -eeb0 8 660 4615 -eeb8 7 661 4615 -eebf b 662 4615 -eeca 2 668 4615 -eecc 4 673 4615 -eed0 3 682 4615 -eed3 6 683 4615 -FUNC eed9 1e 0 __initmbctable -eed9 0 843 4615 -eed9 9 853 4615 -eee2 8 854 4615 -eeea a 855 4615 -eef4 2 860 4615 -eef6 1 861 4615 -FUNC eef7 6 0 ___setlc_active_func -eef7 0 90 2995 -eef7 5 91 2995 -eefc 1 92 2995 -FUNC eefd 6 0 ___unguarded_readlc_active_add_func -eefd 0 104 2995 -eefd 5 105 2995 -ef02 1 106 2995 -FUNC ef03 140 4 __freetlocinfo -ef03 3 144 2995 -ef06 26 152 2995 -ef2c e 155 2995 -ef3a 6 157 2995 -ef40 d 158 2995 -ef4d e 162 2995 -ef5b 6 164 2995 -ef61 d 165 2995 -ef6e b 168 2995 -ef79 d 169 2995 -ef86 e 176 2995 -ef94 11 178 2995 -efa5 13 179 2995 -efb8 e 180 2995 -efc6 e 181 2995 -efd4 17 188 2995 -efeb 6 190 2995 -eff1 9 191 2995 -effa 6 194 2995 -f000 13 197 2995 -f013 7 199 2995 -f01a 10 205 2995 -f02a d 207 2995 -f037 b 214 2995 -f042 1 215 2995 -FUNC f043 86 4 __addlocaleref -f043 3 225 2995 -f046 e 227 2995 -f054 a 228 2995 -f05e 3 229 2995 -f061 a 231 2995 -f06b 3 232 2995 -f06e a 234 2995 -f078 3 235 2995 -f07b a 237 2995 -f085 3 238 2995 -f088 6 240 2995 -f08e f 242 2995 -f09d 3 243 2995 -f0a0 d 245 2995 -f0ad 9 246 2995 -f0b6 12 248 2995 -f0c8 1 249 2995 -FUNC f0c9 8c 4 __removelocaleref -f0c9 1 259 2995 -f0ca b 261 2995 -f0d5 9 263 2995 -f0de a 265 2995 -f0e8 3 266 2995 -f0eb a 268 2995 -f0f5 3 269 2995 -f0f8 a 271 2995 -f102 3 272 2995 -f105 a 274 2995 -f10f 3 275 2995 -f112 6 277 2995 -f118 f 279 2995 -f127 3 280 2995 -f12a d 282 2995 -f137 9 283 2995 -f140 11 285 2995 -f151 3 287 2995 -f154 1 288 2995 -FUNC f155 24 0 _copytlocinfo_nolock -f155 3 302 2995 -f158 d 303 2995 -f165 7 304 2995 -f16c 3 305 2995 -f16f 9 306 2995 -f178 1 308 2995 -FUNC f179 3e 0 _updatetlocinfoEx_nolock -f179 0 321 2995 -f179 9 324 2995 -f182 2 326 2995 -f184 4 327 2995 -f188 8 334 2995 -f190 5 339 2995 -f195 6 341 2995 -f19b e 350 2995 -f1a9 7 351 2995 -f1b0 3 355 2995 -f1b3 1 356 2995 -f1b4 2 325 2995 -f1b6 1 356 2995 -FUNC f1b7 76 0 __updatetlocinfo -f1b7 c 382 2995 -f1c3 7 384 2995 -f1ca 10 386 2995 -f1da 8 397 2995 -f1e2 4 399 2995 -f1e6 8 401 2995 -f1ee 2 404 2995 -f1f0 6 405 2995 -f1f6 8 387 2995 -f1fe 4 388 2995 -f202 11 390 2995 -f213 e 392 2995 -f221 8 394 2995 -f229 4 395 2995 -FUNC f22d 66 4 _configthreadlocale -f22d 2 420 2995 -f22f 5 434 2995 -f234 10 435 2995 -f244 19 437 2995 -f25d 1d 456 2995 -f27a 3 444 2995 -f27d 2 445 2995 -f27f 6 440 2995 -f285 2 441 2995 -f287 7 452 2995 -f28e 4 460 2995 -f292 1 462 2995 -FUNC f293 53 0 sync_legacy_variables_lk -f293 0 489 2995 -f293 e 490 2995 -f2a1 9 491 2995 -f2aa c 492 2995 -f2b6 c 493 2995 -f2c2 c 494 2995 -f2ce c 495 2995 -f2da b 496 2995 -f2e5 1 497 2995 -FUNC f2e6 96 4 _free_locale -f2e6 c 517 2995 -f2f2 9 518 2995 -f2fb 1c 522 2995 -f317 7 524 2995 -f31e 4 526 2995 -f322 8 534 2995 -f32a 3 535 2995 -f32d 8 537 2995 -f335 11 540 2995 -f346 7 541 2995 -f34d c 543 2995 -f359 7 552 2995 -f360 3 553 2995 -f363 7 554 2995 -f36a 6 556 2995 -f370 3 543 2995 -f373 9 545 2995 -FUNC f37c 5 4 __free_locale -f37c 0 562 2995 -f37c 5 563 2995 -FUNC f381 88 0 _get_current_locale -f381 c 687 2995 -f38d 7 689 2995 -f394 14 691 2995 -f3a8 b 693 2995 -f3b3 4 694 2995 -f3b7 5 697 2995 -f3bc 5 698 2995 -f3c1 5 706 2995 -f3c6 6 707 2995 -f3cc 8 708 2995 -f3d4 4 709 2995 -f3d8 8 710 2995 -f3e0 c 712 2995 -f3ec 9 715 2995 -f3f5 2 717 2995 -f3f7 6 718 2995 -f3fd 3 712 2995 -f400 9 713 2995 -FUNC f409 5 0 __get_current_locale -f409 0 722 2995 -f409 5 723 2995 -FUNC f40e 3 4 __init_dummy -f40e 0 1283 2995 -f40e 2 1284 2995 -f410 1 1285 2995 -FUNC f411 3e c _strcats -f411 2 1288 2995 -f413 f 1294 2995 -f422 26 1296 2995 -f448 6 1294 2995 -f44e 1 1299 2995 -FUNC f44f 129 8 __lc_strtolc -f44f 6 1302 2995 -f455 11 1307 2995 -f466 c 1309 2995 -f472 7 1310 2995 -f479 b 1313 2995 -f484 25 1315 2995 -f4a9 6 1317 2995 -f4af 2 1318 2995 -f4b1 15 1323 2995 -f4c6 1d 1328 2995 -f4e3 9 1329 2995 -f4ec 10 1331 2995 -f4fc c 1332 2995 -f508 14 1334 2995 -f51c 28 1335 2995 -f544 9 1340 2995 -f54d b 1348 2995 -f558 18 1350 2995 -f570 6 1338 2995 -f576 2 1353 2995 -FUNC f578 6b c __lc_lctostr -f578 5 1356 2995 -f57d 25 1357 2995 -f5a2 7 1358 2995 -f5a9 16 1359 2995 -f5bf c 1360 2995 -f5cb 16 1361 2995 -f5e1 2 1362 2995 -FUNC f5e3 171 0 _setlocale_get_all -f5e3 4 1124 2995 -f5e7 3 1126 2995 -f5ea 1d 1134 2995 -f607 3 1137 2995 -f60a 3 1139 2995 -f60d 2 1140 2995 -f60f 2f 1143 2995 -f63e 26 1146 2995 -f664 10 1147 2995 -f674 5 1148 2995 -f679 4 1141 2995 -f67d 2f 1143 2995 -f6ac a 1144 2995 -f6b6 8 1152 2995 -f6be 14 1154 2995 -f6d2 9 1156 2995 -f6db e 1159 2995 -f6e9 9 1161 2995 -f6f2 7 1165 2995 -f6f9 7 1166 2995 -f700 9 1168 2995 -f709 15 1170 2995 -f71e 9 1172 2995 -f727 e 1175 2995 -f735 9 1177 2995 -f73e 12 1183 2995 -f750 4 1187 2995 -FUNC f754 1d4 18 _expandlocale -f754 15 1198 2995 -f769 41 1230 2995 -f7aa 14 1211 2995 -f7be b 1216 2995 -f7c9 26 1219 2995 -f7ef 4 1220 2995 -f7f3 3 1222 2995 -f7f6 4 1223 2995 -f7fa 4 1224 2995 -f7fe 7 1226 2995 -f805 2 1228 2995 -f807 8 1230 2995 -f80f 6 1234 2995 -f815 2f 1236 2995 -f844 4 1241 2995 -f848 e 1243 2995 -f856 6 1244 2995 -f85c 10 1246 2995 -f86c 6 1247 2995 -f872 9 1251 2995 -f87b 10 1253 2995 -f88b a 1255 2995 -f895 2 1260 2995 -f897 8 1263 2995 -f89f 26 1267 2995 -f8c5 5 1271 2995 -f8ca e 1272 2995 -f8d8 5 1273 2995 -f8dd 10 1274 2995 -f8ed 22 1276 2995 -f90f 5 1277 2995 -f914 2 1212 2995 -f916 12 1278 2995 -FUNC f928 2f6 4 _setlocale_set_cat -f928 19 980 2995 -f941 5 993 2995 -f946 2f 998 2995 -f975 7 1000 2995 -f97c 19 1002 2995 -f995 6 1004 2995 -f99b c 1007 2995 -f9a7 16 1008 2995 -f9bd 2 1010 2995 -f9bf 3 1013 2995 -f9c2 d 1014 2995 -f9cf 2c 1015 2995 -f9fb 3 1016 2995 -f9fe 39 1019 2995 -fa37 6 1020 2995 -fa3d 15 1021 2995 -fa52 17 1022 2995 -fa69 a 1029 2995 -fa73 6 1031 2995 -fa79 18 1037 2995 -fa91 7 1039 2995 -fa98 8 1053 2995 -faa0 14 1054 2995 -fab4 18 1055 2995 -facc 2 1039 2995 -face a 1044 2995 -fad8 d 1046 2995 -fae5 b 1047 2995 -faf0 9 1058 2995 -faf9 26 1066 2995 -fb1f 2 1069 2995 -fb21 10 1071 2995 -fb31 22 1072 2995 -fb53 2 1081 2995 -fb55 4 1082 2995 -fb59 5 1083 2995 -fb5e 9 1085 2995 -fb67 6 1088 2995 -fb6d 9 1089 2995 -fb76 12 1091 2995 -fb88 6 1094 2995 -fb8e e 1095 2995 -fb9c f 1096 2995 -fbab 9 1097 2995 -fbb4 5 1099 2995 -fbb9 24 1106 2995 -fbdd 7 1109 2995 -fbe4 8 1110 2995 -fbec 6 1111 2995 -fbf2 18 1116 2995 -fc0a 3 1118 2995 -fc0d 11 1119 2995 -FUNC fc1e 1ce 4 _setlocale_nolock -fc1e 1a 873 2995 -fc38 7 877 2995 -fc3f 5 904 2995 -fc44 17 880 2995 -fc5b 5 882 2995 -fc60 12 888 2995 -fc72 1d 890 2995 -fc8f 2 894 2995 -fc91 d 898 2995 -fc9e 1e 900 2995 -fcbc 11 904 2995 -fccd 1d 907 2995 -fcea e 904 2995 -fcf8 1b 913 2995 -fd13 6 916 2995 -fd19 24 918 2995 -fd3d 18 922 2995 -fd55 3 923 2995 -fd58 7 925 2995 -fd5f 1 926 2995 -fd60 9 928 2995 -fd69 c 930 2995 -fd75 4 901 2995 -fd79 19 935 2995 -fd92 3 937 2995 -fd95 4 939 2995 -fd99 11 941 2995 -fdaa c 943 2995 -fdb6 2 947 2995 -fdb8 3 949 2995 -fdbb 2 952 2995 -fdbd 3 953 2995 -fdc0 9 937 2995 -fdc9 5 956 2995 -fdce 2 961 2995 -fdd0 3 962 2995 -fdd3 2 965 2995 -fdd5 5 966 2995 -fdda 12 972 2995 -FUNC fdec f3 8 _create_locale -fdec 0 605 2995 -fdec 10 609 2995 -fdfc 13 612 2995 -fe0f b 614 2995 -fe1a 4 610 2995 -fe1e c 658 2995 -fe2a 8 617 2995 -fe32 7 619 2995 -fe39 2 621 2995 -fe3b 14 623 2995 -fe4f 7 625 2995 -fe56 7 626 2995 -fe5d 2 628 2995 -fe5f c 630 2995 -fe6b 14 632 2995 -fe7f 7 634 2995 -fe86 7 635 2995 -fe8d 9 637 2995 -fe96 2 640 2995 -fe98 13 642 2995 -feab 8 644 2995 -feb3 7 645 2995 -feba 7 646 2995 -fec1 9 647 2995 -feca 2 648 2995 -fecc 2 650 2995 -fece 5 652 2995 -fed3 5 653 2995 -fed8 7 657 2995 -FUNC fedf 5 8 __create_locale -fedf 0 665 2995 -fedf 5 666 2995 -FUNC fee4 170 8 setlocale -fee4 c 791 2995 -fef0 5 792 2995 -fef5 25 797 2995 -ff1a a 799 2995 -ff24 5 801 2995 -ff29 4 806 2995 -ff2d 3 807 2995 -ff30 1b 808 2995 -ff4b 8 818 2995 -ff53 7 819 2995 -ff5a a 820 2995 -ff64 8 822 2995 -ff6c 19 826 2995 -ff85 18 834 2995 -ff9d a 836 2995 -ffa7 8 839 2995 -ffaf 7 840 2995 -ffb6 a 841 2995 -ffc0 7 842 2995 -ffc7 f 846 2995 -ffd6 c 847 2995 -ffe2 18 849 2995 -fffa 5 850 2995 -ffff b 852 2995 -1000a 8 822 2995 -10012 9 823 2995 -1001b 3 852 2995 -1001e 9 853 2995 -10027 2 855 2995 -10029 6 856 2995 -1002f 8 857 2995 -10037 c 860 2995 -10043 3 865 2995 -10046 6 866 2995 -1004c 3 860 2995 -1004f 5 862 2995 -FUNC 10054 15f 14 _wctomb_s_l -10054 8 56 6128 -1005c 11 57 6128 -1006d 7 60 6128 -10074 2 62 6128 -10076 4 64 6128 -1007a 7 67 6128 -10081 3 69 6128 -10084 23 74 6128 -100a7 b 77 6128 -100b2 c 79 6128 -100be a 81 6128 -100c8 8 83 6128 -100d0 b 85 6128 -100db b 125 6128 -100e6 13 126 6128 -100f9 5 136 6128 -100fe 4 91 6128 -10102 2c 93 6128 -1012e 2 94 6128 -10130 7 96 6128 -10137 6 98 6128 -1013d 15 100 6128 -10152 27 115 6128 -10179 7 129 6128 -10180 2 131 6128 -10182 2 133 6128 -10184 f 117 6128 -10193 10 119 6128 -101a3 b 121 6128 -101ae 5 123 6128 -FUNC 101b3 1b 10 wctomb_s -101b3 0 144 6128 -101b3 1a 145 6128 -101cd 1 146 6128 -FUNC 101ce 4f c _wctomb_l -101ce 6 178 6128 -101d4 f 181 6128 -101e3 1f 183 6128 -10202 19 184 6128 -1021b 2 185 6128 -FUNC 1021d 30 8 wctomb -1021d 4 191 6128 -10221 4 192 6128 -10225 1a 195 6128 -1023f 7 196 6128 -10246 2 197 6128 -10248 3 196 6128 -1024b 2 197 6128 -FUNC 1024d 36 8 _isleadbyte_l -1024d 6 55 6490 -10253 b 56 6490 -1025e 23 57 6490 -10281 2 58 6490 -FUNC 10283 e 4 isleadbyte -10283 0 63 6490 -10283 d 64 6490 -10290 1 65 6490 -FUNC 10291 16 8 _iswalpha_l -10291 0 71 6490 -10291 15 72 6490 -102a6 1 73 6490 -FUNC 102a7 11 4 iswalpha -102a7 0 78 6490 -102a7 10 79 6490 -102b7 1 80 6490 -FUNC 102b8 13 8 _iswupper_l -102b8 0 86 6490 -102b8 12 87 6490 -102ca 1 88 6490 -FUNC 102cb e 4 iswupper -102cb 0 93 6490 -102cb d 94 6490 -102d8 1 95 6490 -FUNC 102d9 13 8 _iswlower_l -102d9 0 101 6490 -102d9 12 102 6490 -102eb 1 103 6490 -FUNC 102ec e 4 iswlower -102ec 0 108 6490 -102ec d 109 6490 -102f9 1 110 6490 -FUNC 102fa 13 8 _iswdigit_l -102fa 0 116 6490 -102fa 12 117 6490 -1030c 1 118 6490 -FUNC 1030d e 4 iswdigit -1030d 0 123 6490 -1030d d 124 6490 -1031a 1 125 6490 -FUNC 1031b 16 8 _iswxdigit_l -1031b 0 131 6490 -1031b 15 132 6490 -10330 1 133 6490 -FUNC 10331 11 4 iswxdigit -10331 0 138 6490 -10331 10 139 6490 -10341 1 140 6490 -FUNC 10342 13 8 _iswspace_l -10342 0 146 6490 -10342 12 147 6490 -10354 1 148 6490 -FUNC 10355 e 4 iswspace -10355 0 153 6490 -10355 d 154 6490 -10362 1 155 6490 -FUNC 10363 13 8 _iswpunct_l -10363 0 161 6490 -10363 12 162 6490 -10375 1 163 6490 -FUNC 10376 e 4 iswpunct -10376 0 168 6490 -10376 d 169 6490 -10383 1 170 6490 -FUNC 10384 16 8 _iswalnum_l -10384 0 176 6490 -10384 15 177 6490 -10399 1 178 6490 -FUNC 1039a 11 4 iswalnum -1039a 0 183 6490 -1039a 10 184 6490 -103aa 1 185 6490 -FUNC 103ab 16 8 _iswprint_l -103ab 0 191 6490 -103ab 15 192 6490 -103c0 1 193 6490 -FUNC 103c1 11 4 iswprint -103c1 0 198 6490 -103c1 10 199 6490 -103d1 1 200 6490 -FUNC 103d2 16 8 _iswgraph_l -103d2 0 206 6490 -103d2 15 207 6490 -103e7 1 208 6490 -FUNC 103e8 11 4 iswgraph -103e8 0 213 6490 -103e8 10 214 6490 -103f8 1 215 6490 -FUNC 103f9 13 8 _iswcntrl_l -103f9 0 221 6490 -103f9 12 222 6490 -1040b 1 223 6490 -FUNC 1040c e 4 iswcntrl -1040c 0 228 6490 -1040c d 229 6490 -10419 1 230 6490 -FUNC 1041a c 4 iswascii -1041a 0 235 6490 -1041a b 236 6490 -10425 1 237 6490 -FUNC 10426 26 8 _iswcsym_l -10426 0 243 6490 -10426 21 244 6490 -10447 1 245 6490 -10448 3 244 6490 -1044b 1 245 6490 -FUNC 1044c 21 4 __iswcsym -1044c 0 250 6490 -1044c 1c 251 6490 -10468 1 252 6490 -10469 3 251 6490 -1046c 1 252 6490 -FUNC 1046d 26 8 _iswcsymf_l -1046d 0 258 6490 -1046d 21 259 6490 -1048e 1 260 6490 -1048f 3 259 6490 -10492 1 260 6490 -FUNC 10493 21 4 __iswcsymf -10493 0 265 6490 -10493 1c 266 6490 -104af 1 267 6490 -104b0 3 266 6490 -104b3 1 267 6490 -FUNC 104c0 95 0 _aulldvrm -104c0 0 45 5113 -104c0 1 47 5113 -104c1 4 79 5113 -104c5 2 80 5113 -104c7 2 81 5113 -104c9 4 82 5113 -104cd 4 83 5113 -104d1 2 84 5113 -104d3 2 85 5113 -104d5 2 86 5113 -104d7 4 87 5113 -104db 2 88 5113 -104dd 2 89 5113 -104df 2 94 5113 -104e1 4 95 5113 -104e5 2 96 5113 -104e7 2 97 5113 -104e9 4 98 5113 -104ed 2 99 5113 -104ef 2 100 5113 -104f1 2 107 5113 -104f3 4 108 5113 -104f7 4 109 5113 -104fb 4 110 5113 -104ff 2 112 5113 -10501 2 113 5113 -10503 2 114 5113 -10505 2 115 5113 -10507 2 116 5113 -10509 2 117 5113 -1050b 2 118 5113 -1050d 2 119 5113 -1050f 4 128 5113 -10513 2 129 5113 -10515 4 130 5113 -10519 2 131 5113 -1051b 2 132 5113 -1051d 2 133 5113 -1051f 4 141 5113 -10523 2 142 5113 -10525 2 143 5113 -10527 4 144 5113 -1052b 2 145 5113 -1052d 1 147 5113 -1052e 4 148 5113 -10532 4 149 5113 -10536 2 151 5113 -10538 4 160 5113 -1053c 4 161 5113 -10540 2 162 5113 -10542 2 163 5113 -10544 3 164 5113 -10547 2 169 5113 -10549 2 170 5113 -1054b 2 171 5113 -1054d 2 172 5113 -1054f 2 173 5113 -10551 1 179 5113 -10552 3 181 5113 -FUNC 10558 90 0 _local_unwind4 -FUNC 105e8 46 0 _unwind_handler4 -FUNC 1062e 1c 4 _seh_longjmp_unwind4 -FUNC 1064a 17 0 _EH4_CallFilterFunc -FUNC 10661 19 0 _EH4_TransferToHandler -FUNC 1067a 1a 0 _EH4_GlobalUnwind -FUNC 10694 17 8 _EH4_LocalUnwind -FUNC 106ab 33 0 write_char -106ab 0 2433 1218 -106ab a 2434 1218 -106b5 2 2437 1218 -106b7 21 2442 1218 -106d8 2 2444 1218 -106da 1 2447 1218 -106db 2 2446 1218 -106dd 1 2447 1218 -FUNC 106de 24 c write_multi_char -106de 6 2498 1218 -106e4 2 2501 1218 -106e6 e 2500 1218 -106f4 5 2501 1218 -106f9 7 2499 1218 -10700 2 2504 1218 -FUNC 10702 4a 4 write_string -10702 0 2563 1218 -10702 12 2564 1218 -10714 6 2566 1218 -1071a 2 2567 1218 -1071c e 2570 1218 -1072a 5 2571 1218 -1072f a 2573 1218 -10739 9 2574 1218 -10742 9 2569 1218 -1074b 1 2579 1218 -FUNC 1074c 9b0 10 _output_s_l -1074c 1b 975 1218 -10767 45 1036 1218 -107ac 2d 1031 1218 -107d9 b1 1033 1218 -1088a 8 1036 1218 -10892 28 1073 1218 -108ba 17 1078 1218 -108d1 e 1079 1218 -108df 11 1124 1218 -108f0 12 1131 1218 -10902 2 1171 1218 -10904 13 1173 1218 -10917 3 1174 1218 -1091a 5 1175 1218 -1091f 1e 1179 1218 -1093d 3 1193 1218 -10940 5 1194 1218 -10945 4 1181 1218 -10949 5 1182 1218 -1094e 4 1184 1218 -10952 5 1185 1218 -10957 7 1190 1218 -1095e 5 1191 1218 -10963 4 1187 1218 -10967 5 1196 1218 -1096c 5 1200 1218 -10971 9 1206 1218 -1097a b 1233 1218 -10985 4 1235 1218 -10989 3 1236 1218 -1098c 5 1239 1218 -10991 10 1241 1218 -109a1 5 1243 1218 -109a6 4 1248 1218 -109aa 5 1249 1218 -109af 5 1253 1218 -109b4 9 1259 1218 -109bd b 1284 1218 -109c8 4 1285 1218 -109cc 5 1287 1218 -109d1 10 1289 1218 -109e1 5 1291 1218 -109e6 18 1295 1218 -109fe 7 1362 1218 -10a05 5 1363 1218 -10a0a 5 1301 1218 -10a0f 1 1303 1218 -10a10 a 1304 1218 -10a1a 5 1306 1218 -10a1f 4 1308 1218 -10a23 5 1310 1218 -10a28 4 1358 1218 -10a2c 5 1359 1218 -10a31 c 1322 1218 -10a3d 2 1324 1218 -10a3f f 1325 1218 -10a4e a 1327 1218 -10a58 2 1329 1218 -10a5a a 1330 1218 -10a64 5 1332 1218 -10a69 30 1337 1218 -10a99 4 1352 1218 -10a9d 4 1154 1218 -10aa1 10 1158 1218 -10ab1 11 1160 1218 -10ac2 3 1161 1218 -10ac5 b 1163 1218 -10ad0 b 1166 1218 -10adb 5 1167 1218 -10ae0 32 1378 1218 -10b12 d 1716 1218 -10b1f 4 1724 1218 -10b23 18 1749 1218 -10b3b c 1750 1218 -10b47 8 1381 1218 -10b4f 9 1385 1218 -10b58 8 1561 1218 -10b60 7 1562 1218 -10b67 d 1584 1218 -10b74 3 1589 1218 -10b77 15 1635 1218 -10b8c 4 1636 1218 -10b90 8 1637 1218 -10b98 f 1639 1218 -10ba7 1d 1378 1218 -10bc4 12 1448 1218 -10bd6 16 1467 1218 -10bec 4 1470 1218 -10bf0 7 1471 1218 -10bf7 2 1472 1218 -10bf9 6 1499 1218 -10bff 7 1500 1218 -10c06 6 1503 1218 -10c0c 5 1506 1218 -10c11 5 1523 1218 -10c16 e 1541 1218 -10c24 6 1546 1218 -10c2a d 1548 1218 -10c37 7 1549 1218 -10c3e 5 1550 1218 -10c43 4 1551 1218 -10c47 5 1553 1218 -10c4c 8 1543 1218 -10c54 7 1544 1218 -10c5b 5 1557 1218 -10c60 34 1378 1218 -10c94 9 1908 1218 -10c9d 9 1910 1218 -10ca6 8 1668 1218 -10cae d 1688 1218 -10cbb 6 1702 1218 -10cc1 7 1703 1218 -10cc8 2 1704 1218 -10cca 5 1706 1218 -10ccf 7 1708 1218 -10cd6 5 1710 1218 -10cdb 4 1864 1218 -10cdf 7 1869 1218 -10ce6 c 1933 1218 -10cf2 8 1939 1218 -10cfa 5 1958 1218 -10cff 7 1751 1218 -10d06 9 1752 1218 -10d0f 5 1753 1218 -10d14 3 1754 1218 -10d17 9 1756 1218 -10d20 f 1759 1218 -10d2f 2 1760 1218 -10d31 15 1765 1218 -10d46 8 1767 1218 -10d4e e 1809 1218 -10d5c 27 1828 1218 -10d83 14 1838 1218 -10d97 15 1840 1218 -10dac a 1844 1218 -10db6 15 1846 1218 -10dcb 5 1852 1218 -10dd0 7 1853 1218 -10dd7 4 1854 1218 -10ddb 1 1857 1218 -10ddc 5 1859 1218 -10de1 3 1877 1218 -10de4 3 1887 1218 -10de7 2 1888 1218 -10de9 1a 1378 1218 -10e03 7 1892 1218 -10e0a 11 1897 1218 -10e1b c 1900 1218 -10e27 7 1901 1218 -10e2e 5 1903 1218 -10e33 5 1961 1218 -10e38 6 1987 1218 -10e3e 14 2026 1218 -10e52 2 2045 1218 -10e54 5 2051 1218 -10e59 2 2071 1218 -10e5b 3 2074 1218 -10e5e 6 2080 1218 -10e64 2 2099 1218 -10e66 5 2105 1218 -10e6b f 2128 1218 -10e7a 7 2129 1218 -10e81 7 2130 1218 -10e88 c 2136 1218 -10e94 2 2142 1218 -10e96 6 2148 1218 -10e9c 7 2149 1218 -10ea3 2 2150 1218 -10ea5 4 2151 1218 -10ea9 a 2152 1218 -10eb3 3 2153 1218 -10eb6 6 2157 1218 -10ebc 3 2158 1218 -10ebf 6 2163 1218 -10ec5 10 2165 1218 -10ed5 10 2166 1218 -10ee5 c 2168 1218 -10ef1 3 2170 1218 -10ef4 3 2172 1218 -10ef7 2 2173 1218 -10ef9 8 2175 1218 -10f01 1 2176 1218 -10f02 19 2180 1218 -10f1b 9 2181 1218 -10f24 1 2182 1218 -10f25 2 2185 1218 -10f27 7 1640 1218 -10f2e 2 1641 1218 -10f30 4 1640 1218 -10f34 5 1642 1218 -10f39 2 1644 1218 -10f3b 4 1645 1218 -10f3f 8 1646 1218 -10f47 5 1647 1218 -10f4c 6 1648 1218 -10f52 1 1649 1218 -10f53 4 1648 1218 -10f57 6 1650 1218 -10f5d a 2201 1218 -10f67 7 2204 1218 -10f6e 6 2205 1218 -10f74 4 2207 1218 -10f78 2 2208 1218 -10f7a 4 2210 1218 -10f7e 4 2212 1218 -10f82 2 2213 1218 -10f84 4 2215 1218 -10f88 4 2217 1218 -10f8c 7 2218 1218 -10f93 9 2224 1218 -10f9c 6 2228 1218 -10fa2 11 2230 1218 -10fb3 11 2234 1218 -10fc4 d 2236 1218 -10fd1 f 2238 1218 -10fe0 d 2243 1218 -10fed 3 2249 1218 -10ff0 3 2250 1218 -10ff3 1e 2252 1218 -11011 9 2253 1218 -1101a 18 2257 1218 -11032 2 1690 1218 -11034 4 2254 1218 -11038 2 2259 1218 -1103a d 2260 1218 -11047 c 2290 1218 -11053 f 2292 1218 -11062 6 2297 1218 -11068 8 2298 1218 -11070 1b 2299 1218 -1108b 17 1125 1218 -110a2 2 1690 1218 -110a4 f 2310 1218 -110b3 10 2376 1218 -110c3 39 2377 1218 -FUNC 110fc 129 10 _validate_param_reuseA -110fc 3 606 1271 -110ff 1c 610 1271 -1111b f 617 1271 -1112a 11 618 1271 -1113b 10 620 1271 -1114b 36 629 1271 -11181 46 632 1271 -111c7 2 633 1271 -111c9 17 639 1271 -111e0 c 645 1271 -111ec 2c 626 1271 -11218 b 614 1271 -11223 2 646 1271 -FUNC 11225 33 0 write_char -11225 0 2433 1271 -11225 a 2434 1271 -1122f 2 2437 1271 -11231 21 2442 1271 -11252 2 2444 1271 -11254 1 2447 1271 -11255 2 2446 1271 -11257 1 2447 1271 -FUNC 11258 24 c write_multi_char -11258 6 2498 1271 -1125e 2 2501 1271 -11260 e 2500 1271 -1126e 5 2501 1271 -11273 7 2499 1271 -1127a 2 2504 1271 -FUNC 1127c 4a 4 write_string -1127c 0 2563 1271 -1127c 12 2564 1271 -1128e 6 2566 1271 -11294 2 2567 1271 -11296 e 2570 1271 -112a4 5 2571 1271 -112a9 a 2573 1271 -112b3 9 2574 1271 -112bc 9 2569 1271 -112c5 1 2579 1271 -FUNC 112c6 10 4 get_crtdouble_arg -112c6 0 2684 1271 -112c6 f 2685 1271 -112d5 1 2686 1271 -FUNC 112d6 f88 10 _output_p_l -112d6 1b 975 1271 -112f1 15 986 1271 -11306 b 1007 1271 -11311 2b 2172 1271 -1133c 2c 1031 1271 -11368 9b 1033 1271 -11403 8 1036 1271 -1140b 3 1038 1271 -1140e 3 1041 1271 -11411 3 1043 1271 -11414 11 1046 1271 -11425 7 1061 1271 -1142c 4 1062 1271 -11430 7 1069 1271 -11437 32 1073 1271 -11469 19 1078 1271 -11482 e 1079 1271 -11490 1a 1082 1271 -114aa 6 1084 1271 -114b0 1b 1087 1271 -114cb 5 1089 1271 -114d0 15 1091 1271 -114e5 3 1093 1271 -114e8 2 1095 1271 -114ea 6 1097 1271 -114f0 5 1101 1271 -114f5 c 1103 1271 -11501 7 1104 1271 -11508 e 1106 1271 -11516 1a 1109 1271 -11530 8 1112 1271 -11538 f 1131 1271 -11547 9 1120 1271 -11550 b 1131 1271 -1155b 21 1137 1271 -1157c 5 1145 1271 -11581 16 1173 1271 -11597 3 1174 1271 -1159a 5 1175 1271 -1159f 1f 1179 1271 -115be 7 1193 1271 -115c5 5 1194 1271 -115ca 7 1181 1271 -115d1 5 1182 1271 -115d6 6 1184 1271 -115dc 5 1185 1271 -115e1 a 1190 1271 -115eb 5 1191 1271 -115f0 7 1187 1271 -115f7 5 1196 1271 -115fc 9 1200 1271 -11605 5 1203 1271 -1160a a 1206 1271 -11614 2 1209 1271 -11616 c 1211 1271 -11622 7 1212 1271 -11629 b 1214 1271 -11634 1b 1216 1271 -1164f 8 1219 1271 -11657 12 1221 1271 -11669 9 1274 1271 -11672 5 1275 1271 -11677 c 1228 1271 -11683 b 1233 1271 -1168e 7 1235 1271 -11695 3 1236 1271 -11698 5 1239 1271 -1169d 10 1241 1271 -116ad 5 1243 1271 -116b2 3 1248 1271 -116b5 5 1249 1271 -116ba 5 1253 1271 -116bf 5 1256 1271 -116c4 a 1259 1271 -116ce 2 1262 1271 -116d0 c 1264 1271 -116dc 7 1265 1271 -116e3 f 1267 1271 -116f2 c 1280 1271 -116fe b 1284 1271 -11709 4 1285 1271 -1170d 5 1287 1271 -11712 1c 1274 1271 -1172e 10 1289 1271 -1173e 5 1291 1271 -11743 18 1295 1271 -1175b a 1362 1271 -11765 5 1363 1271 -1176a 5 1301 1271 -1176f 1 1303 1271 -11770 d 1304 1271 -1177d 5 1306 1271 -11782 7 1308 1271 -11789 5 1310 1271 -1178e 7 1358 1271 -11795 5 1359 1271 -1179a c 1322 1271 -117a6 2 1324 1271 -117a8 12 1325 1271 -117ba a 1327 1271 -117c4 2 1329 1271 -117c6 d 1330 1271 -117d3 5 1332 1271 -117d8 18 1337 1271 -117f0 3 1352 1271 -117f3 13 1158 1271 -11806 11 1160 1271 -11817 8 1161 1271 -1181f 8 1163 1271 -11827 b 1166 1271 -11832 5 1167 1271 -11837 a 1342 1271 -11841 5 1366 1271 -11846 39 1378 1271 -1187f 9 1716 1271 -11888 7 1724 1271 -1188f 12 1726 1271 -118a1 a 1728 1271 -118ab 27 1739 1271 -118d2 b 1381 1271 -118dd c 1385 1271 -118e9 b 1561 1271 -118f4 a 1562 1271 -118fe d 1584 1271 -1190b 9 1586 1271 -11914 a 1589 1271 -1191e 5 1592 1271 -11923 25 1378 1271 -11948 b 1442 1271 -11953 5 1445 1271 -11958 b 1448 1271 -11963 2 1451 1271 -11965 a 1453 1271 -1196f 27 1457 1271 -11996 5 1458 1271 -1199b a 1462 1271 -119a5 19 1467 1271 -119be 4 1470 1271 -119c2 3 1471 1271 -119c5 2 1472 1271 -119c7 5 1477 1271 -119cc b 1480 1271 -119d7 2 1483 1271 -119d9 a 1485 1271 -119e3 f 1489 1271 -119f2 a 1494 1271 -119fc 6 1499 1271 -11a02 3 1500 1271 -11a05 9 1503 1271 -11a0e 5 1506 1271 -11a13 5 1520 1271 -11a18 a 1523 1271 -11a22 2 1526 1271 -11a24 a 1528 1271 -11a2e 9 1532 1271 -11a37 6 1533 1271 -11a3d 9 1537 1271 -11a46 b 1541 1271 -11a51 9 1546 1271 -11a5a d 1548 1271 -11a67 3 1549 1271 -11a6a 5 1550 1271 -11a6f 3 1551 1271 -11a72 5 1553 1271 -11a77 8 1543 1271 -11a7f 7 1544 1271 -11a86 5 1557 1271 -11a8b 38 1378 1271 -11ac3 14 1908 1271 -11ad7 f 1910 1271 -11ae6 5 1665 1271 -11aeb a 1668 1271 -11af5 2 1671 1271 -11af7 a 1673 1271 -11b01 25 1677 1271 -11b26 5 1678 1271 -11b2b 9 1682 1271 -11b34 9 1688 1271 -11b3d 9 1702 1271 -11b46 7 1703 1271 -11b4d 2 1704 1271 -11b4f 5 1706 1271 -11b54 3 1708 1271 -11b57 5 1710 1271 -11b5c 7 1864 1271 -11b63 7 1869 1271 -11b6a f 1933 1271 -11b79 9 1936 1271 -11b82 e 1939 1271 -11b90 5 1942 1271 -11b95 1c 1739 1271 -11bb1 21 1109 1271 -11bd2 16 1749 1271 -11be8 9 1750 1271 -11bf1 7 1751 1271 -11bf8 3 1767 1271 -11bfb 5 1806 1271 -11c00 9 1809 1271 -11c09 2 1812 1271 -11c0b 5 1753 1271 -11c10 3 1754 1271 -11c13 a 1756 1271 -11c1d f 1759 1271 -11c2c 2 1760 1271 -11c2e 11 1765 1271 -11c3f a 1818 1271 -11c49 6 1821 1271 -11c4f 16 1822 1271 -11c65 26 1828 1271 -11c8b 16 1838 1271 -11ca1 17 1840 1271 -11cb8 a 1844 1271 -11cc2 17 1846 1271 -11cd9 8 1852 1271 -11ce1 a 1853 1271 -11ceb 3 1854 1271 -11cee 3 1857 1271 -11cf1 5 1859 1271 -11cf6 7 1877 1271 -11cfd 7 1887 1271 -11d04 2 1888 1271 -11d06 1a 1378 1271 -11d20 7 1892 1271 -11d27 14 1897 1271 -11d3b c 1900 1271 -11d47 7 1901 1271 -11d4e 5 1903 1271 -11d53 a 1944 1271 -11d5d 2c 1948 1271 -11d89 5 1949 1271 -11d8e 6 1961 1271 -11d94 3 1964 1271 -11d97 6 1970 1271 -11d9d a 1972 1271 -11da7 2c 1976 1271 -11dd3 5 1977 1271 -11dd8 c 1981 1271 -11de4 5 1987 1271 -11de9 4 2019 1271 -11ded 4 2020 1271 -11df1 5 2023 1271 -11df6 b 2026 1271 -11e01 5 2029 1271 -11e06 a 2031 1271 -11e10 f 2035 1271 -11e1f a 2040 1271 -11e29 2 2045 1271 -11e2b 5 2048 1271 -11e30 b 2051 1271 -11e3b 2 2054 1271 -11e3d a 2056 1271 -11e47 b 2060 1271 -11e52 a 2065 1271 -11e5c 2 2071 1271 -11e5e 4 2074 1271 -11e62 5 2077 1271 -11e67 a 2080 1271 -11e71 2 2083 1271 -11e73 a 2085 1271 -11e7d b 2089 1271 -11e88 a 2094 1271 -11e92 2 2099 1271 -11e94 5 2102 1271 -11e99 a 2105 1271 -11ea3 2 2108 1271 -11ea5 a 2110 1271 -11eaf 38 2114 1271 -11ee7 5 2115 1271 -11eec b 2119 1271 -11ef7 13 2128 1271 -11f0a 7 2129 1271 -11f11 a 2130 1271 -11f1b f 2136 1271 -11f2a 2 2142 1271 -11f2c 6 2148 1271 -11f32 7 2149 1271 -11f39 2 2150 1271 -11f3b 7 2151 1271 -11f42 a 2152 1271 -11f4c 3 2153 1271 -11f4f 6 2157 1271 -11f55 3 2158 1271 -11f58 6 2163 1271 -11f5e 10 2165 1271 -11f6e 10 2166 1271 -11f7e c 2168 1271 -11f8a 3 2170 1271 -11f8d 3 2172 1271 -11f90 2 2173 1271 -11f92 8 2175 1271 -11f9a 1 2176 1271 -11f9b 24 2180 1271 -11fbf 9 2181 1271 -11fc8 1 2182 1271 -11fc9 5 2185 1271 -11fce c 1594 1271 -11fda c 1598 1271 -11fe6 9 1603 1271 -11fef e 1635 1271 -11ffd 4 1636 1271 -12001 8 1637 1271 -12009 8 1639 1271 -12011 1c 1598 1271 -1202d 6 1640 1271 -12033 2 1641 1271 -12035 4 1640 1271 -12039 5 1642 1271 -1203e 2 1644 1271 -12040 5 1645 1271 -12045 8 1646 1271 -1204d 5 1647 1271 -12052 6 1648 1271 -12058 1 1649 1271 -12059 4 1648 1271 -1205d 6 1650 1271 -12063 10 2189 1271 -12073 a 2201 1271 -1207d a 2204 1271 -12087 6 2205 1271 -1208d 4 2207 1271 -12091 2 2208 1271 -12093 4 2210 1271 -12097 4 2212 1271 -1209b 2 2213 1271 -1209d 4 2215 1271 -120a1 4 2217 1271 -120a5 7 2218 1271 -120ac 9 2224 1271 -120b5 4 2228 1271 -120b9 11 2230 1271 -120ca 11 2234 1271 -120db 13 2236 1271 -120ee f 2238 1271 -120fd d 2243 1271 -1210a 3 2249 1271 -1210d 3 2250 1271 -12110 1e 2252 1271 -1212e 9 2253 1271 -12137 18 2257 1271 -1214f 2 2310 1271 -12151 4 2254 1271 -12155 2 2259 1271 -12157 d 2260 1271 -12164 f 2290 1271 -12173 f 2292 1271 -12182 6 2297 1271 -12188 8 2298 1271 -12190 15 2299 1271 -121a5 2 1073 1271 -121a7 f 2310 1271 -121b6 b 2314 1271 -121c1 10 2319 1271 -121d1 1d 2321 1271 -121ee 2 2360 1271 -121f0 3 2361 1271 -121f3 2 2362 1271 -121f5 2 2324 1271 -121f7 f 2325 1271 -12206 10 1043 1271 -12216 10 2376 1271 -12226 38 2377 1271 -FUNC 1225e c2 4 _putwch_nolock -1225e 11 84 4721 -1226f a 89 4721 -12279 9 91 4721 -12282 5 92 4721 -12287 a 96 4721 -12291 6 97 4721 -12297 16 103 4721 -122ad 14 105 4721 -122c1 6 106 4721 -122c7 1c 123 4721 -122e3 1e 129 4721 -12301 2 131 4721 -12303 4 133 4721 -12307 d 134 4721 -12314 a 110 4721 -1231e 2 113 4721 -FUNC 12320 9b 4 _cputws -12320 c 151 4721 -1232c 5 153 4721 -12331 30 155 4721 -12361 b 157 4721 -1236c 9 158 4721 -12375 3 159 4721 -12378 a 160 4721 -12382 17 162 4721 -12399 4 164 4721 -1239d c 169 4721 -123a9 3 172 4721 -123ac 6 173 4721 -123b2 9 170 4721 -FUNC 123bb 46 4 _putwch -123bb c 49 4721 -123c7 8 52 4721 -123cf 4 53 4721 -123d3 f 55 4721 -123e2 c 58 4721 -123ee 4 62 4721 -123f2 6 63 4721 -123f8 9 59 4721 -FUNC 12401 113 10 _mbtowc_l -12401 8 55 6355 -12409 e 56 6355 -12417 4 61 6355 -1241b 7 64 6355 -12422 3 65 6355 -12425 4 59 6355 -12429 2 116 6355 -1242b b 70 6355 -12436 8 73 6355 -1243e 7 75 6355 -12445 7 76 6355 -1244c 11 77 6355 -1245d 13 80 6355 -12470 33 90 6355 -124a3 10 93 6355 -124b3 1b 99 6355 -124ce b 95 6355 -124d9 14 96 6355 -124ed 25 108 6355 -12512 2 111 6355 -FUNC 12514 17 c mbtowc -12514 0 123 6355 -12514 16 124 6355 -1252a 1 125 6355 -FUNC 1252b 83 10 _lseeki64_nolock -1252b 5 120 4872 -12530 4 126 4872 -12534 1b 134 4872 -1254f b 136 4872 -1255a 6 138 4872 -12560 22 146 4872 -12582 7 148 4872 -12589 2 149 4872 -1258b 19 152 4872 -125a4 8 153 4872 -125ac 2 154 4872 -FUNC 125ae 119 10 _lseeki64 -125ae c 73 4872 -125ba 9 74 4872 -125c3 24 77 4872 -125e7 2f 78 4872 -12616 46 79 4872 -1265c 7 81 4872 -12663 3 82 4872 -12666 9 84 4872 -1266f 1a 85 4872 -12689 2 86 4872 -1268b b 87 4872 -12696 7 88 4872 -1269d 8 89 4872 -126a5 c 93 4872 -126b1 6 97 4872 -126b7 6 98 4872 -126bd a 94 4872 -FUNC 126c7 7d 8 _set_osfhnd -126c7 0 213 4825 -126c7 2e 216 4825 -126f5 e 217 4825 -12703 b 218 4825 -1270e 3 226 4825 -12711 2 227 4825 -12713 3 223 4825 -12716 2 224 4825 -12718 9 220 4825 -12721 5 231 4825 -12726 5 232 4825 -1272b b 234 4825 -12736 8 235 4825 -1273e 5 236 4825 -12743 1 238 4825 -FUNC 12744 81 4 _free_osfhnd -12744 0 263 4825 -12744 38 266 4825 -1277c 9 268 4825 -12785 a 269 4825 -1278f 3 277 4825 -12792 2 278 4825 -12794 3 274 4825 -12797 2 275 4825 -12799 9 271 4825 -127a2 6 282 4825 -127a8 4 283 4825 -127ac b 285 4825 -127b7 7 286 4825 -127be 6 287 4825 -127c4 1 289 4825 -FUNC 127c5 71 4 _get_osfhandle -127c5 0 312 4825 -127c5 1f 313 4825 -127e4 2 318 4825 -127e6 e 314 4825 -127f4 3d 315 4825 -12831 1 318 4825 -12832 3 317 4825 -12835 1 318 4825 -FUNC 12836 a0 4 __lock_fhandle -12836 c 437 4825 -12842 17 438 4825 -12859 7 439 4825 -12860 7 444 4825 -12867 8 446 4825 -1286f 3 447 4825 -12872 5 448 4825 -12877 14 449 4825 -1288b 3 453 4825 -1288e 3 455 4825 -12891 c 457 4825 -1289d 5 462 4825 -128a2 1d 464 4825 -128bf 3 467 4825 -128c2 6 468 4825 -128c8 5 457 4825 -128cd 9 458 4825 -FUNC 128d6 22 4 _unlock_fhandle -128d6 0 489 4825 -128d6 21 490 4825 -128f7 1 491 4825 -FUNC 128f8 19f 0 _alloc_osfhnd -128f8 c 52 4825 -12904 4 53 4825 -12908 5 56 4825 -1290d c 58 4825 -12919 8 59 4825 -12921 8 61 4825 -12929 3 62 4825 -1292c c 71 4825 -12938 f 77 4825 -12947 17 83 4825 -1295e 6 85 4825 -12964 6 89 4825 -1296a 8 90 4825 -12972 6 91 4825 -12978 6 92 4825 -1297e 14 93 4825 -12992 3 99 4825 -12995 2 101 4825 -12997 3 103 4825 -1299a 9 106 4825 -129a3 6 111 4825 -129a9 a 113 4825 -129b3 6 119 4825 -129b9 7 120 4825 -129c0 5 83 4825 -129c5 6 106 4825 -129cb 9 107 4825 -129d4 6 124 4825 -129da 4 126 4825 -129de 3 127 4825 -129e1 19 128 4825 -129fa 6 137 4825 -12a00 6 71 4825 -12a06 12 145 4825 -12a18 9 151 4825 -12a21 7 152 4825 -12a28 c 154 4825 -12a34 4 155 4825 -12a38 3 156 4825 -12a3b 4 157 4825 -12a3f 4 158 4825 -12a43 8 154 4825 -12a4b 6 165 4825 -12a51 19 166 4825 -12a6a b 167 4825 -12a75 4 171 4825 -12a79 c 178 4825 -12a85 3 186 4825 -12a88 6 187 4825 -12a8e 9 179 4825 -FUNC 12a97 115 8 _open_osfhandle -12a97 c 343 4825 -12aa3 5 347 4825 -12aa8 2 351 4825 -12aaa 6 353 4825 -12ab0 3 354 4825 -12ab3 8 356 4825 -12abb 3 357 4825 -12abe 6 359 4825 -12ac4 3 360 4825 -12ac7 9 364 4825 -12ad0 4 365 4825 -12ad4 d 367 4825 -12ae1 3 409 4825 -12ae4 6 410 4825 -12aea 5 372 4825 -12aef 5 373 4825 -12af4 5 374 4825 -12af9 3 375 4825 -12afc f 380 4825 -12b0b b 381 4825 -12b16 7 382 4825 -12b1d 2 383 4825 -12b1f 3 385 4825 -12b22 b 391 4825 -12b2d 3 393 4825 -12b30 1a 395 4825 -12b4a 9 396 4825 -12b53 9 397 4825 -12b5c 7 399 4825 -12b63 c 401 4825 -12b6f 10 409 4825 -12b7f 5 401 4825 -12b84 5 402 4825 -12b89 1b 404 4825 -12ba4 8 406 4825 -FUNC 12bac 11e c _calloc_impl -12bac c 23 5592 -12bb8 9 28 5592 -12bc1 2e 30 5592 -12bef 9 32 5592 -12bf8 4 36 5592 -12bfc 3 37 5592 -12bff 5 41 5592 -12c04 5 43 5592 -12c09 9 46 5592 -12c12 9 50 5592 -12c1b b 52 5592 -12c26 8 56 5592 -12c2e 3 57 5592 -12c31 c 58 5592 -12c3d c 60 5592 -12c49 7 64 5592 -12c50 d 65 5592 -12c5d 4 93 5592 -12c61 11 94 5592 -12c72 c 97 5592 -12c7e f 109 5592 -12c8d b 111 5592 -12c98 6 112 5592 -12c9e 5 113 5592 -12ca3 5 60 5592 -12ca8 9 61 5592 -12cb1 4 100 5592 -12cb5 7 102 5592 -12cbc 6 103 5592 -12cc2 2 105 5592 -12cc4 6 119 5592 -FUNC 12cca 3f 8 calloc -12cca 4 145 5592 -12cce 5 146 5592 -12cd3 14 147 5592 -12ce7 15 149 5592 -12cfc 8 151 5592 -12d04 3 153 5592 -12d07 2 154 5592 -FUNC 12d09 21b 8 realloc -12d09 c 64 5338 -12d15 7 69 5338 -12d1c e 70 5338 -12d2a 7 73 5338 -12d31 7 75 5338 -12d38 5 76 5338 -12d3d d 81 5338 -12d4a 5 88 5338 -12d4f 9 89 5338 -12d58 8 91 5338 -12d60 3 92 5338 -12d63 12 96 5338 -12d75 8 100 5338 -12d7d f 102 5338 -12d8c 5 103 5338 -12d91 e 104 5338 -12d9f 4 107 5338 -12da3 10 108 5338 -12db3 9 110 5338 -12dbc a 111 5338 -12dc6 5 118 5338 -12dcb 4 120 5338 -12dcf 6 121 5338 -12dd5 9 123 5338 -12dde 15 124 5338 -12df3 4 127 5338 -12df7 10 128 5338 -12e07 c 129 5338 -12e13 c 135 5338 -12e1f 6 142 5338 -12e25 4 144 5338 -12e29 1 145 5338 -12e2a 9 147 5338 -12e33 14 148 5338 -12e47 6 135 5338 -12e4d 9 137 5338 -12e56 3 148 5338 -12e59 10 158 5338 -12e69 f 181 5338 -12e78 5 186 5338 -12e7d 5 183 5338 -12e82 11 186 5338 -12e93 2 188 5338 -12e95 8 160 5338 -12e9d 5 170 5338 -12ea2 3 167 5338 -12ea5 2 172 5338 -12ea7 6 174 5338 -12ead 2 155 5338 -12eaf 4 321 5338 -12eb3 1 322 5338 -12eb4 12 323 5338 -12ec6 c 332 5338 -12ed2 b 347 5338 -12edd 5 319 5338 -12ee2 7 327 5338 -12ee9 b 328 5338 -12ef4 2 329 5338 -12ef6 6 356 5338 -12efc 5 349 5338 -12f01 5 350 5338 -12f06 4 334 5338 -12f0a 16 341 5338 -12f20 4 343 5338 -FUNC 12f24 79 c _recalloc -12f24 3 744 5338 -12f27 a 749 5338 -12f31 28 751 5338 -12f59 4 753 5338 -12f5d 9 754 5338 -12f66 b 755 5338 -12f71 b 756 5338 -12f7c a 757 5338 -12f86 10 759 5338 -12f96 5 761 5338 -12f9b 2 762 5338 -FUNC 12f9d 21 0 _get_sbh_threshold -12f9d 0 61 5281 -12f9d 9 64 5281 -12fa6 2 66 5281 -12fa8 1 81 5281 -12fa9 14 69 5281 -12fbd 1 81 5281 -FUNC 12fbe 46 4 _set_amblksiz -12fbe 0 214 5281 -12fbe 2b 216 5281 -12fe9 1 224 5281 -12fea 11 217 5281 -12ffb 5 220 5281 -13000 3 223 5281 -13003 1 224 5281 -FUNC 13004 3c 4 _get_amblksiz -13004 0 243 5281 -13004 27 245 5281 -1302b 1 253 5281 -1302c 8 246 5281 -13034 8 249 5281 -1303c 3 252 5281 -1303f 1 253 5281 -FUNC 13040 48 4 __sbh_heap_init -13040 0 274 5281 -13040 1c 275 5281 -1305c 1 285 5281 -1305d 4 278 5281 -13061 7 280 5281 -13068 c 281 5281 -13074 13 284 5281 -13087 1 285 5281 -FUNC 13088 2b 4 __sbh_find_block -13088 0 306 5281 -13088 12 307 5281 -1309a 7 316 5281 -130a1 8 317 5281 -130a9 3 319 5281 -130ac 4 314 5281 -130b0 2 321 5281 -130b2 1 322 5281 -FUNC 130b3 314 8 __sbh_free_block -130b3 6 381 5281 -130b9 7 399 5281 -130c0 9 402 5281 -130c9 18 407 5281 -130e1 3 408 5281 -130e4 d 412 5281 -130f1 3 416 5281 -130f4 5 417 5281 -130f9 6 420 5281 -130ff b 424 5281 -1310a 4 429 5281 -1310e 5 430 5281 -13113 3 431 5281 -13116 8 434 5281 -1311e 3 439 5281 -13121 b 441 5281 -1312c e 442 5281 -1313a 5 443 5281 -1313f 2 445 5281 -13141 5 448 5281 -13146 11 449 5281 -13157 9 450 5281 -13160 9 455 5281 -13169 15 459 5281 -1317e 6 463 5281 -13184 5 464 5281 -13189 3 465 5281 -1318c f 468 5281 -1319b 3 474 5281 -1319e 6 477 5281 -131a4 b 478 5281 -131af 2 479 5281 -131b1 3 483 5281 -131b4 6 484 5281 -131ba 7 485 5281 -131c1 2 486 5281 -131c3 4 489 5281 -131c7 b 493 5281 -131d2 3 498 5281 -131d5 11 501 5281 -131e6 6 502 5281 -131ec 5 503 5281 -131f1 2 505 5281 -131f3 e 508 5281 -13201 6 509 5281 -13207 6 511 5281 -1320d c 516 5281 -13219 c 517 5281 -13225 8 520 5281 -1322d e 524 5281 -1323b 6 528 5281 -13241 3 529 5281 -13244 6 530 5281 -1324a 3 531 5281 -1324d 6 532 5281 -13253 8 535 5281 -1325b 18 541 5281 -13273 e 542 5281 -13281 f 543 5281 -13290 2 545 5281 -13292 6 547 5281 -13298 10 548 5281 -132a8 13 550 5281 -132bb 5 556 5281 -132c0 4 558 5281 -132c4 b 561 5281 -132cf d 564 5281 -132dc 6 568 5281 -132e2 1a 569 5281 -132fc 15 573 5281 -13311 16 577 5281 -13327 19 578 5281 -13340 9 579 5281 -13349 6 583 5281 -1334f 8 586 5281 -13357 16 589 5281 -1336d 25 595 5281 -13392 14 599 5281 -133a6 4 600 5281 -133aa a 603 5281 -133b4 8 608 5281 -133bc 9 609 5281 -133c5 2 611 5281 -FUNC 133c7 b0 0 __sbh_alloc_new_region -133c7 0 891 5281 -133c7 13 897 5281 -133da 1e 900 5281 -133f8 4 901 5281 -133fc 12 905 5281 -1340e 9 909 5281 -13417 18 913 5281 -1342f 2 914 5281 -13431 1a 918 5281 -1344b 10 920 5281 -1345b 2 921 5281 -1345d 9 927 5281 -13466 6 930 5281 -1346c 6 933 5281 -13472 4 935 5281 -13476 1 936 5281 -FUNC 13477 106 4 __sbh_alloc_new_group -13477 5 958 5281 -1347c 3 959 5281 -1347f 9 972 5281 -13488 4 973 5281 -1348c 2 976 5281 -1348e 1 977 5281 -1348f 4 974 5281 -13493 15 981 5281 -134a8 c 986 5281 -134b4 1f 993 5281 -134d3 8 994 5281 -134db 6 998 5281 -134e1 12 1001 5281 -134f3 4 1004 5281 -134f7 7 1005 5281 -134fe 8 1011 5281 -13506 10 1013 5281 -13516 12 1016 5281 -13528 3 1001 5281 -1352b 8 1021 5281 -13533 6 1023 5281 -13539 3 1024 5281 -1353c 6 1027 5281 -13542 3 1028 5281 -13545 5 1030 5281 -1354a a 1031 5281 -13554 9 1032 5281 -1355d b 1033 5281 -13568 e 1036 5281 -13576 5 1038 5281 -1357b 2 1039 5281 -FUNC 1357d 2df c __sbh_resize_block -1357d 6 1061 5281 -13583 c 1080 5281 -1358f b 1083 5281 -1359a 3 1084 5281 -1359d 12 1085 5281 -135af 7 1089 5281 -135b6 14 1096 5281 -135ca 13 1099 5281 -135dd 7 1105 5281 -135e4 8 1106 5281 -135ec 6 1107 5281 -135f2 8 1110 5281 -135fa 3 1115 5281 -135fd 9 1117 5281 -13606 11 1118 5281 -13617 5 1119 5281 -1361c 2 1121 5281 -1361e 5 1124 5281 -13623 14 1125 5281 -13637 6 1126 5281 -1363d 9 1131 5281 -13646 9 1132 5281 -1364f 12 1135 5281 -13661 a 1141 5281 -1366b 9 1142 5281 -13674 3 1143 5281 -13677 9 1147 5281 -13680 6 1148 5281 -13686 6 1149 5281 -1368c 3 1150 5281 -1368f 6 1151 5281 -13695 8 1154 5281 -1369d 18 1160 5281 -136b5 e 1161 5281 -136c3 6 1162 5281 -136c9 2 1164 5281 -136cb 6 1166 5281 -136d1 10 1167 5281 -136e1 13 1169 5281 -136f4 c 1174 5281 -13700 9 1176 5281 -13709 6 1180 5281 -1370f 9 1182 5281 -13718 7 1100 5281 -1371f 6 1186 5281 -13725 3 1189 5281 -13728 d 1195 5281 -13735 7 1198 5281 -1373c b 1199 5281 -13747 3 1200 5281 -1374a a 1203 5281 -13754 7 1208 5281 -1375b 5 1209 5281 -13760 3 1210 5281 -13763 8 1213 5281 -1376b 3 1218 5281 -1376e b 1221 5281 -13779 e 1222 5281 -13787 5 1223 5281 -1378c 2 1225 5281 -1378e 5 1228 5281 -13793 11 1229 5281 -137a4 9 1231 5281 -137ad 9 1236 5281 -137b6 9 1237 5281 -137bf 9 1240 5281 -137c8 4 1241 5281 -137cc 5 1242 5281 -137d1 3 1243 5281 -137d4 6 1249 5281 -137da 3 1250 5281 -137dd 6 1251 5281 -137e3 3 1252 5281 -137e6 6 1253 5281 -137ec 8 1256 5281 -137f4 18 1262 5281 -1380c e 1263 5281 -1381a 6 1264 5281 -13820 2 1266 5281 -13822 6 1268 5281 -13828 10 1269 5281 -13838 13 1271 5281 -1384b 5 1276 5281 -13850 4 1278 5281 -13854 6 1281 5281 -1385a 2 1282 5281 -FUNC 1385c cd 0 __sbh_heapmin -1385c 0 1302 5281 -1385c d 1306 5281 -13869 6 1310 5281 -1386f 17 1311 5281 -13886 15 1314 5281 -1389b 16 1318 5281 -138b1 19 1319 5281 -138ca 9 1320 5281 -138d3 f 1325 5281 -138e2 11 1328 5281 -138f3 28 1333 5281 -1391b 6 1334 5281 -13921 7 1338 5281 -13928 1 1340 5281 -FUNC 13929 2e2 0 __sbh_heap_check -13929 3 1361 5281 -1392c 12 1391 5281 -1393e 8 1393 5281 -13946 16 1398 5281 -1395c 3 1401 5281 -1395f 8 1402 5281 -13967 6 1406 5281 -1396d 9 1407 5281 -13976 c 1408 5281 -13982 3 1409 5281 -13985 3 1410 5281 -13988 6 1411 5281 -1398e 4 1418 5281 -13992 1b 1421 5281 -139ad 9 1424 5281 -139b6 9 1428 5281 -139bf 1c 1438 5281 -139db 2 1445 5281 -139dd 7 1446 5281 -139e4 1 1449 5281 -139e5 c 1452 5281 -139f1 3 1456 5281 -139f4 2 1458 5281 -139f6 6 1462 5281 -139fc 5 1463 5281 -13a01 3 1464 5281 -13a04 9 1465 5281 -13a0d 1e 1470 5281 -13a2b c 1475 5281 -13a37 2 1479 5281 -13a39 4 1481 5281 -13a3d 6 1484 5281 -13a43 10 1488 5281 -13a53 e 1492 5281 -13a61 2 1498 5281 -13a63 4 1502 5281 -13a67 20 1505 5281 -13a87 19 1509 5281 -13aa0 8 1514 5281 -13aa8 3 1518 5281 -13aab 6 1520 5281 -13ab1 8 1524 5281 -13ab9 4 1527 5281 -13abd e 1532 5281 -13acb 8 1536 5281 -13ad3 6 1541 5281 -13ad9 5 1542 5281 -13ade 3 1543 5281 -13ae1 8 1544 5281 -13ae9 c 1549 5281 -13af5 11 1554 5281 -13b06 6 1559 5281 -13b0c 3 1561 5281 -13b0f e 1563 5281 -13b1d 3 1564 5281 -13b20 2 1566 5281 -13b22 8 1568 5281 -13b2a 3 1569 5281 -13b2d 1c 1575 5281 -13b49 c 1580 5281 -13b55 10 1585 5281 -13b65 17 1591 5281 -13b7c 7 1595 5281 -13b83 7 1596 5281 -13b8a 16 1597 5281 -13ba0 f 1602 5281 -13baf 18 1606 5281 -13bc7 5 1608 5281 -13bcc 2 1609 5281 -13bce 4 1403 5281 -13bd2 4 1425 5281 -13bd6 4 1453 5281 -13bda 4 1485 5281 -13bde 4 1471 5281 -13be2 4 1439 5281 -13be6 4 1493 5281 -13bea 4 1537 5281 -13bee 4 1545 5281 -13bf2 4 1550 5281 -13bf6 4 1510 5281 -13bfa 4 1581 5281 -13bfe 4 1576 5281 -13c02 4 1592 5281 -13c06 5 1603 5281 -FUNC 13c0b a8 4 _set_sbh_threshold -13c0b 1 102 5281 -13c0c a 104 5281 -13c16 3 106 5281 -13c19 1 195 5281 -13c1a a 109 5281 -13c24 25 112 5281 -13c49 5 113 5281 -13c4e 4 114 5281 -13c52 2 195 5281 -13c54 6 173 5281 -13c5a 2 175 5281 -13c5c 5 179 5281 -13c61 2d 185 5281 -13c8e 6 186 5281 -13c94 a 187 5281 -13c9e 5 188 5281 -13ca3 b 193 5281 -13cae 4 194 5281 -13cb2 1 195 5281 -FUNC 13cb3 2e3 4 __sbh_alloc_block -13cb3 6 632 5281 -13cb9 5 633 5281 -13cbe 15 650 5281 -13cd3 5 668 5281 -13cd8 7 669 5281 -13cdf 5 671 5281 -13ce4 4 672 5281 -13ce8 2 674 5281 -13cea d 677 5281 -13cf7 a 682 5281 -13d01 e 686 5281 -13d0f 3 688 5281 -13d12 2 683 5281 -13d14 5 688 5281 -13d19 4 692 5281 -13d1d 8 694 5281 -13d25 e 698 5281 -13d33 3 700 5281 -13d36 2 695 5281 -13d38 5 700 5281 -13d3d 6 705 5281 -13d43 6 709 5281 -13d49 6 711 5281 -13d4f 4 707 5281 -13d53 4 715 5281 -13d57 8 717 5281 -13d5f 6 720 5281 -13d65 3 722 5281 -13d68 2 718 5281 -13d6a 5 722 5281 -13d6f 4 726 5281 -13d73 e 727 5281 -13d81 7 728 5281 -13d88 12 733 5281 -13d9a 2 734 5281 -13d9c 6 737 5281 -13da2 3 739 5281 -13da5 2 740 5281 -13da7 1c 745 5281 -13dc3 4 749 5281 -13dc7 14 751 5281 -13ddb e 752 5281 -13de9 3 751 5281 -13dec 12 754 5281 -13dfe a 760 5281 -13e08 d 763 5281 -13e15 2 768 5281 -13e17 2 767 5281 -13e19 1 768 5281 -13e1a 4 765 5281 -13e1e 7 770 5281 -13e25 5 775 5281 -13e2a 6 776 5281 -13e30 8 777 5281 -13e38 3 778 5281 -13e3b 8 781 5281 -13e43 8 784 5281 -13e4b 3 788 5281 -13e4e e 791 5281 -13e5c 15 792 5281 -13e71 8 793 5281 -13e79 2 795 5281 -13e7b f 798 5281 -13e8a f 799 5281 -13e99 e 800 5281 -13ea7 1c 809 5281 -13ec3 6 813 5281 -13ec9 3 814 5281 -13ecc 6 815 5281 -13ed2 3 816 5281 -13ed5 6 817 5281 -13edb 8 820 5281 -13ee3 18 826 5281 -13efb b 827 5281 -13f06 10 829 5281 -13f16 2 831 5281 -13f18 6 833 5281 -13f1e d 835 5281 -13f2b 16 837 5281 -13f41 3 831 5281 -13f44 4 844 5281 -13f48 2 846 5281 -13f4a 9 848 5281 -13f53 a 853 5281 -13f5d 4 855 5281 -13f61 e 858 5281 -13f6f 13 862 5281 -13f82 7 863 5281 -13f89 5 866 5281 -13f8e 6 868 5281 -13f94 2 869 5281 -FUNC 13f96 72 4 _fclose_nolock -13f96 2 86 1752 -13f98 2a 90 1752 -13fc2 6 96 1752 -13fc8 6 105 1752 -13fce 8 106 1752 -13fd6 13 108 1752 -13fe9 5 109 1752 -13fee 7 111 1752 -13ff5 7 120 1752 -13ffc 3 121 1752 -13fff 3 126 1752 -14002 5 127 1752 -14007 1 128 1752 -FUNC 14008 7c 4 fclose -14008 c 44 1752 -14014 4 45 1752 -14018 2d 47 1752 -14045 6 50 1752 -1404b 3 51 1752 -1404e 3 64 1752 -14051 6 65 1752 -14057 7 55 1752 -1405e 3 56 1752 -14061 a 57 1752 -1406b 11 59 1752 -1407c 8 60 1752 -FUNC 14084 d 8 _ValidateRead(void const *,unsigned int) -14084 0 63 5683 -14084 3 64 5683 -14087 7 65 5683 -1408e 2 68 5683 -14090 1 71 5683 -FUNC 14091 d 8 _ValidateWrite(void *,unsigned int) -14091 0 74 5683 -14091 3 75 5683 -14094 7 76 5683 -1409b 2 79 5683 -1409d 1 82 5683 -FUNC 1409e d 4 _ValidateExecute(int (*)(void)) -1409e 0 85 5683 -1409e 3 86 5683 -140a1 7 87 5683 -140a8 2 90 5683 -140aa 1 93 5683 -FUNC 140ab f3 0 abort -140ab 1b 53 4119 -140c6 a 56 4119 -140d0 8 59 4119 -140d8 5 68 4119 -140dd 4 69 4119 -140e1 8 71 4119 -140e9 d 78 4119 -140f6 6 87 4119 -140fc 6 88 4119 -14102 6 89 4119 -14108 3 90 4119 -1410b 3 91 4119 -1410e 3 92 4119 -14111 7 93 4119 -14118 7 94 4119 -1411f 4 95 4119 -14123 4 96 4119 -14127 4 97 4119 -1412b 4 98 4119 -1412f 1 99 4119 -14130 6 100 4119 -14136 6 106 4119 -1413c 19 107 4119 -14155 3 109 4119 -14158 13 117 4119 -1416b 9 122 4119 -14174 3 123 4119 -14177 15 126 4119 -1418c a 128 4119 -14196 8 137 4119 -FUNC 1419e 1e 8 _set_abort_behavior -1419e 0 158 4119 -1419e 1d 160 4119 -141bb 1 162 4119 -FUNC 141bc 20 0 _global_unwind2 -FUNC 141dc 45 0 __unwind_handler -FUNC 14221 84 0 _local_unwind2 -FUNC 142a5 23 0 _abnormal_termination -FUNC 142c8 9 0 _NLG_Notify1 -FUNC 142d1 1f 0 _NLG_Notify -PUBLIC 142e8 0 _NLG_Dispatch2 -FUNC 142f0 3 0 _NLG_Call -PUBLIC 142f2 0 _NLG_Return2 -FUNC 142f3 a3 4 _msize -142f3 c 43 5383 -142ff 2d 47 5383 -1432c 9 51 5383 -14335 8 55 5383 -1433d 3 56 5383 -14340 e 57 5383 -1434e e 59 5383 -1435c c 61 5383 -14368 5 64 5383 -1436d 10 88 5383 -1437d 2 91 5383 -1437f 6 93 5383 -14385 8 61 5383 -1438d 9 62 5383 -FUNC 14396 6 0 HeapManager::Block::Block() -14396 6 90 5771 -FUNC 1439c 1b 8 HeapManager::Constructor(void * (*)(unsigned int),void (*)(void *)) -1439c 6 100 5771 -143a2 7 101 5771 -143a9 5 102 5771 -143ae 3 103 5771 -143b1 3 104 5771 -143b4 3 105 5771 -FUNC 143b7 26 0 HeapManager::Destructor() -143b7 9 110 5771 -143c0 2 111 5771 -143c2 5 113 5771 -143c7 15 115 5771 -143dc 1 118 5771 -FUNC 143dd 63 0 UnDecorator::getNumberOfDimensions() -143dd 0 1663 5771 -143dd c 1664 5771 -143e9 2 1665 5771 -143eb 1 1696 5771 -143ec a 1666 5771 -143f6 d 1667 5771 -14403 1 1696 5771 -14404 4 1670 5771 -14408 4 1677 5771 -1440c a 1679 5771 -14416 6 1680 5771 -1441c d 1684 5771 -14429 5 1675 5771 -1442e e 1690 5771 -1443c 3 1691 5771 -1443f 1 1696 5771 -FUNC 14440 474 0 UnDecorator::getTypeEncoding() -14440 f 2335 5771 -1444f 2 2336 5771 -14451 5 2341 5771 -14456 9 2345 5771 -1445f c 2351 5771 -1446b 9 2423 5771 -14474 2 2426 5771 -14476 2a 2427 5771 -144a0 8 2450 5771 -144a8 2 2451 5771 -144aa 24 2454 5771 -144ce 7 2462 5771 -144d5 5 2463 5771 -144da 6 2353 5771 -144e0 8 2358 5771 -144e8 b 2362 5771 -144f3 5 2363 5771 -144f8 2 2364 5771 -144fa 5 2365 5771 -144ff 9 2369 5771 -14508 1b 2373 5771 -14523 11 2377 5771 -14534 a 2393 5771 -1453e 10 2388 5771 -1454e 2 2389 5771 -14550 18 2384 5771 -14568 2 2385 5771 -1456a 12 2380 5771 -1457c 16 2399 5771 -14592 11 2418 5771 -145a3 a 2406 5771 -145ad 5 2407 5771 -145b2 15 2410 5771 -145c7 5 2422 5771 -145cc 1b 2427 5771 -145e7 a 2430 5771 -145f1 5 2431 5771 -145f6 7 2472 5771 -145fd a 2478 5771 -14607 c 2483 5771 -14613 5 2485 5771 -14618 5 2486 5771 -1461d 5 2487 5771 -14622 5 2490 5771 -14627 5 2505 5771 -1462c 5 2508 5771 -14631 5 2509 5771 -14636 5 2434 5771 -1463b 5 2435 5771 -14640 1a 2427 5771 -1465a 30 2568 5771 -1468a 5 2529 5771 -1468f 4 2530 5771 -14693 a 2531 5771 -1469d 2 2532 5771 -1469f a 2533 5771 -146a9 5 2537 5771 -146ae 5 2538 5771 -146b3 2 2539 5771 -146b5 5 2540 5771 -146ba e 2544 5771 -146c8 6 2560 5771 -146ce 10 2555 5771 -146de 2 2556 5771 -146e0 18 2551 5771 -146f8 2 2552 5771 -146fa 12 2547 5771 -1470c 2 2564 5771 -1470e a 2442 5771 -14718 2 2443 5771 -1471a a 2438 5771 -14724 2 2439 5771 -14726 5 2445 5771 -1472b c 2574 5771 -14737 14 2577 5771 -1474b a 2579 5771 -14755 18 2586 5771 -1476d 1a 2589 5771 -14787 1b 2590 5771 -147a2 5 2591 5771 -147a7 1a 2594 5771 -147c1 1b 2595 5771 -147dc 5 2596 5771 -147e1 1a 2599 5771 -147fb 10 2600 5771 -1480b 2 2601 5771 -1480d 7 2604 5771 -14814 2 2605 5771 -14816 a 2608 5771 -14820 2 2609 5771 -14822 a 2612 5771 -1482c 2 2613 5771 -1482e a 2616 5771 -14838 2 2617 5771 -1483a a 2620 5771 -14844 2 2621 5771 -14846 a 2624 5771 -14850 7 2634 5771 -14857 7 2635 5771 -1485e 7 2637 5771 -14865 10 2639 5771 -14875 3f 2648 5771 -FUNC 148b4 b 0 UnDecorator::doUnderScore() -148b4 b 4259 5771 -FUNC 148bf d 0 UnDecorator::doMSKeywords() -148bf d 4260 5771 -FUNC 148cc e 0 UnDecorator::doPtr64() -148cc e 4261 5771 -FUNC 148da e 0 UnDecorator::doFunctionReturns() -148da e 4262 5771 -FUNC 148e8 e 0 UnDecorator::doAllocationModel() -148e8 e 4263 5771 -FUNC 148f6 e 0 UnDecorator::doAllocationLanguage() -148f6 e 4264 5771 -FUNC 14904 12 0 UnDecorator::doThisTypes() -14904 12 4271 5771 -FUNC 14916 e 0 UnDecorator::doAccessSpecifiers() -14916 e 4272 5771 -FUNC 14924 e 0 UnDecorator::doThrowTypes() -14924 e 4273 5771 -FUNC 14932 e 0 UnDecorator::doMemberTypes() -14932 e 4274 5771 -FUNC 14940 b 0 UnDecorator::doNameOnly() -14940 b 4279 5771 -FUNC 1494b b 0 UnDecorator::doTypeOnly() -1494b b 4280 5771 -FUNC 14956 b 0 UnDecorator::haveTemplateParameters() -14956 b 4281 5771 -FUNC 14961 e 0 UnDecorator::doEcsu() -14961 e 4282 5771 -FUNC 1496f b 0 UnDecorator::doNoIdentCharCheck() -1496f b 4283 5771 -FUNC 1497a e 0 UnDecorator::doEllipsis() -1497a e 4284 5771 -FUNC 14988 19 4 UnDecorator::UScore(Tokens) -14988 0 4288 5771 -14988 9 4293 5771 -14991 d 4294 5771 -1499e 2 4296 5771 -149a0 1 4298 5771 -FUNC 149a1 84 8 HeapManager::getMemory(unsigned int,int) -149a1 2 134 5804 -149a3 a 137 5804 -149ad 9 139 5804 -149b6 6 140 5804 -149bc 4 146 5804 -149c0 3 147 5804 -149c3 8 149 5804 -149cb 7 153 5804 -149d2 2 154 5804 -149d4 1c 159 5804 -149f0 4 164 5804 -149f4 7 168 5804 -149fb 2 169 5804 -149fd 2 170 5804 -149ff 3 171 5804 -14a02 8 175 5804 -14a0a 2 182 5804 -14a0c 4 179 5804 -14a10 5 183 5804 -14a15 d 187 5804 -14a22 3 190 5804 -FUNC 14a25 d 0 DName::DName() -14a25 2 210 5804 -14a27 3 211 5804 -14a2a 7 220 5804 -14a31 1 221 5804 -FUNC 14a32 12 4 DName::DName(DNameNode *) -14a32 2 224 5804 -14a34 4 225 5804 -14a38 9 234 5804 -14a41 3 235 5804 -FUNC 14a44 9c 4 DName::DName(DName const &) -14a44 2 259 5804 -14a46 17 260 5804 -14a5d 10 261 5804 -14a6d d 262 5804 -14a7a d 263 5804 -14a87 10 264 5804 -14a97 4 265 5804 -14a9b e 266 5804 -14aa9 13 267 5804 -14abc 10 268 5804 -14acc 11 269 5804 -14add 3 270 5804 -FUNC 14ae0 a 0 DName::status() -14ae0 a 481 5804 -FUNC 14aea 5 0 DName::clearStatus() -14aea 5 482 5804 -FUNC 14aef 7 0 DName::setPtrRef() -14aef 7 484 5804 -FUNC 14af6 a 0 DName::isPtrRef() -14af6 a 485 5804 -FUNC 14b00 8 0 DName::setIsArray() -14b00 8 490 5804 -FUNC 14b08 a 0 DName::isArray() -14b08 a 491 5804 -FUNC 14b12 a 0 DName::isNoTE() -14b12 a 492 5804 -FUNC 14b1c 8 0 DName::setIsNoTE() -14b1c 8 493 5804 -FUNC 14b24 a 0 DName::isPinPtr() -14b24 a 494 5804 -FUNC 14b2e 8 0 DName::setIsPinPtr() -14b2e 8 495 5804 -FUNC 14b36 a 0 DName::isComArray() -14b36 a 496 5804 -FUNC 14b40 8 0 DName::setIsComArray() -14b40 8 497 5804 -FUNC 14b48 a 0 DName::isVCallThunk() -14b48 a 498 5804 -FUNC 14b52 8 0 DName::setIsVCallThunk() -14b52 8 499 5804 -FUNC 14b5a 7b 4 DName::operator=(DName const &) -14b5a 3 879 5804 -14b5d 12 880 5804 -14b6f 17 882 5804 -14b86 d 883 5804 -14b93 d 884 5804 -14ba0 d 885 5804 -14bad 10 886 5804 -14bbd 10 887 5804 -14bcd 5 889 5804 -14bd2 3 897 5804 -FUNC 14bd5 9 0 Replicator::isFull() -14bd5 9 1001 5804 -FUNC 14bde 25 4 Replicator::operator[](int) -14bde 0 1028 5804 -14bde 9 1029 5804 -14be7 b 1031 5804 -14bf2 6 1034 5804 -14bf8 5 1032 5804 -14bfd 3 1030 5804 -14c00 3 1036 5804 -FUNC 14c03 d 0 DNameNode::DNameNode() -14c03 d 1048 5804 -FUNC 14c10 4 0 DNameNode::nextNode() -14c10 4 1052 5804 -FUNC 14c14 29 4 DNameNode::operator+=(DNameNode *) -14c14 2 1131 5804 -14c16 8 1132 5804 -14c1e 8 1134 5804 -14c26 b 1139 5804 -14c31 4 1144 5804 -14c35 2 1147 5804 -14c37 3 1148 5804 -14c3a 3 1156 5804 -FUNC 14c3d 16 4 charNode::charNode(char) -14c3d 16 1166 5804 -FUNC 14c53 4 0 charNode::length() -14c53 4 1168 5804 -FUNC 14c57 4 0 charNode::getLastChar() -14c57 4 1170 5804 -FUNC 14c5b 1b 8 charNode::getString(char *,int) -14c5b 0 1173 5804 -14c5b f 1174 5804 -14c6a 5 1175 5804 -14c6f 2 1176 5804 -14c71 2 1177 5804 -14c73 3 1183 5804 -FUNC 14c76 4 0 pcharNode::length() -14c76 4 1189 5804 -FUNC 14c7a 2f 4 pDNameNode::pDNameNode(DName *) -14c7a 2f 1244 5804 -FUNC 14ca9 25 4 DNameStatusNode::DNameStatusNode(DNameStatus) -14ca9 25 1261 5804 -FUNC 14cce 4 0 DNameStatusNode::length() -14cce 4 1263 5804 -FUNC 14cd2 d 0 DNameStatusNode::getLastChar() -14cd2 d 1266 5804 -FUNC 14cdf e 0 und_strlen -14cdf 0 1283 5804 -14cdf 6 1286 5804 -14ce5 7 1287 5804 -14cec 1 1291 5804 -FUNC 14ced 20 8 und_strncpy -14ced 0 1295 5804 -14ced 1b 1296 5804 -14d08 4 1299 5804 -14d0c 1 1301 5804 -FUNC 14d0d 25 4 und_strncmp -14d0d 0 1304 5804 -14d0d 7 1305 5804 -14d14 2 1306 5804 -14d16 1 1315 5804 -14d17 a 1308 5804 -14d21 1 1310 5804 -14d22 1 1311 5804 -14d23 6 1308 5804 -14d29 8 1314 5804 -14d31 1 1315 5804 -FUNC 14d32 33 0 UnDecorator::getDataIndirectType() -14d32 33 4033 5771 -FUNC 14d65 34 0 UnDecorator::getThisType() -14d65 34 4034 5771 -FUNC 14d99 13 c operator new(unsigned int,HeapManager &,int) -14d99 13 131 5804 -FUNC 14dac 56 4 DName::DName(DName *) -14dac 0 274 5804 -14dac a 275 5804 -14db6 23 277 5804 -14dd9 13 278 5804 -14dec 2 281 5804 -14dee 4 283 5804 -14df2 3 284 5804 -14df5 7 295 5804 -14dfc 6 296 5804 -FUNC 14e02 61 4 DName::DName(DNameStatus) -14e02 2 457 5804 -14e04 21 458 5804 -14e25 1e 459 5804 -14e43 7 467 5804 -14e4a 9 469 5804 -14e53 a 470 5804 -14e5d 6 472 5804 -FUNC 14e63 17 0 DName::isValid() -14e63 17 478 5804 -FUNC 14e7a 15 0 DName::isEmpty() -14e7a 15 479 5804 -FUNC 14e8f 14 0 DName::isUDC() -14e8f 14 486 5804 -FUNC 14ea3 e 0 DName::setIsUDC() -14ea3 e 487 5804 -FUNC 14eb1 14 0 DName::isUDTThunk() -14eb1 14 488 5804 -FUNC 14ec5 25 0 DName::length() -14ec5 1 502 5804 -14ec6 2 503 5804 -14ec8 a 506 5804 -14ed2 4 507 5804 -14ed6 b 508 5804 -14ee1 5 507 5804 -14ee6 3 510 5804 -14ee9 1 512 5804 -FUNC 14eea 38 0 DName::getLastChar() -14eea 2 516 5804 -14eec 2 517 5804 -14eee 9 519 5804 -14ef7 6 520 5804 -14efd a 521 5804 -14f07 2 522 5804 -14f09 7 520 5804 -14f10 11 524 5804 -14f21 1 526 5804 -FUNC 14f22 91 8 DName::getString(char *,int) -14f22 7 530 5804 -14f29 9 531 5804 -14f32 5 535 5804 -14f37 7 537 5804 -14f3e e 538 5804 -14f4c c 544 5804 -14f58 d 550 5804 -14f65 4 553 5804 -14f69 8 555 5804 -14f71 4 561 5804 -14f75 6 565 5804 -14f7b 2 566 5804 -14f7d b 570 5804 -14f88 4 574 5804 -14f8c 2 578 5804 -14f8e 3 579 5804 -14f91 3 586 5804 -14f94 4 553 5804 -14f98 4 590 5804 -14f9c 2 593 5804 -14f9e 6 594 5804 -14fa4 6 595 5804 -14faa 5 599 5804 -14faf 4 601 5804 -FUNC 14fb3 35 4 DName::operator|=(DName const &) -14fb3 3 832 5804 -14fb6 19 835 5804 -14fcf 13 836 5804 -14fe2 3 840 5804 -14fe5 3 842 5804 -FUNC 14fe8 81 4 DName::operator=(DNameStatus) -14fe8 2 928 5804 -14fea 10 929 5804 -14ffa 12 937 5804 -1500c 26 945 5804 -15032 6 947 5804 -15038 e 948 5804 -15046 10 933 5804 -15056 d 934 5804 -15063 3 954 5804 -15066 3 956 5804 -FUNC 15069 1e 0 Replicator::Replicator() -15069 1e 1004 5804 -FUNC 15087 47 4 Replicator::operator+=(DName const &) -15087 3 1009 5804 -1508a 12 1010 5804 -1509c 20 1012 5804 -150bc 4 1017 5804 -150c0 8 1018 5804 -150c8 3 1022 5804 -150cb 3 1024 5804 -FUNC 150ce 47 0 DNameNode::clone() -150ce 3 1055 5804 -150d1 43 1056 5804 -15114 1 1057 5804 -FUNC 15115 65 8 pcharNode::pcharNode(char const *,int) -15115 1 1197 5804 -15116 1f 1200 5804 -15135 c 1201 5804 -15141 8 1205 5804 -15149 c 1207 5804 -15155 a 1210 5804 -1515f b 1211 5804 -1516a 2 1214 5804 -1516c 3 1216 5804 -1516f 4 1217 5804 -15173 7 1220 5804 -FUNC 1517a 12 0 pcharNode::getLastChar() -1517a 12 1191 5804 -FUNC 1518c 31 8 pcharNode::getString(char *,int) -1518c 0 1224 5804 -1518c b 1227 5804 -15197 2 1228 5804 -15199 21 1232 5804 -151ba 3 1234 5804 -FUNC 151bd f 0 pDNameNode::length() -151bd f 1246 5804 -FUNC 151cc f 0 pDNameNode::getLastChar() -151cc f 1248 5804 -FUNC 151db 1d 8 pDNameNode::getString(char *,int) -151db 1d 1251 5804 -FUNC 151f8 33 8 DNameStatusNode::getString(char *,int) -151f8 0 1269 5804 -151f8 b 1272 5804 -15203 2 1273 5804 -15205 23 1277 5804 -15228 3 1279 5804 -FUNC 1522b 73 14 UnDecorator::UnDecorator(char *,char const *,int,char * (*)(long),unsigned long) -1522b 16 736 5771 -15241 8 737 5771 -15249 5 738 5771 -1524e 9 740 5771 -15257 a 741 5771 -15261 5 745 5771 -15266 2 747 5771 -15268 6 748 5771 -1526e 6 749 5771 -15274 8 754 5771 -1527c 15 755 5771 -15291 d 758 5771 -FUNC 1529e 2f 4 UnDecorator::getReturnType(DName *) -1529e 3 2906 5771 -152a1 8 2907 5771 -152a9 15 2911 5771 -152be d 2915 5771 -152cb 2 2917 5771 -FUNC 152cd f 0 UnDecorator::getStorageConvention() -152cd f 4032 5771 -FUNC 152dc 79 4 DName::operator+=(DNameStatus) -152dc 4 799 5804 -152e0 17 800 5804 -152f7 20 804 5804 -15317 4 807 5804 -1531b 7 809 5804 -15322 6 811 5804 -15328 8 812 5804 -15330 2 815 5804 -15332 3 816 5804 -15335 5 818 5804 -1533a e 819 5804 -15348 7 801 5804 -1534f 3 825 5804 -15352 3 827 5804 -FUNC 15355 68 4 DName::operator=(DName *) -15355 3 901 5804 -15358 12 902 5804 -1536a 7 903 5804 -15371 29 911 5804 -1539a 6 913 5804 -153a0 c 914 5804 -153ac 2 917 5804 -153ae 9 918 5804 -153b7 3 922 5804 -153ba 3 924 5804 -FUNC 153bd a6 8 DName::doPchar(char const *,int) -153bd 3 962 5804 -153c0 1e 963 5804 -153de 6 964 5804 -153e4 c 965 5804 -153f0 10 966 5804 -15400 5 970 5804 -15405 23 984 5804 -15428 6 986 5804 -1542e 9 987 5804 -15437 2 988 5804 -15439 1b 977 5804 -15454 c 993 5804 -15460 3 995 5804 -FUNC 15463 26 4 DName::DName(char) -15463 3 238 5804 -15466 3 244 5804 -15469 7 248 5804 -15470 7 252 5804 -15477 c 253 5804 -15483 6 255 5804 -FUNC 15489 31 4 DName::DName(char const *) -15489 0 300 5804 -15489 16 312 5804 -1549f 15 313 5804 -154b4 6 315 5804 -FUNC 154ba d0 8 DName::DName(char const * &,char) -154ba 7 319 5804 -154c1 d 329 5804 -154ce f 333 5804 -154dd 8 334 5804 -154e5 9 342 5804 -154ee 40 343 5804 -1552e b 344 5804 -15539 9 355 5804 -15542 8 359 5804 -1554a 8 361 5804 -15552 9 363 5804 -1555b 3 364 5804 -1555e 2 367 5804 -15560 3 347 5804 -15563 a 378 5804 -1556d 8 380 5804 -15575 6 368 5804 -1557b 7 371 5804 -15582 6 372 5804 -15588 2 375 5804 -FUNC 1558a 69 8 DName::DName(unsigned __int64) -1558a 15 384 5804 -1559f 3 390 5804 -155a2 a 398 5804 -155ac 4 402 5804 -155b0 13 406 5804 -155c3 3 407 5804 -155c6 c 409 5804 -155d2 e 411 5804 -155e0 13 413 5804 -FUNC 155f3 96 8 DName::DName(__int64) -155f3 10 416 5804 -15603 26 436 5804 -15629 15 438 5804 -1563e 10 443 5804 -1564e 5 444 5804 -15653 c 446 5804 -1565f 6 448 5804 -15665 4 449 5804 -15669 e 452 5804 -15677 12 453 5804 -FUNC 15689 2e 4 DName::operator+(DNameStatus) -15689 1 675 5804 -1568a c 676 5804 -15696 9 679 5804 -1569f b 680 5804 -156aa 2 681 5804 -156ac 5 682 5804 -156b1 3 686 5804 -156b4 3 688 5804 -FUNC 156b7 62 4 DName::operator+=(DName const &) -156b7 2 739 5804 -156b9 f 740 5804 -156c8 13 741 5804 -156db 2 742 5804 -156dd 9 743 5804 -156e6 6 744 5804 -156ec 2 745 5804 -156ee 7 747 5804 -156f5 6 749 5804 -156fb 9 750 5804 -15704 2 751 5804 -15706 d 752 5804 -15713 3 758 5804 -15716 3 760 5804 -FUNC 15719 8b 4 DName::operator+=(DName *) -15719 2 764 5804 -1571b a 765 5804 -15725 9 766 5804 -1572e 8 767 5804 -15736 10 768 5804 -15746 8 789 5804 -1574e 20 770 5804 -1576e 4 773 5804 -15772 7 775 5804 -15779 6 777 5804 -1577f 8 778 5804 -15787 2 781 5804 -15789 3 782 5804 -1578c 5 784 5804 -15791 d 785 5804 -1579e 3 793 5804 -157a1 3 795 5804 -FUNC 157a4 1c 4 DName::operator=(char) -157a4 1 847 5804 -157a5 15 854 5804 -157ba 3 856 5804 -157bd 3 858 5804 -FUNC 157c0 2a 4 DName::operator=(char const *) -157c0 0 862 5804 -157c0 24 869 5804 -157e4 3 873 5804 -157e7 3 875 5804 -FUNC 157ea a6 0 UnDecorator::getCallingConvention() -157ea 5 2825 5771 -157ef f 2826 5771 -157fe c 2828 5771 -1580a 5 2835 5771 -1580f 1a 2845 5771 -15829 20 2852 5771 -15849 2 2875 5771 -1584b 2 2876 5771 -1584d 2 2871 5771 -1584f 2 2872 5771 -15851 2 2867 5771 -15853 2 2868 5771 -15855 2 2863 5771 -15857 2 2864 5771 -15859 1 2859 5771 -1585a 2 2860 5771 -1585c 13 2855 5771 -1586f e 2891 5771 -1587d 4 2895 5771 -15881 d 2899 5771 -1588e 2 2901 5771 -FUNC 15890 37 0 UnDecorator::getVCallThunkType() -15890 3 4057 5771 -15893 9 4059 5771 -1589c 5 4066 5771 -158a1 4 4059 5771 -158a5 4 4066 5771 -158a9 6 4061 5771 -158af c 4062 5771 -158bb a 4064 5771 -158c5 2 4170 5771 -FUNC 158c7 51 4 DName::operator+(DName const &) -158c7 1 639 5804 -158c8 c 640 5804 -158d4 b 643 5804 -158df b 644 5804 -158ea d 645 5804 -158f7 11 646 5804 -15908 2 647 5804 -1590a 8 648 5804 -15912 3 652 5804 -15915 3 654 5804 -FUNC 15918 2e 4 DName::operator+(DName *) -15918 1 658 5804 -15919 c 659 5804 -15925 9 662 5804 -1592e b 663 5804 -15939 2 664 5804 -1593b 5 665 5804 -15940 3 669 5804 -15943 3 671 5804 -FUNC 15946 6a 4 DName::operator+=(char) -15946 1 693 5804 -15947 b 694 5804 -15952 9 695 5804 -1595b 6 696 5804 -15961 2 697 5804 -15963 7 699 5804 -1596a 6 701 5804 -15970 2b 702 5804 -1599b 2 703 5804 -1599d c 704 5804 -159a9 4 710 5804 -159ad 3 712 5804 -FUNC 159b0 6c 4 DName::operator+=(char const *) -159b0 2 716 5804 -159b2 f 717 5804 -159c1 9 718 5804 -159ca 6 719 5804 -159d0 2 720 5804 -159d2 7 722 5804 -159d9 6 724 5804 -159df 28 725 5804 -15a07 2 726 5804 -15a09 d 727 5804 -15a16 3 733 5804 -15a19 3 735 5804 -FUNC 15a1c e0 0 UnDecorator::getArgumentList() -15a1c 7 3076 5771 -15a23 12 3078 5771 -15a35 29 3081 5771 -15a5e 6 3085 5771 -15a64 4 3086 5771 -15a68 2 3087 5771 -15a6a e 3088 5771 -15a78 6 3093 5771 -15a7e 6 3095 5771 -15a84 5 3100 5771 -15a89 1 3102 5771 -15a8a 11 3106 5771 -15a9b 2 3109 5771 -15a9d 16 3116 5771 -15ab3 19 3121 5771 -15acc 9 3122 5771 -15ad5 17 3126 5771 -15aec b 3132 5771 -15af7 3 3141 5771 -15afa 2 3143 5771 -FUNC 15afc 4f 4 UnDecorator::getVdispMapType(DName const &) -15afc 6 4230 5771 -15b02 d 4231 5771 -15b0f c 4232 5771 -15b1b 12 4233 5771 -15b2d 9 4234 5771 -15b36 a 4236 5771 -15b40 6 4237 5771 -15b46 3 4238 5771 -15b49 2 4239 5771 -FUNC 15b4b 22 8 operator+(char,DName const &) -15b4b 22 198 5804 -FUNC 15b6d 22 8 operator+(DNameStatus,DName const &) -15b6d 22 201 5804 -FUNC 15b8f 22 8 operator+(char const *,DName const &) -15b8f 22 204 5804 -FUNC 15bb1 2e 4 DName::operator+(char) -15bb1 1 605 5804 -15bb2 c 606 5804 -15bbe 9 609 5804 -15bc7 b 610 5804 -15bd2 2 611 5804 -15bd4 5 612 5804 -15bd9 3 616 5804 -15bdc 3 618 5804 -FUNC 15bdf 2e 4 DName::operator+(char const *) -15bdf 1 622 5804 -15be0 c 623 5804 -15bec 9 626 5804 -15bf5 b 627 5804 -15c00 2 628 5804 -15c02 5 629 5804 -15c07 3 633 5804 -15c0a 3 635 5804 -FUNC 15c0d 141 4 UnDecorator::getDimension(bool) -15c0d 7 1616 5771 -15c14 10 1618 5771 -15c24 e 1620 5771 -15c32 6 1623 5771 -15c38 f 1624 5771 -15c47 8 1625 5771 -15c4f 47 1626 5771 -15c96 4 1629 5771 -15c9a 4 1636 5771 -15c9e 8 1638 5771 -15ca6 20 1639 5771 -15cc6 d 1643 5771 -15cd3 4 1634 5771 -15cd7 b 1649 5771 -15ce2 2 1650 5771 -15ce4 5 1652 5771 -15ce9 13 1653 5771 -15cfc c 1637 5771 -15d08 4 1641 5771 -15d0c a 1653 5771 -15d16 36 1655 5771 -15d4c 2 1659 5771 -FUNC 15d4e d4 0 UnDecorator::getEnumType() -15d4e 6 2762 5771 -15d54 1a 2766 5771 -15d6e 12 2770 5771 -15d80 5 2774 5771 -15d85 2 2775 5771 -15d87 5 2779 5771 -15d8c 2 2780 5771 -15d8e 5 2786 5771 -15d93 2 2787 5771 -15d95 d 2791 5771 -15da2 1f 2801 5771 -15dc1 1e 2807 5771 -15ddf e 2814 5771 -15ded 4 2795 5771 -15df1 d 2818 5771 -15dfe 24 2820 5771 -FUNC 15e22 c4 0 UnDecorator::getArgumentTypes() -15e22 3 3035 5771 -15e25 18 3036 5771 -15e3d 9 3046 5771 -15e46 7 3051 5771 -15e4d 13 3052 5771 -15e60 c 3064 5771 -15e6c 36 3058 5771 -15ea2 b 3061 5771 -15ead 21 3039 5771 -15ece 16 3042 5771 -15ee4 2 3072 5771 -FUNC 15ee6 7e 0 UnDecorator::getThrowTypes() -15ee6 3 3148 5771 -15ee9 e 3149 5771 -15ef7 2 3150 5771 -15ef9 21 3151 5771 -15f1a 1f 3153 5771 -15f39 29 3155 5771 -15f62 2 3157 5771 -FUNC 15f64 125 c UnDecorator::getExtendedDataIndirectType(char &,bool &,int) -15f64 6 3636 5771 -15f6a 1a 3641 5771 -15f84 1c 3643 5771 -15fa0 a 3669 5771 -15faa 6 3670 5771 -15fb0 b 3672 5771 -15fbb a 3674 5771 -15fc5 21 3675 5771 -15fe6 17 3678 5771 -15ffd a 3680 5771 -16007 6 3689 5771 -1600d 2 3691 5771 -1600f 17 3693 5771 -16026 1e 3700 5771 -16044 6 3663 5771 -1604a 2 3665 5771 -1604c 3 3656 5771 -1604f d 3657 5771 -1605c 2 3659 5771 -1605e 6 3647 5771 -16064 13 3649 5771 -16077 10 3703 5771 -16087 2 3704 5771 -FUNC 16089 15f 4 UnDecorator::getArrayType(DName const &) -16089 3 3986 5771 -1608c 12 3987 5771 -1609e 7 3989 5771 -160a5 4 3991 5771 -160a9 2 3992 5771 -160ab 4 3994 5771 -160af 9 3995 5771 -160b8 2a 4026 5771 -160e2 2 4028 5771 -160e4 c 3998 5771 -160f0 9 4000 5771 -160f9 d 4001 5771 -16106 35 4005 5771 -1613b b 4009 5771 -16146 4 4010 5771 -1614a 8 4011 5771 -16152 2 4012 5771 -16154 2c 4013 5771 -16180 d 4017 5771 -1618d 9 4018 5771 -16196 12 4019 5771 -161a8 a 4023 5771 -161b2 36 4024 5771 -FUNC 161e8 31 0 UnDecorator::getLexicalFrame() -161e8 31 4031 5771 -FUNC 16219 12 0 UnDecorator::getDisplacement() -16219 12 4048 5771 -FUNC 1622b 12 0 UnDecorator::getCallIndex() -1622b 12 4049 5771 -FUNC 1623d 12 0 UnDecorator::getGuardNumber() -1623d 12 4050 5771 -FUNC 1624f 150 4 UnDecorator::getVfTableType(DName const &) -1624f 7 4174 5771 -16256 d 4175 5771 -16263 1d 4178 5771 -16280 2c 4180 5771 -162ac f 4182 5771 -162bb e 4184 5771 -162c9 5 4186 5771 -162ce 11 4188 5771 -162df 2d 4190 5771 -1630c b 4194 5771 -16317 7 4195 5771 -1631e 10 4199 5771 -1632e a 4200 5771 -16338 b 4188 5771 -16343 b 4204 5771 -1634e a 4206 5771 -16358 7 4207 5771 -1635f 9 4209 5771 -16368 a 4216 5771 -16372 6 4217 5771 -16378 2 4220 5771 -1637a 9 4221 5771 -16383 17 4222 5771 -1639a 3 4224 5771 -1639d 2 4226 5771 -FUNC 1639f a0 8 UnDecorator::getStringEncoding(char *,int) -1639f 6 1447 5771 -163a5 b 1448 5771 -163b0 22 1451 5771 -163d2 6 1456 5771 -163d8 b 1459 5771 -163e3 b 1462 5771 -163ee 13 1464 5771 -16401 c 1466 5771 -1640d 5 1469 5771 -16412 6 1470 5771 -16418 4 1471 5771 -1641c 14 1477 5771 -16430 d 1452 5771 -1643d 2 1478 5771 -FUNC 1643f 50 0 UnDecorator::getSignedDimension() -1643f 5 1603 5771 -16444 b 1604 5771 -1644f c 1605 5771 -1645b 2 1606 5771 -1645d 23 1608 5771 -16480 d 1611 5771 -1648d 2 1612 5771 -FUNC 1648f 2bb 0 UnDecorator::getTemplateConstant() -1648f 15 1877 5771 -164a4 f 1884 5771 -164b3 32 1885 5771 -164e5 9 1921 5771 -164ee b 1922 5771 -164f9 20 1924 5771 -16519 12 1931 5771 -1652b e 1932 5771 -16539 3 1937 5771 -1653c 7 1939 5771 -16543 6 1941 5771 -16549 4 1942 5771 -1654d 2 1944 5771 -1654f 4 1945 5771 -16553 2a 1950 5771 -1657d a 1900 5771 -16587 6 1902 5771 -1658d 11 1903 5771 -1659e 1b 1906 5771 -165b9 b 1892 5771 -165c4 6 2034 5771 -165ca 7 1954 5771 -165d1 26 1885 5771 -165f7 b 1990 5771 -16602 c 1991 5771 -1660e 10 1992 5771 -1661e 9 1966 5771 -16627 c 1968 5771 -16633 e 1971 5771 -16641 10 1973 5771 -16651 6 1975 5771 -16657 6 1976 5771 -1665d 3 1980 5771 -16660 29 1981 5771 -16689 a 1983 5771 -16693 a 2001 5771 -1669d a 2003 5771 -166a7 13 2007 5771 -166ba a 2008 5771 -166c4 11 2012 5771 -166d5 13 2015 5771 -166e8 a 2016 5771 -166f2 13 2021 5771 -16705 a 2022 5771 -1670f 13 2026 5771 -16722 d 2029 5771 -1672f 7 1913 5771 -16736 14 2041 5771 -FUNC 1674a d9 8 UnDecorator::getPtrRefDataType(DName const &,int) -1674a 3 3937 5771 -1674d 11 3940 5771 -1675e b 3944 5771 -16769 12 3948 5771 -1677b 12 3949 5771 -1678d 10 3951 5771 -1679d 5 3957 5771 -167a2 16 3961 5771 -167b8 d 3967 5771 -167c5 c 3968 5771 -167d1 b 3970 5771 -167dc 6 3972 5771 -167e2 1e 3974 5771 -16800 e 3976 5771 -1680e 13 3980 5771 -16821 2 3982 5771 -FUNC 16823 14 4 UnDecorator::getVbTableType(DName const &) -16823 14 4053 5771 -FUNC 16837 1b8 0 UnDecorator::getTemplateArgumentList() -16837 14 1775 5771 -1684b c 1777 5771 -16857 7 1778 5771 -1685e 2a 1781 5771 -16888 6 1785 5771 -1688e 4 1786 5771 -16892 2 1787 5771 -16894 e 1788 5771 -168a2 8 1793 5771 -168aa 5 1798 5771 -168af 1 1800 5771 -168b0 11 1804 5771 -168c1 5 1807 5771 -168c6 7 1810 5771 -168cd 7 1816 5771 -168d4 6 1817 5771 -168da 12 1818 5771 -168ec a 1820 5771 -168f6 5 1821 5771 -168fb e 1822 5771 -16909 5 1824 5771 -1690e 9 1830 5771 -16917 c 1832 5771 -16923 e 1835 5771 -16931 10 1837 5771 -16941 6 1839 5771 -16947 1 1840 5771 -16948 2 1842 5771 -1694a 25 1843 5771 -1696f 2 1846 5771 -16971 10 1847 5771 -16981 2 1850 5771 -16983 1f 1851 5771 -169a2 17 1857 5771 -169b9 9 1858 5771 -169c2 16 1862 5771 -169d8 17 1873 5771 -FUNC 169ef 56f 8 UnDecorator::getOperatorName(bool,bool *) -169ef b 1095 5771 -169fa 53 1103 5771 -16a4d 13 1183 5771 -16a60 c 1439 5771 -16a6c 1d 1440 5771 -16a89 11 1442 5771 -16a9a 5 1444 5771 -16a9f 3 1124 5771 -16aa2 8 1126 5771 -16aaa 21 1127 5771 -16acb c 1129 5771 -16ad7 a 1130 5771 -16ae1 a 1133 5771 -16aeb 7 1135 5771 -16af2 3 1136 5771 -16af5 9 1144 5771 -16afe 5 1145 5771 -16b03 6 1148 5771 -16b09 2 1154 5771 -16b0b 15 1156 5771 -16b20 18 1160 5771 -16b38 1a 1161 5771 -16b52 10 1166 5771 -16b62 b 1167 5771 -16b6d 5 1170 5771 -16b72 6 1106 5771 -16b78 f 1108 5771 -16b87 21 1103 5771 -16ba8 3d 1220 5771 -16be5 18 1240 5771 -16bfd b 1234 5771 -16c08 5 1235 5771 -16c0d 13 1245 5771 -16c20 7 1247 5771 -16c27 8 1249 5771 -16c2f 18 1220 5771 -16c47 13 1255 5771 -16c5a 7 1256 5771 -16c61 2 1257 5771 -16c63 16 1335 5771 -16c79 7 1356 5771 -16c80 6 1350 5771 -16c86 2 1352 5771 -16c88 25 1220 5771 -16cad 13 1290 5771 -16cc0 17 1291 5771 -16cd7 24 1292 5771 -16cfb 14 1313 5771 -16d0f 6 1316 5771 -16d15 5 1317 5771 -16d1a 10 1302 5771 -16d2a 20 1303 5771 -16d4a 20 1304 5771 -16d6a 20 1305 5771 -16d8a 22 1306 5771 -16dac 12 1307 5771 -16dbe c 1296 5771 -16dca 2b 1297 5771 -16df5 13 1281 5771 -16e08 17 1282 5771 -16e1f 1a 1283 5771 -16e39 5 1284 5771 -16e3e 2d 1220 5771 -16e6b 25 1364 5771 -16e90 10 1373 5771 -16ea0 13 1378 5771 -16eb3 a 1397 5771 -16ebd 13 1399 5771 -16ed0 a 1403 5771 -16eda 6 1405 5771 -16ee0 2 1408 5771 -16ee2 13 1410 5771 -16ef5 d 1413 5771 -16f02 5 1415 5771 -16f07 10 1278 5771 -16f17 b 1330 5771 -16f22 5 1428 5771 -16f27 3 1187 5771 -16f2a 13 1216 5771 -16f3d 8 1437 5771 -16f45 19 1438 5771 -FUNC 16f5e 153 4 UnDecorator::getTemplateName(bool) -16f5e 5 1700 5771 -16f63 1f 1704 5771 -16f82 16 1714 5771 -16f98 1d 1716 5771 -16fb5 23 1725 5771 -16fd8 e 1729 5771 -16fe6 6 1730 5771 -16fec 12 1732 5771 -16ffe 2 1734 5771 -17000 16 1735 5771 -17016 c 1738 5771 -17022 7 1739 5771 -17029 6 1746 5771 -1702f 21 1747 5771 -17050 c 1749 5771 -1705c a 1750 5771 -17066 a 1753 5771 -17070 6 1755 5771 -17076 6 1756 5771 -1707c 23 1769 5771 -1709f d 1705 5771 -170ac 5 1771 5771 -FUNC 170b1 1ea 4 UnDecorator::getZName(bool) -170b1 10 1007 5771 -170c1 11 1008 5771 -170d2 3 1013 5771 -170d5 26 1043 5771 -170fb b 1024 5771 -17106 5 1026 5771 -1710b 16 1028 5771 -17121 16 1030 5771 -17137 17 1031 5771 -1714e 7 1033 5771 -17155 25 1040 5771 -1717a 5 1042 5771 -1717f 29 1043 5771 -171a8 8 1045 5771 -171b0 b 1051 5771 -171bb c 1053 5771 -171c7 e 1056 5771 -171d5 10 1058 5771 -171e5 4 1060 5771 -171e9 b 1061 5771 -171f4 2 1063 5771 -171f6 a 1064 5771 -17200 10 1065 5771 -17210 2 1068 5771 -17212 d 1069 5771 -1721f 2a 1070 5771 -17249 2 1073 5771 -1724b 1a 1076 5771 -17265 11 1083 5771 -17276 9 1084 5771 -1727f f 1087 5771 -1728e d 1090 5771 -FUNC 1729b e4 0 UnDecorator::getScopedName() -1729b 7 2727 5771 -172a2 e 2728 5771 -172b0 15 2733 5771 -172c5 1a 2737 5771 -172df 2a 2738 5771 -17309 b 2742 5771 -17314 8 2743 5771 -1731c 4 2744 5771 -17320 1b 2745 5771 -1733b b 2746 5771 -17346 7 2747 5771 -1734d 2 2748 5771 -1734f 2b 2749 5771 -1737a 3 2753 5771 -1737d 2 2755 5771 -FUNC 1737f f 0 UnDecorator::getECSUName() -1737f f 2758 5771 -FUNC 1738e 100 0 UnDecorator::getECSUDataType() -1738e 3 3392 5771 -17391 20 3395 5771 -173b1 37 3399 5771 -173e8 5 3424 5771 -173ed 2 3425 5771 -173ef 5 3420 5771 -173f4 2 3421 5771 -173f6 26 3431 5771 -1741c 2 3432 5771 -1741e 5 3415 5771 -17423 2 3416 5771 -17425 5 3411 5771 -1742a 2 3412 5771 -1742c d 3407 5771 -17439 7 3439 5771 -17440 4 3441 5771 -17444 c 3442 5771 -17450 16 3446 5771 -17466 e 3450 5771 -17474 18 3404 5771 -1748c 2 3452 5771 -FUNC 1748e 46 0 UnDecorator::getSymbolName() -1748e 3 989 5771 -17491 a 990 5771 -1749b 6 991 5771 -174a1 c 992 5771 -174ad 16 997 5771 -174c3 f 1001 5771 -174d2 2 1003 5771 -FUNC 174d4 92 0 UnDecorator::getBasedType() -174d4 6 2653 5771 -174da 13 2654 5771 -174ed a 2659 5771 -174f7 17 2661 5771 -1750e c 2707 5771 -1751a 13 2699 5771 -1752d 2 2700 5771 -1752f d 2674 5771 -1753c 2 2711 5771 -1753e a 2712 5771 -17548 d 2716 5771 -17555 f 2720 5771 -17564 2 2722 5771 -FUNC 17566 b42 4 UnDecorator::composeDeclaration(DName const &) -17566 6 2045 5771 -1756c e 2046 5771 -1757a 5 2047 5771 -1757f a 2048 5771 -17589 b 2053 5771 -17594 f 2054 5771 -175a3 8 2055 5771 -175ab 15 2056 5771 -175c0 8 2057 5771 -175c8 10 2058 5771 -175d8 83 2075 5771 -1765b 7 2081 5771 -17662 19 2082 5771 -1767b 21 2083 5771 -1769c 2 2084 5771 -1769e 15 2085 5771 -176b3 27 2090 5771 -176da 33 2092 5771 -1770d 9 2094 5771 -17716 9 2096 5771 -1771f 2b 2098 5771 -1774a d 2101 5771 -17757 9 2103 5771 -17760 2d 2105 5771 -1778d 2e 2107 5771 -177bb 5 2111 5771 -177c0 3 2114 5771 -177c3 3 2115 5771 -177c6 3 2116 5771 -177c9 3 2117 5771 -177cc 3 2118 5771 -177cf 26 2121 5771 -177f5 12 2123 5771 -17807 19 2125 5771 -17820 19 2126 5771 -17839 2 2127 5771 -1783b 12 2129 5771 -1784d 19 2131 5771 -17866 1b 2134 5771 -17881 13 2141 5771 -17894 a 2142 5771 -1789e 15 2143 5771 -178b3 2 2144 5771 -178b5 f 2145 5771 -178c4 10 2147 5771 -178d4 9 2151 5771 -178dd 22 2152 5771 -178ff 2 2153 5771 -17901 13 2168 5771 -17914 c 2172 5771 -17920 14 2173 5771 -17934 1a 2174 5771 -1794e 2 2175 5771 -17950 b 2176 5771 -1795b 5 2182 5771 -17960 6 2185 5771 -17966 27 2187 5771 -1798d b 2189 5771 -17998 5 2190 5771 -1799d 1b 2194 5771 -179b8 15 2195 5771 -179cd 1d 2202 5771 -179ea 16 2204 5771 -17a00 55 2205 5771 -17a55 12 2206 5771 -17a67 2b 2207 5771 -17a92 2 2208 5771 -17a94 d 2209 5771 -17aa1 1a 2211 5771 -17abb 2e 2218 5771 -17ae9 12 2222 5771 -17afb c 2223 5771 -17b07 c 2227 5771 -17b13 15 2228 5771 -17b28 2 2229 5771 -17b2a f 2230 5771 -17b39 1a 2235 5771 -17b53 b 2237 5771 -17b5e 3 2238 5771 -17b61 5 2243 5771 -17b66 b 2245 5771 -17b71 1c 2250 5771 -17b8d 13 2251 5771 -17ba0 e 2252 5771 -17bae 2 2253 5771 -17bb0 10 2254 5771 -17bc0 3d 2255 5771 -17bfd c 2256 5771 -17c09 e 2257 5771 -17c17 4c 2258 5771 -17c63 a 2259 5771 -17c6d 4b 2260 5771 -17cb8 7 2261 5771 -17cbf 4b 2262 5771 -17d0a f 2263 5771 -17d19 f 2264 5771 -17d28 6 2268 5771 -17d2e 61 2277 5771 -17d8f 15 2281 5771 -17da4 2 2283 5771 -17da6 18 2285 5771 -17dbe 2d 2292 5771 -17deb 12 2294 5771 -17dfd 37 2296 5771 -17e34 23 2297 5771 -17e57 b7 2299 5771 -17f0e 23 2300 5771 -17f31 12 2306 5771 -17f43 37 2307 5771 -17f7a b 2308 5771 -17f85 37 2309 5771 -17fbc b 2310 5771 -17fc7 30 2311 5771 -17ff7 23 2312 5771 -1801a 36 2319 5771 -18050 1e 2320 5771 -1806e 8 2325 5771 -18076 1e 2326 5771 -18094 12 2329 5771 -180a6 2 2331 5771 -FUNC 180a8 211 0 UnDecorator::getDecoratedName() -180a8 7 861 5771 -180af e 864 5771 -180bd a 868 5771 -180c7 b 873 5771 -180d2 8 874 5771 -180da 11 876 5771 -180eb 10 878 5771 -180fb 6 882 5771 -18101 9 903 5771 -1810a 9 906 5771 -18113 8 910 5771 -1811b 6 912 5771 -18121 5 910 5771 -18126 2 915 5771 -18128 a 918 5771 -18132 19 919 5771 -1814b 6 920 5771 -18151 f 924 5771 -18160 8 925 5771 -18168 17 929 5771 -1817f a 930 5771 -18189 c 932 5771 -18195 8 933 5771 -1819d 5 934 5771 -181a2 18 935 5771 -181ba a 936 5771 -181c4 13 937 5771 -181d7 b 938 5771 -181e2 2 940 5771 -181e4 29 941 5771 -1820d 4 945 5771 -18211 10 946 5771 -18221 9 948 5771 -1822a 3 950 5771 -1822d 1c 955 5771 -18249 f 959 5771 -18258 4 976 5771 -1825c 6 962 5771 -18262 14 964 5771 -18276 19 967 5771 -1828f 5 968 5771 -18294 10 971 5771 -182a4 2 979 5771 -182a6 2 980 5771 -182a8 f 982 5771 -182b7 2 984 5771 -FUNC 182b9 28b 0 UnDecorator::getScope() -182b9 d 1482 5771 -182c6 f 1483 5771 -182d5 2a 1489 5771 -182ff 14 1492 5771 -18313 b 1495 5771 -1831e 16 1496 5771 -18334 5 1498 5771 -18339 17 1499 5771 -18350 3 1500 5771 -18353 f 1506 5771 -18362 2a 1507 5771 -1838c 10 1566 5771 -1839c 5 1567 5771 -183a1 34 1561 5771 -183d5 4 1562 5771 -183d9 5 1563 5771 -183de e 1510 5771 -183ec 5 1514 5771 -183f1 22 1515 5771 -18413 e 1518 5771 -18421 6 1519 5771 -18427 5 1522 5771 -1842c 2a 1523 5771 -18456 2 1524 5771 -18458 f 1546 5771 -18467 1a 1548 5771 -18481 b 1550 5771 -1848c 9 1551 5771 -18495 2 1554 5771 -18497 f 1530 5771 -184a6 2 1570 5771 -184a8 21 1571 5771 -184c9 a 1489 5771 -184d3 f 1577 5771 -184e2 18 1590 5771 -184fa 2 1591 5771 -184fc b 1580 5771 -18507 7 1581 5771 -1850e 2 1582 5771 -18510 2b 1583 5771 -1853b 4 1597 5771 -1853f 5 1599 5771 -FUNC 18544 341 4 UnDecorator::getFunctionIndirectType(DName const &) -18544 3 3461 5771 -18547 e 3462 5771 -18555 15 3463 5771 -1856a f 3465 5771 -18579 10 3466 5771 -18589 7 3469 5771 -18590 a 3471 5771 -1859a 6 3473 5771 -185a0 7 3475 5771 -185a7 d 3477 5771 -185b4 17 3482 5771 -185cb 9 3485 5771 -185d4 3 3486 5771 -185d7 5 3490 5771 -185dc f 3491 5771 -185eb 6 3496 5771 -185f1 13 3497 5771 -18604 b 3501 5771 -1860f 1e 3503 5771 -1862d 8 3505 5771 -18635 29 3506 5771 -1865e 2 3507 5771 -18660 17 3508 5771 -18677 f 3510 5771 -18686 4 3511 5771 -1868a 10 3518 5771 -1869a 15 3519 5771 -186af 9 3527 5771 -186b8 d 3528 5771 -186c5 30 3529 5771 -186f5 2 3530 5771 -186f7 11 3521 5771 -18708 7 3514 5771 -1870f 16 3516 5771 -18725 13 3531 5771 -18738 d 3535 5771 -18745 22 3537 5771 -18767 2 3546 5771 -18769 13 3547 5771 -1877c c 3551 5771 -18788 28 3552 5771 -187b0 1e 3557 5771 -187ce c 3558 5771 -187da 2e 3561 5771 -18808 10 3563 5771 -18818 c 3564 5771 -18824 c 3566 5771 -18830 15 3567 5771 -18845 2 3568 5771 -18847 f 3569 5771 -18856 4 3573 5771 -1885a b 3574 5771 -18865 e 3580 5771 -18873 10 3576 5771 -18883 2 3581 5771 -FUNC 18885 4e4 10 UnDecorator::getDataIndirectType(DName const &,char,DName const &,int) -18885 6 3707 5771 -1888b 23 3711 5771 -188ae 4 3713 5771 -188b2 17 3715 5771 -188c9 c 3717 5771 -188d5 10 3719 5771 -188e5 e 3723 5771 -188f3 6 3725 5771 -188f9 15 3726 5771 -1890e 17 3732 5771 -18925 11 3751 5771 -18936 a 3752 5771 -18940 32 3753 5771 -18972 5 3754 5771 -18977 11 3743 5771 -18988 a 3744 5771 -18992 25 3745 5771 -189b7 2 3746 5771 -189b9 8 3747 5771 -189c1 2 3749 5771 -189c3 19 3735 5771 -189dc a 3736 5771 -189e6 14 3737 5771 -189fa 5 3738 5771 -189ff 11 3739 5771 -18a10 6 3766 5771 -18a16 a 3768 5771 -18a20 17 3770 5771 -18a37 10 3772 5771 -18a47 1a 3778 5771 -18a61 5 3780 5771 -18a66 6 3782 5771 -18a6c 9 3787 5771 -18a75 b 3789 5771 -18a80 19 3791 5771 -18a99 c 3793 5771 -18aa5 24 3794 5771 -18ac9 c 3796 5771 -18ad5 22 3797 5771 -18af7 9 3801 5771 -18b00 5 3805 5771 -18b05 7 3806 5771 -18b0c 6 3810 5771 -18b12 1e 3812 5771 -18b30 8 3814 5771 -18b38 1b 3815 5771 -18b53 2 3816 5771 -18b55 16 3817 5771 -18b6b a 3819 5771 -18b75 13 3828 5771 -18b88 b 3833 5771 -18b93 c 3834 5771 -18b9f 8 3835 5771 -18ba7 6 3836 5771 -18bad b 3842 5771 -18bb8 b 3843 5771 -18bc3 3 3863 5771 -18bc6 6 3864 5771 -18bcc 22 3866 5771 -18bee 9 3871 5771 -18bf7 13 3872 5771 -18c0a 5 3876 5771 -18c0f 1e 3877 5771 -18c2d 5 3879 5771 -18c32 1e 3880 5771 -18c50 5 3884 5771 -18c55 e 3885 5771 -18c63 14 3889 5771 -18c77 28 3895 5771 -18c9f 2 3890 5771 -18ca1 b 3891 5771 -18cac 2 3892 5771 -18cae c 3898 5771 -18cba 17 3899 5771 -18cd1 4 3902 5771 -18cd5 6 3904 5771 -18cdb 7 3906 5771 -18ce2 8 3774 5771 -18cea 13 3918 5771 -18cfd 12 3922 5771 -18d0f 29 3925 5771 -18d38 10 3923 5771 -18d48 c 3928 5771 -18d54 3 3929 5771 -18d57 10 3931 5771 -18d67 2 3933 5771 -FUNC 18d69 14c 0 UnDecorator::operator char *() -18d69 6 762 5771 -18d6f 4 763 5771 -18d73 f 764 5771 -18d82 9 770 5771 -18d8b c 772 5771 -18d97 7 775 5771 -18d9e 1d 776 5771 -18dbb 4 782 5771 -18dbf 16 783 5771 -18dd5 9 785 5771 -18dde 5 794 5771 -18de3 9 795 5771 -18dec 13 799 5771 -18dff e 808 5771 -18e0d 2 809 5771 -18e0f 2 848 5771 -18e11 1a 810 5771 -18e2b e 813 5771 -18e39 e 811 5771 -18e47 9 817 5771 -18e50 e 819 5771 -18e5e d 820 5771 -18e6b a 824 5771 -18e75 f 825 5771 -18e84 5 828 5771 -18e89 2 829 5771 -18e8b 2 830 5771 -18e8d 5 831 5771 -18e92 1 832 5771 -18e93 5 833 5771 -18e98 1 835 5771 -18e99 5 834 5771 -18e9e 2 838 5771 -18ea0 a 839 5771 -18eaa 9 841 5771 -18eb3 2 848 5771 -FUNC 18eb5 116 c UnDecorator::getPtrRefType(DName const &,DName const &,char) -18eb5 5 3585 5771 -18eba f 3588 5771 -18ec9 d 3589 5771 -18ed6 b 3591 5771 -18ee1 20 3594 5771 -18f01 b 3595 5771 -18f0c b 3597 5771 -18f17 9 3598 5771 -18f20 14 3600 5771 -18f34 14 3606 5771 -18f48 1b 3608 5771 -18f63 a 3612 5771 -18f6d b 3615 5771 -18f78 c 3617 5771 -18f84 9 3618 5771 -18f8d c 3620 5771 -18f99 c 3622 5771 -18fa5 a 3623 5771 -18faf b 3625 5771 -18fba f 3629 5771 -18fc9 2 3632 5771 -FUNC 18fcb 1b 8 UnDecorator::getPointerType(DName const &,DName const &) -18fcb 1b 4037 5771 -FUNC 18fe6 1b 8 UnDecorator::getPointerTypeArray(DName const &,DName const &) -18fe6 1b 4040 5771 -FUNC 19001 1b 8 UnDecorator::getReferenceType(DName const &,DName const &) -19001 1b 4043 5771 -FUNC 1901c a3 18 __unDName -1901c f 604 5771 -1902b 9 606 5771 -19034 4 607 5771 -19038 a 612 5771 -19042 2 613 5771 -19044 8 614 5771 -1904c 3 615 5771 -1904f 20 618 5771 -1906f 1a 627 5771 -19089 e 628 5771 -19097 a 633 5771 -190a1 c 636 5771 -190ad 3 643 5771 -190b0 6 645 5771 -190b6 9 637 5771 -FUNC 190bf a3 1c __unDNameEx -190bf f 684 5771 -190ce 9 687 5771 -190d7 4 688 5771 -190db a 693 5771 -190e5 2 694 5771 -190e7 8 695 5771 -190ef 3 696 5771 -190f2 20 699 5771 -19112 1a 708 5771 -1912c e 709 5771 -1913a a 714 5771 -19144 c 717 5771 -19150 3 724 5771 -19153 6 726 5771 -19159 9 718 5771 -FUNC 19162 387 4 UnDecorator::getBasicDataType(DName const &) -19162 3 3162 5771 -19165 15 3163 5771 -1917a 6 3165 5771 -19180 4 3168 5771 -19184 35 3173 5771 -191b9 5 3178 5771 -191be 5 3179 5771 -191c3 5 3183 5771 -191c8 5 3184 5771 -191cd 5 3188 5771 -191d2 5 3189 5771 -191d7 5 3193 5771 -191dc 5 3194 5771 -191e1 5 3203 5771 -191e6 5 3204 5771 -191eb 2a 3173 5771 -19215 3c 3222 5771 -19251 5 3231 5771 -19256 5 3232 5771 -1925b 22 3273 5771 -1927d 5 3235 5771 -19282 5 3236 5771 -19287 f 3222 5771 -19296 5 3243 5771 -1929b 5 3244 5771 -192a0 5 3239 5771 -192a5 5 3240 5771 -192aa 5 3247 5771 -192af 5 3248 5771 -192b4 1b 3222 5771 -192cf 3 3264 5771 -192d2 6 3262 5771 -192d8 10 3264 5771 -192e8 10 3266 5771 -192f8 11 3267 5771 -19309 5 3275 5771 -1930e 2 3276 5771 -19310 5 3255 5771 -19315 2 3257 5771 -19317 3 3224 5771 -1931a 12 3343 5771 -1932c 9 3345 5771 -19335 7 3347 5771 -1933c 16 3348 5771 -19352 6 3352 5771 -19358 d 3353 5771 -19365 5 3355 5771 -1936a 5 3227 5771 -1936f 2 3278 5771 -19371 d 3281 5771 -1937e 2 3282 5771 -19380 5 3219 5771 -19385 2 3220 5771 -19387 3 3287 5771 -1938a 5 3290 5771 -1938f d 3207 5771 -1939c d 3212 5771 -193a9 9 3297 5771 -193b2 1f 3301 5771 -193d1 19 3314 5771 -193ea c 3322 5771 -193f6 2 3326 5771 -193f8 c 3307 5771 -19404 2 3308 5771 -19406 1e 3311 5771 -19424 10 3332 5771 -19434 18 3333 5771 -1944c 5 3337 5771 -19451 c 3360 5771 -1945d 5 3367 5771 -19462 d 3369 5771 -1946f 5 3371 5771 -19474 d 3372 5771 -19481 2 3373 5771 -19483 5 3374 5771 -19488 d 3375 5771 -19495 17 3380 5771 -194ac 16 3385 5771 -194c2 27 3387 5771 -FUNC 194e9 13e 4 UnDecorator::getPrimaryDataType(DName const &) -194e9 7 2962 5771 -194f0 2b 2966 5771 -1951b 12 3027 5771 -1952d d 2972 5771 -1953a c 2974 5771 -19546 a 2975 5771 -19550 b 2981 5771 -1955b 6 2984 5771 -19561 1e 2986 5771 -1957f 7 2996 5771 -19586 2 2997 5771 -19588 6 2998 5771 -1958e f 3000 5771 -1959d 8 3002 5771 -195a5 10 3004 5771 -195b5 2f 3022 5771 -195e4 16 3012 5771 -195fa 17 3008 5771 -19611 14 2969 5771 -19625 2 3030 5771 -FUNC 19627 b1 4 UnDecorator::getDataType(DName *) -19627 6 2922 5771 -1962d b 2923 5771 -19638 15 2928 5771 -1964d 10 2954 5771 -1965d 6 2934 5771 -19663 c 2936 5771 -1966f f 2937 5771 -1967e 13 2939 5771 -19691 6 2944 5771 -19697 29 2946 5771 -196c0 2 2947 5771 -196c2 14 2931 5771 -196d6 2 2957 5771 -FUNC 196d8 64 4 UnDecorator::getExternalDataType(DName const &) -196d8 7 4244 5771 -196df 1e 4247 5771 -196fd 9 4248 5771 -19706 30 4253 5771 -19736 4 4255 5771 -1973a 2 4257 5771 -FUNC 1973c 57 8 fastzero_I -FUNC 19793 8f c _VEC_memzero -FUNC 19822 14 0 _sse2_mathfcns_init -FUNC 19836 14 4 _set_SSE2_enable -FUNC 1984a 87 c fastcopy_I -FUNC 198d1 e3 c _VEC_memcpy -FUNC 199b4 1bd c __crtMessageBoxA -199b4 9 41 4033 -199bd 5 49 4033 -199c2 2 56 4033 -199c4 18 64 4033 -199dc d 66 4033 -199e9 2 67 4033 -199eb 6 69 4033 -199f1 10 76 4033 -19a01 6 78 4033 -19a07 6 80 4033 -19a0d 15 83 4033 -19a22 1a 86 4033 -19a3c 1c 88 4033 -19a58 6 89 4033 -19a5e 8 95 4033 -19a66 6 98 4033 -19a6c a 100 4033 -19a76 14 102 4033 -19a8a 14 116 4033 -19a9e 6 119 4033 -19aa4 d 120 4033 -19ab1 c 122 4033 -19abd 1f 127 4033 -19adc 1b 136 4033 -19af7 6 137 4033 -19afd 7 138 4033 -19b04 2 139 4033 -19b06 7 140 4033 -19b0d 2 142 4033 -19b0f a 144 4033 -19b19 6 146 4033 -19b1f 5 147 4033 -19b24 2 149 4033 -19b26 11 153 4033 -19b37 6 155 4033 -19b3d 5 156 4033 -19b42 8 158 4033 -19b4a b 165 4033 -19b55 5 166 4033 -19b5a 10 168 4033 -19b6a 5 173 4033 -19b6f 2 176 4033 -FUNC 19b71 71 c strcat_s -19b71 0 13 823 -19b71 30 18 823 -19ba1 c 19 823 -19bad 2 21 823 -19baf 4 23 823 -19bb3 1 25 823 -19bb4 3 26 823 -19bb7 2 29 823 -19bb9 2 32 823 -19bbb d 35 823 -19bc8 4 39 823 -19bcc 2 41 823 -19bce e 42 823 -19bdc 5 45 823 -19be1 1 46 823 -FUNC 19be2 b3 10 strncpy_s -19be2 5 13 739 -19be7 14 17 739 -19bfb 5 65 739 -19c00 2 66 739 -19c02 26 24 739 -19c28 5 25 739 -19c2d 2 28 739 -19c2f 2 29 739 -19c31 b 31 739 -19c3c 8 35 739 -19c44 d 37 739 -19c51 2 41 739 -19c53 12 45 739 -19c65 5 48 739 -19c6a 2 50 739 -19c6c 4 54 739 -19c70 6 56 739 -19c76 3 58 739 -19c79 c 59 739 -19c85 2 61 739 -19c87 e 62 739 -FUNC 19c95 46 4 _set_error_mode -19c95 0 43 3937 -19c95 15 50 3937 -19caa 6 58 3937 -19cb0 1 65 3937 -19cb1 5 54 3937 -19cb6 7 55 3937 -19cbd 1 65 3937 -19cbe 1c 61 3937 -19cda 1 65 3937 -FUNC 19cdb a 4 __set_app_type -19cdb 0 91 3937 -19cdb 9 96 3937 -19ce4 1 97 3937 -FUNC 19ce5 6 0 __get_app_type -19ce5 0 120 3937 -19ce5 5 125 3937 -19cea 1 126 3937 -FUNC 19ceb 51 10 x_ismbbtype_l -19ceb 6 213 4669 -19cf1 b 214 4669 -19cfc 4 219 4669 -19d00 3a 222 4669 -19d3a 2 223 4669 -FUNC 19d3c 15 8 _ismbbkalnum_l -19d3c 0 80 4669 -19d3c 14 81 4669 -19d50 1 82 4669 -FUNC 19d51 13 4 _ismbbkalnum -19d51 0 85 4669 -19d51 12 86 4669 -19d63 1 87 4669 -FUNC 19d64 15 8 _ismbbkprint_l -19d64 0 90 4669 -19d64 14 91 4669 -19d78 1 92 4669 -FUNC 19d79 13 4 _ismbbkprint -19d79 0 95 4669 -19d79 12 96 4669 -19d8b 1 97 4669 -FUNC 19d8c 15 8 _ismbbkpunct_l -19d8c 0 100 4669 -19d8c 14 101 4669 -19da0 1 102 4669 -FUNC 19da1 13 4 _ismbbkpunct -19da1 0 105 4669 -19da1 12 106 4669 -19db3 1 107 4669 -FUNC 19db4 18 8 _ismbbalnum_l -19db4 0 113 4669 -19db4 17 114 4669 -19dcb 1 115 4669 -FUNC 19dcc 16 4 _ismbbalnum -19dcc 0 118 4669 -19dcc 15 119 4669 -19de1 1 120 4669 -FUNC 19de2 18 8 _ismbbalpha_l -19de2 0 123 4669 -19de2 17 124 4669 -19df9 1 125 4669 -FUNC 19dfa 16 4 _ismbbalpha -19dfa 0 128 4669 -19dfa 15 129 4669 -19e0f 1 130 4669 -FUNC 19e10 18 8 _ismbbgraph_l -19e10 0 133 4669 -19e10 17 134 4669 -19e27 1 135 4669 -FUNC 19e28 16 4 _ismbbgraph -19e28 0 138 4669 -19e28 15 139 4669 -19e3d 1 140 4669 -FUNC 19e3e 18 8 _ismbbprint_l -19e3e 0 143 4669 -19e3e 17 144 4669 -19e55 1 145 4669 -FUNC 19e56 16 4 _ismbbprint -19e56 0 148 4669 -19e56 15 149 4669 -19e6b 1 150 4669 -FUNC 19e6c 15 8 _ismbbpunct_l -19e6c 0 153 4669 -19e6c 14 154 4669 -19e80 1 155 4669 -FUNC 19e81 13 4 _ismbbpunct -19e81 0 158 4669 -19e81 12 159 4669 -19e93 1 160 4669 -FUNC 19e94 15 8 _ismbblead_l -19e94 0 166 4669 -19e94 14 167 4669 -19ea8 1 168 4669 -FUNC 19ea9 13 4 _ismbblead -19ea9 0 171 4669 -19ea9 12 172 4669 -19ebb 1 173 4669 -FUNC 19ebc 15 8 _ismbbtrail_l -19ebc 0 176 4669 -19ebc 14 177 4669 -19ed0 1 178 4669 -FUNC 19ed1 13 4 _ismbbtrail -19ed1 0 181 4669 -19ed1 12 182 4669 -19ee3 1 183 4669 -FUNC 19ee4 53 8 _ismbbkana_l -19ee4 6 189 4669 -19eea b 190 4669 -19ef5 10 192 4669 -19f05 1f 194 4669 -19f24 2 197 4669 -19f26 f 196 4669 -19f35 2 197 4669 -FUNC 19f37 e 4 _ismbbkana -19f37 0 200 4669 -19f37 d 201 4669 -19f44 1 202 4669 -FUNC 19f45 44 4 _getbuf -19f45 0 43 1893 -19f45 6 50 1893 -19f4b 16 58 1893 -19f61 4 61 1893 -19f65 7 62 1893 -19f6c 2 65 1893 -19f6e 4 69 1893 -19f72 6 70 1893 -19f78 7 71 1893 -19f7f 3 75 1893 -19f82 6 76 1893 -19f88 1 79 1893 -FUNC 19f89 1de 8 _fputwc_nolock -19f89 15 90 2124 -19f9e b 93 2124 -19fa9 48 95 2124 -19ff1 6 101 2124 -19ff7 45 104 2124 -1a03c 27 115 2124 -1a063 9 116 2124 -1a06c 22 120 2124 -1a08e 2 121 2124 -1a090 8 124 2124 -1a098 42 127 2124 -1a0da 17 133 2124 -1a0f1 6 139 2124 -1a0f7 7 141 2124 -1a0fe 34 143 2124 -1a132 6 146 2124 -1a138 6 150 2124 -1a13e d 151 2124 -1a14b d 153 2124 -1a158 f 154 2124 -FUNC 1a167 78 8 fputwc -1a167 c 48 2124 -1a173 2e 52 2124 -1a1a1 3 55 2124 -1a1a4 7 57 2124 -1a1ab 3 58 2124 -1a1ae 11 60 2124 -1a1bf c 63 2124 -1a1cb 4 67 2124 -1a1cf 6 68 2124 -1a1d5 a 64 2124 -FUNC 1a1df 5 8 putwc -1a1df 0 162 2124 -1a1df 5 163 2124 -FUNC 1a1e4 1f7 14 wcstoxl -1a1e4 8 82 6173 -1a1ec b 88 6173 -1a1f7 3 92 6173 -1a1fa b 95 6173 -1a205 2f 97 6173 -1a234 12 98 6173 -1a246 9 103 6173 -1a24f 2 105 6173 -1a251 18 106 6173 -1a269 6 108 6173 -1a26f 4 109 6173 -1a273 2 110 6173 -1a275 6 112 6173 -1a27b 5 113 6173 -1a280 5 115 6173 -1a285 b 118 6173 -1a290 9 119 6173 -1a299 f 120 6173 -1a2a8 9 123 6173 -1a2b1 7 121 6173 -1a2b8 6 126 6173 -1a2be 1a 128 6173 -1a2d8 2 129 6173 -1a2da 5 130 6173 -1a2df d 135 6173 -1a2ec c 141 6173 -1a2f8 15 143 6173 -1a30d 12 144 6173 -1a31f 5 148 6173 -1a324 4 152 6173 -1a328 c 159 6173 -1a334 4 165 6173 -1a338 6 166 6173 -1a33e 9 178 6173 -1a347 6 181 6173 -1a34d 3 183 6173 -1a350 4 184 6173 -1a354 2 186 6173 -1a356 c 161 6173 -1a362 5 173 6173 -1a367 2 174 6173 -1a369 24 189 6173 -1a38d 5 192 6173 -1a392 c 193 6173 -1a39e 6 194 6173 -1a3a4 10 195 6173 -1a3b4 8 201 6173 -1a3bc 2 203 6173 -1a3be 6 205 6173 -1a3c4 3 207 6173 -1a3c7 12 209 6173 -1a3d9 2 210 6173 -FUNC 1a3db 29 c wcstol -1a3db 3 217 6173 -1a3de 8 218 6173 -1a3e6 13 220 6173 -1a3f9 9 224 6173 -1a402 2 226 6173 -FUNC 1a404 1b 10 _wcstol_l -1a404 0 234 6173 -1a404 1a 235 6173 -1a41e 1 236 6173 -FUNC 1a41f 2a c wcstoul -1a41f 3 243 6173 -1a422 7 244 6173 -1a429 14 246 6173 -1a43d a 250 6173 -1a447 2 252 6173 -FUNC 1a449 1b 10 _wcstoul_l -1a449 0 260 6173 -1a449 1a 261 6173 -1a463 1 262 6173 -FUNC 1a464 9 0 _fptrap -1a464 0 46 2503 -1a464 8 47 2503 -1a46c 1 48 2503 -FUNC 1a46d 54 8 _isalpha_l -1a46d 6 57 6535 -1a473 b 58 6535 -1a47e 41 60 6535 -1a4bf 2 61 6535 -FUNC 1a4c1 2b 4 isalpha -1a4c1 0 66 6535 -1a4c1 9 67 6535 -1a4ca 13 69 6535 -1a4dd 1 75 6535 -1a4de d 73 6535 -1a4eb 1 75 6535 -FUNC 1a4ec 4f 8 _isupper_l -1a4ec 6 81 6535 -1a4f2 b 82 6535 -1a4fd 3c 84 6535 -1a539 2 85 6535 -FUNC 1a53b 29 4 isupper -1a53b 0 90 6535 -1a53b 9 91 6535 -1a544 11 93 6535 -1a555 1 99 6535 -1a556 d 97 6535 -1a563 1 99 6535 -FUNC 1a564 4f 8 _islower_l -1a564 6 105 6535 -1a56a b 106 6535 -1a575 3c 108 6535 -1a5b1 2 109 6535 -FUNC 1a5b3 29 4 islower -1a5b3 0 114 6535 -1a5b3 9 115 6535 -1a5bc 11 117 6535 -1a5cd 1 123 6535 -1a5ce d 121 6535 -1a5db 1 123 6535 -FUNC 1a5dc 4f 8 _isdigit_l -1a5dc 6 129 6535 -1a5e2 b 130 6535 -1a5ed 3c 132 6535 -1a629 2 133 6535 -FUNC 1a62b 29 4 isdigit -1a62b 0 138 6535 -1a62b 9 139 6535 -1a634 11 141 6535 -1a645 1 147 6535 -1a646 d 145 6535 -1a653 1 147 6535 -FUNC 1a654 54 8 _isxdigit_l -1a654 6 153 6535 -1a65a b 154 6535 -1a665 41 156 6535 -1a6a6 2 157 6535 -FUNC 1a6a8 2b 4 isxdigit -1a6a8 0 162 6535 -1a6a8 9 163 6535 -1a6b1 13 165 6535 -1a6c4 1 171 6535 -1a6c5 d 169 6535 -1a6d2 1 171 6535 -FUNC 1a6d3 4f 8 _isspace_l -1a6d3 6 177 6535 -1a6d9 b 178 6535 -1a6e4 3c 180 6535 -1a720 2 181 6535 -FUNC 1a722 29 4 isspace -1a722 0 186 6535 -1a722 9 187 6535 -1a72b 11 189 6535 -1a73c 1 195 6535 -1a73d d 193 6535 -1a74a 1 195 6535 -FUNC 1a74b 4f 8 _ispunct_l -1a74b 6 201 6535 -1a751 b 202 6535 -1a75c 3c 204 6535 -1a798 2 205 6535 -FUNC 1a79a 29 4 ispunct -1a79a 0 210 6535 -1a79a 9 211 6535 -1a7a3 11 213 6535 -1a7b4 1 219 6535 -1a7b5 d 217 6535 -1a7c2 1 219 6535 -FUNC 1a7c3 54 8 _isalnum_l -1a7c3 6 225 6535 -1a7c9 b 226 6535 -1a7d4 41 228 6535 -1a815 2 229 6535 -FUNC 1a817 2b 4 isalnum -1a817 0 234 6535 -1a817 9 235 6535 -1a820 13 237 6535 -1a833 1 243 6535 -1a834 d 241 6535 -1a841 1 243 6535 -FUNC 1a842 54 8 _isprint_l -1a842 6 249 6535 -1a848 b 250 6535 -1a853 41 252 6535 -1a894 2 253 6535 -FUNC 1a896 2b 4 isprint -1a896 0 258 6535 -1a896 9 259 6535 -1a89f 13 261 6535 -1a8b2 1 267 6535 -1a8b3 d 265 6535 -1a8c0 1 267 6535 -FUNC 1a8c1 54 8 _isgraph_l -1a8c1 6 273 6535 -1a8c7 b 274 6535 -1a8d2 41 276 6535 -1a913 2 277 6535 -FUNC 1a915 2b 4 isgraph -1a915 0 282 6535 -1a915 9 283 6535 -1a91e 13 285 6535 -1a931 1 291 6535 -1a932 d 289 6535 -1a93f 1 291 6535 -FUNC 1a940 4f 8 _iscntrl_l -1a940 6 297 6535 -1a946 b 298 6535 -1a951 3c 300 6535 -1a98d 2 301 6535 -FUNC 1a98f 29 4 iscntrl -1a98f 0 306 6535 -1a98f 9 307 6535 -1a998 11 309 6535 -1a9a9 1 315 6535 -1a9aa d 313 6535 -1a9b7 1 315 6535 -FUNC 1a9b8 d 4 __isascii -1a9b8 0 320 6535 -1a9b8 c 321 6535 -1a9c4 1 322 6535 -FUNC 1a9c5 8 4 __toascii -1a9c5 0 327 6535 -1a9c5 7 328 6535 -1a9cc 1 329 6535 -FUNC 1a9cd 1f 8 _iscsymf_l -1a9cd 0 335 6535 -1a9cd 1a 336 6535 -1a9e7 1 337 6535 -1a9e8 3 336 6535 -1a9eb 1 337 6535 -FUNC 1a9ec 1a 4 __iscsymf -1a9ec 0 341 6535 -1a9ec 15 342 6535 -1aa01 1 343 6535 -1aa02 3 342 6535 -1aa05 1 343 6535 -FUNC 1aa06 1f 8 _iscsym_l -1aa06 0 349 6535 -1aa06 1a 350 6535 -1aa20 1 351 6535 -1aa21 3 350 6535 -1aa24 1 351 6535 -FUNC 1aa25 1c 4 __iscsym -1aa25 0 356 6535 -1aa25 17 357 6535 -1aa3c 1 358 6535 -1aa3d 3 357 6535 -1aa40 1 358 6535 -FUNC 1aa41 12 8 _MarkAllocaS -1aa41 0 207 2895 -1aa41 8 208 2895 -1aa49 6 210 2895 -1aa4f 3 211 2895 -1aa52 1 214 2895 -FUNC 1aa53 1b 4 _freea -1aa53 0 249 2895 -1aa53 8 251 2895 -1aa5b 3 253 2895 -1aa5e 8 255 2895 -1aa66 7 257 2895 -1aa6d 1 266 2895 -FUNC 1aa6e 13b 18 __crtGetLocaleInfoW_stat -1aa6e f 60 2876 -1aa7d 14 68 2876 -1aa91 d 70 2876 -1aa9e 8 71 2876 -1aaa6 b 73 2876 -1aab1 f 74 2876 -1aac0 5 79 2876 -1aac5 13 81 2876 -1aad8 7 86 2876 -1aadf 2 140 2876 -1aae1 8 96 2876 -1aae9 b 97 2876 -1aaf4 16 100 2876 -1ab0a 7 101 2876 -1ab11 48 104 2876 -1ab59 2 105 2876 -1ab5b 2 106 2876 -1ab5d e 110 2876 -1ab6b 7 113 2876 -1ab72 2 121 2876 -1ab74 2 123 2876 -1ab76 17 130 2876 -1ab8d 6 134 2876 -1ab93 4 136 2876 -1ab97 12 141 2876 -FUNC 1aba9 3b 18 __crtGetLocaleInfoW -1aba9 6 151 2876 -1abaf b 152 2876 -1abba 28 161 2876 -1abe2 2 162 2876 -FUNC 1abe4 13d 18 __crtGetLocaleInfoA_stat -1abe4 f 60 4251 -1abf3 17 68 4251 -1ac0a a 70 4251 -1ac14 8 71 4251 -1ac1c b 73 4251 -1ac27 f 74 4251 -1ac36 11 79 4251 -1ac47 4 86 4251 -1ac4b 5 96 4251 -1ac50 b 97 4251 -1ac5b 13 100 4251 -1ac6e 7 101 4251 -1ac75 49 104 4251 -1acbe 2 105 4251 -1acc0 2 106 4251 -1acc2 10 110 4251 -1acd2 3 114 4251 -1acd5 6 124 4251 -1acdb 2 126 4251 -1acdd 15 135 4251 -1acf2 7 139 4251 -1acf9 4 141 4251 -1acfd 12 81 4251 -1ad0f 12 145 4251 -FUNC 1ad21 3b 18 __crtGetLocaleInfoA -1ad21 6 155 4251 -1ad27 b 156 4251 -1ad32 28 165 4251 -1ad5a 2 166 4251 -FUNC 1ad5c 1a 4 strncnt -1ad5c 0 48 4203 -1ad5c 6 49 4203 -1ad62 6 52 4203 -1ad68 1 53 4203 -1ad69 5 52 4203 -1ad6e 7 55 4203 -1ad75 1 56 4203 -FUNC 1ad76 3a2 20 __crtLCMapStringA_stat -1ad76 12 99 4203 -1ad88 d 108 4203 -1ad95 1b 109 4203 -1adb0 8 110 4203 -1adb8 b 111 4203 -1adc3 a 112 4203 -1adcd 5 119 4203 -1add2 19 120 4203 -1adeb 5 124 4203 -1adf0 1 125 4203 -1adf1 3 127 4203 -1adf4 16 133 4203 -1ae0a 9 213 4203 -1ae13 8 235 4203 -1ae1b 8 236 4203 -1ae23 27 247 4203 -1ae4a 6 248 4203 -1ae50 48 251 4203 -1ae98 3 252 4203 -1ae9b 6 253 4203 -1aea1 19 262 4203 -1aeba 21 271 4203 -1aedb 8 274 4203 -1aee3 9 277 4203 -1aeec 9 279 4203 -1aef5 12 288 4203 -1af07 5 292 4203 -1af0c 4b 298 4203 -1af57 4 299 4203 -1af5b 18 309 4203 -1af73 3 312 4203 -1af76 6 322 4203 -1af7c 2 325 4203 -1af7e 17 335 4203 -1af95 7 342 4203 -1af9c 8 344 4203 -1afa4 9 346 4203 -1afad b 141 4203 -1afb8 8 142 4203 -1afc0 5 143 4203 -1afc5 8 144 4203 -1afcd 11 146 4203 -1afde 7 147 4203 -1afe5 9 153 4203 -1afee 15 155 4203 -1b003 5 156 4203 -1b008 2 157 4203 -1b00a 1b 164 4203 -1b025 7 166 4203 -1b02c 41 169 4203 -1b06d 2 170 4203 -1b06f 28 196 4203 -1b097 2 183 4203 -1b099 2 184 4203 -1b09b 25 190 4203 -1b0c0 7 198 4203 -1b0c7 2 199 4203 -1b0c9 1a 202 4203 -1b0e3 5 204 4203 -1b0e8 9 205 4203 -1b0f1 c 206 4203 -1b0fd 7 207 4203 -1b104 2 208 4203 -1b106 12 350 4203 -FUNC 1b118 43 24 __crtLCMapStringA -1b118 6 363 4203 -1b11e b 364 4203 -1b129 30 376 4203 -1b159 2 377 4203 -FUNC 1b15b 1b8 1c __crtGetStringTypeA_stat -1b15b f 66 4155 -1b16a 10 75 4155 -1b17a 18 79 4155 -1b192 8 80 4155 -1b19a b 82 4155 -1b1a5 f 83 4155 -1b1b4 11 88 4155 -1b1c5 9 120 4155 -1b1ce 8 141 4155 -1b1d6 8 142 4155 -1b1de 27 153 4155 -1b205 6 154 4155 -1b20b 3e 157 4155 -1b249 2 158 4155 -1b24b 2 159 4155 -1b24d f 161 4155 -1b25c 13 169 4155 -1b26f 11 174 4155 -1b280 6 176 4155 -1b286 6 178 4155 -1b28c 2 90 4155 -1b28e 5 94 4155 -1b293 8 95 4155 -1b29b 5 96 4155 -1b2a0 8 97 4155 -1b2a8 e 99 4155 -1b2b6 4 100 4155 -1b2ba 5 104 4155 -1b2bf 17 106 4155 -1b2d6 2 107 4155 -1b2d8 2 108 4155 -1b2da 3 109 4155 -1b2dd 15 112 4155 -1b2f2 6 113 4155 -1b2f8 7 114 4155 -1b2ff 2 115 4155 -1b301 12 182 4155 -FUNC 1b313 40 20 __crtGetStringTypeA -1b313 6 194 4155 -1b319 b 195 4155 -1b324 2d 206 4155 -1b351 2 207 4155 -FUNC 1b353 6 0 __pwctype_func -1b353 0 24 3986 -1b353 5 25 3986 -1b358 1 26 3986 -FUNC 1b359 29 0 __pctype_func -1b359 0 29 3986 -1b359 7 35 3986 -1b360 3 36 3986 -1b363 18 38 3986 -1b37b 6 39 3986 -1b381 1 40 3986 -FUNC 1b382 419 0 _get_lc_time -1b382 6 94 3379 -1b388 12 104 3379 -1b39a 3 105 3379 -1b39d 2 170 3379 -1b39f 9 108 3379 -1b3a8 16 112 3379 -1b3be 15 113 3379 -1b3d3 15 114 3379 -1b3e8 18 115 3379 -1b400 15 116 3379 -1b415 13 117 3379 -1b428 14 118 3379 -1b43c 18 120 3379 -1b454 15 121 3379 -1b469 15 122 3379 -1b47e 15 123 3379 -1b493 18 124 3379 -1b4ab 15 125 3379 -1b4c0 15 126 3379 -1b4d5 15 128 3379 -1b4ea 18 129 3379 -1b502 15 130 3379 -1b517 15 131 3379 -1b52c 15 132 3379 -1b541 18 133 3379 -1b559 15 134 3379 -1b56e 15 135 3379 -1b583 15 136 3379 -1b598 18 137 3379 -1b5b0 15 138 3379 -1b5c5 15 139 3379 -1b5da 15 141 3379 -1b5ef 18 142 3379 -1b607 15 143 3379 -1b61c 15 144 3379 -1b631 15 145 3379 -1b646 18 146 3379 -1b65e 18 147 3379 -1b676 18 148 3379 -1b68e 18 149 3379 -1b6a6 1b 150 3379 -1b6c1 18 151 3379 -1b6d9 18 152 3379 -1b6f1 18 154 3379 -1b709 1b 155 3379 -1b724 18 160 3379 -1b73c 18 161 3379 -1b754 1b 163 3379 -1b76f 20 165 3379 -1b78f a 169 3379 -1b799 2 170 3379 -FUNC 1b79b 190 4 __free_lc_time -1b79b 1 179 3379 -1b79c c 180 3379 -1b7a8 8 183 3379 -1b7b0 8 184 3379 -1b7b8 8 185 3379 -1b7c0 8 186 3379 -1b7c8 8 187 3379 -1b7d0 8 188 3379 -1b7d8 7 189 3379 -1b7df 8 191 3379 -1b7e7 8 192 3379 -1b7ef 8 193 3379 -1b7f7 8 194 3379 -1b7ff 8 195 3379 -1b807 8 196 3379 -1b80f 8 197 3379 -1b817 8 199 3379 -1b81f b 200 3379 -1b82a 8 201 3379 -1b832 8 202 3379 -1b83a 8 203 3379 -1b842 8 204 3379 -1b84a 8 205 3379 -1b852 8 206 3379 -1b85a 8 207 3379 -1b862 8 208 3379 -1b86a 8 209 3379 -1b872 8 210 3379 -1b87a 8 212 3379 -1b882 8 213 3379 -1b88a 8 214 3379 -1b892 8 215 3379 -1b89a 8 216 3379 -1b8a2 b 217 3379 -1b8ad b 218 3379 -1b8b8 b 219 3379 -1b8c3 b 220 3379 -1b8ce b 221 3379 -1b8d9 b 222 3379 -1b8e4 b 223 3379 -1b8ef b 225 3379 -1b8fa b 226 3379 -1b905 b 228 3379 -1b910 b 229 3379 -1b91b f 230 3379 -1b92a 1 232 3379 -FUNC 1b92b 73 4 __init_time -1b92b 4 56 3379 -1b92f f 60 3379 -1b93e 16 64 3379 -1b954 4 65 3379 -1b958 b 67 3379 -1b963 6 69 3379 -1b969 8 70 3379 -1b971 2 71 3379 -1b973 6 73 3379 -1b979 2 74 3379 -1b97b 2 75 3379 -1b97d 18 78 3379 -1b995 2 82 3379 -1b997 6 83 3379 -1b99d 1 84 3379 -FUNC 1b99e 33 0 fix_grouping -1b99e 0 32 3427 -1b99e 8 40 3427 -1b9a6 a 43 3427 -1b9b0 4 45 3427 -1b9b4 1 61 3427 -1b9b5 6 40 3427 -1b9bb 1 63 3427 -1b9bc 4 50 3427 -1b9c0 2 52 3427 -1b9c2 7 55 3427 -1b9c9 6 56 3427 -1b9cf 2 60 3427 -FUNC 1b9d1 40 4 __free_lconv_num -1b9d1 1 211 3427 -1b9d2 8 212 3427 -1b9da a 215 3427 -1b9e4 7 216 3427 -1b9eb b 218 3427 -1b9f6 7 219 3427 -1b9fd b 221 3427 -1ba08 8 222 3427 -1ba10 1 223 3427 -FUNC 1ba11 1c8 4 __init_numeric -1ba11 7 84 3427 -1ba18 4 92 3427 -1ba1c 2 93 3427 -1ba1e 11 96 3427 -1ba2f 3 177 3427 -1ba32 3 178 3427 -1ba35 c 179 3427 -1ba41 14 102 3427 -1ba55 8 103 3427 -1ba5d 9 108 3427 -1ba66 13 113 3427 -1ba79 9 115 3427 -1ba82 2 116 3427 -1ba84 2 118 3427 -1ba86 9 120 3427 -1ba8f 12 125 3427 -1baa1 8 127 3427 -1baa9 a 128 3427 -1bab3 7 129 3427 -1baba 2 131 3427 -1babc 19 140 3427 -1bad5 15 142 3427 -1baea 1b 144 3427 -1bb05 2 146 3427 -1bb07 c 148 3427 -1bb13 1e 154 3427 -1bb31 2 156 3427 -1bb33 17 154 3427 -1bb4a b 164 3427 -1bb55 9 165 3427 -1bb5e c 166 3427 -1bb6a 8 168 3427 -1bb72 7 169 3427 -1bb79 2 170 3427 -1bb7b 13 186 3427 -1bb8e 11 191 3427 -1bb9f b 193 3427 -1bbaa d 194 3427 -1bbb7 9 197 3427 -1bbc0 9 198 3427 -1bbc9 9 200 3427 -1bbd2 5 201 3427 -1bbd7 2 202 3427 -FUNC 1bbd9 33 0 fix_grouping -1bbd9 0 214 3470 -1bbd9 8 222 3470 -1bbe1 a 225 3470 -1bbeb 4 227 3470 -1bbef 1 243 3470 -1bbf0 6 222 3470 -1bbf6 1 245 3470 -1bbf7 4 232 3470 -1bbfb 2 234 3470 -1bbfd 7 237 3470 -1bc04 6 238 3470 -1bc0a 2 242 3470 -FUNC 1bc0c 89 4 __free_lconv_mon -1bc0c 1 255 3470 -1bc0d 8 256 3470 -1bc15 b 259 3470 -1bc20 7 260 3470 -1bc27 b 262 3470 -1bc32 7 263 3470 -1bc39 b 265 3470 -1bc44 7 266 3470 -1bc4b b 268 3470 -1bc56 7 269 3470 -1bc5d b 271 3470 -1bc68 7 272 3470 -1bc6f b 274 3470 -1bc7a 7 275 3470 -1bc81 b 277 3470 -1bc8c 8 278 3470 -1bc94 1 279 3470 -FUNC 1bc95 2c4 4 __init_monetary -1bc95 8 65 3470 -1bc9d 6 73 3470 -1bca3 13 77 3470 -1bcb6 3 187 3470 -1bcb9 3 188 3470 -1bcbc a 189 3470 -1bcc6 11 83 3470 -1bcd7 8 84 3470 -1bcdf f 89 3470 -1bcee 7 91 3470 -1bcf5 2 92 3470 -1bcf7 2 94 3470 -1bcf9 9 96 3470 -1bd02 f 101 3470 -1bd11 6 103 3470 -1bd17 9 104 3470 -1bd20 2 105 3470 -1bd22 2 107 3470 -1bd24 4 112 3470 -1bd28 14 117 3470 -1bd3c 14 119 3470 -1bd50 14 121 3470 -1bd64 17 123 3470 -1bd7b 14 125 3470 -1bd8f 14 128 3470 -1bda3 14 130 3470 -1bdb7 17 133 3470 -1bdce 14 135 3470 -1bde2 14 137 3470 -1bdf6 14 139 3470 -1be0a 17 141 3470 -1be21 14 143 3470 -1be35 14 145 3470 -1be49 17 147 3470 -1be60 2 149 3470 -1be62 6 150 3470 -1be68 6 151 3470 -1be6e 8 152 3470 -1be76 b 153 3470 -1be81 5 154 3470 -1be86 1c 157 3470 -1bea2 2 159 3470 -1bea4 17 157 3470 -1bebb c 169 3470 -1bec7 3 175 3470 -1beca 32 181 3470 -1befc 11 194 3470 -1bf0d 15 199 3470 -1bf22 b 201 3470 -1bf2d d 202 3470 -1bf3a 9 204 3470 -1bf43 9 205 3470 -1bf4c 6 206 3470 -1bf52 5 208 3470 -1bf57 2 209 3470 -FUNC 1bf59 395 4 __init_ctype -1bf59 11 59 3562 -1bf6a 6 60 3562 -1bf70 1f 82 3562 -1bf8f 7 84 3562 -1bf96 20 89 3562 -1bfb6 7 94 3562 -1bfbd 10 98 3562 -1bfcd b 100 3562 -1bfd8 b 102 3562 -1bfe3 12 104 3562 -1bff5 2f 106 3562 -1c024 5 109 3562 -1c029 2 112 3562 -1c02b e 113 3562 -1c039 15 115 3562 -1c04e a 118 3562 -1c058 4 121 3562 -1c05c 8 124 3562 -1c064 e 126 3562 -1c072 9 128 3562 -1c07b b 129 3562 -1c086 b 128 3562 -1c091 2c 140 3562 -1c0bd 33 155 3562 -1c0f0 2d 166 3562 -1c11d 37 178 3562 -1c154 11 180 3562 -1c165 17 182 3562 -1c17c 15 183 3562 -1c191 d 180 3562 -1c19e 12 189 3562 -1c1b0 f 190 3562 -1c1bf 12 191 3562 -1c1d1 18 195 3562 -1c1e9 11 198 3562 -1c1fa 13 199 3562 -1c20d e 200 3562 -1c21b e 201 3562 -1c229 9 203 3562 -1c232 6 204 3562 -1c238 9 206 3562 -1c241 9 207 3562 -1c24a 9 208 3562 -1c253 9 209 3562 -1c25c 9 210 3562 -1c265 9 213 3562 -1c26e 4 214 3562 -1c272 8 217 3562 -1c27a 8 218 3562 -1c282 8 219 3562 -1c28a 10 220 3562 -1c29a 13 227 3562 -1c2ad 2 231 3562 -1c2af 6 232 3562 -1c2b5 a 233 3562 -1c2bf a 234 3562 -1c2c9 a 235 3562 -1c2d3 a 236 3562 -1c2dd 2 238 3562 -1c2df f 240 3562 -FUNC 1c2ee 29 0 ___mb_cur_max_func -1c2ee 0 248 3562 -1c2ee 7 254 3562 -1c2f5 3 255 3562 -1c2f8 18 257 3562 -1c310 6 259 3562 -1c316 1 260 3562 -FUNC 1c317 16 4 ___mb_cur_max_l_func -1c317 0 263 3562 -1c317 15 264 3562 -1c32c 1 265 3562 -FUNC 1c32d 26 0 ___lc_codepage_func -1c32d 0 268 3562 -1c32d 7 274 3562 -1c334 3 275 3562 -1c337 18 277 3562 -1c34f 3 279 3562 -1c352 1 280 3562 -FUNC 1c353 26 0 ___lc_collate_cp_func -1c353 0 284 3562 -1c353 7 290 3562 -1c35a 3 291 3562 -1c35d 18 293 3562 -1c375 3 295 3562 -1c378 1 296 3562 -FUNC 1c379 26 0 ___lc_handle_func -1c379 0 300 3562 -1c379 7 306 3562 -1c380 3 307 3562 -1c383 18 309 3562 -1c39b 3 311 3562 -1c39e 1 312 3562 -FUNC 1c39f 3 4 __init_collate -1c39f 0 41 3650 -1c39f 2 42 3650 -1c3a1 1 43 3650 -FUNC 1c3a2 fe 4 _Getdays_l -1c3a2 9 111 516 -1c3ab d 115 516 -1c3b8 9 117 516 -1c3c1 9 119 516 -1c3ca 28 120 516 -1c3f2 b 121 516 -1c3fd c 123 516 -1c409 4 126 516 -1c40d 30 128 516 -1c43d 8 129 516 -1c445 31 131 516 -1c476 12 132 516 -1c488 3 134 516 -1c48b 13 137 516 -1c49e 2 138 516 -FUNC 1c4a0 9 0 _Getdays -1c4a0 0 142 516 -1c4a0 8 143 516 -1c4a8 1 144 516 -FUNC 1c4a9 fe 4 _Getmonths_l -1c4a9 9 150 516 -1c4b2 d 154 516 -1c4bf 16 156 516 -1c4d5 2b 159 516 -1c500 b 160 516 -1c50b 8 162 516 -1c513 a 163 516 -1c51d 2d 167 516 -1c54a 8 168 516 -1c552 2c 170 516 -1c57e 11 171 516 -1c58f 3 173 516 -1c592 13 176 516 -1c5a5 2 177 516 -FUNC 1c5a7 9 0 _Getmonths -1c5a7 0 181 516 -1c5a7 8 182 516 -1c5af 1 183 516 -FUNC 1c5b0 355 4 _Gettnames_l -1c5b0 9 189 516 -1c5b9 d 193 516 -1c5c6 9 195 516 -1c5cf 9 197 516 -1c5d8 28 198 516 -1c600 d 199 516 -1c60d 29 200 516 -1c636 18 201 516 -1c64e 11 202 516 -1c65f f 203 516 -1c66e f 204 516 -1c67d 7 205 516 -1c684 e 206 516 -1c692 8 208 516 -1c69a 12 212 516 -1c6ac 13 213 516 -1c6bf 6 214 516 -1c6c5 2a 215 516 -1c6ef 6 216 516 -1c6f5 d 217 516 -1c702 26 218 516 -1c728 1c 219 516 -1c744 18 221 516 -1c75c 6 222 516 -1c762 26 223 516 -1c788 a 224 516 -1c792 5 225 516 -1c797 2a 226 516 -1c7c1 18 227 516 -1c7d9 30 230 516 -1c809 a 231 516 -1c813 30 233 516 -1c843 a 234 516 -1c84d 30 236 516 -1c87d a 237 516 -1c887 30 239 516 -1c8b7 a 240 516 -1c8c1 30 242 516 -1c8f1 12 245 516 -1c903 2 246 516 -FUNC 1c905 9 0 _Gettnames -1c905 0 250 516 -1c905 8 251 516 -1c90d 1 252 516 -FUNC 1c90e 20 0 _store_str -1c90e 0 869 516 -1c90e f 871 516 -1c91d 7 872 516 -1c924 9 873 516 -1c92d 1 875 516 -FUNC 1c92e 36 0 _store_number -1c92e 0 965 516 -1c92e 8 973 516 -1c936 c 976 516 -1c942 2 977 516 -1c944 b 978 516 -1c94f 2 981 516 -1c951 2 982 516 -1c953 1 983 516 -1c954 7 988 516 -1c95b 3 989 516 -1c95e 5 990 516 -1c963 1 991 516 -FUNC 1c964 79 4 _store_num -1c964 8 909 516 -1c96c 2 910 516 -1c96e 8 912 516 -1c976 33 913 516 -1c9a9 2 914 516 -1c9ab 4 917 516 -1c9af 8 918 516 -1c9b7 b 919 516 -1c9c2 c 921 516 -1c9ce 5 923 516 -1c9d3 2 924 516 -1c9d5 2 926 516 -1c9d7 4 927 516 -1c9db 2 928 516 -FUNC 1c9dd 3e6 10 _expandtime -1c9dd 5 548 516 -1c9e2 4f 558 516 -1ca31 16 659 516 -1ca47 5 662 516 -1ca4c 16 587 516 -1ca62 7 589 516 -1ca69 5 590 516 -1ca6e 16 571 516 -1ca84 7 573 516 -1ca8b 5 574 516 -1ca90 5 822 516 -1ca95 7 823 516 -1ca9c 5 824 516 -1caa1 16 667 516 -1cab7 10 668 516 -1cac7 2 669 516 -1cac9 5 672 516 -1cace 23 558 516 -1caf1 6 787 516 -1caf7 5 789 516 -1cafc 15 736 516 -1cb11 2 737 516 -1cb13 2 739 516 -1cb15 5 740 516 -1cb1a 15 722 516 -1cb2f 2 723 516 -1cb31 16 742 516 -1cb47 4 743 516 -1cb4b 2 744 516 -1cb4d 5 745 516 -1cb52 6 746 516 -1cb58 8 747 516 -1cb60 1 748 516 -1cb61 5 752 516 -1cb66 f 715 516 -1cb75 5 718 516 -1cb7a 3 696 516 -1cb7d 2 699 516 -1cb7f 1d 804 516 -1cb9c 6 806 516 -1cba2 d 808 516 -1cbaf 2 809 516 -1cbb1 37 558 516 -1cbe8 19 678 516 -1cc01 8 680 516 -1cc09 2 681 516 -1cc0b 15 650 516 -1cc20 13 652 516 -1cc33 5 653 516 -1cc38 1e 601 516 -1cc56 2 603 516 -1cc58 5 606 516 -1cc5d 2 607 516 -1cc5f 2 608 516 -1cc61 25 615 516 -1cc86 2 617 516 -1cc88 1 627 516 -1cc89 2 642 516 -1cc8b e 579 516 -1cc99 7 581 516 -1cca0 5 582 516 -1cca5 2d 562 516 -1ccd2 6 564 516 -1ccd8 5 565 516 -1ccdd e 687 516 -1cceb 3 689 516 -1ccee 5 690 516 -1ccf3 15 558 516 -1cd08 2 834 516 -1cd0a 5 814 516 -1cd0f 19 817 516 -1cd28 5 819 516 -1cd2d d 795 516 -1cd3a b 798 516 -1cd45 5 799 516 -1cd4a 11 762 516 -1cd5b 5 764 516 -1cd60 1 774 516 -1cd61 5 776 516 -1cd66 16 729 516 -1cd7c 6 731 516 -1cd82 5 732 516 -1cd87 16 704 516 -1cd9d 3 705 516 -1cda0 b 706 516 -1cdab 2 707 516 -1cdad e 708 516 -1cdbb 6 839 516 -1cdc1 2 840 516 -FUNC 1cdc3 45d 18 _store_winword -1cdc3 10 1035 516 -1cdd3 5 1043 516 -1cdd8 a 1053 516 -1cde2 3 1043 516 -1cde5 6 1053 516 -1cdeb 2 1054 516 -1cded 6 1049 516 -1cdf3 2 1050 516 -1cdf5 6 1046 516 -1cdfb 10 1057 516 -1ce0b 4 1066 516 -1ce0f 8 1067 516 -1ce17 6 1069 516 -1ce1d d 1075 516 -1ce2a a 1076 516 -1ce34 8 1077 516 -1ce3c 4 1078 516 -1ce40 2a 1085 516 -1ce6a b 1087 516 -1ce75 31 1092 516 -1cea6 7 1093 516 -1cead 3 1097 516 -1ceb0 13 1100 516 -1cec3 10 1101 516 -1ced3 b 1102 516 -1cede b 1103 516 -1cee9 9 1106 516 -1cef2 3 1291 516 -1cef5 12 1292 516 -1cf07 11 1114 516 -1cf18 5 1117 516 -1cf1d b 1120 516 -1cf28 37 1125 516 -1cf5f 14 1274 516 -1cf73 c 1277 516 -1cf7f 8 1283 516 -1cf87 4 1284 516 -1cf8b 9 1286 516 -1cf94 c 1287 516 -1cfa0 5 1277 516 -1cfa5 e 1128 516 -1cfb3 7 1133 516 -1cfba 7 1132 516 -1cfc1 7 1130 516 -1cfc8 2 1131 516 -1cfca 5 1134 516 -1cfcf a 1156 516 -1cfd9 7 1158 516 -1cfe0 2 1159 516 -1cfe2 5 1160 516 -1cfe7 11 1175 516 -1cff8 5 1176 516 -1cffd 11 1177 516 -1d00e 6 1178 516 -1d014 2 1179 516 -1d016 5 1180 516 -1d01b b 1225 516 -1d026 13 1226 516 -1d039 4 1228 516 -1d03d 1a 1233 516 -1d057 9 1236 516 -1d060 8 1242 516 -1d068 4 1243 516 -1d06c 9 1246 516 -1d075 8 1247 516 -1d07d 5 1277 516 -1d082 1 1230 516 -1d083 5 1250 516 -1d088 12 1136 516 -1d09a 7 1141 516 -1d0a1 7 1140 516 -1d0a8 7 1138 516 -1d0af 2 1139 516 -1d0b1 5 1142 516 -1d0b6 29 1125 516 -1d0df e 1144 516 -1d0ed 7 1147 516 -1d0f4 2 1146 516 -1d0f6 5 1148 516 -1d0fb 7 1182 516 -1d102 b 1183 516 -1d10d 2 1184 516 -1d10f 6 1185 516 -1d115 12 1187 516 -1d127 17 1188 516 -1d13e c 1191 516 -1d14a 8 1197 516 -1d152 4 1198 516 -1d156 8 1201 516 -1d15e 2 1202 516 -1d160 5 1203 516 -1d165 9 1204 516 -1d16e 1a 1205 516 -1d188 9 1207 516 -1d191 8 1212 516 -1d199 4 1213 516 -1d19d 9 1215 516 -1d1a6 8 1216 516 -1d1ae 2 1220 516 -1d1b0 d 1168 516 -1d1bd 7 1170 516 -1d1c4 2 1171 516 -1d1c6 2 1172 516 -1d1c8 d 1162 516 -1d1d5 7 1164 516 -1d1dc 2 1165 516 -1d1de 2 1166 516 -1d1e0 d 1150 516 -1d1ed 7 1152 516 -1d1f4 2 1153 516 -1d1f6 1b 1268 516 -1d211 3 1272 516 -1d214 5 1273 516 -1d219 7 1194 516 -FUNC 1d220 1af 18 _Strftime_l -1d220 6 356 516 -1d226 4 361 516 -1d22a 13 362 516 -1d23d 33 364 516 -1d270 33 365 516 -1d2a3 d 368 516 -1d2b0 10 375 516 -1d2c0 e 385 516 -1d2ce a 387 516 -1d2d8 1e 435 516 -1d2f6 4 438 516 -1d2fa a 446 516 -1d304 5 447 516 -1d309 b 452 516 -1d314 3 453 516 -1d317 2 454 516 -1d319 7 400 516 -1d320 1 405 516 -1d321 2 408 516 -1d323 5 409 516 -1d328 1 411 516 -1d329 1 412 516 -1d32a 1d 415 516 -1d347 1 428 516 -1d348 5 385 516 -1d34d 5 464 516 -1d352 5 469 516 -1d357 13 470 516 -1d36a 3 441 516 -1d36d f 478 516 -1d37c b 481 516 -1d387 2 483 516 -1d389 b 402 516 -1d394 2 403 516 -1d396 5 421 516 -1d39b 7 423 516 -1d3a2 2 464 516 -1d3a4 18 485 516 -1d3bc 11 488 516 -1d3cd 2 490 516 -FUNC 1d3cf 1e 14 _strftime_l -1d3cf 3 291 516 -1d3d2 19 292 516 -1d3eb 2 293 516 -FUNC 1d3ed 1d 10 strftime -1d3ed 0 300 516 -1d3ed 1c 301 516 -1d409 1 302 516 -FUNC 1d40a 1e 14 _Strftime -1d40a 3 343 516 -1d40d 19 345 516 -1d426 2 346 516 -FUNC 1d428 26 0 localeconv -1d428 0 69 3302 -1d428 5 75 3302 -1d42d 1b 78 3302 -1d448 5 79 3302 -1d44d 1 80 3302 -FUNC 1d450 46 8 strcspn -1d450 4 191 924 -1d454 2 198 924 -1d456 1 199 924 -1d457 1 200 924 -1d458 1 201 924 -1d459 1 202 924 -1d45a 1 203 924 -1d45b 1 204 924 -1d45c 1 205 924 -1d45d 1 206 924 -1d45e 6 212 924 -1d464 2 216 924 -1d466 2 217 924 -1d468 2 218 924 -1d46a 3 219 924 -1d46d 4 220 924 -1d471 2 221 924 -1d473 3 227 924 -1d476 6 229 924 -1d47c 3 234 924 -1d47f 2 236 924 -1d481 2 237 924 -1d483 2 238 924 -1d485 3 239 924 -1d488 4 240 924 -1d48c 2 245 924 -1d48e 2 255 924 -1d490 3 257 924 -1d493 3 259 924 -FUNC 1d496 60 c TranslateName -1d496 3 340 3849 -1d499 3 342 3849 -1d49c 3 343 3849 -1d49f b 346 3849 -1d4aa a 348 3849 -1d4b4 14 349 3849 -1d4c8 6 351 3849 -1d4ce a 352 3849 -1d4d8 2 353 3849 -1d4da 4 354 3849 -1d4de 2 355 3849 -1d4e0 3 356 3849 -1d4e3 7 346 3849 -1d4ea a 359 3849 -1d4f4 2 360 3849 -FUNC 1d4f6 14 0 GetLcidFromDefault -1d4f6 0 761 3849 -1d4f6 7 762 3849 -1d4fd c 763 3849 -1d509 1 764 3849 -FUNC 1d50a 77 0 ProcessCodePage -1d50a 13 784 3849 -1d51d 1a 787 3849 -1d537 11 795 3849 -1d548 8 799 3849 -1d550 2 801 3849 -1d552 18 791 3849 -1d56a 3 793 3849 -1d56d 7 805 3849 -1d574 d 806 3849 -FUNC 1d581 1e 4 TestDefaultCountry -1d581 0 826 3849 -1d581 2 830 3849 -1d583 15 832 3849 -1d598 3 835 3849 -1d59b 1 836 3849 -1d59c 2 833 3849 -1d59e 1 836 3849 -FUNC 1d59f 32 0 LcidFromHexString -1d59f 1 893 3849 -1d5a0 2 895 3849 -1d5a2 2 897 3849 -1d5a4 9 899 3849 -1d5ad 5 900 3849 -1d5b2 8 901 3849 -1d5ba 3 902 3849 -1d5bd 10 903 3849 -1d5cd 3 906 3849 -1d5d0 1 907 3849 -FUNC 1d5d1 1b 0 GetPrimaryLen -1d5d1 0 926 3849 -1d5d1 2 927 3849 -1d5d3 3 930 3849 -1d5d6 12 931 3849 -1d5e8 1 933 3849 -1d5e9 2 935 3849 -1d5eb 1 938 3849 -FUNC 1d5ec 96 4 CountryEnumProc -1d5ec 15 717 3849 -1d601 7 718 3849 -1d608 f 719 3849 -1d617 23 725 3849 -1d63a 3 728 3849 -1d63d 3 729 3849 -1d640 12 731 3849 -1d652 b 734 3849 -1d65d a 738 3849 -1d667 b 741 3849 -1d672 10 742 3849 -FUNC 1d682 72 8 TestDefaultLanguage -1d682 11 858 3849 -1d693 22 864 3849 -1d6b5 4 865 3849 -1d6b9 d 867 3849 -1d6c6 1c 871 3849 -1d6e2 2 872 3849 -1d6e4 3 874 3849 -1d6e7 d 875 3849 -FUNC 1d6f4 1d0 4 LangCountryEnumProc -1d6f4 16 435 3849 -1d70a 7 436 3849 -1d711 d 437 3849 -1d71e 27 444 3849 -1d745 4 447 3849 -1d749 8 448 3849 -1d751 16 450 3849 -1d767 1d 456 3849 -1d784 2 460 3849 -1d786 11 462 3849 -1d797 7 467 3849 -1d79e 5 468 3849 -1d7a3 6 472 3849 -1d7a9 1a 475 3849 -1d7c3 14 482 3849 -1d7d7 3 483 3849 -1d7da a 487 3849 -1d7e4 b 490 3849 -1d7ef 6 493 3849 -1d7f5 3 494 3849 -1d7f8 12 501 3849 -1d80a 1d 506 3849 -1d827 6 510 3849 -1d82d c 513 3849 -1d839 16 518 3849 -1d84f 8 522 3849 -1d857 14 528 3849 -1d86b 2 531 3849 -1d86d 2 540 3849 -1d86f 1b 550 3849 -1d88a f 553 3849 -1d899 7 557 3849 -1d8a0 5 558 3849 -1d8a5 3 559 3849 -1d8a8 b 566 3849 -1d8b3 11 567 3849 -FUNC 1d8c4 bf 4 LanguageEnumProc -1d8c4 15 624 3849 -1d8d9 7 625 3849 -1d8e0 f 626 3849 -1d8ef 23 632 3849 -1d912 3 635 3849 -1d915 3 636 3849 -1d918 11 639 3849 -1d929 7 643 3849 -1d930 2 650 3849 -1d932 1d 651 3849 -1d94f f 654 3849 -1d95e a 658 3849 -1d968 b 662 3849 -1d973 10 663 3849 -FUNC 1d983 2c 0 GetLcidFromCountry -1d983 0 686 3849 -1d983 10 687 3849 -1d993 11 689 3849 -1d9a4 6 693 3849 -1d9aa 4 694 3849 -1d9ae 1 695 3849 -FUNC 1d9af 65 0 GetLcidFromLangCountry -1d9af 0 386 3849 -1d9af 7 388 3849 -1d9b6 1a 389 3849 -1d9d0 5 390 3849 -1d9d5 17 392 3849 -1d9ec 10 394 3849 -1d9fc 13 402 3849 -1da0f 4 403 3849 -1da13 1 404 3849 -FUNC 1da14 3c 0 GetLcidFromLanguage -1da14 0 591 3849 -1da14 13 593 3849 -1da27 e 594 3849 -1da35 10 596 3849 -1da45 6 600 3849 -1da4b 4 601 3849 -1da4f 1 602 3849 -FUNC 1da50 1e3 c __get_qualified_locale -1da50 4 205 3849 -1da54 5 208 3849 -1da59 12 212 3849 -1da6b 7 215 3849 -1da72 5 217 3849 -1da77 3 222 3849 -1da7a f 223 3849 -1da89 10 226 3849 -1da99 d 230 3849 -1daa6 a 232 3849 -1dab0 5 235 3849 -1dab5 2 237 3849 -1dab7 5 240 3849 -1dabc 5 243 3849 -1dac1 14 248 3849 -1dad5 a 250 3849 -1dadf 5 252 3849 -1dae4 2 254 3849 -1dae6 5 256 3849 -1daeb 2 261 3849 -1daed a 263 3849 -1daf7 28 266 3849 -1db1f 2 268 3849 -1db21 13 271 3849 -1db34 3 277 3849 -1db37 6 278 3849 -1db3d 17 281 3849 -1db54 32 285 3849 -1db86 d 289 3849 -1db93 6 290 3849 -1db99 8 293 3849 -1dba1 7 295 3849 -1dba8 8 296 3849 -1dbb0 4 297 3849 -1dbb4 8 301 3849 -1dbbc d 305 3849 -1dbc9 23 306 3849 -1dbec 2 307 3849 -1dbee f 308 3849 -1dbfd 2 309 3849 -1dbff 12 311 3849 -1dc11 2 312 3849 -1dc13 14 313 3849 -1dc27 5 315 3849 -1dc2c 6 286 3849 -1dc32 1 316 3849 -FUNC 1dc33 12 0 cmpResult -FUNC 1dc45 18 0 cmpBYTE -FUNC 1dc5d 40 0 cmpWORD -FUNC 1dc9d 78 0 cmpDWORD -FUNC 1dd15 1490 0 unaligned_memcmp -FUNC 1f1a5 1680 c memcmp -FUNC 20825 be c strncmp -20825 4 42 876 -20829 5 43 876 -2082e 7 45 876 -20835 7 46 876 -2083c 6 48 876 -20842 d 51 876 -2084f 11 56 876 -20860 c 61 876 -2086c c 66 876 -20878 15 71 876 -2088d 2 81 876 -2088f a 73 876 -20899 a 68 876 -208a3 a 63 876 -208ad 10 58 876 -208bd 2 79 876 -208bf a 81 876 -208c9 1 85 876 -208ca 4 86 876 -208ce 5 79 876 -208d3 4 89 876 -208d7 2 90 876 -208d9 a 83 876 -FUNC 208f0 40 8 strpbrk -208f0 4 191 869 -208f4 2 198 869 -208f6 1 199 869 -208f7 1 200 869 -208f8 1 201 869 -208f9 1 202 869 -208fa 1 203 869 -208fb 1 204 869 -208fc 1 205 869 -208fd 1 206 869 -208fe 6 212 869 -20904 2 216 869 -20906 2 217 869 -20908 2 218 869 -2090a 3 219 869 -2090d 4 220 869 -20911 2 221 869 -20913 5 227 869 -20918 2 236 869 -2091a 2 237 869 -2091c 2 238 869 -2091e 3 239 869 -20921 4 240 869 -20925 2 247 869 -20927 3 248 869 -2092a 3 257 869 -2092d 3 259 869 -FUNC 20930 82 c _iswctype_l -20930 6 66 6445 -20936 8 69 6445 -2093e 6 70 6445 -20944 8 71 6445 -2094c 18 72 6445 -20964 2 73 6445 -20966 b 75 6445 -20971 25 85 6445 -20996 3 86 6445 -20999 d 87 6445 -209a6 a 89 6445 -209b0 2 90 6445 -FUNC 209b2 6e 8 iswctype -209b2 4 96 6445 -209b6 8 97 6445 -209be 2 99 6445 -209c0 2 122 6445 -209c2 8 101 6445 -209ca 14 103 6445 -209de 2 122 6445 -209e0 9 106 6445 -209e9 25 117 6445 -20a0e 10 121 6445 -20a1e 2 122 6445 -FUNC 20a20 5 8 is_wctype -20a20 0 148 6445 -20a20 5 149 6445 -FUNC 20a25 22b 14 strtoxl -20a25 8 80 6309 -20a2d b 86 6309 -20a38 3 89 6309 -20a3b b 92 6309 -20a46 30 94 6309 -20a76 11 95 6309 -20a87 c 100 6309 -20a93 34 101 6309 -20ac7 5 102 6309 -20acc 5 104 6309 -20ad1 4 105 6309 -20ad5 2 106 6309 -20ad7 5 108 6309 -20adc 3 109 6309 -20adf 1d 111 6309 -20afc 4 118 6309 -20b00 5 121 6309 -20b05 9 122 6309 -20b0e a 123 6309 -20b18 9 126 6309 -20b21 7 124 6309 -20b28 2 129 6309 -20b2a 5 140 6309 -20b2f f 142 6309 -20b3e 1 143 6309 -20b3f 9 144 6309 -20b48 8 149 6309 -20b50 c 154 6309 -20b5c 8 155 6309 -20b64 7 156 6309 -20b6b 13 157 6309 -20b7e 5 160 6309 -20b83 4 164 6309 -20b87 b 171 6309 -20b92 4 177 6309 -20b96 6 178 6309 -20b9c 8 190 6309 -20ba4 6 193 6309 -20baa 3 195 6309 -20bad 4 196 6309 -20bb1 2 198 6309 -20bb3 c 173 6309 -20bbf 3 185 6309 -20bc2 2 186 6309 -20bc4 24 201 6309 -20be8 5 204 6309 -20bed c 205 6309 -20bf9 6 206 6309 -20bff 10 207 6309 -20c0f 7 213 6309 -20c16 2 215 6309 -20c18 6 217 6309 -20c1e 3 219 6309 -20c21 12 221 6309 -20c33 7 113 6309 -20c3a 2 115 6309 -20c3c 12 116 6309 -20c4e 2 222 6309 -FUNC 20c50 29 c strtol -20c50 3 229 6309 -20c53 8 230 6309 -20c5b 13 232 6309 -20c6e 9 236 6309 -20c77 2 238 6309 -FUNC 20c79 1b 10 _strtol_l -20c79 0 246 6309 -20c79 1a 247 6309 -20c93 1 248 6309 -FUNC 20c94 2a c strtoul -20c94 3 255 6309 -20c97 7 256 6309 -20c9e 14 258 6309 -20cb2 a 262 6309 -20cbc 2 264 6309 -FUNC 20cbe 1b 10 _strtoul_l -20cbe 0 272 6309 -20cbe 1a 273 6309 -20cd8 1 274 6309 -FUNC 20cd9 1f 0 __initconin -20cd9 0 58 5008 -20cd9 1e 65 5008 -20cf7 1 67 5008 -FUNC 20cf8 1f 0 __initconout -20cf8 0 90 5008 -20cf8 1e 97 5008 -20d16 1 98 5008 -FUNC 20d17 2d 0 __termcon -20d17 0 120 5008 -20d17 16 121 5008 -20d2d 3 122 5008 -20d30 f 125 5008 -20d3f 4 126 5008 -20d43 1 128 5008 -FUNC 20d44 94 4 _close_nolock -20d44 1 72 5094 -20d45 54 93 5094 -20d99 a 99 5094 -20da3 2 96 5094 -20da5 6 101 5094 -20dab b 103 5094 -20db6 11 105 5094 -20dc7 7 107 5094 -20dce 5 108 5094 -20dd3 4 111 5094 -20dd7 1 112 5094 -FUNC 20dd8 cd 4 _close -20dd8 c 42 5094 -20de4 23 46 5094 -20e07 2f 47 5094 -20e36 20 48 5094 -20e56 7 50 5094 -20e5d 3 52 5094 -20e60 9 53 5094 -20e69 c 54 5094 -20e75 2 55 5094 -20e77 b 56 5094 -20e82 4 57 5094 -20e86 c 61 5094 -20e92 3 65 5094 -20e95 6 66 5094 -20e9b a 62 5094 -FUNC 20ea5 2c 4 _freebuf -20ea5 1 47 1927 -20ea6 f 50 1927 -20eb5 8 52 1927 -20ebd 7 54 1927 -20ec4 8 55 1927 -20ecc 4 56 1927 -20ed0 1 58 1927 -FUNC 20ed1 2a 0 _purecall -20ed1 0 43 3119 -20ed1 b 44 3119 -20edc 5 45 3119 -20ee1 2 47 3119 -20ee3 7 54 3119 -20eea c 56 3119 -20ef6 5 57 3119 -FUNC 20efb 22 4 _set_purecall_handler -20efb 1 82 3119 -20efc b 85 3119 -20f07 12 86 3119 -20f19 3 88 3119 -20f1c 1 89 3119 -FUNC 20f1d d 0 _get_purecall_handler -20f1d 0 92 3119 -20f1d c 93 3119 -20f29 1 94 3119 -FUNC 20f30 34 0 _allmul -20f30 0 47 5116 -20f30 4 62 5116 -20f34 4 63 5116 -20f38 2 64 5116 -20f3a 4 65 5116 -20f3e 2 66 5116 -20f40 4 68 5116 -20f44 2 69 5116 -20f46 3 71 5116 -20f49 1 74 5116 -20f4a 2 81 5116 -20f4c 2 82 5116 -20f4e 4 84 5116 -20f52 4 85 5116 -20f56 2 86 5116 -20f58 4 88 5116 -20f5c 2 89 5116 -20f5e 2 90 5116 -20f60 1 92 5116 -20f61 3 94 5116 -FUNC 20f64 11 4 atol -20f64 0 55 6631 -20f64 10 56 6631 -20f74 1 57 6631 -FUNC 20f75 15 8 _atol_l -20f75 0 64 6631 -20f75 14 65 6631 -20f89 1 66 6631 -FUNC 20f8a 5 4 atoi -20f8a 0 99 6631 -20f8a 5 100 6631 -FUNC 20f8f 5 8 _atoi_l -20f8f 0 107 6631 -20f8f 5 108 6631 -FUNC 20f94 11 4 _atoi64 -20f94 0 143 6631 -20f94 10 144 6631 -20fa4 1 145 6631 -FUNC 20fa5 15 8 _atoi64_l -20fa5 0 151 6631 -20fa5 14 152 6631 -20fb9 1 153 6631 -FUNC 20fba 50 0 has_osfxsr_set -FUNC 2100a 60 0 _get_sse2_info -FUNC 2106a d 0 __sse2_available_init -FUNC 21077 170 8 _flswbuf -21077 5 93 1980 -2107c c 104 1980 -21088 8 106 1980 -21090 b 107 1980 -2109b 4 108 1980 -2109f a 109 1980 -210a9 4 110 1980 -210ad b 111 1980 -210b8 2 113 1980 -210ba 4 124 1980 -210be 4 125 1980 -210c2 8 126 1980 -210ca 3 127 1980 -210cd 8 128 1980 -210d5 3 137 1980 -210d8 11 138 1980 -210e9 9 141 1980 -210f2 25 151 1980 -21117 7 153 1980 -2111e d 158 1980 -2112b 5 162 1980 -21130 5 163 1980 -21135 7 164 1980 -2113c 7 166 1980 -21143 10 167 1980 -21153 2 168 1980 -21155 6 131 1980 -2115b 5 132 1980 -21160 2e 169 1980 -2118e 13 171 1980 -211a1 2 174 1980 -211a3 9 181 1980 -211ac 2 186 1980 -211ae 1d 195 1980 -211cb 5 201 1980 -211d0 4 202 1980 -211d4 7 203 1980 -211db a 209 1980 -211e5 2 212 1980 -FUNC 211e7 182 4 _wchartodigit -211e7 0 32 6613 -211e7 1b 41 6613 -21202 1 73 6613 -21203 e 42 6613 -21211 19 44 6613 -2122a 1 73 6613 -2122b 14 45 6613 -2123f 14 46 6613 -21253 14 47 6613 -21267 14 48 6613 -2127b 14 49 6613 -2128f 14 50 6613 -212a3 18 51 6613 -212bb 18 52 6613 -212d3 18 53 6613 -212eb 14 54 6613 -212ff 14 55 6613 -21313 12 56 6613 -21325 14 57 6613 -21339 14 58 6613 -2134d c 59 6613 -21359 2 62 6613 -2135b 4 67 6613 -2135f 6 69 6613 -21365 3 71 6613 -21368 1 73 6613 -FUNC 21369 b6 c _isctype_l -21369 7 114 6399 -21370 b 118 6399 -2137b d 121 6399 -21388 f 122 6399 -21397 1f 124 6399 -213b6 3 126 6399 -213b9 d 129 6399 -213c6 2 130 6399 -213c8 a 133 6399 -213d2 26 144 6399 -213f8 10 146 6399 -21408 15 149 6399 -2141d 2 150 6399 -FUNC 2141f 2f 8 _isctype -2141f 0 156 6399 -2141f 9 157 6399 -21428 12 159 6399 -2143a 1 165 6399 -2143b 12 163 6399 -2144d 1 165 6399 -FUNC 21450 2c 0 _alloca_probe_16 -21450 0 44 2632 -21450 1 46 2632 -21451 4 47 2632 -21455 2 48 2632 -21457 3 49 2632 -2145a 2 50 2632 -2145c 2 51 2632 -2145e 2 52 2632 -21460 1 53 2632 -21461 5 54 2632 -21466 1 59 2632 -21467 4 60 2632 -2146b 2 61 2632 -2146d 3 62 2632 -21470 2 63 2632 -21472 2 64 2632 -21474 2 65 2632 -21476 1 66 2632 -21477 5 67 2632 -PUBLIC 21466 0 _alloca_probe_8 -FUNC 2147c 47 4 __ansicp -2147c 10 39 2934 -2148c 1c 44 2934 -214a8 3 45 2934 -214ab 2 46 2934 -214ad a 47 2934 -214b7 c 49 2934 -FUNC 214c3 1b2 18 __convertcp -214c3 16 79 2934 -214d9 10 83 2934 -214e9 18 85 2934 -21501 17 90 2934 -21518 13 92 2934 -2152b 6 93 2934 -21531 d 99 2934 -2153e 2 101 2934 -21540 c 103 2934 -2154c 2a 115 2934 -21576 15 111 2934 -2158b 7 112 2934 -21592 1c 115 2934 -215ae 3 116 2934 -215b1 2 117 2934 -215b3 10 119 2934 -215c3 15 127 2934 -215d8 7 129 2934 -215df 18 138 2934 -215f7 3 139 2934 -215fa 2 140 2934 -215fc 1f 149 2934 -2161b 11 151 2934 -2162c 12 160 2934 -2163e 9 162 2934 -21647 3 163 2934 -2164a 2 164 2934 -2164c 6 165 2934 -21652 5 166 2934 -21657 9 174 2934 -21660 3 177 2934 -21663 12 178 2934 -FUNC 21675 34 4 _get_daylight -21675 0 35 487 -21675 27 36 487 -2169c 1 41 487 -2169d 8 39 487 -216a5 3 40 487 -216a8 1 41 487 -FUNC 216a9 34 4 _get_dstbias -216a9 0 44 487 -216a9 27 45 487 -216d0 1 50 487 -216d1 8 48 487 -216d9 3 49 487 -216dc 1 50 487 -FUNC 216dd 34 4 _get_timezone -216dd 0 53 487 -216dd 27 54 487 -21704 1 59 487 -21705 8 57 487 -2170d 3 58 487 -21710 1 59 487 -FUNC 21711 a2 10 _get_tzname -21711 3 62 487 -21714 10 63 487 -21724 4 64 487 -21728 3 66 487 -2172b 7 68 487 -21732 27 69 487 -21759 20 63 487 -21779 f 72 487 -21788 8 73 487 -21790 4 76 487 -21794 5 78 487 -21799 5 80 487 -2179e 13 82 487 -217b1 2 83 487 -FUNC 217b3 6 0 __daylight -217b3 0 118 487 -217b3 5 119 487 -217b8 1 120 487 -FUNC 217b9 6 0 __dstbias -217b9 0 123 487 -217b9 5 124 487 -217be 1 125 487 -FUNC 217bf 6 0 __timezone -217bf 0 128 487 -217bf 5 129 487 -217c4 1 130 487 -FUNC 217c5 6 0 __tzname -217c5 0 133 487 -217c5 5 134 487 -217ca 1 135 487 -FUNC 217cb c 4 _set_daylight -217cb c 189 418 -FUNC 217d7 c 4 _set_dstbias -217d7 c 190 418 -FUNC 217e3 c 4 _set_timezone -217e3 c 191 418 -FUNC 217ef 349 0 _tzset_nolock -217ef c 124 440 -217fb 5 127 440 -21800 3 129 440 -21803 3 130 440 -21806 3 131 440 -21809 3 132 440 -2180c 3 133 440 -2180f 8 135 440 -21817 3 136 440 -2181a 8 139 440 -21822 1b 142 440 -2183d 1b 143 440 -21858 1b 144 440 -21873 8 149 440 -2187b 6 154 440 -21881 f 160 440 -21890 18 165 440 -218a8 14 260 440 -218bc b 268 440 -218c7 4 274 440 -218cb 7 275 440 -218d2 16 277 440 -218e8 6 281 440 -218ee 32 283 440 -21920 9 174 440 -21929 7 175 440 -21930 6 176 440 -21936 13 179 440 -21949 9 183 440 -21952 b 188 440 -2195d 9 190 440 -21966 e 191 440 -21974 12 199 440 -21986 3 201 440 -21989 c 203 440 -21995 2 205 440 -21997 3 206 440 -2199a 3 214 440 -2199d 27 234 440 -219c4 8 235 440 -219cc 2 236 440 -219ce 7 237 440 -219d5 23 247 440 -219f8 9 248 440 -21a01 2 249 440 -21a03 8 250 440 -21a0b 7 256 440 -21a12 a 288 440 -21a1c a 289 440 -21a26 a 290 440 -21a30 c 292 440 -21a3c 9 296 440 -21a45 23 301 440 -21a68 8 310 440 -21a70 7 311 440 -21a77 1 312 440 -21a78 10 318 440 -21a88 11 320 440 -21a99 5 292 440 -21a9e 9 293 440 -21aa7 5 325 440 -21aac e 329 440 -21aba d 330 440 -21ac7 5 335 440 -21acc b 339 440 -21ad7 d 340 440 -21ae4 5 344 440 -21ae9 3 345 440 -21aec 6 350 440 -21af2 4 351 440 -21af6 21 352 440 -21b17 2 354 440 -21b19 5 355 440 -21b1e a 357 440 -21b28 a 358 440 -21b32 6 360 440 -FUNC 21b38 1f5 24 cvtdate -21b38 6 409 440 -21b3e 4 412 440 -21b42 c 414 440 -21b4e 52 424 440 -21ba0 4c 430 440 -21bec 14 436 440 -21c00 2 437 440 -21c02 2 438 440 -21c04 46 447 440 -21c4a 3 449 440 -21c4d 2 452 440 -21c4f 3c 457 440 -21c8b 3 459 440 -21c8e 27 467 440 -21cb5 6 472 440 -21cbb 2 474 440 -21cbd 29 485 440 -21ce6 11 486 440 -21cf7 a 487 440 -21d01 8 488 440 -21d09 d 490 440 -21d16 6 491 440 -21d1c 6 492 440 -21d22 9 499 440 -21d2b 2 503 440 -FUNC 21d2d 1ae 0 _isindst_nolock -21d2d 5 554 440 -21d32 20 558 440 -21d52 5 560 440 -21d57 7 561 440 -21d5e 1b 568 440 -21d79 c 569 440 -21d85 7 573 440 -21d8c 34 584 440 -21dc0 2 585 440 -21dc2 19 596 440 -21ddb 40 611 440 -21e1b 2 612 440 -21e1d 1e 623 440 -21e3b 2 626 440 -21e3d 14 641 440 -21e51 1a 653 440 -21e6b d 660 440 -21e78 d 664 440 -21e85 8 666 440 -21e8d 4 674 440 -21e91 2 697 440 -21e93 8 673 440 -21e9b 8 675 440 -21ea3 4 676 440 -21ea7 14 679 440 -21ebb 4 681 440 -21ebf b 682 440 -21eca 2 685 440 -21ecc d 691 440 -21ed9 2 694 440 -FUNC 21edb 4f 0 __tzset -21edb c 85 440 -21ee7 a 88 440 -21ef1 8 90 440 -21ef9 3 91 440 -21efc 8 93 440 -21f04 5 94 440 -21f09 6 95 440 -21f0f c 98 440 -21f1b 6 103 440 -21f21 9 99 440 -FUNC 21f2a 38 0 _tzset -21f2a c 109 440 -21f36 8 110 440 -21f3e 4 111 440 -21f42 5 113 440 -21f47 c 115 440 -21f53 6 118 440 -21f59 9 116 440 -FUNC 21f62 41 4 _isindst -21f62 c 538 440 -21f6e 8 541 440 -21f76 4 542 440 -21f7a b 543 440 -21f85 c 544 440 -21f91 3 548 440 -21f94 6 549 440 -21f9a 9 545 440 -FUNC 21fa3 35 8 __ascii_stricmp -21fa3 a 75 693 -21fad c 80 693 -21fb9 3 81 693 -21fbc c 82 693 -21fc8 3 83 693 -21fcb 9 85 693 -21fd4 3 87 693 -21fd7 1 88 693 -FUNC 21fd8 d3 c _stricmp_l -21fd8 7 47 693 -21fdf b 49 693 -21fea 36 52 693 -22020 32 53 693 -22052 8 55 693 -2205a e 57 693 -22068 15 63 693 -2207d 11 64 693 -2208e 8 65 693 -22096 13 68 693 -220a9 2 69 693 -FUNC 220ab 50 8 _stricmp -220ab 4 94 693 -220af a 95 693 -220b9 24 98 693 -220dd 6 99 693 -220e3 1 107 693 -220e4 5 101 693 -220e9 10 105 693 -220f9 2 107 693 -FUNC 220fb f0 10 _strnicmp_l -220fb 7 51 650 -22102 d 54 650 -2210f b 56 650 -2211a 33 59 650 -2214d 7 60 650 -22154 32 61 650 -22186 8 63 650 -2218e 1d 65 650 -221ab 15 71 650 -221c0 11 72 650 -221d1 d 74 650 -221de 6 76 650 -221e4 5 79 650 -221e9 2 80 650 -FUNC 221eb 5c c _strnicmp -221eb 4 125 650 -221ef a 127 650 -221f9 24 130 650 -2221d 5 131 650 -22222 a 132 650 -2222c 1 141 650 -2222d 5 134 650 -22232 13 138 650 -22245 2 141 650 -FUNC 22247 db c xtoa_s -22247 8 93 6581 -2224f 24 102 6581 -22273 24 103 6581 -22297 19 105 6581 -222b0 b 106 6581 -222bb a 112 6581 -222c5 6 114 6581 -222cb 7 116 6581 -222d2 2 118 6581 -222d4 2 121 6581 -222d6 5 124 6581 -222db 5 128 6581 -222e0 3 129 6581 -222e3 2 130 6581 -222e5 6 131 6581 -222eb 3 135 6581 -222ee e 136 6581 -222fc 8 139 6581 -22304 2 141 6581 -22306 2 142 6581 -22308 3 148 6581 -2230b 6 152 6581 -22311 3 154 6581 -22314 1 155 6581 -22315 4 156 6581 -22319 5 158 6581 -2231e 4 160 6581 -FUNC 22322 28 10 _itoa_s -22322 3 172 6581 -22325 d 175 6581 -22332 4 176 6581 -22336 2 177 6581 -22338 10 178 6581 -22348 2 181 6581 -FUNC 2234a 25 10 _ltoa_s -2234a 3 189 6581 -2234d 20 190 6581 -2236d 2 191 6581 -FUNC 2236f 18 10 _ultoa_s -2236f 0 199 6581 -2236f 17 200 6581 -22386 1 201 6581 -FUNC 22387 f6 14 x64toa_s -22387 7 309 6581 -2238e 25 318 6581 -223b3 5 319 6581 -223b8 19 321 6581 -223d1 b 322 6581 -223dc 3 327 6581 -223df 20 333 6581 -223ff 3 336 6581 -22402 1e 352 6581 -22420 3 344 6581 -22423 2 345 6581 -22425 5 346 6581 -2242a 5 351 6581 -2242f 13 352 6581 -22442 5 355 6581 -22447 3 357 6581 -2244a 13 358 6581 -2245d 4 364 6581 -22461 9 368 6581 -2246a 3 370 6581 -2246d 1 371 6581 -2246e 7 372 6581 -22475 4 375 6581 -22479 4 377 6581 -FUNC 2247d 33 14 _i64toa_s -2247d 3 390 6581 -22480 2e 391 6581 -224ae 2 392 6581 -FUNC 224b0 1d 14 _ui64toa_s -224b0 4 400 6581 -224b4 17 401 6581 -224cb 2 402 6581 -FUNC 224cd 224 1c __crtGetStringTypeW_stat -224cd 10 64 2828 -224dd 9 72 2828 -224e6 7 73 2828 -224ed 14 75 2828 -22501 11 79 2828 -22512 8 80 2828 -2251a b 82 2828 -22525 f 83 2828 -22534 4 88 2828 -22538 13 90 2828 -2254b 7 95 2828 -22552 2 199 2828 -22554 8 119 2828 -2255c b 120 2828 -22567 5 121 2828 -2256c b 122 2828 -22577 e 128 2828 -22585 5 130 2828 -2258a 3 131 2828 -2258d 1d 142 2828 -225aa 6 143 2828 -225b0 40 146 2828 -225f0 3 147 2828 -225f3 6 148 2828 -225f9 d 150 2828 -22606 1a 160 2828 -22620 4d 164 2828 -2266d 4 165 2828 -22671 5 170 2828 -22676 b 171 2828 -22681 3 174 2828 -22684 23 178 2828 -226a7 12 186 2828 -226b9 f 189 2828 -226c8 4 187 2828 -226cc 7 191 2828 -226d3 8 194 2828 -226db 4 196 2828 -226df 12 200 2828 -FUNC 226f1 3e 1c __crtGetStringTypeW -226f1 6 211 2828 -226f7 b 212 2828 -22702 2b 222 2828 -2272d 2 223 2828 -FUNC 2272f 294 14 strtoxq -2272f 8 80 6264 -22737 b 86 6264 -22742 3 89 6264 -22745 b 92 6264 -22750 31 94 6264 -22781 12 95 6264 -22793 c 100 6264 -2279f 37 102 6264 -227d6 2 103 6264 -227d8 9 105 6264 -227e1 4 106 6264 -227e5 2 107 6264 -227e7 6 109 6264 -227ed 9 110 6264 -227f6 8 112 6264 -227fe 6 115 6264 -22804 9 116 6264 -2280d a 117 6264 -22817 9 120 6264 -22820 3 118 6264 -22823 5 123 6264 -22828 10 125 6264 -22838 1 126 6264 -22839 9 127 6264 -22842 26 132 6264 -22868 e 137 6264 -22876 8 138 6264 -2287e 6 139 6264 -22884 11 140 6264 -22895 5 143 6264 -2289a 31 154 6264 -228cb 4 160 6264 -228cf 6 161 6264 -228d5 a 173 6264 -228df 7 176 6264 -228e6 6 178 6264 -228ec 6 179 6264 -228f2 5 181 6264 -228f7 19 156 6264 -22910 b 168 6264 -2291b 5 169 6264 -22920 35 184 6264 -22955 5 187 6264 -2295a c 188 6264 -22966 a 189 6264 -22970 6 190 6264 -22976 7 191 6264 -2297d 2 192 6264 -2297f 7 193 6264 -22986 8 195 6264 -2298e 5 197 6264 -22993 6 199 6264 -22999 13 201 6264 -229ac 15 203 6264 -229c1 2 204 6264 -FUNC 229c3 29 c _strtoi64 -229c3 3 211 6264 -229c6 8 212 6264 -229ce 13 214 6264 -229e1 9 218 6264 -229ea 2 220 6264 -FUNC 229ec 1b 10 _strtoi64_l -229ec 0 227 6264 -229ec 1a 228 6264 -22a06 1 229 6264 -FUNC 22a07 2a c _strtoui64 -22a07 3 236 6264 -22a0a 7 237 6264 -22a11 14 239 6264 -22a25 a 243 6264 -22a2f 2 245 6264 -FUNC 22a31 1b 10 _strtoui64_l -22a31 0 253 6264 -22a31 1a 254 6264 -22a4b 1 255 6264 -FUNC 22a50 2b 0 _chkstk -22a50 0 65 2634 -22a50 1 69 2634 -22a51 4 73 2634 -22a55 2 74 2634 -22a57 2 79 2634 -22a59 2 80 2634 -22a5b 2 81 2634 -22a5d 2 83 2634 -22a5f 5 84 2634 -22a64 2 87 2634 -22a66 2 88 2634 -22a68 2 89 2634 -22a6a 1 90 2634 -22a6b 1 91 2634 -22a6c 2 92 2634 -22a6e 3 93 2634 -22a71 1 94 2634 -22a72 5 98 2634 -22a77 2 99 2634 -22a79 2 100 2634 -FUNC 22a7b 81 4 _getenv_helper_nolock -22a7b 0 95 3904 -22a7b 10 103 3904 -22a8b 3 104 3904 -22a8e 1 169 3904 -22a8f e 128 3904 -22a9d 7 131 3904 -22aa4 2 132 3904 -22aa6 6 135 3904 -22aac c 140 3904 -22ab8 9 142 3904 -22ac1 2 150 3904 -22ac3 22 154 3904 -22ae5 3 164 3904 -22ae8 6 150 3904 -22aee 5 168 3904 -22af3 9 169 3904 -FUNC 22afc 93 c _getenv_s_helper -22afc 7 220 3904 -22b03 21 224 3904 -22b24 15 226 3904 -22b39 4 227 3904 -22b3d 3 229 3904 -22b40 a 233 3904 -22b4a 3 234 3904 -22b4d 2 236 3904 -22b4f 7 239 3904 -22b56 6 240 3904 -22b5c 2 243 3904 -22b5e 5 246 3904 -22b63 5 251 3904 -22b68 20 254 3904 -22b88 5 256 3904 -22b8d 2 257 3904 -FUNC 22b8f a2 8 _dupenv_s_helper -22b8f 6 339 3904 -22b95 21 344 3904 -22bb6 9 346 3904 -22bbf 2 348 3904 -22bc1 5 350 3904 -22bc6 8 352 3904 -22bce 6 353 3904 -22bd4 2 355 3904 -22bd6 9 358 3904 -22bdf b 362 3904 -22bea 6 364 3904 -22bf0 b 366 3904 -22bfb 9 367 3904 -22c04 1e 370 3904 -22c22 7 371 3904 -22c29 2 373 3904 -22c2b 4 375 3904 -22c2f 2 376 3904 -FUNC 22c31 83 4 getenv -22c31 c 75 3904 -22c3d 2a 78 3904 -22c67 18 79 3904 -22c7f 8 81 3904 -22c87 3 82 3904 -22c8a c 83 3904 -22c96 c 85 3904 -22ca2 3 89 3904 -22ca5 6 90 3904 -22cab 9 86 3904 -FUNC 22cb4 d8 10 getenv_s -22cb4 c 198 3904 -22cc0 8 201 3904 -22cc8 5 202 3904 -22ccd a1 203 3904 -22d6e c 205 3904 -22d7a 3 209 3904 -22d7d 6 210 3904 -22d83 9 206 3904 -FUNC 22d8c e6 c _dupenv_s -22d8c c 303 3904 -22d98 8 306 3904 -22da0 5 307 3904 -22da5 af 311 3904 -22e54 c 314 3904 -22e60 3 318 3904 -22e63 6 319 3904 -22e69 9 315 3904 -FUNC 22e72 8 4 _tolower -22e72 0 48 6218 -22e72 7 49 6218 -22e79 1 50 6218 -FUNC 22e7a 117 8 _tolower_l -22e7a 8 70 6218 -22e82 b 74 6218 -22e8d c 77 6218 -22e99 31 79 6218 -22eca f 80 6218 -22ed9 14 82 6218 -22eed 2b 86 6218 -22f18 3 88 6218 -22f1b d 91 6218 -22f28 2 92 6218 -22f2a b 94 6218 -22f35 a 97 6218 -22f3f 25 110 6218 -22f64 6 112 6218 -22f6a 5 116 6218 -22f6f 6 117 6218 -22f75 1a 119 6218 -22f8f 2 120 6218 -FUNC 22f91 27 4 tolower -22f91 0 143 6218 -22f91 9 145 6218 -22f9a f 147 6218 -22fa9 1 153 6218 -22faa d 151 6218 -22fb7 1 153 6218 -FUNC 22fc0 61 c __ascii_strnicmp -22fc0 6 69 871 -22fc6 3 75 871 -22fc9 2 76 871 -22fcb 2 77 871 -22fcd 3 79 871 -22fd0 3 80 871 -22fd3 2 82 871 -22fd5 2 83 871 -22fd7 5 84 871 -22fdc 2 89 871 -22fde 2 91 871 -22fe0 2 93 871 -22fe2 2 95 871 -22fe4 2 97 871 -22fe6 2 98 871 -22fe8 3 100 871 -22feb 3 101 871 -22fee 2 103 871 -22ff0 2 104 871 -22ff2 2 106 871 -22ff4 2 107 871 -22ff6 2 109 871 -22ff8 2 112 871 -22ffa 2 113 871 -22ffc 2 115 871 -22ffe 2 116 871 -23000 2 118 871 -23002 2 121 871 -23004 2 122 871 -23006 3 124 871 -23009 2 125 871 -2300b 2 128 871 -2300d 2 129 871 -2300f 2 130 871 -23011 5 133 871 -23016 2 134 871 -23018 2 135 871 -2301a 2 138 871 -2301c 5 140 871 -FUNC 23021 ec 10 _mbsnbicoll_l -23021 7 53 4518 -23028 b 55 4518 -23033 9 57 4518 -2303c 13 58 4518 -2304f 33 61 4518 -23082 6 62 4518 -23088 23 63 4518 -230ab 8 65 4518 -230b3 14 66 4518 -230c7 23 74 4518 -230ea 10 75 4518 -230fa 11 77 4518 -2310b 2 79 4518 -FUNC 2310d 17 c _mbsnbicoll -2310d 0 85 4518 -2310d 16 86 4518 -23123 1 87 4518 -FUNC 23124 95 0 __wtomb_environ -23124 7 43 2699 -2312b 3 44 2699 -2312e 9 45 2699 -23137 c 52 2699 -23143 12 57 2699 -23155 11 61 2699 -23166 12 65 2699 -23178 10 72 2699 -23188 5 74 2699 -2318d 9 76 2699 -23196 3 77 2699 -23199 9 81 2699 -231a2 5 84 2699 -231a7 2 85 2699 -231a9 5 58 2699 -231ae 9 67 2699 -231b7 2 68 2699 -FUNC 231b9 1a 8 strnlen -231b9 0 38 864 -231b9 19 45 864 -231d2 1 49 864 -FUNC 231d3 1a 4 strncnt -231d3 0 50 4345 -231d3 6 51 4345 -231d9 6 54 4345 -231df 1 55 4345 -231e0 5 54 4345 -231e5 7 57 4345 -231ec 1 58 4345 -FUNC 231ed 389 18 __crtCompareStringA_stat -231ed 10 96 4345 -231fd 31 280 4345 -2322e c 107 4345 -2323a b 109 4345 -23245 a 110 4345 -2324f 5 118 4345 -23254 1b 119 4345 -2326f 7 122 4345 -23276 1f 123 4345 -23295 6 120 4345 -2329b 7 121 4345 -232a2 3 124 4345 -232a5 2 125 4345 -232a7 17 130 4345 -232be 7 189 4345 -232c5 8 201 4345 -232cd 8 202 4345 -232d5 d 208 4345 -232e2 5 214 4345 -232e7 8 215 4345 -232ef 2 218 4345 -232f1 6 219 4345 -232f7 5 222 4345 -232fc 4 223 4345 -23300 f 231 4345 -2330f 2 232 4345 -23311 5 237 4345 -23316 4 239 4345 -2331a 2 240 4345 -2331c 10 244 4345 -2332c a 246 4345 -23336 7 244 4345 -2333d 2 262 4345 -2333f 5 253 4345 -23344 6 255 4345 -2334a 8 256 4345 -23352 10 260 4345 -23362 11 262 4345 -23373 7 260 4345 -2337a 2 262 4345 -2337c 1a 280 4345 -23396 6 281 4345 -2339c 4d 284 4345 -233e9 4 285 4345 -233ed 6 286 4345 -233f3 19 295 4345 -2340c 17 305 4345 -23423 46 309 4345 -23469 4 310 4345 -2346d 13 320 4345 -23480 17 326 4345 -23497 7 328 4345 -2349e 8 331 4345 -234a6 9 333 4345 -234af 4 132 4345 -234b3 5 137 4345 -234b8 8 138 4345 -234c0 5 139 4345 -234c5 8 140 4345 -234cd e 142 4345 -234db 6 143 4345 -234e1 5 148 4345 -234e6 19 155 4345 -234ff 2 156 4345 -23501 6 157 4345 -23507 19 163 4345 -23520 4 164 4345 -23524 7 166 4345 -2352b 5 167 4345 -23530 3 169 4345 -23533 3 170 4345 -23536 18 178 4345 -2354e 6 179 4345 -23554 6 181 4345 -2355a 8 182 4345 -23562 2 184 4345 -23564 12 337 4345 -FUNC 23576 40 20 __crtCompareStringA -23576 6 349 4345 -2357c b 350 4345 -23587 2d 361 4345 -235b4 2 362 4345 -FUNC 235b6 f8 10 _strnicoll_l -235b6 7 55 603 -235bd b 57 603 -235c8 9 59 603 -235d1 13 60 603 -235e4 33 63 603 -23617 6 64 603 -2361d 23 65 603 -23640 a 67 603 -2364a 15 68 603 -2365f 21 78 603 -23680 b 80 603 -2368b 10 81 603 -2369b 11 84 603 -236ac 2 85 603 -FUNC 236ae 27 c _strnicoll -236ae 3 92 603 -236b1 9 93 603 -236ba 1 101 603 -236bb 5 95 603 -236c0 13 99 603 -236d3 2 101 603 -FUNC 236d5 4d 4 findenv -236d5 1 387 3036 -236d6 8 390 3036 -236de 12 394 3036 -236f0 d 399 3036 -236fd 9 390 3036 -23706 e 407 3036 -23714 1 408 3036 -23715 c 400 3036 -23721 1 408 3036 -FUNC 23722 5d 0 copy_environ -23722 4 428 3036 -23726 2 429 3036 -23728 6 434 3036 -2372e 2 464 3036 -23730 7 438 3036 -23737 8 439 3036 -2373f 14 443 3036 -23753 8 444 3036 -2375b 6 448 3036 -23761 11 458 3036 -23772 4 448 3036 -23776 2 461 3036 -23778 5 463 3036 -2377d 2 464 3036 -FUNC 2377f 24c 8 __crtsetenv -2377f 6 76 3036 -23785 2c 89 3036 -237b1 2 91 3036 -237b3 1c 98 3036 -237cf 5 114 3036 -237d4 13 125 3036 -237e7 c 126 3036 -237f3 4 130 3036 -237f7 d 153 3036 -23804 9 155 3036 -2380d b 100 3036 -23818 6 101 3036 -2381e 2 356 3036 -23820 3 164 3036 -23823 6 165 3036 -23829 f 171 3036 -23838 2 172 3036 -2383a 2 173 3036 -2383c 8 176 3036 -23844 f 178 3036 -23853 2 179 3036 -23855 2 180 3036 -23857 6 196 3036 -2385d 5 197 3036 -23862 2 200 3036 -23864 10 207 3036 -23874 9 210 3036 -2387d a 216 3036 -23887 6 218 3036 -2388d 5 235 3036 -23892 5 238 3036 -23897 5 241 3036 -2389c c 222 3036 -238a8 4 221 3036 -238ac 1d 230 3036 -238c9 2 233 3036 -238cb 9 245 3036 -238d4 4 250 3036 -238d8 2 251 3036 -238da 2f 255 3036 -23909 8 258 3036 -23911 3 259 3036 -23914 5 262 3036 -23919 5 264 3036 -2391e 21 287 3036 -2393f 25 289 3036 -23964 21 338 3036 -23985 4 339 3036 -23989 b 343 3036 -23994 7 346 3036 -2399b 5 349 3036 -239a0 8 351 3036 -239a8 6 352 3036 -239ae 8 355 3036 -239b6 8 271 3036 -239be 6 274 3036 -239c4 7 276 3036 -FUNC 239cb 50 4 _strdup -239cb 1 66 901 -239cc b 70 901 -239d7 6 71 901 -239dd 9 73 901 -239e6 e 77 901 -239f4 1c 80 901 -23a10 4 81 901 -23a14 6 84 901 -23a1a 1 85 901 -FUNC 23a1b ba c _mbschr_l -23a1b 7 53 4568 -23a22 b 55 4568 -23a2d 32 58 4568 -23a5f 8 60 4568 -23a67 d 61 4568 -23a74 a 65 4568 -23a7e 7 67 4568 -23a85 10 69 4568 -23a95 3 70 4568 -23a98 8 72 4568 -23aa0 d 63 4568 -23aad 8 76 4568 -23ab5 e 77 4568 -23ac3 10 79 4568 -23ad3 2 80 4568 -FUNC 23ad5 13 8 _mbschr -23ad5 0 86 4568 -23ad5 12 87 4568 -23ae7 1 88 4568 -FUNC 23b00 be 8 strchr -23b00 0 60 928 -23b00 2 68 928 -23b02 4 69 928 -23b06 1 73 928 -23b07 2 74 928 -23b09 3 75 928 -23b0c 4 76 928 -23b10 6 77 928 -23b16 2 78 928 -23b18 2 81 928 -23b1a 3 82 928 -23b1d 2 83 928 -23b1f 2 84 928 -23b21 2 85 928 -23b23 2 86 928 -23b25 6 87 928 -23b2b 2 88 928 -23b2d 2 91 928 -23b2f 1 92 928 -23b30 2 93 928 -23b32 3 94 928 -23b35 1 95 928 -23b36 2 96 928 -23b38 2 101 928 -23b3a 5 102 928 -23b3f 2 104 928 -23b41 2 105 928 -23b43 2 107 928 -23b45 2 108 928 -23b47 2 110 928 -23b49 3 111 928 -23b4c 3 113 928 -23b4f 2 114 928 -23b51 2 116 928 -23b53 3 117 928 -23b56 6 119 928 -23b5c 2 120 928 -23b5e 5 124 928 -23b63 2 125 928 -23b65 5 127 928 -23b6a 2 128 928 -23b6c 6 130 928 -23b72 2 131 928 -23b74 1 134 928 -23b75 1 135 928 -23b76 1 137 928 -23b77 2 138 928 -23b79 1 139 928 -23b7a 3 142 928 -23b7d 2 143 928 -23b7f 2 144 928 -23b81 2 145 928 -23b83 2 146 928 -23b85 2 147 928 -23b87 2 148 928 -23b89 2 149 928 -23b8b 2 150 928 -23b8d 3 151 928 -23b90 2 152 928 -23b92 2 153 928 -23b94 2 154 928 -23b96 2 155 928 -23b98 2 156 928 -23b9a 2 157 928 -23b9c 2 158 928 -23b9e 2 159 928 -23ba0 2 160 928 -23ba2 1 163 928 -23ba3 1 164 928 -23ba4 3 165 928 -23ba7 1 166 928 -23ba8 1 167 928 -23ba9 3 170 928 -23bac 1 171 928 -23bad 1 172 928 -23bae 1 173 928 -23baf 1 174 928 -23bb0 3 177 928 -23bb3 1 178 928 -23bb4 1 179 928 -23bb5 1 180 928 -23bb6 1 181 928 -23bb7 3 184 928 -23bba 1 185 928 -23bbb 1 186 928 -23bbc 1 187 928 -23bbd 1 188 928 -PUBLIC 23b06 0 __from_strstr_to_strchr -FUNC 240b9 14 0 `operator new'::`6'::`dynamic atexit destructor for 'nomem'' -STACK WIN 4 41b0 86 13 0 8 0 e0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4240 41 3 0 18 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4290 18 4 0 0 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 42ae 18 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 42af 14 6 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 42c6 b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 42d1 22 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 42d2 1e 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 42f3 3f c 0 0 c 50 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4332 3f c 0 0 c 50 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4371 3f c 0 0 c 50 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 43b0 18 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 43b1 14 6 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 43c8 af c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4464 12 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 4477 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 448d 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 44a3 14 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 44b7 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 44cd 14 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 44e1 25 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4506 16 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 451c f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 452b 62 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 452c 60 1 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 452d 5c 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 454a 35 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 458d 42 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 458e 40 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 45cf da c 0 4 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 466c 15 0 0 4 c 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 46a0 8 0 0 4 c 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 46a9 53 c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 46f2 9 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 46fc 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4705 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 470b b1 8 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4713 a8 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4785 33 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 47bc 20 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 47dc 3c 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 47dd 3a 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4818 2e 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4846 36 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 487c 2a 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 48a6 16 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 48bc 5 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 48c1 30 5 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 48c6 2b 0 0 8 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 48f1 7 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 48f8 7 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 48ff 7 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4906 52 8 0 8 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 490c 4c 2 0 8 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 4958 36 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 498e 36 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 49c4 36 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 49fa 1a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4a14 30 1 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4a15 2e 0 0 10 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4a44 d5 7 0 1c 0 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4a4b ce 0 0 1c 4 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 60 - ^ = -STACK WIN 4 4b19 9d 5 0 10 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4b1e 98 0 0 10 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 4bb6 73 7 0 14 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4bbb 6c 2 0 14 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 4bbc 6a 1 0 14 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 4bbd 68 0 0 14 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 4c29 28 5 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4c2e 22 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4c51 21 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4c72 4c 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4c73 4a 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4cbe 5e 6 0 14 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4d1c 4a b 0 8 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4d26 1b 1 0 8 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4d27 16 0 0 8 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4d66 19 a 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4d67 17 9 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4d7f 6a 6 0 4 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4de9 f 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4df8 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4e06 1c 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4e07 18 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4e22 f 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4e31 8 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4e39 1b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4e54 1c 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4e70 1f 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4e8f 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4e93 b 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4e9e 5 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4ea3 11 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4eb4 4e 9 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4eb5 4a 8 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 4eba 44 3 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 4ebb 42 2 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 4f02 18 2 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4f1a 58 8 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4f1b 54 7 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 4f20 4e 2 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 4f34 37 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 4f72 56 9 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4f73 52 8 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 4f78 4c 3 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 4f79 4a 2 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 4fc8 16 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4fde d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4feb 19 8 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4fec 15 7 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5004 18 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5005 14 6 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 501c b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5027 19 8 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5028 15 7 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5040 18 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5041 14 6 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5058 b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5063 18 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5064 14 6 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 507b 18 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 507c 14 6 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5093 b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 509e 1c 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 509f 18 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 50ba 22 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 50bb 1e 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 50dc 22 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 50dd 1e 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 50fe 22 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 50ff 1e 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5120 7b 8 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5124 75 4 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5128 70 0 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 519b 5b 8 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 51a2 52 1 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 51a3 50 0 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 51f6 a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5200 a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 520a a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5214 a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 521e a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5228 24 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 524c 41 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 528d 1b6 c 0 0 c 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5405 14 0 0 0 c 2c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 5443 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 544d a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5457 fc 1c 0 14 4 328 0 1 $T0 $ebp 680 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5553 22 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5554 20 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5575 d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5582 9 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 558b 24 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 55af 10 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 55bf 9 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 55c8 96 7 0 8 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 55cf 8d 0 0 8 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 55fb 60 0 0 8 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 565e 1a 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5678 1c 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5694 1f 3 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 56b3 1c 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 56cf 1d 3 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 56ec 20 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 570c 1d 3 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5729 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 573a 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 574b 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5761 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5777 14f c 0 8 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 58bc 9 0 0 8 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 58c6 1a 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 58e0 1a 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 58fa 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5912 1a 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 592c 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5944 f6 7 0 18 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 594b ed 0 0 18 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 5973 c4 0 0 18 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 5977 bf 0 0 18 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 5a3a 27 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5a61 28 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5a89 87 4 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5a8d 81 0 0 14 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5ab2 5b 0 0 14 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5b10 1b 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5b2b 107 5 0 18 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5b30 100 0 0 18 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 5b5b d4 0 0 18 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 5b5f cf 0 0 18 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 5c32 1e 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5c50 27 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5c77 28 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5c9f 24 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5cc3 26 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5ce9 15 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5cfe 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5d07 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5d10 18 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5d11 16 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5d28 20 1 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5d29 1e 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5d48 37 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5d4d 31 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5d7f 3c 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5d84 36 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5dbb 3c 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5dc0 36 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5df7 3c 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5dfc 36 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5e33 3c 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5e38 36 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5e6f 37 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5e74 31 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5ea6 37 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5eab 31 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5edd 92 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5f1b 34 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5f1c 32 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5f6f e2 c 0 c c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 6039 11 0 0 c c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 6051 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6062 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6073 f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6082 f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6091 4c 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6092 4a 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 616b 33 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 619e 36 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 61d4 36 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 620a 39 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6243 14 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6257 f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6266 f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6275 96 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6276 94 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 62ba 4a 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 62bb 46 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 630b 2f 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6313 26 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 633a 82 9 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6341 78 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 63bc e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 63ca 3 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 63cd 33 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6400 24 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 6404 1e 2 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 6424 4a a 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6429 44 5 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 642a 42 4 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 646e d 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 647b 10 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 648b e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6499 994 2c 0 10 0 278 0 1 $T0 $ebp 504 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 64bb 945 a 0 10 4 278 0 1 $T0 $ebp 504 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 636 - ^ = -STACK WIN 4 64c2 93b 3 0 10 8 278 0 1 $T0 $ebp 504 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 636 - ^ = -STACK WIN 4 64c5 937 0 0 10 c 278 0 1 $T0 $ebp 504 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 636 - ^ = -STACK WIN 4 6e2d 3b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6e68 13 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6e7b 13 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6e8e 1e 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6e8f 1c 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6eac 1b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6ec7 2a 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6ec8 28 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6ef1 1b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6f0c 2a 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6f0d 28 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6fa0 24 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6fd0 196 14 0 10 0 14 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6fd4 d3 10 0 10 4 14 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 24 - ^ = -STACK WIN 4 6fd9 cd b 0 10 8 14 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 28 - ^ = $ebx $T0 24 - ^ = -STACK WIN 4 6fda cb a 0 10 c 14 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 28 - ^ = $ebx $T0 24 - ^ = -STACK WIN 4 6fe4 c0 0 0 10 10 14 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 28 - ^ = $ebx $T0 24 - ^ = -STACK WIN 4 7166 90 c 0 10 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 71eb a 0 0 10 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 71f6 1a 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7210 1a 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 722a 1a 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7244 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 725c 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7274 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 728c 104 9 0 0 0 328 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 7390 5c6 22 0 c 0 594 0 1 $T0 $ebp 1304 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 73b2 597 0 0 c 4 594 0 1 $T0 $ebp 1304 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 73fe 542 0 0 c 8 594 0 1 $T0 $ebp 1304 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1436 - ^ = -STACK WIN 4 740c 533 0 0 c c 594 0 1 $T0 $ebp 1304 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1436 - ^ = -STACK WIN 4 7956 dc c 0 c c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 7a28 9 0 0 c c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 7a32 2d 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7a37 27 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7a5f e1 c 0 4 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 7b36 9 0 0 4 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 7b40 49 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7b41 3b 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7b42 39 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7b89 55 8 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7b8a 53 7 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 7b91 4b 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 7b97 2a 0 0 0 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 7bde 15 3 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 7bf3 18 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7c0b c3 c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 7cc5 8 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 7cce 31 7 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 7cd5 28 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 7cff 240 c 0 0 c 64 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 7f28 4 0 0 0 c 64 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 7f3f 4c 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f40 4a 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f41 48 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f8b 21 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7f8c 1f 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7fac 10 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7fbc 40 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7fbd 3e 1 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7fbe 3c 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ffc 48 2 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ffd 46 1 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 7ffe 44 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8044 4b 2 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8045 49 1 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8046 47 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 808f 50 2 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8090 4e 1 0 c 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8091 4c 0 0 c 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 80df 8 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 80e7 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 80f1 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 80fb 8e c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8151 8 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 8189 9f c 0 0 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 821f 8 0 0 0 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 8228 19 8 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8229 15 7 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8241 b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 824c 22 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 824d 1e 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 826e 5c 2 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 826f 5a 1 0 c 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8270 58 0 0 c 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 82ca 44 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 830e e1 c 0 10 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8390 a 0 0 10 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 83ce 20 0 0 10 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 83ef 45 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8434 54 c 0 8 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8477 9 0 0 8 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 8488 25 7 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 848f 1d 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 84ad 13 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 84c0 b3 8 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 84c7 9a 1 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 84c8 98 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8573 4c 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 85bf 139 1 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 85c0 137 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 85cf 127 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 85d0 11f 0 0 8 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 12 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 85d1 11d 0 0 8 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 12 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 86f8 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 86fc 32 c 0 8 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8714 a 0 0 8 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 872e 33 c 0 8 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8747 a 0 0 8 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 8761 32 c 0 8 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8779 a 0 0 8 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 8793 3b c 0 14 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 87b4 a 0 0 14 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 87ce 79 6 0 4 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 87f0 52 0 0 4 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 87f1 50 0 0 4 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 8847 49 c 0 4 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8890 30 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8891 2a 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 8892 28 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 88c0 82 8 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 88c1 7b 7 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 88c8 73 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8942 19c 14 0 18 c 3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 89d2 9 0 0 18 c 3c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 8a62 7b 0 0 18 c 3c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 8ade 17f c 0 10 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8c49 4 0 0 10 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 8c5d 91 c 0 10 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8ce2 4 0 0 10 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 8cee 143 9 0 10 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8cfe 131 0 0 10 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 8d02 12c 0 0 10 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 8d05 128 0 0 10 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 8e31 6c 3 0 1c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8e9d f2 6 0 20 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8ea3 ea 0 0 20 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8eb3 d9 0 0 20 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8f31 5a 0 0 20 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 8f8f 356 17 0 20 0 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8f99 34a d 0 20 4 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 48 - ^ = -STACK WIN 4 8fa5 33d 1 0 20 8 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 48 - ^ = -STACK WIN 4 8fa6 33b 0 0 20 c 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 48 - ^ = -STACK WIN 4 92e5 18 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 92e6 14 6 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 92fd e4 6 0 20 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 9301 de 2 0 20 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 9302 dc 1 0 20 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 9303 da 0 0 20 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 93e1 6c 7 0 0 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 93e7 64 1 0 0 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 93e8 62 0 0 0 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 9408 41 0 0 0 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 944d 6e 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 944e 6c 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 94bb 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 94c4 6e 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 94c5 6c 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9532 9 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 953b 15 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9550 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9556 32 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9557 30 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9588 19 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 95a1 3d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 95de bf c 0 8 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 9694 8 0 0 8 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 969d 77 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 969e 75 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 969f 71 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9714 18 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9715 16 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 972c 121 c 0 4 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 9835 b 0 0 4 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 9841 b 0 0 4 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 984d 69 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9857 4b 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9860 25 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 98b6 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 98bc 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 98c2 184 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 98c3 182 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 98de 166 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9a46 39 c 0 0 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 9a66 4 0 0 0 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 9a7f 13 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9a92 37 c 0 0 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 9ab6 4 0 0 0 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 9ac9 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9b2c b9 5 0 4 0 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9b2e b5 3 0 4 4 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 9b2f b3 2 0 4 8 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 12 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 9b30 b1 1 0 4 c 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 12 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 9b31 af 0 0 4 10 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 12 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 9be5 2f 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9be6 2d 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9c14 3c c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 9c4a 5 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 9c50 12 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9c62 4f c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 9ca8 8 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 9cb1 75 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9cf9 2c 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9d26 c3 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9d27 c1 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = -STACK WIN 4 9d35 9c 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 9d3c 94 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 9d3d 90 0 0 4 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 9de9 a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9df3 31 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9df4 2f 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9e24 9 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9e2d d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9e3a 22 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9e5c 22 3 0 18 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 9e7e 70 c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 9ee5 8 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 9eee f5 c 0 8 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 9fd7 b 0 0 8 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 9fe3 70 c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 a04a 8 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 a053 31 3 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 a084 eb c 0 8 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 a163 b 0 0 8 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 a16f 53 c 0 4 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 a1b9 8 0 0 4 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 a258 65 b 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 a25d 5f 6 0 c 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 a262 59 1 0 c 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 a263 57 0 0 c c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 aa15 3d 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 aa52 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 aa60 1a0 8 0 4 0 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 aa62 19c 6 0 4 4 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 aa67 196 1 0 4 8 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 aa68 194 0 0 4 c 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 aa85 176 0 0 4 10 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 20 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 ac00 20 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ac20 39 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ac59 1 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ac5a 32 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ac65 1c 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ac8c 15e 6 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 ac92 156 0 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 acaa 13d 0 0 8 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 acb0 136 0 0 8 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 adea 1b 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ae05 db b 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ae06 c3 a 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 ae0f b9 1 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 ae10 b7 0 0 0 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 ae5f 67 0 0 0 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 16 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 aee0 a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 aeea 198 e 0 c 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 aef2 187 6 0 c 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 aef8 180 0 0 c 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 b082 b9 11 0 0 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 b089 b0 a 0 0 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 b092 a6 1 0 0 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 b093 a4 0 0 0 c c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 b13b 135 b 0 0 0 8 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b143 12a 3 0 0 4 8 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 12 - ^ = -STACK WIN 4 b144 128 2 0 0 8 8 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 16 - ^ = $ebx $T0 12 - ^ = -STACK WIN 4 b145 126 1 0 0 c 8 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 16 - ^ = $ebx $T0 12 - ^ = -STACK WIN 4 b146 124 0 0 0 10 8 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 16 - ^ = $ebx $T0 12 - ^ = -STACK WIN 4 b270 24 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b271 22 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b272 20 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b294 24 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b295 22 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b296 20 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b2b8 5b 6 0 0 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 b2be 43 0 0 0 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 b313 5a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b36d 74 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b36e 72 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = -STACK WIN 4 b37a 53 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 b381 4b 0 0 0 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 b38c 30 0 0 0 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 b3e1 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b3e7 94 15 0 0 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 b3fb 7e 1 0 0 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 b3fc 7c 0 0 0 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 b418 5f 0 0 0 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 b47b 8 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b483 160 5 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 b488 159 0 0 8 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 b4c5 11b 0 0 8 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 b52c b3 0 0 8 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 b5e3 25 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b608 25 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 b60c 1f 2 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 b62d 4f a 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b632 49 5 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 b633 47 4 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 b67c 910 30 0 10 0 474 0 1 $T0 $ebp 1012 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 b69e 8c1 e 0 10 4 474 0 1 $T0 $ebp 1012 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1144 - ^ = -STACK WIN 4 b6a5 8b7 7 0 10 8 474 0 1 $T0 $ebp 1012 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1144 - ^ = -STACK WIN 4 b6ac 8af 0 0 10 c 474 0 1 $T0 $ebp 1012 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1144 - ^ = -STACK WIN 4 bf8c 97 7 0 10 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 bf93 8e 0 0 10 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 bfbf 61 0 0 10 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 c023 17 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c03a 5 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c03f 55 7 0 10 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 c046 4c 0 0 10 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 c094 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c0ac 1a 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c0c6 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c0de 1a 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c0f8 14e c 0 14 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 c23c 9 0 0 14 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 c246 1e 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c264 1e 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c282 1e 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c2a0 1c 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c2bc 1c 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c2d8 1c 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c2f4 25 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c319 25 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 c31d 1f 2 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 c33e 4f a 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c343 49 5 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 c344 47 4 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 c38d 91c 2c 0 10 0 474 0 1 $T0 $ebp 1012 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 c3a9 8d3 10 0 10 4 474 0 1 $T0 $ebp 1012 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1144 - ^ = -STACK WIN 4 c3b0 8c9 9 0 10 8 474 0 1 $T0 $ebp 1012 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1144 - ^ = -STACK WIN 4 c3b9 8bf 0 0 10 c 474 0 1 $T0 $ebp 1012 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1144 - ^ = -STACK WIN 4 cca9 154 9 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 ccb1 14a 1 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 ccb2 148 0 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 cdfd 25 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ce22 25 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 ce26 1f 2 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 ce47 4f a 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ce4c 49 5 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 ce4d 47 4 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 ce96 f60 2a 0 10 0 ad4 0 1 $T0 $ebp 1160 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 ceb8 f0f 8 0 10 4 ad4 0 1 $T0 $ebp 1160 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 2776 - ^ = -STACK WIN 4 ceb9 f0b 7 0 10 8 ad4 0 1 $T0 $ebp 1160 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 2776 - ^ = -STACK WIN 4 cec0 f03 0 0 10 c ad4 0 1 $T0 $ebp 1160 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 2776 - ^ = -STACK WIN 4 ddf6 1f 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ddf7 1d 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ddf8 1b 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 de20 29 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 de50 42 18 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 de5e 33 a 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 de5f 31 9 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 de68 27 0 0 8 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 dea0 bb 33 0 4 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 deba a1 19 0 4 10 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 df29 14 0 0 4 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 df5b 19 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 df74 9b c 0 4 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 dfed 9 0 0 4 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 e00f 34 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e01a 1d 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e043 d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e050 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e059 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e062 23d c 0 8 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 e257 b 0 0 8 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 e29f 1b0 c 0 4 c 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 e40d 14 0 0 4 c 30 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 e44f a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e459 104 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e45a 102 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = -STACK WIN 4 e45b 100 1 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = -STACK WIN 4 e45c fe 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = -STACK WIN 4 e495 c4 0 0 4 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 16 - ^ = -STACK WIN 4 e55d 15a 24 0 14 0 94 0 1 $T0 $ebp 100 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 e576 bc b 0 14 4 94 0 1 $T0 $ebp 100 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 152 - ^ = -STACK WIN 4 e577 b8 a 0 14 8 94 0 1 $T0 $ebp 100 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 152 - ^ = -STACK WIN 4 e581 ad 0 0 14 c 94 0 1 $T0 $ebp 100 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 152 - ^ = -STACK WIN 4 e6b7 a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e6c1 a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e6cb 10 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e6db c5 c 0 8 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 e761 17 0 0 8 c 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 e7a0 5e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e7b8 45 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e7fe 2f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e82d 55 b 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e82e 53 a 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 e82f 51 9 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 e830 4f 8 0 0 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 e831 4d 7 0 0 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 e882 18a 1d 0 0 0 51c 0 1 $T0 $ebp 1180 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 e89e 161 1 0 0 4 51c 0 1 $T0 $ebp 1180 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1312 - ^ = -STACK WIN 4 e89f 15d 0 0 0 8 51c 0 1 $T0 $ebp 1180 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1312 - ^ = -STACK WIN 4 ea0c a4 c 0 0 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 eaa4 b 0 0 0 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 eab0 7a 7 0 0 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 eab7 71 0 0 0 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 eb2a 1d9 19 0 8 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 eb3b 1c1 8 0 8 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 eb3f 1ba 4 0 8 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 eb43 1b5 0 0 8 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 ed03 3c 6 0 0 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 ed3f 19a c 0 4 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 eea0 8 0 0 4 c 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 eed9 1e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 eef7 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 eefd 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ef03 140 12 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ef04 13e 11 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 ef05 13c 10 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 ef06 13a f 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 ef15 12a 0 0 4 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 f043 86 8 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f044 84 7 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 f045 82 6 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 f046 80 5 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 f04b 7a 0 0 4 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 f0c9 8c 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f0ca 8a 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f0d3 7e 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 f0d4 7c 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 12 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 f0d5 7a 0 0 4 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 12 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 f155 24 3 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f156 22 2 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f165 12 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f179 3e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f182 31 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f1b7 76 c 0 0 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 f221 8 0 0 0 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 f22d 66 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f22e 64 1 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f22f 62 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f293 53 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f2e6 96 c 0 4 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 f370 b 0 0 4 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 f37c 5 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f381 88 c 0 0 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 f3fd b 0 0 0 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 f409 5 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f40e 3 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f411 3e 2 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f412 3c 1 0 c 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 f413 3a 0 0 c 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 f41e 2e 0 0 c c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 f44f 129 6 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 f453 123 2 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 f454 121 1 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 f455 11f 0 0 8 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 f578 6b 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 f57c 4d 1 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 f57d 4b 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 f5e3 171 4 0 0 0 10 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f5e7 169 0 0 0 4 10 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 20 - ^ = -STACK WIN 4 f606 149 0 0 0 8 10 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 24 - ^ = $ebx $T0 20 - ^ = -STACK WIN 4 f607 141 0 0 0 c 10 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 24 - ^ = $ebx $T0 20 - ^ = -STACK WIN 4 f754 1d4 1e 0 18 0 b4 0 1 $T0 $ebp 96 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 f76d 1b1 5 0 18 4 b4 0 1 $T0 $ebp 96 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 184 - ^ = -STACK WIN 4 f76e 1ad 4 0 18 8 b4 0 1 $T0 $ebp 96 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 184 - ^ = -STACK WIN 4 f772 1a8 0 0 18 c b4 0 1 $T0 $ebp 96 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 184 - ^ = -STACK WIN 4 f928 2f6 17 0 4 0 1c4 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 f93e 2d6 1 0 4 4 1c4 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 456 - ^ = -STACK WIN 4 f93f 2d2 0 0 4 8 1c4 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 456 - ^ = -STACK WIN 4 fc1e 1ce 18 0 4 0 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 fc37 1ab 0 0 4 4 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 156 - ^ = -STACK WIN 4 fc38 1a7 0 0 4 8 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 156 - ^ = -STACK WIN 4 fc3f 19f 0 0 4 c 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 156 - ^ = -STACK WIN 4 fdec f3 7 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 fdf2 2c 1 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 fdf3 2a 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 fedf 5 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 fee4 170 c 0 8 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1000a 10 0 0 8 c 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 1001b b 0 0 8 c 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 1004c 7 0 0 8 c 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 10054 15f 10 0 14 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1005b a1 9 0 14 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 1005c b2 8 0 14 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 10064 96 0 0 14 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 101b3 1b 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 101ce 4f 6 0 c 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1021d 30 4 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1024d 36 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 10283 e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 10291 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 102a7 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 102b8 13 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 102cb e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 102d9 13 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 102ec e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 102fa 13 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1030d e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1031b 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 10331 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 10342 13 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 10355 e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 10363 13 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 10376 e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 10384 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1039a 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 103ab 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 103c1 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 103d2 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 103e8 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 103f9 13 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1040c e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1041a c 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 10426 26 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1044c 21 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1046d 26 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 10493 21 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 106ab 33 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 106de 24 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 106e2 1e 2 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 10702 4a a 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 10707 44 5 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 10708 42 4 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 1074c 9b0 2c 0 10 0 278 0 1 $T0 $ebp 504 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1076e 960 a 0 10 4 278 0 1 $T0 $ebp 504 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 636 - ^ = -STACK WIN 4 10775 956 3 0 10 8 278 0 1 $T0 $ebp 504 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 636 - ^ = -STACK WIN 4 10778 952 0 0 10 c 278 0 1 $T0 $ebp 504 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 636 - ^ = -STACK WIN 4 110fc 129 8 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 11103 120 1 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 11104 11e 0 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 11225 33 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 11258 24 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1125c 1e 2 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1127c 4a a 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 11281 44 5 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 11282 42 4 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 112c6 10 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 112d6 f88 2a 0 10 0 8d0 0 1 $T0 $ebp 656 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 112f8 f39 8 0 10 4 8d0 0 1 $T0 $ebp 656 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 2260 - ^ = -STACK WIN 4 112f9 f35 7 0 10 8 8d0 0 1 $T0 $ebp 656 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 2260 - ^ = -STACK WIN 4 11300 f2d 0 0 10 c 8d0 0 1 $T0 $ebp 656 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 2260 - ^ = -STACK WIN 4 1225e c2 11 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1226f 9e 0 0 4 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 12320 9b c 0 4 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 123b2 8 0 0 4 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 123bb 46 c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 123f8 8 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 12401 113 8 0 10 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 12408 21 1 0 10 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 12409 1f 0 0 10 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 12514 17 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1252b 83 13 0 10 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 12534 78 a 0 10 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1253e 6d 0 0 10 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 125ae 119 c 0 10 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 126bd 9 0 0 10 c 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 126c7 7d 8 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 126ce 75 1 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 126cf 73 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 126fd 2c 0 0 8 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 12 - ^ = -STACK WIN 4 12744 81 b 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 12749 7b 6 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 1274e 75 1 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 1274f 73 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 127c5 71 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 127e6 4f 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 12836 a0 c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 128c8 d 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 128d6 22 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 128f8 19f c 0 0 c 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 129c5 e 0 0 0 c 28 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 12a8e 8 0 0 0 c 28 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 12a97 115 c 0 8 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 12b7f 2c 0 0 8 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 12bac 11e c 0 c c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 12ca3 d 0 0 c c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 12cca 3f 9 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 12cd3 34 0 0 8 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 12cec 18 0 0 8 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 12d09 21b c 0 8 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 12e47 e 0 0 8 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 12f24 79 7 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 12f2b 70 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 12f61 39 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 12f62 37 0 0 c c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 12f9d 21 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 12fbe 46 b 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 12fc9 3a 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 13004 3c 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 13009 36 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 13040 48 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 13088 2b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 130b3 314 11 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 130c0 305 4 0 8 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 130c4 300 0 0 8 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 130f1 2d2 0 0 8 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 133c7 b0 d 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 133cd a9 7 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 133d4 a1 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 13477 106 11 0 4 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 13483 f8 5 0 4 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 13484 f6 4 0 4 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 13488 f1 0 0 4 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 1357d 2df 12 0 c 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1358a 2d0 5 0 c 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 1358b 2ce 4 0 c 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 1358f 2c9 0 0 c c c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 1385c cd 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 13929 2e2 f 0 0 0 138 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 13938 294 0 0 0 4 138 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 316 - ^ = -STACK WIN 4 1394d 27e 0 0 0 8 138 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 316 - ^ = -STACK WIN 4 13950 27a 0 0 0 c 138 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 316 - ^ = -STACK WIN 4 13c0b a8 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 13c0c a6 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 13c54 5d 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 13cb3 2e3 2a 0 4 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 13cd7 2bd 6 0 4 4 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 13cdc 2b7 1 0 4 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 13cdd 2b5 0 0 4 c 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 13f96 72 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 13f97 70 6 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 13f98 6e 5 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 13f9d 68 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 14008 7c c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 14079 a 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 14084 d 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14091 d 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1409e d 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 140ab f3 23 0 0 4 328 0 1 $T0 $ebp 680 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1419e 1e 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 142f3 a3 c 0 4 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 14385 10 0 0 4 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 14396 6 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1439c 1b 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 143b7 26 3 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 143b8 24 2 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 143dd 63 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14440 474 a 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14447 42e 3 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 14448 42c 2 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 14449 42a 1 0 0 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 1444a 428 0 0 0 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 148b4 b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 148bf d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 148cc e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 148da e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 148e8 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 148f6 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14904 12 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14916 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14924 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14932 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14940 b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1494b b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14956 b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14961 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1496f b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1497a e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14988 19 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 149a1 84 13 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 149a2 80 12 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 149a3 7e 11 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 149c9 57 0 0 8 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 12 - ^ = -STACK WIN 4 14a25 d 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14a32 12 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14a44 9c 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14a57 86 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14ae0 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14aea 5 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14aef 7 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14af6 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14b00 8 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14b08 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14b12 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14b1c 8 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14b24 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14b2e 8 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14b36 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14b40 8 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14b48 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14b52 8 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14b5a 7b 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14b5d 75 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14bd5 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14bde 25 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14c03 d 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14c10 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14c14 29 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14c26 f 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14c3d 16 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14c53 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14c57 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14c5b 1b 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14c76 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14c7a 2f 6 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14ca9 25 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14cce 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14cd2 d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14cdf e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14ced 20 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14d0d 25 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14d32 33 6 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 14d65 34 6 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 14d99 13 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14dac 56 8 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14db2 4d 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14e02 61 b 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14e03 5d a 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14e04 59 9 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14e63 17 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14e7a 15 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14e8f 14 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14ea3 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14eb1 14 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14ec5 25 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14ec6 23 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14ed2 14 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14eea 38 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14eeb 36 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14eec 32 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14f22 91 7 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 14f26 89 3 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 14f27 87 2 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 14f5c 40 0 0 8 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 14fb3 35 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14fb6 2f 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14fe8 81 b 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14fe9 7d a 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14fea 79 9 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15069 1e 3 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1506a 1c 2 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15087 47 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15088 43 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 150ce 47 7 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 150cf 45 6 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 150d0 43 5 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 150d1 41 4 0 0 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 15115 65 11 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15116 61 10 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 1511b 5b b 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 1511c 57 a 0 8 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 1517a 12 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1518c 31 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 151bd f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 151cc f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 151db 1d 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 151f8 33 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1522b 73 7 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1522f 6b 3 0 14 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15230 5b 2 0 14 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1529e 2f 3 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 152cd f 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 152dc 79 4 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 152dd 75 3 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 152de 71 2 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15355 68 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15356 64 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 153bd a6 3 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 153be a2 2 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 153de 81 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 153f0 6e 0 0 8 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 15463 26 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15464 22 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15489 31 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1548e 29 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 154ba d0 7 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 154be b3 3 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 154bf b1 2 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 154ce 9f 0 0 8 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 1558a 69 13 0 8 0 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1559b 4f 2 0 8 4 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 1559c 4b 1 0 8 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 1559d 49 0 0 8 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 155f3 96 22 0 8 0 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15607 79 e 0 8 4 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15615 66 0 0 8 8 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1563a 29 0 0 8 c 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 52 - ^ = -STACK WIN 4 15689 2e 1 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1568a 2a 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 156b7 62 8 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 156b8 5e 7 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 156b9 5a 6 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15719 8b a 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1571a 87 9 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1571b 83 8 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 157a4 1c 9 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 157a5 18 8 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 157c0 2a 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 157c5 22 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 157ea a6 5 0 4 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15890 37 3 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 158c7 51 1 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 158c8 4d 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15918 2e 1 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15919 2a 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15946 6a a 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15947 66 9 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 1594e 5e 2 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 159b0 6c a 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 159b1 68 9 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 159b2 64 8 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15a1c e0 e 0 4 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15a23 d7 7 0 4 4 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15a2a cd 0 0 4 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15a45 b1 0 0 4 c 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 15afc 4f 6 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15b02 47 0 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15b4b 22 5 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15b6d 22 5 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15b8f 22 5 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15bb1 2e 1 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15bb2 2a 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15bdf 2e 1 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15be0 2a 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15c0d 141 7 0 8 0 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15c14 138 0 0 8 4 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15c95 b3 0 0 8 8 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 15c96 b1 0 0 8 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 15d4e d4 6 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15e22 c4 e 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15ee6 7e d 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15f64 125 11 0 10 0 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15f75 112 0 0 10 4 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 16089 15f f 0 8 0 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 16098 4a 0 0 8 4 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 160f0 b3 0 0 8 8 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 161e8 31 6 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 16219 12 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1622b 12 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1623d 12 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1624f 150 7 0 8 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 16256 147 0 0 8 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1639f a0 6 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1643f 50 5 0 4 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1648f 2bb 2b 0 4 0 d0 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 164aa 296 10 0 4 4 d0 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 212 - ^ = -STACK WIN 4 164b3 28a 7 0 4 8 d0 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 212 - ^ = -STACK WIN 4 164ba 282 0 0 4 c d0 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 212 - ^ = -STACK WIN 4 1674a d9 b 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 167b8 17 0 0 c 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 16823 14 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 16837 1b8 18 0 4 0 60 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 16848 1a0 7 0 4 4 60 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1684f 18d 0 0 4 8 60 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 16870 168 0 0 4 c 60 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 108 - ^ = -STACK WIN 4 169ef 56f 22 0 c 0 a0 0 1 $T0 $ebp 108 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 16a03 97 e 0 c 4 a0 0 1 $T0 $ebp 108 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 164 - ^ = -STACK WIN 4 16a11 88 0 0 c 8 a0 0 1 $T0 $ebp 108 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 164 - ^ = -STACK WIN 4 16f5e 153 10 0 8 0 d0 0 1 $T0 $ebp 112 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 16f82 11b 0 0 8 4 d0 0 1 $T0 $ebp 112 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 212 - ^ = -STACK WIN 4 16f89 113 0 0 8 8 d0 0 1 $T0 $ebp 112 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 212 - ^ = -STACK WIN 4 16f92 109 0 0 8 c d0 0 1 $T0 $ebp 112 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 212 - ^ = -STACK WIN 4 170b1 1ea 1b 0 8 0 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 170cc 1c8 0 0 8 4 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 17154 111 0 0 8 8 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 64 - ^ = -STACK WIN 4 17155 10f 0 0 8 c 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 64 - ^ = -STACK WIN 4 1729b e4 15 0 4 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 172a2 db e 0 4 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 172b0 ca 0 0 4 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1737f f 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1738e 100 19 0 4 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1739a f2 d 0 4 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 173a7 e4 0 0 4 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 1748e 46 3 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 174d4 92 6 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 17566 b42 14 0 8 0 6c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 17571 b35 9 0 8 4 6c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1757a b2b 0 0 8 8 6c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 175e3 abe 0 0 8 c 6c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 120 - ^ = -STACK WIN 4 180a8 211 13 0 4 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 180af 208 c 0 4 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 180bb 1fb 0 0 4 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 182b9 28b 1f 0 4 0 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 182c5 27a 13 0 4 4 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 156 - ^ = -STACK WIN 4 182c6 278 12 0 4 8 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 156 - ^ = -STACK WIN 4 182d8 263 0 0 4 c 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 156 - ^ = -STACK WIN 4 18544 341 d 0 8 0 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 18589 2f7 0 0 8 4 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 52 - ^ = -STACK WIN 4 185f0 28f 0 0 8 8 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 52 - ^ = -STACK WIN 4 185f1 28d 0 0 8 c 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 52 - ^ = -STACK WIN 4 18885 4e4 18 0 14 0 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 18893 4d4 a 0 14 4 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 88 - ^ = -STACK WIN 4 18894 4d2 9 0 14 8 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 88 - ^ = -STACK WIN 4 1889d 4c8 0 0 14 c 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 88 - ^ = -STACK WIN 4 18d69 14c 6 0 0 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 18eb5 116 5 0 10 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 18ed6 59 0 0 10 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 18fcb 1b 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 18fe6 1b 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19001 1b 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1901c a3 f 0 18 c 94 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 190b6 8 0 0 18 c 94 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 190bf a3 f 0 1c c 94 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 19159 8 0 0 1c c 94 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 19162 387 12 0 8 0 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 19172 350 2 0 8 4 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 19173 34e 1 0 8 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 19174 34c 0 0 8 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 194e9 13e 7 0 8 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 194f0 135 0 0 8 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 19627 b1 6 0 8 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 196d8 64 7 0 8 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 196df 5b 0 0 8 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1973c 57 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19793 8f 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19822 14 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19836 14 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1984a 87 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 198d1 e3 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 199b4 1bd 9 0 c 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 199bb 1b4 2 0 c 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 199bc 1b2 1 0 c 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 199bd 1b0 0 0 c c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 19b71 71 b 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19b76 6b 6 0 c 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 19b7b 65 1 0 c 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 19b7c 63 0 0 c c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 19be2 b3 e 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 19be6 1a a 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 19be7 2e 9 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 19bf0 e 0 0 10 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 19c95 46 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19c9a 40 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19cdb a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19ce5 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19ceb 51 6 0 10 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 19d3c 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19d51 13 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19d64 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19d79 13 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19d8c 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19da1 13 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19db4 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19dcc 16 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19de2 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19dfa 16 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19e10 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19e28 16 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19e3e 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19e56 16 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19e6c 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19e81 13 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19e94 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19ea9 13 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19ebc 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19ed1 13 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19ee4 53 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 19f37 e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19f45 44 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19f89 1de 1a 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 19f9a 1c6 9 0 8 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 19f9b 1c2 8 0 8 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 19fa3 1b9 0 0 8 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 1a167 78 c 0 8 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1a1d5 9 0 0 8 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 1a1df 5 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a1e4 1f7 8 0 14 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1a1eb 1ee 1 0 14 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 1a1ec 1ec 0 0 14 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 1a246 174 0 0 14 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 1a3db 29 3 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1a404 1b 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a41f 2a 3 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1a449 1b 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a464 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a46d 54 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1a4c1 2b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a4ec 4f 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1a53b 29 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a564 4f 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1a5b3 29 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a5dc 4f 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1a62b 29 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a654 54 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1a6a8 2b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a6d3 4f 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1a722 29 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a74b 4f 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1a79a 29 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a7c3 54 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1a817 2b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a842 54 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1a896 2b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a8c1 54 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1a915 2b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a940 4f 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1a98f 29 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a9b8 d 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a9c5 8 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a9cd 1f 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a9ec 1a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1aa06 1f 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1aa25 1c 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1aa41 12 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1aa53 1b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1aa6e 13b 1d 0 18 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1aa83 126 8 0 18 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 1aba9 3b 6 0 18 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1abe4 13d 1d 0 18 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1abf9 128 8 0 18 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 1ad21 3b 6 0 18 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1ad5c 1a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1ad76 3a2 1d 0 20 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1ad87 391 c 0 20 c 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 1b118 43 6 0 24 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1b15b 1b8 1d 0 1c 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1b170 1a3 8 0 1c c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 1b313 40 6 0 20 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1b353 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1b359 29 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1b382 419 6 0 0 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1b3a4 3f5 0 0 0 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 1b3a5 3ed 0 0 0 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 1b79b 190 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1b79c 18e 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1b92b 73 4 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1b92c 71 3 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 1b92d 6f 2 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 1b92e 6d 1 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 1b92f 6b 0 0 4 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 1b99e 33 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1b9a5 16 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 1b9a6 14 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 1b9d1 40 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1b9d2 3e 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1ba11 1c8 11 0 4 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1ba18 1bf a 0 4 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 1ba1c 1ba 6 0 4 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 1ba22 1b3 0 0 4 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 1bbd9 33 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1bbe0 16 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 1bbe1 14 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 1bc0c 89 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1bc0d 87 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1bc95 2c4 c 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1bc9c 2bb 5 0 4 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 1bc9d 2b9 4 0 4 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 1bca1 2b4 0 0 4 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 1bf59 395 1b 0 4 0 48 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1bf6a 37d a 0 4 4 48 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 76 - ^ = -STACK WIN 4 1bf6d 377 7 0 4 8 48 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 76 - ^ = -STACK WIN 4 1bf74 36f 0 0 4 c 48 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 76 - ^ = -STACK WIN 4 1c2ee 29 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1c317 16 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1c32d 26 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1c353 26 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1c379 26 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1c39f 3 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1c3a2 fe 9 0 4 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1c3a9 e9 2 0 4 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 1c3aa e7 1 0 4 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 1c3ab e5 0 0 4 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 1c4a0 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1c4a9 fe 9 0 4 0 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1c4b0 e9 2 0 4 4 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 1c4b1 e7 1 0 4 8 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 1c4b2 e5 0 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 1c5a7 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1c5b0 355 9 0 4 0 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1c5b7 34c 2 0 4 4 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 1c5b8 348 1 0 4 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 1c5b9 346 0 0 4 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 1c905 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1c90e 20 6 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1c912 1b 2 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1c917 15 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1c92e 36 6 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1c934 2f 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 1c964 79 8 0 4 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1c969 72 3 0 4 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 1c96a 70 2 0 4 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 1c9dd 3e6 11 0 10 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1c9e2 3df c 0 10 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 1c9e9 3d7 5 0 10 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 1c9ea 3d5 4 0 10 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 1cdc3 45d 1d 0 18 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1cdd7 449 9 0 18 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 1d220 1af a 0 18 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d22a 1a3 0 0 18 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 1d270 15c 0 0 18 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 1d2a3 128 0 0 18 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 1d3cf 1e 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d3ed 1d 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1d40a 1e 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d428 26 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1d496 60 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d49c 56 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 1d4a5 45 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 1d4a6 43 0 0 c c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 1d4f6 14 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1d50a 77 11 0 0 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d51b 5f 0 0 0 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d581 1e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1d59f 32 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1d5a0 30 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1d5d1 1b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1d5ec 96 12 0 4 0 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d5fd 7c 1 0 4 4 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d5fe 78 0 0 4 8 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d682 72 11 0 8 0 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d693 5a 0 0 8 4 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d6cf 13 0 0 8 8 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d6f4 1d0 13 0 4 0 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d705 1b6 2 0 4 4 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 128 - ^ = -STACK WIN 4 1d706 1b2 1 0 4 8 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 128 - ^ = -STACK WIN 4 1d707 1b0 0 0 4 c 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 128 - ^ = -STACK WIN 4 1d8c4 bf 12 0 4 0 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d8d5 a5 1 0 4 4 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d8d6 a1 0 0 4 8 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d983 2c 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1d9af 65 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1da14 3c 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1da50 1e3 4 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1da51 1e1 3 0 c 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 1da52 1df 2 0 c 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 1da53 1dd 1 0 c c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 1da54 1db 0 0 c 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 1dc33 12 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1dc45 18 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1dc5d 40 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1dc9d 78 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1dd15 1490 4 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1dd16 83f 3 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1dd17 83d 2 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1f1a5 1680 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1f1a9 15f8 1 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1f1aa 15f6 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1f1db 86c 0 0 c c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 20825 be 9 0 c 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 2082e a9 0 0 c 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 20840 96 0 0 c 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 20930 82 6 0 c 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 209b2 6e 4 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 20a20 5 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20a25 22b 8 0 14 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 20a2c 222 1 0 14 4 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 20a2d 220 0 0 14 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 20a8b 1c1 0 0 14 c 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 20c50 29 3 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 20c79 1b 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20c94 2a 3 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 20cbe 1b 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20cd9 1f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20cf8 1f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20d17 2d 9 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20d20 23 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20d44 94 6 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20d45 92 5 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20d4a 8c 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20dd8 cd c 0 4 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 20e9b 9 0 0 4 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 20ea5 2c 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20ea6 2a 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20ed1 2a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20efb 22 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20efc 20 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20f1d d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20f64 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20f75 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20f8a 5 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20f8f 5 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20f94 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20fa5 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 20fba 50 c 0 0 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 20fd7 1c 0 0 0 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 2100a 60 9 0 0 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 21013 57 0 0 0 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 2106a d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 21077 170 5 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 2107c 169 0 0 8 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 210e1 103 0 0 8 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 21125 be 0 0 8 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 211e7 182 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 21369 b6 7 0 c 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 21370 ad 0 0 c 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 2141f 2f 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2147c 47 10 0 4 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 214c3 1b2 2a 0 18 8 34 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 214e0 195 d 0 18 c 34 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 56 - ^ = -STACK WIN 4 21675 34 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2167a 2e 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 216a9 34 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 216ae 2e 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 216dd 34 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 216e2 2e 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 21711 a2 c 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 21718 99 5 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 2171d 93 0 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 2172b 84 0 0 10 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 217b3 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 217b9 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 217bf 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 217c5 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 217cb c 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 217d7 c 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 217e3 c 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 217ef 349 c 0 0 c 3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 21a99 d 0 0 0 c 3c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 21b38 1f5 14 0 24 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 21b47 1e4 5 0 24 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 21b48 1e2 4 0 24 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 21b49 1e0 3 0 24 c c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 21d2d 1ae 5 0 0 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 21d32 15f 0 0 0 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 21d62 12e 0 0 0 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 21edb 4f c 0 0 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 21f21 8 0 0 0 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 21f2a 38 c 0 0 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 21f59 8 0 0 0 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 21f62 41 c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 21f9a 8 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 21fa3 35 a 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 21fa8 2f 5 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 21fad 27 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 21fd8 d3 7 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 21fdf ca 0 0 c 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 22020 88 0 0 c 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 22068 33 0 0 c c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 220ab 50 4 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 220af 4a 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 220fb f0 e 0 10 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 22102 e7 7 0 10 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 22108 e0 1 0 10 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 22109 de 0 0 10 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 221eb 5c 4 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 221ef 56 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 22247 db 8 0 c 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 2224c d2 3 0 c 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 2224d d0 2 0 c 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 22277 a5 0 0 c c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 22322 28 3 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 2234a 25 3 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 2236f 18 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 22387 f6 c 0 14 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 2238e eb 5 0 14 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 22393 e5 0 0 14 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 2247d 33 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 22498 16 0 0 14 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 224b0 1d 4 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 224b4 17 0 0 14 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 224cd 224 17 0 1c 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 224e2 20f 2 0 1c c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 226f1 3e 6 0 1c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 2272f 294 8 0 14 0 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 22736 28b 1 0 14 4 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 60 - ^ = -STACK WIN 4 22737 289 0 0 14 8 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 60 - ^ = -STACK WIN 4 22793 1f9 0 0 14 c 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 60 - ^ = -STACK WIN 4 229c3 29 3 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 229ec 1b 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 22a07 2a 3 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 22a31 1b 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 22a7b 81 8 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 22a83 70 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 22a92 60 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 22a93 5e 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 22afc 93 7 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 22b00 8d 3 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 22b01 8b 2 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 22b40 4b 0 0 c c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 22b8f a2 6 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 22b94 9b 1 0 8 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 22b95 99 0 0 8 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 22c31 83 c 0 4 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 22cab 8 0 0 4 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 22cb4 d8 c 0 10 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 22d83 8 0 0 10 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 22d8c e6 c 0 c c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 22e69 8 0 0 c c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 22e72 8 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 22e7a 117 8 0 8 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 22e81 10e 1 0 8 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 22e82 10c 0 0 8 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 22f91 27 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 23021 ec 7 0 10 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 23028 e3 0 0 10 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 23088 82 0 0 10 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 2310d 17 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 23124 95 a 0 0 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 2312a 7d 4 0 0 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 2312b 7b 3 0 0 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 2312e 77 0 0 0 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 231b9 1a 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 231d3 1a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 231ed 389 16 0 18 8 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 23201 375 2 0 18 c 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 48 - ^ = -STACK WIN 4 23576 40 6 0 20 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 235b6 f8 7 0 10 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 235bd ef 0 0 10 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 2361d 8e 0 0 10 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 236ae 27 3 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 236d5 4d 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 236d6 48 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 23722 5d 4 0 0 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 2373e 3f 0 0 0 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 2373f 3d 0 0 0 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 2377f 24c f 0 8 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 23789 95 5 0 8 4 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 2378e 8f 0 0 8 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 237b1 6b 0 0 8 c 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 239cb 50 6 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 239cc 4e 5 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 239d1 48 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 239dc 3c 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 239dd 3a 0 0 4 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 23a1b ba 7 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 23a22 b1 0 0 c 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 23a5f 73 0 0 c 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 23ad5 13 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 240b9 14 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 0 1000 13 0 0 4 0 0 0 0 0 -STACK WIN 0 1020 1b 0 0 10 0 0 0 0 0 -STACK WIN 0 1040 1b 0 0 10 0 0 0 0 0 -STACK WIN 0 1060 19 8 0 4 0 0 0 0 0 -STACK WIN 0 1080 b 0 0 0 0 0 0 0 0 -STACK WIN 0 1090 24 3 0 4 0 0 0 0 0 -STACK WIN 0 10c0 f 0 0 8 0 0 0 0 0 -STACK WIN 0 10d0 17 0 0 4 0 0 0 0 0 -STACK WIN 0 10f0 27 9 0 10 0 0 0 0 0 -STACK WIN 0 1120 27 9 0 10 0 0 0 0 0 -STACK WIN 0 1150 d 0 0 8 0 0 0 0 0 -STACK WIN 0 1160 13 0 0 4 0 0 0 0 0 -STACK WIN 0 1180 21 d 0 10 0 0 0 0 0 -STACK WIN 0 11b0 21 d 0 10 0 0 0 0 0 -STACK WIN 0 11e0 7 0 0 0 0 0 0 0 0 -STACK WIN 0 11f0 6b 28 0 4 8 10 0 0 0 -STACK WIN 0 1260 32 3 0 0 0 0 0 0 0 -STACK WIN 0 12a0 e 0 0 0 0 0 0 0 0 -STACK WIN 0 12b0 47 3 0 4 0 0 0 0 0 -STACK WIN 0 1300 19 8 0 4 0 0 0 0 0 -STACK WIN 0 1320 32 3 0 0 0 0 0 0 0 -STACK WIN 0 1360 47 3 0 4 0 0 0 0 0 -STACK WIN 0 13b0 19 8 0 4 0 0 0 0 0 -STACK WIN 0 13d0 32 3 0 0 0 0 0 0 0 -STACK WIN 0 1410 47 3 0 4 0 0 0 0 0 -STACK WIN 0 1460 19 8 0 4 0 0 0 0 0 -STACK WIN 0 1480 71 29 0 4 c 10 0 0 0 -STACK WIN 0 1500 1b 0 0 8 0 0 0 0 0 -STACK WIN 0 1520 35 4 0 0 0 0 0 0 0 -STACK WIN 0 1560 20b 2d 0 14 14 14 0 0 1 -STACK WIN 0 19f0 31 0 0 0 0 0 0 0 0 -STACK WIN 0 1a30 51 d 0 4 c 0 0 0 0 -STACK WIN 0 1a90 c7 7 0 4 10 8 0 0 1 -STACK WIN 0 1b60 36 0 0 0 0 0 0 0 0 -STACK WIN 0 1ba0 3 0 0 0 0 0 0 0 0 -STACK WIN 0 1db0 81 2 0 8 0 0 0 0 0 -STACK WIN 0 1e40 1d 7 0 0 0 0 0 0 0 -STACK WIN 0 1e60 a2 3a 0 4 10 c4 0 0 0 -STACK WIN 0 1f10 142 c 0 c 0 38 0 0 1 -STACK WIN 0 2060 138 38 0 0 8 244 0 0 0 -STACK WIN 0 21a0 3b 7 0 4 0 0 0 0 0 -STACK WIN 0 21e0 25 5 0 4 0 0 0 0 0 -STACK WIN 0 2210 26 3 0 0 0 0 0 0 0 -STACK WIN 0 2240 e 0 0 0 0 0 0 0 0 -STACK WIN 0 2250 4 0 0 0 0 0 0 0 0 -STACK WIN 0 2260 11 0 0 0 0 0 0 0 0 -STACK WIN 0 2280 27 3 0 0 0 0 0 0 0 -STACK WIN 0 22b0 b 0 0 0 0 0 0 0 0 -STACK WIN 0 22c0 24 3 0 4 0 0 0 0 0 -STACK WIN 0 22f0 e 0 0 0 0 0 0 0 0 -STACK WIN 0 2300 c 0 0 0 0 0 0 0 0 -STACK WIN 0 2310 26 0 0 0 0 0 0 0 0 -STACK WIN 0 2340 1d 1 0 0 0 0 0 0 0 -STACK WIN 0 2360 1d 1 0 0 0 0 0 0 0 -STACK WIN 0 2380 13 0 0 0 0 0 0 0 0 -STACK WIN 0 23a0 23 0 0 0 0 0 0 0 0 -STACK WIN 0 23d0 56 5 0 0 8 c 0 0 0 -STACK WIN 0 2430 47 c 0 0 c 8 0 0 0 -STACK WIN 0 24f0 23 1 0 0 0 4 0 0 0 -STACK WIN 0 2520 3f b 0 8 0 0 0 0 0 -STACK WIN 0 2560 20 0 0 0 0 0 0 0 0 -STACK WIN 0 2580 20 0 0 0 0 0 0 0 0 -STACK WIN 0 25a0 1d 0 0 0 0 0 0 0 0 -STACK WIN 0 25c0 da 11 0 c 0 0 0 0 1 -STACK WIN 0 26a0 27 8 0 4 0 0 0 0 0 -STACK WIN 0 26d0 4a d 0 8 0 0 0 0 0 -STACK WIN 0 2720 e 0 0 0 0 0 0 0 0 -STACK WIN 0 2730 5 2 0 4 0 0 0 0 0 -STACK WIN 0 2740 5 2 0 4 0 0 0 0 0 -STACK WIN 0 2750 3 2 0 0 0 0 0 0 0 -STACK WIN 0 2760 b 0 0 0 0 0 0 0 0 -STACK WIN 0 2770 ef 11 0 c 0 0 0 0 1 -STACK WIN 0 2860 2b 8 0 4 0 0 0 0 0 -STACK WIN 0 2890 4f d 0 8 0 0 0 0 0 -STACK WIN 0 28e0 e 0 0 0 0 0 0 0 0 -STACK WIN 0 28f0 5 2 0 4 0 0 0 0 0 -STACK WIN 0 2900 3 2 0 0 0 0 0 0 0 -STACK WIN 0 2910 13 0 0 0 0 0 0 0 0 -STACK WIN 0 2930 86 a 0 10 10 4 0 0 1 -STACK WIN 0 29c0 23 0 0 0 0 0 0 0 0 -STACK WIN 0 29f0 1 0 0 0 0 0 0 0 0 -STACK WIN 0 2a00 26 0 0 0 0 0 0 0 0 -STACK WIN 0 2a30 23 0 0 0 0 0 0 0 0 -STACK WIN 0 2a60 76 23 0 0 4 50 0 0 0 -STACK WIN 0 2ae0 3 0 0 4 0 0 0 0 0 -STACK WIN 0 2af0 1 0 0 0 0 0 0 0 0 -STACK WIN 0 2b00 21 0 0 0 0 0 0 0 0 -STACK WIN 0 2b30 32 6 0 4 8 0 0 0 0 -STACK WIN 0 2b70 2f 6 0 0 8 0 0 0 0 -STACK WIN 0 2ba0 20 0 0 0 0 0 0 0 0 -STACK WIN 0 2bc0 20 0 0 0 0 0 0 0 0 -STACK WIN 0 2be0 1d 0 0 0 0 0 0 0 0 -STACK WIN 0 2c00 c1 5 0 8 0 0 0 0 1 -STACK WIN 0 2cd0 83 8 0 8 0 0 0 0 1 -STACK WIN 0 2d60 1f 0 0 4 0 0 0 0 0 -STACK WIN 0 2d80 bc b 0 8 0 0 0 0 1 -STACK WIN 0 2e40 e 0 0 0 0 0 0 0 0 -STACK WIN 0 2e50 5 2 0 4 0 0 0 0 0 -STACK WIN 0 2e60 e 0 0 8 0 0 0 0 0 -STACK WIN 0 2e70 da 4 0 8 0 0 0 0 1 -STACK WIN 0 2f50 97 8 0 8 0 0 0 0 1 -STACK WIN 0 2ff0 4 0 0 0 0 0 0 0 0 -STACK WIN 0 3000 23 0 0 4 0 0 0 0 0 -STACK WIN 0 3030 c7 e 0 8 0 0 0 0 1 -STACK WIN 0 3100 e 0 0 0 0 0 0 0 0 -STACK WIN 0 3110 5 2 0 4 0 0 0 0 0 -STACK WIN 0 3120 e 0 0 8 0 0 0 0 0 -STACK WIN 0 3130 6 0 0 0 0 0 0 0 0 -STACK WIN 0 3140 208 6 0 8 10 8 0 0 1 -STACK WIN 0 33d0 1 0 0 0 0 0 0 0 0 -STACK WIN 0 33e0 8 0 0 0 0 0 0 0 0 -STACK WIN 0 33f0 56 3 0 0 0 10 0 0 0 -STACK WIN 0 3450 32 0 0 4 0 0 0 0 0 -STACK WIN 0 3490 28 0 0 0 0 0 0 0 0 -STACK WIN 0 34c0 19 0 0 0 0 0 0 0 0 -STACK WIN 0 34e0 21 0 0 0 0 0 0 0 0 -STACK WIN 0 3510 19 8 0 4 0 0 0 0 0 -STACK WIN 0 3530 7 0 0 0 0 0 0 0 0 -STACK WIN 0 3540 6 0 0 0 0 0 0 0 0 -STACK WIN 0 36d0 39 8 0 4 0 0 0 0 0 -STACK WIN 0 3710 6 0 0 0 0 0 0 0 0 -STACK WIN 0 38a0 3a 8 0 4 0 0 0 0 0 -STACK WIN 0 38e0 6 0 0 0 0 0 0 0 0 -STACK WIN 0 38f0 32 0 0 4 0 0 0 0 0 -STACK WIN 0 3930 19 0 0 0 0 0 0 0 0 -STACK WIN 0 3950 56 7 0 4 0 c 0 0 0 -STACK WIN 0 39b0 4 0 0 0 0 0 0 0 0 -STACK WIN 0 39c0 59 7 0 4 0 c 0 0 0 -STACK WIN 0 3a20 6 0 0 0 0 0 0 0 0 -STACK WIN 0 3a30 21 d 0 10 0 0 0 0 0 -STACK WIN 0 3a60 27 9 0 10 0 0 0 0 0 -STACK WIN 0 3a90 24 f 0 0 0 0 0 0 0 -STACK WIN 0 3ac0 1 0 0 0 0 0 0 0 0 -STACK WIN 0 3ad0 15 0 0 0 0 0 0 0 0 -STACK WIN 0 3af0 21 d 0 10 0 0 0 0 0 -STACK WIN 0 3b20 27 9 0 10 0 0 0 0 0 -STACK WIN 0 3b50 22 d 0 0 0 0 0 0 0 -STACK WIN 0 3b80 10 0 0 0 0 0 0 0 0 -STACK WIN 0 3b90 25 11 0 0 0 0 0 0 0 -STACK WIN 0 3bc0 4f a 0 0 0 10 0 0 0 -STACK WIN 0 3c10 54 7 0 8 0 c 0 0 0 -STACK WIN 0 3c70 57 7 0 8 0 c 0 0 0 -STACK WIN 0 3cd0 19 8 0 4 0 0 0 0 0 -STACK WIN 0 3cf0 7 1 0 0 0 4 0 0 0 -STACK WIN 0 3d00 21 d 0 14 0 0 0 0 0 -STACK WIN 0 3d30 7 1 0 0 0 4 0 0 0 -STACK WIN 0 3d40 27 9 0 14 0 0 0 0 0 -STACK WIN 0 3d70 3 0 0 0 0 0 0 0 0 -STACK WIN 0 3d80 1 0 0 0 0 0 0 0 0 -STACK WIN 0 3d90 7 1 0 0 0 4 0 0 0 -STACK WIN 0 3da0 15 0 0 4 0 0 0 0 0 -STACK WIN 0 3dc0 1 0 0 4 0 0 0 0 0 -STACK WIN 0 3dd0 15 0 0 8 0 0 0 0 0 -STACK WIN 0 3df0 21 d 0 14 0 0 0 0 0 -STACK WIN 0 3e20 27 9 0 14 0 0 0 0 0 -STACK WIN 0 3e50 22 d 0 0 0 0 0 0 0 -STACK WIN 0 3e80 10 0 0 0 0 0 0 0 0 -STACK WIN 0 3e90 7 1 0 0 0 4 0 0 0 -STACK WIN 0 3ea0 25 11 0 c 0 0 0 0 0 -STACK WIN 0 3ed0 3 0 0 4 0 0 0 0 0 -STACK WIN 0 3ee0 15 0 0 0 0 0 0 0 0 -STACK WIN 0 3f00 22 d 0 8 0 0 0 0 0 -STACK WIN 0 3f30 13 0 0 0 0 0 0 0 0 -STACK WIN 0 3f50 1 0 0 0 0 0 0 0 0 -STACK WIN 0 3f60 15 0 0 8 0 0 0 0 0 -STACK WIN 0 3f80 22 d 0 0 0 0 0 0 0 -STACK WIN 0 3fb0 15 0 0 4 0 0 0 0 0 -STACK WIN 0 3fd0 15 0 0 4 0 0 0 0 0 -STACK WIN 0 3ff0 13 0 0 4 0 0 0 0 0 -STACK WIN 0 4010 ae e 0 4 0 54 0 0 0 -STACK WIN 0 40c0 ae e 0 4 0 4c 0 0 0 -STACK WIN 0 4170 40 7 0 4 0 0 0 0 0 -STACK WIN 0 4464 13 0 0 0 0 0 0 0 0 -STACK WIN 0 466c 16 0 0 0 0 0 0 0 0 -STACK WIN 0 46a0 9 0 0 0 0 0 0 0 0 -STACK WIN 0 46f2 a 0 0 0 0 0 0 0 0 -STACK WIN 0 5405 14 0 0 0 0 0 0 0 0 -STACK WIN 0 58bc a 0 0 0 0 0 0 0 0 -STACK WIN 0 6039 12 0 0 0 0 0 0 0 0 -STACK WIN 0 60e0 8b 0 0 4 0 0 0 0 0 -STACK WIN 0 71eb b 0 0 0 0 0 0 0 0 -STACK WIN 0 7a28 a 0 0 0 0 0 0 0 0 -STACK WIN 0 7b36 a 0 0 0 0 0 0 0 0 -STACK WIN 0 7cc5 9 0 0 0 0 0 0 0 0 -STACK WIN 0 7f28 4 0 0 0 0 0 0 0 0 -STACK WIN 0 8151 9 0 0 0 0 0 0 0 0 -STACK WIN 0 821f 9 0 0 0 0 0 0 0 0 -STACK WIN 0 8390 a 0 0 0 0 0 0 0 0 -STACK WIN 0 83ce 21 0 0 0 0 0 0 0 0 -STACK WIN 0 8477 9 0 0 0 0 0 0 0 0 -STACK WIN 0 8714 a 0 0 0 0 0 0 0 0 -STACK WIN 0 8747 a 0 0 0 0 0 0 0 0 -STACK WIN 0 8779 a 0 0 0 0 0 0 0 0 -STACK WIN 0 87b4 a 0 0 0 0 0 0 0 0 -STACK WIN 0 89d2 9 0 0 0 0 0 0 0 0 -STACK WIN 0 8a62 7c 0 0 0 0 0 0 0 0 -STACK WIN 0 8c49 4 0 0 0 0 0 0 0 0 -STACK WIN 0 8ce2 4 0 0 0 0 0 0 0 0 -STACK WIN 0 9694 9 0 0 0 0 0 0 0 0 -STACK WIN 0 9835 c 0 0 0 0 0 0 0 0 -STACK WIN 0 9841 c 0 0 0 0 0 0 0 0 -STACK WIN 0 9a66 4 0 0 0 0 0 0 0 0 -STACK WIN 0 9ab6 4 0 0 0 0 0 0 0 0 -STACK WIN 0 9ae0 4c 8 0 c 10 0 0 0 1 -STACK WIN 0 9c4a 6 0 0 0 0 0 0 0 0 -STACK WIN 0 9ca8 9 0 0 0 0 0 0 0 0 -STACK WIN 0 9ee5 9 0 0 0 0 0 0 0 0 -STACK WIN 0 9fd7 c 0 0 0 0 0 0 0 0 -STACK WIN 0 a04a 9 0 0 0 0 0 0 0 0 -STACK WIN 0 a163 c 0 0 0 0 0 0 0 0 -STACK WIN 0 a1b9 9 0 0 0 0 0 0 0 0 -STACK WIN 0 a1d0 88 0 0 8 0 0 0 0 0 -STACK WIN 0 a2c0 7a 0 0 c 0 0 0 0 0 -STACK WIN 0 c23c a 0 0 0 0 0 0 0 0 -STACK WIN 0 df29 14 0 0 0 0 0 0 0 0 -STACK WIN 0 dfed a 0 0 0 0 0 0 0 0 -STACK WIN 0 e257 c 0 0 0 0 0 0 0 0 -STACK WIN 0 e40d 15 0 0 0 0 0 0 0 0 -STACK WIN 0 e761 17 0 0 0 0 0 0 0 0 -STACK WIN 0 eaa4 c 0 0 0 0 0 0 0 0 -STACK WIN 0 eea0 9 0 0 0 0 0 0 0 0 -STACK WIN 0 f221 9 0 0 0 0 0 0 0 0 -STACK WIN 0 f370 c 0 0 0 0 0 0 0 0 -STACK WIN 0 f3fd c 0 0 0 0 0 0 0 0 -STACK WIN 0 1000a 11 0 0 0 0 0 0 0 0 -STACK WIN 0 1001b c 0 0 0 0 0 0 0 0 -STACK WIN 0 1004c 8 0 0 0 0 0 0 0 0 -STACK WIN 0 10558 90 3 0 c c 0 0 0 0 -STACK WIN 0 105e8 46 0 0 10 4 0 0 0 1 -STACK WIN 0 1064a 17 4 0 0 10 0 0 0 1 -STACK WIN 0 10661 19 0 0 0 0 0 0 0 0 -STACK WIN 0 10694 17 1 0 8 4 0 0 0 1 -STACK WIN 0 123b2 9 0 0 0 0 0 0 0 0 -STACK WIN 0 123f8 9 0 0 0 0 0 0 0 0 -STACK WIN 0 126bd a 0 0 0 0 0 0 0 0 -STACK WIN 0 128c8 e 0 0 0 0 0 0 0 0 -STACK WIN 0 129c5 f 0 0 0 0 0 0 0 0 -STACK WIN 0 12a8e 9 0 0 0 0 0 0 0 0 -STACK WIN 0 12b7f 2d 0 0 0 0 0 0 0 0 -STACK WIN 0 12ca3 e 0 0 0 0 0 0 0 0 -STACK WIN 0 12e47 f 0 0 0 0 0 0 0 0 -STACK WIN 0 14079 b 0 0 0 0 0 0 0 0 -STACK WIN 0 14221 84 3 0 8 c 0 0 0 0 -STACK WIN 0 142a5 23 0 0 0 0 0 0 0 0 -STACK WIN 0 142f0 3 0 0 0 0 0 0 0 0 -STACK WIN 0 14385 11 0 0 0 0 0 0 0 0 -STACK WIN 0 190b6 9 0 0 0 0 0 0 0 0 -STACK WIN 0 19159 9 0 0 0 0 0 0 0 0 -STACK WIN 0 1a1d5 a 0 0 0 0 0 0 0 0 -STACK WIN 0 20e9b a 0 0 0 0 0 0 0 0 -STACK WIN 0 20fd7 1c 0 0 0 0 0 0 0 0 -STACK WIN 0 21a99 e 0 0 0 0 0 0 0 0 -STACK WIN 0 21f21 9 0 0 0 0 0 0 0 0 -STACK WIN 0 21f59 9 0 0 0 0 0 0 0 0 -STACK WIN 0 21f9a 9 0 0 0 0 0 0 0 0 -STACK WIN 0 22cab 9 0 0 0 0 0 0 0 0 -STACK WIN 0 22d83 9 0 0 0 0 0 0 0 0 -STACK WIN 0 22e69 9 0 0 0 0 0 0 0 0 -STACK WIN 0 23b00 be 0 0 8 0 0 0 0 0 diff --git a/toolkit/crashreporter/google-breakpad/src/processor/testdata/write_av_non_null.dmp b/toolkit/crashreporter/google-breakpad/src/processor/testdata/write_av_non_null.dmp deleted file mode 100755 index 1ec80ea23c9b..000000000000 Binary files a/toolkit/crashreporter/google-breakpad/src/processor/testdata/write_av_non_null.dmp and /dev/null differ diff --git a/toolkit/crashreporter/google-breakpad/src/processor/tokenize.cc b/toolkit/crashreporter/google-breakpad/src/processor/tokenize.cc index f468120c0c23..8fce87a22435 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/tokenize.cc +++ b/toolkit/crashreporter/google-breakpad/src/processor/tokenize.cc @@ -36,7 +36,7 @@ namespace google_breakpad { -#ifdef _WIN32 +#ifdef _MSC_VER #define strtok_r strtok_s #endif diff --git a/toolkit/crashreporter/google-breakpad/src/processor/windows_frame_info.h b/toolkit/crashreporter/google-breakpad/src/processor/windows_frame_info.h index a071e8e44a7a..c92c610c7d8b 100644 --- a/toolkit/crashreporter/google-breakpad/src/processor/windows_frame_info.h +++ b/toolkit/crashreporter/google-breakpad/src/processor/windows_frame_info.h @@ -46,7 +46,7 @@ #include "common/using_std_string.h" #include "google_breakpad/common/breakpad_types.h" -#include "common/logging.h" +#include "processor/logging.h" #include "processor/tokenize.h" namespace google_breakpad { diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/curl/curl.h b/toolkit/crashreporter/google-breakpad/src/third_party/curl/curl.h index 160cd98aa230..0d80936f75cf 100644 --- a/toolkit/crashreporter/google-breakpad/src/third_party/curl/curl.h +++ b/toolkit/crashreporter/google-breakpad/src/third_party/curl/curl.h @@ -74,7 +74,7 @@ require it! */ #if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \ defined(__minix) || defined(__SYMBIAN32__) || defined(__INTEGRITY) || \ - defined(ANDROID) + defined(__ANDROID__) #include #endif diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/curl/curlbuild.h b/toolkit/crashreporter/google-breakpad/src/third_party/curl/curlbuild.h index 648cf02de230..b0a53e6c9804 100644 --- a/toolkit/crashreporter/google-breakpad/src/third_party/curl/curlbuild.h +++ b/toolkit/crashreporter/google-breakpad/src/third_party/curl/curlbuild.h @@ -154,7 +154,8 @@ #endif /* The size of `long', as computed by sizeof. */ -#if defined(_M_X64) || (defined(__x86_64__) && !defined(__ILP32__)) +#if defined(_M_X64) || (defined(__x86_64__) && !defined(__ILP32__)) || \ + defined(__aarch64__) || (defined(__mips__) && _MIPS_SIM == _ABI64) #define CURL_SIZEOF_LONG 8 #else #define CURL_SIZEOF_LONG 4 @@ -170,7 +171,8 @@ typedef CURL_TYPEOF_CURL_SOCKLEN_T curl_socklen_t; /* Signed integral data type used for curl_off_t. */ -#if defined(_M_X64) || (defined(__x86_64__) && !defined(__ILP32__)) +#if defined(_M_X64) || (defined(__x86_64__) && !defined(__ILP32__)) || \ + defined(__aarch64__) #define CURL_TYPEOF_CURL_OFF_T long #else #define CURL_TYPEOF_CURL_OFF_T int64_t diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/AUTHORS b/toolkit/crashreporter/google-breakpad/src/third_party/glog/AUTHORS deleted file mode 100644 index ee92be88dcf1..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/AUTHORS +++ /dev/null @@ -1,2 +0,0 @@ -opensource@google.com - diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/COPYING b/toolkit/crashreporter/google-breakpad/src/third_party/glog/COPYING deleted file mode 100644 index 38396b580b37..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/COPYING +++ /dev/null @@ -1,65 +0,0 @@ -Copyright (c) 2008, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -A function gettimeofday in utilities.cc is based on - -http://www.google.com/codesearch/p?hl=en#dR3YEbitojA/COPYING&q=GetSystemTimeAsFileTime%20license:bsd - -The license of this code is: - -Copyright (c) 2003-2008, Jouni Malinen and contributors -All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -3. Neither the name(s) of the above-listed copyright holder(s) nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/ChangeLog b/toolkit/crashreporter/google-breakpad/src/third_party/glog/ChangeLog deleted file mode 100644 index 350fee921e37..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/ChangeLog +++ /dev/null @@ -1,59 +0,0 @@ -2010-06-15 Google Inc. - - * google-glog: version 0.3.1 - * GLOG_* environment variables now work even when gflags is installed. - * Snow leopard support. - * Now we can build and test from out side tree. - * Add DCHECK_NOTNULL. - * Add ShutdownGoogleLogging to close syslog (thanks DGunchev) - * Fix --enable-frame-pointers option (thanks kazuki.ohta) - * Fix libunwind detection (thanks giantchen) - -2009-07-30 Google Inc. - - * google-glog: version 0.3.0 - * Fix a deadlock happened when user uses glog with recent gflags. - * Suppress several unnecessary warnings (thanks keir). - * NetBSD and OpenBSD support. - * Use Win32API GetComputeNameA properly (thanks magila). - * Fix user name detection for Windows (thanks ademin). - * Fix several minor bugs. - -2009-04-10 Google Inc. - * google-glog: version 0.2.1 - * Fix timestamps of VC++ version. - * Add pkg-config support (thanks Tomasz) - * Fix build problem when building with gtest (thanks Michael) - * Add --with-gflags option for configure (thanks Michael) - * Fixes for GCC 4.4 (thanks John) - -2009-01-23 Google Inc. - * google-glog: version 0.2 - * Add initial Windows VC++ support. - * Google testing/mocking frameworks integration. - * Link pthread library automatically. - * Flush logs in signal handlers. - * Add macros LOG_TO_STRING, LOG_AT_LEVEL, DVLOG, and LOG_TO_SINK_ONLY. - * Log microseconds. - * Add --log_backtrace_at option. - * Fix some minor bugs. - -2008-11-18 Google Inc. - * google-glog: version 0.1.2 - * Add InstallFailureSignalHandler(). (satorux) - * Re-organize the way to produce stacktraces. - * Don't define unnecessary macro DISALLOW_EVIL_CONSTRUCTORS. - -2008-10-15 Google Inc. - * google-glog: version 0.1.1 - * Support symbolize for MacOSX 10.5. - * BUG FIX: --vmodule didn't work with gflags. - * BUG FIX: symbolize_unittest failed with GCC 4.3. - * Several fixes on the document. - -2008-10-07 Google Inc. - - * google-glog: initial release: - The glog package contains a library that implements application-level - logging. This library provides logging APIs based on C++-style - streams and various helper macros. diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/INSTALL b/toolkit/crashreporter/google-breakpad/src/third_party/glog/INSTALL deleted file mode 100644 index 0babe2430f1e..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/INSTALL +++ /dev/null @@ -1,297 +0,0 @@ -Installation Instructions -************************* - -Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, -2006, 2007 Free Software Foundation, Inc. - -This file is free documentation; the Free Software Foundation gives -unlimited permission to copy, distribute and modify it. - -Glog-Specific Install Notes -================================ - -*** NOTE FOR 64-BIT LINUX SYSTEMS - -The glibc built-in stack-unwinder on 64-bit systems has some problems -with the glog libraries. (In particular, if you are using -InstallFailureSignalHandler(), the signal may be raised in the middle -of malloc, holding some malloc-related locks when they invoke the -stack unwinder. The built-in stack unwinder may call malloc -recursively, which may require the thread to acquire a lock it already -holds: deadlock.) - -For that reason, if you use a 64-bit system and you need -InstallFailureSignalHandler(), we strongly recommend you install -libunwind before trying to configure or install google glog. -libunwind can be found at - - http://download.savannah.nongnu.org/releases/libunwind/libunwind-snap-070410.tar.gz - -Even if you already have libunwind installed, you will probably still -need to install from the snapshot to get the latest version. - -CAUTION: if you install libunwind from the URL above, be aware that -you may have trouble if you try to statically link your binary with -glog: that is, if you link with 'gcc -static -lgcc_eh ...'. This -is because both libunwind and libgcc implement the same C++ exception -handling APIs, but they implement them differently on some platforms. -This is not likely to be a problem on ia64, but may be on x86-64. - -Also, if you link binaries statically, make sure that you add --Wl,--eh-frame-hdr to your linker options. This is required so that -libunwind can find the information generated by the compiler required -for stack unwinding. - -Using -static is rare, though, so unless you know this will affect you -it probably won't. - -If you cannot or do not wish to install libunwind, you can still try -to use two kinds of stack-unwinder: 1. glibc built-in stack-unwinder -and 2. frame pointer based stack-unwinder. - -1. As we already mentioned, glibc's unwinder has a deadlock issue. -However, if you don't use InstallFailureSignalHandler() or you don't -worry about the rare possibilities of deadlocks, you can use this -stack-unwinder. If you specify no options and libunwind isn't -detected on your system, the configure script chooses this unwinder by -default. - -2. The frame pointer based stack unwinder requires that your -application, the glog library, and system libraries like libc, all be -compiled with a frame pointer. This is *not* the default for x86-64. - -If you are on x86-64 system, know that you have a set of system -libraries with frame-pointers enabled, and compile all your -applications with -fno-omit-frame-pointer, then you can enable the -frame pointer based stack unwinder by passing the ---enable-frame-pointers flag to configure. - - -Basic Installation -================== - -Briefly, the shell commands `./configure; make; make install' should -configure, build, and install this package. The following -more-detailed instructions are generic; see the `README' file for -instructions specific to this package. - - The `configure' shell script attempts to guess correct values for -various system-dependent variables used during compilation. It uses -those values to create a `Makefile' in each directory of the package. -It may also create one or more `.h' files containing system-dependent -definitions. Finally, it creates a shell script `config.status' that -you can run in the future to recreate the current configuration, and a -file `config.log' containing compiler output (useful mainly for -debugging `configure'). - - It can also use an optional file (typically called `config.cache' -and enabled with `--cache-file=config.cache' or simply `-C') that saves -the results of its tests to speed up reconfiguring. Caching is -disabled by default to prevent problems with accidental use of stale -cache files. - - If you need to do unusual things to compile the package, please try -to figure out how `configure' could check whether to do them, and mail -diffs or instructions to the address given in the `README' so they can -be considered for the next release. If you are using the cache, and at -some point `config.cache' contains results you don't want to keep, you -may remove or edit it. - - The file `configure.ac' (or `configure.in') is used to create -`configure' by a program called `autoconf'. You need `configure.ac' if -you want to change it or regenerate `configure' using a newer version -of `autoconf'. - -The simplest way to compile this package is: - - 1. `cd' to the directory containing the package's source code and type - `./configure' to configure the package for your system. - - Running `configure' might take a while. While running, it prints - some messages telling which features it is checking for. - - 2. Type `make' to compile the package. - - 3. Optionally, type `make check' to run any self-tests that come with - the package. - - 4. Type `make install' to install the programs and any data files and - documentation. - - 5. You can remove the program binaries and object files from the - source code directory by typing `make clean'. To also remove the - files that `configure' created (so you can compile the package for - a different kind of computer), type `make distclean'. There is - also a `make maintainer-clean' target, but that is intended mainly - for the package's developers. If you use it, you may have to get - all sorts of other programs in order to regenerate files that came - with the distribution. - - 6. Often, you can also type `make uninstall' to remove the installed - files again. - -Compilers and Options -===================== - -Some systems require unusual options for compilation or linking that the -`configure' script does not know about. Run `./configure --help' for -details on some of the pertinent environment variables. - - You can give `configure' initial values for configuration parameters -by setting variables in the command line or in the environment. Here -is an example: - - ./configure CC=c99 CFLAGS=-g LIBS=-lposix - - *Note Defining Variables::, for more details. - -Compiling For Multiple Architectures -==================================== - -You can compile the package for more than one kind of computer at the -same time, by placing the object files for each architecture in their -own directory. To do this, you can use GNU `make'. `cd' to the -directory where you want the object files and executables to go and run -the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. - - With a non-GNU `make', it is safer to compile the package for one -architecture at a time in the source code directory. After you have -installed the package for one architecture, use `make distclean' before -reconfiguring for another architecture. - -Installation Names -================== - -By default, `make install' installs the package's commands under -`/usr/local/bin', include files under `/usr/local/include', etc. You -can specify an installation prefix other than `/usr/local' by giving -`configure' the option `--prefix=PREFIX'. - - You can specify separate installation prefixes for -architecture-specific files and architecture-independent files. If you -pass the option `--exec-prefix=PREFIX' to `configure', the package uses -PREFIX as the prefix for installing programs and libraries. -Documentation and other data files still use the regular prefix. - - In addition, if you use an unusual directory layout you can give -options like `--bindir=DIR' to specify different values for particular -kinds of files. Run `configure --help' for a list of the directories -you can set and what kinds of files go in them. - - If the package supports it, you can cause programs to be installed -with an extra prefix or suffix on their names by giving `configure' the -option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. - -Optional Features -================= - -Some packages pay attention to `--enable-FEATURE' options to -`configure', where FEATURE indicates an optional part of the package. -They may also pay attention to `--with-PACKAGE' options, where PACKAGE -is something like `gnu-as' or `x' (for the X Window System). The -`README' should mention any `--enable-' and `--with-' options that the -package recognizes. - - For packages that use the X Window System, `configure' can usually -find the X include and library files automatically, but if it doesn't, -you can use the `configure' options `--x-includes=DIR' and -`--x-libraries=DIR' to specify their locations. - -Specifying the System Type -========================== - -There may be some features `configure' cannot figure out automatically, -but needs to determine by the type of machine the package will run on. -Usually, assuming the package is built to be run on the _same_ -architectures, `configure' can figure that out, but if it prints a -message saying it cannot guess the machine type, give it the -`--build=TYPE' option. TYPE can either be a short name for the system -type, such as `sun4', or a canonical name which has the form: - - CPU-COMPANY-SYSTEM - -where SYSTEM can have one of these forms: - - OS KERNEL-OS - - See the file `config.sub' for the possible values of each field. If -`config.sub' isn't included in this package, then this package doesn't -need to know the machine type. - - If you are _building_ compiler tools for cross-compiling, you should -use the option `--target=TYPE' to select the type of system they will -produce code for. - - If you want to _use_ a cross compiler, that generates code for a -platform different from the build platform, you should specify the -"host" platform (i.e., that on which the generated programs will -eventually be run) with `--host=TYPE'. - -Sharing Defaults -================ - -If you want to set default values for `configure' scripts to share, you -can create a site shell script called `config.site' that gives default -values for variables like `CC', `cache_file', and `prefix'. -`configure' looks for `PREFIX/share/config.site' if it exists, then -`PREFIX/etc/config.site' if it exists. Or, you can set the -`CONFIG_SITE' environment variable to the location of the site script. -A warning: not all `configure' scripts look for a site script. - -Defining Variables -================== - -Variables not defined in a site shell script can be set in the -environment passed to `configure'. However, some packages may run -configure again during the build, and the customized values of these -variables may be lost. In order to avoid this problem, you should set -them in the `configure' command line, using `VAR=value'. For example: - - ./configure CC=/usr/local2/bin/gcc - -causes the specified `gcc' to be used as the C compiler (unless it is -overridden in the site shell script). - -Unfortunately, this technique does not work for `CONFIG_SHELL' due to -an Autoconf bug. Until the bug is fixed you can use this workaround: - - CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash - -`configure' Invocation -====================== - -`configure' recognizes the following options to control how it operates. - -`--help' -`-h' - Print a summary of the options to `configure', and exit. - -`--version' -`-V' - Print the version of Autoconf used to generate the `configure' - script, and exit. - -`--cache-file=FILE' - Enable the cache: use and save the results of the tests in FILE, - traditionally `config.cache'. FILE defaults to `/dev/null' to - disable caching. - -`--config-cache' -`-C' - Alias for `--cache-file=config.cache'. - -`--quiet' -`--silent' -`-q' - Do not print messages saying which checks are being made. To - suppress all normal output, redirect it to `/dev/null' (any error - messages will still be shown). - -`--srcdir=DIR' - Look for the package's source code in directory DIR. Usually - `configure' can determine that directory automatically. - -`configure' also accepts some other, not widely useful, options. Run -`configure --help' for more details. - diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/Makefile.am b/toolkit/crashreporter/google-breakpad/src/third_party/glog/Makefile.am deleted file mode 100644 index 6ef6c2b16d9b..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/Makefile.am +++ /dev/null @@ -1,240 +0,0 @@ -## Process this file with automake to produce Makefile.in - -# Make sure that when we re-make ./configure, we get the macros we need -ACLOCAL_AMFLAGS = -I m4 - -# This is so we can #include -AM_CPPFLAGS = -I$(top_srcdir)/src - -# This is mostly based on configure options -AM_CXXFLAGS = - -# These are good warnings to turn on by default -if GCC - AM_CXXFLAGS += -Wall -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare -endif - -# These are x86-specific, having to do with frame-pointers -if X86_64 -if ENABLE_FRAME_POINTERS - AM_CXXFLAGS += -fno-omit-frame-pointer -else - # TODO(csilvers): check if -fomit-frame-pointer might be in $(CXXFLAGS), - # before setting this. - AM_CXXFLAGS += -DNO_FRAME_POINTER -endif -endif - -glogincludedir = $(includedir)/glog -## The .h files you want to install (that is, .h files that people -## who install this package can include in their own applications.) -## We have to include both the .h and .h.in forms. The latter we -## put in noinst_HEADERS. -gloginclude_HEADERS = src/glog/log_severity.h -nodist_gloginclude_HEADERS = src/glog/logging.h src/glog/raw_logging.h src/glog/vlog_is_on.h src/glog/stl_logging.h -noinst_HEADERS = src/glog/logging.h.in src/glog/raw_logging.h.in src/glog/vlog_is_on.h.in src/glog/stl_logging.h.in - -docdir = $(prefix)/share/doc/$(PACKAGE)-$(VERSION) -## This is for HTML and other documentation you want to install. -## Add your documentation files (in doc/) in addition to these -## top-level boilerplate files. Also add a TODO file if you have one. -dist_doc_DATA = AUTHORS COPYING ChangeLog INSTALL NEWS README README.windows \ - doc/designstyle.css doc/glog.html - -## The libraries (.so's) you want to install -lib_LTLIBRARIES = - -# The libraries libglog depends on. -COMMON_LIBS = $(PTHREAD_LIBS) $(GFLAGS_LIBS) $(UNWIND_LIBS) -# Compile switches for our unittest. -TEST_CFLAGS = $(GTEST_CFLAGS) $(GMOCK_CFLAGS) $(GFLAGS_CFLAGS) $(AM_CXXFLAGS) -# Libraries for our unittest. -TEST_LIBS = $(GTEST_LIBS) $(GMOCK_LIBS) $(GFLAGS_LIBS) - -## unittests you want to run when people type 'make check'. -## TESTS is for binary unittests, check_SCRIPTS for script-based unittests. -## TESTS_ENVIRONMENT sets environment variables for when you run unittest, -## but it only seems to take effect for *binary* unittests (argh!) -TESTS = -TESTS_ENVIRONMENT = -check_SCRIPTS = -# Every time you add a unittest to check_SCRIPTS, add it here too -noinst_SCRIPTS = -# Binaries used for script-based unittests. -TEST_BINARIES = - -TESTS += logging_unittest -logging_unittest_SOURCES = $(gloginclude_HEADERS) \ - src/logging_unittest.cc \ - src/config_for_unittests.h \ - src/mock-log.h -nodist_logging_unittest_SOURCES = $(nodist_gloginclude_HEADERS) -logging_unittest_CXXFLAGS = $(PTHREAD_CFLAGS) $(TEST_CFLAGS) -logging_unittest_LDFLAGS = $(PTHREAD_CFLAGS) -logging_unittest_LDADD = libglog.la $(COMMON_LIBS) $(TEST_LIBS) - -check_SCRIPTS += logging_striplog_test_sh -noinst_SCRIPTS += src/logging_striplog_test.sh -logging_striplog_test_sh: logging_striptest0 logging_striptest2 logging_striptest10 - $(top_srcdir)/src/logging_striplog_test.sh - -check_SCRIPTS += demangle_unittest_sh -noinst_SCRIPTS += src/demangle_unittest.sh -demangle_unittest_sh: demangle_unittest - $(builddir)/demangle_unittest # force to create lt-demangle_unittest - $(top_srcdir)/src/demangle_unittest.sh - -check_SCRIPTS += signalhandler_unittest_sh -noinst_SCRIPTS += src/signalhandler_unittest.sh -signalhandler_unittest_sh: signalhandler_unittest - $(builddir)/signalhandler_unittest # force to create lt-signalhandler_unittest - $(top_srcdir)/src/signalhandler_unittest.sh - -TEST_BINARIES += logging_striptest0 -logging_striptest0_SOURCES = $(gloginclude_HEADERS) \ - src/logging_striptest_main.cc -nodist_logging_striptest0_SOURCES = $(nodist_gloginclude_HEADERS) -logging_striptest0_CXXFLAGS = $(PTHREAD_CFLAGS) $(TEST_CFLAGS) -logging_striptest0_LDFLAGS = $(PTHREAD_CFLAGS) -logging_striptest0_LDADD = libglog.la $(COMMON_LIBS) - -TEST_BINARIES += logging_striptest2 -logging_striptest2_SOURCES = $(gloginclude_HEADERS) \ - src/logging_striptest2.cc -nodist_logging_striptest2_SOURCES = $(nodist_gloginclude_HEADERS) -logging_striptest2_CXXFLAGS = $(PTHREAD_CFLAGS) $(TEST_CFLAGS) -logging_striptest2_LDFLAGS = $(PTHREAD_CFLAGS) -logging_striptest2_LDADD = libglog.la $(COMMON_LIBS) - -TEST_BINARIES += logging_striptest10 -logging_striptest10_SOURCES = $(gloginclude_HEADERS) \ - src/logging_striptest10.cc -nodist_logging_striptest10_SOURCES = $(nodist_gloginclude_HEADERS) -logging_striptest10_CXXFLAGS = $(PTHREAD_CFLAGS) $(TEST_CFLAGS) -logging_striptest10_LDFLAGS = $(PTHREAD_CFLAGS) -logging_striptest10_LDADD = libglog.la $(COMMON_LIBS) - -TESTS += demangle_unittest -demangle_unittest_SOURCES = $(gloginclude_HEADERS) \ - src/demangle_unittest.cc -nodist_demangle_unittest_SOURCES = $(nodist_gloginclude_HEADERS) -demangle_unittest_CXXFLAGS = $(PTHREAD_CFLAGS) $(TEST_CFLAGS) -demangle_unittest_LDFLAGS = $(PTHREAD_CFLAGS) -demangle_unittest_LDADD = libglog.la $(COMMON_LIBS) $(TEST_LIBS) - -TESTS += stacktrace_unittest -stacktrace_unittest_SOURCES = $(gloginclude_HEADERS) \ - src/stacktrace_unittest.cc -nodist_stacktrace_unittest_SOURCES = $(nodist_gloginclude_HEADERS) -stacktrace_unittest_CXXFLAGS = $(PTHREAD_CFLAGS) $(TEST_CFLAGS) -stacktrace_unittest_LDFLAGS = $(PTHREAD_CFLAGS) -stacktrace_unittest_LDADD = libglog.la $(COMMON_LIBS) - -TESTS += symbolize_unittest -symbolize_unittest_SOURCES = $(gloginclude_HEADERS) \ - src/symbolize_unittest.cc -nodist_symbolize_unittest_SOURCES = $(nodist_gloginclude_HEADERS) -symbolize_unittest_CXXFLAGS = $(PTHREAD_CFLAGS) $(TEST_CFLAGS) -symbolize_unittest_LDFLAGS = $(PTHREAD_CFLAGS) -symbolize_unittest_LDADD = libglog.la $(COMMON_LIBS) $(TEST_LIBS) - -TESTS += stl_logging_unittest -stl_logging_unittest_SOURCES = $(gloginclude_HEADERS) \ - src/stl_logging_unittest.cc -nodist_stl_logging_unittest_SOURCES = $(nodist_gloginclude_HEADERS) -stl_logging_unittest_CXXFLAGS = $(PTHREAD_CFLAGS) $(TEST_CFLAGS) -stl_logging_unittest_LDFLAGS = $(PTHREAD_CFLAGS) -stl_logging_unittest_LDADD = libglog.la $(COMMON_LIBS) $(TEST_LIBS) - -TEST_BINARIES += signalhandler_unittest -signalhandler_unittest_SOURCES = $(gloginclude_HEADERS) \ - src/signalhandler_unittest.cc -nodist_signalhandler_unittest_SOURCES = $(nodist_gloginclude_HEADERS) -signalhandler_unittest_CXXFLAGS = $(PTHREAD_CFLAGS) $(TEST_CFLAGS) -signalhandler_unittest_LDFLAGS = $(PTHREAD_CFLAGS) -signalhandler_unittest_LDADD = libglog.la $(COMMON_LIBS) $(TEST_LIBS) - -TESTS += utilities_unittest -utilities_unittest_SOURCES = $(gloginclude_HEADERS) \ - src/utilities_unittest.cc -nodist_utilities_unittest_SOURCES = $(nodist_gloginclude_HEADERS) -utilities_unittest_CXXFLAGS = $(PTHREAD_CFLAGS) $(TEST_CFLAGS) -utilities_unittest_LDFLAGS = $(PTHREAD_CFLAGS) -utilities_unittest_LDADD = libglog.la $(COMMON_LIBS) $(TEST_LIBS) - -if HAVE_GMOCK -TESTS += mock_log_test -mock_log_test_SOURCES = $(gloginclude_HEADERS) \ - src/mock-log_test.cc -nodist_mock_log_test_SOURCES = $(nodist_gloginclude_HEADERS) -mock_log_test_CXXFLAGS = $(PTHREAD_CFLAGS) $(TEST_CFLAGS) -mock_log_test_LDFLAGS = $(PTHREAD_CFLAGS) -mock_log_test_LDADD = libglog.la $(COMMON_LIBS) $(TEST_LIBS) -endif - -## vvvv RULES TO MAKE THE LIBRARIES, BINARIES, AND UNITTESTS - -lib_LTLIBRARIES += libglog.la -libglog_la_SOURCES = $(gloginclude_HEADERS) \ - src/logging.cc src/raw_logging.cc src/vlog_is_on.cc \ - src/utilities.cc src/utilities.h \ - src/demangle.cc src/demangle.h \ - src/stacktrace.h \ - src/stacktrace_generic-inl.h \ - src/stacktrace_libunwind-inl.h \ - src/stacktrace_powerpc-inl.h \ - src/stacktrace_x86-inl.h \ - src/stacktrace_x86_64-inl.h \ - src/symbolize.cc src/symbolize.h \ - src/signalhandler.cc \ - src/base/mutex.h src/base/googleinit.h \ - src/base/commandlineflags.h src/googletest.h -nodist_libglog_la_SOURCES = $(nodist_gloginclude_HEADERS) - -libglog_la_CXXFLAGS = $(PTRHEAD_CFLAGS) $(GFLAGS_CFLAGS) $(AM_CXXFLAGS) -DNDEBUG -libglog_la_LDFLAGS = $(PTRHEAD_CFLAGS) $(GFLAGS_LDFLAGS) -libglog_la_LIBADD = $(COMMON_LIBS) - -## The location of the windows project file for each binary we make -WINDOWS_PROJECTS = google-glog.sln -WINDOWS_PROJECTS += vsprojects/libglog/libglog.vcproj -WINDOWS_PROJECTS += vsprojects/logging_unittest/logging_unittest.vcproj -WINDOWS_PROJECTS += vsprojects/libglog_static/libglog_static.vcproj -WINDOWS_PROJECTS += vsprojects/logging_unittest_static/logging_unittest_static.vcproj - -## ^^^^ END OF RULES TO MAKE THE LIBRARIES, BINARIES, AND UNITTESTS - - -## This should always include $(TESTS), but may also include other -## binaries that you compile but don't want automatically installed. -noinst_PROGRAMS = $(TESTS) $(TEST_BINARIES) - -rpm: dist-gzip packages/rpm.sh packages/rpm/rpm.spec - @cd packages && ./rpm.sh ${PACKAGE} ${VERSION} - -deb: dist-gzip packages/deb.sh packages/deb/* - @cd packages && ./deb.sh ${PACKAGE} ${VERSION} - -# Windows wants write permission to .vcproj files and maybe even sln files. -dist-hook: - test -e "$(distdir)/vsprojects" \ - && chmod -R u+w $(distdir)/*.sln $(distdir)/vsprojects/ - -libtool: $(LIBTOOL_DEPS) - $(SHELL) ./config.status --recheck - -EXTRA_DIST = packages/rpm.sh packages/rpm/rpm.spec packages/deb.sh packages/deb \ - $(SCRIPTS) src/logging_unittest.err src/demangle_unittest.txt \ - src/windows/config.h src/windows/port.h src/windows/port.cc \ - src/windows/preprocess.sh \ - src/windows/glog/log_severity.h src/windows/glog/logging.h \ - src/windows/glog/raw_logging.h src/windows/glog/stl_logging.h \ - src/windows/glog/vlog_is_on.h \ - $(WINDOWS_PROJECTS) - -CLEANFILES = core demangle.dm demangle.nm signalhandler.out* \ - signalhandler_unittest.*.log.INFO.* - -# Add pkgconfig file -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = libglog.pc diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/NEWS b/toolkit/crashreporter/google-breakpad/src/third_party/glog/NEWS deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/README b/toolkit/crashreporter/google-breakpad/src/third_party/glog/README deleted file mode 100644 index 77efd37505a7..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/README +++ /dev/null @@ -1,5 +0,0 @@ -This repository contains a C++ implementation of the Google logging -module. Documentation for the implementation is in doc/. - -See INSTALL for (generic) installation instructions for C++: basically - ./configure && make && make install diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/README.windows b/toolkit/crashreporter/google-breakpad/src/third_party/glog/README.windows deleted file mode 100644 index 74ff6904f6ca..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/README.windows +++ /dev/null @@ -1,26 +0,0 @@ -This project has begun being ported to Windows. A working solution -file exists in this directory: - google-glog.sln - -You can load this solution file into VC++ 9.0 (Visual Studio -2008). You may also be able to use this solution file with older -Visual Studios by converting the solution file. - -Note that stack tracing and some unittests are not ported -yet. - -You can also link glog code in statically -- see the example project -libglog_static and logging_unittest_static, which does this. For this -to work, you'll need to add "/D GOOGLE_GLOG_DLL_DECL=" to the compile -line of every glog's .cc file. - -I have little experience with Windows programming, so there may be -better ways to set this up than I've done! If you run across any -problems, please post to the google-glog Google Group, or report -them on the google-glog Google Code site: - http://groups.google.com/group/google-glog - http://code.google.com/p/google-glog/issues/list - --- Shinichiro Hamaji - -Last modified: 23 January 2009 diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/aclocal.m4 b/toolkit/crashreporter/google-breakpad/src/third_party/glog/aclocal.m4 deleted file mode 100644 index 2d8baaf4c2f5..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/aclocal.m4 +++ /dev/null @@ -1,978 +0,0 @@ -# generated automatically by aclocal 1.11.1 -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],, -[m4_warning([this file was generated for autoconf 2.65. -You have another version of autoconf. It may work, but is not guaranteed to. -If you have problems, you may need to regenerate the build system entirely. -To do so, use the procedure documented by the package, typically `autoreconf'.])]) - -# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_AUTOMAKE_VERSION(VERSION) -# ---------------------------- -# Automake X.Y traces this macro to ensure aclocal.m4 has been -# generated from the m4 files accompanying Automake X.Y. -# (This private macro should not be called outside this file.) -AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.11' -dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to -dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.11.1], [], - [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl -]) - -# _AM_AUTOCONF_VERSION(VERSION) -# ----------------------------- -# aclocal traces this macro to find the Autoconf version. -# This is a private macro too. Using m4_define simplifies -# the logic in aclocal, which can simply ignore this definition. -m4_define([_AM_AUTOCONF_VERSION], []) - -# AM_SET_CURRENT_AUTOMAKE_VERSION -# ------------------------------- -# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. -# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. -AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.11.1])dnl -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) - -# AM_AUX_DIR_EXPAND -*- Autoconf -*- - -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets -# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to -# `$srcdir', `$srcdir/..', or `$srcdir/../..'. -# -# Of course, Automake must honor this variable whenever it calls a -# tool from the auxiliary directory. The problem is that $srcdir (and -# therefore $ac_aux_dir as well) can be either absolute or relative, -# depending on how configure is run. This is pretty annoying, since -# it makes $ac_aux_dir quite unusable in subdirectories: in the top -# source directory, any form will work fine, but in subdirectories a -# relative path needs to be adjusted first. -# -# $ac_aux_dir/missing -# fails when called from a subdirectory if $ac_aux_dir is relative -# $top_srcdir/$ac_aux_dir/missing -# fails if $ac_aux_dir is absolute, -# fails when called from a subdirectory in a VPATH build with -# a relative $ac_aux_dir -# -# The reason of the latter failure is that $top_srcdir and $ac_aux_dir -# are both prefixed by $srcdir. In an in-source build this is usually -# harmless because $srcdir is `.', but things will broke when you -# start a VPATH build or use an absolute $srcdir. -# -# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, -# iff we strip the leading $srcdir from $ac_aux_dir. That would be: -# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` -# and then we would define $MISSING as -# MISSING="\${SHELL} $am_aux_dir/missing" -# This will work as long as MISSING is not called from configure, because -# unfortunately $(top_srcdir) has no meaning in configure. -# However there are other variables, like CC, which are often used in -# configure, and could therefore not use this "fixed" $ac_aux_dir. -# -# Another solution, used here, is to always expand $ac_aux_dir to an -# absolute PATH. The drawback is that using absolute paths prevent a -# configured tree to be moved without reconfiguration. - -AC_DEFUN([AM_AUX_DIR_EXPAND], -[dnl Rely on autoconf to set up CDPATH properly. -AC_PREREQ([2.50])dnl -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` -]) - -# AM_CONDITIONAL -*- Autoconf -*- - -# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 9 - -# AM_CONDITIONAL(NAME, SHELL-CONDITION) -# ------------------------------------- -# Define a conditional. -AC_DEFUN([AM_CONDITIONAL], -[AC_PREREQ(2.52)dnl - ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -AC_SUBST([$1_TRUE])dnl -AC_SUBST([$1_FALSE])dnl -_AM_SUBST_NOTMAKE([$1_TRUE])dnl -_AM_SUBST_NOTMAKE([$1_FALSE])dnl -m4_define([_AM_COND_VALUE_$1], [$2])dnl -if $2; then - $1_TRUE= - $1_FALSE='#' -else - $1_TRUE='#' - $1_FALSE= -fi -AC_CONFIG_COMMANDS_PRE( -[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then - AC_MSG_ERROR([[conditional "$1" was never defined. -Usually this means the macro was only invoked conditionally.]]) -fi])]) - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 10 - -# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be -# written in clear, in which case automake, when reading aclocal.m4, -# will think it sees a *use*, and therefore will trigger all it's -# C support machinery. Also note that it means that autoscan, seeing -# CC etc. in the Makefile, will ask for an AC_PROG_CC use... - - -# _AM_DEPENDENCIES(NAME) -# ---------------------- -# See how the compiler implements dependency checking. -# NAME is "CC", "CXX", "GCJ", or "OBJC". -# We try a few techniques and use that to set a single cache variable. -# -# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was -# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular -# dependency, and given that the user is not expected to run this macro, -# just rely on AC_PROG_CC. -AC_DEFUN([_AM_DEPENDENCIES], -[AC_REQUIRE([AM_SET_DEPDIR])dnl -AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl -AC_REQUIRE([AM_MAKE_INCLUDE])dnl -AC_REQUIRE([AM_DEP_TRACK])dnl - -ifelse([$1], CC, [depcc="$CC" am_compiler_list=], - [$1], CXX, [depcc="$CXX" am_compiler_list=], - [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], - [$1], UPC, [depcc="$UPC" am_compiler_list=], - [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], - [depcc="$$1" am_compiler_list=]) - -AC_CACHE_CHECK([dependency style of $depcc], - [am_cv_$1_dependencies_compiler_type], -[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_$1_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` - fi - am__universal=false - m4_case([$1], [CC], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac], - [CXX], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac]) - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_$1_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_$1_dependencies_compiler_type=none -fi -]) -AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) -AM_CONDITIONAL([am__fastdep$1], [ - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) -]) - - -# AM_SET_DEPDIR -# ------------- -# Choose a directory name for dependency files. -# This macro is AC_REQUIREd in _AM_DEPENDENCIES -AC_DEFUN([AM_SET_DEPDIR], -[AC_REQUIRE([AM_SET_LEADING_DOT])dnl -AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl -]) - - -# AM_DEP_TRACK -# ------------ -AC_DEFUN([AM_DEP_TRACK], -[AC_ARG_ENABLE(dependency-tracking, -[ --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors]) -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi -AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH])dnl -_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl -]) - -# Generate code to set up dependency tracking. -*- Autoconf -*- - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -#serial 5 - -# _AM_OUTPUT_DEPENDENCY_COMMANDS -# ------------------------------ -AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[{ - # Autoconf 2.62 quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} -])# _AM_OUTPUT_DEPENDENCY_COMMANDS - - -# AM_OUTPUT_DEPENDENCY_COMMANDS -# ----------------------------- -# This macro should only be invoked once -- use via AC_REQUIRE. -# -# This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each `.P' file that we will -# need in order to bootstrap the dependency handling code. -AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], -[AC_CONFIG_COMMANDS([depfiles], - [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], - [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) -]) - -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 8 - -# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. -AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) - -# Do all the work for Automake. -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 16 - -# This macro actually does too much. Some checks are only needed if -# your package does certain things. But this isn't really a big deal. - -# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) -# AM_INIT_AUTOMAKE([OPTIONS]) -# ----------------------------------------------- -# The call with PACKAGE and VERSION arguments is the old style -# call (pre autoconf-2.50), which is being phased out. PACKAGE -# and VERSION should now be passed to AC_INIT and removed from -# the call to AM_INIT_AUTOMAKE. -# We support both call styles for the transition. After -# the next Automake release, Autoconf can make the AC_INIT -# arguments mandatory, and then we can depend on a new Autoconf -# release and drop the old call support. -AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.62])dnl -dnl Autoconf wants to disallow AM_ names. We explicitly allow -dnl the ones we care about. -m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl -AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl -AC_REQUIRE([AC_PROG_INSTALL])dnl -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi -AC_SUBST([CYGPATH_W]) - -# Define the identity of the package. -dnl Distinguish between old-style and new-style calls. -m4_ifval([$2], -[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl - AC_SUBST([PACKAGE], [$1])dnl - AC_SUBST([VERSION], [$2])], -[_AM_SET_OPTIONS([$1])dnl -dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. -m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, - [m4_fatal([AC_INIT should be called with package and version arguments])])dnl - AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl - AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl - -_AM_IF_OPTION([no-define],, -[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) - AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl - -# Some tools Automake needs. -AC_REQUIRE([AM_SANITY_CHECK])dnl -AC_REQUIRE([AC_ARG_PROGRAM])dnl -AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) -AM_MISSING_PROG(AUTOCONF, autoconf) -AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) -AM_MISSING_PROG(AUTOHEADER, autoheader) -AM_MISSING_PROG(MAKEINFO, makeinfo) -AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl -AC_REQUIRE([AM_PROG_MKDIR_P])dnl -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([AC_PROG_MAKE_SET])dnl -AC_REQUIRE([AM_SET_LEADING_DOT])dnl -_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], - [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], - [_AM_PROG_TAR([v7])])]) -_AM_IF_OPTION([no-dependencies],, -[AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES(CC)], - [define([AC_PROG_CC], - defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl -AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES(CXX)], - [define([AC_PROG_CXX], - defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl -AC_PROVIDE_IFELSE([AC_PROG_OBJC], - [_AM_DEPENDENCIES(OBJC)], - [define([AC_PROG_OBJC], - defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl -]) -_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl -dnl The `parallel-tests' driver may need to know about EXEEXT, so add the -dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro -dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. -AC_CONFIG_COMMANDS_PRE(dnl -[m4_provide_if([_AM_COMPILER_EXEEXT], - [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl -]) - -dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not -dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further -dnl mangled by Autoconf and run in a shell conditional statement. -m4_define([_AC_COMPILER_EXEEXT], -m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) - - -# When config.status generates a header, we must update the stamp-h file. -# This file resides in the same directory as the config header -# that is generated. The stamp files are numbered to have different names. - -# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the -# loop where config.status creates the headers, so we can generate -# our stamp files there. -AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], -[# Compute $1's index in $config_headers. -_am_arg=$1 -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) - -# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_INSTALL_SH -# ------------------ -# Define $install_sh. -AC_DEFUN([AM_PROG_INSTALL_SH], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi -AC_SUBST(install_sh)]) - -# Copyright (C) 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# Check whether the underlying file-system supports filenames -# with a leading dot. For instance MS-DOS doesn't. -AC_DEFUN([AM_SET_LEADING_DOT], -[rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null -AC_SUBST([am__leading_dot])]) - -# Check to see how 'make' treats includes. -*- Autoconf -*- - -# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 4 - -# AM_MAKE_INCLUDE() -# ----------------- -# Check to see how make treats includes. -AC_DEFUN([AM_MAKE_INCLUDE], -[am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -AC_MSG_CHECKING([for style of include used by $am_make]) -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi -AC_SUBST([am__include]) -AC_SUBST([am__quote]) -AC_MSG_RESULT([$_am_result]) -rm -f confinc confmf -]) - -# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- - -# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 6 - -# AM_MISSING_PROG(NAME, PROGRAM) -# ------------------------------ -AC_DEFUN([AM_MISSING_PROG], -[AC_REQUIRE([AM_MISSING_HAS_RUN]) -$1=${$1-"${am_missing_run}$2"} -AC_SUBST($1)]) - - -# AM_MISSING_HAS_RUN -# ------------------ -# Define MISSING if not defined so far and test if it supports --run. -# If it does, set am_missing_run to use it, otherwise, to nothing. -AC_DEFUN([AM_MISSING_HAS_RUN], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([missing])dnl -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - AC_MSG_WARN([`missing' script is too old or missing]) -fi -]) - -# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_MKDIR_P -# --------------- -# Check for `mkdir -p'. -AC_DEFUN([AM_PROG_MKDIR_P], -[AC_PREREQ([2.60])dnl -AC_REQUIRE([AC_PROG_MKDIR_P])dnl -dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, -dnl while keeping a definition of mkdir_p for backward compatibility. -dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. -dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of -dnl Makefile.ins that do not define MKDIR_P, so we do our own -dnl adjustment using top_builddir (which is defined more often than -dnl MKDIR_P). -AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl -case $mkdir_p in - [[\\/$]]* | ?:[[\\/]]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; -esac -]) - -# Helper functions for option handling. -*- Autoconf -*- - -# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 4 - -# _AM_MANGLE_OPTION(NAME) -# ----------------------- -AC_DEFUN([_AM_MANGLE_OPTION], -[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) - -# _AM_SET_OPTION(NAME) -# ------------------------------ -# Set option NAME. Presently that only means defining a flag for this option. -AC_DEFUN([_AM_SET_OPTION], -[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) - -# _AM_SET_OPTIONS(OPTIONS) -# ---------------------------------- -# OPTIONS is a space-separated list of Automake options. -AC_DEFUN([_AM_SET_OPTIONS], -[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) - -# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) -# ------------------------------------------- -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -AC_DEFUN([_AM_IF_OPTION], -[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) - -# Check to make sure that the build environment is sane. -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 5 - -# AM_SANITY_CHECK -# --------------- -AC_DEFUN([AM_SANITY_CHECK], -[AC_MSG_CHECKING([whether build environment is sane]) -# Just in case -sleep 1 -echo timestamp > conftest.file -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[[\\\"\#\$\&\'\`$am_lf]]*) - AC_MSG_ERROR([unsafe absolute working directory name]);; -esac -case $srcdir in - *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) - AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; -esac - -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$[*]" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$[*]" != "X $srcdir/configure conftest.file" \ - && test "$[*]" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken -alias in your environment]) - fi - - test "$[2]" = conftest.file - ) -then - # Ok. - : -else - AC_MSG_ERROR([newly created file is older than distributed files! -Check your system clock]) -fi -AC_MSG_RESULT(yes)]) - -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_INSTALL_STRIP -# --------------------- -# One issue with vendor `install' (even GNU) is that you can't -# specify the program used to strip binaries. This is especially -# annoying in cross-compiling environments, where the build's strip -# is unlikely to handle the host's binaries. -# Fortunately install-sh will honor a STRIPPROG variable, so we -# always use install-sh in `make install-strip', and initialize -# STRIPPROG with the value of the STRIP variable (set by the user). -AC_DEFUN([AM_PROG_INSTALL_STRIP], -[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -dnl Don't test for $cross_compiling = yes, because it might be `maybe'. -if test "$cross_compiling" != no; then - AC_CHECK_TOOL([STRIP], [strip], :) -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" -AC_SUBST([INSTALL_STRIP_PROGRAM])]) - -# Copyright (C) 2006, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# _AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. -# This macro is traced by Automake. -AC_DEFUN([_AM_SUBST_NOTMAKE]) - -# AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Public sister of _AM_SUBST_NOTMAKE. -AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) - -# Check how to create a tarball. -*- Autoconf -*- - -# Copyright (C) 2004, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# _AM_PROG_TAR(FORMAT) -# -------------------- -# Check how to create a tarball in format FORMAT. -# FORMAT should be one of `v7', `ustar', or `pax'. -# -# Substitute a variable $(am__tar) that is a command -# writing to stdout a FORMAT-tarball containing the directory -# $tardir. -# tardir=directory && $(am__tar) > result.tar -# -# Substitute a variable $(am__untar) that extract such -# a tarball read from stdin. -# $(am__untar) < result.tar -AC_DEFUN([_AM_PROG_TAR], -[# Always define AMTAR for backward compatibility. -AM_MISSING_PROG([AMTAR], [tar]) -m4_if([$1], [v7], - [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], - [m4_case([$1], [ustar],, [pax],, - [m4_fatal([Unknown tar format])]) -AC_MSG_CHECKING([how to create a $1 tar archive]) -# Loop over all known methods to create a tar archive until one works. -_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' -_am_tools=${am_cv_prog_tar_$1-$_am_tools} -# Do not fold the above two line into one, because Tru64 sh and -# Solaris sh will not grok spaces in the rhs of `-'. -for _am_tool in $_am_tools -do - case $_am_tool in - gnutar) - for _am_tar in tar gnutar gtar; - do - AM_RUN_LOG([$_am_tar --version]) && break - done - am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' - am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' - am__untar="$_am_tar -xf -" - ;; - plaintar) - # Must skip GNU tar: if it does not support --format= it doesn't create - # ustar tarball either. - (tar --version) >/dev/null 2>&1 && continue - am__tar='tar chf - "$$tardir"' - am__tar_='tar chf - "$tardir"' - am__untar='tar xf -' - ;; - pax) - am__tar='pax -L -x $1 -w "$$tardir"' - am__tar_='pax -L -x $1 -w "$tardir"' - am__untar='pax -r' - ;; - cpio) - am__tar='find "$$tardir" -print | cpio -o -H $1 -L' - am__tar_='find "$tardir" -print | cpio -o -H $1 -L' - am__untar='cpio -i -H $1 -d' - ;; - none) - am__tar=false - am__tar_=false - am__untar=false - ;; - esac - - # If the value was cached, stop now. We just wanted to have am__tar - # and am__untar set. - test -n "${am_cv_prog_tar_$1}" && break - - # tar/untar a dummy directory, and stop if the command works - rm -rf conftest.dir - mkdir conftest.dir - echo GrepMe > conftest.dir/file - AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) - rm -rf conftest.dir - if test -s conftest.tar; then - AM_RUN_LOG([$am__untar /dev/null 2>&1 && break - fi -done -rm -rf conftest.dir - -AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) -AC_MSG_RESULT([$am_cv_prog_tar_$1])]) -AC_SUBST([am__tar]) -AC_SUBST([am__untar]) -]) # _AM_PROG_TAR - -m4_include([m4/ac_have_attribute.m4]) -m4_include([m4/ac_have_builtin_expect.m4]) -m4_include([m4/ac_have_sync_val_compare_and_swap.m4]) -m4_include([m4/ac_rwlock.m4]) -m4_include([m4/acx_pthread.m4]) -m4_include([m4/google_namespace.m4]) -m4_include([m4/libtool.m4]) -m4_include([m4/ltoptions.m4]) -m4_include([m4/ltsugar.m4]) -m4_include([m4/ltversion.m4]) -m4_include([m4/lt~obsolete.m4]) -m4_include([m4/namespaces.m4]) -m4_include([m4/pc_from_ucontext.m4]) -m4_include([m4/stl_namespace.m4]) -m4_include([m4/using_operator.m4]) diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/compile b/toolkit/crashreporter/google-breakpad/src/third_party/glog/compile deleted file mode 100755 index 9bb997a6a9b4..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/compile +++ /dev/null @@ -1,99 +0,0 @@ -#! /bin/sh - -# Wrapper for compilers which do not understand `-c -o'. - -# Copyright 1999, 2000 Free Software Foundation, Inc. -# Written by Tom Tromey . -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Usage: -# compile PROGRAM [ARGS]... -# `-o FOO.o' is removed from the args passed to the actual compile. - -prog=$1 -shift - -ofile= -cfile= -args= -while test $# -gt 0; do - case "$1" in - -o) - # configure might choose to run compile as `compile cc -o foo foo.c'. - # So we do something ugly here. - ofile=$2 - shift - case "$ofile" in - *.o | *.obj) - ;; - *) - args="$args -o $ofile" - ofile= - ;; - esac - ;; - *.c) - cfile=$1 - args="$args $1" - ;; - *) - args="$args $1" - ;; - esac - shift -done - -if test -z "$ofile" || test -z "$cfile"; then - # If no `-o' option was seen then we might have been invoked from a - # pattern rule where we don't need one. That is ok -- this is a - # normal compilation that the losing compiler can handle. If no - # `.c' file was seen then we are probably linking. That is also - # ok. - exec "$prog" $args -fi - -# Name of file we expect compiler to create. -cofile=`echo $cfile | sed -e 's|^.*/||' -e 's/\.c$/.o/'` - -# Create the lock directory. -# Note: use `[/.-]' here to ensure that we don't use the same name -# that we are using for the .o file. Also, base the name on the expected -# object file name, since that is what matters with a parallel build. -lockdir=`echo $cofile | sed -e 's|[/.-]|_|g'`.d -while true; do - if mkdir $lockdir > /dev/null 2>&1; then - break - fi - sleep 1 -done -# FIXME: race condition here if user kills between mkdir and trap. -trap "rmdir $lockdir; exit 1" 1 2 15 - -# Run the compile. -"$prog" $args -status=$? - -if test -f "$cofile"; then - mv "$cofile" "$ofile" -fi - -rmdir $lockdir -exit $status diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/config.guess b/toolkit/crashreporter/google-breakpad/src/third_party/glog/config.guess deleted file mode 100755 index 278f9e9e07c1..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/config.guess +++ /dev/null @@ -1,1516 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, -# Inc. - -timestamp='2007-07-22' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Originally written by Per Bothner . -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. -# -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. -# -# The plan is that this can be called by configure scripts if you -# don't specify an explicit build system type. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 -Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - -trap 'exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in - armeb) machine=armeb-unknown ;; - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - sh5el) machine=sh5le-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep __ELF__ >/dev/null - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - # Debian GNU/NetBSD machines have a different userland, and - # thus, need a distinct triplet. However, they do not need - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in - Debian*) - release='-gnu' - ;; - *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - ;; - esac - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} - exit ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit ;; - *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} - exit ;; - macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} - exit ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in - "EV4 (21064)") - UNAME_MACHINE="alpha" ;; - "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; - "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; - "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; - "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; - "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; - "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; - "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; - "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; - "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; - "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; - "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; - esac - # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; - *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit ;; - arm:riscos:*:*|arm:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; - DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && - { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} - exit ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` - then - echo "$SYSTEM_NAME" - else - echo rs6000-ibm-aix3.2.5 - fi - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit ;; - *:AIX:*:[45]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` - test -z "$HP_ARCH" && HP_ARCH=hppa - fi ;; - esac - if [ ${HP_ARCH} = "hppa2.0w" ] - then - eval $set_cc_for_build - - # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating - # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler - # generating 64-bit code. GNU and HP use different nomenclature: - # - # $ CC_FOR_BUILD=cc ./config.guess - # => hppa2.0w-hp-hpux11.23 - # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess - # => hppa64-hp-hpux11.23 - - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep __LP64__ >/dev/null - then - HP_ARCH="hppa2.0w" - else - HP_ARCH="hppa64" - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:FreeBSD:*:*) - case ${UNAME_MACHINE} in - pc98) - echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - esac - exit ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; - *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit ;; - *:Interix*:[3456]*) - case ${UNAME_MACHINE} in - x86) - echo i586-pc-interix${UNAME_RELEASE} - exit ;; - EM64T | authenticamd) - echo x86_64-unknown-interix${UNAME_RELEASE} - exit ;; - esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit ;; - amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - *:GNU:*:*) - # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit ;; - *:GNU/*:*:*) - # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu - exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; - arm*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - cris:Linux:*:*) - echo cris-axis-linux-gnu - exit ;; - crisv32:Linux:*:*) - echo crisv32-axis-linux-gnu - exit ;; - frv:Linux:*:*) - echo frv-unknown-linux-gnu - exit ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - mips:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef mips - #undef mipsel - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mipsel - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips - #else - CPU= - #endif - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^CPU/{ - s: ::g - p - }'`" - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef mips64 - #undef mips64el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mips64el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips64 - #else - CPU= - #endif - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^CPU/{ - s: ::g - p - }'`" - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - or32:Linux:*:*) - echo or32-unknown-linux-gnu - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} - exit ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; - esac - exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux - exit ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-gnu - exit ;; - x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu - exit ;; - xtensa:Linux:*:*) - echo xtensa-unknown-linux-gnu - exit ;; - i*86:Linux:*:*) - # The BFD linker knows what the default object file format is, so - # first see if it will tell us. cd to the root directory to prevent - # problems with other programs or directories called `ld' in the path. - # Set LC_ALL=C to ensure ld outputs messages in English. - ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ - | sed -ne '/supported targets:/!d - s/[ ][ ]*/ /g - s/.*supported targets: *// - s/ .*// - p'` - case "$ld_supported_targets" in - elf32-i386) - TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" - ;; - a.out-i386-linux) - echo "${UNAME_MACHINE}-pc-linux-gnuaout" - exit ;; - coff-i386) - echo "${UNAME_MACHINE}-pc-linux-gnucoff" - exit ;; - "") - # Either a pre-BFD a.out linker (linux-gnuoldld) or - # one that does not give us useful --help. - echo "${UNAME_MACHINE}-pc-linux-gnuoldld" - exit ;; - esac - # Determine whether the default compiler is a.out or elf - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - #ifdef __ELF__ - # ifdef __GLIBC__ - # if __GLIBC__ >= 2 - LIBC=gnu - # else - LIBC=gnulibc1 - # endif - # else - LIBC=gnulibc1 - # endif - #else - #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) - LIBC=gnu - #else - LIBC=gnuaout - #endif - #endif - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^LIBC/{ - s: ::g - p - }'`" - test x"${LIBC}" != x && { - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" - exit - } - test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } - ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit ;; - i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit ;; - i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i386. - echo i386-pc-msdosdjgpp - exit ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; - i*86:VOS:*:*) - # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos - exit ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit ;; - SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} - exit ;; - SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} - exit ;; - SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} - exit ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - case $UNAME_PROCESSOR in - unknown) UNAME_PROCESSOR=powerpc ;; - esac - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit ;; - NSE-?:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} - exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit ;; - *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; - esac ;; - *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; - i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' - exit ;; - i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos - exit ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/config.sub b/toolkit/crashreporter/google-breakpad/src/third_party/glog/config.sub deleted file mode 100755 index 1761d8bdf630..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/config.sub +++ /dev/null @@ -1,1626 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, -# Inc. - -timestamp='2007-06-28' - -# This file is (in principle) common to ALL GNU software. -# The presence of a machine in this file suggests that SOME GNU software -# can handle that machine. It does not imply ALL GNU software can. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. -# -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS - -Canonicalize a configuration name. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.sub ($timestamp) - -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 -Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" - exit 1 ;; - - *local*) - # First pass through any local machine types. - echo $1 - exit ;; - - * ) - break ;; - esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 - exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 - exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ - uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray) - os= - basic_machine=$1 - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco6) - os=-sco5v6 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ - | bfin \ - | c4x | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | fido | fr30 | frv \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | mcore | mep \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64vr | mips64vrel \ - | mips64orion | mips64orionel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | mt \ - | msp430 \ - | nios | nios2 \ - | ns16k | ns32k \ - | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ - | pyramid \ - | score \ - | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu | strongarm \ - | tahoe | thumb | tic4x | tic80 | tron \ - | v850 | v850e \ - | we32k \ - | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ - | z8k) - basic_machine=$basic_machine-unknown - ;; - m6811 | m68hc11 | m6812 | m68hc12) - # Motorola 68HC11/12. - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; - ms1) - basic_machine=mt-unknown - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ - | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nios-* | nios2-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ - | pyramid-* \ - | romp-* | rs6000-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ - | tahoe-* | thumb-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tron-* \ - | v850-* | v850e-* | vax-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ - | xstormy16-* | xtensa-* \ - | ymp-* \ - | z8k-*) - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16) - basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 - ;; - decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; -# I'm not sure what "Sysv32" means. Should this be sysv3.2? - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - mingw32) - basic_machine=i386-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pc98) - basic_machine=i386-pc - ;; - pc98-*) - basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc - ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc) basic_machine=powerpc-unknown - ;; - ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rdos) - basic_machine=i386-pc - os=-rdos - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown - ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown - ;; - sde) - basic_machine=mipsisa32-sde - os=-elf - ;; - sei) - basic_machine=mips-sei - os=-seiux - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sh5el) - basic_machine=sh5le-unknown - ;; - sh64) - basic_machine=sh64-unknown - ;; - sparclite-wrs | simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos - ;; - t90) - basic_machine=t90-cray - os=-unicos - ;; - tic54x | c54x*) - basic_machine=tic54x-unknown - os=-coff - ;; - tic55x | c55x*) - basic_machine=tic55x-unknown - os=-coff - ;; - tic6x | c6x*) - basic_machine=tic6x-unknown - os=-coff - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - tpf) - basic_machine=s390x-ibm - os=-tpf - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - xbox) - basic_machine=i686-pc - os=-mingw32 - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - none) - basic_machine=none-none - os=-none - ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond - ;; - op50n) - basic_machine=hppa1.1-oki - ;; - op60c) - basic_machine=hppa1.1-oki - ;; - romp) - basic_machine=romp-ibm - ;; - mmix) - basic_machine=mmix-knuth - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown - ;; - sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) - basic_machine=sparc-sun - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple - ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple - ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. - ;; - *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` - ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` - ;; - *) - ;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -svr4*) - os=-sysv4 - ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; - # First accept the basic system types. - # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -openbsd* | -solidbsd* \ - | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ - | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* \ - | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) - ;; - *) - os=-nto$os - ;; - esac - ;; - -nto-qnx*) - ;; - -nto*) - os=`echo $os | sed -e 's|nto|nto-qnx|'` - ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) - os=`echo $os | sed -e 's|mac|macos|'` - ;; - -linux-dietlibc) - os=-linux-dietlibc - ;; - -linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` - ;; - -opened*) - os=-openedition - ;; - -os400*) - os=-os400 - ;; - -wince*) - os=-wince - ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -atheos*) - os=-atheos - ;; - -syllable*) - os=-syllable - ;; - -386bsd) - os=-bsd - ;; - -ctix* | -uts*) - os=-sysv - ;; - -nova*) - os=-rtmk-nova - ;; - -ns2 ) - os=-nextstep2 - ;; - -nsk*) - os=-nsk - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -tpf*) - os=-tpf - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -ose*) - os=-ose - ;; - -es1800*) - os=-ose - ;; - -xenix) - os=-xenix - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint - ;; - -aros*) - os=-aros - ;; - -kaos*) - os=-kaos - ;; - -zvmoe) - os=-zvmoe - ;; - -none) - ;; - *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 - exit 1 - ;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system. Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in - score-*) - os=-elf - ;; - spu-*) - os=-elf - ;; - *-acorn) - os=-riscix1.2 - ;; - arm*-rebel) - os=-linux - ;; - arm*-semi) - os=-aout - ;; - c4x-* | tic4x-*) - os=-coff - ;; - # This must come before the *-dec entry. - pdp10-*) - os=-tops20 - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - # This also exists in the configure program, but was not the - # default. - # os=-sunos4 - ;; - m68*-cisco) - os=-aout - ;; - mep-*) - os=-elf - ;; - mips*-cisco) - os=-elf - ;; - mips*-*) - os=-elf - ;; - or32-*) - os=-coff - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - *-be) - os=-beos - ;; - *-haiku) - os=-haiku - ;; - *-ibm) - os=-aix - ;; - *-knuth) - os=-mmixware - ;; - *-wec) - os=-proelf - ;; - *-winbond) - os=-proelf - ;; - *-oki) - os=-proelf - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigaos - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-next ) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs - ;; - *-next) - os=-nextstep3 - ;; - *-gould) - os=-sysv - ;; - *-highlevel) - os=-bsd - ;; - *-encore) - os=-bsd - ;; - *-sgi) - os=-irix - ;; - *-siemens) - os=-sysv4 - ;; - *-masscomp) - os=-rtu - ;; - f30[01]-fujitsu | f700-fujitsu) - os=-uxpv - ;; - *-rom68k) - os=-coff - ;; - *-*bug) - os=-coff - ;; - *-apple) - os=-macos - ;; - *-atari*) - os=-mint - ;; - *) - os=-none - ;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) - vendor=acorn - ;; - -sunos*) - vendor=sun - ;; - -aix*) - vendor=ibm - ;; - -beos*) - vendor=be - ;; - -hpux*) - vendor=hp - ;; - -mpeix*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs* | -opened*) - vendor=ibm - ;; - -os400*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -tpf*) - vendor=ibm - ;; - -vxsim* | -vxworks* | -windiss*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - -hms*) - vendor=hitachi - ;; - -mpw* | -macos*) - vendor=apple - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - vendor=atari - ;; - -vos*) - vendor=stratus - ;; - esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` - ;; -esac - -echo $basic_machine$os -exit - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/configure b/toolkit/crashreporter/google-breakpad/src/third_party/glog/configure deleted file mode 100755 index a3ae126c2bf1..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/configure +++ /dev/null @@ -1,19068 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.65 for glog 0.3.1. -# -# Report bugs to . -# -# -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - # We cannot yet assume a decent shell, so we have to provide a - # neutralization value for shells without unset; and this also - # works around shells that cannot unset nonexistent variables. - BASH_ENV=/dev/null - ENV=/dev/null - (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org and -$0: opensource@google.com about your system, including any -$0: error possibly output before this message. Then install -$0: a modern shell, or manually run the script under such a -$0: shell if you do have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error ERROR [LINENO LOG_FD] -# --------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with status $?, using 1 if that was 0. -as_fn_error () -{ - as_status=$?; test $as_status -eq 0 && as_status=1 - if test "$3"; then - as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 - fi - $as_echo "$as_me: error: $1" >&2 - as_fn_exit $as_status -} # as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - - -# Check that we are running under the correct shell. -SHELL=${CONFIG_SHELL-/bin/sh} - -case X$lt_ECHO in -X*--fallback-echo) - # Remove one level of quotation (which was required for Make). - ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` - ;; -esac - -ECHO=${lt_ECHO-echo} -if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X$1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then - # Yippee, $ECHO works! - : -else - # Restart under the correct shell. - exec $SHELL "$0" --no-reexec ${1+"$@"} -fi - -if test "X$1" = X--fallback-echo; then - # used as fallback echo - shift - cat <<_LT_EOF -$* -_LT_EOF - exit 0 -fi - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test -z "$lt_ECHO"; then - if test "X${echo_test_string+set}" != Xset; then - # find a string as large as possible, as long as the shell can cope with it - for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do - # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... - if { echo_test_string=`eval $cmd`; } 2>/dev/null && - { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null - then - break - fi - done - fi - - if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - : - else - # The Solaris, AIX, and Digital Unix default echo programs unquote - # backslashes. This makes it impossible to quote backslashes using - # echo "$something" | sed 's/\\/\\\\/g' - # - # So, first we look for a working echo in the user's PATH. - - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for dir in $PATH /usr/ucb; do - IFS="$lt_save_ifs" - if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && - test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - ECHO="$dir/echo" - break - fi - done - IFS="$lt_save_ifs" - - if test "X$ECHO" = Xecho; then - # We didn't find a better echo, so look for alternatives. - if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # This shell has a builtin print -r that does the trick. - ECHO='print -r' - elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && - test "X$CONFIG_SHELL" != X/bin/ksh; then - # If we have ksh, try running configure again with it. - ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} - export ORIGINAL_CONFIG_SHELL - CONFIG_SHELL=/bin/ksh - export CONFIG_SHELL - exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} - else - # Try using printf. - ECHO='printf %s\n' - if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # Cool, printf works - : - elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL - export CONFIG_SHELL - SHELL="$CONFIG_SHELL" - export SHELL - ECHO="$CONFIG_SHELL $0 --fallback-echo" - elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - ECHO="$CONFIG_SHELL $0 --fallback-echo" - else - # maybe with a smaller string... - prev=: - - for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do - if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null - then - break - fi - prev="$cmd" - done - - if test "$prev" != 'sed 50q "$0"'; then - echo_test_string=`eval $prev` - export echo_test_string - exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} - else - # Oops. We lost completely, so just stick with echo. - ECHO=echo - fi - fi - fi - fi - fi -fi - -# Copy echo and quote the copy suitably for passing to libtool from -# the Makefile, instead of quoting the original, which is used later. -lt_ECHO=$ECHO -if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then - lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" -fi - - - - -test -n "$DJDIR" || exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME='glog' -PACKAGE_TARNAME='glog' -PACKAGE_VERSION='0.3.1' -PACKAGE_STRING='glog 0.3.1' -PACKAGE_BUGREPORT='opensource@google.com' -PACKAGE_URL='' - -ac_unique_file="README" -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif" - -ac_subst_vars='am__EXEEXT_FALSE -am__EXEEXT_TRUE -LTLIBOBJS -LIBOBJS -GMOCK_LIBS -GTEST_LIBS -GFLAGS_LIBS -GMOCK_CFLAGS -GTEST_CFLAGS -GFLAGS_CFLAGS -ac_cv_have_libgflags -ac_cv_have___uint16 -ac_cv_have_u_int16_t -ac_cv_have_uint16_t -ac_cv_have_unistd_h -ac_cv_have_inttypes_h -ac_cv_have_systypes_h -ac_cv_have_stdint_h -ac_cv_have___builtin_expect -ac_cv___attribute___printf_4_5 -ac_cv___attribute___noreturn -ac_cv_cxx_using_operator -ac_google_namespace -ac_google_end_namespace -ac_google_start_namespace -UNWIND_LIBS -HAVE_GMOCK_FALSE -HAVE_GMOCK_TRUE -GMOCK_CONFIG -GTEST_CONFIG -PTHREAD_CFLAGS -PTHREAD_LIBS -PTHREAD_CC -acx_pthread_config -X86_64_FALSE -X86_64_TRUE -ENABLE_FRAME_POINTERS_FALSE -ENABLE_FRAME_POINTERS_TRUE -LIBTOOL_DEPS -CXXCPP -OTOOL64 -OTOOL -LIPO -NMEDIT -DSYMUTIL -lt_ECHO -RANLIB -AR -OBJDUMP -LN_S -NM -ac_ct_DUMPBIN -DUMPBIN -LD -FGREP -EGREP -GREP -SED -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -LIBTOOL -GCC_FALSE -GCC_TRUE -am__fastdepCXX_FALSE -am__fastdepCXX_TRUE -CXXDEPMODE -ac_ct_CXX -CXXFLAGS -CXX -CPP -am__fastdepCC_FALSE -am__fastdepCC_TRUE -CCDEPMODE -AMDEPBACKSLASH -AMDEP_FALSE -AMDEP_TRUE -am__quote -am__include -DEPDIR -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -am__untar -am__tar -AMTAR -am__leading_dot -SET_MAKE -AWK -mkdir_p -MKDIR_P -INSTALL_STRIP_PROGRAM -STRIP -install_sh -MAKEINFO -AUTOHEADER -AUTOMAKE -AUTOCONF -ACLOCAL -VERSION -PACKAGE -CYGPATH_W -am__isrc -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -enable_dependency_tracking -enable_shared -enable_static -with_pic -enable_fast_install -with_gnu_ld -enable_libtool_lock -enable_frame_pointers -with_gflags -enable_namespace -' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CPP -CXX -CXXFLAGS -CCC -CXXCPP' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information." - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used." >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures glog 0.3.1 to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/glog] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -Program names: - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM run sed PROGRAM on installed program names - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of glog 0.3.1:";; - esac - cat <<\_ACEOF - -Optional Features: - --disable-option-checking ignore unrecognized --enable/--with options - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors - --enable-shared[=PKGS] build shared libraries [default=yes] - --enable-static[=PKGS] build static libraries [default=yes] - --enable-fast-install[=PKGS] - optimize for fast installation [default=yes] - --disable-libtool-lock avoid locking (might break parallel builds) - --enable-frame-pointers On x86_64 systems, compile with - -fno-omit-frame-pointer (see INSTALL) - --enable-namespace=FOO to define these Google - classes in the FOO namespace. --disable-namespace - to define them in the global namespace. Default - is to define them in namespace google. - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-pic try to use only PIC/non-PIC objects [default=use - both] - --with-gnu-ld assume the C compiler uses GNU ld [default=no] - --with-gflags=GFLAGS_DIR - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CPP C preprocessor - CXX C++ compiler command - CXXFLAGS C++ compiler flags - CXXCPP C++ preprocessor - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to . -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -glog configure 0.3.1 -generated by GNU Autoconf 2.65 - -Copyright (C) 2009 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -# ac_fn_c_try_compile LINENO -# -------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_compile - -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_cxx_try_compile LINENO -# ---------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_compile - -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link - -# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_header_compile - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - -# ac_fn_c_check_func LINENO FUNC VAR -# ---------------------------------- -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_c_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case declares $2. - For example, HP-UX 11i declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_func - -# ac_fn_cxx_try_cpp LINENO -# ------------------------ -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_cpp - -# ac_fn_cxx_try_link LINENO -# ------------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_link - -# ac_fn_cxx_try_run LINENO -# ------------------------ -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_cxx_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_run - -# ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES -# --------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_cxx_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( cat <<\_ASBOX -## ------------------------------------ ## -## Report this to opensource@google.com ## -## ------------------------------------ ## -_ASBOX - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_cxx_check_header_mongrel - -# ac_fn_cxx_compute_int LINENO EXPR VAR INCLUDES -# ---------------------------------------------- -# Tries to find the compile-time value of EXPR in a program that includes -# INCLUDES, setting VAR accordingly. Returns whether the value could be -# computed -ac_fn_cxx_compute_int () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_lo=0 ac_mid=0 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_hi=$ac_mid; break -else - as_fn_arith $ac_mid + 1 && ac_lo=$as_val - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_hi=-1 ac_mid=-1 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_lo=$ac_mid; break -else - as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - ac_lo= ac_hi= -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_hi=$ac_mid -else - as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in #(( -?*) eval "$3=\$ac_lo"; ac_retval=0 ;; -'') ac_retval=1 ;; -esac - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -static long int longval () { return $2; } -static unsigned long int ulongval () { return $2; } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (($2) < 0) - { - long int i = longval (); - if (i != ($2)) - return 1; - fprintf (f, "%ld", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ($2)) - return 1; - fprintf (f, "%lu", i); - } - /* Do not output a trailing newline, as this causes \r\n confusion - on some platforms. */ - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_run "$LINENO"; then : - echo >>conftest.val; read $3 &5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=no" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof ($2)) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof (($2))) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - -else - eval "$3=yes" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_cxx_check_type - -# ac_fn_cxx_check_func LINENO FUNC VAR -# ------------------------------------ -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_cxx_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case declares $2. - For example, HP-UX 11i declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_cxx_check_func -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by glog $as_me 0.3.1, which was -generated by GNU Autoconf 2.65. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - cat <<\_ASBOX -## ---------------- ## -## Cache variables. ## -## ---------------- ## -_ASBOX - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - cat <<\_ASBOX -## ----------------- ## -## Output variables. ## -## ----------------- ## -_ASBOX - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - cat <<\_ASBOX -## ------------------- ## -## File substitutions. ## -## ------------------- ## -_ASBOX - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - cat <<\_ASBOX -## ----------- ## -## confdefs.h. ## -## ----------- ## -_ASBOX - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - ac_site_file1=$CONFIG_SITE -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -# The argument here is just something that should be in the current directory -# (for sanity checking) - - -am__api_version='1.11' - -ac_aux_dir= -for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do - for ac_t in install-sh install.sh shtool; do - if test -f "$ac_dir/$ac_t"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/$ac_t -c" - break 2 - fi - done -done -if test -z "$ac_aux_dir"; then - as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; -esac - - done -IFS=$as_save_IFS - -rm -rf conftest.one conftest.two conftest.dir - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 -$as_echo_n "checking whether build environment is sane... " >&6; } -# Just in case -sleep 1 -echo timestamp > conftest.file -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[\\\"\#\$\&\'\`$am_lf]*) - as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; -esac -case $srcdir in - *[\\\"\#\$\&\'\`$am_lf\ \ ]*) - as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; -esac - -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - as_fn_error "ls -t appears to fail. Make sure there is not a broken -alias in your environment" "$LINENO" 5 - fi - - test "$2" = conftest.file - ) -then - # Ok. - : -else - as_fn_error "newly created file is older than distributed files! -Check your system clock" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -test "$program_prefix" != NONE && - program_transform_name="s&^&$program_prefix&;$program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s&\$&$program_suffix&;$program_transform_name" -# Double any \ or $. -# By default was `s,x,x', remove it if useless. -ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' -program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` - -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` - -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 -$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} -fi - -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi - -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 -$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } -if test -z "$MKDIR_P"; then - if test "${ac_cv_path_mkdir+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in mkdir gmkdir; do - for ac_exec_ext in '' $ac_executable_extensions; do - { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue - case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( - 'mkdir (GNU coreutils) '* | \ - 'mkdir (coreutils) '* | \ - 'mkdir (fileutils) '4.1*) - ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext - break 3;; - esac - done - done - done -IFS=$as_save_IFS - -fi - - test -d ./--version && rmdir ./--version - if test "${ac_cv_path_mkdir+set}" = set; then - MKDIR_P="$ac_cv_path_mkdir -p" - else - # As a last resort, use the slow shell script. Don't cache a - # value for MKDIR_P within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - MKDIR_P="$ac_install_sh -d" - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 -$as_echo "$MKDIR_P" >&6; } - -mkdir_p="$MKDIR_P" -case $mkdir_p in - [\\/$]* | ?:[\\/]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; -esac - -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AWK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AWK" && break -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SET_MAKE= -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - -rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null - -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - am__isrc=' -I$(srcdir)' - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi - - -# Define the identity of the package. - PACKAGE='glog' - VERSION='0.3.1' - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE "$PACKAGE" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define VERSION "$VERSION" -_ACEOF - -# Some tools Automake needs. - -ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} - - -AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} - - -AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} - - -AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} - - -MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} - -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -# Always define AMTAR for backward compatibility. - -AMTAR=${AMTAR-"${am_missing_run}tar"} - -am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' - - - - - -ac_config_headers="$ac_config_headers src/config.h" - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - -# Checks for programs. -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "no acceptable C compiler found in \$PATH -See \`config.log' for more details." "$LINENO" 5; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ as_fn_set_status 77 -as_fn_error "C compiler cannot create executables -See \`config.log' for more details." "$LINENO" 5; }; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." "$LINENO" 5; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if test "${ac_cv_objext+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot compute suffix of object files: cannot compile -See \`config.log' for more details." "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -DEPDIR="${am__leading_dot}deps" - -ac_config_commands="$ac_config_commands depfiles" - - -am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 -$as_echo_n "checking for style of include used by $am_make... " >&6; } -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 -$as_echo "$_am_result" >&6; } -rm -f confinc confmf - -# Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then : - enableval=$enable_dependency_tracking; -fi - -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi - if test "x$enable_dependency_tracking" != xno; then - AMDEP_TRUE= - AMDEP_FALSE='#' -else - AMDEP_TRUE='#' - AMDEP_FALSE= -fi - - - -depcc="$CC" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CC_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CC_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CC_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } -CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then - am__fastdepCC_TRUE= - am__fastdepCC_FALSE='#' -else - am__fastdepCC_TRUE='#' - am__fastdepCC_FALSE= -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." "$LINENO" 5; } -fi - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CXX+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CXX" && break -done - - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CXX=$ac_ct_CXX - fi -fi - - fi -fi -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GXX=yes -else - GXX= -fi -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if test "${ac_cv_prog_cxx_g+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -else - CXXFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - -else - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -depcc="$CXX" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CXX_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CXX_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CXX_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } -CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then - am__fastdepCXX_TRUE= - am__fastdepCXX_FALSE='#' -else - am__fastdepCXX_TRUE='#' - am__fastdepCXX_FALSE= -fi - - - if test "$GCC" = yes; then - GCC_TRUE= - GCC_FALSE='#' -else - GCC_TRUE='#' - GCC_FALSE= -fi - # let the Makefile know if we're gcc - -case `pwd` in - *\ * | *\ *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; -esac - - - -macro_version='2.2.6b' -macro_revision='1.3017' - - - - - - - - - - - - - -ltmain="$ac_aux_dir/ltmain.sh" - -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if test "${ac_cv_build+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error "invalid value of canonical build" "$LINENO" 5;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if test "${ac_cv_host+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error "invalid value of canonical host" "$LINENO" 5;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if test "${ac_cv_path_SED+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if test "${ac_cv_path_GREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if test "${ac_cv_path_EGREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if test "${ac_cv_path_FGREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 - then ac_cv_path_FGREP="$GREP -F" - else - if test -z "$FGREP"; then - ac_path_FGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in fgrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue -# Check for GNU ac_path_FGREP and select it if it is found. - # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in -*GNU*) - ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'FGREP' >> "conftest.nl" - "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_FGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_FGREP="$ac_path_FGREP" - ac_path_FGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_FGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_FGREP"; then - as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_FGREP=$FGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } - FGREP="$ac_cv_path_FGREP" - - -test -z "$GREP" && GREP=grep - - - - - - - - - - - - - - - - - - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if test "${lt_cv_path_LD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if test "${lt_cv_prog_gnu_ld+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if test "${lt_cv_path_NM+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - : ${lt_cv_path_NM=no} -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -$as_echo "$lt_cv_path_NM" >&6; } -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$ac_tool_prefix"; then - for ac_prog in "dumpbin -symbols" "link -dump -symbols" - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_DUMPBIN+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DUMPBIN"; then - ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DUMPBIN=$ac_cv_prog_DUMPBIN -if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$DUMPBIN" && break - done -fi -if test -z "$DUMPBIN"; then - ac_ct_DUMPBIN=$DUMPBIN - for ac_prog in "dumpbin -symbols" "link -dump -symbols" -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DUMPBIN"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN -if test -n "$ac_ct_DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -$as_echo "$ac_ct_DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_DUMPBIN" && break -done - - if test "x$ac_ct_DUMPBIN" = x; then - DUMPBIN=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DUMPBIN=$ac_ct_DUMPBIN - fi -fi - - - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" - fi -fi -test -z "$NM" && NM=nm - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -$as_echo_n "checking the name lister ($NM) interface... " >&6; } -if test "${lt_cv_nm_interface+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:5532: $ac_compile\"" >&5) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&5 - (eval echo "\"\$as_me:5535: $NM \\\"conftest.$ac_objext\\\"\"" >&5) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&5 - (eval echo "\"\$as_me:5538: output\"" >&5) - cat conftest.out >&5 - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -$as_echo "$lt_cv_nm_interface" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } -fi - -# find the maximum length of command line arguments -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -$as_echo_n "checking the maximum length of command line arguments... " >&6; } -if test "${lt_cv_sys_max_cmd_len+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ - = "XX$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac - -fi - -if test -n $lt_cv_sys_max_cmd_len ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -$as_echo "$lt_cv_sys_max_cmd_len" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } -fi -max_cmd_len=$lt_cv_sys_max_cmd_len - - - - - - -: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 -$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 -$as_echo "$xsi_shell" >&6; } - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 -$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } -lt_shell_append=no -( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 -$as_echo "$lt_shell_append" >&6; } - - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi - - - - - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -$as_echo_n "checking for $LD option to reload object files... " >&6; } -if test "${lt_cv_ld_reload_flag+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_reload_flag='-r' -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -$as_echo "$lt_cv_ld_reload_flag" >&6; } -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - darwin*) - if test "$GCC" = yes; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. -set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OBJDUMP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OBJDUMP"; then - ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OBJDUMP=$ac_cv_prog_OBJDUMP -if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OBJDUMP"; then - ac_ct_OBJDUMP=$OBJDUMP - # Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OBJDUMP"; then - ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OBJDUMP="objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP -if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OBJDUMP" = x; then - OBJDUMP="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OBJDUMP=$ac_ct_OBJDUMP - fi -else - OBJDUMP="$ac_cv_prog_OBJDUMP" -fi - -test -z "$OBJDUMP" && OBJDUMP=objdump - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -$as_echo_n "checking how to recognize dependent libraries... " >&6; } -if test "${lt_cv_deplibs_check_method+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. - -case $host_os in -aix[4-9]*) - lt_cv_deplibs_check_method=pass_all - ;; - -beos*) - lt_cv_deplibs_check_method=pass_all - ;; - -bsdi[45]*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; - -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; - -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - if ( file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[3-9]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -$as_echo "$lt_cv_deplibs_check_method" >&6; } -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AR="${ac_tool_prefix}ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_AR="ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_AR" = x; then - AR="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -else - AR="$ac_cv_prog_AR" -fi - -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -test -z "$STRIP" && STRIP=: - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_RANLIB+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - -test -z "$RANLIB" && RANLIB=: - - - - - - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# Check for command to grab the raw symbol name followed by C symbol from nm. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 -$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } -if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[BCDEGRST]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([_A-Za-z][_A-Za-z0-9]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[BCDT]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[ABCDGISTW]' - ;; -hpux*) - if test "$host_cpu" = ia64; then - symcode='[ABCDEGRST]' - fi - ;; -irix* | nonstopux*) - symcode='[BCDEGRST]' - ;; -osf*) - symcode='[BCDEGQRST]' - ;; -solaris*) - symcode='[BDRT]' - ;; -sco3.2v5*) - symcode='[DT]' - ;; -sysv4.2uw2*) - symcode='[DT]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[ABDT]' - ;; -sysv4) - symcode='[DFNSTU]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[ABCDGIRSTW]' ;; -esac - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK '"\ -" {last_section=section; section=\$ 3};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Now try to grab the symbols. - nlist=conftest.nm - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5 - (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&5 - fi - else - echo "cannot find nm_test_var in $nlist" >&5 - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 - fi - else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done - -fi - -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -$as_echo "failed" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -$as_echo "ok" >&6; } -fi - - - - - - - - - - - - - - - - - - - - - - - -# Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then : - enableval=$enable_libtool_lock; -fi - -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '#line 6744 "configure"' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 -$as_echo_n "checking whether the C compiler needs -belf... " >&6; } -if test "${lt_cv_cc_needs_belf+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_cc_needs_belf=yes -else - lt_cv_cc_needs_belf=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 -$as_echo "$lt_cv_cc_needs_belf" >&6; } - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks="$enable_libtool_lock" - - - case $host_os in - rhapsody* | darwin*) - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. -set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_DSYMUTIL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DSYMUTIL"; then - ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DSYMUTIL=$ac_cv_prog_DSYMUTIL -if test -n "$DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 -$as_echo "$DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DSYMUTIL"; then - ac_ct_DSYMUTIL=$DSYMUTIL - # Extract the first word of "dsymutil", so it can be a program name with args. -set dummy dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DSYMUTIL"; then - ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL -if test -n "$ac_ct_DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 -$as_echo "$ac_ct_DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DSYMUTIL" = x; then - DSYMUTIL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DSYMUTIL=$ac_ct_DSYMUTIL - fi -else - DSYMUTIL="$ac_cv_prog_DSYMUTIL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. -set dummy ${ac_tool_prefix}nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_NMEDIT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NMEDIT"; then - ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -NMEDIT=$ac_cv_prog_NMEDIT -if test -n "$NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 -$as_echo "$NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_NMEDIT"; then - ac_ct_NMEDIT=$NMEDIT - # Extract the first word of "nmedit", so it can be a program name with args. -set dummy nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_NMEDIT"; then - ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_NMEDIT="nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT -if test -n "$ac_ct_NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 -$as_echo "$ac_ct_NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_NMEDIT" = x; then - NMEDIT=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - NMEDIT=$ac_ct_NMEDIT - fi -else - NMEDIT="$ac_cv_prog_NMEDIT" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. -set dummy ${ac_tool_prefix}lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_LIPO+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$LIPO"; then - ac_cv_prog_LIPO="$LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_LIPO="${ac_tool_prefix}lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -LIPO=$ac_cv_prog_LIPO -if test -n "$LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 -$as_echo "$LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_LIPO"; then - ac_ct_LIPO=$LIPO - # Extract the first word of "lipo", so it can be a program name with args. -set dummy lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_LIPO"; then - ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_LIPO="lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO -if test -n "$ac_ct_LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 -$as_echo "$ac_ct_LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_LIPO" = x; then - LIPO=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - LIPO=$ac_ct_LIPO - fi -else - LIPO="$ac_cv_prog_LIPO" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OTOOL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL"; then - ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OTOOL="${ac_tool_prefix}otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL=$ac_cv_prog_OTOOL -if test -n "$OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL"; then - ac_ct_OTOOL=$OTOOL - # Extract the first word of "otool", so it can be a program name with args. -set dummy otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL"; then - ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OTOOL="otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL -if test -n "$ac_ct_OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 -$as_echo "$ac_ct_OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL" = x; then - OTOOL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL=$ac_ct_OTOOL - fi -else - OTOOL="$ac_cv_prog_OTOOL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OTOOL64+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL64"; then - ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL64=$ac_cv_prog_OTOOL64 -if test -n "$OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 -$as_echo "$OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL64"; then - ac_ct_OTOOL64=$OTOOL64 - # Extract the first word of "otool64", so it can be a program name with args. -set dummy otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL64"; then - ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OTOOL64="otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 -if test -n "$ac_ct_OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 -$as_echo "$ac_ct_OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL64" = x; then - OTOOL64=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL64=$ac_ct_OTOOL64 - fi -else - OTOOL64="$ac_cv_prog_OTOOL64" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 -$as_echo_n "checking for -single_module linker flag... " >&6; } -if test "${lt_cv_apple_cc_single_mod+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&5 - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 -$as_echo "$lt_cv_apple_cc_single_mod" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } -if test "${lt_cv_ld_exported_symbols_list+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_ld_exported_symbols_list=yes -else - lt_cv_ld_exported_symbols_list=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } - case $host_os in - rhapsody* | darwin1.[012]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[91]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[012]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - if test "$DSYMUTIL" != ":"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -for ac_header in dlfcn.h -do : - ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default -" -if test "x$ac_cv_header_dlfcn_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_DLFCN_H 1 -_ACEOF - -fi - -done - - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CXX+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CXX" && break -done - - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CXX=$ac_ct_CXX - fi -fi - - fi -fi -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GXX=yes -else - GXX= -fi -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if test "${ac_cv_prog_cxx_g+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -else - CXXFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - -else - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -depcc="$CXX" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CXX_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CXX_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CXX_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } -CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then - am__fastdepCXX_TRUE= - am__fastdepCXX_FALSE='#' -else - am__fastdepCXX_TRUE='#' - am__fastdepCXX_FALSE= -fi - - -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 -$as_echo_n "checking how to run the C++ preprocessor... " >&6; } -if test -z "$CXXCPP"; then - if test "${ac_cv_prog_CXXCPP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" - do - ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CXXCPP=$CXXCPP - -fi - CXXCPP=$ac_cv_prog_CXXCPP -else - ac_cv_prog_CXXCPP=$CXXCPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 -$as_echo "$CXXCPP" >&6; } -ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -_lt_caught_CXX_error=yes; } -fi - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -else - _lt_caught_CXX_error=yes -fi - - - - - -# Set options - - - - enable_dlopen=no - - - enable_win32_dll=no - - - # Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then : - enableval=$enable_shared; p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_shared=yes -fi - - - - - - - - - - # Check whether --enable-static was given. -if test "${enable_static+set}" = set; then : - enableval=$enable_static; p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_static=yes -fi - - - - - - - - - - -# Check whether --with-pic was given. -if test "${with_pic+set}" = set; then : - withval=$with_pic; pic_mode="$withval" -else - pic_mode=default -fi - - -test -z "$pic_mode" && pic_mode=default - - - - - - - - # Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then : - enableval=$enable_fast_install; p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_fast_install=yes -fi - - - - - - - - - - - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' - - - - - - - - - - - - - - - - - - - - - - - - - -test -z "$LN_S" && LN_S="ln -s" - - - - - - - - - - - - - - -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 -$as_echo_n "checking for objdir... " >&6; } -if test "${lt_cv_objdir+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 -$as_echo "$lt_cv_objdir" >&6; } -objdir=$lt_cv_objdir - - - - - -cat >>confdefs.h <<_ACEOF -#define LT_OBJDIR "$lt_cv_objdir/" -_ACEOF - - - - - - - - - - - - - - - - - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -sed_quote_subst='s/\(["`$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld="$lt_cv_prog_gnu_ld" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 -$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/${ac_tool_prefix}file; then - lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - - -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 -$as_echo_n "checking for file... " >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/file; then - lt_cv_path_MAGIC_CMD="$ac_dir/file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - else - MAGIC_CMD=: - fi -fi - - fi - ;; -esac - -# Use C for the default configuration in the libtool script - -lt_save_CC="$CC" -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -objext=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* - - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - -lt_prog_compiler_no_builtin_flag= - -if test "$GCC" = yes; then - lt_prog_compiler_no_builtin_flag=' -fno-builtin' - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:8664: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:8668: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } - -if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then - lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" -else - : -fi - -fi - - - - - - - lt_prog_compiler_wl= -lt_prog_compiler_pic= -lt_prog_compiler_static= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } - - if test "$GCC" = yes; then - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_static='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - lt_prog_compiler_pic='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic='-fno-common' - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - ;; - - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic=-Kconform_pic - fi - ;; - - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - else - lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. - ecc*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='--shared' - lt_prog_compiler_static='--static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - xl*) - # IBM XL C 8.0/Fortran 10.1 on PPC - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-qpic' - lt_prog_compiler_static='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Wl,' - ;; - *Sun\ F*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='' - ;; - esac - ;; - esac - ;; - - newsos6) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - - rdos*) - lt_prog_compiler_static='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - lt_prog_compiler_wl='-Qoption ld ';; - *) - lt_prog_compiler_wl='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl='-Qoption ld ' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic='-Kconform_pic' - lt_prog_compiler_static='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_can_build_shared=no - ;; - - uts4*) - lt_prog_compiler_pic='-pic' - lt_prog_compiler_static='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared=no - ;; - esac - fi - -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic= - ;; - *) - lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 -$as_echo "$lt_prog_compiler_pic" >&6; } - - - - - - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if test "${lt_cv_prog_compiler_pic_works+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_works=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:9003: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:9007: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } - -if test x"$lt_cv_prog_compiler_pic_works" = xyes; then - case $lt_prog_compiler_pic in - "" | " "*) ;; - *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; - esac -else - lt_prog_compiler_pic= - lt_prog_compiler_can_build_shared=no -fi - -fi - - - - - - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if test "${lt_cv_prog_compiler_static_works+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_static_works=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works=yes - fi - else - lt_cv_prog_compiler_static_works=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 -$as_echo "$lt_cv_prog_compiler_static_works" >&6; } - -if test x"$lt_cv_prog_compiler_static_works" = xyes; then - : -else - lt_prog_compiler_static= -fi - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test "${lt_cv_prog_compiler_c_o+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:9108: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:9112: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test "${lt_cv_prog_compiler_c_o+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:9163: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:9167: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } - if test "$hard_links" = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - - runpath_var= - allow_undefined_flag= - always_export_symbols=no - archive_cmds= - archive_expsym_cmds= - compiler_needs_object=no - enable_shared_with_static_runtimes=no - export_dynamic_flag_spec= - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - hardcode_automatic=no - hardcode_direct=no - hardcode_direct_absolute=no - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld= - hardcode_libdir_separator= - hardcode_minus_L=no - hardcode_shlibpath_var=unsupported - inherit_rpath=no - link_all_deplibs=unknown - module_cmds= - module_expsym_cmds= - old_archive_from_new_cmds= - old_archive_from_expsyms_cmds= - thread_safe_flag_spec= - whole_archive_flag_spec= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - linux* | k*bsd*-gnu) - link_all_deplibs=no - ;; - esac - - ld_shlibs=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec= - fi - supports_anon_versioning=no - case `$LD -v 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[3-9]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - allow_undefined_flag=unsupported - always_export_symbols=no - enable_shared_with_static_runtimes=yes - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs=no - fi - ;; - - interix[3-9]*) - hardcode_direct=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test "$host_os" = linux-dietlibc; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no - then - tmp_addflag= - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - whole_archive_flag_spec= - tmp_sharedflag='--shared' ;; - xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - compiler_needs_object=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - xlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld='-rpath $libdir' - archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - ld_shlibs=no - fi - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - - if test "$ld_shlibs" = no; then - runpath_var= - hardcode_libdir_flag_spec= - export_dynamic_flag_spec= - whole_archive_flag_spec= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag=unsupported - always_export_symbols=yes - archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - - aix[4-9]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds='' - hardcode_direct=yes - hardcode_direct_absolute=yes - hardcode_libdir_separator=':' - link_all_deplibs=yes - file_list_spec='${wl}-f,' - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L=yes - hardcode_libdir_flag_spec='-L$libdir' - hardcode_libdir_separator= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - link_all_deplibs=no - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - export_dynamic_flag_spec='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag="-z nodefs" - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag=' ${wl}-bernotok' - allow_undefined_flag=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec='$convenience' - archive_cmds_need_lc=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - bsdi[45]*) - export_dynamic_flag_spec=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_from_new_cmds='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes=yes - ;; - - darwin* | rhapsody*) - - - archive_cmds_need_lc=no - hardcode_direct=no - hardcode_automatic=yes - hardcode_shlibpath_var=unsupported - whole_archive_flag_spec='' - link_all_deplibs=yes - allow_undefined_flag="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=echo - archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - - else - ld_shlibs=no - fi - - ;; - - dgux*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - freebsd1*) - ld_shlibs=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - export_dynamic_flag_spec='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_flag_spec_ld='+b $libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct=no - hardcode_shlibpath_var=no - ;; - *) - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int foo(void) {} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - inherit_rpath=yes - link_all_deplibs=yes - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - newsos6) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_shlibpath_var=no - ;; - - *nto* | *qnx*) - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct=yes - hardcode_shlibpath_var=no - hardcode_direct_absolute=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-R$libdir' - ;; - *) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac - fi - else - ld_shlibs=no - fi - ;; - - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec='-rpath $libdir' - fi - archive_cmds_need_lc='no' - hardcode_libdir_separator=: - ;; - - solaris*) - no_undefined_flag=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='${wl}' - archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_shlibpath_var=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - whole_archive_flag_spec='-z allextract$convenience -z defaultextract' - fi - ;; - esac - link_all_deplibs=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds='$CC -r -o $output$reload_objs' - hardcode_direct=no - ;; - motorola) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - ;; - - sysv4.3*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - export_dynamic_flag_spec='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag='${wl}-z,text' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag='${wl}-z,text' - allow_undefined_flag='${wl}-z,nodefs' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-R,$libdir' - hardcode_libdir_separator=':' - link_all_deplibs=yes - export_dynamic_flag_spec='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - *) - ld_shlibs=no - ;; - esac - - if test x$host_vendor = xsni; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - export_dynamic_flag_spec='${wl}-Blargedynsym' - ;; - esac - fi - fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 -$as_echo "$ld_shlibs" >&6; } -test "$ld_shlibs" = no && can_build_shared=no - -with_gnu_ld=$with_gnu_ld - - - - - - - - - - - - - - - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl - pic_flag=$lt_prog_compiler_pic - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag - allow_undefined_flag= - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 - (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - then - archive_cmds_need_lc=no - else - archive_cmds_need_lc=yes - fi - allow_undefined_flag=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5 -$as_echo "$archive_cmds_need_lc" >&6; } - ;; - esac - fi - ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } - -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` - else - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[lt_foo]++; } - if (lt_freq[lt_foo] == 1) { print lt_foo; } -}'` - sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[4-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[3-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # Some binutils ld are patched to set DT_RUNPATH - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : - shlibpath_overrides_runpath=yes -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action= -if test -n "$hardcode_libdir_flag_spec" || - test -n "$runpath_var" || - test "X$hardcode_automatic" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && - test "$hardcode_minus_L" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action=unsupported -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 -$as_echo "$hardcode_action" >&6; } - -if test "$hardcode_action" = relink || - test "$inherit_rpath" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - - - - - - if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - -fi - - ;; - - *) - ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = x""yes; then : - lt_cv_dlopen="shl_load" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -$as_echo_n "checking for shl_load in -ldld... " >&6; } -if test "${ac_cv_lib_dld_shl_load+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load (); -int -main () -{ -return shl_load (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_shl_load=yes -else - ac_cv_lib_dld_shl_load=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -$as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : - lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" -else - ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 -$as_echo_n "checking for dlopen in -lsvld... " >&6; } -if test "${ac_cv_lib_svld_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsvld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_svld_dlopen=yes -else - ac_cv_lib_svld_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 -$as_echo "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 -$as_echo_n "checking for dld_link in -ldld... " >&6; } -if test "${ac_cv_lib_dld_dld_link+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dld_link (); -int -main () -{ -return dld_link (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_dld_link=yes -else - ac_cv_lib_dld_dld_link=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 -$as_echo "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : - lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" -fi - - -fi - - -fi - - -fi - - -fi - - -fi - - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 -$as_echo_n "checking whether a program can dlopen itself... " >&6; } -if test "${lt_cv_dlopen_self+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line 11547 "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 -$as_echo "$lt_cv_dlopen_self" >&6; } - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 -$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } -if test "${lt_cv_dlopen_self_static+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self_static=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line 11643 "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self_static=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 -$as_echo "$lt_cv_dlopen_self_static" >&6; } - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi - - - - - - - - - - - - - - - - - -striplib= -old_striplib= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 -$as_echo_n "checking whether stripping libraries is possible... " >&6; } -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - ;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - ;; - esac -fi - - - - - - - - - - - - - # Report which library types will actually be built - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 -$as_echo_n "checking if libtool supports shared libraries... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 -$as_echo "$can_build_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 -$as_echo_n "checking whether to build shared libraries... " >&6; } - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[4-9]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -$as_echo "$enable_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 -$as_echo_n "checking whether to build static libraries... " >&6; } - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 -$as_echo "$enable_static" >&6; } - - - - -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -CC="$lt_save_CC" - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -archive_cmds_need_lc_CXX=no -allow_undefined_flag_CXX= -always_export_symbols_CXX=no -archive_expsym_cmds_CXX= -compiler_needs_object_CXX=no -export_dynamic_flag_spec_CXX= -hardcode_direct_CXX=no -hardcode_direct_absolute_CXX=no -hardcode_libdir_flag_spec_CXX= -hardcode_libdir_flag_spec_ld_CXX= -hardcode_libdir_separator_CXX= -hardcode_minus_L_CXX=no -hardcode_shlibpath_var_CXX=unsupported -hardcode_automatic_CXX=no -inherit_rpath_CXX=no -module_cmds_CXX= -module_expsym_cmds_CXX= -link_all_deplibs_CXX=unknown -old_archive_cmds_CXX=$old_archive_cmds -no_undefined_flag_CXX= -whole_archive_flag_spec_CXX= -enable_shared_with_static_runtimes_CXX=no - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -objext_CXX=$objext - -# No sense in running all these tests if we already determined that -# the CXX compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_caught_CXX_error" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="int some_variable = 0;" - - # Code to be used in simple link tests - lt_simple_link_test_code='int main(int, char *[]) { return(0); }' - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - - # save warnings/boilerplate of simple test code - ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* - - ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* - - - # Allow CC to be a program name with arguments. - lt_save_CC=$CC - lt_save_LD=$LD - lt_save_GCC=$GCC - GCC=$GXX - lt_save_with_gnu_ld=$with_gnu_ld - lt_save_path_LD=$lt_cv_path_LD - if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx - else - $as_unset lt_cv_prog_gnu_ld - fi - if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX - else - $as_unset lt_cv_path_LD - fi - test -z "${LDCXX+set}" || LD=$LDCXX - CC=${CXX-"c++"} - compiler=$CC - compiler_CXX=$CC - for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - - if test -n "$compiler"; then - # We don't want -fno-exception when compiling C++ code, so set the - # no_builtin_flag separately - if test "$GXX" = yes; then - lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' - else - lt_prog_compiler_no_builtin_flag_CXX= - fi - - if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if test "${lt_cv_path_LD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if test "${lt_cv_prog_gnu_ld+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | - $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec_CXX= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - - else - GXX=no - with_gnu_ld=no - wlarc= - fi - - # PORTME: fill in a description of your system's C++ link characteristics - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - ld_shlibs_CXX=yes - case $host_os in - aix3*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aix[4-9]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds_CXX='' - hardcode_direct_CXX=yes - hardcode_direct_absolute_CXX=yes - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - file_list_spec_CXX='${wl}-f,' - - if test "$GXX" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct_CXX=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L_CXX=yes - hardcode_libdir_flag_spec_CXX='-L$libdir' - hardcode_libdir_separator_CXX= - fi - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - export_dynamic_flag_spec_CXX='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to - # export. - always_export_symbols_CXX=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag_CXX='-berok' - # Determine the default libpath from the value encoded in an empty - # executable. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" - - archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag_CXX="-z nodefs" - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_CXX=' ${wl}-bernotok' - allow_undefined_flag_CXX=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_CXX='$convenience' - archive_cmds_need_lc_CXX=yes - # This is similar to how AIX traditionally builds its shared - # libraries. - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag_CXX=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs_CXX=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_CXX='-L$libdir' - allow_undefined_flag_CXX=unsupported - always_export_symbols_CXX=no - enable_shared_with_static_runtimes_CXX=yes - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs_CXX=no - fi - ;; - darwin* | rhapsody*) - - - archive_cmds_need_lc_CXX=no - hardcode_direct_CXX=no - hardcode_automatic_CXX=yes - hardcode_shlibpath_var_CXX=unsupported - whole_archive_flag_spec_CXX='' - link_all_deplibs_CXX=yes - allow_undefined_flag_CXX="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=echo - archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - if test "$lt_cv_apple_cc_single_mod" != "yes"; then - archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" - archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" - fi - - else - ld_shlibs_CXX=no - fi - - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - freebsd[12]*) - # C++ shared libraries reported to be fairly broken before - # switch to ELF - ld_shlibs_CXX=no - ;; - - freebsd-elf*) - archive_cmds_need_lc_CXX=no - ;; - - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - ld_shlibs_CXX=yes - ;; - - gnu*) - ;; - - hpux9*) - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_CXX=: - export_dynamic_flag_spec_CXX='${wl}-E' - hardcode_direct_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - *) - if test "$GXX" = yes; then - archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - export_dynamic_flag_spec_CXX='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - ;; - *) - hardcode_direct_CXX=yes - hardcode_direct_absolute_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - - interix[3-9]*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' - fi - fi - link_all_deplibs_CXX=yes - ;; - esac - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - inherit_rpath_CXX=yes - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc* | ecpc* ) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - archive_cmds_need_lc_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - case `$CC -V` in - *pgCC\ [1-5]* | *pgcpp\ [1-5]*) - prelink_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ - compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' - old_archive_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ - $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ - $RANLIB $oldlib' - archive_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - archive_expsym_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - *) # Version 6 will use weak symbols - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - esac - - hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - xl*) - # IBM XL 8.0 on PPC, with GNU ld - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' - hardcode_libdir_flag_spec_CXX='-R$libdir' - whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - compiler_needs_object_CXX=yes - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - - lynxos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - m88k*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - - *nto* | *qnx*) - ld_shlibs_CXX=yes - ;; - - openbsd2*) - # C++ shared libraries are fairly broken - ld_shlibs_CXX=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - hardcode_direct_absolute_CXX=yes - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - export_dynamic_flag_spec_CXX='${wl}-E' - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd=echo - else - ld_shlibs_CXX=no - fi - ;; - - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - hardcode_libdir_separator_CXX=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - case $host in - osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; - *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; - esac - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - cxx*) - case $host in - osf3*) - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - ;; - *) - allow_undefined_flag_CXX=' -expect_unresolved \*' - archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ - $RM $lib.exp' - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - ;; - esac - - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - case $host in - osf3*) - archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - *) - archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - esac - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - - psos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - archive_cmds_need_lc_CXX=yes - no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_shlibpath_var_CXX=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' - ;; - esac - link_all_deplibs_CXX=yes - - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - no_undefined_flag_CXX=' ${wl}-z ${wl}defs' - if $CC --version | $GREP -v '^2\.7' > /dev/null; then - archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - fi - - hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag_CXX='${wl}-z,text' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag_CXX='${wl}-z,text' - allow_undefined_flag_CXX='${wl}-z,nodefs' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - export_dynamic_flag_spec_CXX='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - vxworks*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -$as_echo "$ld_shlibs_CXX" >&6; } - test "$ld_shlibs_CXX" = no && can_build_shared=no - - GCC_CXX="$GXX" - LD_CXX="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - # Dependencies to place before and after the object being linked: -predep_objects_CXX= -postdep_objects_CXX= -predeps_CXX= -postdeps_CXX= -compiler_lib_search_path_CXX= - -cat > conftest.$ac_ext <<_LT_EOF -class Foo -{ -public: - Foo (void) { a = 0; } -private: - int a; -}; -_LT_EOF - -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - - for p in `eval "$output_verbose_link_cmd"`; do - case $p in - - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test $p = "-L" || - test $p = "-R"; then - prev=$p - continue - else - prev= - fi - - if test "$pre_test_object_deps_done" = no; then - case $p in - -L* | -R*) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$compiler_lib_search_path_CXX"; then - compiler_lib_search_path_CXX="${prev}${p}" - else - compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$postdeps_CXX"; then - postdeps_CXX="${prev}${p}" - else - postdeps_CXX="${postdeps_CXX} ${prev}${p}" - fi - fi - ;; - - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi - - if test "$pre_test_object_deps_done" = no; then - if test -z "$predep_objects_CXX"; then - predep_objects_CXX="$p" - else - predep_objects_CXX="$predep_objects_CXX $p" - fi - else - if test -z "$postdep_objects_CXX"; then - postdep_objects_CXX="$p" - else - postdep_objects_CXX="$postdep_objects_CXX $p" - fi - fi - ;; - - *) ;; # Ignore the rest. - - esac - done - - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling CXX test program" -fi - -$RM -f confest.$objext - -# PORTME: override above test on systems where it is broken -case $host_os in -interix[3-9]*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - predep_objects_CXX= - postdep_objects_CXX= - postdeps_CXX= - ;; - -linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - if test "$solaris_use_stlport4" != yes; then - postdeps_CXX='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - postdeps_CXX='-library=Cstd -library=Crun' - fi - ;; - esac - ;; -esac - - -case " $postdeps_CXX " in -*" -lc "*) archive_cmds_need_lc_CXX=no ;; -esac - compiler_lib_search_dirs_CXX= -if test -n "${compiler_lib_search_path_CXX}"; then - compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - lt_prog_compiler_wl_CXX= -lt_prog_compiler_pic_CXX= -lt_prog_compiler_static_CXX= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } - - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - lt_prog_compiler_pic_CXX='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic_CXX='-DDLL_EXPORT' - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_CXX='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - lt_prog_compiler_pic_CXX= - ;; - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_CXX=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - esac - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic_CXX='-fPIC -shared' - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - esac - else - case $host_os in - aix[4-9]*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - else - lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - dgux*) - case $cc_basename in - ec++*) - lt_prog_compiler_pic_CXX='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - lt_prog_compiler_pic_CXX='+Z' - fi - ;; - aCC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_CXX='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # KAI C++ Compiler - lt_prog_compiler_wl_CXX='--backend -Wl,' - lt_prog_compiler_pic_CXX='-fPIC' - ;; - ecpc* ) - # old Intel C++ for x86_64 which still supported -KPIC. - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-static' - ;; - icpc* ) - # Intel C++, used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-fPIC' - lt_prog_compiler_static_CXX='-static' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-fpic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - xlc* | xlC*) - # IBM XL 8.0 on PPC - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-qpic' - lt_prog_compiler_static_CXX='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - lt_prog_compiler_pic_CXX='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd* | netbsdelf*-gnu) - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic_CXX='-fPIC -shared' - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - lt_prog_compiler_wl_CXX='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - lt_prog_compiler_pic_CXX='-pic' - ;; - cxx*) - # Digital/Compaq C++ - lt_prog_compiler_wl_CXX='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - lt_prog_compiler_pic_CXX='-pic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - lcc*) - # Lucid - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - lt_prog_compiler_pic_CXX='-KPIC' - ;; - *) - ;; - esac - ;; - vxworks*) - ;; - *) - lt_prog_compiler_can_build_shared_CXX=no - ;; - esac - fi - -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_CXX= - ;; - *) - lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5 -$as_echo "$lt_prog_compiler_pic_CXX" >&6; } - - - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } -if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_works_CXX=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:13599: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:13603: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works_CXX=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } - -if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then - case $lt_prog_compiler_pic_CXX in - "" | " "*) ;; - *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; - esac -else - lt_prog_compiler_pic_CXX= - lt_prog_compiler_can_build_shared_CXX=no -fi - -fi - - - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_static_works_CXX=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works_CXX=yes - fi - else - lt_cv_prog_compiler_static_works_CXX=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } - -if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then - : -else - lt_prog_compiler_static_CXX= -fi - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o_CXX=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:13698: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:13702: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_CXX=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o_CXX=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:13750: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:13754: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_CXX=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } - - - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } - if test "$hard_links" = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - case $host_os in - aix[4-9]*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - export_symbols_cmds_CXX="$ltdll_cmds" - ;; - cygwin* | mingw* | cegcc*) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' - ;; - linux* | k*bsd*-gnu) - link_all_deplibs_CXX=no - ;; - *) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac - exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -$as_echo "$ld_shlibs_CXX" >&6; } -test "$ld_shlibs_CXX" = no && can_build_shared=no - -with_gnu_ld_CXX=$with_gnu_ld - - - - - - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_CXX" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_CXX=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds_CXX in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_CXX - pic_flag=$lt_prog_compiler_pic_CXX - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_CXX - allow_undefined_flag_CXX= - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 - (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - then - archive_cmds_need_lc_CXX=no - else - archive_cmds_need_lc_CXX=yes - fi - allow_undefined_flag_CXX=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc_CXX" >&5 -$as_echo "$archive_cmds_need_lc_CXX" >&6; } - ;; - esac - fi - ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } - -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[4-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[3-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # Some binutils ld are patched to set DT_RUNPATH - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : - shlibpath_overrides_runpath=yes -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action_CXX= -if test -n "$hardcode_libdir_flag_spec_CXX" || - test -n "$runpath_var_CXX" || - test "X$hardcode_automatic_CXX" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct_CXX" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && - test "$hardcode_minus_L_CXX" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action_CXX=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_CXX=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_CXX=unsupported -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 -$as_echo "$hardcode_action_CXX" >&6; } - -if test "$hardcode_action_CXX" = relink || - test "$inherit_rpath_CXX" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - - - - - - - fi # test -n "$compiler" - - CC=$lt_save_CC - LDCXX=$LD - LD=$lt_save_LD - GCC=$lt_save_GCC - with_gnu_ld=$lt_save_with_gnu_ld - lt_cv_path_LDCXX=$lt_cv_path_LD - lt_cv_path_LD=$lt_save_path_LD - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test "$_lt_caught_CXX_error" != yes - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - - - - - - - - - - - ac_config_commands="$ac_config_commands libtool" - - - - -# Only expand once: - - - - -# Check whether some low-level functions/files are available - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_cxx_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - - -# These are tested for by AC_HEADER_STDC, but I check again to set the var -ac_fn_cxx_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" -if test "x$ac_cv_header_stdint_h" = x""yes; then : - ac_cv_have_stdint_h=1 -else - ac_cv_have_stdint_h=0 -fi - - -ac_fn_cxx_check_header_mongrel "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_types_h" = x""yes; then : - ac_cv_have_systypes_h=1 -else - ac_cv_have_systypes_h=0 -fi - - -ac_fn_cxx_check_header_mongrel "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default" -if test "x$ac_cv_header_inttypes_h" = x""yes; then : - ac_cv_have_inttypes_h=1 -else - ac_cv_have_inttypes_h=0 -fi - - -for ac_header in unistd.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" -if test "x$ac_cv_header_unistd_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_UNISTD_H 1 -_ACEOF - ac_cv_have_unistd_h=1 -else - ac_cv_have_unistd_h=0 -fi - -done - -for ac_header in syscall.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "syscall.h" "ac_cv_header_syscall_h" "$ac_includes_default" -if test "x$ac_cv_header_syscall_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYSCALL_H 1 -_ACEOF - -fi - -done - -for ac_header in sys/syscall.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "sys/syscall.h" "ac_cv_header_sys_syscall_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_syscall_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_SYSCALL_H 1 -_ACEOF - -fi - -done - -# For backtrace with glibc. -for ac_header in execinfo.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "execinfo.h" "ac_cv_header_execinfo_h" "$ac_includes_default" -if test "x$ac_cv_header_execinfo_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_EXECINFO_H 1 -_ACEOF - -fi - -done - -# For backtrace with libunwind. -for ac_header in libunwind.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "libunwind.h" "ac_cv_header_libunwind_h" "$ac_includes_default" -if test "x$ac_cv_header_libunwind_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBUNWIND_H 1 -_ACEOF - ac_cv_have_libunwind_h=1 -else - ac_cv_have_libunwind_h=0 -fi - -done - -for ac_header in ucontext.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "ucontext.h" "ac_cv_header_ucontext_h" "$ac_includes_default" -if test "x$ac_cv_header_ucontext_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_UCONTEXT_H 1 -_ACEOF - -fi - -done - -for ac_header in sys/utsname.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "sys/utsname.h" "ac_cv_header_sys_utsname_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_utsname_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_UTSNAME_H 1 -_ACEOF - -fi - -done - -for ac_header in pwd.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "pwd.h" "ac_cv_header_pwd_h" "$ac_includes_default" -if test "x$ac_cv_header_pwd_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_PWD_H 1 -_ACEOF - -fi - -done - -for ac_header in syslog.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "syslog.h" "ac_cv_header_syslog_h" "$ac_includes_default" -if test "x$ac_cv_header_syslog_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYSLOG_H 1 -_ACEOF - -fi - -done - -for ac_header in sys/time.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_time_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_TIME_H 1 -_ACEOF - -fi - -done - -for ac_header in glob.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "glob.h" "ac_cv_header_glob_h" "$ac_includes_default" -if test "x$ac_cv_header_glob_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_GLOB_H 1 -_ACEOF - -fi - -done - - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5 -$as_echo_n "checking size of void *... " >&6; } -if test "${ac_cv_sizeof_void_p+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_void_p" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ as_fn_set_status 77 -as_fn_error "cannot compute sizeof (void *) -See \`config.log' for more details." "$LINENO" 5; }; } - else - ac_cv_sizeof_void_p=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5 -$as_echo "$ac_cv_sizeof_void_p" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_VOID_P $ac_cv_sizeof_void_p -_ACEOF - - - -# These are the types I need. We look for them in either stdint.h, -# sys/types.h, or inttypes.h, all of which are part of the default-includes. -ac_fn_cxx_check_type "$LINENO" "uint16_t" "ac_cv_type_uint16_t" "$ac_includes_default" -if test "x$ac_cv_type_uint16_t" = x""yes; then : - ac_cv_have_uint16_t=1 -else - ac_cv_have_uint16_t=0 -fi - -ac_fn_cxx_check_type "$LINENO" "u_int16_t" "ac_cv_type_u_int16_t" "$ac_includes_default" -if test "x$ac_cv_type_u_int16_t" = x""yes; then : - ac_cv_have_u_int16_t=1 -else - ac_cv_have_u_int16_t=0 -fi - -ac_fn_cxx_check_type "$LINENO" "__uint16" "ac_cv_type___uint16" "$ac_includes_default" -if test "x$ac_cv_type___uint16" = x""yes; then : - ac_cv_have___uint16=1 -else - ac_cv_have___uint16=0 -fi - - -ac_fn_cxx_check_func "$LINENO" "sigaltstack" "ac_cv_func_sigaltstack" -if test "x$ac_cv_func_sigaltstack" = x""yes; then : - -$as_echo "#define HAVE_SIGALTSTACK 1" >>confdefs.h - -fi - -ac_fn_cxx_check_func "$LINENO" "dladdr" "ac_cv_func_dladdr" -if test "x$ac_cv_func_dladdr" = x""yes; then : - -$as_echo "#define HAVE_DLADDR 1" >>confdefs.h - -fi - -ac_fn_cxx_check_func "$LINENO" "fcntl" "ac_cv_func_fcntl" -if test "x$ac_cv_func_fcntl" = x""yes; then : - -$as_echo "#define HAVE_FCNTL 1" >>confdefs.h - -fi - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__" >&5 -$as_echo_n "checking for __attribute__... " >&6; } - if test "${ac_cv___attribute__+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - static void foo(void) __attribute__ ((unused)); - void foo(void) { exit(1); } -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv___attribute__=yes -else - ac_cv___attribute__=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - - if test "$ac_cv___attribute__" = "yes"; then - -$as_echo "#define HAVE___ATTRIBUTE__ 1" >>confdefs.h - - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv___attribute__" >&5 -$as_echo "$ac_cv___attribute__" >&6; } - -# We only care about these two attributes. -if test x"$ac_cv___attribute__" = x"yes"; then - ac_cv___attribute___noreturn="__attribute__ ((noreturn))" - ac_cv___attribute___printf_4_5="__attribute__((__format__ (__printf__, 4, 5)))" -else - ac_cv___attribute___noreturn= - ac_cv___attribute___printf_4_5= -fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __builtin_expect" >&5 -$as_echo_n "checking for __builtin_expect... " >&6; } - if test "${ac_cv___builtin_expect+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int foo(void) { if (__builtin_expect(0, 0)) return 1; return 0; } -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv___builtin_expect=yes -else - ac_cv___builtin_expect=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - - if test "$ac_cv___builtin_expect" = "yes"; then - -$as_echo "#define HAVE___BUILTIN_EXPECT 1" >>confdefs.h - - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv___builtin_expect" >&5 -$as_echo "$ac_cv___builtin_expect" >&6; } - -if test x"$ac_cv___builtin_expect" = x"yes"; then - ac_cv_have___builtin_expect=1 -else - ac_cv_have___builtin_expect=0 -fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __sync_val_compare_and_swap" >&5 -$as_echo_n "checking for __sync_val_compare_and_swap... " >&6; } - if test "${ac_cv___sync_val_compare_and_swap+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main() { int a; if (__sync_val_compare_and_swap(&a, 0, 1)) return 1; return 0; } -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv___sync_val_compare_and_swap=yes -else - ac_cv___sync_val_compare_and_swap=no - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi - - if test "$ac_cv___sync_val_compare_and_swap" = "yes"; then - -$as_echo "#define HAVE___SYNC_VAL_COMPARE_AND_SWAP 1" >>confdefs.h - - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv___sync_val_compare_and_swap" >&5 -$as_echo "$ac_cv___sync_val_compare_and_swap" >&6; } - - -# On x86_64, instead of libunwind, we can choose to compile with frame-pointers -# (This isn't needed on i386, where -fno-omit-frame-pointer is the default). -# Check whether --enable-frame_pointers was given. -if test "${enable_frame_pointers+set}" = set; then : - enableval=$enable_frame_pointers; -else - enable_frame_pointers=no -fi - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -return __x86_64__ == 1 ? 0 : 1 - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - is_x86_64=yes -else - is_x86_64=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test "$enable_frame_pointers" = yes; then - ENABLE_FRAME_POINTERS_TRUE= - ENABLE_FRAME_POINTERS_FALSE='#' -else - ENABLE_FRAME_POINTERS_TRUE='#' - ENABLE_FRAME_POINTERS_FALSE= -fi - - if test "$is_x86_64" = yes; then - X86_64_TRUE= - X86_64_FALSE='#' -else - X86_64_TRUE='#' - X86_64_FALSE= -fi - - -# Some of the code in this directory depends on pthreads - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -acx_pthread_ok=no - -# We used to check for pthread.h first, but this fails if pthread.h -# requires special compiler flags (e.g. on True64 or Sequent). -# It gets checked for in the link test anyway. - -# First of all, check if the user has set any of the PTHREAD_LIBS, -# etcetera environment variables, and if threads linking works using -# them: -if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5 -$as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char pthread_join (); -int -main () -{ -return pthread_join (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - acx_pthread_ok=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_ok" >&5 -$as_echo "$acx_pthread_ok" >&6; } - if test x"$acx_pthread_ok" = xno; then - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" - fi - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" -fi - -# We must check for the threads library under a number of different -# names; the ordering is very important because some systems -# (e.g. DEC) have both -lpthread and -lpthreads, where one of the -# libraries is broken (non-POSIX). - -# Create a list of thread flags to try. Items starting with a "-" are -# C compiler flags, and other items are library names, except for "none" -# which indicates that we try without any flags at all, and "pthread-config" -# which is a program returning the flags for the Pth emulation library. - -acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" - -# The ordering *is* (sometimes) important. Some notes on the -# individual items follow: - -# pthreads: AIX (must check this before -lpthread) -# none: in case threads are in libc; should be tried before -Kthread and -# other compiler flags to prevent continual compiler warnings -# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) -# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) -# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) -# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) -# -pthreads: Solaris/gcc -# -mthreads: Mingw32/gcc, Lynx/gcc -# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it -# doesn't hurt to check since this sometimes defines pthreads too; -# also defines -D_REENTRANT) -# ... -mt is also the pthreads flag for HP/aCC -# pthread: Linux, etcetera -# --thread-safe: KAI C++ -# pthread-config: use pthread-config program (for GNU Pth library) - -case "${host_cpu}-${host_os}" in - *solaris*) - - # On Solaris (at least, for some versions), libc contains stubbed - # (non-functional) versions of the pthreads routines, so link-based - # tests will erroneously succeed. (We need to link with -pthreads/-mt/ - # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather - # a function called by this macro, so we could check for that, but - # who knows whether they'll stub that too in a future libc.) So, - # we'll just look for -pthreads and -lpthread first: - - acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags" - ;; -esac - -if test x"$acx_pthread_ok" = xno; then -for flag in $acx_pthread_flags; do - - case $flag in - none) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 -$as_echo_n "checking whether pthreads work without any flags... " >&6; } - ;; - - -*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5 -$as_echo_n "checking whether pthreads work with $flag... " >&6; } - PTHREAD_CFLAGS="$flag" - ;; - - pthread-config) - # Extract the first word of "pthread-config", so it can be a program name with args. -set dummy pthread-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_acx_pthread_config+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$acx_pthread_config"; then - ac_cv_prog_acx_pthread_config="$acx_pthread_config" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_acx_pthread_config="yes" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_prog_acx_pthread_config" && ac_cv_prog_acx_pthread_config="no" -fi -fi -acx_pthread_config=$ac_cv_prog_acx_pthread_config -if test -n "$acx_pthread_config"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_config" >&5 -$as_echo "$acx_pthread_config" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test x"$acx_pthread_config" = xno; then continue; fi - PTHREAD_CFLAGS="`pthread-config --cflags`" - PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" - ;; - - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5 -$as_echo_n "checking for the pthreads library -l$flag... " >&6; } - PTHREAD_LIBS="-l$flag" - ;; - esac - - save_LIBS="$LIBS" - save_CFLAGS="$CFLAGS" - LIBS="$PTHREAD_LIBS $LIBS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - - # Check for various functions. We must include pthread.h, - # since some functions may be macros. (On the Sequent, we - # need a special flag -Kthread to make this header compile.) - # We check for pthread_join because it is in -lpthread on IRIX - # while pthread_create is in libc. We check for pthread_attr_init - # due to DEC craziness with -lpthreads. We check for - # pthread_cleanup_push because it is one of the few pthread - # functions on Solaris that doesn't have a non-functional libc stub. - # We try pthread_create on general principles. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - acx_pthread_ok=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_ok" >&5 -$as_echo "$acx_pthread_ok" >&6; } - if test "x$acx_pthread_ok" = xyes; then - break; - fi - - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" -done -fi - -# Various other checks: -if test "x$acx_pthread_ok" = xyes; then - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - - # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 -$as_echo_n "checking for joinable pthread attribute... " >&6; } - attr_name=unknown - for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -int attr=$attr; return attr; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - attr_name=$attr; break -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - done - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5 -$as_echo "$attr_name" >&6; } - if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then - -cat >>confdefs.h <<_ACEOF -#define PTHREAD_CREATE_JOINABLE $attr_name -_ACEOF - - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5 -$as_echo_n "checking if more special flags are required for pthreads... " >&6; } - flag=no - case "${host_cpu}-${host_os}" in - *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; - *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${flag}" >&5 -$as_echo "${flag}" >&6; } - if test "x$flag" != xno; then - PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" - fi - - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" - # More AIX lossage: must compile with xlc_r or cc_r - if test x"$GCC" != xyes; then - for ac_prog in xlc_r cc_r -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_PTHREAD_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$PTHREAD_CC"; then - ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_PTHREAD_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -PTHREAD_CC=$ac_cv_prog_PTHREAD_CC -if test -n "$PTHREAD_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 -$as_echo "$PTHREAD_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$PTHREAD_CC" && break -done -test -n "$PTHREAD_CC" || PTHREAD_CC="${CC}" - - else - PTHREAD_CC=$CC - fi - - # The next part tries to detect GCC inconsistency with -shared on some - # architectures and systems. The problem is that in certain - # configurations, when -shared is specified, GCC "forgets" to - # internally use various flags which are still necessary. - - # - # Prepare the flags - # - save_CFLAGS="$CFLAGS" - save_LIBS="$LIBS" - save_CC="$CC" - - # Try with the flags determined by the earlier checks. - # - # -Wl,-z,defs forces link-time symbol resolution, so that the - # linking checks with -shared actually have any value - # - # FIXME: -fPIC is required for -shared on many architectures, - # so we specify it here, but the right way would probably be to - # properly detect whether it is actually required. - CFLAGS="-shared -fPIC -Wl,-z,defs $CFLAGS $PTHREAD_CFLAGS" - LIBS="$PTHREAD_LIBS $LIBS" - CC="$PTHREAD_CC" - - # In order not to create several levels of indentation, we test - # the value of "$done" until we find the cure or run out of ideas. - done="no" - - # First, make sure the CFLAGS we added are actually accepted by our - # compiler. If not (and OS X's ld, for instance, does not accept -z), - # then we can't do this test. - if test x"$done" = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to check for GCC pthread/shared inconsistencies" >&5 -$as_echo_n "checking whether to check for GCC pthread/shared inconsistencies... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - -else - done=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - if test "x$done" = xyes ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi - fi - - if test x"$done" = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -pthread is sufficient with -shared" >&5 -$as_echo_n "checking whether -pthread is sufficient with -shared... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - done=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - if test "x$done" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - fi - - # - # Linux gcc on some architectures such as mips/mipsel forgets - # about -lpthread - # - if test x"$done" = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lpthread fixes that" >&5 -$as_echo_n "checking whether -lpthread fixes that... " >&6; } - LIBS="-lpthread $PTHREAD_LIBS $save_LIBS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - done=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - if test "x$done" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - PTHREAD_LIBS="-lpthread $PTHREAD_LIBS" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - fi - # - # FreeBSD 4.10 gcc forgets to use -lc_r instead of -lc - # - if test x"$done" = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc_r fixes that" >&5 -$as_echo_n "checking whether -lc_r fixes that... " >&6; } - LIBS="-lc_r $PTHREAD_LIBS $save_LIBS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - done=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - if test "x$done" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - PTHREAD_LIBS="-lc_r $PTHREAD_LIBS" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - fi - if test x"$done" = xno; then - # OK, we have run out of ideas - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Impossible to determine how to use pthreads with shared libraries" >&5 -$as_echo "$as_me: WARNING: Impossible to determine how to use pthreads with shared libraries" >&2;} - - # so it's not safe to assume that we may use pthreads - acx_pthread_ok=no - fi - - CFLAGS="$save_CFLAGS" - LIBS="$save_LIBS" - CC="$save_CC" -else - PTHREAD_CC="$CC" -fi - - - - - -# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: -if test x"$acx_pthread_ok" = xyes; then - -$as_echo "#define HAVE_PTHREAD 1" >>confdefs.h - - : -else - acx_pthread_ok=no - -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - -if test x"$acx_pthread_ok" = x"yes"; then - # To make libglog depend on libpthread on Linux, we need to add - # -lpthread in addition to -pthread. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_self in -lpthread" >&5 -$as_echo_n "checking for pthread_self in -lpthread... " >&6; } -if test "${ac_cv_lib_pthread_pthread_self+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lpthread $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char pthread_self (); -int -main () -{ -return pthread_self (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_pthread_pthread_self=yes -else - ac_cv_lib_pthread_pthread_self=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_self" >&5 -$as_echo "$ac_cv_lib_pthread_pthread_self" >&6; } -if test "x$ac_cv_lib_pthread_pthread_self" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBPTHREAD 1 -_ACEOF - - LIBS="-lpthread $LIBS" - -fi - -fi - -# Check if there is google-gflags library installed. -SAVE_CFLAGS="$CFLAGS" -SAVE_LIBS="$LIBS" - -# Check whether --with-gflags was given. -if test "${with_gflags+set}" = set; then : - withval=$with_gflags; GFLAGS_CFLAGS="-I${with_gflags}/include" - GFLAGS_LIBS="-L${with_gflags}/lib -lgflags" - CFLAGS="$CFLAGS $GFLAGS_CFLAGS" - LIBS="$LIBS $GFLAGS_LIBS" - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lgflags" >&5 -$as_echo_n "checking for main in -lgflags... " >&6; } -if test "${ac_cv_lib_gflags_main+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lgflags $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -int -main () -{ -return main (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_gflags_main=yes -else - ac_cv_lib_gflags_main=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gflags_main" >&5 -$as_echo "$ac_cv_lib_gflags_main" >&6; } -if test "x$ac_cv_lib_gflags_main" = x""yes; then : - ac_cv_have_libgflags=1 -else - ac_cv_have_libgflags=0 -fi - -if test x"$ac_cv_have_libgflags" = x"1"; then - -$as_echo "#define HAVE_LIB_GFLAGS 1" >>confdefs.h - - if test x"$GFLAGS_LIBS" = x""; then - GFLAGS_LIBS="-lgflags" - fi -else - GFLAGS_CFLAGS= - GFLAGS_LIBS= -fi -CFLAGS="$SAVE_CFLAGS" -LIBS="$SAVE_LIBS" - -# TODO(hamaji): Use official m4 macros provided by testing libraries -# once the m4 macro of Google Mocking becomes ready. -# Check if there is Google Test library installed. -# Extract the first word of "gtest-config", so it can be a program name with args. -set dummy gtest-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_GTEST_CONFIG+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$GTEST_CONFIG"; then - ac_cv_prog_GTEST_CONFIG="$GTEST_CONFIG" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_GTEST_CONFIG=""yes"" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -GTEST_CONFIG=$ac_cv_prog_GTEST_CONFIG -if test -n "$GTEST_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTEST_CONFIG" >&5 -$as_echo "$GTEST_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -if test x"$GTEST_CONFIG" = "xyes"; then - GTEST_CFLAGS=`gtest-config --cppflags --cxxflags` - GTEST_LIBS=`gtest-config --ldflags --libs` - -$as_echo "#define HAVE_LIB_GTEST 1" >>confdefs.h - - - # Check if there is Google Mocking library installed. - # Extract the first word of "gmock-config", so it can be a program name with args. -set dummy gmock-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_GMOCK_CONFIG+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$GMOCK_CONFIG"; then - ac_cv_prog_GMOCK_CONFIG="$GMOCK_CONFIG" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_GMOCK_CONFIG=""yes"" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -GMOCK_CONFIG=$ac_cv_prog_GMOCK_CONFIG -if test -n "$GMOCK_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMOCK_CONFIG" >&5 -$as_echo "$GMOCK_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test x"$GMOCK_CONFIG" = "xyes"; then - GMOCK_CFLAGS=`gmock-config --cppflags --cxxflags` - GMOCK_LIBS=`gmock-config --ldflags --libs` - -$as_echo "#define HAVE_LIB_GMOCK 1" >>confdefs.h - - else - # We don't run test cases which use Google Mocking framework. - GMOCK_CFLAGS= - GMOCK_LIBS= - fi -else - # We'll use src/googletest.h for our unittests. - GTEST_CFLAGS= - GTEST_LIBS= -fi - if test x"$GMOCK_CONFIG" = "xyes"; then - HAVE_GMOCK_TRUE= - HAVE_GMOCK_FALSE='#' -else - HAVE_GMOCK_TRUE='#' - HAVE_GMOCK_FALSE= -fi - - -# We want to link in libunwind if it exists -UNWIND_LIBS= -# Unfortunately, we need to check the header file in addition to the -# lib file to check if libunwind is available since libunwind-0.98 -# doesn't install all necessary header files. -if test x"$ac_cv_have_libunwind_h" = x"1"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for backtrace in -lunwind" >&5 -$as_echo_n "checking for backtrace in -lunwind... " >&6; } -if test "${ac_cv_lib_unwind_backtrace+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lunwind $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char backtrace (); -int -main () -{ -return backtrace (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_unwind_backtrace=yes -else - ac_cv_lib_unwind_backtrace=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_unwind_backtrace" >&5 -$as_echo "$ac_cv_lib_unwind_backtrace" >&6; } -if test "x$ac_cv_lib_unwind_backtrace" = x""yes; then : - UNWIND_LIBS=-lunwind -fi - -fi - -if test x"$UNWIND_LIBS" != x""; then - -$as_echo "#define HAVE_LIB_UNWIND 1" >>confdefs.h - -fi - -# We'd like to use read/write locks in several places in the code. -# See if our pthreads support extends to that. Note: for linux, it -# does as long as you define _XOPEN_SOURCE appropriately. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking support for pthread_rwlock_* functions" >&5 -$as_echo_n "checking support for pthread_rwlock_* functions... " >&6; } -if test "${ac_cv_rwlock+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#define _XOPEN_SOURCE 500 - #include -int -main () -{ -pthread_rwlock_t l; pthread_rwlock_init(&l, NULL); - pthread_rwlock_rdlock(&l); - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_rwlock=yes -else - ac_cv_rwlock=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_rwlock" >&5 -$as_echo "$ac_cv_rwlock" >&6; } -if test "$ac_cv_rwlock" = yes; then - -$as_echo "#define HAVE_RWLOCK 1" >>confdefs.h - -fi - - -# Find out what namespace 'normal' STL code lives in, and also what namespace -# the user wants our classes to be defined in -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler implements namespaces" >&5 -$as_echo_n "checking whether the compiler implements namespaces... " >&6; } -if test "${ac_cv_cxx_namespaces+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -namespace Outer { - namespace Inner { int i = 0; }} -int -main () -{ -using namespace Outer::Inner; return i; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_cxx_namespaces=yes -else - ac_cv_cxx_namespaces=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_namespaces" >&5 -$as_echo "$ac_cv_cxx_namespaces" >&6; } - if test "$ac_cv_cxx_namespaces" = yes; then - -$as_echo "#define HAVE_NAMESPACES 1" >>confdefs.h - - fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking what namespace STL code is in" >&5 -$as_echo_n "checking what namespace STL code is in... " >&6; } -if test "${ac_cv_cxx_stl_namespace+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -vector t; return 0; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_cxx_stl_namespace=none -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -std::vector t; return 0; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_cxx_stl_namespace=std -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_stl_namespace" >&5 -$as_echo "$ac_cv_cxx_stl_namespace" >&6; } - if test "$ac_cv_cxx_stl_namespace" = none; then - -$as_echo "#define STL_NAMESPACE /**/" >>confdefs.h - - fi - if test "$ac_cv_cxx_stl_namespace" = std; then - -$as_echo "#define STL_NAMESPACE std" >>confdefs.h - - fi - -google_namespace_default=google - # Check whether --enable-namespace was given. -if test "${enable_namespace+set}" = set; then : - enableval=$enable_namespace; case "$enableval" in - yes) google_namespace="$google_namespace_default" ;; - no) google_namespace="" ;; - *) google_namespace="$enableval" ;; - esac -else - google_namespace="$google_namespace_default" -fi - - if test -n "$google_namespace"; then - ac_google_namespace="$google_namespace" - ac_google_start_namespace="namespace $google_namespace {" - ac_google_end_namespace="}" - else - ac_google_namespace="" - ac_google_start_namespace="" - ac_google_end_namespace="" - fi - -cat >>confdefs.h <<_ACEOF -#define GOOGLE_NAMESPACE $ac_google_namespace -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define _START_GOOGLE_NAMESPACE_ $ac_google_start_namespace -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define _END_GOOGLE_NAMESPACE_ $ac_google_end_namespace -_ACEOF - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler supports using ::operator<<" >&5 -$as_echo_n "checking whether compiler supports using ::operator<<... " >&6; } -if test "${ac_cv_cxx_using_operator+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - std::ostream& operator<<(std::ostream&, struct s); -int -main () -{ -using ::operator<<; return 0; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_cxx_using_operator=1 -else - ac_cv_cxx_using_operator=0 -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_using_operator" >&5 -$as_echo "$ac_cv_cxx_using_operator" >&6; } - if test "$ac_cv_cxx_using_operator" = 1; then - -$as_echo "#define HAVE_USING_OPERATOR 1" >>confdefs.h - - fi - -for ac_header in ucontext.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "ucontext.h" "ac_cv_header_ucontext_h" "$ac_includes_default" -if test "x$ac_cv_header_ucontext_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_UCONTEXT_H 1 -_ACEOF - -fi - -done - - for ac_header in sys/ucontext.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "sys/ucontext.h" "ac_cv_header_sys_ucontext_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_ucontext_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_UCONTEXT_H 1 -_ACEOF - -fi - -done - # ucontext on OS X 10.6 (at least) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to access the program counter from a struct ucontext" >&5 -$as_echo_n "checking how to access the program counter from a struct ucontext... " >&6; } - pc_fields=" uc_mcontext.gregs[REG_PC]" # Solaris x86 (32 + 64 bit) - pc_fields="$pc_fields uc_mcontext.gregs[REG_EIP]" # Linux (i386) - pc_fields="$pc_fields uc_mcontext.gregs[REG_RIP]" # Linux (x86_64) - pc_fields="$pc_fields uc_mcontext.sc_ip" # Linux (ia64) - pc_fields="$pc_fields uc_mcontext.uc_regs->gregs[PT_NIP]" # Linux (ppc) - pc_fields="$pc_fields uc_mcontext.gregs[R15]" # Linux (arm old [untested]) - pc_fields="$pc_fields uc_mcontext.arm_pc" # Linux (arm new [untested]) - pc_fields="$pc_fields uc_mcontext.mc_eip" # FreeBSD (i386) - pc_fields="$pc_fields uc_mcontext.mc_rip" # FreeBSD (x86_64 [untested]) - pc_fields="$pc_fields uc_mcontext.__gregs[_REG_EIP]" # NetBSD (i386) - pc_fields="$pc_fields uc_mcontext.__gregs[_REG_RIP]" # NetBSD (x86_64) - pc_fields="$pc_fields uc_mcontext->ss.eip" # OS X (i386, <=10.4) - pc_fields="$pc_fields uc_mcontext->__ss.__eip" # OS X (i386, >=10.5) - pc_fields="$pc_fields uc_mcontext->ss.rip" # OS X (x86_64) - pc_fields="$pc_fields uc_mcontext->__ss.__rip" # OS X (>=10.5 [untested]) - pc_fields="$pc_fields uc_mcontext->ss.srr0" # OS X (ppc, ppc64 [untested]) - pc_fields="$pc_fields uc_mcontext->__ss.__srr0" # OS X (>=10.5 [untested]) - pc_field_found=false - for pc_field in $pc_fields; do - if ! $pc_field_found; then - if test "x$ac_cv_header_sys_ucontext_h" = xyes; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#define _GNU_SOURCE 1 - #include -int -main () -{ -ucontext_t u; return u.$pc_field == 0; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - -cat >>confdefs.h <<_ACEOF -#define PC_FROM_UCONTEXT $pc_field -_ACEOF - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pc_field" >&5 -$as_echo "$pc_field" >&6; } - pc_field_found=true -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#define _GNU_SOURCE 1 - #include -int -main () -{ -ucontext_t u; return u.$pc_field == 0; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - -cat >>confdefs.h <<_ACEOF -#define PC_FROM_UCONTEXT $pc_field -_ACEOF - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pc_field" >&5 -$as_echo "$pc_field" >&6; } - pc_field_found=true -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - fi - done - if ! $pc_field_found; then - pc_fields=" sc_eip" # OpenBSD (i386) - pc_fields="$pc_fields sc_rip" # OpenBSD (x86_64) - for pc_field in $pc_fields; do - if ! $pc_field_found; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -ucontext_t u; return u.$pc_field == 0; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - -cat >>confdefs.h <<_ACEOF -#define PC_FROM_UCONTEXT $pc_field -_ACEOF - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pc_field" >&5 -$as_echo "$pc_field" >&6; } - pc_field_found=true -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - done - fi - if ! $pc_field_found; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find the PC. Will not output failed addresses..." >&5 -$as_echo "$as_me: WARNING: Could not find the PC. Will not output failed addresses..." >&2;} - fi - - -cat >>confdefs.h <<_ACEOF -#define TEST_SRC_DIR "$srcdir" -_ACEOF - - -# These are what's needed by logging.h.in and raw_logging.h.in - - - - - - - - - - - - - - - - - - - - - - -# Write generated configuration file -ac_config_files="$ac_config_files Makefile src/glog/logging.h src/glog/raw_logging.h src/glog/vlog_is_on.h src/glog/stl_logging.h" - -ac_config_files="$ac_config_files libglog.pc" - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -DEFS=-DHAVE_CONFIG_H - -ac_libobjs= -ac_ltlibobjs= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - if test -n "$EXEEXT"; then - am__EXEEXT_TRUE= - am__EXEEXT_FALSE='#' -else - am__EXEEXT_TRUE='#' - am__EXEEXT_FALSE= -fi - -if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - as_fn_error "conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - as_fn_error "conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then - as_fn_error "conditional \"am__fastdepCXX\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${GCC_TRUE}" && test -z "${GCC_FALSE}"; then - as_fn_error "conditional \"GCC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then - as_fn_error "conditional \"am__fastdepCXX\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${ENABLE_FRAME_POINTERS_TRUE}" && test -z "${ENABLE_FRAME_POINTERS_FALSE}"; then - as_fn_error "conditional \"ENABLE_FRAME_POINTERS\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${X86_64_TRUE}" && test -z "${X86_64_FALSE}"; then - as_fn_error "conditional \"X86_64\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${HAVE_GMOCK_TRUE}" && test -z "${HAVE_GMOCK_FALSE}"; then - as_fn_error "conditional \"HAVE_GMOCK\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - -: ${CONFIG_STATUS=./config.status} -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error ERROR [LINENO LOG_FD] -# --------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with status $?, using 1 if that was 0. -as_fn_error () -{ - as_status=$?; test $as_status -eq 0 && as_status=1 - if test "$3"; then - as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 - fi - $as_echo "$as_me: error: $1" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by glog $as_me 0.3.1, which was -generated by GNU Autoconf 2.65. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - -case $ac_config_headers in *" -"*) set x $ac_config_headers; shift; ac_config_headers=$*;; -esac - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" -config_headers="$ac_config_headers" -config_commands="$ac_config_commands" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Configuration commands: -$config_commands - -Report bugs to ." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -glog config.status 0.3.1 -configured by $0, generated by GNU Autoconf 2.65, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2009 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -INSTALL='$INSTALL' -MKDIR_P='$MKDIR_P' -AWK='$AWK' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_HEADERS " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - as_fn_error "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; - --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# -# INIT-COMMANDS -# -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" - - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' -macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' -enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' -enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' -pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' -enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' -host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' -host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' -host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' -build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' -build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' -build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' -SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' -Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' -GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' -EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' -FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' -LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' -NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' -LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' -max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' -ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' -exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' -lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' -lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' -lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' -reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' -reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' -OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' -deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' -file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' -AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' -AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' -STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' -RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' -old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' -CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' -CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' -compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' -GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' -objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' -SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' -ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' -MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' -need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' -DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' -NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' -LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' -OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' -OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' -libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' -shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' -extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' -archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' -enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' -export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' -whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' -compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' -archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' -archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' -module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' -module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' -with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' -allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' -no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' -inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' -link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' -fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' -always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' -export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' -exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' -include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' -prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' -file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' -variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' -need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' -need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' -version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' -runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' -shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' -shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' -libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' -library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' -soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' -postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' -finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' -sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' -sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' -enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' -enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' -enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' -old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' -striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' -compiler_lib_search_dirs='`$ECHO "X$compiler_lib_search_dirs" | $Xsed -e "$delay_single_quote_subst"`' -predep_objects='`$ECHO "X$predep_objects" | $Xsed -e "$delay_single_quote_subst"`' -postdep_objects='`$ECHO "X$postdep_objects" | $Xsed -e "$delay_single_quote_subst"`' -predeps='`$ECHO "X$predeps" | $Xsed -e "$delay_single_quote_subst"`' -postdeps='`$ECHO "X$postdeps" | $Xsed -e "$delay_single_quote_subst"`' -compiler_lib_search_path='`$ECHO "X$compiler_lib_search_path" | $Xsed -e "$delay_single_quote_subst"`' -LD_CXX='`$ECHO "X$LD_CXX" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_cmds_CXX='`$ECHO "X$old_archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' -compiler_CXX='`$ECHO "X$compiler_CXX" | $Xsed -e "$delay_single_quote_subst"`' -GCC_CXX='`$ECHO "X$GCC_CXX" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "X$lt_prog_compiler_no_builtin_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_wl_CXX='`$ECHO "X$lt_prog_compiler_wl_CXX" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_pic_CXX='`$ECHO "X$lt_prog_compiler_pic_CXX" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_static_CXX='`$ECHO "X$lt_prog_compiler_static_CXX" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_prog_compiler_c_o_CXX='`$ECHO "X$lt_cv_prog_compiler_c_o_CXX" | $Xsed -e "$delay_single_quote_subst"`' -archive_cmds_need_lc_CXX='`$ECHO "X$archive_cmds_need_lc_CXX" | $Xsed -e "$delay_single_quote_subst"`' -enable_shared_with_static_runtimes_CXX='`$ECHO "X$enable_shared_with_static_runtimes_CXX" | $Xsed -e "$delay_single_quote_subst"`' -export_dynamic_flag_spec_CXX='`$ECHO "X$export_dynamic_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' -whole_archive_flag_spec_CXX='`$ECHO "X$whole_archive_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' -compiler_needs_object_CXX='`$ECHO "X$compiler_needs_object_CXX" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_from_new_cmds_CXX='`$ECHO "X$old_archive_from_new_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_from_expsyms_cmds_CXX='`$ECHO "X$old_archive_from_expsyms_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' -archive_cmds_CXX='`$ECHO "X$archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' -archive_expsym_cmds_CXX='`$ECHO "X$archive_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' -module_cmds_CXX='`$ECHO "X$module_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' -module_expsym_cmds_CXX='`$ECHO "X$module_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' -with_gnu_ld_CXX='`$ECHO "X$with_gnu_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`' -allow_undefined_flag_CXX='`$ECHO "X$allow_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' -no_undefined_flag_CXX='`$ECHO "X$no_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec_CXX='`$ECHO "X$hardcode_libdir_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec_ld_CXX='`$ECHO "X$hardcode_libdir_flag_spec_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_separator_CXX='`$ECHO "X$hardcode_libdir_separator_CXX" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_direct_CXX='`$ECHO "X$hardcode_direct_CXX" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_direct_absolute_CXX='`$ECHO "X$hardcode_direct_absolute_CXX" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_minus_L_CXX='`$ECHO "X$hardcode_minus_L_CXX" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_shlibpath_var_CXX='`$ECHO "X$hardcode_shlibpath_var_CXX" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_automatic_CXX='`$ECHO "X$hardcode_automatic_CXX" | $Xsed -e "$delay_single_quote_subst"`' -inherit_rpath_CXX='`$ECHO "X$inherit_rpath_CXX" | $Xsed -e "$delay_single_quote_subst"`' -link_all_deplibs_CXX='`$ECHO "X$link_all_deplibs_CXX" | $Xsed -e "$delay_single_quote_subst"`' -fix_srcfile_path_CXX='`$ECHO "X$fix_srcfile_path_CXX" | $Xsed -e "$delay_single_quote_subst"`' -always_export_symbols_CXX='`$ECHO "X$always_export_symbols_CXX" | $Xsed -e "$delay_single_quote_subst"`' -export_symbols_cmds_CXX='`$ECHO "X$export_symbols_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' -exclude_expsyms_CXX='`$ECHO "X$exclude_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`' -include_expsyms_CXX='`$ECHO "X$include_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`' -prelink_cmds_CXX='`$ECHO "X$prelink_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' -file_list_spec_CXX='`$ECHO "X$file_list_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_action_CXX='`$ECHO "X$hardcode_action_CXX" | $Xsed -e "$delay_single_quote_subst"`' -compiler_lib_search_dirs_CXX='`$ECHO "X$compiler_lib_search_dirs_CXX" | $Xsed -e "$delay_single_quote_subst"`' -predep_objects_CXX='`$ECHO "X$predep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`' -postdep_objects_CXX='`$ECHO "X$postdep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`' -predeps_CXX='`$ECHO "X$predeps_CXX" | $Xsed -e "$delay_single_quote_subst"`' -postdeps_CXX='`$ECHO "X$postdeps_CXX" | $Xsed -e "$delay_single_quote_subst"`' -compiler_lib_search_path_CXX='`$ECHO "X$compiler_lib_search_path_CXX" | $Xsed -e "$delay_single_quote_subst"`' - -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# Quote evaled strings. -for var in SED \ -GREP \ -EGREP \ -FGREP \ -LD \ -NM \ -LN_S \ -lt_SP2NL \ -lt_NL2SP \ -reload_flag \ -OBJDUMP \ -deplibs_check_method \ -file_magic_cmd \ -AR \ -AR_FLAGS \ -STRIP \ -RANLIB \ -CC \ -CFLAGS \ -compiler \ -lt_cv_sys_global_symbol_pipe \ -lt_cv_sys_global_symbol_to_cdecl \ -lt_cv_sys_global_symbol_to_c_name_address \ -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ -SHELL \ -ECHO \ -lt_prog_compiler_no_builtin_flag \ -lt_prog_compiler_wl \ -lt_prog_compiler_pic \ -lt_prog_compiler_static \ -lt_cv_prog_compiler_c_o \ -need_locks \ -DSYMUTIL \ -NMEDIT \ -LIPO \ -OTOOL \ -OTOOL64 \ -shrext_cmds \ -export_dynamic_flag_spec \ -whole_archive_flag_spec \ -compiler_needs_object \ -with_gnu_ld \ -allow_undefined_flag \ -no_undefined_flag \ -hardcode_libdir_flag_spec \ -hardcode_libdir_flag_spec_ld \ -hardcode_libdir_separator \ -fix_srcfile_path \ -exclude_expsyms \ -include_expsyms \ -file_list_spec \ -variables_saved_for_relink \ -libname_spec \ -library_names_spec \ -soname_spec \ -finish_eval \ -old_striplib \ -striplib \ -compiler_lib_search_dirs \ -predep_objects \ -postdep_objects \ -predeps \ -postdeps \ -compiler_lib_search_path \ -LD_CXX \ -compiler_CXX \ -lt_prog_compiler_no_builtin_flag_CXX \ -lt_prog_compiler_wl_CXX \ -lt_prog_compiler_pic_CXX \ -lt_prog_compiler_static_CXX \ -lt_cv_prog_compiler_c_o_CXX \ -export_dynamic_flag_spec_CXX \ -whole_archive_flag_spec_CXX \ -compiler_needs_object_CXX \ -with_gnu_ld_CXX \ -allow_undefined_flag_CXX \ -no_undefined_flag_CXX \ -hardcode_libdir_flag_spec_CXX \ -hardcode_libdir_flag_spec_ld_CXX \ -hardcode_libdir_separator_CXX \ -fix_srcfile_path_CXX \ -exclude_expsyms_CXX \ -include_expsyms_CXX \ -file_list_spec_CXX \ -compiler_lib_search_dirs_CXX \ -predep_objects_CXX \ -postdep_objects_CXX \ -predeps_CXX \ -postdeps_CXX \ -compiler_lib_search_path_CXX; do - case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in reload_cmds \ -old_postinstall_cmds \ -old_postuninstall_cmds \ -old_archive_cmds \ -extract_expsyms_cmds \ -old_archive_from_new_cmds \ -old_archive_from_expsyms_cmds \ -archive_cmds \ -archive_expsym_cmds \ -module_cmds \ -module_expsym_cmds \ -export_symbols_cmds \ -prelink_cmds \ -postinstall_cmds \ -postuninstall_cmds \ -finish_cmds \ -sys_lib_search_path_spec \ -sys_lib_dlsearch_path_spec \ -old_archive_cmds_CXX \ -old_archive_from_new_cmds_CXX \ -old_archive_from_expsyms_cmds_CXX \ -archive_cmds_CXX \ -archive_expsym_cmds_CXX \ -module_cmds_CXX \ -module_expsym_cmds_CXX \ -export_symbols_cmds_CXX \ -prelink_cmds_CXX; do - case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Fix-up fallback echo if it was mangled by the above quoting rules. -case \$lt_ECHO in -*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` - ;; -esac - -ac_aux_dir='$ac_aux_dir' -xsi_shell='$xsi_shell' -lt_shell_append='$lt_shell_append' - -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - - - PACKAGE='$PACKAGE' - VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' - RM='$RM' - ofile='$ofile' - - - - - - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "src/config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;; - "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "src/glog/logging.h") CONFIG_FILES="$CONFIG_FILES src/glog/logging.h" ;; - "src/glog/raw_logging.h") CONFIG_FILES="$CONFIG_FILES src/glog/raw_logging.h" ;; - "src/glog/vlog_is_on.h") CONFIG_FILES="$CONFIG_FILES src/glog/vlog_is_on.h" ;; - "src/glog/stl_logging.h") CONFIG_FILES="$CONFIG_FILES src/glog/stl_logging.h" ;; - "libglog.pc") CONFIG_FILES="$CONFIG_FILES libglog.pc" ;; - - *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= - trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ - || as_fn_error "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/ -s/:*\${srcdir}:*/:/ -s/:*@srcdir@:*/:/ -s/^\([^=]*=[ ]*\):*/\1/ -s/:*$// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - -# Set up the scripts for CONFIG_HEADERS section. -# No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. -if test -n "$CONFIG_HEADERS"; then -cat >"$tmp/defines.awk" <<\_ACAWK || -BEGIN { -_ACEOF - -# Transform confdefs.h into an awk script `defines.awk', embedded as -# here-document in config.status, that substitutes the proper values into -# config.h.in to produce config.h. - -# Create a delimiter string that does not exist in confdefs.h, to ease -# handling of long lines. -ac_delim='%!_!# ' -for ac_last_try in false false :; do - ac_t=`sed -n "/$ac_delim/p" confdefs.h` - if test -z "$ac_t"; then - break - elif $ac_last_try; then - as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -# For the awk script, D is an array of macro values keyed by name, -# likewise P contains macro parameters if any. Preserve backslash -# newline sequences. - -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -sed -n ' -s/.\{148\}/&'"$ac_delim"'/g -t rset -:rset -s/^[ ]*#[ ]*define[ ][ ]*/ / -t def -d -:def -s/\\$// -t bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3"/p -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p -d -:bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3\\\\\\n"\\/p -t cont -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p -t cont -d -:cont -n -s/.\{148\}/&'"$ac_delim"'/g -t clear -:clear -s/\\$// -t bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/"/p -d -:bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p -b cont -' >$CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - for (key in D) D_is_set[key] = 1 - FS = "" -} -/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { - line = \$ 0 - split(line, arg, " ") - if (arg[1] == "#") { - defundef = arg[2] - mac1 = arg[3] - } else { - defundef = substr(arg[1], 2) - mac1 = arg[2] - } - split(mac1, mac2, "(") #) - macro = mac2[1] - prefix = substr(line, 1, index(line, defundef) - 1) - if (D_is_set[macro]) { - # Preserve the white space surrounding the "#". - print prefix "define", macro P[macro] D[macro] - next - } else { - # Replace #undef with comments. This is necessary, for example, - # in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. - if (defundef == "undef") { - print "/*", prefix defundef, macro, "*/" - next - } - } -} -{ print } -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - as_fn_error "could not setup config headers machinery" "$LINENO" 5 -fi # test -n "$CONFIG_HEADERS" - - -eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac - ac_MKDIR_P=$MKDIR_P - case $MKDIR_P in - [\\/$]* | ?:[\\/]* ) ;; - */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; - esac -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -s&@MKDIR_P@&$ac_MKDIR_P&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&2;} - - rm -f "$tmp/stdin" - case $ac_file in - -) cat "$tmp/out" && rm -f "$tmp/out";; - *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; - esac \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - ;; - :H) - # - # CONFIG_HEADER - # - if test x"$ac_file" != x-; then - { - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" - } >"$tmp/config.h" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" - mv "$tmp/config.h" "$ac_file" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - fi - else - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error "could not create -" "$LINENO" 5 - fi -# Compute "$ac_file"'s index in $config_headers. -_am_arg="$ac_file" -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || -$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$_am_arg" : 'X\(//\)[^/]' \| \ - X"$_am_arg" : 'X\(//\)$' \| \ - X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$_am_arg" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'`/stamp-h$_am_stamp_count - ;; - - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - case $ac_file$ac_mode in - "depfiles":C) test x"$AMDEP_TRUE" != x"" || { - # Autoconf 2.62 quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir=$dirpart/$fdir; as_fn_mkdir_p - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} - ;; - "libtool":C) - - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008 Free Software Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - -# The names of the tagged configurations supported by this script. -available_tags="CXX " - -# ### BEGIN LIBTOOL CONFIG - -# Which release of libtool.m4 was used? -macro_version=$macro_version -macro_revision=$macro_revision - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# What type of objects to build. -pic_mode=$pic_mode - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="\$SED -e 1s/^X//" - -# A grep program that handles long lines. -GREP=$lt_GREP - -# An ERE matcher. -EGREP=$lt_EGREP - -# A literal string matcher. -FGREP=$lt_FGREP - -# A BSD- or MS-compatible name lister. -NM=$lt_NM - -# Whether we need soft or hard links. -LN_S=$lt_LN_S - -# What is the maximum length of a command? -max_cmd_len=$max_cmd_len - -# Object file suffix (normally "o"). -objext=$ac_objext - -# Executable file suffix (normally ""). -exeext=$exeext - -# whether the shell understands "unset". -lt_unset=$lt_unset - -# turn spaces into newlines. -SP2NL=$lt_lt_SP2NL - -# turn newlines into spaces. -NL2SP=$lt_lt_NL2SP - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# An object symbol dumper. -OBJDUMP=$lt_OBJDUMP - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == "file_magic". -file_magic_cmd=$lt_file_magic_cmd - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A symbol stripping program. -STRIP=$lt_STRIP - -# Commands used to install an old-style archive. -RANLIB=$lt_RANLIB -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# A C compiler. -LTCC=$lt_CC - -# LTCC compiler flags. -LTCFLAGS=$lt_CFLAGS - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration. -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair. -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# Transform the output of nm in a C name address pair when lib prefix is needed. -global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# An echo program that does not interpret backslashes. -ECHO=$lt_ECHO - -# Used to examine libraries when file_magic_cmd begins with "file". -MAGIC_CMD=$MAGIC_CMD - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Tool to manipulate archived DWARF debug symbol files on Mac OS X. -DSYMUTIL=$lt_DSYMUTIL - -# Tool to change global to local symbols on Mac OS X. -NMEDIT=$lt_NMEDIT - -# Tool to manipulate fat objects and archives on Mac OS X. -LIPO=$lt_LIPO - -# ldd/readelf like tool for Mach-O binaries on Mac OS X. -OTOOL=$lt_OTOOL - -# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. -OTOOL64=$lt_OTOOL64 - -# Old archive suffix (normally "a"). -libext=$libext - -# Shared library suffix (normally ".so"). -shrext_cmds=$lt_shrext_cmds - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at link time. -variables_saved_for_relink=$lt_variables_saved_for_relink - -# Do we need the "lib" prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Library versioning type. -version_type=$version_type - -# Shared library runtime path variable. -runpath_var=$runpath_var - -# Shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Command to use after installation of a shared archive. -postinstall_cmds=$lt_postinstall_cmds - -# Command to use after uninstallation of a shared archive. -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# As "finish_cmds", except a single script fragment to be evaled but -# not shown. -finish_eval=$lt_finish_eval - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Compile-time system search path for libraries. -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries. -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - - -# The linker used to build libraries. -LD=$lt_LD - -# Commands used to build an old-style archive. -old_archive_cmds=$lt_old_archive_cmds - -# A language specific compiler. -CC=$lt_compiler - -# Is the compiler the GNU compiler? -with_gcc=$GCC - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object=$lt_compiler_needs_object - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds - -# Commands used to build a shared archive. -archive_cmds=$lt_archive_cmds -archive_expsym_cmds=$lt_archive_expsym_cmds - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds=$lt_module_cmds -module_expsym_cmds=$lt_module_expsym_cmds - -# Whether we are building with GNU ld or not. -with_gnu_ld=$lt_with_gnu_ld - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag - -# Flag that enforces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec - -# If ld is used when linking, flag to hardcode \$libdir into a binary -# during linking. This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=$hardcode_direct - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \${shlibpath_var} if the -# library is relocated. -hardcode_direct_absolute=$hardcode_direct_absolute - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=$hardcode_minus_L - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=$hardcode_automatic - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=$inherit_rpath - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to "yes" if exported symbols are required. -always_export_symbols=$always_export_symbols - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds=$lt_prelink_cmds - -# Specify filename containing input files. -file_list_spec=$lt_file_list_spec - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# The directories searched by this compiler when creating a shared library. -compiler_lib_search_dirs=$lt_compiler_lib_search_dirs - -# Dependencies to place before and after the objects being linked to -# create a shared library. -predep_objects=$lt_predep_objects -postdep_objects=$lt_postdep_objects -predeps=$lt_predeps -postdeps=$lt_postdeps - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path - -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - -ltmain="$ac_aux_dir/ltmain.sh" - - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - case $xsi_shell in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac -} - -# func_basename file -func_basename () -{ - func_basename_result="${1##*/}" -} - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}" -} - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -func_stripname () -{ - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"} -} - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=${1%%=*} - func_opt_split_arg=${1#*=} -} - -# func_lo2o object -func_lo2o () -{ - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=${1%.*}.lo -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=$(( $* )) -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=${#1} -} - -_LT_EOF - ;; - *) # Bourne compatible functions. - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi -} - -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` -} - - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# func_strip_suffix prefix name -func_stripname () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "X${3}" \ - | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "X${3}" \ - | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; - esac -} - -# sed scripts: -my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' -my_sed_long_arg='1s/^-[^=]*=//' - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` - func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` -} - -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=`expr "$@"` -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` -} - -_LT_EOF -esac - -case $lt_shell_append in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$1+=\$2" -} -_LT_EOF - ;; - *) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$1=\$$1\$2" -} - -_LT_EOF - ;; - esac - - - sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" - - - cat <<_LT_EOF >> "$ofile" - -# ### BEGIN LIBTOOL TAG CONFIG: CXX - -# The linker used to build libraries. -LD=$lt_LD_CXX - -# Commands used to build an old-style archive. -old_archive_cmds=$lt_old_archive_cmds_CXX - -# A language specific compiler. -CC=$lt_compiler_CXX - -# Is the compiler the GNU compiler? -with_gcc=$GCC_CXX - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_CXX - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_CXX - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_CXX - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_CXX - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object=$lt_compiler_needs_object_CXX - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX - -# Commands used to build a shared archive. -archive_cmds=$lt_archive_cmds_CXX -archive_expsym_cmds=$lt_archive_expsym_cmds_CXX - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds=$lt_module_cmds_CXX -module_expsym_cmds=$lt_module_expsym_cmds_CXX - -# Whether we are building with GNU ld or not. -with_gnu_ld=$lt_with_gnu_ld_CXX - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_CXX - -# Flag that enforces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_CXX - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX - -# If ld is used when linking, flag to hardcode \$libdir into a binary -# during linking. This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=$hardcode_direct_CXX - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \${shlibpath_var} if the -# library is relocated. -hardcode_direct_absolute=$hardcode_direct_absolute_CXX - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=$hardcode_minus_L_CXX - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=$hardcode_automatic_CXX - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=$inherit_rpath_CXX - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_CXX - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path_CXX - -# Set to "yes" if exported symbols are required. -always_export_symbols=$always_export_symbols_CXX - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_CXX - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_CXX - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_CXX - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds=$lt_prelink_cmds_CXX - -# Specify filename containing input files. -file_list_spec=$lt_file_list_spec_CXX - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_CXX - -# The directories searched by this compiler when creating a shared library. -compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX - -# Dependencies to place before and after the objects being linked to -# create a shared library. -predep_objects=$lt_predep_objects_CXX -postdep_objects=$lt_postdep_objects_CXX -predeps=$lt_predeps_CXX -postdeps=$lt_postdeps_CXX - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_CXX - -# ### END LIBTOOL TAG CONFIG: CXX -_LT_EOF - - ;; - - esac -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit $? -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/configure.ac b/toolkit/crashreporter/google-breakpad/src/third_party/glog/configure.ac deleted file mode 100644 index 24dc323a24a6..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/configure.ac +++ /dev/null @@ -1,207 +0,0 @@ -## Process this file with autoconf to produce configure. -## In general, the safest way to proceed is to run the following: -## % aclocal -I . -I `pwd`/../autoconf && autoheader && autoconf && automake - -# make sure we're interpreted by some minimal autoconf -AC_PREREQ(2.57) - -AC_INIT(glog, 0.3.1, opensource@google.com) -# The argument here is just something that should be in the current directory -# (for sanity checking) -AC_CONFIG_SRCDIR(README) -AC_CONFIG_MACRO_DIR([m4]) -AM_INIT_AUTOMAKE -AM_CONFIG_HEADER(src/config.h) - -AC_LANG(C++) - -# Checks for programs. -AC_PROG_CC -AC_PROG_CPP -AC_PROG_CXX -AM_CONDITIONAL(GCC, test "$GCC" = yes) # let the Makefile know if we're gcc - -AC_PROG_LIBTOOL -AC_SUBST(LIBTOOL_DEPS) - -# Check whether some low-level functions/files are available -AC_HEADER_STDC - -# These are tested for by AC_HEADER_STDC, but I check again to set the var -AC_CHECK_HEADER(stdint.h, ac_cv_have_stdint_h=1, ac_cv_have_stdint_h=0) -AC_CHECK_HEADER(sys/types.h, ac_cv_have_systypes_h=1, ac_cv_have_systypes_h=0) -AC_CHECK_HEADER(inttypes.h, ac_cv_have_inttypes_h=1, ac_cv_have_inttypes_h=0) -AC_CHECK_HEADERS(unistd.h, ac_cv_have_unistd_h=1, ac_cv_have_unistd_h=0) -AC_CHECK_HEADERS(syscall.h) -AC_CHECK_HEADERS(sys/syscall.h) -# For backtrace with glibc. -AC_CHECK_HEADERS(execinfo.h) -# For backtrace with libunwind. -AC_CHECK_HEADERS(libunwind.h, ac_cv_have_libunwind_h=1, ac_cv_have_libunwind_h=0) -AC_CHECK_HEADERS(ucontext.h) -AC_CHECK_HEADERS(sys/utsname.h) -AC_CHECK_HEADERS(pwd.h) -AC_CHECK_HEADERS(syslog.h) -AC_CHECK_HEADERS(sys/time.h) -AC_CHECK_HEADERS(glob.h) - -AC_CHECK_SIZEOF(void *) - -# These are the types I need. We look for them in either stdint.h, -# sys/types.h, or inttypes.h, all of which are part of the default-includes. -AC_CHECK_TYPE(uint16_t, ac_cv_have_uint16_t=1, ac_cv_have_uint16_t=0) -AC_CHECK_TYPE(u_int16_t, ac_cv_have_u_int16_t=1, ac_cv_have_u_int16_t=0) -AC_CHECK_TYPE(__uint16, ac_cv_have___uint16=1, ac_cv_have___uint16=0) - -AC_CHECK_FUNC(sigaltstack, - AC_DEFINE(HAVE_SIGALTSTACK, 1, - [Define if you have the `sigaltstack' function])) -AC_CHECK_FUNC(dladdr, - AC_DEFINE(HAVE_DLADDR, 1, - [Define if you have the `dladdr' function])) -AC_CHECK_FUNC(fcntl, - AC_DEFINE(HAVE_FCNTL, 1, - [Define if you have the `fcntl' function])) - -AX_C___ATTRIBUTE__ -# We only care about these two attributes. -if test x"$ac_cv___attribute__" = x"yes"; then - ac_cv___attribute___noreturn="__attribute__ ((noreturn))" - ac_cv___attribute___printf_4_5="__attribute__((__format__ (__printf__, 4, 5)))" -else - ac_cv___attribute___noreturn= - ac_cv___attribute___printf_4_5= -fi - -AX_C___BUILTIN_EXPECT -if test x"$ac_cv___builtin_expect" = x"yes"; then - ac_cv_have___builtin_expect=1 -else - ac_cv_have___builtin_expect=0 -fi - -AX_C___SYNC_VAL_COMPARE_AND_SWAP - -# On x86_64, instead of libunwind, we can choose to compile with frame-pointers -# (This isn't needed on i386, where -fno-omit-frame-pointer is the default). -AC_ARG_ENABLE(frame_pointers, - AS_HELP_STRING([--enable-frame-pointers], - [On x86_64 systems, compile with -fno-omit-frame-pointer (see INSTALL)]),, - enable_frame_pointers=no) -AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, [return __x86_64__ == 1 ? 0 : 1])], - [is_x86_64=yes], [is_x86_64=no]) -AM_CONDITIONAL(ENABLE_FRAME_POINTERS, test "$enable_frame_pointers" = yes) -AM_CONDITIONAL(X86_64, test "$is_x86_64" = yes) - -# Some of the code in this directory depends on pthreads -ACX_PTHREAD -if test x"$acx_pthread_ok" = x"yes"; then - # To make libglog depend on libpthread on Linux, we need to add - # -lpthread in addition to -pthread. - AC_CHECK_LIB(pthread, pthread_self) -fi - -# Check if there is google-gflags library installed. -SAVE_CFLAGS="$CFLAGS" -SAVE_LIBS="$LIBS" -AC_ARG_WITH(gflags, AS_HELP_STRING[--with-gflags=GFLAGS_DIR], - GFLAGS_CFLAGS="-I${with_gflags}/include" - GFLAGS_LIBS="-L${with_gflags}/lib -lgflags" - CFLAGS="$CFLAGS $GFLAGS_CFLAGS" - LIBS="$LIBS $GFLAGS_LIBS" -) -AC_CHECK_LIB(gflags, main, ac_cv_have_libgflags=1, ac_cv_have_libgflags=0) -if test x"$ac_cv_have_libgflags" = x"1"; then - AC_DEFINE(HAVE_LIB_GFLAGS, 1, [define if you have google gflags library]) - if test x"$GFLAGS_LIBS" = x""; then - GFLAGS_LIBS="-lgflags" - fi -else - GFLAGS_CFLAGS= - GFLAGS_LIBS= -fi -CFLAGS="$SAVE_CFLAGS" -LIBS="$SAVE_LIBS" - -# TODO(hamaji): Use official m4 macros provided by testing libraries -# once the m4 macro of Google Mocking becomes ready. -# Check if there is Google Test library installed. -AC_CHECK_PROG(GTEST_CONFIG, gtest-config, "yes") -if test x"$GTEST_CONFIG" = "xyes"; then - GTEST_CFLAGS=`gtest-config --cppflags --cxxflags` - GTEST_LIBS=`gtest-config --ldflags --libs` - AC_DEFINE(HAVE_LIB_GTEST, 1, [define if you have google gtest library]) - - # Check if there is Google Mocking library installed. - AC_CHECK_PROG(GMOCK_CONFIG, gmock-config, "yes") - if test x"$GMOCK_CONFIG" = "xyes"; then - GMOCK_CFLAGS=`gmock-config --cppflags --cxxflags` - GMOCK_LIBS=`gmock-config --ldflags --libs` - AC_DEFINE(HAVE_LIB_GMOCK, 1, [define if you have google gmock library]) - else - # We don't run test cases which use Google Mocking framework. - GMOCK_CFLAGS= - GMOCK_LIBS= - fi -else - # We'll use src/googletest.h for our unittests. - GTEST_CFLAGS= - GTEST_LIBS= -fi -AM_CONDITIONAL(HAVE_GMOCK, test x"$GMOCK_CONFIG" = "xyes") - -# We want to link in libunwind if it exists -UNWIND_LIBS= -# Unfortunately, we need to check the header file in addition to the -# lib file to check if libunwind is available since libunwind-0.98 -# doesn't install all necessary header files. -if test x"$ac_cv_have_libunwind_h" = x"1"; then - AC_CHECK_LIB(unwind, backtrace, UNWIND_LIBS=-lunwind) -fi -AC_SUBST(UNWIND_LIBS) -if test x"$UNWIND_LIBS" != x""; then - AC_DEFINE(HAVE_LIB_UNWIND, 1, [define if you have libunwind]) -fi - -# We'd like to use read/write locks in several places in the code. -# See if our pthreads support extends to that. Note: for linux, it -# does as long as you define _XOPEN_SOURCE appropriately. -AC_RWLOCK - -# Find out what namespace 'normal' STL code lives in, and also what namespace -# the user wants our classes to be defined in -AC_CXX_STL_NAMESPACE -AC_DEFINE_GOOGLE_NAMESPACE(google) - -AC_CXX_USING_OPERATOR - -AC_PC_FROM_UCONTEXT(AC_MSG_WARN(Could not find the PC. Will not output failed addresses...)) - -AC_DEFINE_UNQUOTED(TEST_SRC_DIR, "$srcdir", [location of source code]) - -# These are what's needed by logging.h.in and raw_logging.h.in -AC_SUBST(ac_google_start_namespace) -AC_SUBST(ac_google_end_namespace) -AC_SUBST(ac_google_namespace) -AC_SUBST(ac_cv_cxx_using_operator) -AC_SUBST(ac_cv___attribute___noreturn) -AC_SUBST(ac_cv___attribute___printf_4_5) -AC_SUBST(ac_cv_have___builtin_expect) -AC_SUBST(ac_cv_have_stdint_h) -AC_SUBST(ac_cv_have_systypes_h) -AC_SUBST(ac_cv_have_inttypes_h) -AC_SUBST(ac_cv_have_unistd_h) -AC_SUBST(ac_cv_have_uint16_t) -AC_SUBST(ac_cv_have_u_int16_t) -AC_SUBST(ac_cv_have___uint16) -AC_SUBST(ac_cv_have_libgflags) -AC_SUBST(GFLAGS_CFLAGS) -AC_SUBST(GTEST_CFLAGS) -AC_SUBST(GMOCK_CFLAGS) -AC_SUBST(GFLAGS_LIBS) -AC_SUBST(GTEST_LIBS) -AC_SUBST(GMOCK_LIBS) - -# Write generated configuration file -AC_CONFIG_FILES([Makefile src/glog/logging.h src/glog/raw_logging.h src/glog/vlog_is_on.h src/glog/stl_logging.h]) -AC_OUTPUT(libglog.pc) diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/depcomp b/toolkit/crashreporter/google-breakpad/src/third_party/glog/depcomp deleted file mode 100755 index e5f9736c7239..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/depcomp +++ /dev/null @@ -1,589 +0,0 @@ -#! /bin/sh -# depcomp - compile a program generating dependencies as side-effects - -scriptversion=2007-03-29.01 - -# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software -# Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301, USA. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Originally written by Alexandre Oliva . - -case $1 in - '') - echo "$0: No command. Try \`$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: depcomp [--help] [--version] PROGRAM [ARGS] - -Run PROGRAMS ARGS to compile a file, generating dependencies -as side-effects. - -Environment variables: - depmode Dependency tracking mode. - source Source file read by `PROGRAMS ARGS'. - object Object file output by `PROGRAMS ARGS'. - DEPDIR directory where to store dependencies. - depfile Dependency file to output. - tmpdepfile Temporary file to use when outputing dependencies. - libtool Whether libtool is used (yes/no). - -Report bugs to . -EOF - exit $? - ;; - -v | --v*) - echo "depcomp $scriptversion" - exit $? - ;; -esac - -if test -z "$depmode" || test -z "$source" || test -z "$object"; then - echo "depcomp: Variables source, object and depmode must be set" 1>&2 - exit 1 -fi - -# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. -depfile=${depfile-`echo "$object" | - sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} -tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} - -rm -f "$tmpdepfile" - -# Some modes work just like other modes, but use different flags. We -# parameterize here, but still list the modes in the big case below, -# to make depend.m4 easier to write. Note that we *cannot* use a case -# here, because this file can only contain one case statement. -if test "$depmode" = hp; then - # HP compiler uses -M and no extra arg. - gccflag=-M - depmode=gcc -fi - -if test "$depmode" = dashXmstdout; then - # This is just like dashmstdout with a different argument. - dashmflag=-xM - depmode=dashmstdout -fi - -case "$depmode" in -gcc3) -## gcc 3 implements dependency tracking that does exactly what -## we want. Yay! Note: for some reason libtool 1.4 doesn't like -## it if -MD -MP comes after the -MF stuff. Hmm. -## Unfortunately, FreeBSD c89 acceptance of flags depends upon -## the command line argument order; so add the flags where they -## appear in depend2.am. Note that the slowdown incurred here -## affects only configure: in makefiles, %FASTDEP% shortcuts this. - for arg - do - case $arg in - -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; - *) set fnord "$@" "$arg" ;; - esac - shift # fnord - shift # $arg - done - "$@" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - mv "$tmpdepfile" "$depfile" - ;; - -gcc) -## There are various ways to get dependency output from gcc. Here's -## why we pick this rather obscure method: -## - Don't want to use -MD because we'd like the dependencies to end -## up in a subdir. Having to rename by hand is ugly. -## (We might end up doing this anyway to support other compilers.) -## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like -## -MM, not -M (despite what the docs say). -## - Using -M directly means running the compiler twice (even worse -## than renaming). - if test -z "$gccflag"; then - gccflag=-MD, - fi - "$@" -Wp,"$gccflag$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - echo "$object : \\" > "$depfile" - alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz -## The second -e expression handles DOS-style file names with drive letters. - sed -e 's/^[^:]*: / /' \ - -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" -## This next piece of magic avoids the `deleted header file' problem. -## The problem is that when a header file which appears in a .P file -## is deleted, the dependency causes make to die (because there is -## typically no way to rebuild the header). We avoid this by adding -## dummy dependencies for each header file. Too bad gcc doesn't do -## this for us directly. - tr ' ' ' -' < "$tmpdepfile" | -## Some versions of gcc put a space before the `:'. On the theory -## that the space means something, we add a space to the output as -## well. -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -sgi) - if test "$libtool" = yes; then - "$@" "-Wp,-MDupdate,$tmpdepfile" - else - "$@" -MDupdate "$tmpdepfile" - fi - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - - if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files - echo "$object : \\" > "$depfile" - - # Clip off the initial element (the dependent). Don't try to be - # clever and replace this with sed code, as IRIX sed won't handle - # lines with more than a fixed number of characters (4096 in - # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; - # the IRIX cc adds comments like `#:fec' to the end of the - # dependency line. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ - tr ' -' ' ' >> $depfile - echo >> $depfile - - # The second pass generates a dummy entry for each header file. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ - >> $depfile - else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -aix) - # The C for AIX Compiler uses -M and outputs the dependencies - # in a .u file. In older versions, this file always lives in the - # current directory. Also, the AIX compiler puts `$object:' at the - # start of each line; $object doesn't have directory information. - # Version 6 uses the directory in both cases. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - if test "$libtool" = yes; then - tmpdepfile1=$dir$base.u - tmpdepfile2=$base.u - tmpdepfile3=$dir.libs/$base.u - "$@" -Wc,-M - else - tmpdepfile1=$dir$base.u - tmpdepfile2=$dir$base.u - tmpdepfile3=$dir$base.u - "$@" -M - fi - stat=$? - - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - # Each line is of the form `foo.o: dependent.h'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" - # That's a tab and a space in the []. - sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" - else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -icc) - # Intel's C compiler understands `-MD -MF file'. However on - # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c - # ICC 7.0 will fill foo.d with something like - # foo.o: sub/foo.c - # foo.o: sub/foo.h - # which is wrong. We want: - # sub/foo.o: sub/foo.c - # sub/foo.o: sub/foo.h - # sub/foo.c: - # sub/foo.h: - # ICC 7.1 will output - # foo.o: sub/foo.c sub/foo.h - # and will wrap long lines using \ : - # foo.o: sub/foo.c ... \ - # sub/foo.h ... \ - # ... - - "$@" -MD -MF "$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - # Each line is of the form `foo.o: dependent.h', - # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" - # Some versions of the HPUX 10.20 sed can't process this invocation - # correctly. Breaking it into two sed invocations is a workaround. - sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | - sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp2) - # The "hp" stanza above does not work with aCC (C++) and HP's ia64 - # compilers, which have integrated preprocessors. The correct option - # to use with these is +Maked; it writes dependencies to a file named - # 'foo.d', which lands next to the object file, wherever that - # happens to be. - # Much of this is similar to the tru64 case; see comments there. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - if test "$libtool" = yes; then - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir.libs/$base.d - "$@" -Wc,+Maked - else - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir$base.d - "$@" +Maked - fi - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" - # Add `dependent.h:' lines. - sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" - else - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" "$tmpdepfile2" - ;; - -tru64) - # The Tru64 compiler uses -MD to generate dependencies as a side - # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. - # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put - # dependencies in `foo.d' instead, so we check for that too. - # Subdirectories are respected. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - - if test "$libtool" = yes; then - # With Tru64 cc, shared objects can also be used to make a - # static library. This mechanism is used in libtool 1.4 series to - # handle both shared and static libraries in a single compilation. - # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. - # - # With libtool 1.5 this exception was removed, and libtool now - # generates 2 separate objects for the 2 libraries. These two - # compilations output dependencies in $dir.libs/$base.o.d and - # in $dir$base.o.d. We have to check for both files, because - # one of the two compilations can be disabled. We should prefer - # $dir$base.o.d over $dir.libs/$base.o.d because the latter is - # automatically cleaned when .libs/ is deleted, while ignoring - # the former would cause a distcleancheck panic. - tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 - tmpdepfile2=$dir$base.o.d # libtool 1.5 - tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 - tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 - "$@" -Wc,-MD - else - tmpdepfile1=$dir$base.o.d - tmpdepfile2=$dir$base.d - tmpdepfile3=$dir$base.d - tmpdepfile4=$dir$base.d - "$@" -MD - fi - - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" - # That's a tab and a space in the []. - sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" - else - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -#nosideeffect) - # This comment above is used by automake to tell side-effect - # dependency tracking mechanisms from slower ones. - -dashmstdout) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout, regardless of -o. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do - shift - done - shift - fi - - # Remove `-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - test -z "$dashmflag" && dashmflag=-M - # Require at least two characters before searching for `:' - # in the target name. This is to cope with DOS-style filenames: - # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. - "$@" $dashmflag | - sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - tr ' ' ' -' < "$tmpdepfile" | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -dashXmstdout) - # This case only exists to satisfy depend.m4. It is never actually - # run, as this mode is specially recognized in the preamble. - exit 1 - ;; - -makedepend) - "$@" || exit $? - # Remove any Libtool call - if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do - shift - done - shift - fi - # X makedepend - shift - cleared=no - for arg in "$@"; do - case $cleared in - no) - set ""; shift - cleared=yes ;; - esac - case "$arg" in - -D*|-I*) - set fnord "$@" "$arg"; shift ;; - # Strip any option that makedepend may not understand. Remove - # the object too, otherwise makedepend will parse it as a source file. - -*|$object) - ;; - *) - set fnord "$@" "$arg"; shift ;; - esac - done - obj_suffix="`echo $object | sed 's/^.*\././'`" - touch "$tmpdepfile" - ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - sed '1,2d' "$tmpdepfile" | tr ' ' ' -' | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" "$tmpdepfile".bak - ;; - -cpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do - shift - done - shift - fi - - # Remove `-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - "$@" -E | - sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ - -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | - sed '$ s: \\$::' > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - cat < "$tmpdepfile" >> "$depfile" - sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -msvisualcpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout, regardless of -o, - # because we must use -o when running libtool. - "$@" || exit $? - IFS=" " - for arg - do - case "$arg" in - "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") - set fnord "$@" - shift - shift - ;; - *) - set fnord "$@" "$arg" - shift - shift - ;; - esac - done - "$@" -E | - sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" - echo " " >> "$depfile" - . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -none) - exec "$@" - ;; - -*) - echo "Unknown depmode $depmode" 1>&2 - exit 1 - ;; -esac - -exit 0 - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" -# End: diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/doc/designstyle.css b/toolkit/crashreporter/google-breakpad/src/third_party/glog/doc/designstyle.css deleted file mode 100644 index f5d1ec2f767a..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/doc/designstyle.css +++ /dev/null @@ -1,115 +0,0 @@ -body { - background-color: #ffffff; - color: black; - margin-right: 1in; - margin-left: 1in; -} - - -h1, h2, h3, h4, h5, h6 { - color: #3366ff; - font-family: sans-serif; -} -@media print { - /* Darker version for printing */ - h1, h2, h3, h4, h5, h6 { - color: #000080; - font-family: helvetica, sans-serif; - } -} - -h1 { - text-align: center; - font-size: 18pt; -} -h2 { - margin-left: -0.5in; -} -h3 { - margin-left: -0.25in; -} -h4 { - margin-left: -0.125in; -} -hr { - margin-left: -1in; -} - -/* Definition lists: definition term bold */ -dt { - font-weight: bold; -} - -address { - text-align: right; -} -/* Use the tag for bits of code and for variables and objects. */ -code,pre,samp,var { - color: #006000; -} -/* Use the tag for file and directory paths and names. */ -file { - color: #905050; - font-family: monospace; -} -/* Use the tag for stuff the user should type. */ -kbd { - color: #600000; -} -div.note p { - float: right; - width: 3in; - margin-right: 0%; - padding: 1px; - border: 2px solid #6060a0; - background-color: #fffff0; -} - -UL.nobullets { - list-style-type: none; - list-style-image: none; - margin-left: -1em; -} - -/* -body:after { - content: "Google Confidential"; -} -*/ - -/* pretty printing styles. See prettify.js */ -.str { color: #080; } -.kwd { color: #008; } -.com { color: #800; } -.typ { color: #606; } -.lit { color: #066; } -.pun { color: #660; } -.pln { color: #000; } -.tag { color: #008; } -.atn { color: #606; } -.atv { color: #080; } -pre.prettyprint { padding: 2px; border: 1px solid #888; } - -.embsrc { background: #eee; } - -@media print { - .str { color: #060; } - .kwd { color: #006; font-weight: bold; } - .com { color: #600; font-style: italic; } - .typ { color: #404; font-weight: bold; } - .lit { color: #044; } - .pun { color: #440; } - .pln { color: #000; } - .tag { color: #006; font-weight: bold; } - .atn { color: #404; } - .atv { color: #060; } -} - -/* Table Column Headers */ -.hdr { - color: #006; - font-weight: bold; - background-color: #dddddd; } -.hdr2 { - color: #006; - background-color: #eeeeee; } \ No newline at end of file diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/doc/glog.html b/toolkit/crashreporter/google-breakpad/src/third_party/glog/doc/glog.html deleted file mode 100644 index 3dddb9d0cefe..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/doc/glog.html +++ /dev/null @@ -1,554 +0,0 @@ - - - - -How To Use Google Logging Library (glog) - - - - - - - - - -

How To Use Google Logging Library (glog)

-(as of -) - -
- -

Introduction

- -

Google glog is a library that implements application-level -logging. This library provides logging APIs based on C++-style -streams and various helper macros. -You can log a message by simply streaming things to LOG(<a -particular severity level>), e.g. - -

-   #include <glog/logging.h>
-
-   int main(int argc, char* argv[]) {
-     // Initialize Google's logging library.
-     google::InitGoogleLogging(argv[0]);
-
-     // ...
-     LOG(INFO) << "Found " << num_cookies << " cookies";
-   }
-
- -

Google glog defines a series of macros that simplify many common logging -tasks. You can log messages by severity level, control logging -behavior from the command line, log based on conditionals, abort the -program when expected conditions are not met, introduce your own -verbose logging levels, and more. This document describes the -functionality supported by glog. Please note that this document -doesn't describe all features in this library, but the most useful -ones. If you want to find less common features, please check -header files under src/glog directory. - -

Severity Level

- -

-You can specify one of the following severity levels (in -increasing order of severity): INFO, WARNING, -ERROR, and FATAL. -Logging a FATAL message terminates the program (after the -message is logged). -Note that messages of a given severity are logged not only in the -logfile for that severity, but also in all logfiles of lower severity. -E.g., a message of severity FATAL will be logged to the -logfiles of severity FATAL, ERROR, -WARNING, and INFO. - -

-The DFATAL severity logs a FATAL error in -debug mode (i.e., there is no NDEBUG macro defined), but -avoids halting the program in production by automatically reducing the -severity to ERROR. - -

Unless otherwise specified, glog writes to the filename -"/tmp/<program name>.<hostname>.<user name>.log.<severity level>.<date>.<time>.<pid>" -(e.g., "/tmp/hello_world.example.com.hamaji.log.INFO.20080709-222411.10474"). -By default, glog copies the log messages of severity level -ERROR or FATAL to standard error (stderr) -in addition to log files. - -

Setting Flags

- -

Several flags influence glog's output behavior. -If the Google -gflags library is installed on your machine, the -configure script (see the INSTALL file in the package for -detail of this script) will automatically detect and use it, -allowing you to pass flags on the command line. For example, if you -want to turn the flag --logtostderr on, you can start -your application with the following command line: - -

-   ./your_application --logtostderr=1
-
- -If the Google gflags library isn't installed, you set flags via -environment variables, prefixing the flag name with "GLOG_", e.g. - -
-   GLOG_logtostderr=1 ./your_application
-
- - - -

The following flags are most commonly used: - -

-
logtostderr (bool, default=false) -
Log messages to stderr instead of logfiles.
-Note: you can set binary flags to true by specifying -1, true, or yes (case -insensitive). -Also, you can set binary flags to false by specifying -0, false, or no (again, case -insensitive). -
stderrthreshold (int, default=2, which -is ERROR) -
Copy log messages at or above this level to stderr in -addition to logfiles. The numbers of severity levels -INFO, WARNING, ERROR, and -FATAL are 0, 1, 2, and 3, respectively. -
minloglevel (int, default=0, which -is INFO) -
Log messages at or above this level. Again, the numbers of -severity levels INFO, WARNING, -ERROR, and FATAL are 0, 1, 2, and 3, -respectively. -
log_dir (string, default="") -
If specified, logfiles are written into this directory instead -of the default logging directory. -
v (int, default=0) -
Show all VLOG(m) messages for m less or -equal the value of this flag. Overridable by --vmodule. -See the section about verbose logging for more -detail. -
vmodule (string, default="") -
Per-module verbose level. The argument has to contain a -comma-separated list of <module name>=<log level>. -<module name> -is a glob pattern (e.g., gfs* for all modules whose name -starts with "gfs"), matched against the filename base -(that is, name ignoring .cc/.h./-inl.h). -<log level> overrides any value given by --v. -See also the section about verbose logging. -
- -

There are some other flags defined in logging.cc. Please grep the -source code for "DEFINE_" to see a complete list of all flags. - -

Conditional / Occasional Logging

- -

Sometimes, you may only want to log a message under certain -conditions. You can use the following macros to perform conditional -logging: - -

-   LOG_IF(INFO, num_cookies > 10) << "Got lots of cookies";
-
- -The "Got lots of cookies" message is logged only when the variable -num_cookies exceeds 10. - -If a line of code is executed many times, it may be useful to only log -a message at certain intervals. This kind of logging is most useful -for informational messages. - -
-   LOG_EVERY_N(INFO, 10) << "Got the " << google::COUNTER << "th cookie";
-
- -

The above line outputs a log messages on the 1st, 11th, -21st, ... times it is executed. Note that the special -google::COUNTER value is used to identify which repetition is -happening. - -

You can combine conditional and occasional logging with the -following macro. - -

-   LOG_IF_EVERY_N(INFO, (size > 1024), 10) << "Got the " << google::COUNTER
-                                           << "th big cookie";
-
- -

Instead of outputting a message every nth time, you can also limit -the output to the first n occurrences: - -

-   LOG_FIRST_N(INFO, 20) << "Got the " << google::COUNTER << "th cookie";
-
- -

Outputs log messages for the first 20 times it is executed. Again, -the google::COUNTER identifier indicates which repetition is -happening. - -

Debug Mode Support

- -

Special "debug mode" logging macros only have an effect in debug -mode and are compiled away to nothing for non-debug mode -compiles. Use these macros to avoid slowing down your production -application due to excessive logging. - -

-   DLOG(INFO) << "Found cookies";
-
-   DLOG_IF(INFO, num_cookies > 10) << "Got lots of cookies";
-
-   DLOG_EVERY_N(INFO, 10) << "Got the " << google::COUNTER << "th cookie";
-
- -

CHECK Macros

- -

It is a good practice to check expected conditions in your program -frequently to detect errors as early as possible. The -CHECK macro provides the ability to abort the application -when a condition is not met, similar to the assert macro -defined in the standard C library. - -

CHECK aborts the application if a condition is not -true. Unlike assert, it is *not* controlled by -NDEBUG, so the check will be executed regardless of -compilation mode. Therefore, fp->Write(x) in the -following example is always executed: - -

-   CHECK(fp->Write(x) == 4) << "Write failed!";
-
- -

There are various helper macros for -equality/inequality checks - CHECK_EQ, -CHECK_NE, CHECK_LE, CHECK_LT, -CHECK_GE, and CHECK_GT. -They compare two values, and log a -FATAL message including the two values when the result is -not as expected. The values must have operator<<(ostream, -...) defined. - -

You may append to the error message like so: - -

-   CHECK_NE(1, 2) << ": The world must be ending!";
-
- -

We are very careful to ensure that each argument is evaluated exactly -once, and that anything which is legal to pass as a function argument is -legal here. In particular, the arguments may be temporary expressions -which will end up being destroyed at the end of the apparent statement, -for example: - -

-   CHECK_EQ(string("abc")[1], 'b');
-
- -

The compiler reports an error if one of the arguments is a -pointer and the other is NULL. To work around this, simply static_cast -NULL to the type of the desired pointer. - -

-   CHECK_EQ(some_ptr, static_cast<SomeType*>(NULL));
-
- -

Better yet, use the CHECK_NOTNULL macro: - -

-   CHECK_NOTNULL(some_ptr);
-   some_ptr->DoSomething();
-
- -

Since this macro returns the given pointer, this is very useful in -constructor initializer lists. - -

-   struct S {
-     S(Something* ptr) : ptr_(CHECK_NOTNULL(ptr)) {}
-     Something* ptr_;
-   };
-
- -

Note that you cannot use this macro as a C++ stream due to this -feature. Please use CHECK_EQ described above to log a -custom message before aborting the application. - -

If you are comparing C strings (char *), a handy set of macros -performs case sensitive as well as case insensitive comparisons - -CHECK_STREQ, CHECK_STRNE, -CHECK_STRCASEEQ, and CHECK_STRCASENE. The -CASE versions are case-insensitive. You can safely pass NULL -pointers for this macro. They treat NULL and any -non-NULL string as not equal. Two NULLs are -equal. - -

Note that both arguments may be temporary strings which are -destructed at the end of the current "full expression" -(e.g., CHECK_STREQ(Foo().c_str(), Bar().c_str()) where -Foo and Bar return C++'s -std::string). - -

The CHECK_DOUBLE_EQ macro checks the equality of two -floating point values, accepting a small error margin. -CHECK_NEAR accepts a third floating point argument, which -specifies the acceptable error margin. - -

Verbose Logging

- -

When you are chasing difficult bugs, thorough log messages are very -useful. However, you may want to ignore too verbose messages in usual -development. For such verbose logging, glog provides the -VLOG macro, which allows you to define your own numeric -logging levels. The --v command line option controls -which verbose messages are logged: - -

-   VLOG(1) << "I'm printed when you run the program with --v=1 or higher";
-   VLOG(2) << "I'm printed when you run the program with --v=2 or higher";
-
- -

With VLOG, the lower the verbose level, the more -likely messages are to be logged. For example, if ---v==1, VLOG(1) will log, but -VLOG(2) will not log. This is opposite of the severity -level, where INFO is 0, and ERROR is 2. ---minloglevel of 1 will log WARNING and -above. Though you can specify any integers for both VLOG -macro and --v flag, the common values for them are small -positive integers. For example, if you write VLOG(0), -you should specify --v=-1 or lower to silence it. This -is less useful since we may not want verbose logs by default in most -cases. The VLOG macros always log at the -INFO log level (when they log at all). - -

Verbose logging can be controlled from the command line on a -per-module basis: - -

-   --vmodule=mapreduce=2,file=1,gfs*=3 --v=0
-
- -

will: - -

    -
  • a. Print VLOG(2) and lower messages from mapreduce.{h,cc} -
  • b. Print VLOG(1) and lower messages from file.{h,cc} -
  • c. Print VLOG(3) and lower messages from files prefixed with "gfs" -
  • d. Print VLOG(0) and lower messages from elsewhere -
- -

The wildcarding functionality shown by (c) supports both '*' -(matches 0 or more characters) and '?' (matches any single character) -wildcards. Please also check the section about command line flags. - -

There's also VLOG_IS_ON(n) "verbose level" condition -macro. This macro returns true when the --v is equal or -greater than n. To be used as - -

-   if (VLOG_IS_ON(2)) {
-     // do some logging preparation and logging
-     // that can't be accomplished with just VLOG(2) << ...;
-   }
-
- -

Verbose level condition macros VLOG_IF, -VLOG_EVERY_N and VLOG_IF_EVERY_N behave -analogous to LOG_IF, LOG_EVERY_N, -LOF_IF_EVERY, but accept a numeric verbosity level as -opposed to a severity level. - -

-   VLOG_IF(1, (size > 1024))
-      << "I'm printed when size is more than 1024 and when you run the "
-         "program with --v=1 or more";
-   VLOG_EVERY_N(1, 10)
-      << "I'm printed every 10th occurrence, and when you run the program "
-         "with --v=1 or more. Present occurence is " << google::COUNTER;
-   VLOG_IF_EVERY_N(1, (size > 1024), 10)
-      << "I'm printed on every 10th occurence of case when size is more "
-         " than 1024, when you run the program with --v=1 or more. ";
-         "Present occurence is " << google::COUNTER;
-
- -

Failure Signal Handler

- -

-The library provides a convenient signal handler that will dump useful -information when the program crashes on certain signals such as SIGSEGV. -The signal handler can be installed by -google::InstallFailureSignalHandler(). The following is an example of output -from the signal handler. - -

-*** Aborted at 1225095260 (unix time) try "date -d @1225095260" if you are using GNU date ***
-*** SIGSEGV (@0x0) received by PID 17711 (TID 0x7f893090a6f0) from PID 0; stack trace: ***
-PC: @           0x412eb1 TestWaitingLogSink::send()
-    @     0x7f892fb417d0 (unknown)
-    @           0x412eb1 TestWaitingLogSink::send()
-    @     0x7f89304f7f06 google::LogMessage::SendToLog()
-    @     0x7f89304f35af google::LogMessage::Flush()
-    @     0x7f89304f3739 google::LogMessage::~LogMessage()
-    @           0x408cf4 TestLogSinkWaitTillSent()
-    @           0x4115de main
-    @     0x7f892f7ef1c4 (unknown)
-    @           0x4046f9 (unknown)
-
- -

-By default, the signal handler writes the failure dump to the standard -error. You can customize the destination by InstallFailureWriter(). - -

Miscellaneous Notes

- -

Performance of Messages

- -

The conditional logging macros provided by glog (e.g., -CHECK, LOG_IF, VLOG, ...) are -carefully implemented and don't execute the right hand side -expressions when the conditions are false. So, the following check -may not sacrifice the performance of your application. - -

-   CHECK(obj.ok) << obj.CreatePrettyFormattedStringButVerySlow();
-
- -

User-defined Failure Function

- -

FATAL severity level messages or unsatisfied -CHECK condition terminate your program. You can change -the behavior of the termination by -InstallFailureFunction. - -

-   void YourFailureFunction() {
-     // Reports something...
-     exit(1);
-   }
-
-   int main(int argc, char* argv[]) {
-     google::InstallFailureFunction(&YourFailureFunction);
-   }
-
- -

By default, glog tries to dump stacktrace and makes the program -exit with status 1. The stacktrace is produced only when you run the -program on an architecture for which glog supports stack tracing (as -of September 2008, glog supports stack tracing for x86 and x86_64). - -

Raw Logging

- -

The header file <glog/raw_logging.h> can be -used for thread-safe logging, which does not allocate any memory or -acquire any locks. Therefore, the macros defined in this -header file can be used by low-level memory allocation and -synchronization code. -Please check src/glog/raw_logging.h.in for detail. -

- -

Google Style perror()

- -

PLOG() and PLOG_IF() and -PCHECK() behave exactly like their LOG* and -CHECK equivalents with the addition that they append a -description of the current state of errno to their output lines. -E.g. - -

-   PCHECK(write(1, NULL, 2) >= 0) << "Write NULL failed";
-
- -

This check fails with the following error message. - -

-   F0825 185142 test.cc:22] Check failed: write(1, NULL, 2) >= 0 Write NULL failed: Bad address [14]
-
- -

Syslog

- -

SYSLOG, SYSLOG_IF, and -SYSLOG_EVERY_N macros are available. -These log to syslog in addition to the normal logs. Be aware that -logging to syslog can drastically impact performance, especially if -syslog is configured for remote logging! Make sure you understand the -implications of outputting to syslog before you use these macros. In -general, it's wise to use these macros sparingly. - -

Strip Logging Messages

- -

Strings used in log messages can increase the size of your binary -and present a privacy concern. You can therefore instruct glog to -remove all strings which fall below a certain severity level by using -the GOOGLE_STRIP_LOG macro: - -

If your application has code like this: - -

-   #define GOOGLE_STRIP_LOG 1    // this must go before the #include!
-   #include <glog/logging.h>
-
- -

The compiler will remove the log messages whose severities are less -than the specified integer value. Since -VLOG logs at the severity level INFO -(numeric value 0), -setting GOOGLE_STRIP_LOG to 1 or greater removes -all log messages associated with VLOGs as well as -INFO log statements. - -

Notes for Windows users

- -

Google glog defines a severity level ERROR, which is -also defined in windows.h -There are two known workarounds to avoid this conflict: - -

    -
  • #define WIN32_LEAN_AND_MEAN or NOGDI - before you #include windows.h . -
  • #undef ERROR after you #include - windows.h . -
- -

See -this issue for more detail. - -


-
-Shinichiro Hamaji
-Gregor Hohpe
- -
- - - diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/google-glog.sln b/toolkit/crashreporter/google-breakpad/src/third_party/glog/google-glog.sln deleted file mode 100755 index a34ec723af6c..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/google-glog.sln +++ /dev/null @@ -1,44 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual C++ Express 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libglog", "vsprojects\libglog\libglog.vcproj", "{34BD04BD-BC1D-4BFC-AAFC-ED02D9E960F1}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "logging_unittest", "vsprojects\logging_unittest\logging_unittest.vcproj", "{DD0690AA-5E09-46B5-83FD-4B28604CABA8}" - ProjectSection(ProjectDependencies) = postProject - {34BD04BD-BC1D-4BFC-AAFC-ED02D9E960F1} = {34BD04BD-BC1D-4BFC-AAFC-ED02D9E960F1} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libglog_static", "vsprojects\libglog_static\libglog_static.vcproj", "{772C2111-BBBF-49E6-B912-198A7F7A88E5}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "logging_unittest_static", "vsprojects\logging_unittest_static\logging_unittest_static.vcproj", "{9B239B45-84A9-4E06-AC46-8E220CD43974}" - ProjectSection(ProjectDependencies) = postProject - {772C2111-BBBF-49E6-B912-198A7F7A88E5} = {772C2111-BBBF-49E6-B912-198A7F7A88E5} - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {34BD04BD-BC1D-4BFC-AAFC-ED02D9E960F1}.Debug|Win32.ActiveCfg = Debug|Win32 - {34BD04BD-BC1D-4BFC-AAFC-ED02D9E960F1}.Debug|Win32.Build.0 = Debug|Win32 - {34BD04BD-BC1D-4BFC-AAFC-ED02D9E960F1}.Release|Win32.ActiveCfg = Release|Win32 - {34BD04BD-BC1D-4BFC-AAFC-ED02D9E960F1}.Release|Win32.Build.0 = Release|Win32 - {DD0690AA-5E09-46B5-83FD-4B28604CABA8}.Debug|Win32.ActiveCfg = Debug|Win32 - {DD0690AA-5E09-46B5-83FD-4B28604CABA8}.Debug|Win32.Build.0 = Debug|Win32 - {DD0690AA-5E09-46B5-83FD-4B28604CABA8}.Release|Win32.ActiveCfg = Release|Win32 - {DD0690AA-5E09-46B5-83FD-4B28604CABA8}.Release|Win32.Build.0 = Release|Win32 - {772C2111-BBBF-49E6-B912-198A7F7A88E5}.Debug|Win32.ActiveCfg = Debug|Win32 - {772C2111-BBBF-49E6-B912-198A7F7A88E5}.Debug|Win32.Build.0 = Debug|Win32 - {772C2111-BBBF-49E6-B912-198A7F7A88E5}.Release|Win32.ActiveCfg = Release|Win32 - {772C2111-BBBF-49E6-B912-198A7F7A88E5}.Release|Win32.Build.0 = Release|Win32 - {9B239B45-84A9-4E06-AC46-8E220CD43974}.Debug|Win32.ActiveCfg = Debug|Win32 - {9B239B45-84A9-4E06-AC46-8E220CD43974}.Debug|Win32.Build.0 = Debug|Win32 - {9B239B45-84A9-4E06-AC46-8E220CD43974}.Release|Win32.ActiveCfg = Release|Win32 - {9B239B45-84A9-4E06-AC46-8E220CD43974}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/install-sh b/toolkit/crashreporter/google-breakpad/src/third_party/glog/install-sh deleted file mode 100755 index a5897de6ea7f..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/install-sh +++ /dev/null @@ -1,519 +0,0 @@ -#!/bin/sh -# install - install a program, script, or datafile - -scriptversion=2006-12-25.00 - -# This originates from X11R5 (mit/util/scripts/install.sh), which was -# later released in X11R6 (xc/config/util/install.sh) with the -# following copyright and license. -# -# Copyright (C) 1994 X Consortium -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to -# deal in the Software without restriction, including without limitation the -# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -# sell copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- -# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# -# Except as contained in this notice, the name of the X Consortium shall not -# be used in advertising or otherwise to promote the sale, use or other deal- -# ings in this Software without prior written authorization from the X Consor- -# tium. -# -# -# FSF changes to this file are in the public domain. -# -# Calling this script install-sh is preferred over install.sh, to prevent -# `make' implicit rules from creating a file called install from it -# when there is no Makefile. -# -# This script is compatible with the BSD install script, but was written -# from scratch. - -nl=' -' -IFS=" "" $nl" - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit=${DOITPROG-} -if test -z "$doit"; then - doit_exec=exec -else - doit_exec=$doit -fi - -# Put in absolute file names if you don't have them in your path; -# or use environment vars. - -chgrpprog=${CHGRPPROG-chgrp} -chmodprog=${CHMODPROG-chmod} -chownprog=${CHOWNPROG-chown} -cmpprog=${CMPPROG-cmp} -cpprog=${CPPROG-cp} -mkdirprog=${MKDIRPROG-mkdir} -mvprog=${MVPROG-mv} -rmprog=${RMPROG-rm} -stripprog=${STRIPPROG-strip} - -posix_glob='?' -initialize_posix_glob=' - test "$posix_glob" != "?" || { - if (set -f) 2>/dev/null; then - posix_glob= - else - posix_glob=: - fi - } -' - -posix_mkdir= - -# Desired mode of installed file. -mode=0755 - -chgrpcmd= -chmodcmd=$chmodprog -chowncmd= -mvcmd=$mvprog -rmcmd="$rmprog -f" -stripcmd= - -src= -dst= -dir_arg= -dst_arg= - -copy_on_change=false -no_target_directory= - -usage="\ -Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE - or: $0 [OPTION]... SRCFILES... DIRECTORY - or: $0 [OPTION]... -t DIRECTORY SRCFILES... - or: $0 [OPTION]... -d DIRECTORIES... - -In the 1st form, copy SRCFILE to DSTFILE. -In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. -In the 4th, create DIRECTORIES. - -Options: - --help display this help and exit. - --version display version info and exit. - - -c (ignored) - -C install only if different (preserve the last data modification time) - -d create directories instead of installing files. - -g GROUP $chgrpprog installed files to GROUP. - -m MODE $chmodprog installed files to MODE. - -o USER $chownprog installed files to USER. - -s $stripprog installed files. - -t DIRECTORY install into DIRECTORY. - -T report an error if DSTFILE is a directory. - -Environment variables override the default commands: - CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG - RMPROG STRIPPROG -" - -while test $# -ne 0; do - case $1 in - -c) ;; - - -C) copy_on_change=true;; - - -d) dir_arg=true;; - - -g) chgrpcmd="$chgrpprog $2" - shift;; - - --help) echo "$usage"; exit $?;; - - -m) mode=$2 - case $mode in - *' '* | *' '* | *' -'* | *'*'* | *'?'* | *'['*) - echo "$0: invalid mode: $mode" >&2 - exit 1;; - esac - shift;; - - -o) chowncmd="$chownprog $2" - shift;; - - -s) stripcmd=$stripprog;; - - -t) dst_arg=$2 - shift;; - - -T) no_target_directory=true;; - - --version) echo "$0 $scriptversion"; exit $?;; - - --) shift - break;; - - -*) echo "$0: invalid option: $1" >&2 - exit 1;; - - *) break;; - esac - shift -done - -if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then - # When -d is used, all remaining arguments are directories to create. - # When -t is used, the destination is already specified. - # Otherwise, the last argument is the destination. Remove it from $@. - for arg - do - if test -n "$dst_arg"; then - # $@ is not empty: it contains at least $arg. - set fnord "$@" "$dst_arg" - shift # fnord - fi - shift # arg - dst_arg=$arg - done -fi - -if test $# -eq 0; then - if test -z "$dir_arg"; then - echo "$0: no input file specified." >&2 - exit 1 - fi - # It's OK to call `install-sh -d' without argument. - # This can happen when creating conditional directories. - exit 0 -fi - -if test -z "$dir_arg"; then - trap '(exit $?); exit' 1 2 13 15 - - # Set umask so as not to create temps with too-generous modes. - # However, 'strip' requires both read and write access to temps. - case $mode in - # Optimize common cases. - *644) cp_umask=133;; - *755) cp_umask=22;; - - *[0-7]) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw='% 200' - fi - cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; - *) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw=,u+rw - fi - cp_umask=$mode$u_plus_rw;; - esac -fi - -for src -do - # Protect names starting with `-'. - case $src in - -*) src=./$src;; - esac - - if test -n "$dir_arg"; then - dst=$src - dstdir=$dst - test -d "$dstdir" - dstdir_status=$? - else - - # Waiting for this to be detected by the "$cpprog $src $dsttmp" command - # might cause directories to be created, which would be especially bad - # if $src (and thus $dsttmp) contains '*'. - if test ! -f "$src" && test ! -d "$src"; then - echo "$0: $src does not exist." >&2 - exit 1 - fi - - if test -z "$dst_arg"; then - echo "$0: no destination specified." >&2 - exit 1 - fi - - dst=$dst_arg - # Protect names starting with `-'. - case $dst in - -*) dst=./$dst;; - esac - - # If destination is a directory, append the input filename; won't work - # if double slashes aren't ignored. - if test -d "$dst"; then - if test -n "$no_target_directory"; then - echo "$0: $dst_arg: Is a directory" >&2 - exit 1 - fi - dstdir=$dst - dst=$dstdir/`basename "$src"` - dstdir_status=0 - else - # Prefer dirname, but fall back on a substitute if dirname fails. - dstdir=` - (dirname "$dst") 2>/dev/null || - expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$dst" : 'X\(//\)[^/]' \| \ - X"$dst" : 'X\(//\)$' \| \ - X"$dst" : 'X\(/\)' \| . 2>/dev/null || - echo X"$dst" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q' - ` - - test -d "$dstdir" - dstdir_status=$? - fi - fi - - obsolete_mkdir_used=false - - if test $dstdir_status != 0; then - case $posix_mkdir in - '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac - - # With -d, create the new directory with the user-specified mode. - # Otherwise, rely on $mkdir_umask. - if test -n "$dir_arg"; then - mkdir_mode=-m$mode - else - mkdir_mode= - fi - - posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 - - if (umask $mkdir_umask && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 - then - if test -z "$dir_arg" || { - # Check for POSIX incompatibilities with -m. - # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writeable bit of parent directory when it shouldn't. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - ls_ld_tmpdir=`ls -ld "$tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/d" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null - fi - trap '' 0;; - esac;; - esac - - if - $posix_mkdir && ( - umask $mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" - ) - then : - else - - # The umask is ridiculous, or mkdir does not conform to POSIX, - # or it failed possibly due to a race condition. Create the - # directory the slow way, step by step, checking for races as we go. - - case $dstdir in - /*) prefix='/';; - -*) prefix='./';; - *) prefix='';; - esac - - eval "$initialize_posix_glob" - - oIFS=$IFS - IFS=/ - $posix_glob set -f - set fnord $dstdir - shift - $posix_glob set +f - IFS=$oIFS - - prefixes= - - for d - do - test -z "$d" && continue - - prefix=$prefix$d - if test -d "$prefix"; then - prefixes= - else - if $posix_mkdir; then - (umask=$mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break - # Don't fail if two instances are running concurrently. - test -d "$prefix" || exit 1 - else - case $prefix in - *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; - *) qprefix=$prefix;; - esac - prefixes="$prefixes '$qprefix'" - fi - fi - prefix=$prefix/ - done - - if test -n "$prefixes"; then - # Don't fail if two instances are running concurrently. - (umask $mkdir_umask && - eval "\$doit_exec \$mkdirprog $prefixes") || - test -d "$dstdir" || exit 1 - obsolete_mkdir_used=true - fi - fi - fi - - if test -n "$dir_arg"; then - { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && - { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || - test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 - else - - # Make a couple of temp file names in the proper directory. - dsttmp=$dstdir/_inst.$$_ - rmtmp=$dstdir/_rm.$$_ - - # Trap to clean up those temp files at exit. - trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 - - # Copy the file name to the temp name. - (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && - - # and set any options; do chmod last to preserve setuid bits. - # - # If any of these fail, we abort the whole thing. If we want to - # ignore errors from any of these, just make sure not to ignore - # errors from the above "$doit $cpprog $src $dsttmp" command. - # - { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && - { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && - { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && - - # If -C, don't bother to copy if it wouldn't change the file. - if $copy_on_change && - old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && - new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && - - eval "$initialize_posix_glob" && - $posix_glob set -f && - set X $old && old=:$2:$4:$5:$6 && - set X $new && new=:$2:$4:$5:$6 && - $posix_glob set +f && - - test "$old" = "$new" && - $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 - then - rm -f "$dsttmp" - else - # Rename the file to the real destination. - $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || - - # The rename failed, perhaps because mv can't rename something else - # to itself, or perhaps because mv is so ancient that it does not - # support -f. - { - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - test ! -f "$dst" || - $doit $rmcmd -f "$dst" 2>/dev/null || - { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && - { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } - } || - { echo "$0: cannot unlink or rename $dst" >&2 - (exit 1); exit 1 - } - } && - - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dst" - } - fi || exit 1 - - trap '' 0 - fi -done - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" -# End: diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/libglog.pc.in b/toolkit/crashreporter/google-breakpad/src/third_party/glog/libglog.pc.in deleted file mode 100644 index ad2b0774d89e..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/libglog.pc.in +++ /dev/null @@ -1,10 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: libglog -Description: Google Log (glog) C++ logging framework -Version: @VERSION@ -Libs: -L${libdir} -lglog -Cflags: -I${includedir} diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/ltmain.sh b/toolkit/crashreporter/google-breakpad/src/third_party/glog/ltmain.sh deleted file mode 100644 index 7ed280bc9525..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/ltmain.sh +++ /dev/null @@ -1,8413 +0,0 @@ -# Generated from ltmain.m4sh. - -# ltmain.sh (GNU libtool) 2.2.6b -# Written by Gordon Matzigkeit , 1996 - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# GNU Libtool is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, -# or obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -# Usage: $progname [OPTION]... [MODE-ARG]... -# -# Provide generalized library-building support services. -# -# --config show all configuration variables -# --debug enable verbose shell tracing -# -n, --dry-run display commands without modifying any files -# --features display basic configuration information and exit -# --mode=MODE use operation mode MODE -# --preserve-dup-deps don't remove duplicate dependency libraries -# --quiet, --silent don't print informational messages -# --tag=TAG use configuration variables from tag TAG -# -v, --verbose print informational messages (default) -# --version print version information -# -h, --help print short or long help message -# -# MODE must be one of the following: -# -# clean remove files from the build directory -# compile compile a source file into a libtool object -# execute automatically set library path, then run a program -# finish complete the installation of libtool libraries -# install install libraries or executables -# link create a library or an executable -# uninstall remove libraries from an installed directory -# -# MODE-ARGS vary depending on the MODE. -# Try `$progname --help --mode=MODE' for a more detailed description of MODE. -# -# When reporting a bug, please describe a test case to reproduce it and -# include the following information: -# -# host-triplet: $host -# shell: $SHELL -# compiler: $LTCC -# compiler flags: $LTCFLAGS -# linker: $LD (gnu? $with_gnu_ld) -# $progname: (GNU libtool) 2.2.6b Debian-2.2.6b-2ubuntu1 -# automake: $automake_version -# autoconf: $autoconf_version -# -# Report bugs to . - -PROGRAM=ltmain.sh -PACKAGE=libtool -VERSION="2.2.6b Debian-2.2.6b-2ubuntu1" -TIMESTAMP="" -package_revision=1.3017 - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# NLS nuisances: We save the old values to restore during execute mode. -# Only set LANG and LC_ALL to C if already set. -# These must not be set unconditionally because not all systems understand -# e.g. LANG=C (notably SCO). -lt_user_locale= -lt_safe_locale= -for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES -do - eval "if test \"\${$lt_var+set}\" = set; then - save_$lt_var=\$$lt_var - $lt_var=C - export $lt_var - lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" - lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" - fi" -done - -$lt_unset CDPATH - - - - - -: ${CP="cp -f"} -: ${ECHO="echo"} -: ${EGREP="/bin/grep -E"} -: ${FGREP="/bin/grep -F"} -: ${GREP="/bin/grep"} -: ${LN_S="ln -s"} -: ${MAKE="make"} -: ${MKDIR="mkdir"} -: ${MV="mv -f"} -: ${RM="rm -f"} -: ${SED="/bin/sed"} -: ${SHELL="${CONFIG_SHELL-/bin/sh}"} -: ${Xsed="$SED -e 1s/^X//"} - -# Global variables: -EXIT_SUCCESS=0 -EXIT_FAILURE=1 -EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. -EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. - -exit_status=$EXIT_SUCCESS - -# Make sure IFS has a sensible default -lt_nl=' -' -IFS=" $lt_nl" - -dirname="s,/[^/]*$,," -basename="s,^.*/,," - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi - func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` -} - -# Generated shell functions inserted here. - -# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh -# is ksh but when the shell is invoked as "sh" and the current value of -# the _XPG environment variable is not equal to 1 (one), the special -# positional parameter $0, within a function call, is the name of the -# function. -progpath="$0" - -# The name of this program: -# In the unlikely event $progname began with a '-', it would play havoc with -# func_echo (imagine progname=-n), so we prepend ./ in that case: -func_dirname_and_basename "$progpath" -progname=$func_basename_result -case $progname in - -*) progname=./$progname ;; -esac - -# Make sure we have an absolute path for reexecution: -case $progpath in - [\\/]*|[A-Za-z]:\\*) ;; - *[\\/]*) - progdir=$func_dirname_result - progdir=`cd "$progdir" && pwd` - progpath="$progdir/$progname" - ;; - *) - save_IFS="$IFS" - IFS=: - for progdir in $PATH; do - IFS="$save_IFS" - test -x "$progdir/$progname" && break - done - IFS="$save_IFS" - test -n "$progdir" || progdir=`pwd` - progpath="$progdir/$progname" - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed="${SED}"' -e 1s/^X//' -sed_quote_subst='s/\([`"$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Re-`\' parameter expansions in output of double_quote_subst that were -# `\'-ed in input to the same. If an odd number of `\' preceded a '$' -# in input to double_quote_subst, that '$' was protected from expansion. -# Since each input `\' is now two `\'s, look for any number of runs of -# four `\'s followed by two `\'s and then a '$'. `\' that '$'. -bs='\\' -bs2='\\\\' -bs4='\\\\\\\\' -dollar='\$' -sed_double_backslash="\ - s/$bs4/&\\ -/g - s/^$bs2$dollar/$bs&/ - s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g - s/\n//g" - -# Standard options: -opt_dry_run=false -opt_help=false -opt_quiet=false -opt_verbose=false -opt_warning=: - -# func_echo arg... -# Echo program name prefixed message, along with the current mode -# name if it has been set yet. -func_echo () -{ - $ECHO "$progname${mode+: }$mode: $*" -} - -# func_verbose arg... -# Echo program name prefixed message in verbose mode only. -func_verbose () -{ - $opt_verbose && func_echo ${1+"$@"} - - # A bug in bash halts the script if the last line of a function - # fails when set -e is in force, so we need another command to - # work around that: - : -} - -# func_error arg... -# Echo program name prefixed message to standard error. -func_error () -{ - $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 -} - -# func_warning arg... -# Echo program name prefixed warning message to standard error. -func_warning () -{ - $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 - - # bash bug again: - : -} - -# func_fatal_error arg... -# Echo program name prefixed message to standard error, and exit. -func_fatal_error () -{ - func_error ${1+"$@"} - exit $EXIT_FAILURE -} - -# func_fatal_help arg... -# Echo program name prefixed message to standard error, followed by -# a help hint, and exit. -func_fatal_help () -{ - func_error ${1+"$@"} - func_fatal_error "$help" -} -help="Try \`$progname --help' for more information." ## default - - -# func_grep expression filename -# Check whether EXPRESSION matches any line of FILENAME, without output. -func_grep () -{ - $GREP "$1" "$2" >/dev/null 2>&1 -} - - -# func_mkdir_p directory-path -# Make sure the entire path to DIRECTORY-PATH is available. -func_mkdir_p () -{ - my_directory_path="$1" - my_dir_list= - - if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then - - # Protect directory names starting with `-' - case $my_directory_path in - -*) my_directory_path="./$my_directory_path" ;; - esac - - # While some portion of DIR does not yet exist... - while test ! -d "$my_directory_path"; do - # ...make a list in topmost first order. Use a colon delimited - # list incase some portion of path contains whitespace. - my_dir_list="$my_directory_path:$my_dir_list" - - # If the last portion added has no slash in it, the list is done - case $my_directory_path in */*) ;; *) break ;; esac - - # ...otherwise throw away the child directory and loop - my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"` - done - my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'` - - save_mkdir_p_IFS="$IFS"; IFS=':' - for my_dir in $my_dir_list; do - IFS="$save_mkdir_p_IFS" - # mkdir can fail with a `File exist' error if two processes - # try to create one of the directories concurrently. Don't - # stop in that case! - $MKDIR "$my_dir" 2>/dev/null || : - done - IFS="$save_mkdir_p_IFS" - - # Bail out if we (or some other process) failed to create a directory. - test -d "$my_directory_path" || \ - func_fatal_error "Failed to create \`$1'" - fi -} - - -# func_mktempdir [string] -# Make a temporary directory that won't clash with other running -# libtool processes, and avoids race conditions if possible. If -# given, STRING is the basename for that directory. -func_mktempdir () -{ - my_template="${TMPDIR-/tmp}/${1-$progname}" - - if test "$opt_dry_run" = ":"; then - # Return a directory name, but don't create it in dry-run mode - my_tmpdir="${my_template}-$$" - else - - # If mktemp works, use that first and foremost - my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` - - if test ! -d "$my_tmpdir"; then - # Failing that, at least try and use $RANDOM to avoid a race - my_tmpdir="${my_template}-${RANDOM-0}$$" - - save_mktempdir_umask=`umask` - umask 0077 - $MKDIR "$my_tmpdir" - umask $save_mktempdir_umask - fi - - # If we're not in dry-run mode, bomb out on failure - test -d "$my_tmpdir" || \ - func_fatal_error "cannot create temporary directory \`$my_tmpdir'" - fi - - $ECHO "X$my_tmpdir" | $Xsed -} - - -# func_quote_for_eval arg -# Aesthetically quote ARG to be evaled later. -# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT -# is double-quoted, suitable for a subsequent eval, whereas -# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters -# which are still active within double quotes backslashified. -func_quote_for_eval () -{ - case $1 in - *[\\\`\"\$]*) - func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;; - *) - func_quote_for_eval_unquoted_result="$1" ;; - esac - - case $func_quote_for_eval_unquoted_result in - # Double-quote args containing shell metacharacters to delay - # word splitting, command substitution and and variable - # expansion for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" - ;; - *) - func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" - esac -} - - -# func_quote_for_expand arg -# Aesthetically quote ARG to be evaled later; same as above, -# but do not quote variable references. -func_quote_for_expand () -{ - case $1 in - *[\\\`\"]*) - my_arg=`$ECHO "X$1" | $Xsed \ - -e "$double_quote_subst" -e "$sed_double_backslash"` ;; - *) - my_arg="$1" ;; - esac - - case $my_arg in - # Double-quote args containing shell metacharacters to delay - # word splitting and command substitution for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - my_arg="\"$my_arg\"" - ;; - esac - - func_quote_for_expand_result="$my_arg" -} - - -# func_show_eval cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. -func_show_eval () -{ - my_cmd="$1" - my_fail_exp="${2-:}" - - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - if ${opt_dry_run-false}; then :; else - eval "$my_cmd" - my_status=$? - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" - fi - fi -} - - -# func_show_eval_locale cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. Use the saved locale for evaluation. -func_show_eval_locale () -{ - my_cmd="$1" - my_fail_exp="${2-:}" - - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - if ${opt_dry_run-false}; then :; else - eval "$lt_user_locale - $my_cmd" - my_status=$? - eval "$lt_safe_locale" - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" - fi - fi -} - - - - - -# func_version -# Echo version message to standard output and exit. -func_version () -{ - $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / { - s/^# // - s/^# *$// - s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ - p - }' < "$progpath" - exit $? -} - -# func_usage -# Echo short help message to standard output and exit. -func_usage () -{ - $SED -n '/^# Usage:/,/# -h/ { - s/^# // - s/^# *$// - s/\$progname/'$progname'/ - p - }' < "$progpath" - $ECHO - $ECHO "run \`$progname --help | more' for full usage" - exit $? -} - -# func_help -# Echo long help message to standard output and exit. -func_help () -{ - $SED -n '/^# Usage:/,/# Report bugs to/ { - s/^# // - s/^# *$// - s*\$progname*'$progname'* - s*\$host*'"$host"'* - s*\$SHELL*'"$SHELL"'* - s*\$LTCC*'"$LTCC"'* - s*\$LTCFLAGS*'"$LTCFLAGS"'* - s*\$LD*'"$LD"'* - s/\$with_gnu_ld/'"$with_gnu_ld"'/ - s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ - s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ - p - }' < "$progpath" - exit $? -} - -# func_missing_arg argname -# Echo program name prefixed message to standard error and set global -# exit_cmd. -func_missing_arg () -{ - func_error "missing argument for $1" - exit_cmd=exit -} - -exit_cmd=: - - - - - -# Check that we have a working $ECHO. -if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X$1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then - # Yippee, $ECHO works! - : -else - # Restart under the correct shell, and then maybe $ECHO will work. - exec $SHELL "$progpath" --no-reexec ${1+"$@"} -fi - -if test "X$1" = X--fallback-echo; then - # used as fallback echo - shift - cat </dev/null 2>&1; then - taglist="$taglist $tagname" - - # Evaluate the configuration. Be careful to quote the path - # and the sed script, to avoid splitting on whitespace, but - # also don't use non-portable quotes within backquotes within - # quotes we have to do it in 2 steps: - extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` - eval "$extractedcf" - else - func_error "ignoring unknown tag $tagname" - fi - ;; - esac -} - -# Parse options once, thoroughly. This comes as soon as possible in -# the script to make things like `libtool --version' happen quickly. -{ - - # Shorthand for --mode=foo, only valid as the first argument - case $1 in - clean|clea|cle|cl) - shift; set dummy --mode clean ${1+"$@"}; shift - ;; - compile|compil|compi|comp|com|co|c) - shift; set dummy --mode compile ${1+"$@"}; shift - ;; - execute|execut|execu|exec|exe|ex|e) - shift; set dummy --mode execute ${1+"$@"}; shift - ;; - finish|finis|fini|fin|fi|f) - shift; set dummy --mode finish ${1+"$@"}; shift - ;; - install|instal|insta|inst|ins|in|i) - shift; set dummy --mode install ${1+"$@"}; shift - ;; - link|lin|li|l) - shift; set dummy --mode link ${1+"$@"}; shift - ;; - uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) - shift; set dummy --mode uninstall ${1+"$@"}; shift - ;; - esac - - # Parse non-mode specific arguments: - while test "$#" -gt 0; do - opt="$1" - shift - - case $opt in - --config) func_config ;; - - --debug) preserve_args="$preserve_args $opt" - func_echo "enabling shell trace mode" - opt_debug='set -x' - $opt_debug - ;; - - -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break - execute_dlfiles="$execute_dlfiles $1" - shift - ;; - - --dry-run | -n) opt_dry_run=: ;; - --features) func_features ;; - --finish) mode="finish" ;; - - --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break - case $1 in - # Valid mode arguments: - clean) ;; - compile) ;; - execute) ;; - finish) ;; - install) ;; - link) ;; - relink) ;; - uninstall) ;; - - # Catch anything else as an error - *) func_error "invalid argument for $opt" - exit_cmd=exit - break - ;; - esac - - mode="$1" - shift - ;; - - --preserve-dup-deps) - opt_duplicate_deps=: ;; - - --quiet|--silent) preserve_args="$preserve_args $opt" - opt_silent=: - ;; - - --verbose| -v) preserve_args="$preserve_args $opt" - opt_silent=false - ;; - - --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break - preserve_args="$preserve_args $opt $1" - func_enable_tag "$1" # tagname is set here - shift - ;; - - # Separate optargs to long options: - -dlopen=*|--mode=*|--tag=*) - func_opt_split "$opt" - set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} - shift - ;; - - -\?|-h) func_usage ;; - --help) opt_help=: ;; - --version) func_version ;; - - -*) func_fatal_help "unrecognized option \`$opt'" ;; - - *) nonopt="$opt" - break - ;; - esac - done - - - case $host in - *cygwin* | *mingw* | *pw32* | *cegcc*) - # don't eliminate duplications in $postdeps and $predeps - opt_duplicate_compiler_generated_deps=: - ;; - *) - opt_duplicate_compiler_generated_deps=$opt_duplicate_deps - ;; - esac - - # Having warned about all mis-specified options, bail out if - # anything was wrong. - $exit_cmd $EXIT_FAILURE -} - -# func_check_version_match -# Ensure that we are using m4 macros, and libtool script from the same -# release of libtool. -func_check_version_match () -{ - if test "$package_revision" != "$macro_revision"; then - if test "$VERSION" != "$macro_version"; then - if test -z "$macro_version"; then - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from an older release. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - fi - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, -$progname: but the definition of this LT_INIT comes from revision $macro_revision. -$progname: You should recreate aclocal.m4 with macros from revision $package_revision -$progname: of $PACKAGE $VERSION and run autoconf again. -_LT_EOF - fi - - exit $EXIT_MISMATCH - fi -} - - -## ----------- ## -## Main. ## -## ----------- ## - -$opt_help || { - # Sanity checks first: - func_check_version_match - - if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then - func_fatal_configuration "not configured to build any kind of library" - fi - - test -z "$mode" && func_fatal_error "error: you must specify a MODE." - - - # Darwin sucks - eval std_shrext=\"$shrext_cmds\" - - - # Only execute mode is allowed to have -dlopen flags. - if test -n "$execute_dlfiles" && test "$mode" != execute; then - func_error "unrecognized option \`-dlopen'" - $ECHO "$help" 1>&2 - exit $EXIT_FAILURE - fi - - # Change the help message to a mode-specific one. - generic_help="$help" - help="Try \`$progname --help --mode=$mode' for more information." -} - - -# func_lalib_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_lalib_p () -{ - test -f "$1" && - $SED -e 4q "$1" 2>/dev/null \ - | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 -} - -# func_lalib_unsafe_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. -# This function implements the same check as func_lalib_p without -# resorting to external programs. To this end, it redirects stdin and -# closes it afterwards, without saving the original file descriptor. -# As a safety measure, use it only where a negative result would be -# fatal anyway. Works if `file' does not exist. -func_lalib_unsafe_p () -{ - lalib_p=no - if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then - for lalib_p_l in 1 2 3 4 - do - read lalib_p_line - case "$lalib_p_line" in - \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; - esac - done - exec 0<&5 5<&- - fi - test "$lalib_p" = yes -} - -# func_ltwrapper_script_p file -# True iff FILE is a libtool wrapper script -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_script_p () -{ - func_lalib_p "$1" -} - -# func_ltwrapper_executable_p file -# True iff FILE is a libtool wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_executable_p () -{ - func_ltwrapper_exec_suffix= - case $1 in - *.exe) ;; - *) func_ltwrapper_exec_suffix=.exe ;; - esac - $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 -} - -# func_ltwrapper_scriptname file -# Assumes file is an ltwrapper_executable -# uses $file to determine the appropriate filename for a -# temporary ltwrapper_script. -func_ltwrapper_scriptname () -{ - func_ltwrapper_scriptname_result="" - if func_ltwrapper_executable_p "$1"; then - func_dirname_and_basename "$1" "" "." - func_stripname '' '.exe' "$func_basename_result" - func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" - fi -} - -# func_ltwrapper_p file -# True iff FILE is a libtool wrapper script or wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_p () -{ - func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" -} - - -# func_execute_cmds commands fail_cmd -# Execute tilde-delimited COMMANDS. -# If FAIL_CMD is given, eval that upon failure. -# FAIL_CMD may read-access the current command in variable CMD! -func_execute_cmds () -{ - $opt_debug - save_ifs=$IFS; IFS='~' - for cmd in $1; do - IFS=$save_ifs - eval cmd=\"$cmd\" - func_show_eval "$cmd" "${2-:}" - done - IFS=$save_ifs -} - - -# func_source file -# Source FILE, adding directory component if necessary. -# Note that it is not necessary on cygwin/mingw to append a dot to -# FILE even if both FILE and FILE.exe exist: automatic-append-.exe -# behavior happens only for exec(3), not for open(2)! Also, sourcing -# `FILE.' does not work on cygwin managed mounts. -func_source () -{ - $opt_debug - case $1 in - */* | *\\*) . "$1" ;; - *) . "./$1" ;; - esac -} - - -# func_infer_tag arg -# Infer tagged configuration to use if any are available and -# if one wasn't chosen via the "--tag" command line option. -# Only attempt this if the compiler in the base compile -# command doesn't match the default compiler. -# arg is usually of the form 'gcc ...' -func_infer_tag () -{ - $opt_debug - if test -n "$available_tags" && test -z "$tagname"; then - CC_quoted= - for arg in $CC; do - func_quote_for_eval "$arg" - CC_quoted="$CC_quoted $func_quote_for_eval_result" - done - case $@ in - # Blanks in the command may have been stripped by the calling shell, - # but not from the CC environment variable when configure was run. - " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; - # Blanks at the start of $base_compile will cause this to fail - # if we don't check for them as well. - *) - for z in $available_tags; do - if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then - # Evaluate the configuration. - eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" - CC_quoted= - for arg in $CC; do - # Double-quote args containing other shell metacharacters. - func_quote_for_eval "$arg" - CC_quoted="$CC_quoted $func_quote_for_eval_result" - done - case "$@ " in - " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) - # The compiler in the base compile command matches - # the one in the tagged configuration. - # Assume this is the tagged configuration we want. - tagname=$z - break - ;; - esac - fi - done - # If $tagname still isn't set, then no tagged configuration - # was found and let the user know that the "--tag" command - # line option must be used. - if test -z "$tagname"; then - func_echo "unable to infer tagged configuration" - func_fatal_error "specify a tag with \`--tag'" -# else -# func_verbose "using $tagname tagged configuration" - fi - ;; - esac - fi -} - - - -# func_write_libtool_object output_name pic_name nonpic_name -# Create a libtool object file (analogous to a ".la" file), -# but don't create it if we're doing a dry run. -func_write_libtool_object () -{ - write_libobj=${1} - if test "$build_libtool_libs" = yes; then - write_lobj=\'${2}\' - else - write_lobj=none - fi - - if test "$build_old_libs" = yes; then - write_oldobj=\'${3}\' - else - write_oldobj=none - fi - - $opt_dry_run || { - cat >${write_libobj}T <?"'"'"' &()|`$[]' \ - && func_warning "libobj name \`$libobj' may not contain shell special characters." - func_dirname_and_basename "$obj" "/" "" - objname="$func_basename_result" - xdir="$func_dirname_result" - lobj=${xdir}$objdir/$objname - - test -z "$base_compile" && \ - func_fatal_help "you must specify a compilation command" - - # Delete any leftover library objects. - if test "$build_old_libs" = yes; then - removelist="$obj $lobj $libobj ${libobj}T" - else - removelist="$lobj $libobj ${libobj}T" - fi - - # On Cygwin there's no "real" PIC flag so we must build both object types - case $host_os in - cygwin* | mingw* | pw32* | os2* | cegcc*) - pic_mode=default - ;; - esac - if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then - # non-PIC code in shared libraries is not supported - pic_mode=default - fi - - # Calculate the filename of the output object if compiler does - # not support -o with -c - if test "$compiler_c_o" = no; then - output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} - lockfile="$output_obj.lock" - else - output_obj= - need_locks=no - lockfile= - fi - - # Lock this critical section if it is needed - # We use this script file to make the link, it avoids creating a new file - if test "$need_locks" = yes; then - until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do - func_echo "Waiting for $lockfile to be removed" - sleep 2 - done - elif test "$need_locks" = warn; then - if test -f "$lockfile"; then - $ECHO "\ -*** ERROR, $lockfile exists and contains: -`cat $lockfile 2>/dev/null` - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - removelist="$removelist $output_obj" - $ECHO "$srcfile" > "$lockfile" - fi - - $opt_dry_run || $RM $removelist - removelist="$removelist $lockfile" - trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 - - if test -n "$fix_srcfile_path"; then - eval srcfile=\"$fix_srcfile_path\" - fi - func_quote_for_eval "$srcfile" - qsrcfile=$func_quote_for_eval_result - - # Only build a PIC object if we are building libtool libraries. - if test "$build_libtool_libs" = yes; then - # Without this assignment, base_compile gets emptied. - fbsd_hideous_sh_bug=$base_compile - - if test "$pic_mode" != no; then - command="$base_compile $qsrcfile $pic_flag" - else - # Don't build PIC code - command="$base_compile $qsrcfile" - fi - - func_mkdir_p "$xdir$objdir" - - if test -z "$output_obj"; then - # Place PIC objects in $objdir - command="$command -o $lobj" - fi - - func_show_eval_locale "$command" \ - 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' - - if test "$need_locks" = warn && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed, then go on to compile the next one - if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then - func_show_eval '$MV "$output_obj" "$lobj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - - # Allow error messages only from the first compilation. - if test "$suppress_opt" = yes; then - suppress_output=' >/dev/null 2>&1' - fi - fi - - # Only build a position-dependent object if we build old libraries. - if test "$build_old_libs" = yes; then - if test "$pic_mode" != yes; then - # Don't build PIC code - command="$base_compile $qsrcfile$pie_flag" - else - command="$base_compile $qsrcfile $pic_flag" - fi - if test "$compiler_c_o" = yes; then - command="$command -o $obj" - fi - - # Suppress compiler output if we already did a PIC compilation. - command="$command$suppress_output" - func_show_eval_locale "$command" \ - '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' - - if test "$need_locks" = warn && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed - if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then - func_show_eval '$MV "$output_obj" "$obj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - fi - - $opt_dry_run || { - func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" - - # Unlock the critical section if it was locked - if test "$need_locks" != no; then - removelist=$lockfile - $RM "$lockfile" - fi - } - - exit $EXIT_SUCCESS -} - -$opt_help || { -test "$mode" = compile && func_mode_compile ${1+"$@"} -} - -func_mode_help () -{ - # We need to display help for each of the modes. - case $mode in - "") - # Generic help is extracted from the usage comments - # at the start of this file. - func_help - ;; - - clean) - $ECHO \ -"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... - -Remove files from the build directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, object or program, all the files associated -with it are deleted. Otherwise, only FILE itself is deleted using RM." - ;; - - compile) - $ECHO \ -"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE - -Compile a source file into a libtool library object. - -This mode accepts the following additional options: - - -o OUTPUT-FILE set the output file name to OUTPUT-FILE - -no-suppress do not suppress compiler output for multiple passes - -prefer-pic try to building PIC objects only - -prefer-non-pic try to building non-PIC objects only - -shared do not build a \`.o' file suitable for static linking - -static only build a \`.o' file suitable for static linking - -COMPILE-COMMAND is a command to be used in creating a \`standard' object file -from the given SOURCEFILE. - -The output file name is determined by removing the directory component from -SOURCEFILE, then substituting the C source code suffix \`.c' with the -library object suffix, \`.lo'." - ;; - - execute) - $ECHO \ -"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... - -Automatically set library path, then run a program. - -This mode accepts the following additional options: - - -dlopen FILE add the directory containing FILE to the library path - -This mode sets the library path environment variable according to \`-dlopen' -flags. - -If any of the ARGS are libtool executable wrappers, then they are translated -into their corresponding uninstalled binary, and any of their required library -directories are added to the library path. - -Then, COMMAND is executed, with ARGS as arguments." - ;; - - finish) - $ECHO \ -"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... - -Complete the installation of libtool libraries. - -Each LIBDIR is a directory that contains libtool libraries. - -The commands that this mode executes may require superuser privileges. Use -the \`--dry-run' option if you just want to see what would be executed." - ;; - - install) - $ECHO \ -"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... - -Install executables or libraries. - -INSTALL-COMMAND is the installation command. The first component should be -either the \`install' or \`cp' program. - -The following components of INSTALL-COMMAND are treated specially: - - -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation - -The rest of the components are interpreted as arguments to that command (only -BSD-compatible install options are recognized)." - ;; - - link) - $ECHO \ -"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... - -Link object files or libraries together to form another library, or to -create an executable program. - -LINK-COMMAND is a command using the C compiler that you would use to create -a program from several object files. - -The following components of LINK-COMMAND are treated specially: - - -all-static do not do any dynamic linking at all - -avoid-version do not add a version suffix if possible - -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime - -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols - -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) - -export-symbols SYMFILE - try to export only the symbols listed in SYMFILE - -export-symbols-regex REGEX - try to export only the symbols matching REGEX - -LLIBDIR search LIBDIR for required installed libraries - -lNAME OUTPUT-FILE requires the installed library libNAME - -module build a library that can dlopened - -no-fast-install disable the fast-install mode - -no-install link a not-installable executable - -no-undefined declare that a library does not refer to external symbols - -o OUTPUT-FILE create OUTPUT-FILE from the specified objects - -objectlist FILE Use a list of object files found in FILE to specify objects - -precious-files-regex REGEX - don't remove output files matching REGEX - -release RELEASE specify package release information - -rpath LIBDIR the created library will eventually be installed in LIBDIR - -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries - -shared only do dynamic linking of libtool libraries - -shrext SUFFIX override the standard shared library file extension - -static do not do any dynamic linking of uninstalled libtool libraries - -static-libtool-libs - do not do any dynamic linking of libtool libraries - -version-info CURRENT[:REVISION[:AGE]] - specify library version info [each variable defaults to 0] - -weak LIBNAME declare that the target provides the LIBNAME interface - -All other options (arguments beginning with \`-') are ignored. - -Every other argument is treated as a filename. Files ending in \`.la' are -treated as uninstalled libtool libraries, other files are standard or library -object files. - -If the OUTPUT-FILE ends in \`.la', then a libtool library is created, -only library objects (\`.lo' files) may be specified, and \`-rpath' is -required, except when creating a convenience library. - -If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created -using \`ar' and \`ranlib', or on Windows using \`lib'. - -If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file -is created, otherwise an executable program is created." - ;; - - uninstall) - $ECHO \ -"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... - -Remove libraries from an installation directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, all the files associated with it are deleted. -Otherwise, only FILE itself is deleted using RM." - ;; - - *) - func_fatal_help "invalid operation mode \`$mode'" - ;; - esac - - $ECHO - $ECHO "Try \`$progname --help' for more information about other modes." - - exit $? -} - - # Now that we've collected a possible --mode arg, show help if necessary - $opt_help && func_mode_help - - -# func_mode_execute arg... -func_mode_execute () -{ - $opt_debug - # The first argument is the command name. - cmd="$nonopt" - test -z "$cmd" && \ - func_fatal_help "you must specify a COMMAND" - - # Handle -dlopen flags immediately. - for file in $execute_dlfiles; do - test -f "$file" \ - || func_fatal_help "\`$file' is not a file" - - dir= - case $file in - *.la) - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$lib' is not a valid libtool archive" - - # Read the libtool library. - dlname= - library_names= - func_source "$file" - - # Skip this library if it cannot be dlopened. - if test -z "$dlname"; then - # Warn if it was a shared library. - test -n "$library_names" && \ - func_warning "\`$file' was not linked with \`-export-dynamic'" - continue - fi - - func_dirname "$file" "" "." - dir="$func_dirname_result" - - if test -f "$dir/$objdir/$dlname"; then - dir="$dir/$objdir" - else - if test ! -f "$dir/$dlname"; then - func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" - fi - fi - ;; - - *.lo) - # Just add the directory containing the .lo file. - func_dirname "$file" "" "." - dir="$func_dirname_result" - ;; - - *) - func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" - continue - ;; - esac - - # Get the absolute pathname. - absdir=`cd "$dir" && pwd` - test -n "$absdir" && dir="$absdir" - - # Now add the directory to shlibpath_var. - if eval "test -z \"\$$shlibpath_var\""; then - eval "$shlibpath_var=\"\$dir\"" - else - eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" - fi - done - - # This variable tells wrapper scripts just to set shlibpath_var - # rather than running their programs. - libtool_execute_magic="$magic" - - # Check if any of the arguments is a wrapper script. - args= - for file - do - case $file in - -*) ;; - *) - # Do a test to see if this is really a libtool program. - if func_ltwrapper_script_p "$file"; then - func_source "$file" - # Transform arg to wrapped name. - file="$progdir/$program" - elif func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - func_source "$func_ltwrapper_scriptname_result" - # Transform arg to wrapped name. - file="$progdir/$program" - fi - ;; - esac - # Quote arguments (to preserve shell metacharacters). - func_quote_for_eval "$file" - args="$args $func_quote_for_eval_result" - done - - if test "X$opt_dry_run" = Xfalse; then - if test -n "$shlibpath_var"; then - # Export the shlibpath_var. - eval "export $shlibpath_var" - fi - - # Restore saved environment variables - for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES - do - eval "if test \"\${save_$lt_var+set}\" = set; then - $lt_var=\$save_$lt_var; export $lt_var - else - $lt_unset $lt_var - fi" - done - - # Now prepare to actually exec the command. - exec_cmd="\$cmd$args" - else - # Display what would be done. - if test -n "$shlibpath_var"; then - eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" - $ECHO "export $shlibpath_var" - fi - $ECHO "$cmd$args" - exit $EXIT_SUCCESS - fi -} - -test "$mode" = execute && func_mode_execute ${1+"$@"} - - -# func_mode_finish arg... -func_mode_finish () -{ - $opt_debug - libdirs="$nonopt" - admincmds= - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - for dir - do - libdirs="$libdirs $dir" - done - - for libdir in $libdirs; do - if test -n "$finish_cmds"; then - # Do each command in the finish commands. - func_execute_cmds "$finish_cmds" 'admincmds="$admincmds -'"$cmd"'"' - fi - if test -n "$finish_eval"; then - # Do the single finish_eval. - eval cmds=\"$finish_eval\" - $opt_dry_run || eval "$cmds" || admincmds="$admincmds - $cmds" - fi - done - fi - - # Exit here if they wanted silent mode. - $opt_silent && exit $EXIT_SUCCESS - - $ECHO "X----------------------------------------------------------------------" | $Xsed - $ECHO "Libraries have been installed in:" - for libdir in $libdirs; do - $ECHO " $libdir" - done - $ECHO - $ECHO "If you ever happen to want to link against installed libraries" - $ECHO "in a given directory, LIBDIR, you must either use libtool, and" - $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'" - $ECHO "flag during linking and do at least one of the following:" - if test -n "$shlibpath_var"; then - $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable" - $ECHO " during execution" - fi - if test -n "$runpath_var"; then - $ECHO " - add LIBDIR to the \`$runpath_var' environment variable" - $ECHO " during linking" - fi - if test -n "$hardcode_libdir_flag_spec"; then - libdir=LIBDIR - eval flag=\"$hardcode_libdir_flag_spec\" - - $ECHO " - use the \`$flag' linker flag" - fi - if test -n "$admincmds"; then - $ECHO " - have your system administrator run these commands:$admincmds" - fi - if test -f /etc/ld.so.conf; then - $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" - fi - $ECHO - - $ECHO "See any operating system documentation about shared libraries for" - case $host in - solaris2.[6789]|solaris2.1[0-9]) - $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual" - $ECHO "pages." - ;; - *) - $ECHO "more information, such as the ld(1) and ld.so(8) manual pages." - ;; - esac - $ECHO "X----------------------------------------------------------------------" | $Xsed - exit $EXIT_SUCCESS -} - -test "$mode" = finish && func_mode_finish ${1+"$@"} - - -# func_mode_install arg... -func_mode_install () -{ - $opt_debug - # There may be an optional sh(1) argument at the beginning of - # install_prog (especially on Windows NT). - if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || - # Allow the use of GNU shtool's install command. - $ECHO "X$nonopt" | $GREP shtool >/dev/null; then - # Aesthetically quote it. - func_quote_for_eval "$nonopt" - install_prog="$func_quote_for_eval_result " - arg=$1 - shift - else - install_prog= - arg=$nonopt - fi - - # The real first argument should be the name of the installation program. - # Aesthetically quote it. - func_quote_for_eval "$arg" - install_prog="$install_prog$func_quote_for_eval_result" - - # We need to accept at least all the BSD install flags. - dest= - files= - opts= - prev= - install_type= - isdir=no - stripme= - for arg - do - if test -n "$dest"; then - files="$files $dest" - dest=$arg - continue - fi - - case $arg in - -d) isdir=yes ;; - -f) - case " $install_prog " in - *[\\\ /]cp\ *) ;; - *) prev=$arg ;; - esac - ;; - -g | -m | -o) - prev=$arg - ;; - -s) - stripme=" -s" - continue - ;; - -*) - ;; - *) - # If the previous option needed an argument, then skip it. - if test -n "$prev"; then - prev= - else - dest=$arg - continue - fi - ;; - esac - - # Aesthetically quote the argument. - func_quote_for_eval "$arg" - install_prog="$install_prog $func_quote_for_eval_result" - done - - test -z "$install_prog" && \ - func_fatal_help "you must specify an install program" - - test -n "$prev" && \ - func_fatal_help "the \`$prev' option requires an argument" - - if test -z "$files"; then - if test -z "$dest"; then - func_fatal_help "no file or destination specified" - else - func_fatal_help "you must specify a destination" - fi - fi - - # Strip any trailing slash from the destination. - func_stripname '' '/' "$dest" - dest=$func_stripname_result - - # Check to see that the destination is a directory. - test -d "$dest" && isdir=yes - if test "$isdir" = yes; then - destdir="$dest" - destname= - else - func_dirname_and_basename "$dest" "" "." - destdir="$func_dirname_result" - destname="$func_basename_result" - - # Not a directory, so check to see that there is only one file specified. - set dummy $files; shift - test "$#" -gt 1 && \ - func_fatal_help "\`$dest' is not a directory" - fi - case $destdir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - for file in $files; do - case $file in - *.lo) ;; - *) - func_fatal_help "\`$destdir' must be an absolute directory name" - ;; - esac - done - ;; - esac - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - staticlibs= - future_libdirs= - current_libdirs= - for file in $files; do - - # Do each installation. - case $file in - *.$libext) - # Do the static libraries later. - staticlibs="$staticlibs $file" - ;; - - *.la) - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$file' is not a valid libtool archive" - - library_names= - old_library= - relink_command= - func_source "$file" - - # Add the libdir to current_libdirs if it is the destination. - if test "X$destdir" = "X$libdir"; then - case "$current_libdirs " in - *" $libdir "*) ;; - *) current_libdirs="$current_libdirs $libdir" ;; - esac - else - # Note the libdir as a future libdir. - case "$future_libdirs " in - *" $libdir "*) ;; - *) future_libdirs="$future_libdirs $libdir" ;; - esac - fi - - func_dirname "$file" "/" "" - dir="$func_dirname_result" - dir="$dir$objdir" - - if test -n "$relink_command"; then - # Determine the prefix the user has applied to our future dir. - inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"` - - # Don't allow the user to place us outside of our expected - # location b/c this prevents finding dependent libraries that - # are installed to the same prefix. - # At present, this check doesn't affect windows .dll's that - # are installed into $libdir/../bin (currently, that works fine) - # but it's something to keep an eye on. - test "$inst_prefix_dir" = "$destdir" && \ - func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" - - if test -n "$inst_prefix_dir"; then - # Stick the inst_prefix_dir data into the link command. - relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` - else - relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"` - fi - - func_warning "relinking \`$file'" - func_show_eval "$relink_command" \ - 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' - fi - - # See the names of the shared library. - set dummy $library_names; shift - if test -n "$1"; then - realname="$1" - shift - - srcname="$realname" - test -n "$relink_command" && srcname="$realname"T - - # Install the shared library and build the symlinks. - func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \ - 'exit $?' - tstripme="$stripme" - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - case $realname in - *.dll.a) - tstripme="" - ;; - esac - ;; - esac - if test -n "$tstripme" && test -n "$striplib"; then - func_show_eval "$striplib $destdir/$realname" 'exit $?' - fi - - if test "$#" -gt 0; then - # Delete the old symlinks, and create new ones. - # Try `ln -sf' first, because the `ln' binary might depend on - # the symlink we replace! Solaris /bin/ln does not understand -f, - # so we also need to try rm && ln -s. - for linkname - do - test "$linkname" != "$realname" \ - && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" - done - fi - - # Do each command in the postinstall commands. - lib="$destdir/$realname" - func_execute_cmds "$postinstall_cmds" 'exit $?' - fi - - # Install the pseudo-library for information purposes. - func_basename "$file" - name="$func_basename_result" - instname="$dir/$name"i - func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' - - # Maybe install the static library, too. - test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" - ;; - - *.lo) - # Install (i.e. copy) a libtool object. - - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" - fi - - # Deduce the name of the destination old-style object file. - case $destfile in - *.lo) - func_lo2o "$destfile" - staticdest=$func_lo2o_result - ;; - *.$objext) - staticdest="$destfile" - destfile= - ;; - *) - func_fatal_help "cannot copy a libtool object to \`$destfile'" - ;; - esac - - # Install the libtool object if requested. - test -n "$destfile" && \ - func_show_eval "$install_prog $file $destfile" 'exit $?' - - # Install the old object if enabled. - if test "$build_old_libs" = yes; then - # Deduce the name of the old-style object file. - func_lo2o "$file" - staticobj=$func_lo2o_result - func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' - fi - exit $EXIT_SUCCESS - ;; - - *) - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" - fi - - # If the file is missing, and there is a .exe on the end, strip it - # because it is most likely a libtool script we actually want to - # install - stripped_ext="" - case $file in - *.exe) - if test ! -f "$file"; then - func_stripname '' '.exe' "$file" - file=$func_stripname_result - stripped_ext=".exe" - fi - ;; - esac - - # Do a test to see if this is really a libtool program. - case $host in - *cygwin* | *mingw*) - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - wrapper=$func_ltwrapper_scriptname_result - else - func_stripname '' '.exe' "$file" - wrapper=$func_stripname_result - fi - ;; - *) - wrapper=$file - ;; - esac - if func_ltwrapper_script_p "$wrapper"; then - notinst_deplibs= - relink_command= - - func_source "$wrapper" - - # Check the variables that should have been set. - test -z "$generated_by_libtool_version" && \ - func_fatal_error "invalid libtool wrapper script \`$wrapper'" - - finalize=yes - for lib in $notinst_deplibs; do - # Check to see that each library is installed. - libdir= - if test -f "$lib"; then - func_source "$lib" - fi - libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test - if test -n "$libdir" && test ! -f "$libfile"; then - func_warning "\`$lib' has not been installed in \`$libdir'" - finalize=no - fi - done - - relink_command= - func_source "$wrapper" - - outputname= - if test "$fast_install" = no && test -n "$relink_command"; then - $opt_dry_run || { - if test "$finalize" = yes; then - tmpdir=`func_mktempdir` - func_basename "$file$stripped_ext" - file="$func_basename_result" - outputname="$tmpdir/$file" - # Replace the output file specification. - relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` - - $opt_silent || { - func_quote_for_expand "$relink_command" - eval "func_echo $func_quote_for_expand_result" - } - if eval "$relink_command"; then : - else - func_error "error: relink \`$file' with the above command before installing it" - $opt_dry_run || ${RM}r "$tmpdir" - continue - fi - file="$outputname" - else - func_warning "cannot relink \`$file'" - fi - } - else - # Install the binary that we compiled earlier. - file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` - fi - fi - - # remove .exe since cygwin /usr/bin/install will append another - # one anyway - case $install_prog,$host in - */usr/bin/install*,*cygwin*) - case $file:$destfile in - *.exe:*.exe) - # this is ok - ;; - *.exe:*) - destfile=$destfile.exe - ;; - *:*.exe) - func_stripname '' '.exe' "$destfile" - destfile=$func_stripname_result - ;; - esac - ;; - esac - func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' - $opt_dry_run || if test -n "$outputname"; then - ${RM}r "$tmpdir" - fi - ;; - esac - done - - for file in $staticlibs; do - func_basename "$file" - name="$func_basename_result" - - # Set up the ranlib parameters. - oldlib="$destdir/$name" - - func_show_eval "$install_prog \$file \$oldlib" 'exit $?' - - if test -n "$stripme" && test -n "$old_striplib"; then - func_show_eval "$old_striplib $oldlib" 'exit $?' - fi - - # Do each command in the postinstall commands. - func_execute_cmds "$old_postinstall_cmds" 'exit $?' - done - - test -n "$future_libdirs" && \ - func_warning "remember to run \`$progname --finish$future_libdirs'" - - if test -n "$current_libdirs"; then - # Maybe just do a dry run. - $opt_dry_run && current_libdirs=" -n$current_libdirs" - exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' - else - exit $EXIT_SUCCESS - fi -} - -test "$mode" = install && func_mode_install ${1+"$@"} - - -# func_generate_dlsyms outputname originator pic_p -# Extract symbols from dlprefiles and create ${outputname}S.o with -# a dlpreopen symbol table. -func_generate_dlsyms () -{ - $opt_debug - my_outputname="$1" - my_originator="$2" - my_pic_p="${3-no}" - my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` - my_dlsyms= - - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - if test -n "$NM" && test -n "$global_symbol_pipe"; then - my_dlsyms="${my_outputname}S.c" - else - func_error "not configured to extract global symbols from dlpreopened files" - fi - fi - - if test -n "$my_dlsyms"; then - case $my_dlsyms in - "") ;; - *.c) - # Discover the nlist of each of the dlfiles. - nlist="$output_objdir/${my_outputname}.nm" - - func_show_eval "$RM $nlist ${nlist}S ${nlist}T" - - # Parse the name list into a source file. - func_verbose "creating $output_objdir/$my_dlsyms" - - $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ -/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ -/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ - -#ifdef __cplusplus -extern \"C\" { -#endif - -/* External symbol declarations for the compiler. */\ -" - - if test "$dlself" = yes; then - func_verbose "generating symbol list for \`$output'" - - $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" - - # Add our own program objects to the symbol list. - progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - for progfile in $progfiles; do - func_verbose "extracting global C symbols from \`$progfile'" - $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" - done - - if test -n "$exclude_expsyms"; then - $opt_dry_run || { - eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - if test -n "$export_symbols_regex"; then - $opt_dry_run || { - eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - export_symbols="$output_objdir/$outputname.exp" - $opt_dry_run || { - $RM $export_symbols - eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' - case $host in - *cygwin* | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' - ;; - esac - } - else - $opt_dry_run || { - eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' - eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - case $host in - *cygwin | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' - ;; - esac - } - fi - fi - - for dlprefile in $dlprefiles; do - func_verbose "extracting global C symbols from \`$dlprefile'" - func_basename "$dlprefile" - name="$func_basename_result" - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } - done - - $opt_dry_run || { - # Make sure we have at least an empty file. - test -f "$nlist" || : > "$nlist" - - if test -n "$exclude_expsyms"; then - $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T - $MV "$nlist"T "$nlist" - fi - - # Try sorting and uniquifying the output. - if $GREP -v "^: " < "$nlist" | - if sort -k 3 /dev/null 2>&1; then - sort -k 3 - else - sort +2 - fi | - uniq > "$nlist"S; then - : - else - $GREP -v "^: " < "$nlist" > "$nlist"S - fi - - if test -f "$nlist"S; then - eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' - else - $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms" - fi - - $ECHO >> "$output_objdir/$my_dlsyms" "\ - -/* The mapping between symbol names and symbols. */ -typedef struct { - const char *name; - void *address; -} lt_dlsymlist; -" - case $host in - *cygwin* | *mingw* | *cegcc* ) - $ECHO >> "$output_objdir/$my_dlsyms" "\ -/* DATA imports from DLLs on WIN32 con't be const, because - runtime relocations are performed -- see ld's documentation - on pseudo-relocs. */" - lt_dlsym_const= ;; - *osf5*) - echo >> "$output_objdir/$my_dlsyms" "\ -/* This system does not cope well with relocations in const data */" - lt_dlsym_const= ;; - *) - lt_dlsym_const=const ;; - esac - - $ECHO >> "$output_objdir/$my_dlsyms" "\ -extern $lt_dlsym_const lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[]; -$lt_dlsym_const lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[] = -{\ - { \"$my_originator\", (void *) 0 }," - - case $need_lib_prefix in - no) - eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - *) - eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - esac - $ECHO >> "$output_objdir/$my_dlsyms" "\ - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt_${my_prefix}_LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif\ -" - } # !$opt_dry_run - - pic_flag_for_symtable= - case "$compile_command " in - *" -static "*) ;; - *) - case $host in - # compiling the symbol table file with pic_flag works around - # a FreeBSD bug that causes programs to crash when -lm is - # linked before any other PIC object. But we must not use - # pic_flag when linking with -static. The problem exists in - # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. - *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) - pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; - *-*-hpux*) - pic_flag_for_symtable=" $pic_flag" ;; - *) - if test "X$my_pic_p" != Xno; then - pic_flag_for_symtable=" $pic_flag" - fi - ;; - esac - ;; - esac - symtab_cflags= - for arg in $LTCFLAGS; do - case $arg in - -pie | -fpie | -fPIE) ;; - *) symtab_cflags="$symtab_cflags $arg" ;; - esac - done - - # Now compile the dynamic symbol file. - func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' - - # Clean up the generated files. - func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' - - # Transform the symbol file into the correct name. - symfileobj="$output_objdir/${my_outputname}S.$objext" - case $host in - *cygwin* | *mingw* | *cegcc* ) - if test -f "$output_objdir/$my_outputname.def"; then - compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - else - compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` - fi - ;; - *) - compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` - ;; - esac - ;; - *) - func_fatal_error "unknown suffix for \`$my_dlsyms'" - ;; - esac - else - # We keep going just in case the user didn't refer to - # lt_preloaded_symbols. The linker will fail if global_symbol_pipe - # really was required. - - # Nullify the symbol file. - compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` - finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` - fi -} - -# func_win32_libid arg -# return the library type of file 'arg' -# -# Need a lot of goo to handle *both* DLLs and import libs -# Has to be a shell function in order to 'eat' the argument -# that is supplied when $file_magic_command is called. -func_win32_libid () -{ - $opt_debug - win32_libid_type="unknown" - win32_fileres=`file -L $1 2>/dev/null` - case $win32_fileres in - *ar\ archive\ import\ library*) # definitely import - win32_libid_type="x86 archive import" - ;; - *ar\ archive*) # could be an import, or static - if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | - $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then - win32_nmres=`eval $NM -f posix -A $1 | - $SED -n -e ' - 1,100{ - / I /{ - s,.*,import, - p - q - } - }'` - case $win32_nmres in - import*) win32_libid_type="x86 archive import";; - *) win32_libid_type="x86 archive static";; - esac - fi - ;; - *DLL*) - win32_libid_type="x86 DLL" - ;; - *executable*) # but shell scripts are "executable" too... - case $win32_fileres in - *MS\ Windows\ PE\ Intel*) - win32_libid_type="x86 DLL" - ;; - esac - ;; - esac - $ECHO "$win32_libid_type" -} - - - -# func_extract_an_archive dir oldlib -func_extract_an_archive () -{ - $opt_debug - f_ex_an_ar_dir="$1"; shift - f_ex_an_ar_oldlib="$1" - func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?' - if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then - : - else - func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" - fi -} - - -# func_extract_archives gentop oldlib ... -func_extract_archives () -{ - $opt_debug - my_gentop="$1"; shift - my_oldlibs=${1+"$@"} - my_oldobjs="" - my_xlib="" - my_xabs="" - my_xdir="" - - for my_xlib in $my_oldlibs; do - # Extract the objects. - case $my_xlib in - [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; - *) my_xabs=`pwd`"/$my_xlib" ;; - esac - func_basename "$my_xlib" - my_xlib="$func_basename_result" - my_xlib_u=$my_xlib - while :; do - case " $extracted_archives " in - *" $my_xlib_u "*) - func_arith $extracted_serial + 1 - extracted_serial=$func_arith_result - my_xlib_u=lt$extracted_serial-$my_xlib ;; - *) break ;; - esac - done - extracted_archives="$extracted_archives $my_xlib_u" - my_xdir="$my_gentop/$my_xlib_u" - - func_mkdir_p "$my_xdir" - - case $host in - *-darwin*) - func_verbose "Extracting $my_xabs" - # Do not bother doing anything if just a dry run - $opt_dry_run || { - darwin_orig_dir=`pwd` - cd $my_xdir || exit $? - darwin_archive=$my_xabs - darwin_curdir=`pwd` - darwin_base_archive=`basename "$darwin_archive"` - darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` - if test -n "$darwin_arches"; then - darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` - darwin_arch= - func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" - for darwin_arch in $darwin_arches ; do - func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" - $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" - cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" - func_extract_an_archive "`pwd`" "${darwin_base_archive}" - cd "$darwin_curdir" - $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" - done # $darwin_arches - ## Okay now we've a bunch of thin objects, gotta fatten them up :) - darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` - darwin_file= - darwin_files= - for darwin_file in $darwin_filelist; do - darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` - $LIPO -create -output "$darwin_file" $darwin_files - done # $darwin_filelist - $RM -rf unfat-$$ - cd "$darwin_orig_dir" - else - cd $darwin_orig_dir - func_extract_an_archive "$my_xdir" "$my_xabs" - fi # $darwin_arches - } # !$opt_dry_run - ;; - *) - func_extract_an_archive "$my_xdir" "$my_xabs" - ;; - esac - my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` - done - - func_extract_archives_result="$my_oldobjs" -} - - - -# func_emit_wrapper_part1 [arg=no] -# -# Emit the first part of a libtool wrapper script on stdout. -# For more information, see the description associated with -# func_emit_wrapper(), below. -func_emit_wrapper_part1 () -{ - func_emit_wrapper_part1_arg1=no - if test -n "$1" ; then - func_emit_wrapper_part1_arg1=$1 - fi - - $ECHO "\ -#! $SHELL - -# $output - temporary wrapper script for $objdir/$outputname -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION -# -# The $output program cannot be directly executed until all the libtool -# libraries that it depends on are installed. -# -# This wrapper script should never be moved out of the build directory. -# If it is, it will not operate correctly. - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='${SED} -e 1s/^X//' -sed_quote_subst='$sed_quote_subst' - -# Be Bourne compatible -if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -relink_command=\"$relink_command\" - -# This environment variable determines our operation mode. -if test \"\$libtool_install_magic\" = \"$magic\"; then - # install mode needs the following variables: - generated_by_libtool_version='$macro_version' - notinst_deplibs='$notinst_deplibs' -else - # When we are sourced in execute mode, \$file and \$ECHO are already set. - if test \"\$libtool_execute_magic\" != \"$magic\"; then - ECHO=\"$qecho\" - file=\"\$0\" - # Make sure echo works. - if test \"X\$1\" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift - elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then - # Yippee, \$ECHO works! - : - else - # Restart under the correct shell, and then maybe \$ECHO will work. - exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} - fi - fi\ -" - $ECHO "\ - - # Find the directory that this script lives in. - thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` - test \"x\$thisdir\" = \"x\$file\" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. - file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` - while test -n \"\$file\"; do - destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` - - # If there was a directory component, then change thisdir. - if test \"x\$destdir\" != \"x\$file\"; then - case \"\$destdir\" in - [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; - *) thisdir=\"\$thisdir/\$destdir\" ;; - esac - fi - - file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\` - file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` - done -" -} -# end: func_emit_wrapper_part1 - -# func_emit_wrapper_part2 [arg=no] -# -# Emit the second part of a libtool wrapper script on stdout. -# For more information, see the description associated with -# func_emit_wrapper(), below. -func_emit_wrapper_part2 () -{ - func_emit_wrapper_part2_arg1=no - if test -n "$1" ; then - func_emit_wrapper_part2_arg1=$1 - fi - - $ECHO "\ - - # Usually 'no', except on cygwin/mingw when embedded into - # the cwrapper. - WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1 - if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then - # special case for '.' - if test \"\$thisdir\" = \".\"; then - thisdir=\`pwd\` - fi - # remove .libs from thisdir - case \"\$thisdir\" in - *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;; - $objdir ) thisdir=. ;; - esac - fi - - # Try to get the absolute directory name. - absdir=\`cd \"\$thisdir\" && pwd\` - test -n \"\$absdir\" && thisdir=\"\$absdir\" -" - - if test "$fast_install" = yes; then - $ECHO "\ - program=lt-'$outputname'$exeext - progdir=\"\$thisdir/$objdir\" - - if test ! -f \"\$progdir/\$program\" || - { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ - test \"X\$file\" != \"X\$progdir/\$program\"; }; then - - file=\"\$\$-\$program\" - - if test ! -d \"\$progdir\"; then - $MKDIR \"\$progdir\" - else - $RM \"\$progdir/\$file\" - fi" - - $ECHO "\ - - # relink executable if necessary - if test -n \"\$relink_command\"; then - if relink_command_output=\`eval \$relink_command 2>&1\`; then : - else - $ECHO \"\$relink_command_output\" >&2 - $RM \"\$progdir/\$file\" - exit 1 - fi - fi - - $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || - { $RM \"\$progdir/\$program\"; - $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } - $RM \"\$progdir/\$file\" - fi" - else - $ECHO "\ - program='$outputname' - progdir=\"\$thisdir/$objdir\" -" - fi - - $ECHO "\ - - if test -f \"\$progdir/\$program\"; then" - - # Export our shlibpath_var if we have one. - if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then - $ECHO "\ - # Add our own library path to $shlibpath_var - $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" - - # Some systems cannot cope with colon-terminated $shlibpath_var - # The second colon is a workaround for a bug in BeOS R4 sed - $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` - - export $shlibpath_var -" - fi - - # fixup the dll searchpath if we need to. - if test -n "$dllsearchpath"; then - $ECHO "\ - # Add the dll search path components to the executable PATH - PATH=$dllsearchpath:\$PATH -" - fi - - $ECHO "\ - if test \"\$libtool_execute_magic\" != \"$magic\"; then - # Run the actual program with our arguments. -" - case $host in - # Backslashes separate directories on plain windows - *-*-mingw | *-*-os2* | *-cegcc*) - $ECHO "\ - exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} -" - ;; - - *) - $ECHO "\ - exec \"\$progdir/\$program\" \${1+\"\$@\"} -" - ;; - esac - $ECHO "\ - \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 - exit 1 - fi - else - # The program doesn't exist. - \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 - \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 - $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 - exit 1 - fi -fi\ -" -} -# end: func_emit_wrapper_part2 - - -# func_emit_wrapper [arg=no] -# -# Emit a libtool wrapper script on stdout. -# Don't directly open a file because we may want to -# incorporate the script contents within a cygwin/mingw -# wrapper executable. Must ONLY be called from within -# func_mode_link because it depends on a number of variables -# set therein. -# -# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR -# variable will take. If 'yes', then the emitted script -# will assume that the directory in which it is stored is -# the $objdir directory. This is a cygwin/mingw-specific -# behavior. -func_emit_wrapper () -{ - func_emit_wrapper_arg1=no - if test -n "$1" ; then - func_emit_wrapper_arg1=$1 - fi - - # split this up so that func_emit_cwrapperexe_src - # can call each part independently. - func_emit_wrapper_part1 "${func_emit_wrapper_arg1}" - func_emit_wrapper_part2 "${func_emit_wrapper_arg1}" -} - - -# func_to_host_path arg -# -# Convert paths to host format when used with build tools. -# Intended for use with "native" mingw (where libtool itself -# is running under the msys shell), or in the following cross- -# build environments: -# $build $host -# mingw (msys) mingw [e.g. native] -# cygwin mingw -# *nix + wine mingw -# where wine is equipped with the `winepath' executable. -# In the native mingw case, the (msys) shell automatically -# converts paths for any non-msys applications it launches, -# but that facility isn't available from inside the cwrapper. -# Similar accommodations are necessary for $host mingw and -# $build cygwin. Calling this function does no harm for other -# $host/$build combinations not listed above. -# -# ARG is the path (on $build) that should be converted to -# the proper representation for $host. The result is stored -# in $func_to_host_path_result. -func_to_host_path () -{ - func_to_host_path_result="$1" - if test -n "$1" ; then - case $host in - *mingw* ) - lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - case $build in - *mingw* ) # actually, msys - # awkward: cmd appends spaces to result - lt_sed_strip_trailing_spaces="s/[ ]*\$//" - func_to_host_path_tmp1=`( cmd //c echo "$1" |\ - $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` - func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ - $SED -e "$lt_sed_naive_backslashify"` - ;; - *cygwin* ) - func_to_host_path_tmp1=`cygpath -w "$1"` - func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ - $SED -e "$lt_sed_naive_backslashify"` - ;; - * ) - # Unfortunately, winepath does not exit with a non-zero - # error code, so we are forced to check the contents of - # stdout. On the other hand, if the command is not - # found, the shell will set an exit code of 127 and print - # *an error message* to stdout. So we must check for both - # error code of zero AND non-empty stdout, which explains - # the odd construction: - func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` - if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then - func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ - $SED -e "$lt_sed_naive_backslashify"` - else - # Allow warning below. - func_to_host_path_result="" - fi - ;; - esac - if test -z "$func_to_host_path_result" ; then - func_error "Could not determine host path corresponding to" - func_error " '$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback: - func_to_host_path_result="$1" - fi - ;; - esac - fi -} -# end: func_to_host_path - -# func_to_host_pathlist arg -# -# Convert pathlists to host format when used with build tools. -# See func_to_host_path(), above. This function supports the -# following $build/$host combinations (but does no harm for -# combinations not listed here): -# $build $host -# mingw (msys) mingw [e.g. native] -# cygwin mingw -# *nix + wine mingw -# -# Path separators are also converted from $build format to -# $host format. If ARG begins or ends with a path separator -# character, it is preserved (but converted to $host format) -# on output. -# -# ARG is a pathlist (on $build) that should be converted to -# the proper representation on $host. The result is stored -# in $func_to_host_pathlist_result. -func_to_host_pathlist () -{ - func_to_host_pathlist_result="$1" - if test -n "$1" ; then - case $host in - *mingw* ) - lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - # Remove leading and trailing path separator characters from - # ARG. msys behavior is inconsistent here, cygpath turns them - # into '.;' and ';.', and winepath ignores them completely. - func_to_host_pathlist_tmp2="$1" - # Once set for this call, this variable should not be - # reassigned. It is used in tha fallback case. - func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\ - $SED -e 's|^:*||' -e 's|:*$||'` - case $build in - *mingw* ) # Actually, msys. - # Awkward: cmd appends spaces to result. - lt_sed_strip_trailing_spaces="s/[ ]*\$//" - func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\ - $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` - func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ - $SED -e "$lt_sed_naive_backslashify"` - ;; - *cygwin* ) - func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"` - func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ - $SED -e "$lt_sed_naive_backslashify"` - ;; - * ) - # unfortunately, winepath doesn't convert pathlists - func_to_host_pathlist_result="" - func_to_host_pathlist_oldIFS=$IFS - IFS=: - for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do - IFS=$func_to_host_pathlist_oldIFS - if test -n "$func_to_host_pathlist_f" ; then - func_to_host_path "$func_to_host_pathlist_f" - if test -n "$func_to_host_path_result" ; then - if test -z "$func_to_host_pathlist_result" ; then - func_to_host_pathlist_result="$func_to_host_path_result" - else - func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result" - fi - fi - fi - IFS=: - done - IFS=$func_to_host_pathlist_oldIFS - ;; - esac - if test -z "$func_to_host_pathlist_result" ; then - func_error "Could not determine the host path(s) corresponding to" - func_error " '$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback. This may break if $1 contains DOS-style drive - # specifications. The fix is not to complicate the expression - # below, but for the user to provide a working wine installation - # with winepath so that path translation in the cross-to-mingw - # case works properly. - lt_replace_pathsep_nix_to_dos="s|:|;|g" - func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ - $SED -e "$lt_replace_pathsep_nix_to_dos"` - fi - # Now, add the leading and trailing path separators back - case "$1" in - :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" - ;; - esac - case "$1" in - *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;" - ;; - esac - ;; - esac - fi -} -# end: func_to_host_pathlist - -# func_emit_cwrapperexe_src -# emit the source code for a wrapper executable on stdout -# Must ONLY be called from within func_mode_link because -# it depends on a number of variable set therein. -func_emit_cwrapperexe_src () -{ - cat < -#include -#ifdef _MSC_VER -# include -# include -# include -# define setmode _setmode -#else -# include -# include -# ifdef __CYGWIN__ -# include -# define HAVE_SETENV -# ifdef __STRICT_ANSI__ -char *realpath (const char *, char *); -int putenv (char *); -int setenv (const char *, const char *, int); -# endif -# endif -#endif -#include -#include -#include -#include -#include -#include -#include -#include - -#if defined(PATH_MAX) -# define LT_PATHMAX PATH_MAX -#elif defined(MAXPATHLEN) -# define LT_PATHMAX MAXPATHLEN -#else -# define LT_PATHMAX 1024 -#endif - -#ifndef S_IXOTH -# define S_IXOTH 0 -#endif -#ifndef S_IXGRP -# define S_IXGRP 0 -#endif - -#ifdef _MSC_VER -# define S_IXUSR _S_IEXEC -# define stat _stat -# ifndef _INTPTR_T_DEFINED -# define intptr_t int -# endif -#endif - -#ifndef DIR_SEPARATOR -# define DIR_SEPARATOR '/' -# define PATH_SEPARATOR ':' -#endif - -#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ - defined (__OS2__) -# define HAVE_DOS_BASED_FILE_SYSTEM -# define FOPEN_WB "wb" -# ifndef DIR_SEPARATOR_2 -# define DIR_SEPARATOR_2 '\\' -# endif -# ifndef PATH_SEPARATOR_2 -# define PATH_SEPARATOR_2 ';' -# endif -#endif - -#ifndef DIR_SEPARATOR_2 -# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) -#else /* DIR_SEPARATOR_2 */ -# define IS_DIR_SEPARATOR(ch) \ - (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) -#endif /* DIR_SEPARATOR_2 */ - -#ifndef PATH_SEPARATOR_2 -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) -#else /* PATH_SEPARATOR_2 */ -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) -#endif /* PATH_SEPARATOR_2 */ - -#ifdef __CYGWIN__ -# define FOPEN_WB "wb" -#endif - -#ifndef FOPEN_WB -# define FOPEN_WB "w" -#endif -#ifndef _O_BINARY -# define _O_BINARY 0 -#endif - -#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) -#define XFREE(stale) do { \ - if (stale) { free ((void *) stale); stale = 0; } \ -} while (0) - -#undef LTWRAPPER_DEBUGPRINTF -#if defined DEBUGWRAPPER -# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args -static void -ltwrapper_debugprintf (const char *fmt, ...) -{ - va_list args; - va_start (args, fmt); - (void) vfprintf (stderr, fmt, args); - va_end (args); -} -#else -# define LTWRAPPER_DEBUGPRINTF(args) -#endif - -const char *program_name = NULL; - -void *xmalloc (size_t num); -char *xstrdup (const char *string); -const char *base_name (const char *name); -char *find_executable (const char *wrapper); -char *chase_symlinks (const char *pathspec); -int make_executable (const char *path); -int check_executable (const char *path); -char *strendzap (char *str, const char *pat); -void lt_fatal (const char *message, ...); -void lt_setenv (const char *name, const char *value); -char *lt_extend_str (const char *orig_value, const char *add, int to_end); -void lt_opt_process_env_set (const char *arg); -void lt_opt_process_env_prepend (const char *arg); -void lt_opt_process_env_append (const char *arg); -int lt_split_name_value (const char *arg, char** name, char** value); -void lt_update_exe_path (const char *name, const char *value); -void lt_update_lib_path (const char *name, const char *value); - -static const char *script_text_part1 = -EOF - - func_emit_wrapper_part1 yes | - $SED -e 's/\([\\"]\)/\\\1/g' \ - -e 's/^/ "/' -e 's/$/\\n"/' - echo ";" - cat <"))); - for (i = 0; i < newargc; i++) - { - LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : ""))); - } - -EOF - - case $host_os in - mingw*) - cat <<"EOF" - /* execv doesn't actually work on mingw as expected on unix */ - rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); - if (rval == -1) - { - /* failed to start process */ - LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno)); - return 127; - } - return rval; -EOF - ;; - *) - cat <<"EOF" - execv (lt_argv_zero, newargz); - return rval; /* =127, but avoids unused variable warning */ -EOF - ;; - esac - - cat <<"EOF" -} - -void * -xmalloc (size_t num) -{ - void *p = (void *) malloc (num); - if (!p) - lt_fatal ("Memory exhausted"); - - return p; -} - -char * -xstrdup (const char *string) -{ - return string ? strcpy ((char *) xmalloc (strlen (string) + 1), - string) : NULL; -} - -const char * -base_name (const char *name) -{ - const char *base; - -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - /* Skip over the disk name in MSDOS pathnames. */ - if (isalpha ((unsigned char) name[0]) && name[1] == ':') - name += 2; -#endif - - for (base = name; *name; name++) - if (IS_DIR_SEPARATOR (*name)) - base = name + 1; - return base; -} - -int -check_executable (const char *path) -{ - struct stat st; - - LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n", - path ? (*path ? path : "EMPTY!") : "NULL!")); - if ((!path) || (!*path)) - return 0; - - if ((stat (path, &st) >= 0) - && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) - return 1; - else - return 0; -} - -int -make_executable (const char *path) -{ - int rval = 0; - struct stat st; - - LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n", - path ? (*path ? path : "EMPTY!") : "NULL!")); - if ((!path) || (!*path)) - return 0; - - if (stat (path, &st) >= 0) - { - rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); - } - return rval; -} - -/* Searches for the full path of the wrapper. Returns - newly allocated full path name if found, NULL otherwise - Does not chase symlinks, even on platforms that support them. -*/ -char * -find_executable (const char *wrapper) -{ - int has_slash = 0; - const char *p; - const char *p_next; - /* static buffer for getcwd */ - char tmp[LT_PATHMAX + 1]; - int tmp_len; - char *concat_name; - - LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n", - wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!")); - - if ((wrapper == NULL) || (*wrapper == '\0')) - return NULL; - - /* Absolute path? */ -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - else - { -#endif - if (IS_DIR_SEPARATOR (wrapper[0])) - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - } -#endif - - for (p = wrapper; *p; p++) - if (*p == '/') - { - has_slash = 1; - break; - } - if (!has_slash) - { - /* no slashes; search PATH */ - const char *path = getenv ("PATH"); - if (path != NULL) - { - for (p = path; *p; p = p_next) - { - const char *q; - size_t p_len; - for (q = p; *q; q++) - if (IS_PATH_SEPARATOR (*q)) - break; - p_len = q - p; - p_next = (*q == '\0' ? q : q + 1); - if (p_len == 0) - { - /* empty path: current directory */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal ("getcwd failed"); - tmp_len = strlen (tmp); - concat_name = - XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - } - else - { - concat_name = - XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, p, p_len); - concat_name[p_len] = '/'; - strcpy (concat_name + p_len + 1, wrapper); - } - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - } - /* not found in PATH; assume curdir */ - } - /* Relative path | not found in path: prepend cwd */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal ("getcwd failed"); - tmp_len = strlen (tmp); - concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - return NULL; -} - -char * -chase_symlinks (const char *pathspec) -{ -#ifndef S_ISLNK - return xstrdup (pathspec); -#else - char buf[LT_PATHMAX]; - struct stat s; - char *tmp_pathspec = xstrdup (pathspec); - char *p; - int has_symlinks = 0; - while (strlen (tmp_pathspec) && !has_symlinks) - { - LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n", - tmp_pathspec)); - if (lstat (tmp_pathspec, &s) == 0) - { - if (S_ISLNK (s.st_mode) != 0) - { - has_symlinks = 1; - break; - } - - /* search backwards for last DIR_SEPARATOR */ - p = tmp_pathspec + strlen (tmp_pathspec) - 1; - while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - p--; - if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - { - /* no more DIR_SEPARATORS left */ - break; - } - *p = '\0'; - } - else - { - char *errstr = strerror (errno); - lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr); - } - } - XFREE (tmp_pathspec); - - if (!has_symlinks) - { - return xstrdup (pathspec); - } - - tmp_pathspec = realpath (pathspec, buf); - if (tmp_pathspec == 0) - { - lt_fatal ("Could not follow symlinks for %s", pathspec); - } - return xstrdup (tmp_pathspec); -#endif -} - -char * -strendzap (char *str, const char *pat) -{ - size_t len, patlen; - - assert (str != NULL); - assert (pat != NULL); - - len = strlen (str); - patlen = strlen (pat); - - if (patlen <= len) - { - str += len - patlen; - if (strcmp (str, pat) == 0) - *str = '\0'; - } - return str; -} - -static void -lt_error_core (int exit_status, const char *mode, - const char *message, va_list ap) -{ - fprintf (stderr, "%s: %s: ", program_name, mode); - vfprintf (stderr, message, ap); - fprintf (stderr, ".\n"); - - if (exit_status >= 0) - exit (exit_status); -} - -void -lt_fatal (const char *message, ...) -{ - va_list ap; - va_start (ap, message); - lt_error_core (EXIT_FAILURE, "FATAL", message, ap); - va_end (ap); -} - -void -lt_setenv (const char *name, const char *value) -{ - LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n", - (name ? name : ""), - (value ? value : ""))); - { -#ifdef HAVE_SETENV - /* always make a copy, for consistency with !HAVE_SETENV */ - char *str = xstrdup (value); - setenv (name, str, 1); -#else - int len = strlen (name) + 1 + strlen (value) + 1; - char *str = XMALLOC (char, len); - sprintf (str, "%s=%s", name, value); - if (putenv (str) != EXIT_SUCCESS) - { - XFREE (str); - } -#endif - } -} - -char * -lt_extend_str (const char *orig_value, const char *add, int to_end) -{ - char *new_value; - if (orig_value && *orig_value) - { - int orig_value_len = strlen (orig_value); - int add_len = strlen (add); - new_value = XMALLOC (char, add_len + orig_value_len + 1); - if (to_end) - { - strcpy (new_value, orig_value); - strcpy (new_value + orig_value_len, add); - } - else - { - strcpy (new_value, add); - strcpy (new_value + add_len, orig_value); - } - } - else - { - new_value = xstrdup (add); - } - return new_value; -} - -int -lt_split_name_value (const char *arg, char** name, char** value) -{ - const char *p; - int len; - if (!arg || !*arg) - return 1; - - p = strchr (arg, (int)'='); - - if (!p) - return 1; - - *value = xstrdup (++p); - - len = strlen (arg) - strlen (*value); - *name = XMALLOC (char, len); - strncpy (*name, arg, len-1); - (*name)[len - 1] = '\0'; - - return 0; -} - -void -lt_opt_process_env_set (const char *arg) -{ - char *name = NULL; - char *value = NULL; - - if (lt_split_name_value (arg, &name, &value) != 0) - { - XFREE (name); - XFREE (value); - lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg); - } - - lt_setenv (name, value); - XFREE (name); - XFREE (value); -} - -void -lt_opt_process_env_prepend (const char *arg) -{ - char *name = NULL; - char *value = NULL; - char *new_value = NULL; - - if (lt_split_name_value (arg, &name, &value) != 0) - { - XFREE (name); - XFREE (value); - lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg); - } - - new_value = lt_extend_str (getenv (name), value, 0); - lt_setenv (name, new_value); - XFREE (new_value); - XFREE (name); - XFREE (value); -} - -void -lt_opt_process_env_append (const char *arg) -{ - char *name = NULL; - char *value = NULL; - char *new_value = NULL; - - if (lt_split_name_value (arg, &name, &value) != 0) - { - XFREE (name); - XFREE (value); - lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg); - } - - new_value = lt_extend_str (getenv (name), value, 1); - lt_setenv (name, new_value); - XFREE (new_value); - XFREE (name); - XFREE (value); -} - -void -lt_update_exe_path (const char *name, const char *value) -{ - LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n", - (name ? name : ""), - (value ? value : ""))); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - /* some systems can't cope with a ':'-terminated path #' */ - int len = strlen (new_value); - while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) - { - new_value[len-1] = '\0'; - } - lt_setenv (name, new_value); - XFREE (new_value); - } -} - -void -lt_update_lib_path (const char *name, const char *value) -{ - LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n", - (name ? name : ""), - (value ? value : ""))); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - lt_setenv (name, new_value); - XFREE (new_value); - } -} - - -EOF -} -# end: func_emit_cwrapperexe_src - -# func_mode_link arg... -func_mode_link () -{ - $opt_debug - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - # It is impossible to link a dll without this setting, and - # we shouldn't force the makefile maintainer to figure out - # which system we are compiling for in order to pass an extra - # flag for every libtool invocation. - # allow_undefined=no - - # FIXME: Unfortunately, there are problems with the above when trying - # to make a dll which has undefined symbols, in which case not - # even a static library is built. For now, we need to specify - # -no-undefined on the libtool link line when we can be certain - # that all symbols are satisfied, otherwise we get a static library. - allow_undefined=yes - ;; - *) - allow_undefined=yes - ;; - esac - libtool_args=$nonopt - base_compile="$nonopt $@" - compile_command=$nonopt - finalize_command=$nonopt - - compile_rpath= - finalize_rpath= - compile_shlibpath= - finalize_shlibpath= - convenience= - old_convenience= - deplibs= - old_deplibs= - compiler_flags= - linker_flags= - dllsearchpath= - lib_search_path=`pwd` - inst_prefix_dir= - new_inherited_linker_flags= - - avoid_version=no - dlfiles= - dlprefiles= - dlself=no - export_dynamic=no - export_symbols= - export_symbols_regex= - generated= - libobjs= - ltlibs= - module=no - no_install=no - objs= - non_pic_objects= - precious_files_regex= - prefer_static_libs=no - preload=no - prev= - prevarg= - release= - rpath= - xrpath= - perm_rpath= - temp_rpath= - thread_safe=no - vinfo= - vinfo_number=no - weak_libs= - single_module="${wl}-single_module" - func_infer_tag $base_compile - - # We need to know -static, to get the right output filenames. - for arg - do - case $arg in - -shared) - test "$build_libtool_libs" != yes && \ - func_fatal_configuration "can not build a shared library" - build_old_libs=no - break - ;; - -all-static | -static | -static-libtool-libs) - case $arg in - -all-static) - if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then - func_warning "complete static linking is impossible in this configuration" - fi - if test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - -static) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=built - ;; - -static-libtool-libs) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - esac - build_libtool_libs=no - build_old_libs=yes - break - ;; - esac - done - - # See if our shared archives depend on static archives. - test -n "$old_archive_from_new_cmds" && build_old_libs=yes - - # Go through the arguments, transforming them on the way. - while test "$#" -gt 0; do - arg="$1" - shift - func_quote_for_eval "$arg" - qarg=$func_quote_for_eval_unquoted_result - func_append libtool_args " $func_quote_for_eval_result" - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case $prev in - output) - func_append compile_command " @OUTPUT@" - func_append finalize_command " @OUTPUT@" - ;; - esac - - case $prev in - dlfiles|dlprefiles) - if test "$preload" = no; then - # Add the symbol object into the linking commands. - func_append compile_command " @SYMFILE@" - func_append finalize_command " @SYMFILE@" - preload=yes - fi - case $arg in - *.la | *.lo) ;; # We handle these cases below. - force) - if test "$dlself" = no; then - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - self) - if test "$prev" = dlprefiles; then - dlself=yes - elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then - dlself=yes - else - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - *) - if test "$prev" = dlfiles; then - dlfiles="$dlfiles $arg" - else - dlprefiles="$dlprefiles $arg" - fi - prev= - continue - ;; - esac - ;; - expsyms) - export_symbols="$arg" - test -f "$arg" \ - || func_fatal_error "symbol file \`$arg' does not exist" - prev= - continue - ;; - expsyms_regex) - export_symbols_regex="$arg" - prev= - continue - ;; - framework) - case $host in - *-*-darwin*) - case "$deplibs " in - *" $qarg.ltframework "*) ;; - *) deplibs="$deplibs $qarg.ltframework" # this is fixed later - ;; - esac - ;; - esac - prev= - continue - ;; - inst_prefix) - inst_prefix_dir="$arg" - prev= - continue - ;; - objectlist) - if test -f "$arg"; then - save_arg=$arg - moreargs= - for fil in `cat "$save_arg"` - do -# moreargs="$moreargs $fil" - arg=$fil - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - dlfiles="$dlfiles $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - dlprefiles="$dlprefiles $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "\`$arg' is not a valid libtool object" - fi - fi - done - else - func_fatal_error "link input file \`$arg' does not exist" - fi - arg=$save_arg - prev= - continue - ;; - precious_regex) - precious_files_regex="$arg" - prev= - continue - ;; - release) - release="-$arg" - prev= - continue - ;; - rpath | xrpath) - # We need an absolute path. - case $arg in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - if test "$prev" = rpath; then - case "$rpath " in - *" $arg "*) ;; - *) rpath="$rpath $arg" ;; - esac - else - case "$xrpath " in - *" $arg "*) ;; - *) xrpath="$xrpath $arg" ;; - esac - fi - prev= - continue - ;; - shrext) - shrext_cmds="$arg" - prev= - continue - ;; - weak) - weak_libs="$weak_libs $arg" - prev= - continue - ;; - xcclinker) - linker_flags="$linker_flags $qarg" - compiler_flags="$compiler_flags $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xcompiler) - compiler_flags="$compiler_flags $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xlinker) - linker_flags="$linker_flags $qarg" - compiler_flags="$compiler_flags $wl$qarg" - prev= - func_append compile_command " $wl$qarg" - func_append finalize_command " $wl$qarg" - continue - ;; - *) - eval "$prev=\"\$arg\"" - prev= - continue - ;; - esac - fi # test -n "$prev" - - prevarg="$arg" - - case $arg in - -all-static) - if test -n "$link_static_flag"; then - # See comment for -static flag below, for more details. - func_append compile_command " $link_static_flag" - func_append finalize_command " $link_static_flag" - fi - continue - ;; - - -allow-undefined) - # FIXME: remove this flag sometime in the future. - func_fatal_error "\`-allow-undefined' must not be used because it is the default" - ;; - - -avoid-version) - avoid_version=yes - continue - ;; - - -dlopen) - prev=dlfiles - continue - ;; - - -dlpreopen) - prev=dlprefiles - continue - ;; - - -export-dynamic) - export_dynamic=yes - continue - ;; - - -export-symbols | -export-symbols-regex) - if test -n "$export_symbols" || test -n "$export_symbols_regex"; then - func_fatal_error "more than one -exported-symbols argument is not allowed" - fi - if test "X$arg" = "X-export-symbols"; then - prev=expsyms - else - prev=expsyms_regex - fi - continue - ;; - - -framework) - prev=framework - continue - ;; - - -inst-prefix-dir) - prev=inst_prefix - continue - ;; - - # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* - # so, if we see these flags be careful not to treat them like -L - -L[A-Z][A-Z]*:*) - case $with_gcc/$host in - no/*-*-irix* | /*-*-irix*) - func_append compile_command " $arg" - func_append finalize_command " $arg" - ;; - esac - continue - ;; - - -L*) - func_stripname '-L' '' "$arg" - dir=$func_stripname_result - if test -z "$dir"; then - if test "$#" -gt 0; then - func_fatal_error "require no space between \`-L' and \`$1'" - else - func_fatal_error "need path for \`-L' option" - fi - fi - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - absdir=`cd "$dir" && pwd` - test -z "$absdir" && \ - func_fatal_error "cannot determine absolute directory name of \`$dir'" - dir="$absdir" - ;; - esac - case "$deplibs " in - *" -L$dir "*) ;; - *) - deplibs="$deplibs -L$dir" - lib_search_path="$lib_search_path $dir" - ;; - esac - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$dir:"*) ;; - ::) dllsearchpath=$dir;; - *) dllsearchpath="$dllsearchpath:$dir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) dllsearchpath="$dllsearchpath:$testbindir";; - esac - ;; - esac - continue - ;; - - -l*) - if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*) - # These systems don't actually have a C or math library (as such) - continue - ;; - *-*-os2*) - # These systems don't actually have a C library (as such) - test "X$arg" = "X-lc" && continue - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - test "X$arg" = "X-lc" && continue - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C and math libraries are in the System framework - deplibs="$deplibs System.ltframework" - continue - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - test "X$arg" = "X-lc" && continue - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - test "X$arg" = "X-lc" && continue - ;; - esac - elif test "X$arg" = "X-lc_r"; then - case $host in - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc_r directly, use -pthread flag. - continue - ;; - esac - fi - deplibs="$deplibs $arg" - continue - ;; - - -module) - module=yes - continue - ;; - - # Tru64 UNIX uses -model [arg] to determine the layout of C++ - # classes, name mangling, and exception handling. - # Darwin uses the -arch flag to determine output architecture. - -model|-arch|-isysroot) - compiler_flags="$compiler_flags $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - prev=xcompiler - continue - ;; - - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) - compiler_flags="$compiler_flags $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - case "$new_inherited_linker_flags " in - *" $arg "*) ;; - * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; - esac - continue - ;; - - -multi_module) - single_module="${wl}-multi_module" - continue - ;; - - -no-fast-install) - fast_install=no - continue - ;; - - -no-install) - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) - # The PATH hackery in wrapper scripts is required on Windows - # and Darwin in order for the loader to find any dlls it needs. - func_warning "\`-no-install' is ignored for $host" - func_warning "assuming \`-no-fast-install' instead" - fast_install=no - ;; - *) no_install=yes ;; - esac - continue - ;; - - -no-undefined) - allow_undefined=no - continue - ;; - - -objectlist) - prev=objectlist - continue - ;; - - -o) prev=output ;; - - -precious-files-regex) - prev=precious_regex - continue - ;; - - -release) - prev=release - continue - ;; - - -rpath) - prev=rpath - continue - ;; - - -R) - prev=xrpath - continue - ;; - - -R*) - func_stripname '-R' '' "$arg" - dir=$func_stripname_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - case "$xrpath " in - *" $dir "*) ;; - *) xrpath="$xrpath $dir" ;; - esac - continue - ;; - - -shared) - # The effects of -shared are defined in a previous loop. - continue - ;; - - -shrext) - prev=shrext - continue - ;; - - -static | -static-libtool-libs) - # The effects of -static are defined in a previous loop. - # We used to do the same as -all-static on platforms that - # didn't have a PIC flag, but the assumption that the effects - # would be equivalent was wrong. It would break on at least - # Digital Unix and AIX. - continue - ;; - - -thread-safe) - thread_safe=yes - continue - ;; - - -version-info) - prev=vinfo - continue - ;; - - -version-number) - prev=vinfo - vinfo_number=yes - continue - ;; - - -weak) - prev=weak - continue - ;; - - -Wc,*) - func_stripname '-Wc,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - func_quote_for_eval "$flag" - arg="$arg $wl$func_quote_for_eval_result" - compiler_flags="$compiler_flags $func_quote_for_eval_result" - done - IFS="$save_ifs" - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Wl,*) - func_stripname '-Wl,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - func_quote_for_eval "$flag" - arg="$arg $wl$func_quote_for_eval_result" - compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" - linker_flags="$linker_flags $func_quote_for_eval_result" - done - IFS="$save_ifs" - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Xcompiler) - prev=xcompiler - continue - ;; - - -Xlinker) - prev=xlinker - continue - ;; - - -XCClinker) - prev=xcclinker - continue - ;; - - # -msg_* for osf cc - -msg_*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - - # -64, -mips[0-9] enable 64-bit mode on the SGI compiler - # -r[0-9][0-9]* specifies the processor on the SGI compiler - # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler - # +DA*, +DD* enable 64-bit mode on the HP compiler - # -q* pass through compiler args for the IBM compiler - # -m*, -t[45]*, -txscale* pass through architecture-specific - # compiler args for GCC - # -F/path gives path to uninstalled frameworks, gcc on darwin - # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC - # @file GCC response files - -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ - -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - func_append compile_command " $arg" - func_append finalize_command " $arg" - compiler_flags="$compiler_flags $arg" - continue - ;; - - # Some other compiler flag. - -* | +*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - - *.$objext) - # A standard object. - objs="$objs $arg" - ;; - - *.lo) - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - dlfiles="$dlfiles $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - dlprefiles="$dlprefiles $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "\`$arg' is not a valid libtool object" - fi - fi - ;; - - *.$libext) - # An archive. - deplibs="$deplibs $arg" - old_deplibs="$old_deplibs $arg" - continue - ;; - - *.la) - # A libtool-controlled library. - - if test "$prev" = dlfiles; then - # This library was specified with -dlopen. - dlfiles="$dlfiles $arg" - prev= - elif test "$prev" = dlprefiles; then - # The library was specified with -dlpreopen. - dlprefiles="$dlprefiles $arg" - prev= - else - deplibs="$deplibs $arg" - fi - continue - ;; - - # Some other compiler argument. - *) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - esac # arg - - # Now actually substitute the argument into the commands. - if test -n "$arg"; then - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - done # argument parsing loop - - test -n "$prev" && \ - func_fatal_help "the \`$prevarg' option requires an argument" - - if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then - eval arg=\"$export_dynamic_flag_spec\" - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - - oldlibs= - # calculate the name of the file, without its directory - func_basename "$output" - outputname="$func_basename_result" - libobjs_save="$libobjs" - - if test -n "$shlibpath_var"; then - # get the directories listed in $shlibpath_var - eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` - else - shlib_search_path= - fi - eval sys_lib_search_path=\"$sys_lib_search_path_spec\" - eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" - - func_dirname "$output" "/" "" - output_objdir="$func_dirname_result$objdir" - # Create the object directory. - func_mkdir_p "$output_objdir" - - # Determine the type of output - case $output in - "") - func_fatal_help "you must specify an output file" - ;; - *.$libext) linkmode=oldlib ;; - *.lo | *.$objext) linkmode=obj ;; - *.la) linkmode=lib ;; - *) linkmode=prog ;; # Anything else should be a program. - esac - - specialdeplibs= - - libs= - # Find all interdependent deplibs by searching for libraries - # that are linked more than once (e.g. -la -lb -la) - for deplib in $deplibs; do - if $opt_duplicate_deps ; then - case "$libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - libs="$libs $deplib" - done - - if test "$linkmode" = lib; then - libs="$predeps $libs $compiler_lib_search_path $postdeps" - - # Compute libraries that are listed more than once in $predeps - # $postdeps and mark them as special (i.e., whose duplicates are - # not to be eliminated). - pre_post_deps= - if $opt_duplicate_compiler_generated_deps; then - for pre_post_dep in $predeps $postdeps; do - case "$pre_post_deps " in - *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; - esac - pre_post_deps="$pre_post_deps $pre_post_dep" - done - fi - pre_post_deps= - fi - - deplibs= - newdependency_libs= - newlib_search_path= - need_relink=no # whether we're linking any uninstalled libtool libraries - notinst_deplibs= # not-installed libtool libraries - notinst_path= # paths that contain not-installed libtool libraries - - case $linkmode in - lib) - passes="conv dlpreopen link" - for file in $dlfiles $dlprefiles; do - case $file in - *.la) ;; - *) - func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" - ;; - esac - done - ;; - prog) - compile_deplibs= - finalize_deplibs= - alldeplibs=no - newdlfiles= - newdlprefiles= - passes="conv scan dlopen dlpreopen link" - ;; - *) passes="conv" - ;; - esac - - for pass in $passes; do - # The preopen pass in lib mode reverses $deplibs; put it back here - # so that -L comes before libs that need it for instance... - if test "$linkmode,$pass" = "lib,link"; then - ## FIXME: Find the place where the list is rebuilt in the wrong - ## order, and fix it there properly - tmp_deplibs= - for deplib in $deplibs; do - tmp_deplibs="$deplib $tmp_deplibs" - done - deplibs="$tmp_deplibs" - fi - - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan"; then - libs="$deplibs" - deplibs= - fi - if test "$linkmode" = prog; then - case $pass in - dlopen) libs="$dlfiles" ;; - dlpreopen) libs="$dlprefiles" ;; - link) - libs="$deplibs %DEPLIBS%" - test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" - ;; - esac - fi - if test "$linkmode,$pass" = "lib,dlpreopen"; then - # Collect and forward deplibs of preopened libtool libs - for lib in $dlprefiles; do - # Ignore non-libtool-libs - dependency_libs= - case $lib in - *.la) func_source "$lib" ;; - esac - - # Collect preopened libtool deplibs, except any this library - # has declared as weak libs - for deplib in $dependency_libs; do - deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` - case " $weak_libs " in - *" $deplib_base "*) ;; - *) deplibs="$deplibs $deplib" ;; - esac - done - done - libs="$dlprefiles" - fi - if test "$pass" = dlopen; then - # Collect dlpreopened libraries - save_deplibs="$deplibs" - deplibs= - fi - - for deplib in $libs; do - lib= - found=no - case $deplib in - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - compiler_flags="$compiler_flags $deplib" - if test "$linkmode" = lib ; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; - esac - fi - fi - continue - ;; - -l*) - if test "$linkmode" != lib && test "$linkmode" != prog; then - func_warning "\`-l' is ignored for archives/objects" - continue - fi - func_stripname '-l' '' "$deplib" - name=$func_stripname_result - if test "$linkmode" = lib; then - searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" - else - searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" - fi - for searchdir in $searchdirs; do - for search_ext in .la $std_shrext .so .a; do - # Search the libtool library - lib="$searchdir/lib${name}${search_ext}" - if test -f "$lib"; then - if test "$search_ext" = ".la"; then - found=yes - else - found=no - fi - break 2 - fi - done - done - if test "$found" != yes; then - # deplib doesn't seem to be a libtool library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - else # deplib is a libtool library - # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, - # We need to do some special things here, and not later. - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $deplib "*) - if func_lalib_p "$lib"; then - library_names= - old_library= - func_source "$lib" - for l in $old_library $library_names; do - ll="$l" - done - if test "X$ll" = "X$old_library" ; then # only static version available - found=no - func_dirname "$lib" "" "." - ladir="$func_dirname_result" - lib=$ladir/$old_library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi - fi - ;; - *) ;; - esac - fi - fi - ;; # -l - *.ltframework) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - if test "$linkmode" = lib ; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; - esac - fi - fi - continue - ;; - -L*) - case $linkmode in - lib) - deplibs="$deplib $deplibs" - test "$pass" = conv && continue - newdependency_libs="$deplib $newdependency_libs" - func_stripname '-L' '' "$deplib" - newlib_search_path="$newlib_search_path $func_stripname_result" - ;; - prog) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - if test "$pass" = scan; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - func_stripname '-L' '' "$deplib" - newlib_search_path="$newlib_search_path $func_stripname_result" - ;; - *) - func_warning "\`-L' is ignored for archives/objects" - ;; - esac # linkmode - continue - ;; # -L - -R*) - if test "$pass" = link; then - func_stripname '-R' '' "$deplib" - dir=$func_stripname_result - # Make sure the xrpath contains only unique directories. - case "$xrpath " in - *" $dir "*) ;; - *) xrpath="$xrpath $dir" ;; - esac - fi - deplibs="$deplib $deplibs" - continue - ;; - *.la) lib="$deplib" ;; - *.$libext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - case $linkmode in - lib) - # Linking convenience modules into shared libraries is allowed, - # but linking other static libraries is non-portable. - case " $dlpreconveniencelibs " in - *" $deplib "*) ;; - *) - valid_a_lib=no - case $deplibs_check_method in - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \ - | $EGREP "$match_pattern_regex" > /dev/null; then - valid_a_lib=yes - fi - ;; - pass_all) - valid_a_lib=yes - ;; - esac - if test "$valid_a_lib" != yes; then - $ECHO - $ECHO "*** Warning: Trying to link with static lib archive $deplib." - $ECHO "*** I have the capability to make that library automatically link in when" - $ECHO "*** you link to this library. But I can only do this if you have a" - $ECHO "*** shared version of the library, which you do not appear to have" - $ECHO "*** because the file extensions .$libext of this argument makes me believe" - $ECHO "*** that it is just a static archive that I should not use here." - else - $ECHO - $ECHO "*** Warning: Linking the shared library $output against the" - $ECHO "*** static library $deplib is not portable!" - deplibs="$deplib $deplibs" - fi - ;; - esac - continue - ;; - prog) - if test "$pass" != link; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - continue - ;; - esac # linkmode - ;; # *.$libext - *.lo | *.$objext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - elif test "$linkmode" = prog; then - if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then - # If there is no dlopen support or we're linking statically, - # we need to preload. - newdlprefiles="$newdlprefiles $deplib" - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - newdlfiles="$newdlfiles $deplib" - fi - fi - continue - ;; - %DEPLIBS%) - alldeplibs=yes - continue - ;; - esac # case $deplib - - if test "$found" = yes || test -f "$lib"; then : - else - func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" - fi - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$lib" \ - || func_fatal_error "\`$lib' is not a valid libtool archive" - - func_dirname "$lib" "" "." - ladir="$func_dirname_result" - - dlname= - dlopen= - dlpreopen= - libdir= - library_names= - old_library= - inherited_linker_flags= - # If the library was installed with an old release of libtool, - # it will not redefine variables installed, or shouldnotlink - installed=yes - shouldnotlink=no - avoidtemprpath= - - - # Read the .la file - func_source "$lib" - - # Convert "-framework foo" to "foo.ltframework" - if test -n "$inherited_linker_flags"; then - tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'` - for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do - case " $new_inherited_linker_flags " in - *" $tmp_inherited_linker_flag "*) ;; - *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; - esac - done - fi - dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan" || - { test "$linkmode" != prog && test "$linkmode" != lib; }; then - test -n "$dlopen" && dlfiles="$dlfiles $dlopen" - test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" - fi - - if test "$pass" = conv; then - # Only check for convenience libraries - deplibs="$lib $deplibs" - if test -z "$libdir"; then - if test -z "$old_library"; then - func_fatal_error "cannot find name of link library for \`$lib'" - fi - # It is a libtool convenience library, so add in its objects. - convenience="$convenience $ladir/$objdir/$old_library" - old_convenience="$old_convenience $ladir/$objdir/$old_library" - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" - if $opt_duplicate_deps ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done - elif test "$linkmode" != prog && test "$linkmode" != lib; then - func_fatal_error "\`$lib' is not a convenience library" - fi - continue - fi # $pass = conv - - - # Get the name of the library we link against. - linklib= - for l in $old_library $library_names; do - linklib="$l" - done - if test -z "$linklib"; then - func_fatal_error "cannot find name of link library for \`$lib'" - fi - - # This library was specified with -dlopen. - if test "$pass" = dlopen; then - if test -z "$libdir"; then - func_fatal_error "cannot -dlopen a convenience library: \`$lib'" - fi - if test -z "$dlname" || - test "$dlopen_support" != yes || - test "$build_libtool_libs" = no; then - # If there is no dlname, no dlopen support or we're linking - # statically, we need to preload. We also need to preload any - # dependent libraries so libltdl's deplib preloader doesn't - # bomb out in the load deplibs phase. - dlprefiles="$dlprefiles $lib $dependency_libs" - else - newdlfiles="$newdlfiles $lib" - fi - continue - fi # $pass = dlopen - - # We need an absolute path. - case $ladir in - [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; - *) - abs_ladir=`cd "$ladir" && pwd` - if test -z "$abs_ladir"; then - func_warning "cannot determine absolute directory name of \`$ladir'" - func_warning "passing it literally to the linker, although it might fail" - abs_ladir="$ladir" - fi - ;; - esac - func_basename "$lib" - laname="$func_basename_result" - - # Find the relevant object directory and library name. - if test "X$installed" = Xyes; then - if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then - func_warning "library \`$lib' was moved." - dir="$ladir" - absdir="$abs_ladir" - libdir="$abs_ladir" - else - dir="$libdir" - absdir="$libdir" - fi - test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes - else - if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then - dir="$ladir" - absdir="$abs_ladir" - # Remove this search path later - notinst_path="$notinst_path $abs_ladir" - else - dir="$ladir/$objdir" - absdir="$abs_ladir/$objdir" - # Remove this search path later - notinst_path="$notinst_path $abs_ladir" - fi - fi # $installed = yes - func_stripname 'lib' '.la' "$laname" - name=$func_stripname_result - - # This library was specified with -dlpreopen. - if test "$pass" = dlpreopen; then - if test -z "$libdir" && test "$linkmode" = prog; then - func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" - fi - # Prefer using a static library (so that no silly _DYNAMIC symbols - # are required to link). - if test -n "$old_library"; then - newdlprefiles="$newdlprefiles $dir/$old_library" - # Keep a list of preopened convenience libraries to check - # that they are being used correctly in the link pass. - test -z "$libdir" && \ - dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" - # Otherwise, use the dlname, so that lt_dlopen finds it. - elif test -n "$dlname"; then - newdlprefiles="$newdlprefiles $dir/$dlname" - else - newdlprefiles="$newdlprefiles $dir/$linklib" - fi - fi # $pass = dlpreopen - - if test -z "$libdir"; then - # Link the convenience library - if test "$linkmode" = lib; then - deplibs="$dir/$old_library $deplibs" - elif test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$dir/$old_library $compile_deplibs" - finalize_deplibs="$dir/$old_library $finalize_deplibs" - else - deplibs="$lib $deplibs" # used for prog,scan pass - fi - continue - fi - - - if test "$linkmode" = prog && test "$pass" != link; then - newlib_search_path="$newlib_search_path $ladir" - deplibs="$lib $deplibs" - - linkalldeplibs=no - if test "$link_all_deplibs" != no || test -z "$library_names" || - test "$build_libtool_libs" = no; then - linkalldeplibs=yes - fi - - tmp_libs= - for deplib in $dependency_libs; do - case $deplib in - -L*) func_stripname '-L' '' "$deplib" - newlib_search_path="$newlib_search_path $func_stripname_result" - ;; - esac - # Need to link against all dependency_libs? - if test "$linkalldeplibs" = yes; then - deplibs="$deplib $deplibs" - else - # Need to hardcode shared library paths - # or/and link against static libraries - newdependency_libs="$deplib $newdependency_libs" - fi - if $opt_duplicate_deps ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done # for deplib - continue - fi # $linkmode = prog... - - if test "$linkmode,$pass" = "prog,link"; then - if test -n "$library_names" && - { { test "$prefer_static_libs" = no || - test "$prefer_static_libs,$installed" = "built,yes"; } || - test -z "$old_library"; }; then - # We need to hardcode the library path - if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then - # Make sure the rpath contains only unique directories. - case "$temp_rpath:" in - *"$absdir:"*) ;; - *) temp_rpath="$temp_rpath$absdir:" ;; - esac - fi - - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) compile_rpath="$compile_rpath $absdir" - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" - esac - ;; - esac - fi # $linkmode,$pass = prog,link... - - if test "$alldeplibs" = yes && - { test "$deplibs_check_method" = pass_all || - { test "$build_libtool_libs" = yes && - test -n "$library_names"; }; }; then - # We only need to search for static libraries - continue - fi - fi - - link_static=no # Whether the deplib will be linked statically - use_static_libs=$prefer_static_libs - if test "$use_static_libs" = built && test "$installed" = yes; then - use_static_libs=no - fi - if test -n "$library_names" && - { test "$use_static_libs" = no || test -z "$old_library"; }; then - case $host in - *cygwin* | *mingw* | *cegcc*) - # No point in relinking DLLs because paths are not encoded - notinst_deplibs="$notinst_deplibs $lib" - need_relink=no - ;; - *) - if test "$installed" = no; then - notinst_deplibs="$notinst_deplibs $lib" - need_relink=yes - fi - ;; - esac - # This is a shared library - - # Warn about portability, can't link against -module's on some - # systems (darwin). Don't bleat about dlopened modules though! - dlopenmodule="" - for dlpremoduletest in $dlprefiles; do - if test "X$dlpremoduletest" = "X$lib"; then - dlopenmodule="$dlpremoduletest" - break - fi - done - if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then - $ECHO - if test "$linkmode" = prog; then - $ECHO "*** Warning: Linking the executable $output against the loadable module" - else - $ECHO "*** Warning: Linking the shared library $output against the loadable module" - fi - $ECHO "*** $linklib is not portable!" - fi - if test "$linkmode" = lib && - test "$hardcode_into_libs" = yes; then - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) compile_rpath="$compile_rpath $absdir" - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" - esac - ;; - esac - fi - - if test -n "$old_archive_from_expsyms_cmds"; then - # figure out the soname - set dummy $library_names - shift - realname="$1" - shift - libname=`eval "\\$ECHO \"$libname_spec\""` - # use dlname if we got it. it's perfectly good, no? - if test -n "$dlname"; then - soname="$dlname" - elif test -n "$soname_spec"; then - # bleh windows - case $host in - *cygwin* | mingw* | *cegcc*) - func_arith $current - $age - major=$func_arith_result - versuffix="-$major" - ;; - esac - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - - # Make a new name for the extract_expsyms_cmds to use - soroot="$soname" - func_basename "$soroot" - soname="$func_basename_result" - func_stripname 'lib' '.dll' "$soname" - newlib=libimp-$func_stripname_result.a - - # If the library has no export list, then create one now - if test -f "$output_objdir/$soname-def"; then : - else - func_verbose "extracting exported symbol list from \`$soname'" - func_execute_cmds "$extract_expsyms_cmds" 'exit $?' - fi - - # Create $newlib - if test -f "$output_objdir/$newlib"; then :; else - func_verbose "generating import library for \`$soname'" - func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' - fi - # make sure the library variables are pointing to the new library - dir=$output_objdir - linklib=$newlib - fi # test -n "$old_archive_from_expsyms_cmds" - - if test "$linkmode" = prog || test "$mode" != relink; then - add_shlibpath= - add_dir= - add= - lib_linked=yes - case $hardcode_action in - immediate | unsupported) - if test "$hardcode_direct" = no; then - add="$dir/$linklib" - case $host in - *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; - *-*-sysv4*uw2*) add_dir="-L$dir" ;; - *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ - *-*-unixware7*) add_dir="-L$dir" ;; - *-*-darwin* ) - # if the lib is a (non-dlopened) module then we can not - # link against it, someone is ignoring the earlier warnings - if /usr/bin/file -L $add 2> /dev/null | - $GREP ": [^:]* bundle" >/dev/null ; then - if test "X$dlopenmodule" != "X$lib"; then - $ECHO "*** Warning: lib $linklib is a module, not a shared library" - if test -z "$old_library" ; then - $ECHO - $ECHO "*** And there doesn't seem to be a static archive available" - $ECHO "*** The link will probably fail, sorry" - else - add="$dir/$old_library" - fi - elif test -n "$old_library"; then - add="$dir/$old_library" - fi - fi - esac - elif test "$hardcode_minus_L" = no; then - case $host in - *-*-sunos*) add_shlibpath="$dir" ;; - esac - add_dir="-L$dir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = no; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - relink) - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$dir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$dir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - add_dir="$add_dir -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - *) lib_linked=no ;; - esac - - if test "$lib_linked" != yes; then - func_fatal_configuration "unsupported hardcode properties" - fi - - if test -n "$add_shlibpath"; then - case :$compile_shlibpath: in - *":$add_shlibpath:"*) ;; - *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; - esac - fi - if test "$linkmode" = prog; then - test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" - test -n "$add" && compile_deplibs="$add $compile_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - if test "$hardcode_direct" != yes && - test "$hardcode_minus_L" != yes && - test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; - esac - fi - fi - fi - - if test "$linkmode" = prog || test "$mode" = relink; then - add_shlibpath= - add_dir= - add= - # Finalize command for both is simple: just hardcode it. - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$libdir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$libdir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; - esac - add="-l$name" - elif test "$hardcode_automatic" = yes; then - if test -n "$inst_prefix_dir" && - test -f "$inst_prefix_dir$libdir/$linklib" ; then - add="$inst_prefix_dir$libdir/$linklib" - else - add="$libdir/$linklib" - fi - else - # We cannot seem to hardcode it, guess we'll fake it. - add_dir="-L$libdir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - add_dir="$add_dir -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - fi - - if test "$linkmode" = prog; then - test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" - test -n "$add" && finalize_deplibs="$add $finalize_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - fi - fi - elif test "$linkmode" = prog; then - # Here we assume that one of hardcode_direct or hardcode_minus_L - # is not unsupported. This is valid on all known static and - # shared platforms. - if test "$hardcode_direct" != unsupported; then - test -n "$old_library" && linklib="$old_library" - compile_deplibs="$dir/$linklib $compile_deplibs" - finalize_deplibs="$dir/$linklib $finalize_deplibs" - else - compile_deplibs="-l$name -L$dir $compile_deplibs" - finalize_deplibs="-l$name -L$dir $finalize_deplibs" - fi - elif test "$build_libtool_libs" = yes; then - # Not a shared library - if test "$deplibs_check_method" != pass_all; then - # We're trying link a shared library against a static one - # but the system doesn't support it. - - # Just print a warning and add the library to dependency_libs so - # that the program can be linked against the static library. - $ECHO - $ECHO "*** Warning: This system can not link to static lib archive $lib." - $ECHO "*** I have the capability to make that library automatically link in when" - $ECHO "*** you link to this library. But I can only do this if you have a" - $ECHO "*** shared version of the library, which you do not appear to have." - if test "$module" = yes; then - $ECHO "*** But as you try to build a module library, libtool will still create " - $ECHO "*** a static module, that should work as long as the dlopening application" - $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime." - if test -z "$global_symbol_pipe"; then - $ECHO - $ECHO "*** However, this would only work if libtool was able to extract symbol" - $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" - $ECHO "*** not find such a program. So, this module is probably useless." - $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - else - deplibs="$dir/$old_library $deplibs" - link_static=yes - fi - fi # link shared/static library? - - if test "$linkmode" = lib; then - if test -n "$dependency_libs" && - { test "$hardcode_into_libs" != yes || - test "$build_old_libs" = yes || - test "$link_static" = yes; }; then - # Extract -R from dependency_libs - temp_deplibs= - for libdir in $dependency_libs; do - case $libdir in - -R*) func_stripname '-R' '' "$libdir" - temp_xrpath=$func_stripname_result - case " $xrpath " in - *" $temp_xrpath "*) ;; - *) xrpath="$xrpath $temp_xrpath";; - esac;; - *) temp_deplibs="$temp_deplibs $libdir";; - esac - done - dependency_libs="$temp_deplibs" - fi - - newlib_search_path="$newlib_search_path $absdir" - # Link against this library - test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" - # ... and its dependency_libs - tmp_libs= - for deplib in $dependency_libs; do - newdependency_libs="$deplib $newdependency_libs" - if $opt_duplicate_deps ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done - - if test "$link_all_deplibs" != no; then - # Add the search paths of all dependency libraries - for deplib in $dependency_libs; do - path= - case $deplib in - -L*) path="$deplib" ;; - *.la) - func_dirname "$deplib" "" "." - dir="$func_dirname_result" - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; - *) - absdir=`cd "$dir" && pwd` - if test -z "$absdir"; then - func_warning "cannot determine absolute directory name of \`$dir'" - absdir="$dir" - fi - ;; - esac - if $GREP "^installed=no" $deplib > /dev/null; then - case $host in - *-*-darwin*) - depdepl= - eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` - if test -n "$deplibrary_names" ; then - for tmp in $deplibrary_names ; do - depdepl=$tmp - done - if test -f "$absdir/$objdir/$depdepl" ; then - depdepl="$absdir/$objdir/$depdepl" - darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - if test -z "$darwin_install_name"; then - darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - fi - compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" - linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" - path= - fi - fi - ;; - *) - path="-L$absdir/$objdir" - ;; - esac - else - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" - test "$absdir" != "$libdir" && \ - func_warning "\`$deplib' seems to be moved" - - path="-L$absdir" - fi - ;; - esac - case " $deplibs " in - *" $path "*) ;; - *) deplibs="$path $deplibs" ;; - esac - done - fi # link_all_deplibs != no - fi # linkmode = lib - done # for deplib in $libs - if test "$pass" = link; then - if test "$linkmode" = "prog"; then - compile_deplibs="$new_inherited_linker_flags $compile_deplibs" - finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" - else - compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - fi - fi - dependency_libs="$newdependency_libs" - if test "$pass" = dlpreopen; then - # Link the dlpreopened libraries before other libraries - for deplib in $save_deplibs; do - deplibs="$deplib $deplibs" - done - fi - if test "$pass" != dlopen; then - if test "$pass" != conv; then - # Make sure lib_search_path contains only unique directories. - lib_search_path= - for dir in $newlib_search_path; do - case "$lib_search_path " in - *" $dir "*) ;; - *) lib_search_path="$lib_search_path $dir" ;; - esac - done - newlib_search_path= - fi - - if test "$linkmode,$pass" != "prog,link"; then - vars="deplibs" - else - vars="compile_deplibs finalize_deplibs" - fi - for var in $vars dependency_libs; do - # Add libraries to $var in reverse order - eval tmp_libs=\"\$$var\" - new_libs= - for deplib in $tmp_libs; do - # FIXME: Pedantically, this is the right thing to do, so - # that some nasty dependency loop isn't accidentally - # broken: - #new_libs="$deplib $new_libs" - # Pragmatically, this seems to cause very few problems in - # practice: - case $deplib in - -L*) new_libs="$deplib $new_libs" ;; - -R*) ;; - *) - # And here is the reason: when a library appears more - # than once as an explicit dependence of a library, or - # is implicitly linked in more than once by the - # compiler, it is considered special, and multiple - # occurrences thereof are not removed. Compare this - # with having the same library being listed as a - # dependency of multiple other libraries: in this case, - # we know (pedantically, we assume) the library does not - # need to be listed more than once, so we keep only the - # last copy. This is not always right, but it is rare - # enough that we require users that really mean to play - # such unportable linking tricks to link the library - # using -Wl,-lname, so that libtool does not consider it - # for duplicate removal. - case " $specialdeplibs " in - *" $deplib "*) new_libs="$deplib $new_libs" ;; - *) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$deplib $new_libs" ;; - esac - ;; - esac - ;; - esac - done - tmp_libs= - for deplib in $new_libs; do - case $deplib in - -L*) - case " $tmp_libs " in - *" $deplib "*) ;; - *) tmp_libs="$tmp_libs $deplib" ;; - esac - ;; - *) tmp_libs="$tmp_libs $deplib" ;; - esac - done - eval $var=\"$tmp_libs\" - done # for var - fi - # Last step: remove runtime libs from dependency_libs - # (they stay in deplibs) - tmp_libs= - for i in $dependency_libs ; do - case " $predeps $postdeps $compiler_lib_search_path " in - *" $i "*) - i="" - ;; - esac - if test -n "$i" ; then - tmp_libs="$tmp_libs $i" - fi - done - dependency_libs=$tmp_libs - done # for pass - if test "$linkmode" = prog; then - dlfiles="$newdlfiles" - fi - if test "$linkmode" = prog || test "$linkmode" = lib; then - dlprefiles="$newdlprefiles" - fi - - case $linkmode in - oldlib) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for archives" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for archives" ;; - esac - - test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for archives" - - test -n "$xrpath" && \ - func_warning "\`-R' is ignored for archives" - - test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for archives" - - test -n "$release" && \ - func_warning "\`-release' is ignored for archives" - - test -n "$export_symbols$export_symbols_regex" && \ - func_warning "\`-export-symbols' is ignored for archives" - - # Now set the variables for building old libraries. - build_libtool_libs=no - oldlibs="$output" - objs="$objs$old_deplibs" - ;; - - lib) - # Make sure we only generate libraries of the form `libNAME.la'. - case $outputname in - lib*) - func_stripname 'lib' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - ;; - *) - test "$module" = no && \ - func_fatal_help "libtool library \`$output' must begin with \`lib'" - - if test "$need_lib_prefix" != no; then - # Add the "lib" prefix for modules if required - func_stripname '' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - else - func_stripname '' '.la' "$outputname" - libname=$func_stripname_result - fi - ;; - esac - - if test -n "$objs"; then - if test "$deplibs_check_method" != pass_all; then - func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" - else - $ECHO - $ECHO "*** Warning: Linking the shared library $output against the non-libtool" - $ECHO "*** objects $objs is not portable!" - libobjs="$libobjs $objs" - fi - fi - - test "$dlself" != no && \ - func_warning "\`-dlopen self' is ignored for libtool libraries" - - set dummy $rpath - shift - test "$#" -gt 1 && \ - func_warning "ignoring multiple \`-rpath's for a libtool library" - - install_libdir="$1" - - oldlibs= - if test -z "$rpath"; then - if test "$build_libtool_libs" = yes; then - # Building a libtool convenience library. - # Some compilers have problems with a `.al' extension so - # convenience libraries should have the same extension an - # archive normally would. - oldlibs="$output_objdir/$libname.$libext $oldlibs" - build_libtool_libs=convenience - build_old_libs=yes - fi - - test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for convenience libraries" - - test -n "$release" && \ - func_warning "\`-release' is ignored for convenience libraries" - else - - # Parse the version information argument. - save_ifs="$IFS"; IFS=':' - set dummy $vinfo 0 0 0 - shift - IFS="$save_ifs" - - test -n "$7" && \ - func_fatal_help "too many parameters to \`-version-info'" - - # convert absolute version numbers to libtool ages - # this retains compatibility with .la files and attempts - # to make the code below a bit more comprehensible - - case $vinfo_number in - yes) - number_major="$1" - number_minor="$2" - number_revision="$3" - # - # There are really only two kinds -- those that - # use the current revision as the major version - # and those that subtract age and use age as - # a minor version. But, then there is irix - # which has an extra 1 added just for fun - # - case $version_type in - darwin|linux|osf|windows|none) - func_arith $number_major + $number_minor - current=$func_arith_result - age="$number_minor" - revision="$number_revision" - ;; - freebsd-aout|freebsd-elf|sunos) - current="$number_major" - revision="$number_minor" - age="0" - ;; - irix|nonstopux) - func_arith $number_major + $number_minor - current=$func_arith_result - age="$number_minor" - revision="$number_minor" - lt_irix_increment=no - ;; - *) - func_fatal_configuration "$modename: unknown library version type \`$version_type'" - ;; - esac - ;; - no) - current="$1" - revision="$2" - age="$3" - ;; - esac - - # Check that each of the things are valid numbers. - case $current in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "CURRENT \`$current' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - case $revision in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "REVISION \`$revision' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - case $age in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "AGE \`$age' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - if test "$age" -gt "$current"; then - func_error "AGE \`$age' is greater than the current interface number \`$current'" - func_fatal_error "\`$vinfo' is not valid version information" - fi - - # Calculate the version variables. - major= - versuffix= - verstring= - case $version_type in - none) ;; - - darwin) - # Like Linux, but with the current version available in - # verstring for coding it into the library header - func_arith $current - $age - major=.$func_arith_result - versuffix="$major.$age.$revision" - # Darwin ld doesn't like 0 for these options... - func_arith $current + 1 - minor_current=$func_arith_result - xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" - verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" - ;; - - freebsd-aout) - major=".$current" - versuffix=".$current.$revision"; - ;; - - freebsd-elf) - major=".$current" - versuffix=".$current" - ;; - - irix | nonstopux) - if test "X$lt_irix_increment" = "Xno"; then - func_arith $current - $age - else - func_arith $current - $age + 1 - fi - major=$func_arith_result - - case $version_type in - nonstopux) verstring_prefix=nonstopux ;; - *) verstring_prefix=sgi ;; - esac - verstring="$verstring_prefix$major.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$revision - while test "$loop" -ne 0; do - func_arith $revision - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring="$verstring_prefix$major.$iface:$verstring" - done - - # Before this point, $major must not contain `.'. - major=.$major - versuffix="$major.$revision" - ;; - - linux) - func_arith $current - $age - major=.$func_arith_result - versuffix="$major.$age.$revision" - ;; - - osf) - func_arith $current - $age - major=.$func_arith_result - versuffix=".$current.$age.$revision" - verstring="$current.$age.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$age - while test "$loop" -ne 0; do - func_arith $current - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring="$verstring:${iface}.0" - done - - # Make executables depend on our current version. - verstring="$verstring:${current}.0" - ;; - - qnx) - major=".$current" - versuffix=".$current" - ;; - - sunos) - major=".$current" - versuffix=".$current.$revision" - ;; - - windows) - # Use '-' rather than '.', since we only want one - # extension on DOS 8.3 filesystems. - func_arith $current - $age - major=$func_arith_result - versuffix="-$major" - ;; - - *) - func_fatal_configuration "unknown library version type \`$version_type'" - ;; - esac - - # Clear the version info if we defaulted, and they specified a release. - if test -z "$vinfo" && test -n "$release"; then - major= - case $version_type in - darwin) - # we can't check for "0.0" in archive_cmds due to quoting - # problems, so we reset it completely - verstring= - ;; - *) - verstring="0.0" - ;; - esac - if test "$need_version" = no; then - versuffix= - else - versuffix=".0.0" - fi - fi - - # Remove version info from name if versioning should be avoided - if test "$avoid_version" = yes && test "$need_version" = no; then - major= - versuffix= - verstring="" - fi - - # Check to see if the archive will have undefined symbols. - if test "$allow_undefined" = yes; then - if test "$allow_undefined_flag" = unsupported; then - func_warning "undefined symbols not allowed in $host shared libraries" - build_libtool_libs=no - build_old_libs=yes - fi - else - # Don't allow undefined symbols. - allow_undefined_flag="$no_undefined_flag" - fi - - fi - - func_generate_dlsyms "$libname" "$libname" "yes" - libobjs="$libobjs $symfileobj" - test "X$libobjs" = "X " && libobjs= - - if test "$mode" != relink; then - # Remove our outputs, but don't remove object files since they - # may have been created when compiling PIC objects. - removelist= - tempremovelist=`$ECHO "$output_objdir/*"` - for p in $tempremovelist; do - case $p in - *.$objext | *.gcno) - ;; - $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) - if test "X$precious_files_regex" != "X"; then - if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 - then - continue - fi - fi - removelist="$removelist $p" - ;; - *) ;; - esac - done - test -n "$removelist" && \ - func_show_eval "${RM}r \$removelist" - fi - - # Now set the variables for building old libraries. - if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then - oldlibs="$oldlibs $output_objdir/$libname.$libext" - - # Transform .lo files to .o files. - oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` - fi - - # Eliminate all temporary directories. - #for path in $notinst_path; do - # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` - # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` - # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"` - #done - - if test -n "$xrpath"; then - # If the user specified any rpath flags, then add them. - temp_xrpath= - for libdir in $xrpath; do - temp_xrpath="$temp_xrpath -R$libdir" - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" ;; - esac - done - if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then - dependency_libs="$temp_xrpath $dependency_libs" - fi - fi - - # Make sure dlfiles contains only unique files that won't be dlpreopened - old_dlfiles="$dlfiles" - dlfiles= - for lib in $old_dlfiles; do - case " $dlprefiles $dlfiles " in - *" $lib "*) ;; - *) dlfiles="$dlfiles $lib" ;; - esac - done - - # Make sure dlprefiles contains only unique files - old_dlprefiles="$dlprefiles" - dlprefiles= - for lib in $old_dlprefiles; do - case "$dlprefiles " in - *" $lib "*) ;; - *) dlprefiles="$dlprefiles $lib" ;; - esac - done - - if test "$build_libtool_libs" = yes; then - if test -n "$rpath"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*) - # these systems don't actually have a c library (as such)! - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C library is in the System framework - deplibs="$deplibs System.ltframework" - ;; - *-*-netbsd*) - # Don't link with libc until the a.out ld.so is fixed. - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - ;; - *) - # Add libc to deplibs on all other systems if necessary. - if test "$build_libtool_need_lc" = "yes"; then - deplibs="$deplibs -lc" - fi - ;; - esac - fi - - # Transform deplibs into only deplibs that can be linked in shared. - name_save=$name - libname_save=$libname - release_save=$release - versuffix_save=$versuffix - major_save=$major - # I'm not sure if I'm treating the release correctly. I think - # release should show up in the -l (ie -lgmp5) so we don't want to - # add it in twice. Is that correct? - release="" - versuffix="" - major="" - newdeplibs= - droppeddeps=no - case $deplibs_check_method in - pass_all) - # Don't check for shared/static. Everything works. - # This might be a little naive. We might want to check - # whether the library exists or not. But this is on - # osf3 & osf4 and I'm not really sure... Just - # implementing what was already the behavior. - newdeplibs=$deplibs - ;; - test_compile) - # This code stresses the "libraries are programs" paradigm to its - # limits. Maybe even breaks it. We compile a program, linking it - # against the deplibs as a proxy for the library. Then we can check - # whether they linked in statically or dynamically with ldd. - $opt_dry_run || $RM conftest.c - cat > conftest.c </dev/null` - for potent_lib in $potential_libs; do - # Follow soft links. - if ls -lLd "$potent_lib" 2>/dev/null | - $GREP " -> " >/dev/null; then - continue - fi - # The statement above tries to avoid entering an - # endless loop below, in case of cyclic links. - # We might still enter an endless loop, since a link - # loop can be closed while we follow links, - # but so what? - potlib="$potent_lib" - while test -h "$potlib" 2>/dev/null; do - potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` - case $potliblink in - [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; - *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; - esac - done - if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | - $SED -e 10q | - $EGREP "$file_magic_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - $ECHO - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - $ECHO "*** I have the capability to make that library automatically link in when" - $ECHO "*** you link to this library. But I can only do this if you have a" - $ECHO "*** shared version of the library, which you do not appear to have" - $ECHO "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $ECHO "*** with $libname but no candidates were found. (...for file magic test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a file magic. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - for a_deplib in $deplibs; do - case $a_deplib in - -l*) - func_stripname -l '' "$a_deplib" - name=$func_stripname_result - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $a_deplib "*) - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - ;; - esac - fi - if test -n "$a_deplib" ; then - libname=`eval "\\$ECHO \"$libname_spec\""` - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - potential_libs=`ls $i/$libname[.-]* 2>/dev/null` - for potent_lib in $potential_libs; do - potlib="$potent_lib" # see symlink-check above in file_magic test - if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ - $EGREP "$match_pattern_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - $ECHO - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - $ECHO "*** I have the capability to make that library automatically link in when" - $ECHO "*** you link to this library. But I can only do this if you have a" - $ECHO "*** shared version of the library, which you do not appear to have" - $ECHO "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a regex pattern. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - none | unknown | *) - newdeplibs="" - tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ - -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'` - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - for i in $predeps $postdeps ; do - # can't use Xsed below, because $i might contain '/' - tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"` - done - fi - if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | - $GREP . >/dev/null; then - $ECHO - if test "X$deplibs_check_method" = "Xnone"; then - $ECHO "*** Warning: inter-library dependencies are not supported in this platform." - else - $ECHO "*** Warning: inter-library dependencies are not known to be supported." - fi - $ECHO "*** All declared inter-library dependencies are being dropped." - droppeddeps=yes - fi - ;; - esac - versuffix=$versuffix_save - major=$major_save - release=$release_save - libname=$libname_save - name=$name_save - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library with the System framework - newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'` - ;; - esac - - if test "$droppeddeps" = yes; then - if test "$module" = yes; then - $ECHO - $ECHO "*** Warning: libtool could not satisfy all declared inter-library" - $ECHO "*** dependencies of module $libname. Therefore, libtool will create" - $ECHO "*** a static module, that should work as long as the dlopening" - $ECHO "*** application is linked with the -dlopen flag." - if test -z "$global_symbol_pipe"; then - $ECHO - $ECHO "*** However, this would only work if libtool was able to extract symbol" - $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" - $ECHO "*** not find such a program. So, this module is probably useless." - $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - else - $ECHO "*** The inter-library dependencies that have been dropped here will be" - $ECHO "*** automatically added whenever a program is linked with this library" - $ECHO "*** or is declared to -dlopen it." - - if test "$allow_undefined" = no; then - $ECHO - $ECHO "*** Since this library must not contain undefined symbols," - $ECHO "*** because either the platform does not support them or" - $ECHO "*** it was explicitly requested with -no-undefined," - $ECHO "*** libtool will only create a static version of it." - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - fi - fi - # Done checking deplibs! - deplibs=$newdeplibs - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - case $host in - *-*-darwin*) - newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $deplibs " in - *" -L$path/$objdir "*) - new_libs="$new_libs -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$new_libs $deplib" ;; - esac - ;; - *) new_libs="$new_libs $deplib" ;; - esac - done - deplibs="$new_libs" - - # All the library-specific variables (install_libdir is set above). - library_names= - old_library= - dlname= - - # Test again, we may have decided not to build it any more - if test "$build_libtool_libs" = yes; then - if test "$hardcode_into_libs" = yes; then - # Hardcode the library paths - hardcode_libdirs= - dep_rpath= - rpath="$finalize_rpath" - test "$mode" != relink && rpath="$compile_rpath$rpath" - for libdir in $rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - dep_rpath="$dep_rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - if test -n "$hardcode_libdir_flag_spec_ld"; then - eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" - else - eval dep_rpath=\"$hardcode_libdir_flag_spec\" - fi - fi - if test -n "$runpath_var" && test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - rpath="$rpath$dir:" - done - eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" - fi - test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" - fi - - shlibpath="$finalize_shlibpath" - test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" - if test -n "$shlibpath"; then - eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" - fi - - # Get the real and link names of the library. - eval shared_ext=\"$shrext_cmds\" - eval library_names=\"$library_names_spec\" - set dummy $library_names - shift - realname="$1" - shift - - if test -n "$soname_spec"; then - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - if test -z "$dlname"; then - dlname=$soname - fi - - lib="$output_objdir/$realname" - linknames= - for link - do - linknames="$linknames $link" - done - - # Use standard objects if they are pic - test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - test "X$libobjs" = "X " && libobjs= - - delfiles= - if test -n "$export_symbols" && test -n "$include_expsyms"; then - $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" - export_symbols="$output_objdir/$libname.uexp" - delfiles="$delfiles $export_symbols" - fi - - orig_export_symbols= - case $host_os in - cygwin* | mingw* | cegcc*) - if test -n "$export_symbols" && test -z "$export_symbols_regex"; then - # exporting using user supplied symfile - if test "x`$SED 1q $export_symbols`" != xEXPORTS; then - # and it's NOT already a .def file. Must figure out - # which of the given symbols are data symbols and tag - # them as such. So, trigger use of export_symbols_cmds. - # export_symbols gets reassigned inside the "prepare - # the list of exported symbols" if statement, so the - # include_expsyms logic still works. - orig_export_symbols="$export_symbols" - export_symbols= - always_export_symbols=yes - fi - fi - ;; - esac - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $opt_dry_run || $RM $export_symbols - cmds=$export_symbols_cmds - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - func_len " $cmd" - len=$func_len_result - if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - func_show_eval "$cmd" 'exit $?' - skipped_export=false - else - # The command line is too long to execute in one step. - func_verbose "using reloadable object file for export list..." - skipped_export=: - # Break out early, otherwise skipped_export may be - # set to false by a later but shorter cmd. - break - fi - done - IFS="$save_ifs" - if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - fi - - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" - $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' - fi - - if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - - tmp_deplibs= - for test_deplib in $deplibs; do - case " $convenience " in - *" $test_deplib "*) ;; - *) - tmp_deplibs="$tmp_deplibs $test_deplib" - ;; - esac - done - deplibs="$tmp_deplibs" - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec" && - test "$compiler_needs_object" = yes && - test -z "$libobjs"; then - # extract the archives, so we have objects to list. - # TODO: could optimize this to just extract one archive. - whole_archive_flag_spec= - fi - if test -n "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - else - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $convenience - libobjs="$libobjs $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - fi - - if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then - eval flag=\"$thread_safe_flag_spec\" - linker_flags="$linker_flags $flag" - fi - - # Make a backup of the uninstalled library when relinking - if test "$mode" = relink; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? - fi - - # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - eval test_cmds=\"$module_expsym_cmds\" - cmds=$module_expsym_cmds - else - eval test_cmds=\"$module_cmds\" - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - eval test_cmds=\"$archive_expsym_cmds\" - cmds=$archive_expsym_cmds - else - eval test_cmds=\"$archive_cmds\" - cmds=$archive_cmds - fi - fi - - if test "X$skipped_export" != "X:" && - func_len " $test_cmds" && - len=$func_len_result && - test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - : - else - # The command line is too long to link in one step, link piecewise - # or, if using GNU ld and skipped_export is not :, use a linker - # script. - - # Save the value of $output and $libobjs because we want to - # use them later. If we have whole_archive_flag_spec, we - # want to use save_libobjs as it was before - # whole_archive_flag_spec was expanded, because we can't - # assume the linker understands whole_archive_flag_spec. - # This may have to be revisited, in case too many - # convenience libraries get linked in and end up exceeding - # the spec. - if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - fi - save_output=$output - output_la=`$ECHO "X$output" | $Xsed -e "$basename"` - - # Clear the reloadable object creation command queue and - # initialize k to one. - test_cmds= - concat_cmds= - objlist= - last_robj= - k=1 - - if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then - output=${output_objdir}/${output_la}.lnkscript - func_verbose "creating GNU ld script: $output" - $ECHO 'INPUT (' > $output - for obj in $save_libobjs - do - $ECHO "$obj" >> $output - done - $ECHO ')' >> $output - delfiles="$delfiles $output" - elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then - output=${output_objdir}/${output_la}.lnk - func_verbose "creating linker input file list: $output" - : > $output - set x $save_libobjs - shift - firstobj= - if test "$compiler_needs_object" = yes; then - firstobj="$1 " - shift - fi - for obj - do - $ECHO "$obj" >> $output - done - delfiles="$delfiles $output" - output=$firstobj\"$file_list_spec$output\" - else - if test -n "$save_libobjs"; then - func_verbose "creating reloadable object files..." - output=$output_objdir/$output_la-${k}.$objext - eval test_cmds=\"$reload_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - - # Loop over the list of objects to be linked. - for obj in $save_libobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - if test "X$objlist" = X || - test "$len" -lt "$max_cmd_len"; then - func_append objlist " $obj" - else - # The command $test_cmds is almost too long, add a - # command to the queue. - if test "$k" -eq 1 ; then - # The first file doesn't have a previous command to add. - eval concat_cmds=\"$reload_cmds $objlist $last_robj\" - else - # All subsequent reloadable object files will link in - # the last one created. - eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\" - fi - last_robj=$output_objdir/$output_la-${k}.$objext - func_arith $k + 1 - k=$func_arith_result - output=$output_objdir/$output_la-${k}.$objext - objlist=$obj - func_len " $last_robj" - func_arith $len0 + $func_len_result - len=$func_arith_result - fi - done - # Handle the remaining objects by creating one last - # reloadable object file. All subsequent reloadable object - # files will link in the last one created. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" - if test -n "$last_robj"; then - eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" - fi - delfiles="$delfiles $output" - - else - output= - fi - - if ${skipped_export-false}; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $opt_dry_run || $RM $export_symbols - libobjs=$output - # Append the command to create the export file. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" - if test -n "$last_robj"; then - eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" - fi - fi - - test -n "$save_libobjs" && - func_verbose "creating a temporary reloadable object file: $output" - - # Loop through the commands generated above and execute them. - save_ifs="$IFS"; IFS='~' - for cmd in $concat_cmds; do - IFS="$save_ifs" - $opt_silent || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS="$save_ifs" - - if test -n "$export_symbols_regex" && ${skipped_export-false}; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - - if ${skipped_export-false}; then - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" - $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' - fi - - if test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - fi - - libobjs=$output - # Restore the value of output. - output=$save_output - - if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - fi - # Expand the library linking commands again to reset the - # value of $libobjs for piecewise linking. - - # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - cmds=$module_expsym_cmds - else - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - cmds=$archive_expsym_cmds - else - cmds=$archive_cmds - fi - fi - fi - - if test -n "$delfiles"; then - # Append the command to remove temporary files to $cmds. - eval cmds=\"\$cmds~\$RM $delfiles\" - fi - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $dlprefiles - libobjs="$libobjs $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $opt_silent || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS="$save_ifs" - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? - - if test -n "$convenience"; then - if test -z "$whole_archive_flag_spec"; then - func_show_eval '${RM}r "$gentop"' - fi - fi - - exit $EXIT_SUCCESS - fi - - # Create links to the real library. - for linkname in $linknames; do - if test "$realname" != "$linkname"; then - func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' - fi - done - - # If -module or -export-dynamic was specified, set the dlname. - if test "$module" = yes || test "$export_dynamic" = yes; then - # On all known operating systems, these are identical. - dlname="$soname" - fi - fi - ;; - - obj) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for objects" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for objects" ;; - esac - - test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for objects" - - test -n "$xrpath" && \ - func_warning "\`-R' is ignored for objects" - - test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for objects" - - test -n "$release" && \ - func_warning "\`-release' is ignored for objects" - - case $output in - *.lo) - test -n "$objs$old_deplibs" && \ - func_fatal_error "cannot build library object \`$output' from non-libtool objects" - - libobj=$output - func_lo2o "$libobj" - obj=$func_lo2o_result - ;; - *) - libobj= - obj="$output" - ;; - esac - - # Delete the old objects. - $opt_dry_run || $RM $obj $libobj - - # Objects from convenience libraries. This assumes - # single-version convenience libraries. Whenever we create - # different ones for PIC/non-PIC, this we'll have to duplicate - # the extraction. - reload_conv_objs= - gentop= - # reload_cmds runs $LD directly, so let us get rid of - # -Wl from whole_archive_flag_spec and hope we can get by with - # turning comma into space.. - wl= - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then - eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" - reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` - else - gentop="$output_objdir/${obj}x" - generated="$generated $gentop" - - func_extract_archives $gentop $convenience - reload_conv_objs="$reload_objs $func_extract_archives_result" - fi - fi - - # Create the old-style object. - reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test - - output="$obj" - func_execute_cmds "$reload_cmds" 'exit $?' - - # Exit if we aren't doing a library object file. - if test -z "$libobj"; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - fi - - if test "$build_libtool_libs" != yes; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - # Create an invalid libtool object if no PIC, so that we don't - # accidentally link it into a program. - # $show "echo timestamp > $libobj" - # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? - exit $EXIT_SUCCESS - fi - - if test -n "$pic_flag" || test "$pic_mode" != default; then - # Only do commands if we really have different PIC objects. - reload_objs="$libobjs $reload_conv_objs" - output="$libobj" - func_execute_cmds "$reload_cmds" 'exit $?' - fi - - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - ;; - - prog) - case $host in - *cygwin*) func_stripname '' '.exe' "$output" - output=$func_stripname_result.exe;; - esac - test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for programs" - - test -n "$release" && \ - func_warning "\`-release' is ignored for programs" - - test "$preload" = yes \ - && test "$dlopen_support" = unknown \ - && test "$dlopen_self" = unknown \ - && test "$dlopen_self_static" = unknown && \ - func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library is the System framework - compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` - finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` - ;; - esac - - case $host in - *-*-darwin*) - # Don't allow lazy linking, it breaks C++ global constructors - # But is supposedly fixed on 10.4 or later (yay!). - if test "$tagname" = CXX ; then - case ${MACOSX_DEPLOYMENT_TARGET-10.0} in - 10.[0123]) - compile_command="$compile_command ${wl}-bind_at_load" - finalize_command="$finalize_command ${wl}-bind_at_load" - ;; - esac - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $compile_deplibs " in - *" -L$path/$objdir "*) - new_libs="$new_libs -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $compile_deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$new_libs $deplib" ;; - esac - ;; - *) new_libs="$new_libs $deplib" ;; - esac - done - compile_deplibs="$new_libs" - - - compile_command="$compile_command $compile_deplibs" - finalize_command="$finalize_command $finalize_deplibs" - - if test -n "$rpath$xrpath"; then - # If the user specified any rpath flags, then add them. - for libdir in $rpath $xrpath; do - # This is the magic to use -rpath. - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" ;; - esac - done - fi - - # Now hardcode the library paths - rpath= - hardcode_libdirs= - for libdir in $compile_rpath $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; - esac - fi - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$libdir:"*) ;; - ::) dllsearchpath=$libdir;; - *) dllsearchpath="$dllsearchpath:$libdir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) dllsearchpath="$dllsearchpath:$testbindir";; - esac - ;; - esac - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - compile_rpath="$rpath" - - rpath= - hardcode_libdirs= - for libdir in $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$finalize_perm_rpath " in - *" $libdir "*) ;; - *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - finalize_rpath="$rpath" - - if test -n "$libobjs" && test "$build_old_libs" = yes; then - # Transform all the library objects into standard objects. - compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - fi - - func_generate_dlsyms "$outputname" "@PROGRAM@" "no" - - # template prelinking step - if test -n "$prelink_cmds"; then - func_execute_cmds "$prelink_cmds" 'exit $?' - fi - - wrappers_required=yes - case $host in - *cygwin* | *mingw* ) - if test "$build_libtool_libs" != yes; then - wrappers_required=no - fi - ;; - *cegcc) - # Disable wrappers for cegcc, we are cross compiling anyway. - wrappers_required=no - ;; - *) - if test "$need_relink" = no || test "$build_libtool_libs" != yes; then - wrappers_required=no - fi - ;; - esac - if test "$wrappers_required" = no; then - # Replace the output file specification. - compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` - link_command="$compile_command$compile_rpath" - - # We have no uninstalled library dependencies, so finalize right now. - exit_status=0 - func_show_eval "$link_command" 'exit_status=$?' - - # Delete the generated files. - if test -f "$output_objdir/${outputname}S.${objext}"; then - func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' - fi - - exit $exit_status - fi - - if test -n "$compile_shlibpath$finalize_shlibpath"; then - compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" - fi - if test -n "$finalize_shlibpath"; then - finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" - fi - - compile_var= - finalize_var= - if test -n "$runpath_var"; then - if test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - rpath="$rpath$dir:" - done - compile_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - if test -n "$finalize_perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $finalize_perm_rpath; do - rpath="$rpath$dir:" - done - finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - fi - - if test "$no_install" = yes; then - # We don't need to create a wrapper script. - link_command="$compile_var$compile_command$compile_rpath" - # Replace the output file specification. - link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` - # Delete the old output file. - $opt_dry_run || $RM $output - # Link the executable and exit - func_show_eval "$link_command" 'exit $?' - exit $EXIT_SUCCESS - fi - - if test "$hardcode_action" = relink; then - # Fast installation is not supported - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - - func_warning "this platform does not like uninstalled shared libraries" - func_warning "\`$output' will be relinked during installation" - else - if test "$fast_install" != no; then - link_command="$finalize_var$compile_command$finalize_rpath" - if test "$fast_install" = yes; then - relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` - else - # fast_install is set to needless - relink_command= - fi - else - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - fi - fi - - # Replace the output file specification. - link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` - - # Delete the old output files. - $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname - - func_show_eval "$link_command" 'exit $?' - - # Now create the wrapper script. - func_verbose "creating $output" - - # Quote the relink command for shipping. - if test -n "$relink_command"; then - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - relink_command="(cd `pwd`; $relink_command)" - relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` - fi - - # Quote $ECHO for shipping. - if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then - case $progpath in - [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; - *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; - esac - qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` - else - qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"` - fi - - # Only actually do things if not in dry run mode. - $opt_dry_run || { - # win32 will think the script is a binary if it has - # a .exe suffix, so we strip it off here. - case $output in - *.exe) func_stripname '' '.exe' "$output" - output=$func_stripname_result ;; - esac - # test for cygwin because mv fails w/o .exe extensions - case $host in - *cygwin*) - exeext=.exe - func_stripname '' '.exe' "$outputname" - outputname=$func_stripname_result ;; - *) exeext= ;; - esac - case $host in - *cygwin* | *mingw* ) - func_dirname_and_basename "$output" "" "." - output_name=$func_basename_result - output_path=$func_dirname_result - cwrappersource="$output_path/$objdir/lt-$output_name.c" - cwrapper="$output_path/$output_name.exe" - $RM $cwrappersource $cwrapper - trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 - - func_emit_cwrapperexe_src > $cwrappersource - - # The wrapper executable is built using the $host compiler, - # because it contains $host paths and files. If cross- - # compiling, it, like the target executable, must be - # executed on the $host or under an emulation environment. - $opt_dry_run || { - $LTCC $LTCFLAGS -o $cwrapper $cwrappersource - $STRIP $cwrapper - } - - # Now, create the wrapper script for func_source use: - func_ltwrapper_scriptname $cwrapper - $RM $func_ltwrapper_scriptname_result - trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 - $opt_dry_run || { - # note: this script will not be executed, so do not chmod. - if test "x$build" = "x$host" ; then - $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result - else - func_emit_wrapper no > $func_ltwrapper_scriptname_result - fi - } - ;; - * ) - $RM $output - trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 - - func_emit_wrapper no > $output - chmod +x $output - ;; - esac - } - exit $EXIT_SUCCESS - ;; - esac - - # See if we need to build an old-fashioned archive. - for oldlib in $oldlibs; do - - if test "$build_libtool_libs" = convenience; then - oldobjs="$libobjs_save $symfileobj" - addlibs="$convenience" - build_libtool_libs=no - else - if test "$build_libtool_libs" = module; then - oldobjs="$libobjs_save" - build_libtool_libs=no - else - oldobjs="$old_deplibs $non_pic_objects" - if test "$preload" = yes && test -f "$symfileobj"; then - oldobjs="$oldobjs $symfileobj" - fi - fi - addlibs="$old_convenience" - fi - - if test -n "$addlibs"; then - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $addlibs - oldobjs="$oldobjs $func_extract_archives_result" - fi - - # Do each command in the archive commands. - if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then - cmds=$old_archive_from_new_cmds - else - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $dlprefiles - oldobjs="$oldobjs $func_extract_archives_result" - fi - - # POSIX demands no paths to be encoded in archives. We have - # to avoid creating archives with duplicate basenames if we - # might have to extract them afterwards, e.g., when creating a - # static archive out of a convenience library, or when linking - # the entirety of a libtool archive into another (currently - # not supported by libtool). - if (for obj in $oldobjs - do - func_basename "$obj" - $ECHO "$func_basename_result" - done | sort | sort -uc >/dev/null 2>&1); then - : - else - $ECHO "copying selected object files to avoid basename conflicts..." - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - func_mkdir_p "$gentop" - save_oldobjs=$oldobjs - oldobjs= - counter=1 - for obj in $save_oldobjs - do - func_basename "$obj" - objbase="$func_basename_result" - case " $oldobjs " in - " ") oldobjs=$obj ;; - *[\ /]"$objbase "*) - while :; do - # Make sure we don't pick an alternate name that also - # overlaps. - newobj=lt$counter-$objbase - func_arith $counter + 1 - counter=$func_arith_result - case " $oldobjs " in - *[\ /]"$newobj "*) ;; - *) if test ! -f "$gentop/$newobj"; then break; fi ;; - esac - done - func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" - oldobjs="$oldobjs $gentop/$newobj" - ;; - *) oldobjs="$oldobjs $obj" ;; - esac - done - fi - eval cmds=\"$old_archive_cmds\" - - func_len " $cmds" - len=$func_len_result - if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - cmds=$old_archive_cmds - else - # the command line is too long to link in one step, link in parts - func_verbose "using piecewise archive linking..." - save_RANLIB=$RANLIB - RANLIB=: - objlist= - concat_cmds= - save_oldobjs=$oldobjs - oldobjs= - # Is there a better way of finding the last object in the list? - for obj in $save_oldobjs - do - last_oldobj=$obj - done - eval test_cmds=\"$old_archive_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - for obj in $save_oldobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - func_append objlist " $obj" - if test "$len" -lt "$max_cmd_len"; then - : - else - # the above command should be used before it gets too long - oldobjs=$objlist - if test "$obj" = "$last_oldobj" ; then - RANLIB=$save_RANLIB - fi - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" - objlist= - len=$len0 - fi - done - RANLIB=$save_RANLIB - oldobjs=$objlist - if test "X$oldobjs" = "X" ; then - eval cmds=\"\$concat_cmds\" - else - eval cmds=\"\$concat_cmds~\$old_archive_cmds\" - fi - fi - fi - func_execute_cmds "$cmds" 'exit $?' - done - - test -n "$generated" && \ - func_show_eval "${RM}r$generated" - - # Now create the libtool archive. - case $output in - *.la) - old_library= - test "$build_old_libs" = yes && old_library="$libname.$libext" - func_verbose "creating $output" - - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - # Quote the link command for shipping. - relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" - relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` - if test "$hardcode_automatic" = yes ; then - relink_command= - fi - - # Only create the output if not a dry run. - $opt_dry_run || { - for installed in no yes; do - if test "$installed" = yes; then - if test -z "$install_libdir"; then - break - fi - output="$output_objdir/$outputname"i - # Replace all uninstalled libtool libraries with the installed ones - newdependency_libs= - for deplib in $dependency_libs; do - case $deplib in - *.la) - func_basename "$deplib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" - newdependency_libs="$newdependency_libs $libdir/$name" - ;; - *) newdependency_libs="$newdependency_libs $deplib" ;; - esac - done - dependency_libs="$newdependency_libs" - newdlfiles= - - for lib in $dlfiles; do - case $lib in - *.la) - func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" - newdlfiles="$newdlfiles $libdir/$name" - ;; - *) newdlfiles="$newdlfiles $lib" ;; - esac - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - *.la) - # Only pass preopened files to the pseudo-archive (for - # eventual linking with the app. that links it) if we - # didn't already link the preopened objects directly into - # the library: - func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" - newdlprefiles="$newdlprefiles $libdir/$name" - ;; - esac - done - dlprefiles="$newdlprefiles" - else - newdlfiles= - for lib in $dlfiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - newdlfiles="$newdlfiles $abs" - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - newdlprefiles="$newdlprefiles $abs" - done - dlprefiles="$newdlprefiles" - fi - $RM $output - # place dlname in correct position for cygwin - tdlname=$dlname - case $host,$output,$installed,$module,$dlname in - *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; - esac - $ECHO > $output "\ -# $outputname - a libtool library file -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# The name that we can dlopen(3). -dlname='$tdlname' - -# Names of this library. -library_names='$library_names' - -# The name of the static archive. -old_library='$old_library' - -# Linker flags that can not go in dependency_libs. -inherited_linker_flags='$new_inherited_linker_flags' - -# Libraries that this one depends upon. -dependency_libs='$dependency_libs' - -# Names of additional weak libraries provided by this library -weak_library_names='$weak_libs' - -# Version information for $libname. -current=$current -age=$age -revision=$revision - -# Is this an already installed library? -installed=$installed - -# Should we warn about portability when linking against -modules? -shouldnotlink=$module - -# Files to dlopen/dlpreopen -dlopen='$dlfiles' -dlpreopen='$dlprefiles' - -# Directory that this library needs to be installed in: -libdir='$install_libdir'" - if test "$installed" = no && test "$need_relink" = yes; then - $ECHO >> $output "\ -relink_command=\"$relink_command\"" - fi - done - } - - # Do a symbolic link so that the libtool archive can be found in - # LD_LIBRARY_PATH before the program is installed. - func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' - ;; - esac - exit $EXIT_SUCCESS -} - -{ test "$mode" = link || test "$mode" = relink; } && - func_mode_link ${1+"$@"} - - -# func_mode_uninstall arg... -func_mode_uninstall () -{ - $opt_debug - RM="$nonopt" - files= - rmforce= - exit_status=0 - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - for arg - do - case $arg in - -f) RM="$RM $arg"; rmforce=yes ;; - -*) RM="$RM $arg" ;; - *) files="$files $arg" ;; - esac - done - - test -z "$RM" && \ - func_fatal_help "you must specify an RM program" - - rmdirs= - - origobjdir="$objdir" - for file in $files; do - func_dirname "$file" "" "." - dir="$func_dirname_result" - if test "X$dir" = X.; then - objdir="$origobjdir" - else - objdir="$dir/$origobjdir" - fi - func_basename "$file" - name="$func_basename_result" - test "$mode" = uninstall && objdir="$dir" - - # Remember objdir for removal later, being careful to avoid duplicates - if test "$mode" = clean; then - case " $rmdirs " in - *" $objdir "*) ;; - *) rmdirs="$rmdirs $objdir" ;; - esac - fi - - # Don't error if the file doesn't exist and rm -f was used. - if { test -L "$file"; } >/dev/null 2>&1 || - { test -h "$file"; } >/dev/null 2>&1 || - test -f "$file"; then - : - elif test -d "$file"; then - exit_status=1 - continue - elif test "$rmforce" = yes; then - continue - fi - - rmfiles="$file" - - case $name in - *.la) - # Possibly a libtool archive, so verify it. - if func_lalib_p "$file"; then - func_source $dir/$name - - # Delete the libtool libraries and symlinks. - for n in $library_names; do - rmfiles="$rmfiles $objdir/$n" - done - test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" - - case "$mode" in - clean) - case " $library_names " in - # " " in the beginning catches empty $dlname - *" $dlname "*) ;; - *) rmfiles="$rmfiles $objdir/$dlname" ;; - esac - test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" - ;; - uninstall) - if test -n "$library_names"; then - # Do each command in the postuninstall commands. - func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' - fi - - if test -n "$old_library"; then - # Do each command in the old_postuninstall commands. - func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' - fi - # FIXME: should reinstall the best remaining shared library. - ;; - esac - fi - ;; - - *.lo) - # Possibly a libtool object, so verify it. - if func_lalib_p "$file"; then - - # Read the .lo file - func_source $dir/$name - - # Add PIC object to the list of files to remove. - if test -n "$pic_object" && - test "$pic_object" != none; then - rmfiles="$rmfiles $dir/$pic_object" - fi - - # Add non-PIC object to the list of files to remove. - if test -n "$non_pic_object" && - test "$non_pic_object" != none; then - rmfiles="$rmfiles $dir/$non_pic_object" - fi - fi - ;; - - *) - if test "$mode" = clean ; then - noexename=$name - case $file in - *.exe) - func_stripname '' '.exe' "$file" - file=$func_stripname_result - func_stripname '' '.exe' "$name" - noexename=$func_stripname_result - # $file with .exe has already been added to rmfiles, - # add $file without .exe - rmfiles="$rmfiles $file" - ;; - esac - # Do a test to see if this is a libtool program. - if func_ltwrapper_p "$file"; then - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - relink_command= - func_source $func_ltwrapper_scriptname_result - rmfiles="$rmfiles $func_ltwrapper_scriptname_result" - else - relink_command= - func_source $dir/$noexename - fi - - # note $name still contains .exe if it was in $file originally - # as does the version of $file that was added into $rmfiles - rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" - if test "$fast_install" = yes && test -n "$relink_command"; then - rmfiles="$rmfiles $objdir/lt-$name" - fi - if test "X$noexename" != "X$name" ; then - rmfiles="$rmfiles $objdir/lt-${noexename}.c" - fi - fi - fi - ;; - esac - func_show_eval "$RM $rmfiles" 'exit_status=1' - done - objdir="$origobjdir" - - # Try to remove the ${objdir}s in the directories where we deleted files - for dir in $rmdirs; do - if test -d "$dir"; then - func_show_eval "rmdir $dir >/dev/null 2>&1" - fi - done - - exit $exit_status -} - -{ test "$mode" = uninstall || test "$mode" = clean; } && - func_mode_uninstall ${1+"$@"} - -test -z "$mode" && { - help="$generic_help" - func_fatal_help "you must specify a MODE" -} - -test -z "$exec_cmd" && \ - func_fatal_help "invalid operation mode \`$mode'" - -if test -n "$exec_cmd"; then - eval exec "$exec_cmd" - exit $EXIT_FAILURE -fi - -exit $exit_status - - -# The TAGs below are defined such that we never get into a situation -# in which we disable both kinds of libraries. Given conflicting -# choices, we go for a static library, that is the most portable, -# since we can't tell whether shared libraries were disabled because -# the user asked for that or because the platform doesn't support -# them. This is particularly important on AIX, because we don't -# support having both static and shared libraries enabled at the same -# time on that platform, so we default to a shared-only configuration. -# If a disable-shared tag is given, we'll fallback to a static-only -# configuration. But we'll never go from static-only to shared-only. - -# ### BEGIN LIBTOOL TAG CONFIG: disable-shared -build_libtool_libs=no -build_old_libs=yes -# ### END LIBTOOL TAG CONFIG: disable-shared - -# ### BEGIN LIBTOOL TAG CONFIG: disable-static -build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` -# ### END LIBTOOL TAG CONFIG: disable-static - -# Local Variables: -# mode:shell-script -# sh-indentation:2 -# End: -# vi:sw=2 - diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/ac_have_attribute.m4 b/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/ac_have_attribute.m4 deleted file mode 100644 index 19f4021e9901..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/ac_have_attribute.m4 +++ /dev/null @@ -1,16 +0,0 @@ -AC_DEFUN([AX_C___ATTRIBUTE__], [ - AC_MSG_CHECKING(for __attribute__) - AC_CACHE_VAL(ac_cv___attribute__, [ - AC_TRY_COMPILE( - [#include - static void foo(void) __attribute__ ((unused)); - void foo(void) { exit(1); }], - [], - ac_cv___attribute__=yes, - ac_cv___attribute__=no - )]) - if test "$ac_cv___attribute__" = "yes"; then - AC_DEFINE(HAVE___ATTRIBUTE__, 1, [define if your compiler has __attribute__]) - fi - AC_MSG_RESULT($ac_cv___attribute__) -]) diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/ac_have_builtin_expect.m4 b/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/ac_have_builtin_expect.m4 deleted file mode 100644 index e91b6fd987ed..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/ac_have_builtin_expect.m4 +++ /dev/null @@ -1,14 +0,0 @@ -AC_DEFUN([AX_C___BUILTIN_EXPECT], [ - AC_MSG_CHECKING(for __builtin_expect) - AC_CACHE_VAL(ac_cv___builtin_expect, [ - AC_TRY_COMPILE( - [int foo(void) { if (__builtin_expect(0, 0)) return 1; return 0; }], - [], - ac_cv___builtin_expect=yes, - ac_cv___builtin_expect=no - )]) - if test "$ac_cv___builtin_expect" = "yes"; then - AC_DEFINE(HAVE___BUILTIN_EXPECT, 1, [define if your compiler has __builtin_expect]) - fi - AC_MSG_RESULT($ac_cv___builtin_expect) -]) diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/ac_have_sync_val_compare_and_swap.m4 b/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/ac_have_sync_val_compare_and_swap.m4 deleted file mode 100644 index 9ff59c25f96f..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/ac_have_sync_val_compare_and_swap.m4 +++ /dev/null @@ -1,14 +0,0 @@ -AC_DEFUN([AX_C___SYNC_VAL_COMPARE_AND_SWAP], [ - AC_MSG_CHECKING(for __sync_val_compare_and_swap) - AC_CACHE_VAL(ac_cv___sync_val_compare_and_swap, [ - AC_TRY_LINK( - [int main() { int a; if (__sync_val_compare_and_swap(&a, 0, 1)) return 1; return 0; }], - [], - ac_cv___sync_val_compare_and_swap=yes, - ac_cv___sync_val_compare_and_swap=no - )]) - if test "$ac_cv___sync_val_compare_and_swap" = "yes"; then - AC_DEFINE(HAVE___SYNC_VAL_COMPARE_AND_SWAP, 1, [define if your compiler has __sync_val_compare_and_swap]) - fi - AC_MSG_RESULT($ac_cv___sync_val_compare_and_swap) -]) diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/ac_rwlock.m4 b/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/ac_rwlock.m4 deleted file mode 100644 index 5065bcc1c5c2..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/ac_rwlock.m4 +++ /dev/null @@ -1,31 +0,0 @@ -# TODO(csilvers): it would be better to actually try to link against -# -pthreads, to make sure it defines these methods, but that may be -# too hard, since pthread support is really tricky. - -# Check for support for pthread_rwlock_init() etc. -# These aren't posix, but are widely supported. To get them on linux, -# you need to define _XOPEN_SOURCE first, so this check assumes your -# application does that. -# -# Note: OS X (as of 6/1/06) seems to support pthread_rwlock, but -# doesn't define PTHREAD_RWLOCK_INITIALIZER. Therefore, we don't test -# that particularly macro. It's probably best if you don't use that -# macro in your code either. - -AC_DEFUN([AC_RWLOCK], -[AC_CACHE_CHECK(support for pthread_rwlock_* functions, -ac_cv_rwlock, -[AC_LANG_SAVE - AC_LANG_C - AC_TRY_COMPILE([#define _XOPEN_SOURCE 500 - #include ], - [pthread_rwlock_t l; pthread_rwlock_init(&l, NULL); - pthread_rwlock_rdlock(&l); - return 0;], - ac_cv_rwlock=yes, ac_cv_rwlock=no) - AC_LANG_RESTORE -]) -if test "$ac_cv_rwlock" = yes; then - AC_DEFINE(HAVE_RWLOCK,1,[define if the compiler implements pthread_rwlock_*]) -fi -]) diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/acx_pthread.m4 b/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/acx_pthread.m4 deleted file mode 100644 index 2cf20de144a1..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/acx_pthread.m4 +++ /dev/null @@ -1,363 +0,0 @@ -# This was retrieved from -# http://svn.0pointer.de/viewvc/trunk/common/acx_pthread.m4?revision=1277&root=avahi -# See also (perhaps for new versions?) -# http://svn.0pointer.de/viewvc/trunk/common/acx_pthread.m4?root=avahi -# -# We've rewritten the inconsistency check code (from avahi), to work -# more broadly. In particular, it no longer assumes ld accepts -zdefs. -# This caused a restructing of the code, but the functionality has only -# changed a little. - -dnl @synopsis ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) -dnl -dnl @summary figure out how to build C programs using POSIX threads -dnl -dnl This macro figures out how to build C programs using POSIX threads. -dnl It sets the PTHREAD_LIBS output variable to the threads library and -dnl linker flags, and the PTHREAD_CFLAGS output variable to any special -dnl C compiler flags that are needed. (The user can also force certain -dnl compiler flags/libs to be tested by setting these environment -dnl variables.) -dnl -dnl Also sets PTHREAD_CC to any special C compiler that is needed for -dnl multi-threaded programs (defaults to the value of CC otherwise). -dnl (This is necessary on AIX to use the special cc_r compiler alias.) -dnl -dnl NOTE: You are assumed to not only compile your program with these -dnl flags, but also link it with them as well. e.g. you should link -dnl with $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS -dnl $LIBS -dnl -dnl If you are only building threads programs, you may wish to use -dnl these variables in your default LIBS, CFLAGS, and CC: -dnl -dnl LIBS="$PTHREAD_LIBS $LIBS" -dnl CFLAGS="$CFLAGS $PTHREAD_CFLAGS" -dnl CC="$PTHREAD_CC" -dnl -dnl In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute -dnl constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to -dnl that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX). -dnl -dnl ACTION-IF-FOUND is a list of shell commands to run if a threads -dnl library is found, and ACTION-IF-NOT-FOUND is a list of commands to -dnl run it if it is not found. If ACTION-IF-FOUND is not specified, the -dnl default action will define HAVE_PTHREAD. -dnl -dnl Please let the authors know if this macro fails on any platform, or -dnl if you have any other suggestions or comments. This macro was based -dnl on work by SGJ on autoconf scripts for FFTW (www.fftw.org) (with -dnl help from M. Frigo), as well as ac_pthread and hb_pthread macros -dnl posted by Alejandro Forero Cuervo to the autoconf macro repository. -dnl We are also grateful for the helpful feedback of numerous users. -dnl -dnl @category InstalledPackages -dnl @author Steven G. Johnson -dnl @version 2006-05-29 -dnl @license GPLWithACException -dnl -dnl Checks for GCC shared/pthread inconsistency based on work by -dnl Marcin Owsiany - - -AC_DEFUN([ACX_PTHREAD], [ -AC_REQUIRE([AC_CANONICAL_HOST]) -AC_LANG_SAVE -AC_LANG_C -acx_pthread_ok=no - -# We used to check for pthread.h first, but this fails if pthread.h -# requires special compiler flags (e.g. on True64 or Sequent). -# It gets checked for in the link test anyway. - -# First of all, check if the user has set any of the PTHREAD_LIBS, -# etcetera environment variables, and if threads linking works using -# them: -if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) - AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes) - AC_MSG_RESULT($acx_pthread_ok) - if test x"$acx_pthread_ok" = xno; then - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" - fi - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" -fi - -# We must check for the threads library under a number of different -# names; the ordering is very important because some systems -# (e.g. DEC) have both -lpthread and -lpthreads, where one of the -# libraries is broken (non-POSIX). - -# Create a list of thread flags to try. Items starting with a "-" are -# C compiler flags, and other items are library names, except for "none" -# which indicates that we try without any flags at all, and "pthread-config" -# which is a program returning the flags for the Pth emulation library. - -acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" - -# The ordering *is* (sometimes) important. Some notes on the -# individual items follow: - -# pthreads: AIX (must check this before -lpthread) -# none: in case threads are in libc; should be tried before -Kthread and -# other compiler flags to prevent continual compiler warnings -# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) -# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) -# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) -# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) -# -pthreads: Solaris/gcc -# -mthreads: Mingw32/gcc, Lynx/gcc -# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it -# doesn't hurt to check since this sometimes defines pthreads too; -# also defines -D_REENTRANT) -# ... -mt is also the pthreads flag for HP/aCC -# pthread: Linux, etcetera -# --thread-safe: KAI C++ -# pthread-config: use pthread-config program (for GNU Pth library) - -case "${host_cpu}-${host_os}" in - *solaris*) - - # On Solaris (at least, for some versions), libc contains stubbed - # (non-functional) versions of the pthreads routines, so link-based - # tests will erroneously succeed. (We need to link with -pthreads/-mt/ - # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather - # a function called by this macro, so we could check for that, but - # who knows whether they'll stub that too in a future libc.) So, - # we'll just look for -pthreads and -lpthread first: - - acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags" - ;; -esac - -if test x"$acx_pthread_ok" = xno; then -for flag in $acx_pthread_flags; do - - case $flag in - none) - AC_MSG_CHECKING([whether pthreads work without any flags]) - ;; - - -*) - AC_MSG_CHECKING([whether pthreads work with $flag]) - PTHREAD_CFLAGS="$flag" - ;; - - pthread-config) - AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no) - if test x"$acx_pthread_config" = xno; then continue; fi - PTHREAD_CFLAGS="`pthread-config --cflags`" - PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" - ;; - - *) - AC_MSG_CHECKING([for the pthreads library -l$flag]) - PTHREAD_LIBS="-l$flag" - ;; - esac - - save_LIBS="$LIBS" - save_CFLAGS="$CFLAGS" - LIBS="$PTHREAD_LIBS $LIBS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - - # Check for various functions. We must include pthread.h, - # since some functions may be macros. (On the Sequent, we - # need a special flag -Kthread to make this header compile.) - # We check for pthread_join because it is in -lpthread on IRIX - # while pthread_create is in libc. We check for pthread_attr_init - # due to DEC craziness with -lpthreads. We check for - # pthread_cleanup_push because it is one of the few pthread - # functions on Solaris that doesn't have a non-functional libc stub. - # We try pthread_create on general principles. - AC_TRY_LINK([#include ], - [pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], - [acx_pthread_ok=yes]) - - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" - - AC_MSG_RESULT($acx_pthread_ok) - if test "x$acx_pthread_ok" = xyes; then - break; - fi - - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" -done -fi - -# Various other checks: -if test "x$acx_pthread_ok" = xyes; then - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - - # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. - AC_MSG_CHECKING([for joinable pthread attribute]) - attr_name=unknown - for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do - AC_TRY_LINK([#include ], [int attr=$attr; return attr;], - [attr_name=$attr; break]) - done - AC_MSG_RESULT($attr_name) - if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then - AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name, - [Define to necessary symbol if this constant - uses a non-standard name on your system.]) - fi - - AC_MSG_CHECKING([if more special flags are required for pthreads]) - flag=no - case "${host_cpu}-${host_os}" in - *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; - *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; - esac - AC_MSG_RESULT(${flag}) - if test "x$flag" != xno; then - PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" - fi - - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" - # More AIX lossage: must compile with xlc_r or cc_r - if test x"$GCC" != xyes; then - AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC}) - else - PTHREAD_CC=$CC - fi - - # The next part tries to detect GCC inconsistency with -shared on some - # architectures and systems. The problem is that in certain - # configurations, when -shared is specified, GCC "forgets" to - # internally use various flags which are still necessary. - - # - # Prepare the flags - # - save_CFLAGS="$CFLAGS" - save_LIBS="$LIBS" - save_CC="$CC" - - # Try with the flags determined by the earlier checks. - # - # -Wl,-z,defs forces link-time symbol resolution, so that the - # linking checks with -shared actually have any value - # - # FIXME: -fPIC is required for -shared on many architectures, - # so we specify it here, but the right way would probably be to - # properly detect whether it is actually required. - CFLAGS="-shared -fPIC -Wl,-z,defs $CFLAGS $PTHREAD_CFLAGS" - LIBS="$PTHREAD_LIBS $LIBS" - CC="$PTHREAD_CC" - - # In order not to create several levels of indentation, we test - # the value of "$done" until we find the cure or run out of ideas. - done="no" - - # First, make sure the CFLAGS we added are actually accepted by our - # compiler. If not (and OS X's ld, for instance, does not accept -z), - # then we can't do this test. - if test x"$done" = xno; then - AC_MSG_CHECKING([whether to check for GCC pthread/shared inconsistencies]) - AC_TRY_LINK(,, , [done=yes]) - - if test "x$done" = xyes ; then - AC_MSG_RESULT([no]) - else - AC_MSG_RESULT([yes]) - fi - fi - - if test x"$done" = xno; then - AC_MSG_CHECKING([whether -pthread is sufficient with -shared]) - AC_TRY_LINK([#include ], - [pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], - [done=yes]) - - if test "x$done" = xyes; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - fi - fi - - # - # Linux gcc on some architectures such as mips/mipsel forgets - # about -lpthread - # - if test x"$done" = xno; then - AC_MSG_CHECKING([whether -lpthread fixes that]) - LIBS="-lpthread $PTHREAD_LIBS $save_LIBS" - AC_TRY_LINK([#include ], - [pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], - [done=yes]) - - if test "x$done" = xyes; then - AC_MSG_RESULT([yes]) - PTHREAD_LIBS="-lpthread $PTHREAD_LIBS" - else - AC_MSG_RESULT([no]) - fi - fi - # - # FreeBSD 4.10 gcc forgets to use -lc_r instead of -lc - # - if test x"$done" = xno; then - AC_MSG_CHECKING([whether -lc_r fixes that]) - LIBS="-lc_r $PTHREAD_LIBS $save_LIBS" - AC_TRY_LINK([#include ], - [pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], - [done=yes]) - - if test "x$done" = xyes; then - AC_MSG_RESULT([yes]) - PTHREAD_LIBS="-lc_r $PTHREAD_LIBS" - else - AC_MSG_RESULT([no]) - fi - fi - if test x"$done" = xno; then - # OK, we have run out of ideas - AC_MSG_WARN([Impossible to determine how to use pthreads with shared libraries]) - - # so it's not safe to assume that we may use pthreads - acx_pthread_ok=no - fi - - CFLAGS="$save_CFLAGS" - LIBS="$save_LIBS" - CC="$save_CC" -else - PTHREAD_CC="$CC" -fi - -AC_SUBST(PTHREAD_LIBS) -AC_SUBST(PTHREAD_CFLAGS) -AC_SUBST(PTHREAD_CC) - -# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: -if test x"$acx_pthread_ok" = xyes; then - ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1]) - : -else - acx_pthread_ok=no - $2 -fi -AC_LANG_RESTORE -])dnl ACX_PTHREAD diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/google_namespace.m4 b/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/google_namespace.m4 deleted file mode 100644 index 79e0a6d42a6b..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/google_namespace.m4 +++ /dev/null @@ -1,36 +0,0 @@ -# Allow users to override the namespace we define our application's classes in -# Arg $1 is the default namespace to use if --enable-namespace isn't present. - -# In general, $1 should be 'google', so we put all our exported symbols in a -# unique namespace that is not likely to conflict with anyone else. However, -# when it makes sense -- for instance, when publishing stl-like code -- you -# may want to go with a different default, like 'std'. - -AC_DEFUN([AC_DEFINE_GOOGLE_NAMESPACE], - [google_namespace_default=[$1] - AC_ARG_ENABLE(namespace, [ --enable-namespace=FOO to define these Google - classes in the FOO namespace. --disable-namespace - to define them in the global namespace. Default - is to define them in namespace $1.], - [case "$enableval" in - yes) google_namespace="$google_namespace_default" ;; - no) google_namespace="" ;; - *) google_namespace="$enableval" ;; - esac], - [google_namespace="$google_namespace_default"]) - if test -n "$google_namespace"; then - ac_google_namespace="$google_namespace" - ac_google_start_namespace="namespace $google_namespace {" - ac_google_end_namespace="}" - else - ac_google_namespace="" - ac_google_start_namespace="" - ac_google_end_namespace="" - fi - AC_DEFINE_UNQUOTED(GOOGLE_NAMESPACE, $ac_google_namespace, - Namespace for Google classes) - AC_DEFINE_UNQUOTED(_START_GOOGLE_NAMESPACE_, $ac_google_start_namespace, - Puts following code inside the Google namespace) - AC_DEFINE_UNQUOTED(_END_GOOGLE_NAMESPACE_, $ac_google_end_namespace, - Stops putting the code inside the Google namespace) -]) diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/libtool.m4 b/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/libtool.m4 deleted file mode 100644 index a3fee5360f64..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/libtool.m4 +++ /dev/null @@ -1,7377 +0,0 @@ -# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008 Free Software Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -m4_define([_LT_COPYING], [dnl -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008 Free Software Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -]) - -# serial 56 LT_INIT - - -# LT_PREREQ(VERSION) -# ------------------ -# Complain and exit if this libtool version is less that VERSION. -m4_defun([LT_PREREQ], -[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, - [m4_default([$3], - [m4_fatal([Libtool version $1 or higher is required], - 63)])], - [$2])]) - - -# _LT_CHECK_BUILDDIR -# ------------------ -# Complain if the absolute build directory name contains unusual characters -m4_defun([_LT_CHECK_BUILDDIR], -[case `pwd` in - *\ * | *\ *) - AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; -esac -]) - - -# LT_INIT([OPTIONS]) -# ------------------ -AC_DEFUN([LT_INIT], -[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT -AC_BEFORE([$0], [LT_LANG])dnl -AC_BEFORE([$0], [LT_OUTPUT])dnl -AC_BEFORE([$0], [LTDL_INIT])dnl -m4_require([_LT_CHECK_BUILDDIR])dnl - -dnl Autoconf doesn't catch unexpanded LT_ macros by default: -m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl -m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl -dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 -dnl unless we require an AC_DEFUNed macro: -AC_REQUIRE([LTOPTIONS_VERSION])dnl -AC_REQUIRE([LTSUGAR_VERSION])dnl -AC_REQUIRE([LTVERSION_VERSION])dnl -AC_REQUIRE([LTOBSOLETE_VERSION])dnl -m4_require([_LT_PROG_LTMAIN])dnl - -dnl Parse OPTIONS -_LT_SET_OPTIONS([$0], [$1]) - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -AC_SUBST(LIBTOOL)dnl - -_LT_SETUP - -# Only expand once: -m4_define([LT_INIT]) -])# LT_INIT - -# Old names: -AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) -AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PROG_LIBTOOL], []) -dnl AC_DEFUN([AM_PROG_LIBTOOL], []) - - -# _LT_CC_BASENAME(CC) -# ------------------- -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -m4_defun([_LT_CC_BASENAME], -[for cc_temp in $1""; do - case $cc_temp in - compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; - distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` -]) - - -# _LT_FILEUTILS_DEFAULTS -# ---------------------- -# It is okay to use these file commands and assume they have been set -# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. -m4_defun([_LT_FILEUTILS_DEFAULTS], -[: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} -])# _LT_FILEUTILS_DEFAULTS - - -# _LT_SETUP -# --------- -m4_defun([_LT_SETUP], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -_LT_DECL([], [host_alias], [0], [The host system])dnl -_LT_DECL([], [host], [0])dnl -_LT_DECL([], [host_os], [0])dnl -dnl -_LT_DECL([], [build_alias], [0], [The build system])dnl -_LT_DECL([], [build], [0])dnl -_LT_DECL([], [build_os], [0])dnl -dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -dnl -AC_REQUIRE([AC_PROG_LN_S])dnl -test -z "$LN_S" && LN_S="ln -s" -_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl -dnl -AC_REQUIRE([LT_CMD_MAX_LEN])dnl -_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl -_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl -dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_CHECK_SHELL_FEATURES])dnl -m4_require([_LT_CMD_RELOAD])dnl -m4_require([_LT_CHECK_MAGIC_METHOD])dnl -m4_require([_LT_CMD_OLD_ARCHIVE])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl - -_LT_CONFIG_LIBTOOL_INIT([ -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi -]) -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - -_LT_CHECK_OBJDIR - -m4_require([_LT_TAG_COMPILER])dnl -_LT_PROG_ECHO_BACKSLASH - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\([["`\\]]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld="$lt_cv_prog_gnu_ld" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -_LT_CC_BASENAME([$compiler]) - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - _LT_PATH_MAGIC - fi - ;; -esac - -# Use C for the default configuration in the libtool script -LT_SUPPORTED_TAG([CC]) -_LT_LANG_C_CONFIG -_LT_LANG_DEFAULT_CONFIG -_LT_CONFIG_COMMANDS -])# _LT_SETUP - - -# _LT_PROG_LTMAIN -# --------------- -# Note that this code is called both from `configure', and `config.status' -# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, -# `config.status' has no value for ac_aux_dir unless we are using Automake, -# so we pass a copy along to make sure it has a sensible value anyway. -m4_defun([_LT_PROG_LTMAIN], -[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl -_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) -ltmain="$ac_aux_dir/ltmain.sh" -])# _LT_PROG_LTMAIN - - -## ------------------------------------- ## -## Accumulate code for creating libtool. ## -## ------------------------------------- ## - -# So that we can recreate a full libtool script including additional -# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS -# in macros and then make a single call at the end using the `libtool' -# label. - - -# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) -# ---------------------------------------- -# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL_INIT], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_INIT], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_INIT]) - - -# _LT_CONFIG_LIBTOOL([COMMANDS]) -# ------------------------------ -# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) - - -# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) -# ----------------------------------------------------- -m4_defun([_LT_CONFIG_SAVE_COMMANDS], -[_LT_CONFIG_LIBTOOL([$1]) -_LT_CONFIG_LIBTOOL_INIT([$2]) -]) - - -# _LT_FORMAT_COMMENT([COMMENT]) -# ----------------------------- -# Add leading comment marks to the start of each line, and a trailing -# full-stop to the whole comment if one is not present already. -m4_define([_LT_FORMAT_COMMENT], -[m4_ifval([$1], [ -m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], - [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) -)]) - - - -## ------------------------ ## -## FIXME: Eliminate VARNAME ## -## ------------------------ ## - - -# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) -# ------------------------------------------------------------------- -# CONFIGNAME is the name given to the value in the libtool script. -# VARNAME is the (base) name used in the configure script. -# VALUE may be 0, 1 or 2 for a computed quote escaped value based on -# VARNAME. Any other value will be used directly. -m4_define([_LT_DECL], -[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], - [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], - [m4_ifval([$1], [$1], [$2])]) - lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) - m4_ifval([$4], - [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) - lt_dict_add_subkey([lt_decl_dict], [$2], - [tagged?], [m4_ifval([$5], [yes], [no])])]) -]) - - -# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) -# -------------------------------------------------------- -m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) - - -# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_tag_varnames], -[_lt_decl_filter([tagged?], [yes], $@)]) - - -# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) -# --------------------------------------------------------- -m4_define([_lt_decl_filter], -[m4_case([$#], - [0], [m4_fatal([$0: too few arguments: $#])], - [1], [m4_fatal([$0: too few arguments: $#: $1])], - [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], - [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], - [lt_dict_filter([lt_decl_dict], $@)])[]dnl -]) - - -# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) -# -------------------------------------------------- -m4_define([lt_decl_quote_varnames], -[_lt_decl_filter([value], [1], $@)]) - - -# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_dquote_varnames], -[_lt_decl_filter([value], [2], $@)]) - - -# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_varnames_tagged], -[m4_assert([$# <= 2])dnl -_$0(m4_quote(m4_default([$1], [[, ]])), - m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), - m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) -m4_define([_lt_decl_varnames_tagged], -[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) - - -# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_all_varnames], -[_$0(m4_quote(m4_default([$1], [[, ]])), - m4_if([$2], [], - m4_quote(lt_decl_varnames), - m4_quote(m4_shift($@))))[]dnl -]) -m4_define([_lt_decl_all_varnames], -[lt_join($@, lt_decl_varnames_tagged([$1], - lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl -]) - - -# _LT_CONFIG_STATUS_DECLARE([VARNAME]) -# ------------------------------------ -# Quote a variable value, and forward it to `config.status' so that its -# declaration there will have the same value as in `configure'. VARNAME -# must have a single quote delimited value for this to work. -m4_define([_LT_CONFIG_STATUS_DECLARE], -[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`']) - - -# _LT_CONFIG_STATUS_DECLARATIONS -# ------------------------------ -# We delimit libtool config variables with single quotes, so when -# we write them to config.status, we have to be sure to quote all -# embedded single quotes properly. In configure, this macro expands -# each variable declared with _LT_DECL (and _LT_TAGDECL) into: -# -# ='`$ECHO "X$" | $Xsed -e "$delay_single_quote_subst"`' -m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], -[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), - [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAGS -# ---------------- -# Output comment and list of tags supported by the script -m4_defun([_LT_LIBTOOL_TAGS], -[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl -available_tags="_LT_TAGS"dnl -]) - - -# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) -# ----------------------------------- -# Extract the dictionary values for VARNAME (optionally with TAG) and -# expand to a commented shell variable setting: -# -# # Some comment about what VAR is for. -# visible_name=$lt_internal_name -m4_define([_LT_LIBTOOL_DECLARE], -[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], - [description])))[]dnl -m4_pushdef([_libtool_name], - m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl -m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), - [0], [_libtool_name=[$]$1], - [1], [_libtool_name=$lt_[]$1], - [2], [_libtool_name=$lt_[]$1], - [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl -m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl -]) - - -# _LT_LIBTOOL_CONFIG_VARS -# ----------------------- -# Produce commented declarations of non-tagged libtool config variables -# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' -# script. Tagged libtool config variables (even for the LIBTOOL CONFIG -# section) are produced by _LT_LIBTOOL_TAG_VARS. -m4_defun([_LT_LIBTOOL_CONFIG_VARS], -[m4_foreach([_lt_var], - m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAG_VARS(TAG) -# ------------------------- -m4_define([_LT_LIBTOOL_TAG_VARS], -[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) - - -# _LT_TAGVAR(VARNAME, [TAGNAME]) -# ------------------------------ -m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) - - -# _LT_CONFIG_COMMANDS -# ------------------- -# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of -# variables for single and double quote escaping we saved from calls -# to _LT_DECL, we can put quote escaped variables declarations -# into `config.status', and then the shell code to quote escape them in -# for loops in `config.status'. Finally, any additional code accumulated -# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. -m4_defun([_LT_CONFIG_COMMANDS], -[AC_PROVIDE_IFELSE([LT_OUTPUT], - dnl If the libtool generation code has been placed in $CONFIG_LT, - dnl instead of duplicating it all over again into config.status, - dnl then we will have config.status run $CONFIG_LT later, so it - dnl needs to know what name is stored there: - [AC_CONFIG_COMMANDS([libtool], - [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], - dnl If the libtool generation code is destined for config.status, - dnl expand the accumulated commands and init code now: - [AC_CONFIG_COMMANDS([libtool], - [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) -])#_LT_CONFIG_COMMANDS - - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], -[ - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -_LT_CONFIG_STATUS_DECLARATIONS -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# Quote evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_quote_varnames); do - case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_dquote_varnames); do - case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Fix-up fallback echo if it was mangled by the above quoting rules. -case \$lt_ECHO in -*'\\\[$]0 --fallback-echo"')dnl " - lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\` - ;; -esac - -_LT_OUTPUT_LIBTOOL_INIT -]) - - -# LT_OUTPUT -# --------- -# This macro allows early generation of the libtool script (before -# AC_OUTPUT is called), incase it is used in configure for compilation -# tests. -AC_DEFUN([LT_OUTPUT], -[: ${CONFIG_LT=./config.lt} -AC_MSG_NOTICE([creating $CONFIG_LT]) -cat >"$CONFIG_LT" <<_LTEOF -#! $SHELL -# Generated by $as_me. -# Run this file to recreate a libtool stub with the current configuration. - -lt_cl_silent=false -SHELL=\${CONFIG_SHELL-$SHELL} -_LTEOF - -cat >>"$CONFIG_LT" <<\_LTEOF -AS_SHELL_SANITIZE -_AS_PREPARE - -exec AS_MESSAGE_FD>&1 -exec AS_MESSAGE_LOG_FD>>config.log -{ - echo - AS_BOX([Running $as_me.]) -} >&AS_MESSAGE_LOG_FD - -lt_cl_help="\ -\`$as_me' creates a local libtool stub from the current configuration, -for use in further configure time tests before the real libtool is -generated. - -Usage: $[0] [[OPTIONS]] - - -h, --help print this help, then exit - -V, --version print version number, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - -Report bugs to ." - -lt_cl_version="\ -m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl -m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) -configured by $[0], generated by m4_PACKAGE_STRING. - -Copyright (C) 2008 Free Software Foundation, Inc. -This config.lt script is free software; the Free Software Foundation -gives unlimited permision to copy, distribute and modify it." - -while test $[#] != 0 -do - case $[1] in - --version | --v* | -V ) - echo "$lt_cl_version"; exit 0 ;; - --help | --h* | -h ) - echo "$lt_cl_help"; exit 0 ;; - --debug | --d* | -d ) - debug=: ;; - --quiet | --q* | --silent | --s* | -q ) - lt_cl_silent=: ;; - - -*) AC_MSG_ERROR([unrecognized option: $[1] -Try \`$[0] --help' for more information.]) ;; - - *) AC_MSG_ERROR([unrecognized argument: $[1] -Try \`$[0] --help' for more information.]) ;; - esac - shift -done - -if $lt_cl_silent; then - exec AS_MESSAGE_FD>/dev/null -fi -_LTEOF - -cat >>"$CONFIG_LT" <<_LTEOF -_LT_OUTPUT_LIBTOOL_COMMANDS_INIT -_LTEOF - -cat >>"$CONFIG_LT" <<\_LTEOF -AC_MSG_NOTICE([creating $ofile]) -_LT_OUTPUT_LIBTOOL_COMMANDS -AS_EXIT(0) -_LTEOF -chmod +x "$CONFIG_LT" - -# configure is writing to config.log, but config.lt does its own redirection, -# appending to config.log, which fails on DOS, as config.log is still kept -# open by configure. Here we exec the FD to /dev/null, effectively closing -# config.log, so it can be properly (re)opened and appended to by config.lt. -if test "$no_create" != yes; then - lt_cl_success=: - test "$silent" = yes && - lt_config_lt_args="$lt_config_lt_args --quiet" - exec AS_MESSAGE_LOG_FD>/dev/null - $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false - exec AS_MESSAGE_LOG_FD>>config.log - $lt_cl_success || AS_EXIT(1) -fi -])# LT_OUTPUT - - -# _LT_CONFIG(TAG) -# --------------- -# If TAG is the built-in tag, create an initial libtool script with a -# default configuration from the untagged config vars. Otherwise add code -# to config.status for appending the configuration named by TAG from the -# matching tagged config vars. -m4_defun([_LT_CONFIG], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_CONFIG_SAVE_COMMANDS([ - m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl - m4_if(_LT_TAG, [C], [ - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -_LT_COPYING -_LT_LIBTOOL_TAGS - -# ### BEGIN LIBTOOL CONFIG -_LT_LIBTOOL_CONFIG_VARS -_LT_LIBTOOL_TAG_VARS -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - _LT_PROG_LTMAIN - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - _LT_PROG_XSI_SHELLFNS - - sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" -], -[cat <<_LT_EOF >> "$ofile" - -dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded -dnl in a comment (ie after a #). -# ### BEGIN LIBTOOL TAG CONFIG: $1 -_LT_LIBTOOL_TAG_VARS(_LT_TAG) -# ### END LIBTOOL TAG CONFIG: $1 -_LT_EOF -])dnl /m4_if -], -[m4_if([$1], [], [ - PACKAGE='$PACKAGE' - VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' - RM='$RM' - ofile='$ofile'], []) -])dnl /_LT_CONFIG_SAVE_COMMANDS -])# _LT_CONFIG - - -# LT_SUPPORTED_TAG(TAG) -# --------------------- -# Trace this macro to discover what tags are supported by the libtool -# --tag option, using: -# autoconf --trace 'LT_SUPPORTED_TAG:$1' -AC_DEFUN([LT_SUPPORTED_TAG], []) - - -# C support is built-in for now -m4_define([_LT_LANG_C_enabled], []) -m4_define([_LT_TAGS], []) - - -# LT_LANG(LANG) -# ------------- -# Enable libtool support for the given language if not already enabled. -AC_DEFUN([LT_LANG], -[AC_BEFORE([$0], [LT_OUTPUT])dnl -m4_case([$1], - [C], [_LT_LANG(C)], - [C++], [_LT_LANG(CXX)], - [Java], [_LT_LANG(GCJ)], - [Fortran 77], [_LT_LANG(F77)], - [Fortran], [_LT_LANG(FC)], - [Windows Resource], [_LT_LANG(RC)], - [m4_ifdef([_LT_LANG_]$1[_CONFIG], - [_LT_LANG($1)], - [m4_fatal([$0: unsupported language: "$1"])])])dnl -])# LT_LANG - - -# _LT_LANG(LANGNAME) -# ------------------ -m4_defun([_LT_LANG], -[m4_ifdef([_LT_LANG_]$1[_enabled], [], - [LT_SUPPORTED_TAG([$1])dnl - m4_append([_LT_TAGS], [$1 ])dnl - m4_define([_LT_LANG_]$1[_enabled], [])dnl - _LT_LANG_$1_CONFIG($1)])dnl -])# _LT_LANG - - -# _LT_LANG_DEFAULT_CONFIG -# ----------------------- -m4_defun([_LT_LANG_DEFAULT_CONFIG], -[AC_PROVIDE_IFELSE([AC_PROG_CXX], - [LT_LANG(CXX)], - [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) - -AC_PROVIDE_IFELSE([AC_PROG_F77], - [LT_LANG(F77)], - [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) - -AC_PROVIDE_IFELSE([AC_PROG_FC], - [LT_LANG(FC)], - [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) - -dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal -dnl pulling things in needlessly. -AC_PROVIDE_IFELSE([AC_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([LT_PROG_GCJ], - [LT_LANG(GCJ)], - [m4_ifdef([AC_PROG_GCJ], - [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([A][M_PROG_GCJ], - [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([LT_PROG_GCJ], - [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) - -AC_PROVIDE_IFELSE([LT_PROG_RC], - [LT_LANG(RC)], - [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) -])# _LT_LANG_DEFAULT_CONFIG - -# Obsolete macros: -AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) -AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) -AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) -AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_CXX], []) -dnl AC_DEFUN([AC_LIBTOOL_F77], []) -dnl AC_DEFUN([AC_LIBTOOL_FC], []) -dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) - - -# _LT_TAG_COMPILER -# ---------------- -m4_defun([_LT_TAG_COMPILER], -[AC_REQUIRE([AC_PROG_CC])dnl - -_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl -_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl -_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl -_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC -])# _LT_TAG_COMPILER - - -# _LT_COMPILER_BOILERPLATE -# ------------------------ -# Check for compiler boilerplate output or warnings with -# the simple compiler test code. -m4_defun([_LT_COMPILER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* -])# _LT_COMPILER_BOILERPLATE - - -# _LT_LINKER_BOILERPLATE -# ---------------------- -# Check for linker boilerplate output or warnings with -# the simple link test code. -m4_defun([_LT_LINKER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* -])# _LT_LINKER_BOILERPLATE - -# _LT_REQUIRED_DARWIN_CHECKS -# ------------------------- -m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ - case $host_os in - rhapsody* | darwin*) - AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) - AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) - AC_CHECK_TOOL([LIPO], [lipo], [:]) - AC_CHECK_TOOL([OTOOL], [otool], [:]) - AC_CHECK_TOOL([OTOOL64], [otool64], [:]) - _LT_DECL([], [DSYMUTIL], [1], - [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) - _LT_DECL([], [NMEDIT], [1], - [Tool to change global to local symbols on Mac OS X]) - _LT_DECL([], [LIPO], [1], - [Tool to manipulate fat objects and archives on Mac OS X]) - _LT_DECL([], [OTOOL], [1], - [ldd/readelf like tool for Mach-O binaries on Mac OS X]) - _LT_DECL([], [OTOOL64], [1], - [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) - - AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], - [lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&AS_MESSAGE_LOG_FD - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi]) - AC_CACHE_CHECK([for -exported_symbols_list linker flag], - [lt_cv_ld_exported_symbols_list], - [lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [lt_cv_ld_exported_symbols_list=yes], - [lt_cv_ld_exported_symbols_list=no]) - LDFLAGS="$save_LDFLAGS" - ]) - case $host_os in - rhapsody* | darwin1.[[012]]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[[012]]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - if test "$DSYMUTIL" != ":"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac -]) - - -# _LT_DARWIN_LINKER_FEATURES -# -------------------------- -# Checks for linker and compiler features on darwin -m4_defun([_LT_DARWIN_LINKER_FEATURES], -[ - m4_require([_LT_REQUIRED_DARWIN_CHECKS]) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_automatic, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_TAGVAR(whole_archive_flag_spec, $1)='' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=echo - _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - m4_if([$1], [CXX], -[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then - _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" - fi -],[]) - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi -]) - -# _LT_SYS_MODULE_PATH_AIX -# ----------------------- -# Links a minimal program and checks the executable -# for the system default hardcoded library path. In most cases, -# this is /usr/lib:/lib, but when the MPI compilers are used -# the location of the communication and MPI libs are included too. -# If we don't find anything, use the default library path according -# to the aix ld manual. -m4_defun([_LT_SYS_MODULE_PATH_AIX], -[m4_require([_LT_DECL_SED])dnl -AC_LINK_IFELSE(AC_LANG_PROGRAM,[ -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi],[]) -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi -])# _LT_SYS_MODULE_PATH_AIX - - -# _LT_SHELL_INIT(ARG) -# ------------------- -m4_define([_LT_SHELL_INIT], -[ifdef([AC_DIVERSION_NOTICE], - [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], - [AC_DIVERT_PUSH(NOTICE)]) -$1 -AC_DIVERT_POP -])# _LT_SHELL_INIT - - -# _LT_PROG_ECHO_BACKSLASH -# ----------------------- -# Add some code to the start of the generated configure script which -# will find an echo command which doesn't interpret backslashes. -m4_defun([_LT_PROG_ECHO_BACKSLASH], -[_LT_SHELL_INIT([ -# Check that we are running under the correct shell. -SHELL=${CONFIG_SHELL-/bin/sh} - -case X$lt_ECHO in -X*--fallback-echo) - # Remove one level of quotation (which was required for Make). - ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` - ;; -esac - -ECHO=${lt_ECHO-echo} -if test "X[$]1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X[$]1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then - # Yippee, $ECHO works! - : -else - # Restart under the correct shell. - exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} -fi - -if test "X[$]1" = X--fallback-echo; then - # used as fallback echo - shift - cat <<_LT_EOF -[$]* -_LT_EOF - exit 0 -fi - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test -z "$lt_ECHO"; then - if test "X${echo_test_string+set}" != Xset; then - # find a string as large as possible, as long as the shell can cope with it - for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do - # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... - if { echo_test_string=`eval $cmd`; } 2>/dev/null && - { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null - then - break - fi - done - fi - - if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - : - else - # The Solaris, AIX, and Digital Unix default echo programs unquote - # backslashes. This makes it impossible to quote backslashes using - # echo "$something" | sed 's/\\/\\\\/g' - # - # So, first we look for a working echo in the user's PATH. - - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for dir in $PATH /usr/ucb; do - IFS="$lt_save_ifs" - if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && - test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - ECHO="$dir/echo" - break - fi - done - IFS="$lt_save_ifs" - - if test "X$ECHO" = Xecho; then - # We didn't find a better echo, so look for alternatives. - if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # This shell has a builtin print -r that does the trick. - ECHO='print -r' - elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && - test "X$CONFIG_SHELL" != X/bin/ksh; then - # If we have ksh, try running configure again with it. - ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} - export ORIGINAL_CONFIG_SHELL - CONFIG_SHELL=/bin/ksh - export CONFIG_SHELL - exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} - else - # Try using printf. - ECHO='printf %s\n' - if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # Cool, printf works - : - elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL - export CONFIG_SHELL - SHELL="$CONFIG_SHELL" - export SHELL - ECHO="$CONFIG_SHELL [$]0 --fallback-echo" - elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - ECHO="$CONFIG_SHELL [$]0 --fallback-echo" - else - # maybe with a smaller string... - prev=: - - for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do - if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null - then - break - fi - prev="$cmd" - done - - if test "$prev" != 'sed 50q "[$]0"'; then - echo_test_string=`eval $prev` - export echo_test_string - exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} - else - # Oops. We lost completely, so just stick with echo. - ECHO=echo - fi - fi - fi - fi - fi -fi - -# Copy echo and quote the copy suitably for passing to libtool from -# the Makefile, instead of quoting the original, which is used later. -lt_ECHO=$ECHO -if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then - lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" -fi - -AC_SUBST(lt_ECHO) -]) -_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) -_LT_DECL([], [ECHO], [1], - [An echo program that does not interpret backslashes]) -])# _LT_PROG_ECHO_BACKSLASH - - -# _LT_ENABLE_LOCK -# --------------- -m4_defun([_LT_ENABLE_LOCK], -[AC_ARG_ENABLE([libtool-lock], - [AS_HELP_STRING([--disable-libtool-lock], - [avoid locking (might break parallel builds)])]) -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '[#]line __oline__ "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, - [AC_LANG_PUSH(C) - AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) - AC_LANG_POP]) - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks="$enable_libtool_lock" -])# _LT_ENABLE_LOCK - - -# _LT_CMD_OLD_ARCHIVE -# ------------------- -m4_defun([_LT_CMD_OLD_ARCHIVE], -[AC_CHECK_TOOL(AR, ar, false) -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru -_LT_DECL([], [AR], [1], [The archiver]) -_LT_DECL([], [AR_FLAGS], [1]) - -AC_CHECK_TOOL(STRIP, strip, :) -test -z "$STRIP" && STRIP=: -_LT_DECL([], [STRIP], [1], [A symbol stripping program]) - -AC_CHECK_TOOL(RANLIB, ranlib, :) -test -z "$RANLIB" && RANLIB=: -_LT_DECL([], [RANLIB], [1], - [Commands used to install an old-style archive]) - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi -_LT_DECL([], [old_postinstall_cmds], [2]) -_LT_DECL([], [old_postuninstall_cmds], [2]) -_LT_TAGDECL([], [old_archive_cmds], [2], - [Commands used to build an old-style archive]) -])# _LT_CMD_OLD_ARCHIVE - - -# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------------------- -# Check whether the given compiler option works -AC_DEFUN([_LT_COMPILER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$3" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - fi - $RM conftest* -]) - -if test x"[$]$2" = xyes; then - m4_if([$5], , :, [$5]) -else - m4_if([$6], , :, [$6]) -fi -])# _LT_COMPILER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) - - -# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------- -# Check whether the given linker option works -AC_DEFUN([_LT_LINKER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $3" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&AS_MESSAGE_LOG_FD - $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - else - $2=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" -]) - -if test x"[$]$2" = xyes; then - m4_if([$4], , :, [$4]) -else - m4_if([$5], , :, [$5]) -fi -])# _LT_LINKER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) - - -# LT_CMD_MAX_LEN -#--------------- -AC_DEFUN([LT_CMD_MAX_LEN], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -# find the maximum length of command line arguments -AC_MSG_CHECKING([the maximum length of command line arguments]) -AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ - = "XX$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac -]) -if test -n $lt_cv_sys_max_cmd_len ; then - AC_MSG_RESULT($lt_cv_sys_max_cmd_len) -else - AC_MSG_RESULT(none) -fi -max_cmd_len=$lt_cv_sys_max_cmd_len -_LT_DECL([], [max_cmd_len], [0], - [What is the maximum length of a command?]) -])# LT_CMD_MAX_LEN - -# Old name: -AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) - - -# _LT_HEADER_DLFCN -# ---------------- -m4_defun([_LT_HEADER_DLFCN], -[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl -])# _LT_HEADER_DLFCN - - -# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, -# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) -# ---------------------------------------------------------------- -m4_defun([_LT_TRY_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test "$cross_compiling" = yes; then : - [$4] -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -[#line __oline__ "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -}] -_LT_EOF - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) $1 ;; - x$lt_dlneed_uscore) $2 ;; - x$lt_dlunknown|x*) $3 ;; - esac - else : - # compilation failed - $3 - fi -fi -rm -fr conftest* -])# _LT_TRY_DLOPEN_SELF - - -# LT_SYS_DLOPEN_SELF -# ------------------ -AC_DEFUN([LT_SYS_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ]) - ;; - - *) - AC_CHECK_FUNC([shl_load], - [lt_cv_dlopen="shl_load"], - [AC_CHECK_LIB([dld], [shl_load], - [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], - [AC_CHECK_FUNC([dlopen], - [lt_cv_dlopen="dlopen"], - [AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], - [AC_CHECK_LIB([svld], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], - [AC_CHECK_LIB([dld], [dld_link], - [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) - ]) - ]) - ]) - ]) - ]) - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - AC_CACHE_CHECK([whether a program can dlopen itself], - lt_cv_dlopen_self, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, - lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) - ]) - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - AC_CACHE_CHECK([whether a statically linked program can dlopen itself], - lt_cv_dlopen_self_static, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, - lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) - ]) - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi -_LT_DECL([dlopen_support], [enable_dlopen], [0], - [Whether dlopen is supported]) -_LT_DECL([dlopen_self], [enable_dlopen_self], [0], - [Whether dlopen of programs is supported]) -_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], - [Whether dlopen of statically linked programs is supported]) -])# LT_SYS_DLOPEN_SELF - -# Old name: -AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) - - -# _LT_COMPILER_C_O([TAGNAME]) -# --------------------------- -# Check to see if options -c and -o are simultaneously supported by compiler. -# This macro does not hard code the compiler like AC_PROG_CC_C_O. -m4_defun([_LT_COMPILER_C_O], -[m4_require([_LT_DECL_SED])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - fi - fi - chmod u+w . 2>&AS_MESSAGE_LOG_FD - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* -]) -_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], - [Does compiler simultaneously support -c and -o options?]) -])# _LT_COMPILER_C_O - - -# _LT_COMPILER_FILE_LOCKS([TAGNAME]) -# ---------------------------------- -# Check to see if we can do hard links to lock some files if needed -m4_defun([_LT_COMPILER_FILE_LOCKS], -[m4_require([_LT_ENABLE_LOCK])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_COMPILER_C_O([$1]) - -hard_links="nottested" -if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - AC_MSG_CHECKING([if we can lock with hard links]) - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - AC_MSG_RESULT([$hard_links]) - if test "$hard_links" = no; then - AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) - need_locks=warn - fi -else - need_locks=no -fi -_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) -])# _LT_COMPILER_FILE_LOCKS - - -# _LT_CHECK_OBJDIR -# ---------------- -m4_defun([_LT_CHECK_OBJDIR], -[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], -[rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null]) -objdir=$lt_cv_objdir -_LT_DECL([], [objdir], [0], - [The name of the directory that contains temporary libtool files])dnl -m4_pattern_allow([LT_OBJDIR])dnl -AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", - [Define to the sub-directory in which libtool stores uninstalled libraries.]) -])# _LT_CHECK_OBJDIR - - -# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) -# -------------------------------------- -# Check hardcoding attributes. -m4_defun([_LT_LINKER_HARDCODE_LIBPATH], -[AC_MSG_CHECKING([how to hardcode library paths into programs]) -_LT_TAGVAR(hardcode_action, $1)= -if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || - test -n "$_LT_TAGVAR(runpath_var, $1)" || - test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && - test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then - # Linking always hardcodes the temporary library directory. - _LT_TAGVAR(hardcode_action, $1)=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - _LT_TAGVAR(hardcode_action, $1)=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - _LT_TAGVAR(hardcode_action, $1)=unsupported -fi -AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) - -if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || - test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi -_LT_TAGDECL([], [hardcode_action], [0], - [How to hardcode a shared library path into an executable]) -])# _LT_LINKER_HARDCODE_LIBPATH - - -# _LT_CMD_STRIPLIB -# ---------------- -m4_defun([_LT_CMD_STRIPLIB], -[m4_require([_LT_DECL_EGREP]) -striplib= -old_striplib= -AC_MSG_CHECKING([whether stripping libraries is possible]) -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - AC_MSG_RESULT([yes]) -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - fi - ;; - *) - AC_MSG_RESULT([no]) - ;; - esac -fi -_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) -_LT_DECL([], [striplib], [1]) -])# _LT_CMD_STRIPLIB - - -# _LT_SYS_DYNAMIC_LINKER([TAG]) -# ----------------------------- -# PORTME Fill in your ld.so characteristics -m4_defun([_LT_SYS_DYNAMIC_LINKER], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_OBJDUMP])dnl -m4_require([_LT_DECL_SED])dnl -AC_MSG_CHECKING([dynamic linker characteristics]) -m4_if([$1], - [], [ -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` - else - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[[lt_foo]]++; } - if (lt_freq[[lt_foo]] == 1) { print lt_foo; } -}'` - sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi]) -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[[4-9]]*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[[01]] | aix4.[[01]].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[[45]]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' -m4_if([$1], [],[ - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[[123]]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[[01]]* | freebsdelf3.[[01]]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ - freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[[3-9]]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # Some binutils ld are patched to set DT_RUNPATH - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ - LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], - [shlibpath_overrides_runpath=yes])]) - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[[89]] | openbsd2.[[89]].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -AC_MSG_RESULT([$dynamic_linker]) -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - -_LT_DECL([], [variables_saved_for_relink], [1], - [Variables whose values should be saved in libtool wrapper scripts and - restored at link time]) -_LT_DECL([], [need_lib_prefix], [0], - [Do we need the "lib" prefix for modules?]) -_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) -_LT_DECL([], [version_type], [0], [Library versioning type]) -_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) -_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) -_LT_DECL([], [shlibpath_overrides_runpath], [0], - [Is shlibpath searched before the hard-coded library search path?]) -_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) -_LT_DECL([], [library_names_spec], [1], - [[List of archive names. First name is the real one, the rest are links. - The last name is the one that the linker finds with -lNAME]]) -_LT_DECL([], [soname_spec], [1], - [[The coded name of the library, if different from the real name]]) -_LT_DECL([], [postinstall_cmds], [2], - [Command to use after installation of a shared archive]) -_LT_DECL([], [postuninstall_cmds], [2], - [Command to use after uninstallation of a shared archive]) -_LT_DECL([], [finish_cmds], [2], - [Commands used to finish a libtool library installation in a directory]) -_LT_DECL([], [finish_eval], [1], - [[As "finish_cmds", except a single script fragment to be evaled but - not shown]]) -_LT_DECL([], [hardcode_into_libs], [0], - [Whether we should hardcode library paths into libraries]) -_LT_DECL([], [sys_lib_search_path_spec], [2], - [Compile-time system search path for libraries]) -_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], - [Run-time system search path for libraries]) -])# _LT_SYS_DYNAMIC_LINKER - - -# _LT_PATH_TOOL_PREFIX(TOOL) -# -------------------------- -# find a file program which can recognize shared library -AC_DEFUN([_LT_PATH_TOOL_PREFIX], -[m4_require([_LT_DECL_EGREP])dnl -AC_MSG_CHECKING([for $1]) -AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, -[case $MAGIC_CMD in -[[\\/*] | ?:[\\/]*]) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR -dnl $ac_dummy forces splitting on constant user-supplied paths. -dnl POSIX.2 word splitting is done only on the output of word expansions, -dnl not every word. This closes a longstanding sh security hole. - ac_dummy="m4_if([$2], , $PATH, [$2])" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$1; then - lt_cv_path_MAGIC_CMD="$ac_dir/$1" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac]) -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - AC_MSG_RESULT($MAGIC_CMD) -else - AC_MSG_RESULT(no) -fi -_LT_DECL([], [MAGIC_CMD], [0], - [Used to examine libraries when file_magic_cmd begins with "file"])dnl -])# _LT_PATH_TOOL_PREFIX - -# Old name: -AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) - - -# _LT_PATH_MAGIC -# -------------- -# find a file program which can recognize a shared library -m4_defun([_LT_PATH_MAGIC], -[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) - else - MAGIC_CMD=: - fi -fi -])# _LT_PATH_MAGIC - - -# LT_PATH_LD -# ---------- -# find the pathname to the GNU or non-GNU linker -AC_DEFUN([LT_PATH_LD], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl - -AC_ARG_WITH([gnu-ld], - [AS_HELP_STRING([--with-gnu-ld], - [assume the C compiler uses GNU ld @<:@default=no@:>@])], - [test "$withval" = no || with_gnu_ld=yes], - [with_gnu_ld=no])dnl - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by $CC]) - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [[\\/]]* | ?:[[\\/]]*) - re_direlt='/[[^/]][[^/]]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(lt_cv_path_LD, -[if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[[3-9]]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -esac -]) -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - -_LT_DECL([], [deplibs_check_method], [1], - [Method to check whether dependent libraries are shared objects]) -_LT_DECL([], [file_magic_cmd], [1], - [Command to use when deplibs_check_method == "file_magic"]) -])# _LT_CHECK_MAGIC_METHOD - - -# LT_PATH_NM -# ---------- -# find the pathname to a BSD- or MS-compatible name lister -AC_DEFUN([LT_PATH_NM], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, -[if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - : ${lt_cv_path_NM=no} -fi]) -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" -else - # Didn't find any BSD compatible name lister, look for dumpbin. - AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :) - AC_SUBST([DUMPBIN]) - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" - fi -fi -test -z "$NM" && NM=nm -AC_SUBST([NM]) -_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl - -AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], - [lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD) - cat conftest.out >&AS_MESSAGE_LOG_FD - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest*]) -])# LT_PATH_NM - -# Old names: -AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) -AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_PROG_NM], []) -dnl AC_DEFUN([AC_PROG_NM], []) - - -# LT_LIB_M -# -------- -# check for math library -AC_DEFUN([LT_LIB_M], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -LIBM= -case $host in -*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) - # These system don't have libm, or don't need it - ;; -*-ncr-sysv4.3*) - AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") - AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") - ;; -*) - AC_CHECK_LIB(m, cos, LIBM="-lm") - ;; -esac -AC_SUBST([LIBM]) -])# LT_LIB_M - -# Old name: -AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_CHECK_LIBM], []) - - -# _LT_COMPILER_NO_RTTI([TAGNAME]) -# ------------------------------- -m4_defun([_LT_COMPILER_NO_RTTI], -[m4_require([_LT_TAG_COMPILER])dnl - -_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - -if test "$GCC" = yes; then - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' - - _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], - lt_cv_prog_compiler_rtti_exceptions, - [-fno-rtti -fno-exceptions], [], - [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) -fi -_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], - [Compiler flag to turn off builtin functions]) -])# _LT_COMPILER_NO_RTTI - - -# _LT_CMD_GLOBAL_SYMBOLS -# ---------------------- -m4_defun([_LT_CMD_GLOBAL_SYMBOLS], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([LT_PATH_NM])dnl -AC_REQUIRE([LT_PATH_LD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_TAG_COMPILER])dnl - -# Check for command to grab the raw symbol name followed by C symbol from nm. -AC_MSG_CHECKING([command to parse $NM output from $compiler object]) -AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], -[ -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[[BCDEGRST]]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[[BCDT]]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[[ABCDGISTW]]' - ;; -hpux*) - if test "$host_cpu" = ia64; then - symcode='[[ABCDEGRST]]' - fi - ;; -irix* | nonstopux*) - symcode='[[BCDEGRST]]' - ;; -osf*) - symcode='[[BCDEGQRST]]' - ;; -solaris*) - symcode='[[BDRT]]' - ;; -sco3.2v5*) - symcode='[[DT]]' - ;; -sysv4.2uw2*) - symcode='[[DT]]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[[ABDT]]' - ;; -sysv4) - symcode='[[DFNSTU]]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[[ABCDGIRSTW]]' ;; -esac - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK ['"\ -" {last_section=section; section=\$ 3};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx]" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if AC_TRY_EVAL(ac_compile); then - # Now try to grab the symbols. - nlist=conftest.nm - if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[[]] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD - fi - else - echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done -]) -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - AC_MSG_RESULT(failed) -else - AC_MSG_RESULT(ok) -fi - -_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], - [Take the output of nm and produce a listing of raw symbols and C names]) -_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], - [Transform the output of nm in a proper C declaration]) -_LT_DECL([global_symbol_to_c_name_address], - [lt_cv_sys_global_symbol_to_c_name_address], [1], - [Transform the output of nm in a C name address pair]) -_LT_DECL([global_symbol_to_c_name_address_lib_prefix], - [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], - [Transform the output of nm in a C name address pair when lib prefix is needed]) -]) # _LT_CMD_GLOBAL_SYMBOLS - - -# _LT_COMPILER_PIC([TAGNAME]) -# --------------------------- -m4_defun([_LT_COMPILER_PIC], -[m4_require([_LT_TAG_COMPILER])dnl -_LT_TAGVAR(lt_prog_compiler_wl, $1)= -_LT_TAGVAR(lt_prog_compiler_pic, $1)= -_LT_TAGVAR(lt_prog_compiler_static, $1)= - -AC_MSG_CHECKING([for $compiler option to produce PIC]) -m4_if([$1], [CXX], [ - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - case $host_os in - aix[[4-9]]*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - dgux*) - case $cc_basename in - ec++*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - fi - ;; - aCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # KAI C++ Compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - ecpc* ) - # old Intel C++ for x86_64 which still supported -KPIC. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - icpc* ) - # Intel C++, used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xlc* | xlC*) - # IBM XL 8.0 on PPC - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd* | netbsdelf*-gnu) - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - cxx*) - # Digital/Compaq C++ - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - lcc*) - # Lucid - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - *) - ;; - esac - ;; - vxworks*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -], -[ - if test "$GCC" = yes; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - - hpux9* | hpux10* | hpux11*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC (with -KPIC) is the default. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. - ecc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' - _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - ccc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All Alpha code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xl*) - # IBM XL C 8.0/Fortran 10.1 on PPC - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - *Sun\ F*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='' - ;; - esac - ;; - esac - ;; - - newsos6) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All OSF/1 code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - rdos*) - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - solaris*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; - *) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; - esac - ;; - - sunos4*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - unicos*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - - uts4*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -]) -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" - ;; -esac -AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) -_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], - [How to pass a linker flag through the compiler]) - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then - _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], - [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], - [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], - [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in - "" | " "*) ;; - *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; - esac], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) -fi -_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], - [Additional compiler flags for building library objects]) - -# -# Check to make sure the static flag actually works. -# -wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" -_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], - _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), - $lt_tmp_static_flag, - [], - [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) -_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], - [Compiler flag to prevent dynamic linking]) -])# _LT_COMPILER_PIC - - -# _LT_LINKER_SHLIBS([TAGNAME]) -# ---------------------------- -# See if the linker supports building shared libraries. -m4_defun([_LT_LINKER_SHLIBS], -[AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) -m4_if([$1], [CXX], [ - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - case $host_os in - aix[[4-9]]*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" - ;; - cygwin* | mingw* | cegcc*) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' - ;; - linux* | k*bsd*-gnu) - _LT_TAGVAR(link_all_deplibs, $1)=no - ;; - *) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] -], [ - runpath_var= - _LT_TAGVAR(allow_undefined_flag, $1)= - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(archive_cmds, $1)= - _LT_TAGVAR(archive_expsym_cmds, $1)= - _LT_TAGVAR(compiler_needs_object, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(hardcode_automatic, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= - _LT_TAGVAR(hardcode_libdir_separator, $1)= - _LT_TAGVAR(hardcode_minus_L, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_TAGVAR(inherit_rpath, $1)=no - _LT_TAGVAR(link_all_deplibs, $1)=unknown - _LT_TAGVAR(module_cmds, $1)= - _LT_TAGVAR(module_expsym_cmds, $1)= - _LT_TAGVAR(old_archive_from_new_cmds, $1)= - _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= - _LT_TAGVAR(thread_safe_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - _LT_TAGVAR(include_expsyms, $1)= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. -dnl Note also adjust exclude_expsyms for C++ above. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - linux* | k*bsd*-gnu) - _LT_TAGVAR(link_all_deplibs, $1)=no - ;; - esac - - _LT_TAGVAR(ld_shlibs, $1)=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - supports_anon_versioning=no - case `$LD -v 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[[3-9]]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test "$host_os" = linux-dietlibc; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no - then - tmp_addflag= - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - _LT_TAGVAR(whole_archive_flag_spec, $1)= - tmp_sharedflag='--shared' ;; - xl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - xlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' - _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - sunos4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - - if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then - runpath_var= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - _LT_TAGVAR(hardcode_direct, $1)=unsupported - fi - ;; - - aix[[4-9]]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' - - if test "$GCC" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - _LT_TAGVAR(link_all_deplibs, $1)=no - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - bsdi[[45]]*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - # FIXME: Should let the user specify the lib program. - _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' - _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - ;; - - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - dgux*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - freebsd1*) - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - hpux9*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - AC_LINK_IFELSE(int foo(void) {}, - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - ) - LDFLAGS="$save_LDFLAGS" - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - newsos6) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *nto* | *qnx*) - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - else - case $host_os in - openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - ;; - esac - fi - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - os2*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - solaris*) - _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - fi - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4) - case $host_vendor in - sni) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' - _LT_TAGVAR(hardcode_direct, $1)=no - ;; - motorola) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4.3*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - _LT_TAGVAR(ld_shlibs, $1)=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - if test x$host_vendor = xsni; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' - ;; - esac - fi - fi -]) -AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) -test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - -_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld - -_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl -_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl -_LT_DECL([], [extract_expsyms_cmds], [2], - [The commands to extract the exported symbol list from a shared archive]) - -# -# Do we need to explicitly link libc? -# -case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in -x|xyes) - # Assume -lc should be added - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $_LT_TAGVAR(archive_cmds, $1) in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - AC_MSG_CHECKING([whether -lc should be explicitly linked in]) - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if AC_TRY_EVAL(ac_compile) 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) - pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) - _LT_TAGVAR(allow_undefined_flag, $1)= - if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) - then - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - else - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - fi - _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)]) - ;; - esac - fi - ;; -esac - -_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], - [Whether or not to add -lc for building shared libraries]) -_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], - [enable_shared_with_static_runtimes], [0], - [Whether or not to disallow shared libs when runtime libs are static]) -_LT_TAGDECL([], [export_dynamic_flag_spec], [1], - [Compiler flag to allow reflexive dlopens]) -_LT_TAGDECL([], [whole_archive_flag_spec], [1], - [Compiler flag to generate shared objects directly from archives]) -_LT_TAGDECL([], [compiler_needs_object], [1], - [Whether the compiler copes with passing no objects directly]) -_LT_TAGDECL([], [old_archive_from_new_cmds], [2], - [Create an old-style archive from a shared archive]) -_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], - [Create a temporary old-style archive to link instead of a shared archive]) -_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) -_LT_TAGDECL([], [archive_expsym_cmds], [2]) -_LT_TAGDECL([], [module_cmds], [2], - [Commands used to build a loadable module if different from building - a shared archive.]) -_LT_TAGDECL([], [module_expsym_cmds], [2]) -_LT_TAGDECL([], [with_gnu_ld], [1], - [Whether we are building with GNU ld or not]) -_LT_TAGDECL([], [allow_undefined_flag], [1], - [Flag that allows shared libraries with undefined symbols to be built]) -_LT_TAGDECL([], [no_undefined_flag], [1], - [Flag that enforces no undefined symbols]) -_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], - [Flag to hardcode $libdir into a binary during linking. - This must work even if $libdir does not exist]) -_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], - [[If ld is used when linking, flag to hardcode $libdir into a binary - during linking. This must work even if $libdir does not exist]]) -_LT_TAGDECL([], [hardcode_libdir_separator], [1], - [Whether we need a single "-rpath" flag with a separated argument]) -_LT_TAGDECL([], [hardcode_direct], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes - DIR into the resulting binary]) -_LT_TAGDECL([], [hardcode_direct_absolute], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes - DIR into the resulting binary and the resulting library dependency is - "absolute", i.e impossible to change by setting ${shlibpath_var} if the - library is relocated]) -_LT_TAGDECL([], [hardcode_minus_L], [0], - [Set to "yes" if using the -LDIR flag during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_shlibpath_var], [0], - [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_automatic], [0], - [Set to "yes" if building a shared library automatically hardcodes DIR - into the library and all subsequent libraries and executables linked - against it]) -_LT_TAGDECL([], [inherit_rpath], [0], - [Set to yes if linker adds runtime paths of dependent libraries - to runtime path list]) -_LT_TAGDECL([], [link_all_deplibs], [0], - [Whether libtool must link a program against all its dependency libraries]) -_LT_TAGDECL([], [fix_srcfile_path], [1], - [Fix the shell variable $srcfile for the compiler]) -_LT_TAGDECL([], [always_export_symbols], [0], - [Set to "yes" if exported symbols are required]) -_LT_TAGDECL([], [export_symbols_cmds], [2], - [The commands to list exported symbols]) -_LT_TAGDECL([], [exclude_expsyms], [1], - [Symbols that should not be listed in the preloaded symbols]) -_LT_TAGDECL([], [include_expsyms], [1], - [Symbols that must always be exported]) -_LT_TAGDECL([], [prelink_cmds], [2], - [Commands necessary for linking programs (against libraries) with templates]) -_LT_TAGDECL([], [file_list_spec], [1], - [Specify filename containing input files]) -dnl FIXME: Not yet implemented -dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], -dnl [Compiler flag to generate thread safe objects]) -])# _LT_LINKER_SHLIBS - - -# _LT_LANG_C_CONFIG([TAG]) -# ------------------------ -# Ensure that the configuration variables for a C compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. -m4_defun([_LT_LANG_C_CONFIG], -[m4_require([_LT_DECL_EGREP])dnl -lt_save_CC="$CC" -AC_LANG_PUSH(C) - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - -_LT_TAG_COMPILER -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - LT_SYS_DLOPEN_SELF - _LT_CMD_STRIPLIB - - # Report which library types will actually be built - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_CONFIG($1) -fi -AC_LANG_POP -CC="$lt_save_CC" -])# _LT_LANG_C_CONFIG - - -# _LT_PROG_CXX -# ------------ -# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++ -# compiler, we have our own version here. -m4_defun([_LT_PROG_CXX], -[ -pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes]) -AC_PROG_CXX -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - AC_PROG_CXXCPP -else - _lt_caught_CXX_error=yes -fi -popdef([AC_MSG_ERROR]) -])# _LT_PROG_CXX - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([_LT_PROG_CXX], []) - - -# _LT_LANG_CXX_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a C++ compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. -m4_defun([_LT_LANG_CXX_CONFIG], -[AC_REQUIRE([_LT_PROG_CXX])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl - -AC_LANG_PUSH(C++) -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(compiler_needs_object, $1)=no -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the CXX compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_caught_CXX_error" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="int some_variable = 0;" - - # Code to be used in simple link tests - lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC=$CC - lt_save_LD=$LD - lt_save_GCC=$GCC - GCC=$GXX - lt_save_with_gnu_ld=$with_gnu_ld - lt_save_path_LD=$lt_cv_path_LD - if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx - else - $as_unset lt_cv_prog_gnu_ld - fi - if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX - else - $as_unset lt_cv_path_LD - fi - test -z "${LDCXX+set}" || LD=$LDCXX - CC=${CXX-"c++"} - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - # We don't want -fno-exception when compiling C++ code, so set the - # no_builtin_flag separately - if test "$GXX" = yes; then - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' - else - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - fi - - if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - LT_PATH_LD - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | - $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - - else - GXX=no - with_gnu_ld=no - wlarc= - fi - - # PORTME: fill in a description of your system's C++ link characteristics - AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) - _LT_TAGVAR(ld_shlibs, $1)=yes - case $host_os in - aix3*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aix[[4-9]]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' - - if test "$GXX" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to - # export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an empty - # executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared - # libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - freebsd[[12]]*) - # C++ shared libraries reported to be fairly broken before - # switch to ELF - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - freebsd-elf*) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - ;; - - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - gnu*) - ;; - - hpux9*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - *) - if test "$GXX" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' - fi - fi - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - esac - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc* | ecpc* ) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - case `$CC -V` in - *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*) - _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ - compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' - _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ - $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ - $RANLIB $oldlib' - _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - *) # Version 6 will use weak symbols - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - xl*) - # IBM XL 8.0 on PPC, with GNU ld - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - - lynxos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - m88k*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - - *nto* | *qnx*) - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - openbsd2*) - # C++ shared libraries are fairly broken - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd=echo - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - case $host in - osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; - *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; - esac - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - cxx*) - case $host in - osf3*) - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - ;; - *) - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ - $RM $lib.exp' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - case $host in - osf3*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - psos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(archive_cmds_need_lc,$1)=yes - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' - if $CC --version | $GREP -v '^2\.7' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - fi - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - vxworks*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) - test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - - _LT_TAGVAR(GCC, $1)="$GXX" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - CC=$lt_save_CC - LDCXX=$LD - LD=$lt_save_LD - GCC=$lt_save_GCC - with_gnu_ld=$lt_save_with_gnu_ld - lt_cv_path_LDCXX=$lt_cv_path_LD - lt_cv_path_LD=$lt_save_path_LD - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test "$_lt_caught_CXX_error" != yes - -AC_LANG_POP -])# _LT_LANG_CXX_CONFIG - - -# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) -# --------------------------------- -# Figure out "hidden" library dependencies from verbose -# compiler output when linking a shared library. -# Parse the compiler output and extract the necessary -# objects, libraries and library flags. -m4_defun([_LT_SYS_HIDDEN_LIBDEPS], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -# Dependencies to place before and after the object being linked: -_LT_TAGVAR(predep_objects, $1)= -_LT_TAGVAR(postdep_objects, $1)= -_LT_TAGVAR(predeps, $1)= -_LT_TAGVAR(postdeps, $1)= -_LT_TAGVAR(compiler_lib_search_path, $1)= - -dnl we can't use the lt_simple_compile_test_code here, -dnl because it contains code intended for an executable, -dnl not a library. It's possible we should let each -dnl tag define a new lt_????_link_test_code variable, -dnl but it's only used here... -m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF -int a; -void foo (void) { a = 0; } -_LT_EOF -], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF -class Foo -{ -public: - Foo (void) { a = 0; } -private: - int a; -}; -_LT_EOF -], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer*4 a - a=0 - return - end -_LT_EOF -], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer a - a=0 - return - end -_LT_EOF -], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF -public class foo { - private int a; - public void bar (void) { - a = 0; - } -}; -_LT_EOF -]) -dnl Parse the compiler output and extract the necessary -dnl objects, libraries and library flags. -if AC_TRY_EVAL(ac_compile); then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - - for p in `eval "$output_verbose_link_cmd"`; do - case $p in - - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test $p = "-L" || - test $p = "-R"; then - prev=$p - continue - else - prev= - fi - - if test "$pre_test_object_deps_done" = no; then - case $p in - -L* | -R*) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then - _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" - else - _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$_LT_TAGVAR(postdeps, $1)"; then - _LT_TAGVAR(postdeps, $1)="${prev}${p}" - else - _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" - fi - fi - ;; - - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi - - if test "$pre_test_object_deps_done" = no; then - if test -z "$_LT_TAGVAR(predep_objects, $1)"; then - _LT_TAGVAR(predep_objects, $1)="$p" - else - _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" - fi - else - if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then - _LT_TAGVAR(postdep_objects, $1)="$p" - else - _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" - fi - fi - ;; - - *) ;; # Ignore the rest. - - esac - done - - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling $1 test program" -fi - -$RM -f confest.$objext - -# PORTME: override above test on systems where it is broken -m4_if([$1], [CXX], -[case $host_os in -interix[[3-9]]*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - _LT_TAGVAR(predep_objects,$1)= - _LT_TAGVAR(postdep_objects,$1)= - _LT_TAGVAR(postdeps,$1)= - ;; - -linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; -esac -]) - -case " $_LT_TAGVAR(postdeps, $1) " in -*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; -esac - _LT_TAGVAR(compiler_lib_search_dirs, $1)= -if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then - _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` -fi -_LT_TAGDECL([], [compiler_lib_search_dirs], [1], - [The directories searched by this compiler when creating a shared library]) -_LT_TAGDECL([], [predep_objects], [1], - [Dependencies to place before and after the objects being linked to - create a shared library]) -_LT_TAGDECL([], [postdep_objects], [1]) -_LT_TAGDECL([], [predeps], [1]) -_LT_TAGDECL([], [postdeps], [1]) -_LT_TAGDECL([], [compiler_lib_search_path], [1], - [The library search path used internally by the compiler when linking - a shared library]) -])# _LT_SYS_HIDDEN_LIBDEPS - - -# _LT_PROG_F77 -# ------------ -# Since AC_PROG_F77 is broken, in that it returns the empty string -# if there is no fortran compiler, we have our own version here. -m4_defun([_LT_PROG_F77], -[ -pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes]) -AC_PROG_F77 -if test -z "$F77" || test "X$F77" = "Xno"; then - _lt_disable_F77=yes -fi -popdef([AC_MSG_ERROR]) -])# _LT_PROG_F77 - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([_LT_PROG_F77], []) - - -# _LT_LANG_F77_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a Fortran 77 compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_F77_CONFIG], -[AC_REQUIRE([_LT_PROG_F77])dnl -AC_LANG_PUSH(Fortran 77) - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for f77 test sources. -ac_ext=f - -# Object file extension for compiled f77 test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the F77 compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_F77" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC="$CC" - lt_save_GCC=$GCC - CC=${F77-"f77"} - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - GCC=$G77 - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)="$G77" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC="$lt_save_CC" -fi # test "$_lt_disable_F77" != yes - -AC_LANG_POP -])# _LT_LANG_F77_CONFIG - - -# _LT_PROG_FC -# ----------- -# Since AC_PROG_FC is broken, in that it returns the empty string -# if there is no fortran compiler, we have our own version here. -m4_defun([_LT_PROG_FC], -[ -pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes]) -AC_PROG_FC -if test -z "$FC" || test "X$FC" = "Xno"; then - _lt_disable_FC=yes -fi -popdef([AC_MSG_ERROR]) -])# _LT_PROG_FC - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([_LT_PROG_FC], []) - - -# _LT_LANG_FC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for a Fortran compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_FC_CONFIG], -[AC_REQUIRE([_LT_PROG_FC])dnl -AC_LANG_PUSH(Fortran) - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for fc test sources. -ac_ext=${ac_fc_srcext-f} - -# Object file extension for compiled fc test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the FC compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_FC" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC="$CC" - lt_save_GCC=$GCC - CC=${FC-"f95"} - compiler=$CC - GCC=$ac_cv_fc_compiler_gnu - - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC="$lt_save_CC" -fi # test "$_lt_disable_FC" != yes - -AC_LANG_POP -])# _LT_LANG_FC_CONFIG - - -# _LT_LANG_GCJ_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for the GNU Java Compiler compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_GCJ_CONFIG], -[AC_REQUIRE([LT_PROG_GCJ])dnl -AC_LANG_SAVE - -# Source file extension for Java test sources. -ac_ext=java - -# Object file extension for compiled Java test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="class foo {}" - -# Code to be used in simple link tests -lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -lt_save_GCC=$GCC -GCC=yes -CC=${GCJ-"gcj"} -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_TAGVAR(LD, $1)="$LD" -_LT_CC_BASENAME([$compiler]) - -# GCJ did not exist at the time GCC didn't implicitly link libc in. -_LT_TAGVAR(archive_cmds_need_lc, $1)=no - -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) -fi - -AC_LANG_RESTORE - -GCC=$lt_save_GCC -CC="$lt_save_CC" -])# _LT_LANG_GCJ_CONFIG - - -# _LT_LANG_RC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for the Windows resource compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_RC_CONFIG], -[AC_REQUIRE([LT_PROG_RC])dnl -AC_LANG_SAVE - -# Source file extension for RC test sources. -ac_ext=rc - -# Object file extension for compiled RC test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' - -# Code to be used in simple link tests -lt_simple_link_test_code="$lt_simple_compile_test_code" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -lt_save_GCC=$GCC -GCC= -CC=${RC-"windres"} -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) -_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - -if test -n "$compiler"; then - : - _LT_CONFIG($1) -fi - -GCC=$lt_save_GCC -AC_LANG_RESTORE -CC="$lt_save_CC" -])# _LT_LANG_RC_CONFIG - - -# LT_PROG_GCJ -# ----------- -AC_DEFUN([LT_PROG_GCJ], -[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], - [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], - [AC_CHECK_TOOL(GCJ, gcj,) - test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" - AC_SUBST(GCJFLAGS)])])[]dnl -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_GCJ], []) - - -# LT_PROG_RC -# ---------- -AC_DEFUN([LT_PROG_RC], -[AC_CHECK_TOOL(RC, windres,) -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_RC], []) - - -# _LT_DECL_EGREP -# -------------- -# If we don't have a new enough Autoconf to choose the best grep -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_EGREP], -[AC_REQUIRE([AC_PROG_EGREP])dnl -AC_REQUIRE([AC_PROG_FGREP])dnl -test -z "$GREP" && GREP=grep -_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) -_LT_DECL([], [EGREP], [1], [An ERE matcher]) -_LT_DECL([], [FGREP], [1], [A literal string matcher]) -dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too -AC_SUBST([GREP]) -]) - - -# _LT_DECL_OBJDUMP -# -------------- -# If we don't have a new enough Autoconf to choose the best objdump -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_OBJDUMP], -[AC_CHECK_TOOL(OBJDUMP, objdump, false) -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) -AC_SUBST([OBJDUMP]) -]) - - -# _LT_DECL_SED -# ------------ -# Check for a fully-functional sed program, that truncates -# as few characters as possible. Prefer GNU sed if found. -m4_defun([_LT_DECL_SED], -[AC_PROG_SED -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" -_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) -_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], - [Sed that helps us avoid accidentally triggering echo(1) options like -n]) -])# _LT_DECL_SED - -m4_ifndef([AC_PROG_SED], [ -############################################################ -# NOTE: This macro has been submitted for inclusion into # -# GNU Autoconf as AC_PROG_SED. When it is available in # -# a released version of Autoconf we should remove this # -# macro and use it instead. # -############################################################ - -m4_defun([AC_PROG_SED], -[AC_MSG_CHECKING([for a sed that does not truncate output]) -AC_CACHE_VAL(lt_cv_path_SED, -[# Loop through the user's path and test for sed and gsed. -# Then use that list of sed's as ones to test for truncation. -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for lt_ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then - lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" - fi - done - done -done -IFS=$as_save_IFS -lt_ac_max=0 -lt_ac_count=0 -# Add /usr/xpg4/bin/sed as it is typically found on Solaris -# along with /bin/sed that truncates output. -for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do - test ! -f $lt_ac_sed && continue - cat /dev/null > conftest.in - lt_ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >conftest.in - # Check for GNU sed and select it if it is found. - if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then - lt_cv_path_SED=$lt_ac_sed - break - fi - while true; do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >>conftest.nl - $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break - cmp -s conftest.out conftest.nl || break - # 10000 chars as input seems more than enough - test $lt_ac_count -gt 10 && break - lt_ac_count=`expr $lt_ac_count + 1` - if test $lt_ac_count -gt $lt_ac_max; then - lt_ac_max=$lt_ac_count - lt_cv_path_SED=$lt_ac_sed - fi - done -done -]) -SED=$lt_cv_path_SED -AC_SUBST([SED]) -AC_MSG_RESULT([$SED]) -])#AC_PROG_SED -])#m4_ifndef - -# Old name: -AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_SED], []) - - -# _LT_CHECK_SHELL_FEATURES -# ------------------------ -# Find out whether the shell is Bourne or XSI compatible, -# or has some other useful features. -m4_defun([_LT_CHECK_SHELL_FEATURES], -[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -AC_MSG_RESULT([$xsi_shell]) -_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) - -AC_MSG_CHECKING([whether the shell understands "+="]) -lt_shell_append=no -( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -AC_MSG_RESULT([$lt_shell_append]) -_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi -_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac -_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl -_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl -])# _LT_CHECK_SHELL_FEATURES - - -# _LT_PROG_XSI_SHELLFNS -# --------------------- -# Bourne and XSI compatible variants of some useful shell functions. -m4_defun([_LT_PROG_XSI_SHELLFNS], -[case $xsi_shell in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac -} - -# func_basename file -func_basename () -{ - func_basename_result="${1##*/}" -} - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}" -} - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -func_stripname () -{ - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"} -} - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=${1%%=*} - func_opt_split_arg=${1#*=} -} - -# func_lo2o object -func_lo2o () -{ - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=${1%.*}.lo -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=$(( $[*] )) -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=${#1} -} - -_LT_EOF - ;; - *) # Bourne compatible functions. - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi -} - -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` -} - -dnl func_dirname_and_basename -dnl A portable version of this function is already defined in general.m4sh -dnl so there is no need for it here. - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# func_strip_suffix prefix name -func_stripname () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "X${3}" \ - | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "X${3}" \ - | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; - esac -} - -# sed scripts: -my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q' -my_sed_long_arg='1s/^-[[^=]]*=//' - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` - func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` -} - -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'` -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=`expr "$[@]"` -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len` -} - -_LT_EOF -esac - -case $lt_shell_append in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$[1]+=\$[2]" -} -_LT_EOF - ;; - *) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$[1]=\$$[1]\$[2]" -} - -_LT_EOF - ;; - esac -]) diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/ltoptions.m4 b/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/ltoptions.m4 deleted file mode 100644 index 34151a3ba625..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/ltoptions.m4 +++ /dev/null @@ -1,368 +0,0 @@ -# Helper functions for option handling. -*- Autoconf -*- -# -# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. -# Written by Gary V. Vaughan, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 6 ltoptions.m4 - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) - - -# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) -# ------------------------------------------ -m4_define([_LT_MANGLE_OPTION], -[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) - - -# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) -# --------------------------------------- -# Set option OPTION-NAME for macro MACRO-NAME, and if there is a -# matching handler defined, dispatch to it. Other OPTION-NAMEs are -# saved as a flag. -m4_define([_LT_SET_OPTION], -[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl -m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), - _LT_MANGLE_DEFUN([$1], [$2]), - [m4_warning([Unknown $1 option `$2'])])[]dnl -]) - - -# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) -# ------------------------------------------------------------ -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -m4_define([_LT_IF_OPTION], -[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) - - -# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) -# ------------------------------------------------------- -# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME -# are set. -m4_define([_LT_UNLESS_OPTIONS], -[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), - [m4_define([$0_found])])])[]dnl -m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 -])[]dnl -]) - - -# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) -# ---------------------------------------- -# OPTION-LIST is a space-separated list of Libtool options associated -# with MACRO-NAME. If any OPTION has a matching handler declared with -# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about -# the unknown option and exit. -m4_defun([_LT_SET_OPTIONS], -[# Set options -m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [_LT_SET_OPTION([$1], _LT_Option)]) - -m4_if([$1],[LT_INIT],[ - dnl - dnl Simply set some default values (i.e off) if boolean options were not - dnl specified: - _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no - ]) - _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no - ]) - dnl - dnl If no reference was made to various pairs of opposing options, then - dnl we run the default mode handler for the pair. For example, if neither - dnl `shared' nor `disable-shared' was passed, we enable building of shared - dnl archives by default: - _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) - _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], - [_LT_ENABLE_FAST_INSTALL]) - ]) -])# _LT_SET_OPTIONS - - -## --------------------------------- ## -## Macros to handle LT_INIT options. ## -## --------------------------------- ## - -# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) -# ----------------------------------------- -m4_define([_LT_MANGLE_DEFUN], -[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) - - -# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) -# ----------------------------------------------- -m4_define([LT_OPTION_DEFINE], -[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl -])# LT_OPTION_DEFINE - - -# dlopen -# ------ -LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes -]) - -AU_DEFUN([AC_LIBTOOL_DLOPEN], -[_LT_SET_OPTION([LT_INIT], [dlopen]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `dlopen' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) - - -# win32-dll -# --------- -# Declare package support for building win32 dll's. -LT_OPTION_DEFINE([LT_INIT], [win32-dll], -[enable_win32_dll=yes - -case $host in -*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*) - AC_CHECK_TOOL(AS, as, false) - AC_CHECK_TOOL(DLLTOOL, dlltool, false) - AC_CHECK_TOOL(OBJDUMP, objdump, false) - ;; -esac - -test -z "$AS" && AS=as -_LT_DECL([], [AS], [0], [Assembler program])dnl - -test -z "$DLLTOOL" && DLLTOOL=dlltool -_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl - -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl -])# win32-dll - -AU_DEFUN([AC_LIBTOOL_WIN32_DLL], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -_LT_SET_OPTION([LT_INIT], [win32-dll]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `win32-dll' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) - - -# _LT_ENABLE_SHARED([DEFAULT]) -# ---------------------------- -# implement the --enable-shared flag, and supports the `shared' and -# `disable-shared' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_SHARED], -[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([shared], - [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], - [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) - - _LT_DECL([build_libtool_libs], [enable_shared], [0], - [Whether or not to build shared libraries]) -])# _LT_ENABLE_SHARED - -LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) -]) - -AC_DEFUN([AC_DISABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], [disable-shared]) -]) - -AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) -AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_SHARED], []) -dnl AC_DEFUN([AM_DISABLE_SHARED], []) - - - -# _LT_ENABLE_STATIC([DEFAULT]) -# ---------------------------- -# implement the --enable-static flag, and support the `static' and -# `disable-static' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_STATIC], -[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([static], - [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], - [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_static=]_LT_ENABLE_STATIC_DEFAULT) - - _LT_DECL([build_old_libs], [enable_static], [0], - [Whether or not to build static libraries]) -])# _LT_ENABLE_STATIC - -LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) -]) - -AC_DEFUN([AC_DISABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], [disable-static]) -]) - -AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) -AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_STATIC], []) -dnl AC_DEFUN([AM_DISABLE_STATIC], []) - - - -# _LT_ENABLE_FAST_INSTALL([DEFAULT]) -# ---------------------------------- -# implement the --enable-fast-install flag, and support the `fast-install' -# and `disable-fast-install' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_FAST_INSTALL], -[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([fast-install], - [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], - [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) - -_LT_DECL([fast_install], [enable_fast_install], [0], - [Whether or not to optimize for fast installation])dnl -])# _LT_ENABLE_FAST_INSTALL - -LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) - -# Old names: -AU_DEFUN([AC_ENABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `fast-install' option into LT_INIT's first parameter.]) -]) - -AU_DEFUN([AC_DISABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `disable-fast-install' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) -dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) - - -# _LT_WITH_PIC([MODE]) -# -------------------- -# implement the --with-pic flag, and support the `pic-only' and `no-pic' -# LT_INIT options. -# MODE is either `yes' or `no'. If omitted, it defaults to `both'. -m4_define([_LT_WITH_PIC], -[AC_ARG_WITH([pic], - [AS_HELP_STRING([--with-pic], - [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], - [pic_mode="$withval"], - [pic_mode=default]) - -test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) - -_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl -])# _LT_WITH_PIC - -LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) - -# Old name: -AU_DEFUN([AC_LIBTOOL_PICMODE], -[_LT_SET_OPTION([LT_INIT], [pic-only]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `pic-only' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) - -## ----------------- ## -## LTDL_INIT Options ## -## ----------------- ## - -m4_define([_LTDL_MODE], []) -LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], - [m4_define([_LTDL_MODE], [nonrecursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [recursive], - [m4_define([_LTDL_MODE], [recursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [subproject], - [m4_define([_LTDL_MODE], [subproject])]) - -m4_define([_LTDL_TYPE], []) -LT_OPTION_DEFINE([LTDL_INIT], [installable], - [m4_define([_LTDL_TYPE], [installable])]) -LT_OPTION_DEFINE([LTDL_INIT], [convenience], - [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/ltsugar.m4 b/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/ltsugar.m4 deleted file mode 100644 index 9000a057d31d..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/ltsugar.m4 +++ /dev/null @@ -1,123 +0,0 @@ -# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- -# -# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. -# Written by Gary V. Vaughan, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 6 ltsugar.m4 - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) - - -# lt_join(SEP, ARG1, [ARG2...]) -# ----------------------------- -# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their -# associated separator. -# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier -# versions in m4sugar had bugs. -m4_define([lt_join], -[m4_if([$#], [1], [], - [$#], [2], [[$2]], - [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) -m4_define([_lt_join], -[m4_if([$#$2], [2], [], - [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) - - -# lt_car(LIST) -# lt_cdr(LIST) -# ------------ -# Manipulate m4 lists. -# These macros are necessary as long as will still need to support -# Autoconf-2.59 which quotes differently. -m4_define([lt_car], [[$1]]) -m4_define([lt_cdr], -[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], - [$#], 1, [], - [m4_dquote(m4_shift($@))])]) -m4_define([lt_unquote], $1) - - -# lt_append(MACRO-NAME, STRING, [SEPARATOR]) -# ------------------------------------------ -# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. -# Note that neither SEPARATOR nor STRING are expanded; they are appended -# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). -# No SEPARATOR is output if MACRO-NAME was previously undefined (different -# than defined and empty). -# -# This macro is needed until we can rely on Autoconf 2.62, since earlier -# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. -m4_define([lt_append], -[m4_define([$1], - m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) - - - -# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) -# ---------------------------------------------------------- -# Produce a SEP delimited list of all paired combinations of elements of -# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list -# has the form PREFIXmINFIXSUFFIXn. -# Needed until we can rely on m4_combine added in Autoconf 2.62. -m4_define([lt_combine], -[m4_if(m4_eval([$# > 3]), [1], - [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl -[[m4_foreach([_Lt_prefix], [$2], - [m4_foreach([_Lt_suffix], - ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, - [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) - - -# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) -# ----------------------------------------------------------------------- -# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited -# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. -m4_define([lt_if_append_uniq], -[m4_ifdef([$1], - [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], - [lt_append([$1], [$2], [$3])$4], - [$5])], - [lt_append([$1], [$2], [$3])$4])]) - - -# lt_dict_add(DICT, KEY, VALUE) -# ----------------------------- -m4_define([lt_dict_add], -[m4_define([$1($2)], [$3])]) - - -# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) -# -------------------------------------------- -m4_define([lt_dict_add_subkey], -[m4_define([$1($2:$3)], [$4])]) - - -# lt_dict_fetch(DICT, KEY, [SUBKEY]) -# ---------------------------------- -m4_define([lt_dict_fetch], -[m4_ifval([$3], - m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), - m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) - - -# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) -# ----------------------------------------------------------------- -m4_define([lt_if_dict_fetch], -[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], - [$5], - [$6])]) - - -# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) -# -------------------------------------------------------------- -m4_define([lt_dict_filter], -[m4_if([$5], [], [], - [lt_join(m4_quote(m4_default([$4], [[, ]])), - lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), - [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl -]) diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/ltversion.m4 b/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/ltversion.m4 deleted file mode 100644 index f3c530980244..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/ltversion.m4 +++ /dev/null @@ -1,23 +0,0 @@ -# ltversion.m4 -- version numbers -*- Autoconf -*- -# -# Copyright (C) 2004 Free Software Foundation, Inc. -# Written by Scott James Remnant, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# Generated from ltversion.in. - -# serial 3017 ltversion.m4 -# This file is part of GNU Libtool - -m4_define([LT_PACKAGE_VERSION], [2.2.6b]) -m4_define([LT_PACKAGE_REVISION], [1.3017]) - -AC_DEFUN([LTVERSION_VERSION], -[macro_version='2.2.6b' -macro_revision='1.3017' -_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) -_LT_DECL(, macro_revision, 0) -]) diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/lt~obsolete.m4 b/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/lt~obsolete.m4 deleted file mode 100644 index 637bb2066c42..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/lt~obsolete.m4 +++ /dev/null @@ -1,92 +0,0 @@ -# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- -# -# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc. -# Written by Scott James Remnant, 2004. -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 4 lt~obsolete.m4 - -# These exist entirely to fool aclocal when bootstrapping libtool. -# -# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) -# which have later been changed to m4_define as they aren't part of the -# exported API, or moved to Autoconf or Automake where they belong. -# -# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN -# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us -# using a macro with the same name in our local m4/libtool.m4 it'll -# pull the old libtool.m4 in (it doesn't see our shiny new m4_define -# and doesn't know about Autoconf macros at all.) -# -# So we provide this file, which has a silly filename so it's always -# included after everything else. This provides aclocal with the -# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything -# because those macros already exist, or will be overwritten later. -# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. -# -# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. -# Yes, that means every name once taken will need to remain here until -# we give up compatibility with versions before 1.7, at which point -# we need to keep only those names which we still refer to. - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) - -m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) -m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) -m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) -m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) -m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) -m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) -m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) -m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) -m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) -m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) -m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) -m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) -m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) -m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) -m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) -m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) -m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) -m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) -m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) -m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) -m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) -m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) -m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) -m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) -m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) -m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) -m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) -m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) -m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) -m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) -m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) -m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) -m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) -m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) -m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) -m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) -m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) -m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) -m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) -m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) -m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) -m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) -m4_ifndef([AC_LIBTOOL_RC], [AC_DEFUN([AC_LIBTOOL_RC])]) -m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) -m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) -m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) -m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) -m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) -m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) -m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) -m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/namespaces.m4 b/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/namespaces.m4 deleted file mode 100644 index d78dbe4cc2e4..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/namespaces.m4 +++ /dev/null @@ -1,15 +0,0 @@ -# Checks whether the compiler implements namespaces -AC_DEFUN([AC_CXX_NAMESPACES], - [AC_CACHE_CHECK(whether the compiler implements namespaces, - ac_cv_cxx_namespaces, - [AC_LANG_SAVE - AC_LANG_CPLUSPLUS - AC_TRY_COMPILE([namespace Outer { - namespace Inner { int i = 0; }}], - [using namespace Outer::Inner; return i;], - ac_cv_cxx_namespaces=yes, - ac_cv_cxx_namespaces=no) - AC_LANG_RESTORE]) - if test "$ac_cv_cxx_namespaces" = yes; then - AC_DEFINE(HAVE_NAMESPACES, 1, [define if the compiler implements namespaces]) - fi]) diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/pc_from_ucontext.m4 b/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/pc_from_ucontext.m4 deleted file mode 100644 index daffddb536fd..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/pc_from_ucontext.m4 +++ /dev/null @@ -1,71 +0,0 @@ -# We want to access the "PC" (Program Counter) register from a struct -# ucontext. Every system has its own way of doing that. We try all the -# possibilities we know about. Note REG_PC should come first (REG_RIP -# is also defined on solaris, but does the wrong thing). - -# OpenBSD doesn't have ucontext.h, but we can get PC from ucontext_t -# by using signal.h. - -# The first argument of AC_PC_FROM_UCONTEXT will be invoked when we -# cannot find a way to obtain PC from ucontext. - -AC_DEFUN([AC_PC_FROM_UCONTEXT], - [AC_CHECK_HEADERS(ucontext.h) - AC_CHECK_HEADERS(sys/ucontext.h) # ucontext on OS X 10.6 (at least) - AC_MSG_CHECKING([how to access the program counter from a struct ucontext]) - pc_fields=" uc_mcontext.gregs[[REG_PC]]" # Solaris x86 (32 + 64 bit) - pc_fields="$pc_fields uc_mcontext.gregs[[REG_EIP]]" # Linux (i386) - pc_fields="$pc_fields uc_mcontext.gregs[[REG_RIP]]" # Linux (x86_64) - pc_fields="$pc_fields uc_mcontext.sc_ip" # Linux (ia64) - pc_fields="$pc_fields uc_mcontext.uc_regs->gregs[[PT_NIP]]" # Linux (ppc) - pc_fields="$pc_fields uc_mcontext.gregs[[R15]]" # Linux (arm old [untested]) - pc_fields="$pc_fields uc_mcontext.arm_pc" # Linux (arm new [untested]) - pc_fields="$pc_fields uc_mcontext.mc_eip" # FreeBSD (i386) - pc_fields="$pc_fields uc_mcontext.mc_rip" # FreeBSD (x86_64 [untested]) - pc_fields="$pc_fields uc_mcontext.__gregs[[_REG_EIP]]" # NetBSD (i386) - pc_fields="$pc_fields uc_mcontext.__gregs[[_REG_RIP]]" # NetBSD (x86_64) - pc_fields="$pc_fields uc_mcontext->ss.eip" # OS X (i386, <=10.4) - pc_fields="$pc_fields uc_mcontext->__ss.__eip" # OS X (i386, >=10.5) - pc_fields="$pc_fields uc_mcontext->ss.rip" # OS X (x86_64) - pc_fields="$pc_fields uc_mcontext->__ss.__rip" # OS X (>=10.5 [untested]) - pc_fields="$pc_fields uc_mcontext->ss.srr0" # OS X (ppc, ppc64 [untested]) - pc_fields="$pc_fields uc_mcontext->__ss.__srr0" # OS X (>=10.5 [untested]) - pc_field_found=false - for pc_field in $pc_fields; do - if ! $pc_field_found; then - if test "x$ac_cv_header_sys_ucontext_h" = xyes; then - AC_TRY_COMPILE([#define _GNU_SOURCE 1 - #include ], - [ucontext_t u; return u.$pc_field == 0;], - AC_DEFINE_UNQUOTED(PC_FROM_UCONTEXT, $pc_field, - How to access the PC from a struct ucontext) - AC_MSG_RESULT([$pc_field]) - pc_field_found=true) - else - AC_TRY_COMPILE([#define _GNU_SOURCE 1 - #include ], - [ucontext_t u; return u.$pc_field == 0;], - AC_DEFINE_UNQUOTED(PC_FROM_UCONTEXT, $pc_field, - How to access the PC from a struct ucontext) - AC_MSG_RESULT([$pc_field]) - pc_field_found=true) - fi - fi - done - if ! $pc_field_found; then - pc_fields=" sc_eip" # OpenBSD (i386) - pc_fields="$pc_fields sc_rip" # OpenBSD (x86_64) - for pc_field in $pc_fields; do - if ! $pc_field_found; then - AC_TRY_COMPILE([#include ], - [ucontext_t u; return u.$pc_field == 0;], - AC_DEFINE_UNQUOTED(PC_FROM_UCONTEXT, $pc_field, - How to access the PC from a struct ucontext) - AC_MSG_RESULT([$pc_field]) - pc_field_found=true) - fi - done - fi - if ! $pc_field_found; then - [$1] - fi]) diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/stl_namespace.m4 b/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/stl_namespace.m4 deleted file mode 100644 index 989ad80696a3..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/stl_namespace.m4 +++ /dev/null @@ -1,25 +0,0 @@ -# We check what namespace stl code like vector expects to be executed in - -AC_DEFUN([AC_CXX_STL_NAMESPACE], - [AC_CACHE_CHECK( - what namespace STL code is in, - ac_cv_cxx_stl_namespace, - [AC_REQUIRE([AC_CXX_NAMESPACES]) - AC_LANG_SAVE - AC_LANG_CPLUSPLUS - AC_TRY_COMPILE([#include ], - [vector t; return 0;], - ac_cv_cxx_stl_namespace=none) - AC_TRY_COMPILE([#include ], - [std::vector t; return 0;], - ac_cv_cxx_stl_namespace=std) - AC_LANG_RESTORE]) - if test "$ac_cv_cxx_stl_namespace" = none; then - AC_DEFINE(STL_NAMESPACE,, - [the namespace where STL code like vector<> is defined]) - fi - if test "$ac_cv_cxx_stl_namespace" = std; then - AC_DEFINE(STL_NAMESPACE,std, - [the namespace where STL code like vector<> is defined]) - fi -]) diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/using_operator.m4 b/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/using_operator.m4 deleted file mode 100644 index 95a9951eb346..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/using_operator.m4 +++ /dev/null @@ -1,15 +0,0 @@ -AC_DEFUN([AC_CXX_USING_OPERATOR], - [AC_CACHE_CHECK( - whether compiler supports using ::operator<<, - ac_cv_cxx_using_operator, - [AC_LANG_SAVE - AC_LANG_CPLUSPLUS - AC_TRY_COMPILE([#include - std::ostream& operator<<(std::ostream&, struct s);], - [using ::operator<<; return 0;], - ac_cv_cxx_using_operator=1, - ac_cv_cxx_using_operator=0) - AC_LANG_RESTORE]) - if test "$ac_cv_cxx_using_operator" = 1; then - AC_DEFINE(HAVE_USING_OPERATOR, 1, [define if the compiler supports using expression for operator]) - fi]) diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/missing b/toolkit/crashreporter/google-breakpad/src/third_party/glog/missing deleted file mode 100755 index 1c8ff7049d8f..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/missing +++ /dev/null @@ -1,367 +0,0 @@ -#! /bin/sh -# Common stub for a few missing GNU programs while installing. - -scriptversion=2006-05-10.23 - -# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006 -# Free Software Foundation, Inc. -# Originally by Fran,cois Pinard , 1996. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301, USA. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -if test $# -eq 0; then - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 -fi - -run=: -sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' -sed_minuso='s/.* -o \([^ ]*\).*/\1/p' - -# In the cases where this matters, `missing' is being run in the -# srcdir already. -if test -f configure.ac; then - configure_ac=configure.ac -else - configure_ac=configure.in -fi - -msg="missing on your system" - -case $1 in ---run) - # Try to run requested program, and just exit if it succeeds. - run= - shift - "$@" && exit 0 - # Exit code 63 means version mismatch. This often happens - # when the user try to use an ancient version of a tool on - # a file that requires a minimum version. In this case we - # we should proceed has if the program had been absent, or - # if --run hadn't been passed. - if test $? = 63; then - run=: - msg="probably too old" - fi - ;; - - -h|--h|--he|--hel|--help) - echo "\ -$0 [OPTION]... PROGRAM [ARGUMENT]... - -Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an -error status if there is no known handling for PROGRAM. - -Options: - -h, --help display this help and exit - -v, --version output version information and exit - --run try to run the given command, and emulate it if it fails - -Supported PROGRAM values: - aclocal touch file \`aclocal.m4' - autoconf touch file \`configure' - autoheader touch file \`config.h.in' - autom4te touch the output file, or create a stub one - automake touch all \`Makefile.in' files - bison create \`y.tab.[ch]', if possible, from existing .[ch] - flex create \`lex.yy.c', if possible, from existing .c - help2man touch the output file - lex create \`lex.yy.c', if possible, from existing .c - makeinfo touch the output file - tar try tar, gnutar, gtar, then tar without non-portable flags - yacc create \`y.tab.[ch]', if possible, from existing .[ch] - -Send bug reports to ." - exit $? - ;; - - -v|--v|--ve|--ver|--vers|--versi|--versio|--version) - echo "missing $scriptversion (GNU Automake)" - exit $? - ;; - - -*) - echo 1>&2 "$0: Unknown \`$1' option" - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 - ;; - -esac - -# Now exit if we have it, but it failed. Also exit now if we -# don't have it and --version was passed (most likely to detect -# the program). -case $1 in - lex|yacc) - # Not GNU programs, they don't have --version. - ;; - - tar) - if test -n "$run"; then - echo 1>&2 "ERROR: \`tar' requires --run" - exit 1 - elif test "x$2" = "x--version" || test "x$2" = "x--help"; then - exit 1 - fi - ;; - - *) - if test -z "$run" && ($1 --version) > /dev/null 2>&1; then - # We have it, but it failed. - exit 1 - elif test "x$2" = "x--version" || test "x$2" = "x--help"; then - # Could not run --version or --help. This is probably someone - # running `$TOOL --version' or `$TOOL --help' to check whether - # $TOOL exists and not knowing $TOOL uses missing. - exit 1 - fi - ;; -esac - -# If it does not exist, or fails to run (possibly an outdated version), -# try to emulate it. -case $1 in - aclocal*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`acinclude.m4' or \`${configure_ac}'. You might want - to install the \`Automake' and \`Perl' packages. Grab them from - any GNU archive site." - touch aclocal.m4 - ;; - - autoconf) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`${configure_ac}'. You might want to install the - \`Autoconf' and \`GNU m4' packages. Grab them from any GNU - archive site." - touch configure - ;; - - autoheader) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`acconfig.h' or \`${configure_ac}'. You might want - to install the \`Autoconf' and \`GNU m4' packages. Grab them - from any GNU archive site." - files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` - test -z "$files" && files="config.h" - touch_files= - for f in $files; do - case $f in - *:*) touch_files="$touch_files "`echo "$f" | - sed -e 's/^[^:]*://' -e 's/:.*//'`;; - *) touch_files="$touch_files $f.in";; - esac - done - touch $touch_files - ;; - - automake*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. - You might want to install the \`Automake' and \`Perl' packages. - Grab them from any GNU archive site." - find . -type f -name Makefile.am -print | - sed 's/\.am$/.in/' | - while read f; do touch "$f"; done - ;; - - autom4te) - echo 1>&2 "\ -WARNING: \`$1' is needed, but is $msg. - You might have modified some files without having the - proper tools for further handling them. - You can get \`$1' as part of \`Autoconf' from any GNU - archive site." - - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -f "$file"; then - touch $file - else - test -z "$file" || exec >$file - echo "#! /bin/sh" - echo "# Created by GNU Automake missing as a replacement of" - echo "# $ $@" - echo "exit 0" - chmod +x $file - exit 1 - fi - ;; - - bison|yacc) - echo 1>&2 "\ -WARNING: \`$1' $msg. You should only need it if - you modified a \`.y' file. You may need the \`Bison' package - in order for those modifications to take effect. You can get - \`Bison' from any GNU archive site." - rm -f y.tab.c y.tab.h - if test $# -ne 1; then - eval LASTARG="\${$#}" - case $LASTARG in - *.y) - SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" y.tab.c - fi - SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" y.tab.h - fi - ;; - esac - fi - if test ! -f y.tab.h; then - echo >y.tab.h - fi - if test ! -f y.tab.c; then - echo 'main() { return 0; }' >y.tab.c - fi - ;; - - lex|flex) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a \`.l' file. You may need the \`Flex' package - in order for those modifications to take effect. You can get - \`Flex' from any GNU archive site." - rm -f lex.yy.c - if test $# -ne 1; then - eval LASTARG="\${$#}" - case $LASTARG in - *.l) - SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" lex.yy.c - fi - ;; - esac - fi - if test ! -f lex.yy.c; then - echo 'main() { return 0; }' >lex.yy.c - fi - ;; - - help2man) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a dependency of a manual page. You may need the - \`Help2man' package in order for those modifications to take - effect. You can get \`Help2man' from any GNU archive site." - - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -f "$file"; then - touch $file - else - test -z "$file" || exec >$file - echo ".ab help2man is required to generate this page" - exit 1 - fi - ;; - - makeinfo) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a \`.texi' or \`.texinfo' file, or any other file - indirectly affecting the aspect of the manual. The spurious - call might also be the consequence of using a buggy \`make' (AIX, - DU, IRIX). You might want to install the \`Texinfo' package or - the \`GNU make' package. Grab either from any GNU archive site." - # The file to touch is that specified with -o ... - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -z "$file"; then - # ... or it is the one specified with @setfilename ... - infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` - file=`sed -n ' - /^@setfilename/{ - s/.* \([^ ]*\) *$/\1/ - p - q - }' $infile` - # ... or it is derived from the source name (dir/f.texi becomes f.info) - test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info - fi - # If the file does not exist, the user really needs makeinfo; - # let's fail without touching anything. - test -f $file || exit 1 - touch $file - ;; - - tar) - shift - - # We have already tried tar in the generic part. - # Look for gnutar/gtar before invocation to avoid ugly error - # messages. - if (gnutar --version > /dev/null 2>&1); then - gnutar "$@" && exit 0 - fi - if (gtar --version > /dev/null 2>&1); then - gtar "$@" && exit 0 - fi - firstarg="$1" - if shift; then - case $firstarg in - *o*) - firstarg=`echo "$firstarg" | sed s/o//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - case $firstarg in - *h*) - firstarg=`echo "$firstarg" | sed s/h//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - fi - - echo 1>&2 "\ -WARNING: I can't seem to be able to run \`tar' with the given arguments. - You may want to install GNU tar or Free paxutils, or check the - command line arguments." - exit 1 - ;; - - *) - echo 1>&2 "\ -WARNING: \`$1' is needed, and is $msg. - You might have modified some files without having the - proper tools for further handling them. Check the \`README' file, - it often tells you about the needed prerequisites for installing - this package. You may also peek at any GNU archive site, in case - some other package would contain this missing \`$1' program." - exit 1 - ;; -esac - -exit 0 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" -# End: diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/mkinstalldirs b/toolkit/crashreporter/google-breakpad/src/third_party/glog/mkinstalldirs deleted file mode 100755 index ef7e16fdafe2..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/mkinstalldirs +++ /dev/null @@ -1,161 +0,0 @@ -#! /bin/sh -# mkinstalldirs --- make directory hierarchy - -scriptversion=2006-05-11.19 - -# Original author: Noah Friedman -# Created: 1993-05-16 -# Public domain. -# -# This file is maintained in Automake, please report -# bugs to or send patches to -# . - -nl=' -' -IFS=" "" $nl" -errstatus=0 -dirmode= - -usage="\ -Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... - -Create each directory DIR (with mode MODE, if specified), including all -leading file name components. - -Report bugs to ." - -# process command line arguments -while test $# -gt 0 ; do - case $1 in - -h | --help | --h*) # -h for help - echo "$usage" - exit $? - ;; - -m) # -m PERM arg - shift - test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } - dirmode=$1 - shift - ;; - --version) - echo "$0 $scriptversion" - exit $? - ;; - --) # stop option processing - shift - break - ;; - -*) # unknown option - echo "$usage" 1>&2 - exit 1 - ;; - *) # first non-opt arg - break - ;; - esac -done - -for file -do - if test -d "$file"; then - shift - else - break - fi -done - -case $# in - 0) exit 0 ;; -esac - -# Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and -# mkdir -p a/c at the same time, both will detect that a is missing, -# one will create a, then the other will try to create a and die with -# a "File exists" error. This is a problem when calling mkinstalldirs -# from a parallel make. We use --version in the probe to restrict -# ourselves to GNU mkdir, which is thread-safe. -case $dirmode in - '') - if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then - echo "mkdir -p -- $*" - exec mkdir -p -- "$@" - else - # On NextStep and OpenStep, the `mkdir' command does not - # recognize any option. It will interpret all options as - # directories to create, and then abort because `.' already - # exists. - test -d ./-p && rmdir ./-p - test -d ./--version && rmdir ./--version - fi - ;; - *) - if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && - test ! -d ./--version; then - echo "mkdir -m $dirmode -p -- $*" - exec mkdir -m "$dirmode" -p -- "$@" - else - # Clean up after NextStep and OpenStep mkdir. - for d in ./-m ./-p ./--version "./$dirmode"; - do - test -d $d && rmdir $d - done - fi - ;; -esac - -for file -do - case $file in - /*) pathcomp=/ ;; - *) pathcomp= ;; - esac - oIFS=$IFS - IFS=/ - set fnord $file - shift - IFS=$oIFS - - for d - do - test "x$d" = x && continue - - pathcomp=$pathcomp$d - case $pathcomp in - -*) pathcomp=./$pathcomp ;; - esac - - if test ! -d "$pathcomp"; then - echo "mkdir $pathcomp" - - mkdir "$pathcomp" || lasterr=$? - - if test ! -d "$pathcomp"; then - errstatus=$lasterr - else - if test ! -z "$dirmode"; then - echo "chmod $dirmode $pathcomp" - lasterr= - chmod "$dirmode" "$pathcomp" || lasterr=$? - - if test ! -z "$lasterr"; then - errstatus=$lasterr - fi - fi - fi - fi - - pathcomp=$pathcomp/ - done -done - -exit $errstatus - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" -# End: diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb.sh b/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb.sh deleted file mode 100755 index e6f4aca9a0c5..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb.sh +++ /dev/null @@ -1,71 +0,0 @@ -#!/bin/bash -e - -# This takes one commandline argument, the name of the package. If no -# name is given, then we'll end up just using the name associated with -# an arbitrary .tar.gz file in the rootdir. That's fine: there's probably -# only one. -# -# Run this from the 'packages' directory, just under rootdir - -## Set LIB to lib if exporting a library, empty-string else -LIB= -#LIB=lib - -PACKAGE="$1" -VERSION="$2" - -# We can only build Debian packages, if the Debian build tools are installed -if [ \! -x /usr/bin/debuild ]; then - echo "Cannot find /usr/bin/debuild. Not building Debian packages." 1>&2 - exit 0 -fi - -# Double-check we're in the packages directory, just under rootdir -if [ \! -r ../Makefile -a \! -r ../INSTALL ]; then - echo "Must run $0 in the 'packages' directory, under the root directory." 1>&2 - echo "Also, you must run \"make dist\" before running this script." 1>&2 - exit 0 -fi - -# Find the top directory for this package -topdir="${PWD%/*}" - -# Find the tar archive built by "make dist" -archive="$PACKAGE-$VERSION" -if [ -z "${archive}" ]; then - echo "Cannot find ../$PACKAGE*.tar.gz. Run \"make dist\" first." 1>&2 - exit 0 -fi - -# Create a pristine directory for building the Debian package files -trap 'rm -rf '`pwd`/tmp'; exit $?' EXIT SIGHUP SIGINT SIGTERM - -rm -rf tmp -mkdir -p tmp -cd tmp - -# Debian has very specific requirements about the naming of build -# directories, and tar archives. It also wants to write all generated -# packages to the parent of the source directory. We accommodate these -# requirements by building directly from the tar file. -ln -s "${topdir}/${archive}.tar.gz" "${LIB}${archive}.orig.tar.gz" -tar zfx "${LIB}${archive}.orig.tar.gz" -[ -n "${LIB}" ] && mv "${archive}" "${LIB}${archive}" -cd "${LIB}${archive}" -# This is one of those 'specific requirements': where the deb control files live -ln -s "packages/deb" "debian" - -# Now, we can call Debian's standard build tool -debuild -uc -us -cd ../.. # get back to the original top-level dir - -# We'll put the result in a subdirectory that's named after the OS version -# we've made this .deb file for. -destdir="debian-$(cat /etc/debian_version 2>/dev/null || echo UNKNOWN)" - -rm -rf "$destdir" -mkdir -p "$destdir" -mv $(find tmp -mindepth 1 -maxdepth 1 -type f) "$destdir" - -echo -echo "The Debian package files are located in $PWD/$destdir" diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/README b/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/README deleted file mode 100644 index 57becfda757e..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/README +++ /dev/null @@ -1,7 +0,0 @@ -The list of files here isn't complete. For a step-by-step guide on -how to set this package up correctly, check out - http://www.debian.org/doc/maint-guide/ - -Most of the files that are in this directory are boilerplate. -However, you may need to change the list of binary-arch dependencies -in 'rules'. diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/changelog b/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/changelog deleted file mode 100644 index 524bedfdbbb9..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/changelog +++ /dev/null @@ -1,41 +0,0 @@ -google-glog (0.3.1-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. Tue, 15 Jun 2010 13:50:47 +0900 - -google-glog (0.3-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. Thu, 30 Jul 2009 21:31:35 +0900 - -google-glog (0.2.1-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. Fri, 10 Apr 2009 15:24:17 +0900 - -google-glog (0.2-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. Fri, 23 Jan 2009 03:14:29 +0900 - -google-glog (0.1.2-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. Tue, 18 Nov 2008 20:37:00 +0900 - -google-glog (0.1.1-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. Wed, 15 Oct 2008 20:38:19 +0900 - -google-glog (0.1-1) unstable; urgency=low - - * Initial release. - - -- Google Inc. Sat, 10 May 2008 12:31:10 +0900 diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/compat b/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/compat deleted file mode 100644 index b8626c4cff28..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/compat +++ /dev/null @@ -1 +0,0 @@ -4 diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/control b/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/control deleted file mode 100644 index 110a72cb3560..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/control +++ /dev/null @@ -1,23 +0,0 @@ -Source: google-glog -Priority: optional -Maintainer: Google Inc. -Build-Depends: debhelper (>= 4.0.0), binutils -Standards-Version: 3.6.1 - -Package: libgoogle-glog-dev -Section: libdevel -Architecture: any -Depends: libgoogle-glog0 (= ${Source-Version}) -Description: a library that implements application-level logging. - This library provides logging APIs based on C++-style streams and - various helper macros. The devel package contains static and debug - libraries and header files for developing applications that use the - google-glog package. - -Package: libgoogle-glog0 -Section: libs -Architecture: any -Depends: ${shlibs:Depends} -Description: a library that implements application-level logging. - This library provides logging APIs based on C++-style streams and - various helper macros. diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/docs b/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/docs deleted file mode 100644 index c3d0789b2639..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/docs +++ /dev/null @@ -1,8 +0,0 @@ -AUTHORS -COPYING -ChangeLog -INSTALL -NEWS -README -doc/designstyle.css -doc/glog.html diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/libgoogle-glog-dev.dirs b/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/libgoogle-glog-dev.dirs deleted file mode 100644 index bddfbf5c112b..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/libgoogle-glog-dev.dirs +++ /dev/null @@ -1,4 +0,0 @@ -usr/lib -usr/lib/pkgconfig -usr/include -usr/include/glog diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/libgoogle-glog-dev.install b/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/libgoogle-glog-dev.install deleted file mode 100644 index 9c61e86eaf6f..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/libgoogle-glog-dev.install +++ /dev/null @@ -1,10 +0,0 @@ -usr/include/glog/* -usr/lib/lib*.so -usr/lib/lib*.a -usr/lib/*.la -usr/lib/pkgconfig/* -debian/tmp/usr/include/glog/* -debian/tmp/usr/lib/lib*.so -debian/tmp/usr/lib/lib*.a -debian/tmp/usr/lib/*.la -debian/tmp/usr/lib/pkgconfig/* diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/libgoogle-glog0.dirs b/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/libgoogle-glog0.dirs deleted file mode 100644 index 68457717bd8e..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/libgoogle-glog0.dirs +++ /dev/null @@ -1 +0,0 @@ -usr/lib diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/libgoogle-glog0.install b/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/libgoogle-glog0.install deleted file mode 100644 index 704ea87ab754..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/libgoogle-glog0.install +++ /dev/null @@ -1,2 +0,0 @@ -usr/lib/lib*.so.* -debian/tmp/usr/lib/lib*.so.* diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/rules b/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/rules deleted file mode 100755 index f520befd259d..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/rules +++ /dev/null @@ -1,117 +0,0 @@ -#!/usr/bin/make -f -# -*- makefile -*- -# Sample debian/rules that uses debhelper. -# This file was originally written by Joey Hess and Craig Small. -# As a special exception, when this file is copied by dh-make into a -# dh-make output file, you may use that output file without restriction. -# This special exception was added by Craig Small in version 0.37 of dh-make. - -# Uncomment this to turn on verbose mode. -#export DH_VERBOSE=1 - - -# These are used for cross-compiling and for saving the configure script -# from having to guess our platform (since we know it already) -DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) -DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) - - -CFLAGS = -Wall -g - -ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) - CFLAGS += -O0 -else - CFLAGS += -O2 -endif -ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) - INSTALL_PROGRAM += -s -endif - -# shared library versions, option 1 -#version=2.0.5 -#major=2 -# option 2, assuming the library is created as src/.libs/libfoo.so.2.0.5 or so -version=`ls src/.libs/lib*.so.* | \ - awk '{if (match($$0,/[0-9]+\.[0-9]+\.[0-9]+$$/)) print substr($$0,RSTART)}'` -major=`ls src/.libs/lib*.so.* | \ - awk '{if (match($$0,/\.so\.[0-9]+$$/)) print substr($$0,RSTART+4)}'` - -config.status: configure - dh_testdir - # Add here commands to configure the package. - CFLAGS="$(CFLAGS)" ./configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) --prefix=/usr --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info - - -build: build-stamp -build-stamp: config.status - dh_testdir - - # Add here commands to compile the package. - $(MAKE) - - touch build-stamp - -clean: - dh_testdir - dh_testroot - rm -f build-stamp - - # Add here commands to clean up after the build process. - -$(MAKE) distclean -ifneq "$(wildcard /usr/share/misc/config.sub)" "" - cp -f /usr/share/misc/config.sub config.sub -endif -ifneq "$(wildcard /usr/share/misc/config.guess)" "" - cp -f /usr/share/misc/config.guess config.guess -endif - - - dh_clean - -install: build - dh_testdir - dh_testroot - dh_clean -k - dh_installdirs - - # Add here commands to install the package into debian/tmp - $(MAKE) install DESTDIR=$(CURDIR)/debian/tmp - - -# Build architecture-independent files here. -binary-indep: build install -# We have nothing to do by default. - -# Build architecture-dependent files here. -binary-arch: build install - dh_testdir - dh_testroot - dh_installchangelogs ChangeLog - dh_installdocs - dh_installexamples - dh_install --sourcedir=debian/tmp -# dh_installmenu -# dh_installdebconf -# dh_installlogrotate -# dh_installemacsen -# dh_installpam -# dh_installmime -# dh_installinit -# dh_installcron -# dh_installinfo - dh_installman - dh_link - dh_strip - dh_compress - dh_fixperms -# dh_perl -# dh_python - dh_makeshlibs - dh_installdeb - dh_shlibdeps - dh_gencontrol - dh_md5sums - dh_builddeb - -binary: binary-indep binary-arch -.PHONY: build clean binary-indep binary-arch binary install diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/rpm.sh b/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/rpm.sh deleted file mode 100755 index 5395dc02b82a..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/rpm.sh +++ /dev/null @@ -1,75 +0,0 @@ -#!/bin/sh -e - -# Run this from the 'packages' directory, just under rootdir - -# We can only build rpm packages, if the rpm build tools are installed -if [ \! -x /usr/bin/rpmbuild ] -then - echo "Cannot find /usr/bin/rpmbuild. Not building an rpm." 1>&2 - exit 0 -fi - -# Check the commandline flags -PACKAGE="$1" -VERSION="$2" -fullname="${PACKAGE}-${VERSION}" -archive=../$fullname.tar.gz - -if [ -z "$1" -o -z "$2" ] -then - echo "Usage: $0 " 1>&2 - exit 0 -fi - -# Double-check we're in the packages directory, just under rootdir -if [ \! -r ../Makefile -a \! -r ../INSTALL ] -then - echo "Must run $0 in the 'packages' directory, under the root directory." 1>&2 - echo "Also, you must run \"make dist\" before running this script." 1>&2 - exit 0 -fi - -if [ \! -r "$archive" ] -then - echo "Cannot find $archive. Run \"make dist\" first." 1>&2 - exit 0 -fi - -# Create the directory where the input lives, and where the output should live -RPM_SOURCE_DIR="/tmp/rpmsource-$fullname" -RPM_BUILD_DIR="/tmp/rpmbuild-$fullname" - -trap 'rm -rf $RPM_SOURCE_DIR $RPM_BUILD_DIR; exit $?' EXIT SIGHUP SIGINT SIGTERM - -rm -rf "$RPM_SOURCE_DIR" "$RPM_BUILD_DIR" -mkdir "$RPM_SOURCE_DIR" -mkdir "$RPM_BUILD_DIR" - -cp "$archive" "$RPM_SOURCE_DIR" - -rpmbuild -bb rpm/rpm.spec \ - --define "NAME $PACKAGE" \ - --define "VERSION $VERSION" \ - --define "_sourcedir $RPM_SOURCE_DIR" \ - --define "_builddir $RPM_BUILD_DIR" \ - --define "_rpmdir $RPM_SOURCE_DIR" - -# We put the output in a directory based on what system we've built for -destdir=rpm-unknown -if [ -r /etc/issue ] -then - grep "Red Hat.*release 7" /etc/issue >/dev/null 2>&1 && destdir=rh7 - grep "Red Hat.*release 8" /etc/issue >/dev/null 2>&1 && destdir=rh8 - grep "Red Hat.*release 9" /etc/issue >/dev/null 2>&1 && destdir=rh9 - if grep Fedora /etc/issue >/dev/null; then - destdir=fc`grep Fedora /etc/issue | cut -d' ' -f 4`; - fi -fi - -rm -rf "$destdir" -mkdir -p "$destdir" -# We want to get not only the main package but devel etc, hence the middle * -mv "$RPM_SOURCE_DIR"/*/"${PACKAGE}"-*"${VERSION}"*.rpm "$destdir" - -echo -echo "The rpm package file(s) are located in $PWD/$destdir" diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/rpm/rpm.spec b/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/rpm/rpm.spec deleted file mode 100644 index c2edc83a868e..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/rpm/rpm.spec +++ /dev/null @@ -1,72 +0,0 @@ -%define RELEASE 1 -%define rel %{?CUSTOM_RELEASE} %{!?CUSTOM_RELEASE:%RELEASE} -%define prefix /usr - -Name: %NAME -Summary: A C++ application logging library -Version: %VERSION -Release: %rel -Group: Development/Libraries -URL: http://code.google.com/p/google-glog -License: BSD -Vendor: Google -Packager: Google Inc. -Source: http://%{NAME}.googlecode.com/files/%{NAME}-%{VERSION}.tar.gz -Distribution: Redhat 7 and above. -Buildroot: %{_tmppath}/%{name}-root -Prefix: %prefix - -%description -The %name package contains a library that implements application-level -logging. This library provides logging APIs based on C++-style -streams and various helper macros. - -%package devel -Summary: A C++ application logging library -Group: Development/Libraries -Requires: %{NAME} = %{VERSION} - -%description devel -The %name-devel package contains static and debug libraries and header -files for developing applications that use the %name package. - -%changelog - * Wed Mar 26 2008 - - First draft - -%prep -%setup - -%build -./configure -make prefix=%prefix - -%install -rm -rf $RPM_BUILD_ROOT -make prefix=$RPM_BUILD_ROOT%{prefix} install - -%clean -rm -rf $RPM_BUILD_ROOT - -%files -%defattr(-,root,root) - -## Mark all installed files within /usr/share/doc/{package name} as -## documentation. This depends on the following two lines appearing in -## Makefile.am: -## docdir = $(prefix)/share/doc/$(PACKAGE)-$(VERSION) -## dist_doc_DATA = AUTHORS COPYING ChangeLog INSTALL NEWS README -%docdir %{prefix}/share/doc/%{NAME}-%{VERSION} -%{prefix}/share/doc/%{NAME}-%{VERSION}/* - -%{prefix}/lib/libglog.so.0 -%{prefix}/lib/libglog.so.0.0.0 - -%files devel -%defattr(-,root,root) - -%{prefix}/include/glog -%{prefix}/lib/libglog.a -%{prefix}/lib/libglog.la -%{prefix}/lib/libglog.so -%{prefix}/lib/pkgconfig/libglog.pc diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/base/commandlineflags.h b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/base/commandlineflags.h deleted file mode 100644 index 53d9485f5514..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/base/commandlineflags.h +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright (c) 2008, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// --- -// This file is a compatibility layer that defines Google's version of -// command line flags that are used for configuration. -// -// We put flags into their own namespace. It is purposefully -// named in an opaque way that people should have trouble typing -// directly. The idea is that DEFINE puts the flag in the weird -// namespace, and DECLARE imports the flag from there into the -// current namespace. The net result is to force people to use -// DECLARE to get access to a flag, rather than saying -// extern bool FLAGS_logtostderr; -// or some such instead. We want this so we can put extra -// functionality (like sanity-checking) in DECLARE if we want, -// and make sure it is picked up everywhere. -// -// We also put the type of the variable in the namespace, so that -// people can't DECLARE_int32 something that they DEFINE_bool'd -// elsewhere. -#ifndef BASE_COMMANDLINEFLAGS_H__ -#define BASE_COMMANDLINEFLAGS_H__ - -#include "config.h" -#include -#include // for memchr -#include // for getenv - -#ifdef HAVE_LIB_GFLAGS - -#include - -#else - -#include "glog/logging.h" - -#define DECLARE_VARIABLE(type, name, tn) \ - namespace FLAG__namespace_do_not_use_directly_use_DECLARE_##tn##_instead { \ - extern GOOGLE_GLOG_DLL_DECL type FLAGS_##name; \ - } \ - using FLAG__namespace_do_not_use_directly_use_DECLARE_##tn##_instead::FLAGS_##name -#define DEFINE_VARIABLE(type, name, value, meaning, tn) \ - namespace FLAG__namespace_do_not_use_directly_use_DECLARE_##tn##_instead { \ - GOOGLE_GLOG_DLL_DECL type FLAGS_##name(value); \ - char FLAGS_no##name; \ - } \ - using FLAG__namespace_do_not_use_directly_use_DECLARE_##tn##_instead::FLAGS_##name - -// bool specialization -#define DECLARE_bool(name) \ - DECLARE_VARIABLE(bool, name, bool) -#define DEFINE_bool(name, value, meaning) \ - DEFINE_VARIABLE(bool, name, value, meaning, bool) - -// int32 specialization -#define DECLARE_int32(name) \ - DECLARE_VARIABLE(GOOGLE_NAMESPACE::int32, name, int32) -#define DEFINE_int32(name, value, meaning) \ - DEFINE_VARIABLE(GOOGLE_NAMESPACE::int32, name, value, meaning, int32) - -// Special case for string, because we have to specify the namespace -// std::string, which doesn't play nicely with our FLAG__namespace hackery. -#define DECLARE_string(name) \ - namespace FLAG__namespace_do_not_use_directly_use_DECLARE_string_instead { \ - extern GOOGLE_GLOG_DLL_DECL std::string FLAGS_##name; \ - } \ - using FLAG__namespace_do_not_use_directly_use_DECLARE_string_instead::FLAGS_##name -#define DEFINE_string(name, value, meaning) \ - namespace FLAG__namespace_do_not_use_directly_use_DECLARE_string_instead { \ - GOOGLE_GLOG_DLL_DECL std::string FLAGS_##name(value); \ - char FLAGS_no##name; \ - } \ - using FLAG__namespace_do_not_use_directly_use_DECLARE_string_instead::FLAGS_##name - -#endif // HAVE_LIB_GFLAGS - -// Define GLOG_DEFINE_* using DEFINE_* . By using these macros, we -// have GLOG_* environ variables even if we have gflags installed. -// -// If both an environment variable and a flag are specified, the value -// specified by a flag wins. E.g., if GLOG_v=0 and --v=1, the -// verbosity will be 1, not 0. - -#define GLOG_DEFINE_bool(name, value, meaning) \ - DEFINE_bool(name, EnvToBool("GLOG_" #name, value), meaning) - -#define GLOG_DEFINE_int32(name, value, meaning) \ - DEFINE_int32(name, EnvToInt("GLOG_" #name, value), meaning) - -#define GLOG_DEFINE_string(name, value, meaning) \ - DEFINE_string(name, EnvToString("GLOG_" #name, value), meaning) - -// These macros (could be functions, but I don't want to bother with a .cc -// file), make it easier to initialize flags from the environment. - -#define EnvToString(envname, dflt) \ - (!getenv(envname) ? (dflt) : getenv(envname)) - -#define EnvToBool(envname, dflt) \ - (!getenv(envname) ? (dflt) : memchr("tTyY1\0", getenv(envname)[0], 6) != NULL) - -#define EnvToInt(envname, dflt) \ - (!getenv(envname) ? (dflt) : strtol(getenv(envname), NULL, 10)) - -#endif // BASE_COMMANDLINEFLAGS_H__ diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/base/mutex.h b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/base/mutex.h deleted file mode 100644 index 7ba88cb5a632..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/base/mutex.h +++ /dev/null @@ -1,325 +0,0 @@ -// Copyright (c) 2007, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// --- -// Author: Craig Silverstein. -// -// A simple mutex wrapper, supporting locks and read-write locks. -// You should assume the locks are *not* re-entrant. -// -// To use: you should define the following macros in your configure.ac: -// ACX_PTHREAD -// AC_RWLOCK -// The latter is defined in ../autoconf. -// -// This class is meant to be internal-only and should be wrapped by an -// internal namespace. Before you use this module, please give the -// name of your internal namespace for this module. Or, if you want -// to expose it, you'll want to move it to the Google namespace. We -// cannot put this class in global namespace because there can be some -// problems when we have multiple versions of Mutex in each shared object. -// -// NOTE: by default, we have #ifdef'ed out the TryLock() method. -// This is for two reasons: -// 1) TryLock() under Windows is a bit annoying (it requires a -// #define to be defined very early). -// 2) TryLock() is broken for NO_THREADS mode, at least in NDEBUG -// mode. -// If you need TryLock(), and either these two caveats are not a -// problem for you, or you're willing to work around them, then -// feel free to #define GMUTEX_TRYLOCK, or to remove the #ifdefs -// in the code below. -// -// CYGWIN NOTE: Cygwin support for rwlock seems to be buggy: -// http://www.cygwin.com/ml/cygwin/2008-12/msg00017.html -// Because of that, we might as well use windows locks for -// cygwin. They seem to be more reliable than the cygwin pthreads layer. -// -// TRICKY IMPLEMENTATION NOTE: -// This class is designed to be safe to use during -// dynamic-initialization -- that is, by global constructors that are -// run before main() starts. The issue in this case is that -// dynamic-initialization happens in an unpredictable order, and it -// could be that someone else's dynamic initializer could call a -// function that tries to acquire this mutex -- but that all happens -// before this mutex's constructor has run. (This can happen even if -// the mutex and the function that uses the mutex are in the same .cc -// file.) Basically, because Mutex does non-trivial work in its -// constructor, it's not, in the naive implementation, safe to use -// before dynamic initialization has run on it. -// -// The solution used here is to pair the actual mutex primitive with a -// bool that is set to true when the mutex is dynamically initialized. -// (Before that it's false.) Then we modify all mutex routines to -// look at the bool, and not try to lock/unlock until the bool makes -// it to true (which happens after the Mutex constructor has run.) -// -// This works because before main() starts -- particularly, during -// dynamic initialization -- there are no threads, so a) it's ok that -// the mutex operations are a no-op, since we don't need locking then -// anyway; and b) we can be quite confident our bool won't change -// state between a call to Lock() and a call to Unlock() (that would -// require a global constructor in one translation unit to call Lock() -// and another global constructor in another translation unit to call -// Unlock() later, which is pretty perverse). -// -// That said, it's tricky, and can conceivably fail; it's safest to -// avoid trying to acquire a mutex in a global constructor, if you -// can. One way it can fail is that a really smart compiler might -// initialize the bool to true at static-initialization time (too -// early) rather than at dynamic-initialization time. To discourage -// that, we set is_safe_ to true in code (not the constructor -// colon-initializer) and set it to true via a function that always -// evaluates to true, but that the compiler can't know always -// evaluates to true. This should be good enough. - -#ifndef GOOGLE_MUTEX_H_ -#define GOOGLE_MUTEX_H_ - -#include "config.h" // to figure out pthreads support - -#if defined(NO_THREADS) - typedef int MutexType; // to keep a lock-count -#elif defined(_WIN32) || defined(__CYGWIN32__) || defined(__CYGWIN64__) -# define WIN32_LEAN_AND_MEAN // We only need minimal includes -# ifdef GMUTEX_TRYLOCK - // We need Windows NT or later for TryEnterCriticalSection(). If you - // don't need that functionality, you can remove these _WIN32_WINNT - // lines, and change TryLock() to assert(0) or something. -# ifndef _WIN32_WINNT -# define _WIN32_WINNT 0x0400 -# endif -# endif -// To avoid macro definition of ERROR. -# define NOGDI -// To avoid macro definition of min/max. -# define NOMINMAX -# include - typedef CRITICAL_SECTION MutexType; -#elif defined(HAVE_PTHREAD) && defined(HAVE_RWLOCK) - // Needed for pthread_rwlock_*. If it causes problems, you could take it - // out, but then you'd have to unset HAVE_RWLOCK (at least on linux -- it - // *does* cause problems for FreeBSD, or MacOSX, but isn't needed - // for locking there.) -# ifdef __linux__ -# define _XOPEN_SOURCE 500 // may be needed to get the rwlock calls -# endif -# include - typedef pthread_rwlock_t MutexType; -#elif defined(HAVE_PTHREAD) -# include - typedef pthread_mutex_t MutexType; -#else -# error Need to implement mutex.h for your architecture, or #define NO_THREADS -#endif - -// We need to include these header files after defining _XOPEN_SOURCE -// as they may define the _XOPEN_SOURCE macro. -#include -#include // for abort() - -#define MUTEX_NAMESPACE glog_internal_namespace_ - -namespace MUTEX_NAMESPACE { - -class Mutex { - public: - // Create a Mutex that is not held by anybody. This constructor is - // typically used for Mutexes allocated on the heap or the stack. - // See below for a recommendation for constructing global Mutex - // objects. - inline Mutex(); - - // Destructor - inline ~Mutex(); - - inline void Lock(); // Block if needed until free then acquire exclusively - inline void Unlock(); // Release a lock acquired via Lock() -#ifdef GMUTEX_TRYLOCK - inline bool TryLock(); // If free, Lock() and return true, else return false -#endif - // Note that on systems that don't support read-write locks, these may - // be implemented as synonyms to Lock() and Unlock(). So you can use - // these for efficiency, but don't use them anyplace where being able - // to do shared reads is necessary to avoid deadlock. - inline void ReaderLock(); // Block until free or shared then acquire a share - inline void ReaderUnlock(); // Release a read share of this Mutex - inline void WriterLock() { Lock(); } // Acquire an exclusive lock - inline void WriterUnlock() { Unlock(); } // Release a lock from WriterLock() - - // TODO(hamaji): Do nothing, implement correctly. - inline void AssertHeld() {} - - private: - MutexType mutex_; - // We want to make sure that the compiler sets is_safe_ to true only - // when we tell it to, and never makes assumptions is_safe_ is - // always true. volatile is the most reliable way to do that. - volatile bool is_safe_; - - inline void SetIsSafe() { is_safe_ = true; } - - // Catch the error of writing Mutex when intending MutexLock. - Mutex(Mutex* /*ignored*/) {} - // Disallow "evil" constructors - Mutex(const Mutex&); - void operator=(const Mutex&); -}; - -// Now the implementation of Mutex for various systems -#if defined(NO_THREADS) - -// When we don't have threads, we can be either reading or writing, -// but not both. We can have lots of readers at once (in no-threads -// mode, that's most likely to happen in recursive function calls), -// but only one writer. We represent this by having mutex_ be -1 when -// writing and a number > 0 when reading (and 0 when no lock is held). -// -// In debug mode, we assert these invariants, while in non-debug mode -// we do nothing, for efficiency. That's why everything is in an -// assert. - -Mutex::Mutex() : mutex_(0) { } -Mutex::~Mutex() { assert(mutex_ == 0); } -void Mutex::Lock() { assert(--mutex_ == -1); } -void Mutex::Unlock() { assert(mutex_++ == -1); } -#ifdef GMUTEX_TRYLOCK -bool Mutex::TryLock() { if (mutex_) return false; Lock(); return true; } -#endif -void Mutex::ReaderLock() { assert(++mutex_ > 0); } -void Mutex::ReaderUnlock() { assert(mutex_-- > 0); } - -#elif defined(_WIN32) || defined(__CYGWIN32__) || defined(__CYGWIN64__) - -Mutex::Mutex() { InitializeCriticalSection(&mutex_); SetIsSafe(); } -Mutex::~Mutex() { DeleteCriticalSection(&mutex_); } -void Mutex::Lock() { if (is_safe_) EnterCriticalSection(&mutex_); } -void Mutex::Unlock() { if (is_safe_) LeaveCriticalSection(&mutex_); } -#ifdef GMUTEX_TRYLOCK -bool Mutex::TryLock() { return is_safe_ ? - TryEnterCriticalSection(&mutex_) != 0 : true; } -#endif -void Mutex::ReaderLock() { Lock(); } // we don't have read-write locks -void Mutex::ReaderUnlock() { Unlock(); } - -#elif defined(HAVE_PTHREAD) && defined(HAVE_RWLOCK) - -#define SAFE_PTHREAD(fncall) do { /* run fncall if is_safe_ is true */ \ - if (is_safe_ && fncall(&mutex_) != 0) abort(); \ -} while (0) - -Mutex::Mutex() { - SetIsSafe(); - if (is_safe_ && pthread_rwlock_init(&mutex_, NULL) != 0) abort(); -} -Mutex::~Mutex() { SAFE_PTHREAD(pthread_rwlock_destroy); } -void Mutex::Lock() { SAFE_PTHREAD(pthread_rwlock_wrlock); } -void Mutex::Unlock() { SAFE_PTHREAD(pthread_rwlock_unlock); } -#ifdef GMUTEX_TRYLOCK -bool Mutex::TryLock() { return is_safe_ ? - pthread_rwlock_trywrlock(&mutex_) == 0 : - true; } -#endif -void Mutex::ReaderLock() { SAFE_PTHREAD(pthread_rwlock_rdlock); } -void Mutex::ReaderUnlock() { SAFE_PTHREAD(pthread_rwlock_unlock); } -#undef SAFE_PTHREAD - -#elif defined(HAVE_PTHREAD) - -#define SAFE_PTHREAD(fncall) do { /* run fncall if is_safe_ is true */ \ - if (is_safe_ && fncall(&mutex_) != 0) abort(); \ -} while (0) - -Mutex::Mutex() { - SetIsSafe(); - if (is_safe_ && pthread_mutex_init(&mutex_, NULL) != 0) abort(); -} -Mutex::~Mutex() { SAFE_PTHREAD(pthread_mutex_destroy); } -void Mutex::Lock() { SAFE_PTHREAD(pthread_mutex_lock); } -void Mutex::Unlock() { SAFE_PTHREAD(pthread_mutex_unlock); } -#ifdef GMUTEX_TRYLOCK -bool Mutex::TryLock() { return is_safe_ ? - pthread_mutex_trylock(&mutex_) == 0 : true; } -#endif -void Mutex::ReaderLock() { Lock(); } -void Mutex::ReaderUnlock() { Unlock(); } -#undef SAFE_PTHREAD - -#endif - -// -------------------------------------------------------------------------- -// Some helper classes - -// MutexLock(mu) acquires mu when constructed and releases it when destroyed. -class MutexLock { - public: - explicit MutexLock(Mutex *mu) : mu_(mu) { mu_->Lock(); } - ~MutexLock() { mu_->Unlock(); } - private: - Mutex * const mu_; - // Disallow "evil" constructors - MutexLock(const MutexLock&); - void operator=(const MutexLock&); -}; - -// ReaderMutexLock and WriterMutexLock do the same, for rwlocks -class ReaderMutexLock { - public: - explicit ReaderMutexLock(Mutex *mu) : mu_(mu) { mu_->ReaderLock(); } - ~ReaderMutexLock() { mu_->ReaderUnlock(); } - private: - Mutex * const mu_; - // Disallow "evil" constructors - ReaderMutexLock(const ReaderMutexLock&); - void operator=(const ReaderMutexLock&); -}; - -class WriterMutexLock { - public: - explicit WriterMutexLock(Mutex *mu) : mu_(mu) { mu_->WriterLock(); } - ~WriterMutexLock() { mu_->WriterUnlock(); } - private: - Mutex * const mu_; - // Disallow "evil" constructors - WriterMutexLock(const WriterMutexLock&); - void operator=(const WriterMutexLock&); -}; - -// Catch bug where variable name is omitted, e.g. MutexLock (&mu); -#define MutexLock(x) COMPILE_ASSERT(0, mutex_lock_decl_missing_var_name) -#define ReaderMutexLock(x) COMPILE_ASSERT(0, rmutex_lock_decl_missing_var_name) -#define WriterMutexLock(x) COMPILE_ASSERT(0, wmutex_lock_decl_missing_var_name) - -} // namespace MUTEX_NAMESPACE - -using namespace MUTEX_NAMESPACE; - -#undef MUTEX_NAMESPACE - -#endif /* #define GOOGLE_MUTEX_H__ */ diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/config.h.in b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/config.h.in deleted file mode 100644 index 844a7fce5c52..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/config.h.in +++ /dev/null @@ -1,165 +0,0 @@ -/* src/config.h.in. Generated from configure.ac by autoheader. */ - -/* Namespace for Google classes */ -#undef GOOGLE_NAMESPACE - -/* Define if you have the `dladdr' function */ -#undef HAVE_DLADDR - -/* Define to 1 if you have the header file. */ -#undef HAVE_DLFCN_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_EXECINFO_H - -/* Define if you have the `fcntl' function */ -#undef HAVE_FCNTL - -/* Define to 1 if you have the header file. */ -#undef HAVE_GLOB_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if you have the `pthread' library (-lpthread). */ -#undef HAVE_LIBPTHREAD - -/* Define to 1 if you have the header file. */ -#undef HAVE_LIBUNWIND_H - -/* define if you have google gflags library */ -#undef HAVE_LIB_GFLAGS - -/* define if you have google gmock library */ -#undef HAVE_LIB_GMOCK - -/* define if you have google gtest library */ -#undef HAVE_LIB_GTEST - -/* define if you have libunwind */ -#undef HAVE_LIB_UNWIND - -/* Define to 1 if you have the header file. */ -#undef HAVE_MEMORY_H - -/* define if the compiler implements namespaces */ -#undef HAVE_NAMESPACES - -/* Define if you have POSIX threads libraries and header files. */ -#undef HAVE_PTHREAD - -/* Define to 1 if you have the header file. */ -#undef HAVE_PWD_H - -/* define if the compiler implements pthread_rwlock_* */ -#undef HAVE_RWLOCK - -/* Define if you have the `sigaltstack' function */ -#undef HAVE_SIGALTSTACK - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDLIB_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYSCALL_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYSLOG_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_SYSCALL_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TIME_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_UCONTEXT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_UTSNAME_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_UCONTEXT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_UNISTD_H - -/* define if the compiler supports using expression for operator */ -#undef HAVE_USING_OPERATOR - -/* define if your compiler has __attribute__ */ -#undef HAVE___ATTRIBUTE__ - -/* define if your compiler has __builtin_expect */ -#undef HAVE___BUILTIN_EXPECT - -/* define if your compiler has __sync_val_compare_and_swap */ -#undef HAVE___SYNC_VAL_COMPARE_AND_SWAP - -/* Define to the sub-directory in which libtool stores uninstalled libraries. - */ -#undef LT_OBJDIR - -/* Name of package */ -#undef PACKAGE - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the home page for this package. */ -#undef PACKAGE_URL - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* How to access the PC from a struct ucontext */ -#undef PC_FROM_UCONTEXT - -/* Define to necessary symbol if this constant uses a non-standard name on - your system. */ -#undef PTHREAD_CREATE_JOINABLE - -/* The size of `void *', as computed by sizeof. */ -#undef SIZEOF_VOID_P - -/* Define to 1 if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* the namespace where STL code like vector<> is defined */ -#undef STL_NAMESPACE - -/* location of source code */ -#undef TEST_SRC_DIR - -/* Version number of package */ -#undef VERSION - -/* Stops putting the code inside the Google namespace */ -#undef _END_GOOGLE_NAMESPACE_ - -/* Puts following code inside the Google namespace */ -#undef _START_GOOGLE_NAMESPACE_ diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/config_for_unittests.h b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/config_for_unittests.h deleted file mode 100644 index 13ea8eab7a39..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/config_for_unittests.h +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (c) 2008, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// --- -// All Rights Reserved. -// -// Author: Craig Silverstein -// Copied from google-perftools and modified by Shinichiro Hamaji -// -// This file is needed for windows -- unittests are not part of the -// glog dll, but still want to include config.h just like the -// dll does, so they can use internal tools and APIs for testing. -// -// The problem is that config.h declares GOOGLE_GLOG_DLL_DECL to be -// for exporting symbols, but the unittest needs to *import* symbols -// (since it's not the dll). -// -// The solution is to have this file, which is just like config.h but -// sets GOOGLE_GLOG_DLL_DECL to do a dllimport instead of a dllexport. -// -// The reason we need this extra GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS -// variable is in case people want to set GOOGLE_GLOG_DLL_DECL explicitly -// to something other than __declspec(dllexport). In that case, they -// may want to use something other than __declspec(dllimport) for the -// unittest case. For that, we allow folks to define both -// GOOGLE_GLOG_DLL_DECL and GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS explicitly. -// -// NOTE: This file is equivalent to config.h on non-windows systems, -// which never defined GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS and always -// define GOOGLE_GLOG_DLL_DECL to the empty string. - -#include "config.h" - -#undef GOOGLE_GLOG_DLL_DECL -#ifdef GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS -# define GOOGLE_GLOG_DLL_DECL GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS -#else -// if DLL_DECL_FOR_UNITTESTS isn't defined, use "" -# define GOOGLE_GLOG_DLL_DECL -#endif diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/demangle.cc b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/demangle.cc deleted file mode 100644 index 2fbb7900368e..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/demangle.cc +++ /dev/null @@ -1,1307 +0,0 @@ -// Copyright (c) 2006, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: Satoru Takabayashi -// -// For reference check out: -// http://www.codesourcery.com/public/cxx-abi/abi.html#mangling -// -// Note that we only have partial C++0x support yet. - -#include // for NULL -#include "demangle.h" - -_START_GOOGLE_NAMESPACE_ - -typedef struct { - const char *abbrev; - const char *real_name; -} AbbrevPair; - -// List of operators from Itanium C++ ABI. -static const AbbrevPair kOperatorList[] = { - { "nw", "new" }, - { "na", "new[]" }, - { "dl", "delete" }, - { "da", "delete[]" }, - { "ps", "+" }, - { "ng", "-" }, - { "ad", "&" }, - { "de", "*" }, - { "co", "~" }, - { "pl", "+" }, - { "mi", "-" }, - { "ml", "*" }, - { "dv", "/" }, - { "rm", "%" }, - { "an", "&" }, - { "or", "|" }, - { "eo", "^" }, - { "aS", "=" }, - { "pL", "+=" }, - { "mI", "-=" }, - { "mL", "*=" }, - { "dV", "/=" }, - { "rM", "%=" }, - { "aN", "&=" }, - { "oR", "|=" }, - { "eO", "^=" }, - { "ls", "<<" }, - { "rs", ">>" }, - { "lS", "<<=" }, - { "rS", ">>=" }, - { "eq", "==" }, - { "ne", "!=" }, - { "lt", "<" }, - { "gt", ">" }, - { "le", "<=" }, - { "ge", ">=" }, - { "nt", "!" }, - { "aa", "&&" }, - { "oo", "||" }, - { "pp", "++" }, - { "mm", "--" }, - { "cm", "," }, - { "pm", "->*" }, - { "pt", "->" }, - { "cl", "()" }, - { "ix", "[]" }, - { "qu", "?" }, - { "st", "sizeof" }, - { "sz", "sizeof" }, - { NULL, NULL }, -}; - -// List of builtin types from Itanium C++ ABI. -static const AbbrevPair kBuiltinTypeList[] = { - { "v", "void" }, - { "w", "wchar_t" }, - { "b", "bool" }, - { "c", "char" }, - { "a", "signed char" }, - { "h", "unsigned char" }, - { "s", "short" }, - { "t", "unsigned short" }, - { "i", "int" }, - { "j", "unsigned int" }, - { "l", "long" }, - { "m", "unsigned long" }, - { "x", "long long" }, - { "y", "unsigned long long" }, - { "n", "__int128" }, - { "o", "unsigned __int128" }, - { "f", "float" }, - { "d", "double" }, - { "e", "long double" }, - { "g", "__float128" }, - { "z", "ellipsis" }, - { NULL, NULL } -}; - -// List of substitutions Itanium C++ ABI. -static const AbbrevPair kSubstitutionList[] = { - { "St", "" }, - { "Sa", "allocator" }, - { "Sb", "basic_string" }, - // std::basic_string,std::allocator > - { "Ss", "string"}, - // std::basic_istream > - { "Si", "istream" }, - // std::basic_ostream > - { "So", "ostream" }, - // std::basic_iostream > - { "Sd", "iostream" }, - { NULL, NULL } -}; - -// State needed for demangling. -typedef struct { - const char *mangled_cur; // Cursor of mangled name. - char *out_cur; // Cursor of output string. - const char *out_begin; // Beginning of output string. - const char *out_end; // End of output string. - const char *prev_name; // For constructors/destructors. - int prev_name_length; // For constructors/destructors. - short nest_level; // For nested names. - bool append; // Append flag. - bool overflowed; // True if output gets overflowed. -} State; - -// We don't use strlen() in libc since it's not guaranteed to be async -// signal safe. -static size_t StrLen(const char *str) { - size_t len = 0; - while (*str != '\0') { - ++str; - ++len; - } - return len; -} - -// Returns true if "str" has at least "n" characters remaining. -static bool AtLeastNumCharsRemaining(const char *str, int n) { - for (int i = 0; i < n; ++i) { - if (str == '\0') { - return false; - } - } - return true; -} - -// Returns true if "str" has "prefix" as a prefix. -static bool StrPrefix(const char *str, const char *prefix) { - size_t i = 0; - while (str[i] != '\0' && prefix[i] != '\0' && - str[i] == prefix[i]) { - ++i; - } - return prefix[i] == '\0'; // Consumed everything in "prefix". -} - -static void InitState(State *state, const char *mangled, - char *out, int out_size) { - state->mangled_cur = mangled; - state->out_cur = out; - state->out_begin = out; - state->out_end = out + out_size; - state->prev_name = NULL; - state->prev_name_length = -1; - state->nest_level = -1; - state->append = true; - state->overflowed = false; -} - -// Returns true and advances "mangled_cur" if we find "one_char_token" -// at "mangled_cur" position. It is assumed that "one_char_token" does -// not contain '\0'. -static bool ParseOneCharToken(State *state, const char one_char_token) { - if (state->mangled_cur[0] == one_char_token) { - ++state->mangled_cur; - return true; - } - return false; -} - -// Returns true and advances "mangled_cur" if we find "two_char_token" -// at "mangled_cur" position. It is assumed that "two_char_token" does -// not contain '\0'. -static bool ParseTwoCharToken(State *state, const char *two_char_token) { - if (state->mangled_cur[0] == two_char_token[0] && - state->mangled_cur[1] == two_char_token[1]) { - state->mangled_cur += 2; - return true; - } - return false; -} - -// Returns true and advances "mangled_cur" if we find any character in -// "char_class" at "mangled_cur" position. -static bool ParseCharClass(State *state, const char *char_class) { - if (state->mangled_cur == '\0') { - return false; - } - const char *p = char_class; - for (; *p != '\0'; ++p) { - if (state->mangled_cur[0] == *p) { - ++state->mangled_cur; - return true; - } - } - return false; -} - -// This function is used for handling an optional non-terminal. -static bool Optional(bool status) { - return true; -} - -// This function is used for handling + syntax. -typedef bool (*ParseFunc)(State *); -static bool OneOrMore(ParseFunc parse_func, State *state) { - if (parse_func(state)) { - while (parse_func(state)) { - } - return true; - } - return false; -} - -// This function is used for handling * syntax. The function -// always returns true and must be followed by a termination token or a -// terminating sequence not handled by parse_func (e.g. -// ParseOneCharToken(state, 'E')). -static bool ZeroOrMore(ParseFunc parse_func, State *state) { - while (parse_func(state)) { - } - return true; -} - -// Append "str" at "out_cur". If there is an overflow, "overflowed" -// is set to true for later use. The output string is ensured to -// always terminate with '\0' as long as there is no overflow. -static void Append(State *state, const char * const str, const int length) { - int i; - for (i = 0; i < length; ++i) { - if (state->out_cur + 1 < state->out_end) { // +1 for '\0' - *state->out_cur = str[i]; - ++state->out_cur; - } else { - state->overflowed = true; - break; - } - } - if (!state->overflowed) { - *state->out_cur = '\0'; // Terminate it with '\0' - } -} - -// We don't use equivalents in libc to avoid locale issues. -static bool IsLower(char c) { - return c >= 'a' && c <= 'z'; -} - -static bool IsAlpha(char c) { - return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); -} - -static bool IsDigit(char c) { - return c >= '0' && c <= '9'; -} - -// Returns true if "str" is a function clone suffix. These suffixes are used -// by GCC 4.5.x and later versions to indicate functions which have been -// cloned during optimization. We treat any sequence (.+.+)+ as -// a function clone suffix. -static bool IsFunctionCloneSuffix(const char *str) { - size_t i = 0; - while (str[i] != '\0') { - // Consume a single .+.+ sequence. - if (str[i] != '.' || !IsAlpha(str[i + 1])) { - return false; - } - i += 2; - while (IsAlpha(str[i])) { - ++i; - } - if (str[i] != '.' || !IsDigit(str[i + 1])) { - return false; - } - i += 2; - while (IsDigit(str[i])) { - ++i; - } - } - return true; // Consumed everything in "str". -} - -// Append "str" with some tweaks, iff "append" state is true. -// Returns true so that it can be placed in "if" conditions. -static void MaybeAppendWithLength(State *state, const char * const str, - const int length) { - if (state->append && length > 0) { - // Append a space if the output buffer ends with '<' and "str" - // starts with '<' to avoid <<<. - if (str[0] == '<' && state->out_begin < state->out_cur && - state->out_cur[-1] == '<') { - Append(state, " ", 1); - } - // Remember the last identifier name for ctors/dtors. - if (IsAlpha(str[0]) || str[0] == '_') { - state->prev_name = state->out_cur; - state->prev_name_length = length; - } - Append(state, str, length); - } -} - -// A convenient wrapper arount MaybeAppendWithLength(). -static bool MaybeAppend(State *state, const char * const str) { - if (state->append) { - int length = StrLen(str); - MaybeAppendWithLength(state, str, length); - } - return true; -} - -// This function is used for handling nested names. -static bool EnterNestedName(State *state) { - state->nest_level = 0; - return true; -} - -// This function is used for handling nested names. -static bool LeaveNestedName(State *state, short prev_value) { - state->nest_level = prev_value; - return true; -} - -// Disable the append mode not to print function parameters, etc. -static bool DisableAppend(State *state) { - state->append = false; - return true; -} - -// Restore the append mode to the previous state. -static bool RestoreAppend(State *state, bool prev_value) { - state->append = prev_value; - return true; -} - -// Increase the nest level for nested names. -static void MaybeIncreaseNestLevel(State *state) { - if (state->nest_level > -1) { - ++state->nest_level; - } -} - -// Appends :: for nested names if necessary. -static void MaybeAppendSeparator(State *state) { - if (state->nest_level >= 1) { - MaybeAppend(state, "::"); - } -} - -// Cancel the last separator if necessary. -static void MaybeCancelLastSeparator(State *state) { - if (state->nest_level >= 1 && state->append && - state->out_begin <= state->out_cur - 2) { - state->out_cur -= 2; - *state->out_cur = '\0'; - } -} - -// Returns true if the identifier of the given length pointed to by -// "mangled_cur" is anonymous namespace. -static bool IdentifierIsAnonymousNamespace(State *state, int length) { - static const char anon_prefix[] = "_GLOBAL__N_"; - return (length > sizeof(anon_prefix) - 1 && // Should be longer. - StrPrefix(state->mangled_cur, anon_prefix)); -} - -// Forward declarations of our parsing functions. -static bool ParseMangledName(State *state); -static bool ParseEncoding(State *state); -static bool ParseName(State *state); -static bool ParseUnscopedName(State *state); -static bool ParseUnscopedTemplateName(State *state); -static bool ParseNestedName(State *state); -static bool ParsePrefix(State *state); -static bool ParseUnqualifiedName(State *state); -static bool ParseSourceName(State *state); -static bool ParseLocalSourceName(State *state); -static bool ParseNumber(State *state, int *number_out); -static bool ParseFloatNumber(State *state); -static bool ParseSeqId(State *state); -static bool ParseIdentifier(State *state, int length); -static bool ParseOperatorName(State *state); -static bool ParseSpecialName(State *state); -static bool ParseCallOffset(State *state); -static bool ParseNVOffset(State *state); -static bool ParseVOffset(State *state); -static bool ParseCtorDtorName(State *state); -static bool ParseType(State *state); -static bool ParseCVQualifiers(State *state); -static bool ParseBuiltinType(State *state); -static bool ParseFunctionType(State *state); -static bool ParseBareFunctionType(State *state); -static bool ParseClassEnumType(State *state); -static bool ParseArrayType(State *state); -static bool ParsePointerToMemberType(State *state); -static bool ParseTemplateParam(State *state); -static bool ParseTemplateTemplateParam(State *state); -static bool ParseTemplateArgs(State *state); -static bool ParseTemplateArg(State *state); -static bool ParseExpression(State *state); -static bool ParseExprPrimary(State *state); -static bool ParseLocalName(State *state); -static bool ParseDiscriminator(State *state); -static bool ParseSubstitution(State *state); - -// Implementation note: the following code is a straightforward -// translation of the Itanium C++ ABI defined in BNF with a couple of -// exceptions. -// -// - Support GNU extensions not defined in the Itanium C++ ABI -// - and are combined to avoid infinite loop -// - Reorder patterns to shorten the code -// - Reorder patterns to give greedier functions precedence -// We'll mark "Less greedy than" for these cases in the code -// -// Each parsing function changes the state and returns true on -// success. Otherwise, don't change the state and returns false. To -// ensure that the state isn't changed in the latter case, we save the -// original state before we call more than one parsing functions -// consecutively with &&, and restore the state if unsuccessful. See -// ParseEncoding() as an example of this convention. We follow the -// convention throughout the code. -// -// Originally we tried to do demangling without following the full ABI -// syntax but it turned out we needed to follow the full syntax to -// parse complicated cases like nested template arguments. Note that -// implementing a full-fledged demangler isn't trivial (libiberty's -// cp-demangle.c has +4300 lines). -// -// Note that (foo) in <(foo) ...> is a modifier to be ignored. -// -// Reference: -// - Itanium C++ ABI -// - -// ::= _Z -static bool ParseMangledName(State *state) { - return ParseTwoCharToken(state, "_Z") && ParseEncoding(state); -} - -// ::= <(function) name> -// ::= <(data) name> -// ::= -static bool ParseEncoding(State *state) { - State copy = *state; - if (ParseName(state) && ParseBareFunctionType(state)) { - return true; - } - *state = copy; - - if (ParseName(state) || ParseSpecialName(state)) { - return true; - } - return false; -} - -// ::= -// ::= -// ::= -// ::= -static bool ParseName(State *state) { - if (ParseNestedName(state) || ParseLocalName(state)) { - return true; - } - - State copy = *state; - if (ParseUnscopedTemplateName(state) && - ParseTemplateArgs(state)) { - return true; - } - *state = copy; - - // Less greedy than . - if (ParseUnscopedName(state)) { - return true; - } - return false; -} - -// ::= -// ::= St -static bool ParseUnscopedName(State *state) { - if (ParseUnqualifiedName(state)) { - return true; - } - - State copy = *state; - if (ParseTwoCharToken(state, "St") && - MaybeAppend(state, "std::") && - ParseUnqualifiedName(state)) { - return true; - } - *state = copy; - return false; -} - -// ::= -// ::= -static bool ParseUnscopedTemplateName(State *state) { - return ParseUnscopedName(state) || ParseSubstitution(state); -} - -// ::= N [] E -// ::= N [] E -static bool ParseNestedName(State *state) { - State copy = *state; - if (ParseOneCharToken(state, 'N') && - EnterNestedName(state) && - Optional(ParseCVQualifiers(state)) && - ParsePrefix(state) && - LeaveNestedName(state, copy.nest_level) && - ParseOneCharToken(state, 'E')) { - return true; - } - *state = copy; - return false; -} - -// This part is tricky. If we literally translate them to code, we'll -// end up infinite loop. Hence we merge them to avoid the case. -// -// ::= -// ::= -// ::= -// ::= -// ::= # empty -// ::= <(template) unqualified-name> -// ::= -// ::= -static bool ParsePrefix(State *state) { - bool has_something = false; - while (true) { - MaybeAppendSeparator(state); - if (ParseTemplateParam(state) || - ParseSubstitution(state) || - ParseUnscopedName(state)) { - has_something = true; - MaybeIncreaseNestLevel(state); - continue; - } - MaybeCancelLastSeparator(state); - if (has_something && ParseTemplateArgs(state)) { - return ParsePrefix(state); - } else { - break; - } - } - return true; -} - -// ::= -// ::= -// ::= -// ::= -static bool ParseUnqualifiedName(State *state) { - return (ParseOperatorName(state) || - ParseCtorDtorName(state) || - ParseSourceName(state) || - ParseLocalSourceName(state)); -} - -// ::= -static bool ParseSourceName(State *state) { - State copy = *state; - int length = -1; - if (ParseNumber(state, &length) && ParseIdentifier(state, length)) { - return true; - } - *state = copy; - return false; -} - -// ::= L [] -// -// References: -// http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31775 -// http://gcc.gnu.org/viewcvs?view=rev&revision=124467 -static bool ParseLocalSourceName(State *state) { - State copy = *state; - if (ParseOneCharToken(state, 'L') && ParseSourceName(state) && - Optional(ParseDiscriminator(state))) { - return true; - } - *state = copy; - return false; -} - -// ::= [n] -// If "number_out" is non-null, then *number_out is set to the value of the -// parsed number on success. -static bool ParseNumber(State *state, int *number_out) { - int sign = 1; - if (ParseOneCharToken(state, 'n')) { - sign = -1; - } - const char *p = state->mangled_cur; - int number = 0; - for (;*p != '\0'; ++p) { - if (IsDigit(*p)) { - number = number * 10 + (*p - '0'); - } else { - break; - } - } - if (p != state->mangled_cur) { // Conversion succeeded. - state->mangled_cur = p; - if (number_out != NULL) { - *number_out = number * sign; - } - return true; - } - return false; -} - -// Floating-point literals are encoded using a fixed-length lowercase -// hexadecimal string. -static bool ParseFloatNumber(State *state) { - const char *p = state->mangled_cur; - for (;*p != '\0'; ++p) { - if (!IsDigit(*p) && !(*p >= 'a' && *p <= 'f')) { - break; - } - } - if (p != state->mangled_cur) { // Conversion succeeded. - state->mangled_cur = p; - return true; - } - return false; -} - -// The is a sequence number in base 36, -// using digits and upper case letters -static bool ParseSeqId(State *state) { - const char *p = state->mangled_cur; - for (;*p != '\0'; ++p) { - if (!IsDigit(*p) && !(*p >= 'A' && *p <= 'Z')) { - break; - } - } - if (p != state->mangled_cur) { // Conversion succeeded. - state->mangled_cur = p; - return true; - } - return false; -} - -// ::= (of given length) -static bool ParseIdentifier(State *state, int length) { - if (length == -1 || - !AtLeastNumCharsRemaining(state->mangled_cur, length)) { - return false; - } - if (IdentifierIsAnonymousNamespace(state, length)) { - MaybeAppend(state, "(anonymous namespace)"); - } else { - MaybeAppendWithLength(state, state->mangled_cur, length); - } - state->mangled_cur += length; - return true; -} - -// ::= nw, and other two letters cases -// ::= cv # (cast) -// ::= v # vendor extended operator -static bool ParseOperatorName(State *state) { - if (!AtLeastNumCharsRemaining(state->mangled_cur, 2)) { - return false; - } - // First check with "cv" (cast) case. - State copy = *state; - if (ParseTwoCharToken(state, "cv") && - MaybeAppend(state, "operator ") && - EnterNestedName(state) && - ParseType(state) && - LeaveNestedName(state, copy.nest_level)) { - return true; - } - *state = copy; - - // Then vendor extended operators. - if (ParseOneCharToken(state, 'v') && ParseCharClass(state, "0123456789") && - ParseSourceName(state)) { - return true; - } - *state = copy; - - // Other operator names should start with a lower alphabet followed - // by a lower/upper alphabet. - if (!(IsLower(state->mangled_cur[0]) && - IsAlpha(state->mangled_cur[1]))) { - return false; - } - // We may want to perform a binary search if we really need speed. - const AbbrevPair *p; - for (p = kOperatorList; p->abbrev != NULL; ++p) { - if (state->mangled_cur[0] == p->abbrev[0] && - state->mangled_cur[1] == p->abbrev[1]) { - MaybeAppend(state, "operator"); - if (IsLower(*p->real_name)) { // new, delete, etc. - MaybeAppend(state, " "); - } - MaybeAppend(state, p->real_name); - state->mangled_cur += 2; - return true; - } - } - return false; -} - -// ::= TV -// ::= TT -// ::= TI -// ::= TS -// ::= Tc <(base) encoding> -// ::= GV <(object) name> -// ::= T <(base) encoding> -// G++ extensions: -// ::= TC <(offset) number> _ <(base) type> -// ::= TF -// ::= TJ -// ::= GR -// ::= GA -// ::= Th <(base) encoding> -// ::= Tv <(base) encoding> -// -// Note: we don't care much about them since they don't appear in -// stack traces. The are special data. -static bool ParseSpecialName(State *state) { - State copy = *state; - if (ParseOneCharToken(state, 'T') && - ParseCharClass(state, "VTIS") && - ParseType(state)) { - return true; - } - *state = copy; - - if (ParseTwoCharToken(state, "Tc") && ParseCallOffset(state) && - ParseCallOffset(state) && ParseEncoding(state)) { - return true; - } - *state = copy; - - if (ParseTwoCharToken(state, "GV") && - ParseName(state)) { - return true; - } - *state = copy; - - if (ParseOneCharToken(state, 'T') && ParseCallOffset(state) && - ParseEncoding(state)) { - return true; - } - *state = copy; - - // G++ extensions - if (ParseTwoCharToken(state, "TC") && ParseType(state) && - ParseNumber(state, NULL) && ParseOneCharToken(state, '_') && - DisableAppend(state) && - ParseType(state)) { - RestoreAppend(state, copy.append); - return true; - } - *state = copy; - - if (ParseOneCharToken(state, 'T') && ParseCharClass(state, "FJ") && - ParseType(state)) { - return true; - } - *state = copy; - - if (ParseTwoCharToken(state, "GR") && ParseName(state)) { - return true; - } - *state = copy; - - if (ParseTwoCharToken(state, "GA") && ParseEncoding(state)) { - return true; - } - *state = copy; - - if (ParseOneCharToken(state, 'T') && ParseCharClass(state, "hv") && - ParseCallOffset(state) && ParseEncoding(state)) { - return true; - } - *state = copy; - return false; -} - -// ::= h _ -// ::= v _ -static bool ParseCallOffset(State *state) { - State copy = *state; - if (ParseOneCharToken(state, 'h') && - ParseNVOffset(state) && ParseOneCharToken(state, '_')) { - return true; - } - *state = copy; - - if (ParseOneCharToken(state, 'v') && - ParseVOffset(state) && ParseOneCharToken(state, '_')) { - return true; - } - *state = copy; - - return false; -} - -// ::= <(offset) number> -static bool ParseNVOffset(State *state) { - return ParseNumber(state, NULL); -} - -// ::= <(offset) number> _ <(virtual offset) number> -static bool ParseVOffset(State *state) { - State copy = *state; - if (ParseNumber(state, NULL) && ParseOneCharToken(state, '_') && - ParseNumber(state, NULL)) { - return true; - } - *state = copy; - return false; -} - -// ::= C1 | C2 | C3 -// ::= D0 | D1 | D2 -static bool ParseCtorDtorName(State *state) { - State copy = *state; - if (ParseOneCharToken(state, 'C') && - ParseCharClass(state, "123")) { - const char * const prev_name = state->prev_name; - const int prev_name_length = state->prev_name_length; - MaybeAppendWithLength(state, prev_name, prev_name_length); - return true; - } - *state = copy; - - if (ParseOneCharToken(state, 'D') && - ParseCharClass(state, "012")) { - const char * const prev_name = state->prev_name; - const int prev_name_length = state->prev_name_length; - MaybeAppend(state, "~"); - MaybeAppendWithLength(state, prev_name, prev_name_length); - return true; - } - *state = copy; - return false; -} - -// ::= -// ::= P # pointer-to -// ::= R # reference-to -// ::= O # rvalue reference-to (C++0x) -// ::= C # complex pair (C 2000) -// ::= G # imaginary (C 2000) -// ::= U # vendor extended type qualifier -// ::= -// ::= -// ::= -// ::= -// ::= -// ::= -// ::= -// ::= -// ::= Dp # pack expansion of (C++0x) -// ::= Dt E # decltype of an id-expression or class -// # member access (C++0x) -// ::= DT E # decltype of an expression (C++0x) -// -static bool ParseType(State *state) { - // We should check CV-qualifers, and PRGC things first. - State copy = *state; - if (ParseCVQualifiers(state) && ParseType(state)) { - return true; - } - *state = copy; - - if (ParseCharClass(state, "OPRCG") && ParseType(state)) { - return true; - } - *state = copy; - - if (ParseTwoCharToken(state, "Dp") && ParseType(state)) { - return true; - } - *state = copy; - - if (ParseOneCharToken(state, 'D') && ParseCharClass(state, "tT") && - ParseExpression(state) && ParseOneCharToken(state, 'E')) { - return true; - } - *state = copy; - - if (ParseOneCharToken(state, 'U') && ParseSourceName(state) && - ParseType(state)) { - return true; - } - *state = copy; - - if (ParseBuiltinType(state) || - ParseFunctionType(state) || - ParseClassEnumType(state) || - ParseArrayType(state) || - ParsePointerToMemberType(state) || - ParseSubstitution(state)) { - return true; - } - - if (ParseTemplateTemplateParam(state) && - ParseTemplateArgs(state)) { - return true; - } - *state = copy; - - // Less greedy than . - if (ParseTemplateParam(state)) { - return true; - } - - return false; -} - -// ::= [r] [V] [K] -// We don't allow empty to avoid infinite loop in -// ParseType(). -static bool ParseCVQualifiers(State *state) { - int num_cv_qualifiers = 0; - num_cv_qualifiers += ParseOneCharToken(state, 'r'); - num_cv_qualifiers += ParseOneCharToken(state, 'V'); - num_cv_qualifiers += ParseOneCharToken(state, 'K'); - return num_cv_qualifiers > 0; -} - -// ::= v, etc. -// ::= u -static bool ParseBuiltinType(State *state) { - const AbbrevPair *p; - for (p = kBuiltinTypeList; p->abbrev != NULL; ++p) { - if (state->mangled_cur[0] == p->abbrev[0]) { - MaybeAppend(state, p->real_name); - ++state->mangled_cur; - return true; - } - } - - State copy = *state; - if (ParseOneCharToken(state, 'u') && ParseSourceName(state)) { - return true; - } - *state = copy; - return false; -} - -// ::= F [Y] E -static bool ParseFunctionType(State *state) { - State copy = *state; - if (ParseOneCharToken(state, 'F') && - Optional(ParseOneCharToken(state, 'Y')) && - ParseBareFunctionType(state) && ParseOneCharToken(state, 'E')) { - return true; - } - *state = copy; - return false; -} - -// ::= <(signature) type>+ -static bool ParseBareFunctionType(State *state) { - State copy = *state; - DisableAppend(state); - if (OneOrMore(ParseType, state)) { - RestoreAppend(state, copy.append); - MaybeAppend(state, "()"); - return true; - } - *state = copy; - return false; -} - -// ::= -static bool ParseClassEnumType(State *state) { - return ParseName(state); -} - -// ::= A <(positive dimension) number> _ <(element) type> -// ::= A [<(dimension) expression>] _ <(element) type> -static bool ParseArrayType(State *state) { - State copy = *state; - if (ParseOneCharToken(state, 'A') && ParseNumber(state, NULL) && - ParseOneCharToken(state, '_') && ParseType(state)) { - return true; - } - *state = copy; - - if (ParseOneCharToken(state, 'A') && Optional(ParseExpression(state)) && - ParseOneCharToken(state, '_') && ParseType(state)) { - return true; - } - *state = copy; - return false; -} - -// ::= M <(class) type> <(member) type> -static bool ParsePointerToMemberType(State *state) { - State copy = *state; - if (ParseOneCharToken(state, 'M') && ParseType(state) && - ParseType(state)) { - return true; - } - *state = copy; - return false; -} - -// ::= T_ -// ::= T _ -static bool ParseTemplateParam(State *state) { - if (ParseTwoCharToken(state, "T_")) { - MaybeAppend(state, "?"); // We don't support template substitutions. - return true; - } - - State copy = *state; - if (ParseOneCharToken(state, 'T') && ParseNumber(state, NULL) && - ParseOneCharToken(state, '_')) { - MaybeAppend(state, "?"); // We don't support template substitutions. - return true; - } - *state = copy; - return false; -} - - -// ::= -// ::= -static bool ParseTemplateTemplateParam(State *state) { - return (ParseTemplateParam(state) || - ParseSubstitution(state)); -} - -// ::= I + E -static bool ParseTemplateArgs(State *state) { - State copy = *state; - DisableAppend(state); - if (ParseOneCharToken(state, 'I') && - OneOrMore(ParseTemplateArg, state) && - ParseOneCharToken(state, 'E')) { - RestoreAppend(state, copy.append); - MaybeAppend(state, "<>"); - return true; - } - *state = copy; - return false; -} - -// ::= -// ::= -// ::= I * E # argument pack -// ::= X E -static bool ParseTemplateArg(State *state) { - State copy = *state; - if (ParseOneCharToken(state, 'I') && - ZeroOrMore(ParseTemplateArg, state) && - ParseOneCharToken(state, 'E')) { - return true; - } - *state = copy; - - if (ParseType(state) || - ParseExprPrimary(state)) { - return true; - } - *state = copy; - - if (ParseOneCharToken(state, 'X') && ParseExpression(state) && - ParseOneCharToken(state, 'E')) { - return true; - } - *state = copy; - return false; -} - -// ::= -// ::= -// ::= -// ::= -// ::= -// -// ::= st -// ::= sr -// ::= sr -static bool ParseExpression(State *state) { - if (ParseTemplateParam(state) || ParseExprPrimary(state)) { - return true; - } - - State copy = *state; - if (ParseOperatorName(state) && - ParseExpression(state) && - ParseExpression(state) && - ParseExpression(state)) { - return true; - } - *state = copy; - - if (ParseOperatorName(state) && - ParseExpression(state) && - ParseExpression(state)) { - return true; - } - *state = copy; - - if (ParseOperatorName(state) && - ParseExpression(state)) { - return true; - } - *state = copy; - - if (ParseTwoCharToken(state, "st") && ParseType(state)) { - return true; - } - *state = copy; - - if (ParseTwoCharToken(state, "sr") && ParseType(state) && - ParseUnqualifiedName(state) && - ParseTemplateArgs(state)) { - return true; - } - *state = copy; - - if (ParseTwoCharToken(state, "sr") && ParseType(state) && - ParseUnqualifiedName(state)) { - return true; - } - *state = copy; - return false; -} - -// ::= L <(value) number> E -// ::= L <(value) float> E -// ::= L E -// // A bug in g++'s C++ ABI version 2 (-fabi-version=2). -// ::= LZ E -static bool ParseExprPrimary(State *state) { - State copy = *state; - if (ParseOneCharToken(state, 'L') && ParseType(state) && - ParseNumber(state, NULL) && - ParseOneCharToken(state, 'E')) { - return true; - } - *state = copy; - - if (ParseOneCharToken(state, 'L') && ParseType(state) && - ParseFloatNumber(state) && - ParseOneCharToken(state, 'E')) { - return true; - } - *state = copy; - - if (ParseOneCharToken(state, 'L') && ParseMangledName(state) && - ParseOneCharToken(state, 'E')) { - return true; - } - *state = copy; - - if (ParseTwoCharToken(state, "LZ") && ParseEncoding(state) && - ParseOneCharToken(state, 'E')) { - return true; - } - *state = copy; - - return false; -} - -// := Z <(function) encoding> E <(entity) name> -// [] -// := Z <(function) encoding> E s [] -static bool ParseLocalName(State *state) { - State copy = *state; - if (ParseOneCharToken(state, 'Z') && ParseEncoding(state) && - ParseOneCharToken(state, 'E') && MaybeAppend(state, "::") && - ParseName(state) && Optional(ParseDiscriminator(state))) { - return true; - } - *state = copy; - - if (ParseOneCharToken(state, 'Z') && ParseEncoding(state) && - ParseTwoCharToken(state, "Es") && Optional(ParseDiscriminator(state))) { - return true; - } - *state = copy; - return false; -} - -// := _ <(non-negative) number> -static bool ParseDiscriminator(State *state) { - State copy = *state; - if (ParseOneCharToken(state, '_') && ParseNumber(state, NULL)) { - return true; - } - *state = copy; - return false; -} - -// ::= S_ -// ::= S _ -// ::= St, etc. -static bool ParseSubstitution(State *state) { - if (ParseTwoCharToken(state, "S_")) { - MaybeAppend(state, "?"); // We don't support substitutions. - return true; - } - - State copy = *state; - if (ParseOneCharToken(state, 'S') && ParseSeqId(state) && - ParseOneCharToken(state, '_')) { - MaybeAppend(state, "?"); // We don't support substitutions. - return true; - } - *state = copy; - - // Expand abbreviations like "St" => "std". - if (ParseOneCharToken(state, 'S')) { - const AbbrevPair *p; - for (p = kSubstitutionList; p->abbrev != NULL; ++p) { - if (state->mangled_cur[0] == p->abbrev[1]) { - MaybeAppend(state, "std"); - if (p->real_name[0] != '\0') { - MaybeAppend(state, "::"); - MaybeAppend(state, p->real_name); - } - ++state->mangled_cur; - return true; - } - } - } - *state = copy; - return false; -} - -// Parse , optionally followed by either a function-clone suffix -// or version suffix. Returns true only if all of "mangled_cur" was consumed. -static bool ParseTopLevelMangledName(State *state) { - if (ParseMangledName(state)) { - if (state->mangled_cur[0] != '\0') { - // Drop trailing function clone suffix, if any. - if (IsFunctionCloneSuffix(state->mangled_cur)) { - return true; - } - // Append trailing version suffix if any. - // ex. _Z3foo@@GLIBCXX_3.4 - if (state->mangled_cur[0] == '@') { - MaybeAppend(state, state->mangled_cur); - return true; - } - return false; // Unconsumed suffix. - } - return true; - } - return false; -} - -// The demangler entry point. -bool Demangle(const char *mangled, char *out, int out_size) { - State state; - InitState(&state, mangled, out, out_size); - return ParseTopLevelMangledName(&state) && !state.overflowed; -} - -_END_GOOGLE_NAMESPACE_ diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/demangle.h b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/demangle.h deleted file mode 100644 index 9c7591527c0f..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/demangle.h +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright (c) 2006, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: Satoru Takabayashi -// -// An async-signal-safe and thread-safe demangler for Itanium C++ ABI -// (aka G++ V3 ABI). - -// The demangler is implemented to be used in async signal handlers to -// symbolize stack traces. We cannot use libstdc++'s -// abi::__cxa_demangle() in such signal handlers since it's not async -// signal safe (it uses malloc() internally). -// -// Note that this demangler doesn't support full demangling. More -// specifically, it doesn't print types of function parameters and -// types of template arguments. It just skips them. However, it's -// still very useful to extract basic information such as class, -// function, constructor, destructor, and operator names. -// -// See the implementation note in demangle.cc if you are interested. -// -// Example: -// -// | Mangled Name | The Demangler | abi::__cxa_demangle() -// |---------------|---------------|----------------------- -// | _Z1fv | f() | f() -// | _Z1fi | f() | f(int) -// | _Z3foo3bar | foo() | foo(bar) -// | _Z1fIiEvi | f<>() | void f(int) -// | _ZN1N1fE | N::f | N::f -// | _ZN3Foo3BarEv | Foo::Bar() | Foo::Bar() -// | _Zrm1XS_" | operator%() | operator%(X, X) -// | _ZN3FooC1Ev | Foo::Foo() | Foo::Foo() -// | _Z1fSs | f() | f(std::basic_string, -// | | | std::allocator >) -// -// See the unit test for more examples. -// -// Note: we might want to write demanglers for ABIs other than Itanium -// C++ ABI in the future. -// - -#ifndef BASE_DEMANGLE_H_ -#define BASE_DEMANGLE_H_ - -#include "config.h" - -_START_GOOGLE_NAMESPACE_ - -// Demangle "mangled". On success, return true and write the -// demangled symbol name to "out". Otherwise, return false. -// "out" is modified even if demangling is unsuccessful. -bool Demangle(const char *mangled, char *out, int out_size); - -_END_GOOGLE_NAMESPACE_ - -#endif // BASE_DEMANGLE_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/demangle_unittest.cc b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/demangle_unittest.cc deleted file mode 100644 index 9d219e653110..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/demangle_unittest.cc +++ /dev/null @@ -1,142 +0,0 @@ -// Copyright (c) 2006, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: Satoru Takabayashi -// -// Unit tests for functions in demangle.c. - -#include "utilities.h" - -#include -#include -#include -#include "glog/logging.h" -#include "demangle.h" -#include "googletest.h" -#include "config.h" - -GLOG_DEFINE_bool(demangle_filter, false, - "Run demangle_unittest in filter mode"); - -using namespace std; -using namespace GOOGLE_NAMESPACE; - -// A wrapper function for Demangle() to make the unit test simple. -static const char *DemangleIt(const char * const mangled) { - static char demangled[4096]; - if (Demangle(mangled, demangled, sizeof(demangled))) { - return demangled; - } else { - return mangled; - } -} - -// Test corner cases of bounary conditions. -TEST(Demangle, CornerCases) { - char tmp[10]; - EXPECT_TRUE(Demangle("_Z6foobarv", tmp, sizeof(tmp))); - // sizeof("foobar()") == 9 - EXPECT_STREQ("foobar()", tmp); - EXPECT_TRUE(Demangle("_Z6foobarv", tmp, 9)); - EXPECT_STREQ("foobar()", tmp); - EXPECT_FALSE(Demangle("_Z6foobarv", tmp, 8)); // Not enough. - EXPECT_FALSE(Demangle("_Z6foobarv", tmp, 1)); - EXPECT_FALSE(Demangle("_Z6foobarv", tmp, 0)); - EXPECT_FALSE(Demangle("_Z6foobarv", NULL, 0)); // Should not cause SEGV. -} - -// Test handling of functions suffixed with .clone.N, which is used by GCC -// 4.5.x, and .constprop.N and .isra.N, which are used by GCC 4.6.x. These -// suffixes are used to indicate functions which have been cloned during -// optimization. We ignore these suffixes. -TEST(Demangle, Clones) { - char tmp[20]; - EXPECT_TRUE(Demangle("_ZL3Foov", tmp, sizeof(tmp))); - EXPECT_STREQ("Foo()", tmp); - EXPECT_TRUE(Demangle("_ZL3Foov.clone.3", tmp, sizeof(tmp))); - EXPECT_STREQ("Foo()", tmp); - EXPECT_TRUE(Demangle("_ZL3Foov.constprop.80", tmp, sizeof(tmp))); - EXPECT_STREQ("Foo()", tmp); - EXPECT_TRUE(Demangle("_ZL3Foov.isra.18", tmp, sizeof(tmp))); - EXPECT_STREQ("Foo()", tmp); - EXPECT_TRUE(Demangle("_ZL3Foov.isra.2.constprop.18", tmp, sizeof(tmp))); - EXPECT_STREQ("Foo()", tmp); - // Invalid (truncated), should not demangle. - EXPECT_FALSE(Demangle("_ZL3Foov.clo", tmp, sizeof(tmp))); - // Invalid (.clone. not followed by number), should not demangle. - EXPECT_FALSE(Demangle("_ZL3Foov.clone.", tmp, sizeof(tmp))); - // Invalid (.clone. followed by non-number), should not demangle. - EXPECT_FALSE(Demangle("_ZL3Foov.clone.foo", tmp, sizeof(tmp))); - // Invalid (.constprop. not followed by number), should not demangle. - EXPECT_FALSE(Demangle("_ZL3Foov.isra.2.constprop.", tmp, sizeof(tmp))); -} - -TEST(Demangle, FromFile) { - string test_file = FLAGS_test_srcdir + "/src/demangle_unittest.txt"; - ifstream f(test_file.c_str()); // The file should exist. - EXPECT_FALSE(f.fail()); - - string line; - while (getline(f, line)) { - // Lines start with '#' are considered as comments. - if (line.empty() || line[0] == '#') { - continue; - } - // Each line should contain a mangled name and a demangled name - // separated by '\t'. Example: "_Z3foo\tfoo" - string::size_type tab_pos = line.find('\t'); - EXPECT_NE(string::npos, tab_pos); - string mangled = line.substr(0, tab_pos); - string demangled = line.substr(tab_pos + 1); - EXPECT_EQ(demangled, DemangleIt(mangled.c_str())); - } -} - -int main(int argc, char **argv) { -#ifdef HAVE_LIB_GFLAGS - ParseCommandLineFlags(&argc, &argv, true); -#endif - InitGoogleTest(&argc, argv); - - FLAGS_logtostderr = true; - InitGoogleLogging(argv[0]); - if (FLAGS_demangle_filter) { - // Read from cin and write to cout. - string line; - while (getline(cin, line, '\n')) { - cout << DemangleIt(line.c_str()) << endl; - } - return 0; - } else if (argc > 1) { - cout << DemangleIt(argv[1]) << endl; - return 0; - } else { - return RUN_ALL_TESTS(); - } -} diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/demangle_unittest.sh b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/demangle_unittest.sh deleted file mode 100755 index 91deee2198da..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/demangle_unittest.sh +++ /dev/null @@ -1,95 +0,0 @@ -#! /bin/sh -# -# Copyright (c) 2006, Google Inc. -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following disclaimer -# in the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# Author: Satoru Takabayashi -# -# Unit tests for demangle.c with a real binary. - -set -e - -die () { - echo $1 - exit 1 -} - -BINDIR=".libs" -LIBGLOG="$BINDIR/libglog.so" - -DEMANGLER="$BINDIR/demangle_unittest" - -if test -e "$DEMANGLER"; then - # We need shared object. - export LD_LIBRARY_PATH=$BINDIR - export DYLD_LIBRARY_PATH=$BINDIR -else - # For windows - DEMANGLER="./demangle_unittest.exe" - if ! test -e "$DEMANGLER"; then - echo "We coundn't find demangle_unittest binary." - exit 1 - fi -fi - -# Extract C++ mangled symbols from libbase.so. -NM_OUTPUT="demangle.nm" -nm "$LIBGLOG" | perl -nle 'print $1 if /\s(_Z\S+$)/' > "$NM_OUTPUT" - -# Check if mangled symbols exist. If there are none, we quit. -# The binary is more likely compiled with GCC 2.95 or something old. -if ! grep --quiet '^_Z' "$NM_OUTPUT"; then - echo "PASS" - exit 0 -fi - -# Demangle the symbols using our demangler. -DM_OUTPUT="demangle.dm" -GLOG_demangle_filter=1 "$DEMANGLER" --demangle_filter < "$NM_OUTPUT" > "$DM_OUTPUT" - -# Calculate the numbers of lines. -NM_LINES=`wc -l "$NM_OUTPUT" | awk '{ print $1 }'` -DM_LINES=`wc -l "$DM_OUTPUT" | awk '{ print $1 }'` - -# Compare the numbers of lines. They must be the same. -if test "$NM_LINES" != "$DM_LINES"; then - die "$NM_OUTPUT and $DM_OUTPUT don't have the same numbers of lines" -fi - -# Check if mangled symbols exist. They must not exist. -if grep --quiet '^_Z' "$DM_OUTPUT"; then - MANGLED=`grep '^_Z' "$DM_OUTPUT" | wc -l | awk '{ print \$1 }'` - echo "Mangled symbols ($MANGLED out of $NM_LINES) found in $DM_OUTPUT:" - grep '^_Z' "$DM_OUTPUT" - die "Mangled symbols ($MANGLED out of $NM_LINES) found in $DM_OUTPUT" -fi - -# All C++ symbols are demangled successfully. -echo "PASS" -exit 0 diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/demangle_unittest.txt b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/demangle_unittest.txt deleted file mode 100644 index 4e23c65b2d7a..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/demangle_unittest.txt +++ /dev/null @@ -1,137 +0,0 @@ -# Test caces for demangle_unittest. Each line consists of a -# tab-separated pair of mangled and demangled symbol names. - -# Constructors and destructors. -_ZN3FooC1Ev Foo::Foo() -_ZN3FooD1Ev Foo::~Foo() -_ZNSoD0Ev std::ostream::~ostream() - -# G++ extensions. -_ZTCN10LogMessage9LogStreamE0_So LogMessage::LogStream -_ZTv0_n12_N10LogMessage9LogStreamD0Ev LogMessage::LogStream::~LogStream() -_ZThn4_N7icu_3_410UnicodeSetD0Ev icu_3_4::UnicodeSet::~UnicodeSet() - -# A bug in g++'s C++ ABI version 2 (-fabi-version=2). -_ZN7NSSInfoI5groupjjXadL_Z10getgrgid_rEELZ19nss_getgrgid_r_nameEEC1Ei NSSInfo<>::NSSInfo() - -# C linkage symbol names. Should keep them untouched. -main main -Demangle Demangle -_ZERO _ZERO - -# Cast operator. -_Zcviv operator int() -_ZN3foocviEv foo::operator int() - -# Versioned symbols. -_Z3Foo@GLIBCXX_3.4 Foo@GLIBCXX_3.4 -_Z3Foo@@GLIBCXX_3.4 Foo@@GLIBCXX_3.4 - -# Abbreviations. -_ZNSaE std::allocator -_ZNSbE std::basic_string -_ZNSdE std::iostream -_ZNSiE std::istream -_ZNSoE std::ostream -_ZNSsE std::string - -# Substitutions. We just replace them with ?. -_ZN3fooS_E foo::? -_ZN3foo3barS0_E foo::bar::? -_ZNcvT_IiEEv operator ?<>() - -# "<< <" case. -_ZlsI3fooE operator<< <> - -# Random things we found interesting. -_ZN3FooISt6vectorISsSaISsEEEclEv Foo<>::operator()() -_ZTI9Callback1IiE Callback1<> -_ZN7icu_3_47UMemorynwEj icu_3_4::UMemory::operator new() -_ZNSt6vectorIbE9push_backE std::vector<>::push_back -_ZNSt6vectorIbSaIbEE9push_backEb std::vector<>::push_back() -_ZlsRSoRK15PRIVATE_Counter operator<<() -_ZSt6fill_nIPPN9__gnu_cxx15_Hashtable_nodeISt4pairIKPKcjEEEjS8_ET_SA_T0_RKT1_ std::fill_n<>() -_ZZ3FoovE3Bar Foo()::Bar -_ZGVZ7UpTimervE8up_timer UpTimer()::up_timer - -# Test cases from gcc-4.1.0/libstdc++-v3/testsuite/demangle. -# Collected by: -# % grep verify_demangle **/*.cc | perl -nle 'print $1 if /"(_Z.*?)"/' | -# sort | uniq -# -# Note that the following symbols are invalid. -# That's why they are not demangled. -# - _ZNZN1N1fEiE1X1gE -# - _ZNZN1N1fEiE1X1gEv -# - _Z1xINiEE -_Z1fA37_iPS_ f() -_Z1fAszL_ZZNK1N1A1fEvE3foo_0E_i f() -_Z1fI1APS0_PKS0_EvT_T0_T1_PA4_S3_M1CS8_ f<>() -_Z1fI1XENT_1tES2_ f<>() -_Z1fI1XEvPVN1AIT_E1TE f<>() -_Z1fILi1ELc120EEv1AIXplT_cviLd4028ae147ae147aeEEE f<>() -_Z1fILi1ELc120EEv1AIXplT_cviLf3f800000EEE f<>() -_Z1fILi5E1AEvN1CIXqugtT_Li0ELi1ELi2EEE1qE f<>() -_Z1fILi5E1AEvN1CIXstN1T1tEEXszsrS2_1tEE1qE f<>() -_Z1fILi5EEvN1AIXcvimlT_Li22EEE1qE f<>() -_Z1fIiEvi f<>() -_Z1fKPFiiE f() -_Z1fM1AFivEPS0_ f() -_Z1fM1AKFivE f() -_Z1fM1AKFvvE f() -_Z1fPFPA1_ivE f() -_Z1fPFYPFiiEiE f() -_Z1fPFvvEM1SFvvE f() -_Z1fPKM1AFivE f() -_Z1fi f() -_Z1fv f() -_Z1jM1AFivEPS1_ j() -_Z1rM1GFivEMS_KFivES_M1HFivES1_4whatIKS_E5what2IS8_ES3_ r() -_Z1sPA37_iPS0_ s() -_Z1xINiEE _Z1xINiEE -_Z3absILi11EEvv abs<>() -_Z3foo3bar foo() -_Z3foo5Hello5WorldS0_S_ foo() -_Z3fooA30_A_i foo() -_Z3fooIA6_KiEvA9_KT_rVPrS4_ foo<>() -_Z3fooILi2EEvRAplT_Li1E_i foo<>() -_Z3fooIiFvdEiEvv foo<>() -_Z3fooPM2ABi foo() -_Z3fooc foo() -_Z3fooiPiPS_PS0_PS1_PS2_PS3_PS4_PS5_PS6_PS7_PS8_PS9_PSA_PSB_PSC_ foo() -_Z3kooPA28_A30_i koo() -_Z4makeI7FactoryiET_IT0_Ev make<>() -_Z5firstI3DuoEvS0_ first<>() -_Z5firstI3DuoEvT_ first<>() -_Z9hairyfuncM1YKFPVPFrPA2_PM1XKFKPA3_ilEPcEiE hairyfunc() -_ZGVN5libcw24_GLOBAL__N_cbll.cc0ZhUKa23compiler_bug_workaroundISt6vectorINS_13omanip_id_tctINS_5debug32memblk_types_manipulator_data_ctEEESaIS6_EEE3idsE libcw::(anonymous namespace)::compiler_bug_workaround<>::ids -_ZN12libcw_app_ct10add_optionIS_EEvMT_FvPKcES3_cS3_S3_ libcw_app_ct::add_option<>() -_ZN1AIfEcvT_IiEEv A<>::operator ?<>() -_ZN1N1TIiiE2mfES0_IddE N::T<>::mf() -_ZN1N1fE N::f -_ZN1f1fE f::f -_ZN3FooIA4_iE3barE Foo<>::bar -_ZN5Arena5levelE Arena::level -_ZN5StackIiiE5levelE Stack<>::level -_ZN5libcw5debug13cwprint_usingINS_9_private_12GlobalObjectEEENS0_17cwprint_using_tctIT_EERKS5_MS5_KFvRSt7ostreamE libcw::debug::cwprint_using<>() -_ZN6System5Sound4beepEv System::Sound::beep() -_ZNKSt14priority_queueIP27timer_event_request_base_ctSt5dequeIS1_SaIS1_EE13timer_greaterE3topEv std::priority_queue<>::top() -_ZNKSt15_Deque_iteratorIP15memory_block_stRKS1_PS2_EeqERKS5_ std::_Deque_iterator<>::operator==() -_ZNKSt17__normal_iteratorIPK6optionSt6vectorIS0_SaIS0_EEEmiERKS6_ std::__normal_iterator<>::operator-() -_ZNSbIcSt11char_traitsIcEN5libcw5debug27no_alloc_checking_allocatorEE12_S_constructIPcEES6_T_S7_RKS3_ std::basic_string<>::_S_construct<>() -_ZNSt13_Alloc_traitsISbIcSt18string_char_traitsIcEN5libcw5debug9_private_17allocator_adaptorIcSt24__default_alloc_templateILb0ELi327664EELb1EEEENS5_IS9_S7_Lb1EEEE15_S_instancelessE std::_Alloc_traits<>::_S_instanceless -_ZNSt3_In4wardE std::_In::ward -_ZNZN1N1fEiE1X1gE _ZNZN1N1fEiE1X1gE -_ZNZN1N1fEiE1X1gEv _ZNZN1N1fEiE1X1gEv -_ZSt1BISt1DIP1ARKS2_PS3_ES0_IS2_RS2_PS2_ES2_ET0_T_SB_SA_PT1_ std::B<>() -_ZSt5state std::state -_ZTI7a_class a_class -_ZZN1N1fEiE1p N::f()::p -_ZZN1N1fEiEs N::f() -_ZlsRK1XS1_ operator<<() -_ZlsRKU3fooU4bart1XS0_ operator<<() -_ZlsRKU3fooU4bart1XS2_ operator<<() -_ZlsRSoRKSs operator<<() -_ZngILi42EEvN1AIXplT_Li2EEE1TE operator-<>() -_ZplR1XS0_ operator+() -_Zrm1XS_ operator%() diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/glog/log_severity.h b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/glog/log_severity.h deleted file mode 100644 index 17805fbadd4e..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/glog/log_severity.h +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright (c) 2007, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef BASE_LOG_SEVERITY_H__ -#define BASE_LOG_SEVERITY_H__ - -// Annoying stuff for windows -- makes sure clients can import these functions -#ifndef GOOGLE_GLOG_DLL_DECL -# if defined(_WIN32) && !defined(__CYGWIN__) -# define GOOGLE_GLOG_DLL_DECL __declspec(dllimport) -# else -# define GOOGLE_GLOG_DLL_DECL -# endif -#endif - -// Variables of type LogSeverity are widely taken to lie in the range -// [0, NUM_SEVERITIES-1]. Be careful to preserve this assumption if -// you ever need to change their values or add a new severity. -typedef int LogSeverity; - -const int INFO = 0, WARNING = 1, ERROR = 2, FATAL = 3, NUM_SEVERITIES = 4; - -// DFATAL is FATAL in debug mode, ERROR in normal mode -#ifdef NDEBUG -#define DFATAL_LEVEL ERROR -#else -#define DFATAL_LEVEL FATAL -#endif - -extern GOOGLE_GLOG_DLL_DECL const char* const LogSeverityNames[NUM_SEVERITIES]; - -// NDEBUG usage helpers related to (RAW_)DCHECK: -// -// DEBUG_MODE is for small !NDEBUG uses like -// if (DEBUG_MODE) foo.CheckThatFoo(); -// instead of substantially more verbose -// #ifndef NDEBUG -// foo.CheckThatFoo(); -// #endif -// -// IF_DEBUG_MODE is for small !NDEBUG uses like -// IF_DEBUG_MODE( string error; ) -// DCHECK(Foo(&error)) << error; -// instead of substantially more verbose -// #ifndef NDEBUG -// string error; -// DCHECK(Foo(&error)) << error; -// #endif -// -#ifdef NDEBUG -enum { DEBUG_MODE = 0 }; -#define IF_DEBUG_MODE(x) -#else -enum { DEBUG_MODE = 1 }; -#define IF_DEBUG_MODE(x) x -#endif - -#endif // BASE_LOG_SEVERITY_H__ diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/glog/logging.h.in b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/glog/logging.h.in deleted file mode 100644 index 435655247061..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/glog/logging.h.in +++ /dev/null @@ -1,1506 +0,0 @@ -// Copyright (c) 1999, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: Ray Sidney -// -// This file contains #include information about logging-related stuff. -// Pretty much everybody needs to #include this file so that they can -// log various happenings. -// -#ifndef _LOGGING_H_ -#define _LOGGING_H_ - -#include -#include -#include -#include -#if @ac_cv_have_unistd_h@ -# include -#endif -#ifdef __DEPRECATED -// Make GCC quiet. -# undef __DEPRECATED -# include -# define __DEPRECATED -#else -# include -#endif -#include - -// Annoying stuff for windows -- makes sure clients can import these functions -#ifndef GOOGLE_GLOG_DLL_DECL -# if defined(_WIN32) && !defined(__CYGWIN__) -# define GOOGLE_GLOG_DLL_DECL __declspec(dllimport) -# else -# define GOOGLE_GLOG_DLL_DECL -# endif -#endif - -// We care a lot about number of bits things take up. Unfortunately, -// systems define their bit-specific ints in a lot of different ways. -// We use our own way, and have a typedef to get there. -// Note: these commands below may look like "#if 1" or "#if 0", but -// that's because they were constructed that way at ./configure time. -// Look at logging.h.in to see how they're calculated (based on your config). -#if @ac_cv_have_stdint_h@ -#include // the normal place uint16_t is defined -#endif -#if @ac_cv_have_systypes_h@ -#include // the normal place u_int16_t is defined -#endif -#if @ac_cv_have_inttypes_h@ -#include // a third place for uint16_t or u_int16_t -#endif - -#if @ac_cv_have_libgflags@ -#include -#endif - -@ac_google_start_namespace@ - -#if @ac_cv_have_uint16_t@ // the C99 format -typedef int32_t int32; -typedef uint32_t uint32; -typedef int64_t int64; -typedef uint64_t uint64; -#elif @ac_cv_have_u_int16_t@ // the BSD format -typedef int32_t int32; -typedef u_int32_t uint32; -typedef int64_t int64; -typedef u_int64_t uint64; -#elif @ac_cv_have___uint16@ // the windows (vc7) format -typedef __int32 int32; -typedef unsigned __int32 uint32; -typedef __int64 int64; -typedef unsigned __int64 uint64; -#else -#error Do not know how to define a 32-bit integer quantity on your system -#endif - -@ac_google_end_namespace@ - -// The global value of GOOGLE_STRIP_LOG. All the messages logged to -// LOG(XXX) with severity less than GOOGLE_STRIP_LOG will not be displayed. -// If it can be determined at compile time that the message will not be -// printed, the statement will be compiled out. -// -// Example: to strip out all INFO and WARNING messages, use the value -// of 2 below. To make an exception for WARNING messages from a single -// file, add "#define GOOGLE_STRIP_LOG 1" to that file _before_ including -// base/logging.h -#ifndef GOOGLE_STRIP_LOG -#define GOOGLE_STRIP_LOG 0 -#endif - -// GCC can be told that a certain branch is not likely to be taken (for -// instance, a CHECK failure), and use that information in static analysis. -// Giving it this information can help it optimize for the common case in -// the absence of better information (ie. -fprofile-arcs). -// -#ifndef GOOGLE_PREDICT_BRANCH_NOT_TAKEN -#if @ac_cv_have___builtin_expect@ -#define GOOGLE_PREDICT_BRANCH_NOT_TAKEN(x) (__builtin_expect(x, 0)) -#else -#define GOOGLE_PREDICT_BRANCH_NOT_TAKEN(x) x -#endif -#endif - -// Make a bunch of macros for logging. The way to log things is to stream -// things to LOG(). E.g., -// -// LOG(INFO) << "Found " << num_cookies << " cookies"; -// -// You can capture log messages in a string, rather than reporting them -// immediately: -// -// vector errors; -// LOG_STRING(ERROR, &errors) << "Couldn't parse cookie #" << cookie_num; -// -// This pushes back the new error onto 'errors'; if given a NULL pointer, -// it reports the error via LOG(ERROR). -// -// You can also do conditional logging: -// -// LOG_IF(INFO, num_cookies > 10) << "Got lots of cookies"; -// -// You can also do occasional logging (log every n'th occurrence of an -// event): -// -// LOG_EVERY_N(INFO, 10) << "Got the " << google::COUNTER << "th cookie"; -// -// The above will cause log messages to be output on the 1st, 11th, 21st, ... -// times it is executed. Note that the special google::COUNTER value is used -// to identify which repetition is happening. -// -// You can also do occasional conditional logging (log every n'th -// occurrence of an event, when condition is satisfied): -// -// LOG_IF_EVERY_N(INFO, (size > 1024), 10) << "Got the " << google::COUNTER -// << "th big cookie"; -// -// You can log messages the first N times your code executes a line. E.g. -// -// LOG_FIRST_N(INFO, 20) << "Got the " << google::COUNTER << "th cookie"; -// -// Outputs log messages for the first 20 times it is executed. -// -// Analogous SYSLOG, SYSLOG_IF, and SYSLOG_EVERY_N macros are available. -// These log to syslog as well as to the normal logs. If you use these at -// all, you need to be aware that syslog can drastically reduce performance, -// especially if it is configured for remote logging! Don't use these -// unless you fully understand this and have a concrete need to use them. -// Even then, try to minimize your use of them. -// -// There are also "debug mode" logging macros like the ones above: -// -// DLOG(INFO) << "Found cookies"; -// -// DLOG_IF(INFO, num_cookies > 10) << "Got lots of cookies"; -// -// DLOG_EVERY_N(INFO, 10) << "Got the " << google::COUNTER << "th cookie"; -// -// All "debug mode" logging is compiled away to nothing for non-debug mode -// compiles. -// -// We also have -// -// LOG_ASSERT(assertion); -// DLOG_ASSERT(assertion); -// -// which is syntactic sugar for {,D}LOG_IF(FATAL, assert fails) << assertion; -// -// There are "verbose level" logging macros. They look like -// -// VLOG(1) << "I'm printed when you run the program with --v=1 or more"; -// VLOG(2) << "I'm printed when you run the program with --v=2 or more"; -// -// These always log at the INFO log level (when they log at all). -// The verbose logging can also be turned on module-by-module. For instance, -// --vmodule=mapreduce=2,file=1,gfs*=3 --v=0 -// will cause: -// a. VLOG(2) and lower messages to be printed from mapreduce.{h,cc} -// b. VLOG(1) and lower messages to be printed from file.{h,cc} -// c. VLOG(3) and lower messages to be printed from files prefixed with "gfs" -// d. VLOG(0) and lower messages to be printed from elsewhere -// -// The wildcarding functionality shown by (c) supports both '*' (match -// 0 or more characters) and '?' (match any single character) wildcards. -// -// There's also VLOG_IS_ON(n) "verbose level" condition macro. To be used as -// -// if (VLOG_IS_ON(2)) { -// // do some logging preparation and logging -// // that can't be accomplished with just VLOG(2) << ...; -// } -// -// There are also VLOG_IF, VLOG_EVERY_N and VLOG_IF_EVERY_N "verbose level" -// condition macros for sample cases, when some extra computation and -// preparation for logs is not needed. -// VLOG_IF(1, (size > 1024)) -// << "I'm printed when size is more than 1024 and when you run the " -// "program with --v=1 or more"; -// VLOG_EVERY_N(1, 10) -// << "I'm printed every 10th occurrence, and when you run the program " -// "with --v=1 or more. Present occurence is " << google::COUNTER; -// VLOG_IF_EVERY_N(1, (size > 1024), 10) -// << "I'm printed on every 10th occurence of case when size is more " -// " than 1024, when you run the program with --v=1 or more. "; -// "Present occurence is " << google::COUNTER; -// -// The supported severity levels for macros that allow you to specify one -// are (in increasing order of severity) INFO, WARNING, ERROR, and FATAL. -// Note that messages of a given severity are logged not only in the -// logfile for that severity, but also in all logfiles of lower severity. -// E.g., a message of severity FATAL will be logged to the logfiles of -// severity FATAL, ERROR, WARNING, and INFO. -// -// There is also the special severity of DFATAL, which logs FATAL in -// debug mode, ERROR in normal mode. -// -// Very important: logging a message at the FATAL severity level causes -// the program to terminate (after the message is logged). -// -// Unless otherwise specified, logs will be written to the filename -// "...log..", followed -// by the date, time, and pid (you can't prevent the date, time, and pid -// from being in the filename). -// -// The logging code takes two flags: -// --v=# set the verbose level -// --logtostderr log all the messages to stderr instead of to logfiles - -// LOG LINE PREFIX FORMAT -// -// Log lines have this form: -// -// Lmmdd hh:mm:ss.uuuuuu threadid file:line] msg... -// -// where the fields are defined as follows: -// -// L A single character, representing the log level -// (eg 'I' for INFO) -// mm The month (zero padded; ie May is '05') -// dd The day (zero padded) -// hh:mm:ss.uuuuuu Time in hours, minutes and fractional seconds -// threadid The space-padded thread ID as returned by GetTID() -// (this matches the PID on Linux) -// file The file name -// line The line number -// msg The user-supplied message -// -// Example: -// -// I1103 11:57:31.739339 24395 google.cc:2341] Command line: ./some_prog -// I1103 11:57:31.739403 24395 google.cc:2342] Process id 24395 -// -// NOTE: although the microseconds are useful for comparing events on -// a single machine, clocks on different machines may not be well -// synchronized. Hence, use caution when comparing the low bits of -// timestamps from different machines. - -#ifndef DECLARE_VARIABLE -#define MUST_UNDEF_GFLAGS_DECLARE_MACROS -#define DECLARE_VARIABLE(type, name, tn) \ - namespace FLAG__namespace_do_not_use_directly_use_DECLARE_##tn##_instead { \ - extern GOOGLE_GLOG_DLL_DECL type FLAGS_##name; \ - } \ - using FLAG__namespace_do_not_use_directly_use_DECLARE_##tn##_instead::FLAGS_##name - -// bool specialization -#define DECLARE_bool(name) \ - DECLARE_VARIABLE(bool, name, bool) - -// int32 specialization -#define DECLARE_int32(name) \ - DECLARE_VARIABLE(@ac_google_namespace@::int32, name, int32) - -// Special case for string, because we have to specify the namespace -// std::string, which doesn't play nicely with our FLAG__namespace hackery. -#define DECLARE_string(name) \ - namespace FLAG__namespace_do_not_use_directly_use_DECLARE_string_instead { \ - extern GOOGLE_GLOG_DLL_DECL std::string FLAGS_##name; \ - } \ - using FLAG__namespace_do_not_use_directly_use_DECLARE_string_instead::FLAGS_##name -#endif - -// Set whether log messages go to stderr instead of logfiles -DECLARE_bool(logtostderr); - -// Set whether log messages go to stderr in addition to logfiles. -DECLARE_bool(alsologtostderr); - -// Log messages at a level >= this flag are automatically sent to -// stderr in addition to log files. -DECLARE_int32(stderrthreshold); - -// Set whether the log prefix should be prepended to each line of output. -DECLARE_bool(log_prefix); - -// Log messages at a level <= this flag are buffered. -// Log messages at a higher level are flushed immediately. -DECLARE_int32(logbuflevel); - -// Sets the maximum number of seconds which logs may be buffered for. -DECLARE_int32(logbufsecs); - -// Log suppression level: messages logged at a lower level than this -// are suppressed. -DECLARE_int32(minloglevel); - -// If specified, logfiles are written into this directory instead of the -// default logging directory. -DECLARE_string(log_dir); - -// Sets the path of the directory into which to put additional links -// to the log files. -DECLARE_string(log_link); - -DECLARE_int32(v); // in vlog_is_on.cc - -// Sets the maximum log file size (in MB). -DECLARE_int32(max_log_size); - -// Sets whether to avoid logging to the disk if the disk is full. -DECLARE_bool(stop_logging_if_full_disk); - -#ifdef MUST_UNDEF_GFLAGS_DECLARE_MACROS -#undef MUST_UNDEF_GFLAGS_DECLARE_MACROS -#undef DECLARE_VARIABLE -#undef DECLARE_bool -#undef DECLARE_int32 -#undef DECLARE_string -#endif - -// Log messages below the GOOGLE_STRIP_LOG level will be compiled away for -// security reasons. See LOG(severtiy) below. - -// A few definitions of macros that don't generate much code. Since -// LOG(INFO) and its ilk are used all over our code, it's -// better to have compact code for these operations. - -#if GOOGLE_STRIP_LOG == 0 -#define COMPACT_GOOGLE_LOG_INFO @ac_google_namespace@::LogMessage( \ - __FILE__, __LINE__) -#define LOG_TO_STRING_INFO(message) @ac_google_namespace@::LogMessage( \ - __FILE__, __LINE__, @ac_google_namespace@::INFO, message) -#else -#define COMPACT_GOOGLE_LOG_INFO @ac_google_namespace@::NullStream() -#define LOG_TO_STRING_INFO(message) @ac_google_namespace@::NullStream() -#endif - -#if GOOGLE_STRIP_LOG <= 1 -#define COMPACT_GOOGLE_LOG_WARNING @ac_google_namespace@::LogMessage( \ - __FILE__, __LINE__, @ac_google_namespace@::WARNING) -#define LOG_TO_STRING_WARNING(message) @ac_google_namespace@::LogMessage( \ - __FILE__, __LINE__, @ac_google_namespace@::WARNING, message) -#else -#define COMPACT_GOOGLE_LOG_WARNING @ac_google_namespace@::NullStream() -#define LOG_TO_STRING_WARNING(message) @ac_google_namespace@::NullStream() -#endif - -#if GOOGLE_STRIP_LOG <= 2 -#define COMPACT_GOOGLE_LOG_ERROR @ac_google_namespace@::LogMessage( \ - __FILE__, __LINE__, @ac_google_namespace@::ERROR) -#define LOG_TO_STRING_ERROR(message) @ac_google_namespace@::LogMessage( \ - __FILE__, __LINE__, @ac_google_namespace@::ERROR, message) -#else -#define COMPACT_GOOGLE_LOG_ERROR @ac_google_namespace@::NullStream() -#define LOG_TO_STRING_ERROR(message) @ac_google_namespace@::NullStream() -#endif - -#if GOOGLE_STRIP_LOG <= 3 -#define COMPACT_GOOGLE_LOG_FATAL @ac_google_namespace@::LogMessageFatal( \ - __FILE__, __LINE__) -#define LOG_TO_STRING_FATAL(message) @ac_google_namespace@::LogMessage( \ - __FILE__, __LINE__, @ac_google_namespace@::FATAL, message) -#else -#define COMPACT_GOOGLE_LOG_FATAL @ac_google_namespace@::NullStreamFatal() -#define LOG_TO_STRING_FATAL(message) @ac_google_namespace@::NullStreamFatal() -#endif - -// For DFATAL, we want to use LogMessage (as opposed to -// LogMessageFatal), to be consistent with the original behavior. -#ifdef NDEBUG -#define COMPACT_GOOGLE_LOG_DFATAL COMPACT_GOOGLE_LOG_ERROR -#elif GOOGLE_STRIP_LOG <= 3 -#define COMPACT_GOOGLE_LOG_DFATAL @ac_google_namespace@::LogMessage( \ - __FILE__, __LINE__, @ac_google_namespace@::FATAL) -#else -#define COMPACT_GOOGLE_LOG_DFATAL @ac_google_namespace@::NullStreamFatal() -#endif - -#define GOOGLE_LOG_INFO(counter) @ac_google_namespace@::LogMessage(__FILE__, __LINE__, @ac_google_namespace@::INFO, counter, &@ac_google_namespace@::LogMessage::SendToLog) -#define SYSLOG_INFO(counter) \ - @ac_google_namespace@::LogMessage(__FILE__, __LINE__, @ac_google_namespace@::INFO, counter, \ - &@ac_google_namespace@::LogMessage::SendToSyslogAndLog) -#define GOOGLE_LOG_WARNING(counter) \ - @ac_google_namespace@::LogMessage(__FILE__, __LINE__, @ac_google_namespace@::WARNING, counter, \ - &@ac_google_namespace@::LogMessage::SendToLog) -#define SYSLOG_WARNING(counter) \ - @ac_google_namespace@::LogMessage(__FILE__, __LINE__, @ac_google_namespace@::WARNING, counter, \ - &@ac_google_namespace@::LogMessage::SendToSyslogAndLog) -#define GOOGLE_LOG_ERROR(counter) \ - @ac_google_namespace@::LogMessage(__FILE__, __LINE__, @ac_google_namespace@::ERROR, counter, \ - &@ac_google_namespace@::LogMessage::SendToLog) -#define SYSLOG_ERROR(counter) \ - @ac_google_namespace@::LogMessage(__FILE__, __LINE__, @ac_google_namespace@::ERROR, counter, \ - &@ac_google_namespace@::LogMessage::SendToSyslogAndLog) -#define GOOGLE_LOG_FATAL(counter) \ - @ac_google_namespace@::LogMessage(__FILE__, __LINE__, @ac_google_namespace@::FATAL, counter, \ - &@ac_google_namespace@::LogMessage::SendToLog) -#define SYSLOG_FATAL(counter) \ - @ac_google_namespace@::LogMessage(__FILE__, __LINE__, @ac_google_namespace@::FATAL, counter, \ - &@ac_google_namespace@::LogMessage::SendToSyslogAndLog) -#define GOOGLE_LOG_DFATAL(counter) \ - @ac_google_namespace@::LogMessage(__FILE__, __LINE__, @ac_google_namespace@::DFATAL_LEVEL, counter, \ - &@ac_google_namespace@::LogMessage::SendToLog) -#define SYSLOG_DFATAL(counter) \ - @ac_google_namespace@::LogMessage(__FILE__, __LINE__, @ac_google_namespace@::DFATAL_LEVEL, counter, \ - &@ac_google_namespace@::LogMessage::SendToSyslogAndLog) - -#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) || defined(__CYGWIN32__) -// A very useful logging macro to log windows errors: -#define LOG_SYSRESULT(result) \ - if (FAILED(result)) { \ - LPTSTR message = NULL; \ - LPTSTR msg = reinterpret_cast(&message); \ - DWORD message_length = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | \ - FORMAT_MESSAGE_FROM_SYSTEM, \ - 0, result, 0, msg, 100, NULL); \ - if (message_length > 0) { \ - @ac_google_namespace@::LogMessage(__FILE__, __LINE__, ERROR, 0, \ - &@ac_google_namespace@::LogMessage::SendToLog).stream() << message; \ - LocalFree(message); \ - } \ - } -#endif - -// We use the preprocessor's merging operator, "##", so that, e.g., -// LOG(INFO) becomes the token GOOGLE_LOG_INFO. There's some funny -// subtle difference between ostream member streaming functions (e.g., -// ostream::operator<<(int) and ostream non-member streaming functions -// (e.g., ::operator<<(ostream&, string&): it turns out that it's -// impossible to stream something like a string directly to an unnamed -// ostream. We employ a neat hack by calling the stream() member -// function of LogMessage which seems to avoid the problem. -#define LOG(severity) COMPACT_GOOGLE_LOG_ ## severity.stream() -#define SYSLOG(severity) SYSLOG_ ## severity(0).stream() - -@ac_google_start_namespace@ - -// They need the definitions of integer types. -#include "glog/log_severity.h" -#include "glog/vlog_is_on.h" - -// Initialize google's logging library. You will see the program name -// specified by argv0 in log outputs. -GOOGLE_GLOG_DLL_DECL void InitGoogleLogging(const char* argv0); - -// Shutdown google's logging library. -GOOGLE_GLOG_DLL_DECL void ShutdownGoogleLogging(); - -// Install a function which will be called after LOG(FATAL). -GOOGLE_GLOG_DLL_DECL void InstallFailureFunction(void (*fail_func)()); - -class LogSink; // defined below - -// If a non-NULL sink pointer is given, we push this message to that sink. -// For LOG_TO_SINK we then do normal LOG(severity) logging as well. -// This is useful for capturing messages and passing/storing them -// somewhere more specific than the global log of the process. -// Argument types: -// LogSink* sink; -// LogSeverity severity; -// The cast is to disambiguate NULL arguments. -#define LOG_TO_SINK(sink, severity) \ - @ac_google_namespace@::LogMessage( \ - __FILE__, __LINE__, \ - @ac_google_namespace@::severity, \ - static_cast<@ac_google_namespace@::LogSink*>(sink), true).stream() -#define LOG_TO_SINK_BUT_NOT_TO_LOGFILE(sink, severity) \ - @ac_google_namespace@::LogMessage( \ - __FILE__, __LINE__, \ - @ac_google_namespace@::severity, \ - static_cast<@ac_google_namespace@::LogSink*>(sink), false).stream() - -// If a non-NULL string pointer is given, we write this message to that string. -// We then do normal LOG(severity) logging as well. -// This is useful for capturing messages and storing them somewhere more -// specific than the global log of the process. -// Argument types: -// string* message; -// LogSeverity severity; -// The cast is to disambiguate NULL arguments. -// NOTE: LOG(severity) expands to LogMessage().stream() for the specified -// severity. -#define LOG_TO_STRING(severity, message) \ - LOG_TO_STRING_##severity(static_cast(message)).stream() - -// If a non-NULL pointer is given, we push the message onto the end -// of a vector of strings; otherwise, we report it with LOG(severity). -// This is handy for capturing messages and perhaps passing them back -// to the caller, rather than reporting them immediately. -// Argument types: -// LogSeverity severity; -// vector *outvec; -// The cast is to disambiguate NULL arguments. -#define LOG_STRING(severity, outvec) \ - LOG_TO_STRING_##severity(static_cast*>(outvec)).stream() - -#define LOG_IF(severity, condition) \ - !(condition) ? (void) 0 : @ac_google_namespace@::LogMessageVoidify() & LOG(severity) -#define SYSLOG_IF(severity, condition) \ - !(condition) ? (void) 0 : @ac_google_namespace@::LogMessageVoidify() & SYSLOG(severity) - -#define LOG_ASSERT(condition) \ - LOG_IF(FATAL, !(condition)) << "Assert failed: " #condition -#define SYSLOG_ASSERT(condition) \ - SYSLOG_IF(FATAL, !(condition)) << "Assert failed: " #condition - -// CHECK dies with a fatal error if condition is not true. It is *not* -// controlled by NDEBUG, so the check will be executed regardless of -// compilation mode. Therefore, it is safe to do things like: -// CHECK(fp->Write(x) == 4) -#define CHECK(condition) \ - LOG_IF(FATAL, GOOGLE_PREDICT_BRANCH_NOT_TAKEN(!(condition))) \ - << "Check failed: " #condition " " - -// A container for a string pointer which can be evaluated to a bool - -// true iff the pointer is NULL. -struct CheckOpString { - CheckOpString(std::string* str) : str_(str) { } - // No destructor: if str_ is non-NULL, we're about to LOG(FATAL), - // so there's no point in cleaning up str_. - operator bool() const { - return GOOGLE_PREDICT_BRANCH_NOT_TAKEN(str_ != NULL); - } - std::string* str_; -}; - -// Function is overloaded for integral types to allow static const -// integrals declared in classes and not defined to be used as arguments to -// CHECK* macros. It's not encouraged though. -template -inline const T& GetReferenceableValue(const T& t) { return t; } -inline char GetReferenceableValue(char t) { return t; } -inline unsigned char GetReferenceableValue(unsigned char t) { return t; } -inline signed char GetReferenceableValue(signed char t) { return t; } -inline short GetReferenceableValue(short t) { return t; } -inline unsigned short GetReferenceableValue(unsigned short t) { return t; } -inline int GetReferenceableValue(int t) { return t; } -inline unsigned int GetReferenceableValue(unsigned int t) { return t; } -inline long GetReferenceableValue(long t) { return t; } -inline unsigned long GetReferenceableValue(unsigned long t) { return t; } -inline long long GetReferenceableValue(long long t) { return t; } -inline unsigned long long GetReferenceableValue(unsigned long long t) { - return t; -} - -// This is a dummy class to define the following operator. -struct DummyClassToDefineOperator {}; - -@ac_google_end_namespace@ - -// Define global operator<< to declare using ::operator<<. -// This declaration will allow use to use CHECK macros for user -// defined classes which have operator<< (e.g., stl_logging.h). -inline std::ostream& operator<<( - std::ostream& out, const google::DummyClassToDefineOperator&) { - return out; -} - -@ac_google_start_namespace@ - -// Build the error message string. -template -std::string* MakeCheckOpString(const t1& v1, const t2& v2, const char* names) { - // It means that we cannot use stl_logging if compiler doesn't - // support using expression for operator. - // TODO(hamaji): Figure out a way to fix. -#if @ac_cv_cxx_using_operator@ - using ::operator<<; -#endif - std::strstream ss; - ss << names << " (" << v1 << " vs. " << v2 << ")"; - return new std::string(ss.str(), ss.pcount()); -} - -// Helper functions for CHECK_OP macro. -// The (int, int) specialization works around the issue that the compiler -// will not instantiate the template version of the function on values of -// unnamed enum type - see comment below. -#define DEFINE_CHECK_OP_IMPL(name, op) \ - template \ - inline std::string* Check##name##Impl(const t1& v1, const t2& v2, \ - const char* names) { \ - if (v1 op v2) return NULL; \ - else return MakeCheckOpString(v1, v2, names); \ - } \ - inline std::string* Check##name##Impl(int v1, int v2, const char* names) { \ - return Check##name##Impl(v1, v2, names); \ - } - -// Use _EQ, _NE, _LE, etc. in case the file including base/logging.h -// provides its own #defines for the simpler names EQ, NE, LE, etc. -// This happens if, for example, those are used as token names in a -// yacc grammar. -DEFINE_CHECK_OP_IMPL(_EQ, ==) -DEFINE_CHECK_OP_IMPL(_NE, !=) -DEFINE_CHECK_OP_IMPL(_LE, <=) -DEFINE_CHECK_OP_IMPL(_LT, < ) -DEFINE_CHECK_OP_IMPL(_GE, >=) -DEFINE_CHECK_OP_IMPL(_GT, > ) -#undef DEFINE_CHECK_OP_IMPL - -// Helper macro for binary operators. -// Don't use this macro directly in your code, use CHECK_EQ et al below. - -#if defined(STATIC_ANALYSIS) -// Only for static analysis tool to know that it is equivalent to assert -#define CHECK_OP_LOG(name, op, val1, val2, log) CHECK((val1) op (val2)) -#elif !defined(NDEBUG) -// In debug mode, avoid constructing CheckOpStrings if possible, -// to reduce the overhead of CHECK statments by 2x. -// Real DCHECK-heavy tests have seen 1.5x speedups. - -// The meaning of "string" might be different between now and -// when this macro gets invoked (e.g., if someone is experimenting -// with other string implementations that get defined after this -// file is included). Save the current meaning now and use it -// in the macro. -typedef std::string _Check_string; -#define CHECK_OP_LOG(name, op, val1, val2, log) \ - while (@ac_google_namespace@::_Check_string* _result = \ - @ac_google_namespace@::Check##name##Impl( \ - @ac_google_namespace@::GetReferenceableValue(val1), \ - @ac_google_namespace@::GetReferenceableValue(val2), \ - #val1 " " #op " " #val2)) \ - log(__FILE__, __LINE__, \ - @ac_google_namespace@::CheckOpString(_result)).stream() -#else -// In optimized mode, use CheckOpString to hint to compiler that -// the while condition is unlikely. -#define CHECK_OP_LOG(name, op, val1, val2, log) \ - while (@ac_google_namespace@::CheckOpString _result = \ - @ac_google_namespace@::Check##name##Impl( \ - @ac_google_namespace@::GetReferenceableValue(val1), \ - @ac_google_namespace@::GetReferenceableValue(val2), \ - #val1 " " #op " " #val2)) \ - log(__FILE__, __LINE__, _result).stream() -#endif // STATIC_ANALYSIS, !NDEBUG - -#if GOOGLE_STRIP_LOG <= 3 -#define CHECK_OP(name, op, val1, val2) \ - CHECK_OP_LOG(name, op, val1, val2, @ac_google_namespace@::LogMessageFatal) -#else -#define CHECK_OP(name, op, val1, val2) \ - CHECK_OP_LOG(name, op, val1, val2, @ac_google_namespace@::NullStreamFatal) -#endif // STRIP_LOG <= 3 - -// Equality/Inequality checks - compare two values, and log a FATAL message -// including the two values when the result is not as expected. The values -// must have operator<<(ostream, ...) defined. -// -// You may append to the error message like so: -// CHECK_NE(1, 2) << ": The world must be ending!"; -// -// We are very careful to ensure that each argument is evaluated exactly -// once, and that anything which is legal to pass as a function argument is -// legal here. In particular, the arguments may be temporary expressions -// which will end up being destroyed at the end of the apparent statement, -// for example: -// CHECK_EQ(string("abc")[1], 'b'); -// -// WARNING: These don't compile correctly if one of the arguments is a pointer -// and the other is NULL. To work around this, simply static_cast NULL to the -// type of the desired pointer. - -#define CHECK_EQ(val1, val2) CHECK_OP(_EQ, ==, val1, val2) -#define CHECK_NE(val1, val2) CHECK_OP(_NE, !=, val1, val2) -#define CHECK_LE(val1, val2) CHECK_OP(_LE, <=, val1, val2) -#define CHECK_LT(val1, val2) CHECK_OP(_LT, < , val1, val2) -#define CHECK_GE(val1, val2) CHECK_OP(_GE, >=, val1, val2) -#define CHECK_GT(val1, val2) CHECK_OP(_GT, > , val1, val2) - -// Check that the input is non NULL. This very useful in constructor -// initializer lists. - -#define CHECK_NOTNULL(val) \ - @ac_google_namespace@::CheckNotNull(__FILE__, __LINE__, "'" #val "' Must be non NULL", (val)) - -// Helper functions for string comparisons. -// To avoid bloat, the definitions are in logging.cc. -#define DECLARE_CHECK_STROP_IMPL(func, expected) \ - GOOGLE_GLOG_DLL_DECL std::string* Check##func##expected##Impl( \ - const char* s1, const char* s2, const char* names); -DECLARE_CHECK_STROP_IMPL(strcmp, true) -DECLARE_CHECK_STROP_IMPL(strcmp, false) -DECLARE_CHECK_STROP_IMPL(strcasecmp, true) -DECLARE_CHECK_STROP_IMPL(strcasecmp, false) -#undef DECLARE_CHECK_STROP_IMPL - -// Helper macro for string comparisons. -// Don't use this macro directly in your code, use CHECK_STREQ et al below. -#define CHECK_STROP(func, op, expected, s1, s2) \ - while (@ac_google_namespace@::CheckOpString _result = \ - @ac_google_namespace@::Check##func##expected##Impl((s1), (s2), \ - #s1 " " #op " " #s2)) \ - LOG(FATAL) << *_result.str_ - - -// String (char*) equality/inequality checks. -// CASE versions are case-insensitive. -// -// Note that "s1" and "s2" may be temporary strings which are destroyed -// by the compiler at the end of the current "full expression" -// (e.g. CHECK_STREQ(Foo().c_str(), Bar().c_str())). - -#define CHECK_STREQ(s1, s2) CHECK_STROP(strcmp, ==, true, s1, s2) -#define CHECK_STRNE(s1, s2) CHECK_STROP(strcmp, !=, false, s1, s2) -#define CHECK_STRCASEEQ(s1, s2) CHECK_STROP(strcasecmp, ==, true, s1, s2) -#define CHECK_STRCASENE(s1, s2) CHECK_STROP(strcasecmp, !=, false, s1, s2) - -#define CHECK_INDEX(I,A) CHECK(I < (sizeof(A)/sizeof(A[0]))) -#define CHECK_BOUND(B,A) CHECK(B <= (sizeof(A)/sizeof(A[0]))) - -#define CHECK_DOUBLE_EQ(val1, val2) \ - do { \ - CHECK_LE((val1), (val2)+0.000000000000001L); \ - CHECK_GE((val1), (val2)-0.000000000000001L); \ - } while (0) - -#define CHECK_NEAR(val1, val2, margin) \ - do { \ - CHECK_LE((val1), (val2)+(margin)); \ - CHECK_GE((val1), (val2)-(margin)); \ - } while (0) - -// perror()..googly style! -// -// PLOG() and PLOG_IF() and PCHECK() behave exactly like their LOG* and -// CHECK equivalents with the addition that they postpend a description -// of the current state of errno to their output lines. - -#define PLOG(severity) GOOGLE_PLOG(severity, 0).stream() - -#define GOOGLE_PLOG(severity, counter) \ - @ac_google_namespace@::ErrnoLogMessage( \ - __FILE__, __LINE__, @ac_google_namespace@::severity, counter, \ - &@ac_google_namespace@::LogMessage::SendToLog) - -#define PLOG_IF(severity, condition) \ - !(condition) ? (void) 0 : @ac_google_namespace@::LogMessageVoidify() & PLOG(severity) - -// A CHECK() macro that postpends errno if the condition is false. E.g. -// -// if (poll(fds, nfds, timeout) == -1) { PCHECK(errno == EINTR); ... } -#define PCHECK(condition) \ - PLOG_IF(FATAL, GOOGLE_PREDICT_BRANCH_NOT_TAKEN(!(condition))) \ - << "Check failed: " #condition " " - -// A CHECK() macro that lets you assert the success of a function that -// returns -1 and sets errno in case of an error. E.g. -// -// CHECK_ERR(mkdir(path, 0700)); -// -// or -// -// int fd = open(filename, flags); CHECK_ERR(fd) << ": open " << filename; -#define CHECK_ERR(invocation) \ -PLOG_IF(FATAL, GOOGLE_PREDICT_BRANCH_NOT_TAKEN((invocation) == -1)) \ - << #invocation - -// Use macro expansion to create, for each use of LOG_EVERY_N(), static -// variables with the __LINE__ expansion as part of the variable name. -#define LOG_EVERY_N_VARNAME(base, line) LOG_EVERY_N_VARNAME_CONCAT(base, line) -#define LOG_EVERY_N_VARNAME_CONCAT(base, line) base ## line - -#define LOG_OCCURRENCES LOG_EVERY_N_VARNAME(occurrences_, __LINE__) -#define LOG_OCCURRENCES_MOD_N LOG_EVERY_N_VARNAME(occurrences_mod_n_, __LINE__) - -#define SOME_KIND_OF_LOG_EVERY_N(severity, n, what_to_do) \ - static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \ - ++LOG_OCCURRENCES; \ - if (++LOG_OCCURRENCES_MOD_N > n) LOG_OCCURRENCES_MOD_N -= n; \ - if (LOG_OCCURRENCES_MOD_N == 1) \ - @ac_google_namespace@::LogMessage( \ - __FILE__, __LINE__, @ac_google_namespace@::severity, LOG_OCCURRENCES, \ - &what_to_do).stream() - -#define SOME_KIND_OF_LOG_IF_EVERY_N(severity, condition, n, what_to_do) \ - static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \ - ++LOG_OCCURRENCES; \ - if (condition && \ - ((LOG_OCCURRENCES_MOD_N=(LOG_OCCURRENCES_MOD_N + 1) % n) == (1 % n))) \ - @ac_google_namespace@::LogMessage( \ - __FILE__, __LINE__, @ac_google_namespace@::severity, LOG_OCCURRENCES, \ - &what_to_do).stream() - -#define SOME_KIND_OF_PLOG_EVERY_N(severity, n, what_to_do) \ - static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \ - ++LOG_OCCURRENCES; \ - if (++LOG_OCCURRENCES_MOD_N > n) LOG_OCCURRENCES_MOD_N -= n; \ - if (LOG_OCCURRENCES_MOD_N == 1) \ - @ac_google_namespace@::ErrnoLogMessage( \ - __FILE__, __LINE__, @ac_google_namespace@::severity, LOG_OCCURRENCES, \ - &what_to_do).stream() - -#define SOME_KIND_OF_LOG_FIRST_N(severity, n, what_to_do) \ - static int LOG_OCCURRENCES = 0; \ - if (LOG_OCCURRENCES <= n) \ - ++LOG_OCCURRENCES; \ - if (LOG_OCCURRENCES <= n) \ - @ac_google_namespace@::LogMessage( \ - __FILE__, __LINE__, @ac_google_namespace@::severity, LOG_OCCURRENCES, \ - &what_to_do).stream() - -namespace glog_internal_namespace_ { -template -struct CompileAssert { -}; -struct CrashReason; -} // namespace glog_internal_namespace_ - -#define GOOGLE_GLOG_COMPILE_ASSERT(expr, msg) \ - typedef @ac_google_namespace@::glog_internal_namespace_::CompileAssert<(bool(expr))> msg[bool(expr) ? 1 : -1] - -#define LOG_EVERY_N(severity, n) \ - GOOGLE_GLOG_COMPILE_ASSERT(@ac_google_namespace@::severity < \ - @ac_google_namespace@::NUM_SEVERITIES, \ - INVALID_REQUESTED_LOG_SEVERITY); \ - SOME_KIND_OF_LOG_EVERY_N(severity, (n), @ac_google_namespace@::LogMessage::SendToLog) - -#define SYSLOG_EVERY_N(severity, n) \ - SOME_KIND_OF_LOG_EVERY_N(severity, (n), @ac_google_namespace@::LogMessage::SendToSyslogAndLog) - -#define PLOG_EVERY_N(severity, n) \ - SOME_KIND_OF_PLOG_EVERY_N(severity, (n), @ac_google_namespace@::LogMessage::SendToLog) - -#define LOG_FIRST_N(severity, n) \ - SOME_KIND_OF_LOG_FIRST_N(severity, (n), @ac_google_namespace@::LogMessage::SendToLog) - -#define LOG_IF_EVERY_N(severity, condition, n) \ - SOME_KIND_OF_LOG_IF_EVERY_N(severity, (condition), (n), @ac_google_namespace@::LogMessage::SendToLog) - -// We want the special COUNTER value available for LOG_EVERY_X()'ed messages -enum PRIVATE_Counter {COUNTER}; - - -// Plus some debug-logging macros that get compiled to nothing for production - -#ifndef NDEBUG - -#define DLOG(severity) LOG(severity) -#define DVLOG(verboselevel) VLOG(verboselevel) -#define DLOG_IF(severity, condition) LOG_IF(severity, condition) -#define DLOG_EVERY_N(severity, n) LOG_EVERY_N(severity, n) -#define DLOG_IF_EVERY_N(severity, condition, n) \ - LOG_IF_EVERY_N(severity, condition, n) -#define DLOG_ASSERT(condition) LOG_ASSERT(condition) - -// debug-only checking. not executed in NDEBUG mode. -#define DCHECK(condition) CHECK(condition) -#define DCHECK_EQ(val1, val2) CHECK_EQ(val1, val2) -#define DCHECK_NE(val1, val2) CHECK_NE(val1, val2) -#define DCHECK_LE(val1, val2) CHECK_LE(val1, val2) -#define DCHECK_LT(val1, val2) CHECK_LT(val1, val2) -#define DCHECK_GE(val1, val2) CHECK_GE(val1, val2) -#define DCHECK_GT(val1, val2) CHECK_GT(val1, val2) -#define DCHECK_NOTNULL(val) CHECK_NOTNULL(val) -#define DCHECK_STREQ(str1, str2) CHECK_STREQ(str1, str2) -#define DCHECK_STRCASEEQ(str1, str2) CHECK_STRCASEEQ(str1, str2) -#define DCHECK_STRNE(str1, str2) CHECK_STRNE(str1, str2) -#define DCHECK_STRCASENE(str1, str2) CHECK_STRCASENE(str1, str2) - -#else // NDEBUG - -#define DLOG(severity) \ - true ? (void) 0 : @ac_google_namespace@::LogMessageVoidify() & LOG(severity) - -#define DVLOG(verboselevel) \ - (true || !VLOG_IS_ON(verboselevel)) ?\ - (void) 0 : @ac_google_namespace@::LogMessageVoidify() & LOG(INFO) - -#define DLOG_IF(severity, condition) \ - (true || !(condition)) ? (void) 0 : @ac_google_namespace@::LogMessageVoidify() & LOG(severity) - -#define DLOG_EVERY_N(severity, n) \ - true ? (void) 0 : @ac_google_namespace@::LogMessageVoidify() & LOG(severity) - -#define DLOG_IF_EVERY_N(severity, condition, n) \ - (true || !(condition))? (void) 0 : @ac_google_namespace@::LogMessageVoidify() & LOG(severity) - -#define DLOG_ASSERT(condition) \ - true ? (void) 0 : LOG_ASSERT(condition) - -#define DCHECK(condition) \ - while (false) \ - CHECK(condition) - -#define DCHECK_EQ(val1, val2) \ - while (false) \ - CHECK_EQ(val1, val2) - -#define DCHECK_NE(val1, val2) \ - while (false) \ - CHECK_NE(val1, val2) - -#define DCHECK_LE(val1, val2) \ - while (false) \ - CHECK_LE(val1, val2) - -#define DCHECK_LT(val1, val2) \ - while (false) \ - CHECK_LT(val1, val2) - -#define DCHECK_GE(val1, val2) \ - while (false) \ - CHECK_GE(val1, val2) - -#define DCHECK_GT(val1, val2) \ - while (false) \ - CHECK_GT(val1, val2) - -#define DCHECK_NOTNULL(val) (val) - -#define DCHECK_STREQ(str1, str2) \ - while (false) \ - CHECK_STREQ(str1, str2) - -#define DCHECK_STRCASEEQ(str1, str2) \ - while (false) \ - CHECK_STRCASEEQ(str1, str2) - -#define DCHECK_STRNE(str1, str2) \ - while (false) \ - CHECK_STRNE(str1, str2) - -#define DCHECK_STRCASENE(str1, str2) \ - while (false) \ - CHECK_STRCASENE(str1, str2) - - -#endif // NDEBUG - -// Log only in verbose mode. - -#define VLOG(verboselevel) LOG_IF(INFO, VLOG_IS_ON(verboselevel)) - -#define VLOG_IF(verboselevel, condition) \ - LOG_IF(INFO, (condition) && VLOG_IS_ON(verboselevel)) - -#define VLOG_EVERY_N(verboselevel, n) \ - LOG_IF_EVERY_N(INFO, VLOG_IS_ON(verboselevel), n) - -#define VLOG_IF_EVERY_N(verboselevel, condition, n) \ - LOG_IF_EVERY_N(INFO, (condition) && VLOG_IS_ON(verboselevel), n) - -// -// This class more or less represents a particular log message. You -// create an instance of LogMessage and then stream stuff to it. -// When you finish streaming to it, ~LogMessage is called and the -// full message gets streamed to the appropriate destination. -// -// You shouldn't actually use LogMessage's constructor to log things, -// though. You should use the LOG() macro (and variants thereof) -// above. -class GOOGLE_GLOG_DLL_DECL LogMessage { -public: - enum { - // Passing kNoLogPrefix for the line number disables the - // log-message prefix. Useful for using the LogMessage - // infrastructure as a printing utility. See also the --log_prefix - // flag for controlling the log-message prefix on an - // application-wide basis. - kNoLogPrefix = -1 - }; - - // LogStream inherit from non-DLL-exported class (std::ostrstream) - // and VC++ produces a warning for this situation. - // However, MSDN says "C4275 can be ignored in Microsoft Visual C++ - // 2005 if you are deriving from a type in the Standard C++ Library" - // http://msdn.microsoft.com/en-us/library/3tdb471s(VS.80).aspx - // Let's just ignore the warning. -#ifdef _MSC_VER -# pragma warning(disable: 4275) -#endif - class GOOGLE_GLOG_DLL_DECL LogStream : public std::ostrstream { -#ifdef _MSC_VER -# pragma warning(default: 4275) -#endif - public: - LogStream(char *buf, int len, int ctr) - : ostrstream(buf, len), - ctr_(ctr) { - self_ = this; - } - - int ctr() const { return ctr_; } - void set_ctr(int ctr) { ctr_ = ctr; } - LogStream* self() const { return self_; } - - private: - int ctr_; // Counter hack (for the LOG_EVERY_X() macro) - LogStream *self_; // Consistency check hack - }; - -public: - // icc 8 requires this typedef to avoid an internal compiler error. - typedef void (LogMessage::*SendMethod)(); - - LogMessage(const char* file, int line, LogSeverity severity, int ctr, - SendMethod send_method); - - // Two special constructors that generate reduced amounts of code at - // LOG call sites for common cases. - - // Used for LOG(INFO): Implied are: - // severity = INFO, ctr = 0, send_method = &LogMessage::SendToLog. - // - // Using this constructor instead of the more complex constructor above - // saves 19 bytes per call site. - LogMessage(const char* file, int line); - - // Used for LOG(severity) where severity != INFO. Implied - // are: ctr = 0, send_method = &LogMessage::SendToLog - // - // Using this constructor instead of the more complex constructor above - // saves 17 bytes per call site. - LogMessage(const char* file, int line, LogSeverity severity); - - // Constructor to log this message to a specified sink (if not NULL). - // Implied are: ctr = 0, send_method = &LogMessage::SendToSinkAndLog if - // also_send_to_log is true, send_method = &LogMessage::SendToSink otherwise. - LogMessage(const char* file, int line, LogSeverity severity, LogSink* sink, - bool also_send_to_log); - - // Constructor where we also give a vector pointer - // for storing the messages (if the pointer is not NULL). - // Implied are: ctr = 0, send_method = &LogMessage::SaveOrSendToLog. - LogMessage(const char* file, int line, LogSeverity severity, - std::vector* outvec); - - // Constructor where we also give a string pointer for storing the - // message (if the pointer is not NULL). Implied are: ctr = 0, - // send_method = &LogMessage::WriteToStringAndLog. - LogMessage(const char* file, int line, LogSeverity severity, - std::string* message); - - // A special constructor used for check failures - LogMessage(const char* file, int line, const CheckOpString& result); - - ~LogMessage(); - - // Flush a buffered message to the sink set in the constructor. Always - // called by the destructor, it may also be called from elsewhere if - // needed. Only the first call is actioned; any later ones are ignored. - void Flush(); - - // An arbitrary limit on the length of a single log message. This - // is so that streaming can be done more efficiently. - static const size_t kMaxLogMessageLen; - - // Theses should not be called directly outside of logging.*, - // only passed as SendMethod arguments to other LogMessage methods: - void SendToLog(); // Actually dispatch to the logs - void SendToSyslogAndLog(); // Actually dispatch to syslog and the logs - - // Call abort() or similar to perform LOG(FATAL) crash. - static void Fail() @ac_cv___attribute___noreturn@; - - std::ostream& stream() { return *(data_->stream_); } - - int preserved_errno() const { return data_->preserved_errno_; } - - // Must be called without the log_mutex held. (L < log_mutex) - static int64 num_messages(int severity); - -private: - // Fully internal SendMethod cases: - void SendToSinkAndLog(); // Send to sink if provided and dispatch to the logs - void SendToSink(); // Send to sink if provided, do nothing otherwise. - - // Write to string if provided and dispatch to the logs. - void WriteToStringAndLog(); - - void SaveOrSendToLog(); // Save to stringvec if provided, else to logs - - void Init(const char* file, int line, LogSeverity severity, - void (LogMessage::*send_method)()); - - // Used to fill in crash information during LOG(FATAL) failures. - void RecordCrashReason(glog_internal_namespace_::CrashReason* reason); - - // Counts of messages sent at each priority: - static int64 num_messages_[NUM_SEVERITIES]; // under log_mutex - - // We keep the data in a separate struct so that each instance of - // LogMessage uses less stack space. - struct GOOGLE_GLOG_DLL_DECL LogMessageData { - LogMessageData() {}; - - int preserved_errno_; // preserved errno - char* buf_; - char* message_text_; // Complete message text (points to selected buffer) - LogStream* stream_alloc_; - LogStream* stream_; - char severity_; // What level is this LogMessage logged at? - int line_; // line number where logging call is. - void (LogMessage::*send_method_)(); // Call this in destructor to send - union { // At most one of these is used: union to keep the size low. - LogSink* sink_; // NULL or sink to send message to - std::vector* outvec_; // NULL or vector to push message onto - std::string* message_; // NULL or string to write message into - }; - time_t timestamp_; // Time of creation of LogMessage - struct ::tm tm_time_; // Time of creation of LogMessage - size_t num_prefix_chars_; // # of chars of prefix in this message - size_t num_chars_to_log_; // # of chars of msg to send to log - size_t num_chars_to_syslog_; // # of chars of msg to send to syslog - const char* basename_; // basename of file that called LOG - const char* fullname_; // fullname of file that called LOG - bool has_been_flushed_; // false => data has not been flushed - bool first_fatal_; // true => this was first fatal msg - - ~LogMessageData(); - private: - LogMessageData(const LogMessageData&); - void operator=(const LogMessageData&); - }; - - static LogMessageData fatal_msg_data_exclusive_; - static LogMessageData fatal_msg_data_shared_; - - LogMessageData* allocated_; - LogMessageData* data_; - - friend class LogDestination; - - LogMessage(const LogMessage&); - void operator=(const LogMessage&); -}; - -// This class happens to be thread-hostile because all instances share -// a single data buffer, but since it can only be created just before -// the process dies, we don't worry so much. -class GOOGLE_GLOG_DLL_DECL LogMessageFatal : public LogMessage { - public: - LogMessageFatal(const char* file, int line); - LogMessageFatal(const char* file, int line, const CheckOpString& result); - ~LogMessageFatal() @ac_cv___attribute___noreturn@; -}; - -// A non-macro interface to the log facility; (useful -// when the logging level is not a compile-time constant). -inline void LogAtLevel(int const severity, std::string const &msg) { - LogMessage(__FILE__, __LINE__, severity).stream() << msg; -} - -// A macro alternative of LogAtLevel. New code may want to use this -// version since there are two advantages: 1. this version outputs the -// file name and the line number where this macro is put like other -// LOG macros, 2. this macro can be used as C++ stream. -#define LOG_AT_LEVEL(severity) @ac_google_namespace@::LogMessage(__FILE__, __LINE__, severity).stream() - -// A small helper for CHECK_NOTNULL(). -template -T* CheckNotNull(const char *file, int line, const char *names, T* t) { - if (t == NULL) { - LogMessageFatal(file, line, new std::string(names)); - } - return t; -} - -// Allow folks to put a counter in the LOG_EVERY_X()'ed messages. This -// only works if ostream is a LogStream. If the ostream is not a -// LogStream you'll get an assert saying as much at runtime. -GOOGLE_GLOG_DLL_DECL std::ostream& operator<<(std::ostream &os, - const PRIVATE_Counter&); - - -// Derived class for PLOG*() above. -class GOOGLE_GLOG_DLL_DECL ErrnoLogMessage : public LogMessage { - public: - - ErrnoLogMessage(const char* file, int line, LogSeverity severity, int ctr, - void (LogMessage::*send_method)()); - - // Postpends ": strerror(errno) [errno]". - ~ErrnoLogMessage(); - - private: - ErrnoLogMessage(const ErrnoLogMessage&); - void operator=(const ErrnoLogMessage&); -}; - - -// This class is used to explicitly ignore values in the conditional -// logging macros. This avoids compiler warnings like "value computed -// is not used" and "statement has no effect". - -class GOOGLE_GLOG_DLL_DECL LogMessageVoidify { - public: - LogMessageVoidify() { } - // This has to be an operator with a precedence lower than << but - // higher than ?: - void operator&(std::ostream&) { } -}; - - -// Flushes all log files that contains messages that are at least of -// the specified severity level. Thread-safe. -GOOGLE_GLOG_DLL_DECL void FlushLogFiles(LogSeverity min_severity); - -// Flushes all log files that contains messages that are at least of -// the specified severity level. Thread-hostile because it ignores -// locking -- used for catastrophic failures. -GOOGLE_GLOG_DLL_DECL void FlushLogFilesUnsafe(LogSeverity min_severity); - -// -// Set the destination to which a particular severity level of log -// messages is sent. If base_filename is "", it means "don't log this -// severity". Thread-safe. -// -GOOGLE_GLOG_DLL_DECL void SetLogDestination(LogSeverity severity, - const char* base_filename); - -// -// Set the basename of the symlink to the latest log file at a given -// severity. If symlink_basename is empty, do not make a symlink. If -// you don't call this function, the symlink basename is the -// invocation name of the program. Thread-safe. -// -GOOGLE_GLOG_DLL_DECL void SetLogSymlink(LogSeverity severity, - const char* symlink_basename); - -// -// Used to send logs to some other kind of destination -// Users should subclass LogSink and override send to do whatever they want. -// Implementations must be thread-safe because a shared instance will -// be called from whichever thread ran the LOG(XXX) line. -class GOOGLE_GLOG_DLL_DECL LogSink { - public: - virtual ~LogSink(); - - // Sink's logging logic (message_len is such as to exclude '\n' at the end). - // This method can't use LOG() or CHECK() as logging system mutex(s) are held - // during this call. - virtual void send(LogSeverity severity, const char* full_filename, - const char* base_filename, int line, - const struct ::tm* tm_time, - const char* message, size_t message_len) = 0; - - // Redefine this to implement waiting for - // the sink's logging logic to complete. - // It will be called after each send() returns, - // but before that LogMessage exits or crashes. - // By default this function does nothing. - // Using this function one can implement complex logic for send() - // that itself involves logging; and do all this w/o causing deadlocks and - // inconsistent rearrangement of log messages. - // E.g. if a LogSink has thread-specific actions, the send() method - // can simply add the message to a queue and wake up another thread that - // handles real logging while itself making some LOG() calls; - // WaitTillSent() can be implemented to wait for that logic to complete. - // See our unittest for an example. - virtual void WaitTillSent(); - - // Returns the normal text output of the log message. - // Can be useful to implement send(). - static std::string ToString(LogSeverity severity, const char* file, int line, - const struct ::tm* tm_time, - const char* message, size_t message_len); -}; - -// Add or remove a LogSink as a consumer of logging data. Thread-safe. -GOOGLE_GLOG_DLL_DECL void AddLogSink(LogSink *destination); -GOOGLE_GLOG_DLL_DECL void RemoveLogSink(LogSink *destination); - -// -// Specify an "extension" added to the filename specified via -// SetLogDestination. This applies to all severity levels. It's -// often used to append the port we're listening on to the logfile -// name. Thread-safe. -// -GOOGLE_GLOG_DLL_DECL void SetLogFilenameExtension( - const char* filename_extension); - -// -// Make it so that all log messages of at least a particular severity -// are logged to stderr (in addition to logging to the usual log -// file(s)). Thread-safe. -// -GOOGLE_GLOG_DLL_DECL void SetStderrLogging(LogSeverity min_severity); - -// -// Make it so that all log messages go only to stderr. Thread-safe. -// -GOOGLE_GLOG_DLL_DECL void LogToStderr(); - -// -// Make it so that all log messages of at least a particular severity are -// logged via email to a list of addresses (in addition to logging to the -// usual log file(s)). The list of addresses is just a string containing -// the email addresses to send to (separated by spaces, say). Thread-safe. -// -GOOGLE_GLOG_DLL_DECL void SetEmailLogging(LogSeverity min_severity, - const char* addresses); - -// A simple function that sends email. dest is a commma-separated -// list of addressess. Thread-safe. -GOOGLE_GLOG_DLL_DECL bool SendEmail(const char *dest, - const char *subject, const char *body); - -GOOGLE_GLOG_DLL_DECL const std::vector& GetLoggingDirectories(); - -// For tests only: Clear the internal [cached] list of logging directories to -// force a refresh the next time GetLoggingDirectories is called. -// Thread-hostile. -void TestOnly_ClearLoggingDirectoriesList(); - -// Returns a set of existing temporary directories, which will be a -// subset of the directories returned by GetLogginDirectories(). -// Thread-safe. -GOOGLE_GLOG_DLL_DECL void GetExistingTempDirectories( - std::vector* list); - -// Print any fatal message again -- useful to call from signal handler -// so that the last thing in the output is the fatal message. -// Thread-hostile, but a race is unlikely. -GOOGLE_GLOG_DLL_DECL void ReprintFatalMessage(); - -// Truncate a log file that may be the append-only output of multiple -// processes and hence can't simply be renamed/reopened (typically a -// stdout/stderr). If the file "path" is > "limit" bytes, copy the -// last "keep" bytes to offset 0 and truncate the rest. Since we could -// be racing with other writers, this approach has the potential to -// lose very small amounts of data. For security, only follow symlinks -// if the path is /proc/self/fd/* -GOOGLE_GLOG_DLL_DECL void TruncateLogFile(const char *path, - int64 limit, int64 keep); - -// Truncate stdout and stderr if they are over the value specified by -// --max_log_size; keep the final 1MB. This function has the same -// race condition as TruncateLogFile. -GOOGLE_GLOG_DLL_DECL void TruncateStdoutStderr(); - -// Return the string representation of the provided LogSeverity level. -// Thread-safe. -GOOGLE_GLOG_DLL_DECL const char* GetLogSeverityName(LogSeverity severity); - -// --------------------------------------------------------------------- -// Implementation details that are not useful to most clients -// --------------------------------------------------------------------- - -// A Logger is the interface used by logging modules to emit entries -// to a log. A typical implementation will dump formatted data to a -// sequence of files. We also provide interfaces that will forward -// the data to another thread so that the invoker never blocks. -// Implementations should be thread-safe since the logging system -// will write to them from multiple threads. - -namespace base { - -class GOOGLE_GLOG_DLL_DECL Logger { - public: - virtual ~Logger(); - - // Writes "message[0,message_len-1]" corresponding to an event that - // occurred at "timestamp". If "force_flush" is true, the log file - // is flushed immediately. - // - // The input message has already been formatted as deemed - // appropriate by the higher level logging facility. For example, - // textual log messages already contain timestamps, and the - // file:linenumber header. - virtual void Write(bool force_flush, - time_t timestamp, - const char* message, - int message_len) = 0; - - // Flush any buffered messages - virtual void Flush() = 0; - - // Get the current LOG file size. - // The returned value is approximate since some - // logged data may not have been flushed to disk yet. - virtual uint32 LogSize() = 0; -}; - -// Get the logger for the specified severity level. The logger -// remains the property of the logging module and should not be -// deleted by the caller. Thread-safe. -extern GOOGLE_GLOG_DLL_DECL Logger* GetLogger(LogSeverity level); - -// Set the logger for the specified severity level. The logger -// becomes the property of the logging module and should not -// be deleted by the caller. Thread-safe. -extern GOOGLE_GLOG_DLL_DECL void SetLogger(LogSeverity level, Logger* logger); - -} - -// glibc has traditionally implemented two incompatible versions of -// strerror_r(). There is a poorly defined convention for picking the -// version that we want, but it is not clear whether it even works with -// all versions of glibc. -// So, instead, we provide this wrapper that automatically detects the -// version that is in use, and then implements POSIX semantics. -// N.B. In addition to what POSIX says, we also guarantee that "buf" will -// be set to an empty string, if this function failed. This means, in most -// cases, you do not need to check the error code and you can directly -// use the value of "buf". It will never have an undefined value. -GOOGLE_GLOG_DLL_DECL int posix_strerror_r(int err, char *buf, size_t len); - - -// A class for which we define operator<<, which does nothing. -class GOOGLE_GLOG_DLL_DECL NullStream : public LogMessage::LogStream { - public: - // Initialize the LogStream so the messages can be written somewhere - // (they'll never be actually displayed). This will be needed if a - // NullStream& is implicitly converted to LogStream&, in which case - // the overloaded NullStream::operator<< will not be invoked. - NullStream() : LogMessage::LogStream(message_buffer_, 1, 0) { } - NullStream(const char* /*file*/, int /*line*/, - const CheckOpString& /*result*/) : - LogMessage::LogStream(message_buffer_, 1, 0) { } - NullStream &stream() { return *this; } - private: - // A very short buffer for messages (which we discard anyway). This - // will be needed if NullStream& converted to LogStream& (e.g. as a - // result of a conditional expression). - char message_buffer_[2]; -}; - -// Do nothing. This operator is inline, allowing the message to be -// compiled away. The message will not be compiled away if we do -// something like (flag ? LOG(INFO) : LOG(ERROR)) << message; when -// SKIP_LOG=WARNING. In those cases, NullStream will be implicitly -// converted to LogStream and the message will be computed and then -// quietly discarded. -template -inline NullStream& operator<<(NullStream &str, const T &value) { return str; } - -// Similar to NullStream, but aborts the program (without stack -// trace), like LogMessageFatal. -class GOOGLE_GLOG_DLL_DECL NullStreamFatal : public NullStream { - public: - NullStreamFatal() { } - NullStreamFatal(const char* file, int line, const CheckOpString& result) : - NullStream(file, line, result) { } - @ac_cv___attribute___noreturn@ ~NullStreamFatal() { _exit(1); } -}; - -// Install a signal handler that will dump signal information and a stack -// trace when the program crashes on certain signals. We'll install the -// signal handler for the following signals. -// -// SIGSEGV, SIGILL, SIGFPE, SIGABRT, SIGBUS, and SIGTERM. -// -// By default, the signal handler will write the failure dump to the -// standard error. You can customize the destination by installing your -// own writer function by InstallFailureWriter() below. -// -// Note on threading: -// -// The function should be called before threads are created, if you want -// to use the failure signal handler for all threads. The stack trace -// will be shown only for the thread that receives the signal. In other -// words, stack traces of other threads won't be shown. -GOOGLE_GLOG_DLL_DECL void InstallFailureSignalHandler(); - -// Installs a function that is used for writing the failure dump. "data" -// is the pointer to the beginning of a message to be written, and "size" -// is the size of the message. You should not expect the data is -// terminated with '\0'. -GOOGLE_GLOG_DLL_DECL void InstallFailureWriter( - void (*writer)(const char* data, int size)); - -@ac_google_end_namespace@ - -#endif // _LOGGING_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/glog/raw_logging.h.in b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/glog/raw_logging.h.in deleted file mode 100644 index 5378cd467b9e..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/glog/raw_logging.h.in +++ /dev/null @@ -1,185 +0,0 @@ -// Copyright (c) 2006, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: Maxim Lifantsev -// -// Thread-safe logging routines that do not allocate any memory or -// acquire any locks, and can therefore be used by low-level memory -// allocation and synchronization code. - -#ifndef BASE_RAW_LOGGING_H_ -#define BASE_RAW_LOGGING_H_ - -#include - -@ac_google_start_namespace@ - -#include "glog/log_severity.h" -#include "glog/vlog_is_on.h" - -// Annoying stuff for windows -- makes sure clients can import these functions -#ifndef GOOGLE_GLOG_DLL_DECL -# if defined(_WIN32) && !defined(__CYGWIN__) -# define GOOGLE_GLOG_DLL_DECL __declspec(dllimport) -# else -# define GOOGLE_GLOG_DLL_DECL -# endif -#endif - -// This is similar to LOG(severity) << format... and VLOG(level) << format.., -// but -// * it is to be used ONLY by low-level modules that can't use normal LOG() -// * it is desiged to be a low-level logger that does not allocate any -// memory and does not need any locks, hence: -// * it logs straight and ONLY to STDERR w/o buffering -// * it uses an explicit format and arguments list -// * it will silently chop off really long message strings -// Usage example: -// RAW_LOG(ERROR, "Failed foo with %i: %s", status, error); -// RAW_VLOG(3, "status is %i", status); -// These will print an almost standard log lines like this to stderr only: -// E0821 211317 file.cc:123] RAW: Failed foo with 22: bad_file -// I0821 211317 file.cc:142] RAW: status is 20 -#define RAW_LOG(severity, ...) \ - do { \ - switch (@ac_google_namespace@::severity) { \ - case 0: \ - RAW_LOG_INFO(__VA_ARGS__); \ - break; \ - case 1: \ - RAW_LOG_WARNING(__VA_ARGS__); \ - break; \ - case 2: \ - RAW_LOG_ERROR(__VA_ARGS__); \ - break; \ - case 3: \ - RAW_LOG_FATAL(__VA_ARGS__); \ - break; \ - default: \ - break; \ - } \ - } while (0) - -// The following STRIP_LOG testing is performed in the header file so that it's -// possible to completely compile out the logging code and the log messages. -#if STRIP_LOG == 0 -#define RAW_VLOG(verboselevel, ...) \ - do { \ - if (VLOG_IS_ON(verboselevel)) { \ - RAW_LOG_INFO(__VA_ARGS__); \ - } \ - } while (0) -#else -#define RAW_VLOG(verboselevel, ...) RawLogStub__(0, __VA_ARGS__) -#endif // STRIP_LOG == 0 - -#if STRIP_LOG == 0 -#define RAW_LOG_INFO(...) @ac_google_namespace@::RawLog__(@ac_google_namespace@::INFO, \ - __FILE__, __LINE__, __VA_ARGS__) -#else -#define RAW_LOG_INFO(...) @ac_google_namespace@::RawLogStub__(0, __VA_ARGS__) -#endif // STRIP_LOG == 0 - -#if STRIP_LOG <= 1 -#define RAW_LOG_WARNING(...) @ac_google_namespace@::RawLog__(@ac_google_namespace@::WARNING, \ - __FILE__, __LINE__, __VA_ARGS__) -#else -#define RAW_LOG_WARNING(...) @ac_google_namespace@::RawLogStub__(0, __VA_ARGS__) -#endif // STRIP_LOG <= 1 - -#if STRIP_LOG <= 2 -#define RAW_LOG_ERROR(...) @ac_google_namespace@::RawLog__(@ac_google_namespace@::ERROR, \ - __FILE__, __LINE__, __VA_ARGS__) -#else -#define RAW_LOG_ERROR(...) @ac_google_namespace@::RawLogStub__(0, __VA_ARGS__) -#endif // STRIP_LOG <= 2 - -#if STRIP_LOG <= 3 -#define RAW_LOG_FATAL(...) @ac_google_namespace@::RawLog__(@ac_google_namespace@::FATAL, \ - __FILE__, __LINE__, __VA_ARGS__) -#else -#define RAW_LOG_FATAL(...) \ - do { \ - @ac_google_namespace@::RawLogStub__(0, __VA_ARGS__); \ - exit(1); \ - } while (0) -#endif // STRIP_LOG <= 3 - -// Similar to CHECK(condition) << message, -// but for low-level modules: we use only RAW_LOG that does not allocate memory. -// We do not want to provide args list here to encourage this usage: -// if (!cond) RAW_LOG(FATAL, "foo ...", hard_to_compute_args); -// so that the args are not computed when not needed. -#define RAW_CHECK(condition, message) \ - do { \ - if (!(condition)) { \ - RAW_LOG(FATAL, "Check %s failed: %s", #condition, message); \ - } \ - } while (0) - -// Debug versions of RAW_LOG and RAW_CHECK -#ifndef NDEBUG - -#define RAW_DLOG(severity, ...) RAW_LOG(severity, __VA_ARGS__) -#define RAW_DCHECK(condition, message) RAW_CHECK(condition, message) - -#else // NDEBUG - -#define RAW_DLOG(severity, ...) \ - while (false) \ - RAW_LOG(severity, __VA_ARGS__) -#define RAW_DCHECK(condition, message) \ - while (false) \ - RAW_CHECK(condition, message) - -#endif // NDEBUG - -// Stub log function used to work around for unused variable warnings when -// building with STRIP_LOG > 0. -static inline void RawLogStub__(int ignored, ...) { -} - -// Helper function to implement RAW_LOG and RAW_VLOG -// Logs format... at "severity" level, reporting it -// as called from file:line. -// This does not allocate memory or acquire locks. -GOOGLE_GLOG_DLL_DECL void RawLog__(LogSeverity severity, - const char* file, - int line, - const char* format, ...) - @ac_cv___attribute___printf_4_5@; - -// Hack to propagate time information into this module so that -// this module does not have to directly call localtime_r(), -// which could allocate memory. -GOOGLE_GLOG_DLL_DECL void RawLog__SetLastTime(const struct tm& t, int usecs); - -@ac_google_end_namespace@ - -#endif // BASE_RAW_LOGGING_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/glog/stl_logging.h.in b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/glog/stl_logging.h.in deleted file mode 100644 index f09e08718e51..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/glog/stl_logging.h.in +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright (c) 2003, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Stream output operators for STL containers; to be used for logging *only*. -// Inclusion of this file lets you do: -// -// list x; -// LOG(INFO) << "data: " << x; -// vector v1, v2; -// CHECK_EQ(v1, v2); -// -// Note that if you want to use these operators from the non-global namespace, -// you may get an error since they are not in namespace std (and they are not -// in namespace std since that would result in undefined behavior). You may -// need to write -// -// using ::operator<<; -// -// to fix these errors. - -#ifndef UTIL_GTL_STL_LOGGING_INL_H_ -#define UTIL_GTL_STL_LOGGING_INL_H_ - -#if !@ac_cv_cxx_using_operator@ -# error We do not support stl_logging for this compiler -#endif - -#include -#include -#include -#include -#include -#include -#include - -#ifdef __GNUC__ -# include -# include -# include -#endif - -template -inline std::ostream& operator<<(std::ostream& out, - const std::pair& p) { - out << '(' << p.first << ", " << p.second << ')'; - return out; -} - -@ac_google_start_namespace@ - -template -inline void PrintSequence(std::ostream& out, Iter begin, Iter end) { - using ::operator<<; - // Output at most 100 elements -- appropriate if used for logging. - for (int i = 0; begin != end && i < 100; ++i, ++begin) { - if (i > 0) out << ' '; - out << *begin; - } - if (begin != end) { - out << " ..."; - } -} - -@ac_google_end_namespace@ - -#define OUTPUT_TWO_ARG_CONTAINER(Sequence) \ -template \ -inline std::ostream& operator<<(std::ostream& out, \ - const Sequence& seq) { \ - @ac_google_namespace@::PrintSequence(out, seq.begin(), seq.end()); \ - return out; \ -} - -OUTPUT_TWO_ARG_CONTAINER(std::vector) -OUTPUT_TWO_ARG_CONTAINER(std::deque) -OUTPUT_TWO_ARG_CONTAINER(std::list) -#ifdef __GNUC__ -OUTPUT_TWO_ARG_CONTAINER(__gnu_cxx::slist) -#endif - -#undef OUTPUT_TWO_ARG_CONTAINER - -#define OUTPUT_THREE_ARG_CONTAINER(Sequence) \ -template \ -inline std::ostream& operator<<(std::ostream& out, \ - const Sequence& seq) { \ - @ac_google_namespace@::PrintSequence(out, seq.begin(), seq.end()); \ - return out; \ -} - -OUTPUT_THREE_ARG_CONTAINER(std::set) -OUTPUT_THREE_ARG_CONTAINER(std::multiset) - -#undef OUTPUT_THREE_ARG_CONTAINER - -#define OUTPUT_FOUR_ARG_CONTAINER(Sequence) \ -template \ -inline std::ostream& operator<<(std::ostream& out, \ - const Sequence& seq) { \ - @ac_google_namespace@::PrintSequence(out, seq.begin(), seq.end()); \ - return out; \ -} - -OUTPUT_FOUR_ARG_CONTAINER(std::map) -OUTPUT_FOUR_ARG_CONTAINER(std::multimap) -#ifdef __GNUC__ -OUTPUT_FOUR_ARG_CONTAINER(__gnu_cxx::hash_set) -OUTPUT_FOUR_ARG_CONTAINER(__gnu_cxx::hash_multiset) -#endif - -#undef OUTPUT_FOUR_ARG_CONTAINER - -#define OUTPUT_FIVE_ARG_CONTAINER(Sequence) \ -template \ -inline std::ostream& operator<<(std::ostream& out, \ - const Sequence& seq) { \ - @ac_google_namespace@::PrintSequence(out, seq.begin(), seq.end()); \ - return out; \ -} - -#ifdef __GNUC__ -OUTPUT_FIVE_ARG_CONTAINER(__gnu_cxx::hash_map) -OUTPUT_FIVE_ARG_CONTAINER(__gnu_cxx::hash_multimap) -#endif - -#undef OUTPUT_FIVE_ARG_CONTAINER - -#endif // UTIL_GTL_STL_LOGGING_INL_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/glog/vlog_is_on.h.in b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/glog/vlog_is_on.h.in deleted file mode 100644 index 3f4c4a32a8b7..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/glog/vlog_is_on.h.in +++ /dev/null @@ -1,129 +0,0 @@ -// Copyright (c) 1999, 2007, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: Ray Sidney and many others -// -// Defines the VLOG_IS_ON macro that controls the variable-verbosity -// conditional logging. -// -// It's used by VLOG and VLOG_IF in logging.h -// and by RAW_VLOG in raw_logging.h to trigger the logging. -// -// It can also be used directly e.g. like this: -// if (VLOG_IS_ON(2)) { -// // do some logging preparation and logging -// // that can't be accomplished e.g. via just VLOG(2) << ...; -// } -// -// The truth value that VLOG_IS_ON(level) returns is determined by -// the three verbosity level flags: -// --v= Gives the default maximal active V-logging level; -// 0 is the default. -// Normally positive values are used for V-logging levels. -// --vmodule= Gives the per-module maximal V-logging levels to override -// the value given by --v. -// E.g. "my_module=2,foo*=3" would change the logging level -// for all code in source files "my_module.*" and "foo*.*" -// ("-inl" suffixes are also disregarded for this matching). -// -// SetVLOGLevel helper function is provided to do limited dynamic control over -// V-logging by overriding the per-module settings given via --vmodule flag. -// -// CAVEAT: --vmodule functionality is not available in non gcc compilers. -// - -#ifndef BASE_VLOG_IS_ON_H_ -#define BASE_VLOG_IS_ON_H_ - -#include "glog/log_severity.h" - -// Annoying stuff for windows -- makes sure clients can import these functions -#ifndef GOOGLE_GLOG_DLL_DECL -# if defined(_WIN32) && !defined(__CYGWIN__) -# define GOOGLE_GLOG_DLL_DECL __declspec(dllimport) -# else -# define GOOGLE_GLOG_DLL_DECL -# endif -#endif - -#if defined(__GNUC__) -// We emit an anonymous static int* variable at every VLOG_IS_ON(n) site. -// (Normally) the first time every VLOG_IS_ON(n) site is hit, -// we determine what variable will dynamically control logging at this site: -// it's either FLAGS_v or an appropriate internal variable -// matching the current source file that represents results of -// parsing of --vmodule flag and/or SetVLOGLevel calls. -#define VLOG_IS_ON(verboselevel) \ - __extension__ \ - ({ static @ac_google_namespace@::int32* vlocal__ = &@ac_google_namespace@::kLogSiteUninitialized; \ - @ac_google_namespace@::int32 verbose_level__ = (verboselevel); \ - (*vlocal__ >= verbose_level__) && \ - ((vlocal__ != &@ac_google_namespace@::kLogSiteUninitialized) || \ - (@ac_google_namespace@::InitVLOG3__(&vlocal__, &FLAGS_v, \ - __FILE__, verbose_level__))); }) -#else -// GNU extensions not available, so we do not support --vmodule. -// Dynamic value of FLAGS_v always controls the logging level. -#define VLOG_IS_ON(verboselevel) (FLAGS_v >= (verboselevel)) -#endif - -// Set VLOG(_IS_ON) level for module_pattern to log_level. -// This lets us dynamically control what is normally set by the --vmodule flag. -// Returns the level that previously applied to module_pattern. -// NOTE: To change the log level for VLOG(_IS_ON) sites -// that have already executed after/during InitGoogleLogging, -// one needs to supply the exact --vmodule pattern that applied to them. -// (If no --vmodule pattern applied to them -// the value of FLAGS_v will continue to control them.) -extern GOOGLE_GLOG_DLL_DECL int SetVLOGLevel(const char* module_pattern, - int log_level); - -// Various declarations needed for VLOG_IS_ON above: ========================= - -// Special value used to indicate that a VLOG_IS_ON site has not been -// initialized. We make this a large value, so the common-case check -// of "*vlocal__ >= verbose_level__" in VLOG_IS_ON definition -// passes in such cases and InitVLOG3__ is then triggered. -extern @ac_google_namespace@::int32 kLogSiteUninitialized; - -// Helper routine which determines the logging info for a particalur VLOG site. -// site_flag is the address of the site-local pointer to the controlling -// verbosity level -// site_default is the default to use for *site_flag -// fname is the current source file name -// verbose_level is the argument to VLOG_IS_ON -// We will return the return value for VLOG_IS_ON -// and if possible set *site_flag appropriately. -extern GOOGLE_GLOG_DLL_DECL bool InitVLOG3__( - @ac_google_namespace@::int32** site_flag, - @ac_google_namespace@::int32* site_default, - const char* fname, - @ac_google_namespace@::int32 verbose_level); - -#endif // BASE_VLOG_IS_ON_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/googletest.h b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/googletest.h deleted file mode 100644 index c9e413e19675..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/googletest.h +++ /dev/null @@ -1,604 +0,0 @@ -// Copyright (c) 2009, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: Shinichiro Hamaji -// (based on googletest: http://code.google.com/p/googletest/) - -#ifdef GOOGLETEST_H__ -#error You must not include this file twice. -#endif -#define GOOGLETEST_H__ - -#include "utilities.h" - -#include -#include -#include - -#include -#include -#include -#include - -#include -#include - -#include -#include -#include -#ifdef HAVE_UNISTD_H -# include -#endif - -#include "base/commandlineflags.h" - -using std::map; -using std::string; -using std::vector; - -_START_GOOGLE_NAMESPACE_ - -extern GOOGLE_GLOG_DLL_DECL void (*g_logging_fail_func)(); - -_END_GOOGLE_NAMESPACE_ - -#undef GOOGLE_GLOG_DLL_DECL -#define GOOGLE_GLOG_DLL_DECL - -static inline string GetTempDir() { -#ifndef OS_WINDOWS - return "/tmp"; -#else - char tmp[MAX_PATH]; - GetTempPathA(MAX_PATH, tmp); - return tmp; -#endif -} - -#ifdef OS_WINDOWS -// The test will run in glog/vsproject/ -// (e.g., glog/vsproject/logging_unittest). -static const char TEST_SRC_DIR[] = "../.."; -#elif !defined(TEST_SRC_DIR) -# warning TEST_SRC_DIR should be defined in config.h -static const char TEST_SRC_DIR[] = "."; -#endif - -DEFINE_string(test_tmpdir, GetTempDir(), "Dir we use for temp files"); -DEFINE_string(test_srcdir, TEST_SRC_DIR, - "Source-dir root, needed to find glog_unittest_flagfile"); -DEFINE_bool(run_benchmark, false, "If true, run benchmarks"); -#ifdef NDEBUG -DEFINE_int32(benchmark_iters, 100000000, "Number of iterations per benchmark"); -#else -DEFINE_int32(benchmark_iters, 100000, "Number of iterations per benchmark"); -#endif - -#ifdef HAVE_LIB_GTEST -# include -// Use our ASSERT_DEATH implementation. -# undef ASSERT_DEATH -# undef ASSERT_DEBUG_DEATH -using testing::InitGoogleTest; -#else - -_START_GOOGLE_NAMESPACE_ - -void InitGoogleTest(int* argc, char** argv) {} - -// The following is some bare-bones testing infrastructure - -#define EXPECT_TRUE(cond) \ - do { \ - if (!(cond)) { \ - fprintf(stderr, "Check failed: %s\n", #cond); \ - exit(1); \ - } \ - } while (0) - -#define EXPECT_FALSE(cond) EXPECT_TRUE(!(cond)) - -#define EXPECT_OP(op, val1, val2) \ - do { \ - if (!((val1) op (val2))) { \ - fprintf(stderr, "Check failed: %s %s %s\n", #val1, #op, #val2); \ - exit(1); \ - } \ - } while (0) - -#define EXPECT_EQ(val1, val2) EXPECT_OP(==, val1, val2) -#define EXPECT_NE(val1, val2) EXPECT_OP(!=, val1, val2) -#define EXPECT_GT(val1, val2) EXPECT_OP(>, val1, val2) -#define EXPECT_LT(val1, val2) EXPECT_OP(<, val1, val2) - -#define EXPECT_NAN(arg) \ - do { \ - if (!isnan(arg)) { \ - fprintf(stderr, "Check failed: isnan(%s)\n", #arg); \ - exit(1); \ - } \ - } while (0) - -#define EXPECT_INF(arg) \ - do { \ - if (!isinf(arg)) { \ - fprintf(stderr, "Check failed: isinf(%s)\n", #arg); \ - exit(1); \ - } \ - } while (0) - -#define EXPECT_DOUBLE_EQ(val1, val2) \ - do { \ - if (((val1) < (val2) - 0.001 || (val1) > (val2) + 0.001)) { \ - fprintf(stderr, "Check failed: %s == %s\n", #val1, #val2); \ - exit(1); \ - } \ - } while (0) - -#define EXPECT_STREQ(val1, val2) \ - do { \ - if (strcmp((val1), (val2)) != 0) { \ - fprintf(stderr, "Check failed: streq(%s, %s)\n", #val1, #val2); \ - exit(1); \ - } \ - } while (0) - -vector g_testlist; // the tests to run - -#define TEST(a, b) \ - struct Test_##a##_##b { \ - Test_##a##_##b() { g_testlist.push_back(&Run); } \ - static void Run() { FlagSaver fs; RunTest(); } \ - static void RunTest(); \ - }; \ - static Test_##a##_##b g_test_##a##_##b; \ - void Test_##a##_##b::RunTest() - - -static inline int RUN_ALL_TESTS() { - vector::const_iterator it; - for (it = g_testlist.begin(); it != g_testlist.end(); ++it) { - (*it)(); - } - fprintf(stderr, "Passed %d tests\n\nPASS\n", (int)g_testlist.size()); - return 0; -} - -_END_GOOGLE_NAMESPACE_ - -#endif // ! HAVE_LIB_GTEST - -_START_GOOGLE_NAMESPACE_ - -static bool g_called_abort; -static jmp_buf g_jmp_buf; -static inline void CalledAbort() { - g_called_abort = true; - longjmp(g_jmp_buf, 1); -} - -#ifdef OS_WINDOWS -// TODO(hamaji): Death test somehow doesn't work in Windows. -#define ASSERT_DEATH(fn, msg) -#else -#define ASSERT_DEATH(fn, msg) \ - do { \ - g_called_abort = false; \ - /* in logging.cc */ \ - void (*original_logging_fail_func)() = g_logging_fail_func; \ - g_logging_fail_func = &CalledAbort; \ - if (!setjmp(g_jmp_buf)) fn; \ - /* set back to their default */ \ - g_logging_fail_func = original_logging_fail_func; \ - if (!g_called_abort) { \ - fprintf(stderr, "Function didn't die (%s): %s\n", msg, #fn); \ - exit(1); \ - } \ - } while (0) -#endif - -#ifdef NDEBUG -#define ASSERT_DEBUG_DEATH(fn, msg) -#else -#define ASSERT_DEBUG_DEATH(fn, msg) ASSERT_DEATH(fn, msg) -#endif // NDEBUG - -// Benchmark tools. - -#define BENCHMARK(n) static BenchmarkRegisterer __benchmark_ ## n (#n, &n); - -map g_benchlist; // the benchmarks to run - -class BenchmarkRegisterer { - public: - BenchmarkRegisterer(const char* name, void (*function)(int iters)) { - EXPECT_TRUE(g_benchlist.insert(std::make_pair(name, function)).second); - } -}; - -static inline void RunSpecifiedBenchmarks() { - if (!FLAGS_run_benchmark) { - return; - } - - int iter_cnt = FLAGS_benchmark_iters; - puts("Benchmark\tTime(ns)\tIterations"); - for (map::const_iterator iter = g_benchlist.begin(); - iter != g_benchlist.end(); - ++iter) { - clock_t start = clock(); - iter->second(iter_cnt); - double elapsed_ns = - ((double)clock() - start) / CLOCKS_PER_SEC * 1000*1000*1000; - printf("%s\t%8.2lf\t%10d\n", - iter->first.c_str(), elapsed_ns / iter_cnt, iter_cnt); - } - puts(""); -} - -// ---------------------------------------------------------------------- -// Golden file functions -// ---------------------------------------------------------------------- - -class CapturedStream { - public: - CapturedStream(int fd, const string & filename) : - fd_(fd), - uncaptured_fd_(-1), - filename_(filename) { - Capture(); - } - - ~CapturedStream() { - if (uncaptured_fd_ != -1) { - CHECK(close(uncaptured_fd_) != -1); - } - } - - // Start redirecting output to a file - void Capture() { - // Keep original stream for later - CHECK(uncaptured_fd_ == -1) << ", Stream " << fd_ << " already captured!"; - uncaptured_fd_ = dup(fd_); - CHECK(uncaptured_fd_ != -1); - - // Open file to save stream to - int cap_fd = open(filename_.c_str(), - O_CREAT | O_TRUNC | O_WRONLY, - S_IRUSR | S_IWUSR); - CHECK(cap_fd != -1); - - // Send stdout/stderr to this file - fflush(NULL); - CHECK(dup2(cap_fd, fd_) != -1); - CHECK(close(cap_fd) != -1); - } - - // Remove output redirection - void StopCapture() { - // Restore original stream - if (uncaptured_fd_ != -1) { - fflush(NULL); - CHECK(dup2(uncaptured_fd_, fd_) != -1); - } - } - - const string & filename() const { return filename_; } - - private: - int fd_; // file descriptor being captured - int uncaptured_fd_; // where the stream was originally being sent to - string filename_; // file where stream is being saved -}; -static CapturedStream * s_captured_streams[STDERR_FILENO+1]; -// Redirect a file descriptor to a file. -// fd - Should be STDOUT_FILENO or STDERR_FILENO -// filename - File where output should be stored -static inline void CaptureTestOutput(int fd, const string & filename) { - CHECK((fd == STDOUT_FILENO) || (fd == STDERR_FILENO)); - CHECK(s_captured_streams[fd] == NULL); - s_captured_streams[fd] = new CapturedStream(fd, filename); -} -static inline void CaptureTestStderr() { - CaptureTestOutput(STDERR_FILENO, FLAGS_test_tmpdir + "/captured.err"); -} -// Return the size (in bytes) of a file -static inline size_t GetFileSize(FILE * file) { - fseek(file, 0, SEEK_END); - return static_cast(ftell(file)); -} -// Read the entire content of a file as a string -static inline string ReadEntireFile(FILE * file) { - const size_t file_size = GetFileSize(file); - char * const buffer = new char[file_size]; - - size_t bytes_last_read = 0; // # of bytes read in the last fread() - size_t bytes_read = 0; // # of bytes read so far - - fseek(file, 0, SEEK_SET); - - // Keep reading the file until we cannot read further or the - // pre-determined file size is reached. - do { - bytes_last_read = fread(buffer+bytes_read, 1, file_size-bytes_read, file); - bytes_read += bytes_last_read; - } while (bytes_last_read > 0 && bytes_read < file_size); - - const string content = string(buffer, buffer+bytes_read); - delete[] buffer; - - return content; -} -// Get the captured stdout (when fd is STDOUT_FILENO) or stderr (when -// fd is STDERR_FILENO) as a string -static inline string GetCapturedTestOutput(int fd) { - CHECK(fd == STDOUT_FILENO || fd == STDERR_FILENO); - CapturedStream * const cap = s_captured_streams[fd]; - CHECK(cap) - << ": did you forget CaptureTestStdout() or CaptureTestStderr()?"; - - // Make sure everything is flushed. - cap->StopCapture(); - - // Read the captured file. - FILE * const file = fopen(cap->filename().c_str(), "r"); - const string content = ReadEntireFile(file); - fclose(file); - - delete cap; - s_captured_streams[fd] = NULL; - - return content; -} -// Get the captured stderr of a test as a string. -static inline string GetCapturedTestStderr() { - return GetCapturedTestOutput(STDERR_FILENO); -} - -// Check if the string is [IWEF](\d{4}|DATE) -static inline bool IsLoggingPrefix(const string& s) { - if (s.size() != 5) return false; - if (!strchr("IWEF", s[0])) return false; - for (int i = 1; i <= 4; ++i) { - if (!isdigit(s[i]) && s[i] != "DATE"[i-1]) return false; - } - return true; -} - -// Convert log output into normalized form. -// -// Example: -// I0102 030405 logging_unittest.cc:345] RAW: vlog -1 -// => IDATE TIME__ logging_unittest.cc:LINE] RAW: vlog -1 -static inline string MungeLine(const string& line) { - std::istringstream iss(line); - string before, logcode_date, time, thread_lineinfo; - iss >> logcode_date; - while (!IsLoggingPrefix(logcode_date)) { - before += " " + logcode_date; - if (!(iss >> logcode_date)) { - // We cannot find the header of log output. - return before; - } - } - if (!before.empty()) before += " "; - iss >> time; - iss >> thread_lineinfo; - CHECK(!thread_lineinfo.empty()); - if (thread_lineinfo[thread_lineinfo.size() - 1] != ']') { - // We found thread ID. - string tmp; - iss >> tmp; - CHECK(!tmp.empty()); - CHECK_EQ(']', tmp[tmp.size() - 1]); - thread_lineinfo = "THREADID " + tmp; - } - size_t index = thread_lineinfo.find(':'); - CHECK_NE(string::npos, index); - thread_lineinfo = thread_lineinfo.substr(0, index+1) + "LINE]"; - string rest; - std::getline(iss, rest); - return (before + logcode_date[0] + "DATE TIME__ " + thread_lineinfo + - MungeLine(rest)); -} - -static inline void StringReplace(string* str, - const string& oldsub, - const string& newsub) { - size_t pos = str->find(oldsub); - if (pos != string::npos) { - str->replace(pos, oldsub.size(), newsub.c_str()); - } -} - -static inline string Munge(const string& filename) { - FILE* fp = fopen(filename.c_str(), "rb"); - CHECK(fp != NULL) << filename << ": couldn't open"; - char buf[4096]; - string result; - while (fgets(buf, 4095, fp)) { - string line = MungeLine(buf); - char null_str[256]; - sprintf(null_str, "%p", static_cast(NULL)); - StringReplace(&line, "__NULLP__", null_str); - // Remove 0x prefix produced by %p. VC++ doesn't put the prefix. - StringReplace(&line, " 0x", " "); - - char errmsg_buf[100]; - posix_strerror_r(0, errmsg_buf, sizeof(errmsg_buf)); - if (*errmsg_buf == '\0') { - // MacOSX 10.4 and FreeBSD return empty string for errno=0. - // In such case, the we need to remove an extra space. - StringReplace(&line, "__SUCCESS__ ", ""); - } else { - StringReplace(&line, "__SUCCESS__", errmsg_buf); - } - StringReplace(&line, "__ENOENT__", strerror(ENOENT)); - StringReplace(&line, "__EINTR__", strerror(EINTR)); - StringReplace(&line, "__ENXIO__", strerror(ENXIO)); - StringReplace(&line, "__ENOEXEC__", strerror(ENOEXEC)); - result += line + "\n"; - } - fclose(fp); - return result; -} - -static inline void WriteToFile(const string& body, const string& file) { - FILE* fp = fopen(file.c_str(), "wb"); - fwrite(body.data(), 1, body.size(), fp); - fclose(fp); -} - -static inline bool MungeAndDiffTestStderr(const string& golden_filename) { - CapturedStream* cap = s_captured_streams[STDERR_FILENO]; - CHECK(cap) << ": did you forget CaptureTestStderr()?"; - - cap->StopCapture(); - - // Run munge - const string captured = Munge(cap->filename()); - const string golden = Munge(golden_filename); - if (captured != golden) { - fprintf(stderr, - "Test with golden file failed. We'll try to show the diff:\n"); - string munged_golden = golden_filename + ".munged"; - WriteToFile(golden, munged_golden); - string munged_captured = cap->filename() + ".munged"; - WriteToFile(captured, munged_captured); - string diffcmd("diff -u " + munged_golden + " " + munged_captured); - if (system(diffcmd.c_str()) != 0) { - fprintf(stderr, "diff command was failed.\n"); - } - unlink(munged_golden.c_str()); - unlink(munged_captured.c_str()); - return false; - } - LOG(INFO) << "Diff was successful"; - return true; -} - -// Save flags used from logging_unittest.cc. -#ifndef HAVE_LIB_GFLAGS -struct FlagSaver { - FlagSaver() - : v_(FLAGS_v), - stderrthreshold_(FLAGS_stderrthreshold), - logtostderr_(FLAGS_logtostderr), - alsologtostderr_(FLAGS_alsologtostderr) {} - ~FlagSaver() { - FLAGS_v = v_; - FLAGS_stderrthreshold = stderrthreshold_; - FLAGS_logtostderr = logtostderr_; - FLAGS_alsologtostderr = alsologtostderr_; - } - int v_; - int stderrthreshold_; - bool logtostderr_; - bool alsologtostderr_; -}; -#endif - -class Thread { - public: - virtual ~Thread() {} - - void SetJoinable(bool joinable) {} -#if defined(OS_WINDOWS) || defined(OS_CYGWIN) - void Start() { - handle_ = CreateThread(NULL, - 0, - (LPTHREAD_START_ROUTINE)&Thread::InvokeThread, - (LPVOID)this, - 0, - &th_); - CHECK(handle_) << "CreateThread"; - } - void Join() { - WaitForSingleObject(handle_, INFINITE); - } -#elif defined(HAVE_PTHREAD) - void Start() { - pthread_create(&th_, NULL, &Thread::InvokeThread, this); - } - void Join() { - pthread_join(th_, NULL); - } -#else -# error No thread implementation. -#endif - - protected: - virtual void Run() = 0; - - private: - static void* InvokeThread(void* self) { - ((Thread*)self)->Run(); - return NULL; - } - -#if defined(OS_WINDOWS) || defined(OS_CYGWIN) - HANDLE handle_; - DWORD th_; -#else - pthread_t th_; -#endif -}; - -static inline void SleepForMilliseconds(int t) { -#ifndef OS_WINDOWS - usleep(t * 1000); -#else - Sleep(t); -#endif -} - -// Add hook for operator new to ensure there are no memory allocation. - -void (*g_new_hook)() = NULL; - -_END_GOOGLE_NAMESPACE_ - -void* operator new(size_t size) { - if (GOOGLE_NAMESPACE::g_new_hook) { - GOOGLE_NAMESPACE::g_new_hook(); - } - return malloc(size); -} - -void* operator new[](size_t size) { - return ::operator new(size); -} - -void operator delete(void* p) { - free(p); -} - -void operator delete[](void* p) { - ::operator delete(p); -} diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/logging.cc b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/logging.cc deleted file mode 100644 index 445d9f9e02c6..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/logging.cc +++ /dev/null @@ -1,1808 +0,0 @@ -// Copyright (c) 1999, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#define _GNU_SOURCE 1 // needed for O_NOFOLLOW and pread()/pwrite() - -#include "utilities.h" - -#include -#include -#include -#ifdef HAVE_UNISTD_H -# include // For _exit. -#endif -#include -#include -#include -#ifdef HAVE_SYS_UTSNAME_H -# include // For uname. -#endif -#include -#include -#include -#include -#include -#ifdef HAVE_PWD_H -# include -#endif -#ifdef HAVE_SYSLOG_H -# include -#endif -#include -#include // for errno -#include -#include "base/commandlineflags.h" // to get the program name -#include "glog/logging.h" -#include "glog/raw_logging.h" -#include "base/googleinit.h" - -#ifdef HAVE_STACKTRACE -# include "stacktrace.h" -#endif - -using std::string; -using std::vector; -using std::ostrstream; -using std::setw; -using std::setfill; -using std::hex; -using std::dec; -using std::min; -using std::ostream; -using std::ostringstream; -using std::strstream; - -// There is no thread annotation support. -#define EXCLUSIVE_LOCKS_REQUIRED(mu) - -static bool BoolFromEnv(const char *varname, bool defval) { - const char* const valstr = getenv(varname); - if (!valstr) { - return defval; - } - return memchr("tTyY1\0", valstr[0], 6) != NULL; -} - -GLOG_DEFINE_bool(logtostderr, BoolFromEnv("GOOGLE_LOGTOSTDERR", false), - "log messages go to stderr instead of logfiles"); -GLOG_DEFINE_bool(alsologtostderr, BoolFromEnv("GOOGLE_ALSOLOGTOSTDERR", false), - "log messages go to stderr in addition to logfiles"); -#ifdef OS_LINUX -GLOG_DEFINE_bool(drop_log_memory, true, "Drop in-memory buffers of log contents. " - "Logs can grow very quickly and they are rarely read before they " - "need to be evicted from memory. Instead, drop them from memory " - "as soon as they are flushed to disk."); -_START_GOOGLE_NAMESPACE_ -namespace logging { -static const int64 kPageSize = getpagesize(); -} -_END_GOOGLE_NAMESPACE_ -#endif - -// By default, errors (including fatal errors) get logged to stderr as -// well as the file. -// -// The default is ERROR instead of FATAL so that users can see problems -// when they run a program without having to look in another file. -DEFINE_int32(stderrthreshold, - GOOGLE_NAMESPACE::ERROR, - "log messages at or above this level are copied to stderr in " - "addition to logfiles. This flag obsoletes --alsologtostderr."); - -GLOG_DEFINE_string(alsologtoemail, "", - "log messages go to these email addresses " - "in addition to logfiles"); -GLOG_DEFINE_bool(log_prefix, true, - "Prepend the log prefix to the start of each log line"); -GLOG_DEFINE_int32(minloglevel, 0, "Messages logged at a lower level than this don't " - "actually get logged anywhere"); -GLOG_DEFINE_int32(logbuflevel, 0, - "Buffer log messages logged at this level or lower" - " (-1 means don't buffer; 0 means buffer INFO only;" - " ...)"); -GLOG_DEFINE_int32(logbufsecs, 30, - "Buffer log messages for at most this many seconds"); -GLOG_DEFINE_int32(logemaillevel, 999, - "Email log messages logged at this level or higher" - " (0 means email all; 3 means email FATAL only;" - " ...)"); -GLOG_DEFINE_string(logmailer, "/bin/mail", - "Mailer used to send logging email"); - -// Compute the default value for --log_dir -static const char* DefaultLogDir() { - const char* env; - env = getenv("GOOGLE_LOG_DIR"); - if (env != NULL && env[0] != '\0') { - return env; - } - env = getenv("TEST_TMPDIR"); - if (env != NULL && env[0] != '\0') { - return env; - } - return ""; -} - -GLOG_DEFINE_string(log_dir, DefaultLogDir(), - "If specified, logfiles are written into this directory instead " - "of the default logging directory."); -GLOG_DEFINE_string(log_link, "", "Put additional links to the log " - "files in this directory"); - -GLOG_DEFINE_int32(max_log_size, 1800, - "approx. maximum log file size (in MB). A value of 0 will " - "be silently overridden to 1."); - -GLOG_DEFINE_bool(stop_logging_if_full_disk, false, - "Stop attempting to log to disk if the disk is full."); - -GLOG_DEFINE_string(log_backtrace_at, "", - "Emit a backtrace when logging at file:linenum."); - -// TODO(hamaji): consider windows -#define PATH_SEPARATOR '/' - -static void GetHostName(string* hostname) { -#if defined(HAVE_SYS_UTSNAME_H) - struct utsname buf; - if (0 != uname(&buf)) { - // ensure null termination on failure - *buf.nodename = '\0'; - } - *hostname = buf.nodename; -#elif defined(OS_WINDOWS) - char buf[MAX_COMPUTERNAME_LENGTH + 1]; - DWORD len = MAX_COMPUTERNAME_LENGTH + 1; - if (GetComputerNameA(buf, &len)) { - *hostname = buf; - } else { - hostname->clear(); - } -#else -# warning There is no way to retrieve the host name. - *hostname = "(unknown)"; -#endif -} - -_START_GOOGLE_NAMESPACE_ - -// Safely get max_log_size, overriding to 1 if it somehow gets defined as 0 -static int32 MaxLogSize() { - return (FLAGS_max_log_size > 0 ? FLAGS_max_log_size : 1); -} - -// A mutex that allows only one thread to log at a time, to keep things from -// getting jumbled. Some other very uncommon logging operations (like -// changing the destination file for log messages of a given severity) also -// lock this mutex. Please be sure that anybody who might possibly need to -// lock it does so. -static Mutex log_mutex; - -// Number of messages sent at each severity. Under log_mutex. -int64 LogMessage::num_messages_[NUM_SEVERITIES] = {0, 0, 0, 0}; - -// Globally disable log writing (if disk is full) -static bool stop_writing = false; - -const char*const LogSeverityNames[NUM_SEVERITIES] = { - "INFO", "WARNING", "ERROR", "FATAL" -}; - -// Has the user called SetExitOnDFatal(true)? -static bool exit_on_dfatal = true; - -const char* GetLogSeverityName(LogSeverity severity) { - return LogSeverityNames[severity]; -} - -static bool SendEmailInternal(const char*dest, const char *subject, - const char*body, bool use_logging); - -base::Logger::~Logger() { -} - -namespace { - -// Encapsulates all file-system related state -class LogFileObject : public base::Logger { - public: - LogFileObject(LogSeverity severity, const char* base_filename); - ~LogFileObject(); - - virtual void Write(bool force_flush, // Should we force a flush here? - time_t timestamp, // Timestamp for this entry - const char* message, - int message_len); - - // Configuration options - void SetBasename(const char* basename); - void SetExtension(const char* ext); - void SetSymlinkBasename(const char* symlink_basename); - - // Normal flushing routine - virtual void Flush(); - - // It is the actual file length for the system loggers, - // i.e., INFO, ERROR, etc. - virtual uint32 LogSize() { - MutexLock l(&lock_); - return file_length_; - } - - // Internal flush routine. Exposed so that FlushLogFilesUnsafe() - // can avoid grabbing a lock. Usually Flush() calls it after - // acquiring lock_. - void FlushUnlocked(); - - private: - static const uint32 kRolloverAttemptFrequency = 0x20; - - Mutex lock_; - bool base_filename_selected_; - string base_filename_; - string symlink_basename_; - string filename_extension_; // option users can specify (eg to add port#) - FILE* file_; - LogSeverity severity_; - uint32 bytes_since_flush_; - uint32 file_length_; - unsigned int rollover_attempt_; - int64 next_flush_time_; // cycle count at which to flush log - - // Actually create a logfile using the value of base_filename_ and the - // supplied argument time_pid_string - // REQUIRES: lock_ is held - bool CreateLogfile(const char* time_pid_string); -}; - -} // namespace - -class LogDestination { - public: - friend class LogMessage; - friend void ReprintFatalMessage(); - friend base::Logger* base::GetLogger(LogSeverity); - friend void base::SetLogger(LogSeverity, base::Logger*); - - // These methods are just forwarded to by their global versions. - static void SetLogDestination(LogSeverity severity, - const char* base_filename); - static void SetLogSymlink(LogSeverity severity, - const char* symlink_basename); - static void AddLogSink(LogSink *destination); - static void RemoveLogSink(LogSink *destination); - static void SetLogFilenameExtension(const char* filename_extension); - static void SetStderrLogging(LogSeverity min_severity); - static void SetEmailLogging(LogSeverity min_severity, const char* addresses); - static void LogToStderr(); - // Flush all log files that are at least at the given severity level - static void FlushLogFiles(int min_severity); - static void FlushLogFilesUnsafe(int min_severity); - - // we set the maximum size of our packet to be 1400, the logic being - // to prevent fragmentation. - // Really this number is arbitrary. - static const int kNetworkBytes = 1400; - - static const string& hostname(); - - static void DeleteLogDestinations(); - - private: - LogDestination(LogSeverity severity, const char* base_filename); - ~LogDestination() { } - - // Take a log message of a particular severity and log it to stderr - // iff it's of a high enough severity to deserve it. - static void MaybeLogToStderr(LogSeverity severity, const char* message, - size_t len); - - // Take a log message of a particular severity and log it to email - // iff it's of a high enough severity to deserve it. - static void MaybeLogToEmail(LogSeverity severity, const char* message, - size_t len); - // Take a log message of a particular severity and log it to a file - // iff the base filename is not "" (which means "don't log to me") - static void MaybeLogToLogfile(LogSeverity severity, - time_t timestamp, - const char* message, size_t len); - // Take a log message of a particular severity and log it to the file - // for that severity and also for all files with severity less than - // this severity. - static void LogToAllLogfiles(LogSeverity severity, - time_t timestamp, - const char* message, size_t len); - - // Send logging info to all registered sinks. - static void LogToSinks(LogSeverity severity, - const char *full_filename, - const char *base_filename, - int line, - const struct ::tm* tm_time, - const char* message, - size_t message_len); - - // Wait for all registered sinks via WaitTillSent - // including the optional one in "data". - static void WaitForSinks(LogMessage::LogMessageData* data); - - static LogDestination* log_destination(LogSeverity severity); - - LogFileObject fileobject_; - base::Logger* logger_; // Either &fileobject_, or wrapper around it - - static LogDestination* log_destinations_[NUM_SEVERITIES]; - static LogSeverity email_logging_severity_; - static string addresses_; - static string hostname_; - - // arbitrary global logging destinations. - static vector* sinks_; - - // Protects the vector sinks_, - // but not the LogSink objects its elements reference. - static Mutex sink_mutex_; - - // Disallow - LogDestination(const LogDestination&); - LogDestination& operator=(const LogDestination&); -}; - -// Errors do not get logged to email by default. -LogSeverity LogDestination::email_logging_severity_ = 99999; - -string LogDestination::addresses_; -string LogDestination::hostname_; - -vector* LogDestination::sinks_ = NULL; -Mutex LogDestination::sink_mutex_; - -/* static */ -const string& LogDestination::hostname() { - if (hostname_.empty()) { - GetHostName(&hostname_); - if (hostname_.empty()) { - hostname_ = "(unknown)"; - } - } - return hostname_; -} - -LogDestination::LogDestination(LogSeverity severity, - const char* base_filename) - : fileobject_(severity, base_filename), - logger_(&fileobject_) { -} - -inline void LogDestination::FlushLogFilesUnsafe(int min_severity) { - // assume we have the log_mutex or we simply don't care - // about it - for (int i = min_severity; i < NUM_SEVERITIES; i++) { - LogDestination* log = log_destination(i); - if (log != NULL) { - // Flush the base fileobject_ logger directly instead of going - // through any wrappers to reduce chance of deadlock. - log->fileobject_.FlushUnlocked(); - } - } -} - -inline void LogDestination::FlushLogFiles(int min_severity) { - // Prevent any subtle race conditions by wrapping a mutex lock around - // all this stuff. - MutexLock l(&log_mutex); - for (int i = min_severity; i < NUM_SEVERITIES; i++) { - LogDestination* log = log_destination(i); - if (log != NULL) { - log->logger_->Flush(); - } - } -} - -inline void LogDestination::SetLogDestination(LogSeverity severity, - const char* base_filename) { - assert(severity >= 0 && severity < NUM_SEVERITIES); - // Prevent any subtle race conditions by wrapping a mutex lock around - // all this stuff. - MutexLock l(&log_mutex); - log_destination(severity)->fileobject_.SetBasename(base_filename); -} - -inline void LogDestination::SetLogSymlink(LogSeverity severity, - const char* symlink_basename) { - CHECK_GE(severity, 0); - CHECK_LT(severity, NUM_SEVERITIES); - MutexLock l(&log_mutex); - log_destination(severity)->fileobject_.SetSymlinkBasename(symlink_basename); -} - -inline void LogDestination::AddLogSink(LogSink *destination) { - // Prevent any subtle race conditions by wrapping a mutex lock around - // all this stuff. - MutexLock l(&sink_mutex_); - if (!sinks_) sinks_ = new vector; - sinks_->push_back(destination); -} - -inline void LogDestination::RemoveLogSink(LogSink *destination) { - // Prevent any subtle race conditions by wrapping a mutex lock around - // all this stuff. - MutexLock l(&sink_mutex_); - // This doesn't keep the sinks in order, but who cares? - if (sinks_) { - for (int i = sinks_->size() - 1; i >= 0; i--) { - if ((*sinks_)[i] == destination) { - (*sinks_)[i] = (*sinks_)[sinks_->size() - 1]; - sinks_->pop_back(); - break; - } - } - } -} - -inline void LogDestination::SetLogFilenameExtension(const char* ext) { - // Prevent any subtle race conditions by wrapping a mutex lock around - // all this stuff. - MutexLock l(&log_mutex); - for ( int severity = 0; severity < NUM_SEVERITIES; ++severity ) { - log_destination(severity)->fileobject_.SetExtension(ext); - } -} - -inline void LogDestination::SetStderrLogging(LogSeverity min_severity) { - assert(min_severity >= 0 && min_severity < NUM_SEVERITIES); - // Prevent any subtle race conditions by wrapping a mutex lock around - // all this stuff. - MutexLock l(&log_mutex); - FLAGS_stderrthreshold = min_severity; -} - -inline void LogDestination::LogToStderr() { - // *Don't* put this stuff in a mutex lock, since SetStderrLogging & - // SetLogDestination already do the locking! - SetStderrLogging(0); // thus everything is "also" logged to stderr - for ( int i = 0; i < NUM_SEVERITIES; ++i ) { - SetLogDestination(i, ""); // "" turns off logging to a logfile - } -} - -inline void LogDestination::SetEmailLogging(LogSeverity min_severity, - const char* addresses) { - assert(min_severity >= 0 && min_severity < NUM_SEVERITIES); - // Prevent any subtle race conditions by wrapping a mutex lock around - // all this stuff. - MutexLock l(&log_mutex); - LogDestination::email_logging_severity_ = min_severity; - LogDestination::addresses_ = addresses; -} - -static void WriteToStderr(const char* message, size_t len) { - // Avoid using cerr from this module since we may get called during - // exit code, and cerr may be partially or fully destroyed by then. - fwrite(message, len, 1, stderr); -} - -inline void LogDestination::MaybeLogToStderr(LogSeverity severity, - const char* message, size_t len) { - if ((severity >= FLAGS_stderrthreshold) || FLAGS_alsologtostderr) { - WriteToStderr(message, len); -#ifdef OS_WINDOWS - // On Windows, also output to the debugger - ::OutputDebugStringA(string(message,len).c_str()); -#endif - } -} - - -inline void LogDestination::MaybeLogToEmail(LogSeverity severity, - const char* message, size_t len) { - if (severity >= email_logging_severity_ || - severity >= FLAGS_logemaillevel) { - string to(FLAGS_alsologtoemail); - if (!addresses_.empty()) { - if (!to.empty()) { - to += ","; - } - to += addresses_; - } - const string subject(string("[LOG] ") + LogSeverityNames[severity] + ": " + - glog_internal_namespace_::ProgramInvocationShortName()); - string body(hostname()); - body += "\n\n"; - body.append(message, len); - - // should NOT use SendEmail(). The caller of this function holds the - // log_mutex and SendEmail() calls LOG/VLOG which will block trying to - // acquire the log_mutex object. Use SendEmailInternal() and set - // use_logging to false. - SendEmailInternal(to.c_str(), subject.c_str(), body.c_str(), false); - } -} - - -inline void LogDestination::MaybeLogToLogfile(LogSeverity severity, - time_t timestamp, - const char* message, - size_t len) { - const bool should_flush = severity > FLAGS_logbuflevel; - LogDestination* destination = log_destination(severity); - destination->logger_->Write(should_flush, timestamp, message, len); -} - -inline void LogDestination::LogToAllLogfiles(LogSeverity severity, - time_t timestamp, - const char* message, - size_t len) { - - if ( FLAGS_logtostderr ) // global flag: never log to file - WriteToStderr(message, len); - else - for (int i = severity; i >= 0; --i) - LogDestination::MaybeLogToLogfile(i, timestamp, message, len); - -} - -inline void LogDestination::LogToSinks(LogSeverity severity, - const char *full_filename, - const char *base_filename, - int line, - const struct ::tm* tm_time, - const char* message, - size_t message_len) { - ReaderMutexLock l(&sink_mutex_); - if (sinks_) { - for (int i = sinks_->size() - 1; i >= 0; i--) { - (*sinks_)[i]->send(severity, full_filename, base_filename, - line, tm_time, message, message_len); - } - } -} - -inline void LogDestination::WaitForSinks(LogMessage::LogMessageData* data) { - ReaderMutexLock l(&sink_mutex_); - if (sinks_) { - for (int i = sinks_->size() - 1; i >= 0; i--) { - (*sinks_)[i]->WaitTillSent(); - } - } - const bool send_to_sink = - (data->send_method_ == &LogMessage::SendToSink) || - (data->send_method_ == &LogMessage::SendToSinkAndLog); - if (send_to_sink && data->sink_ != NULL) { - data->sink_->WaitTillSent(); - } -} - -LogDestination* LogDestination::log_destinations_[NUM_SEVERITIES]; - -inline LogDestination* LogDestination::log_destination(LogSeverity severity) { - assert(severity >=0 && severity < NUM_SEVERITIES); - if (!log_destinations_[severity]) { - log_destinations_[severity] = new LogDestination(severity, NULL); - } - return log_destinations_[severity]; -} - -void LogDestination::DeleteLogDestinations() { - for (int severity = 0; severity < NUM_SEVERITIES; ++severity) { - delete log_destinations_[severity]; - log_destinations_[severity] = NULL; - } -} - -namespace { - -LogFileObject::LogFileObject(LogSeverity severity, - const char* base_filename) - : base_filename_selected_(base_filename != NULL), - base_filename_((base_filename != NULL) ? base_filename : ""), - symlink_basename_(glog_internal_namespace_::ProgramInvocationShortName()), - filename_extension_(), - file_(NULL), - severity_(severity), - bytes_since_flush_(0), - file_length_(0), - rollover_attempt_(kRolloverAttemptFrequency-1), - next_flush_time_(0) { - assert(severity >= 0); - assert(severity < NUM_SEVERITIES); -} - -LogFileObject::~LogFileObject() { - MutexLock l(&lock_); - if (file_ != NULL) { - fclose(file_); - file_ = NULL; - } -} - -void LogFileObject::SetBasename(const char* basename) { - MutexLock l(&lock_); - base_filename_selected_ = true; - if (base_filename_ != basename) { - // Get rid of old log file since we are changing names - if (file_ != NULL) { - fclose(file_); - file_ = NULL; - rollover_attempt_ = kRolloverAttemptFrequency-1; - } - base_filename_ = basename; - } -} - -void LogFileObject::SetExtension(const char* ext) { - MutexLock l(&lock_); - if (filename_extension_ != ext) { - // Get rid of old log file since we are changing names - if (file_ != NULL) { - fclose(file_); - file_ = NULL; - rollover_attempt_ = kRolloverAttemptFrequency-1; - } - filename_extension_ = ext; - } -} - -void LogFileObject::SetSymlinkBasename(const char* symlink_basename) { - MutexLock l(&lock_); - symlink_basename_ = symlink_basename; -} - -void LogFileObject::Flush() { - MutexLock l(&lock_); - FlushUnlocked(); -} - -void LogFileObject::FlushUnlocked(){ - if (file_ != NULL) { - fflush(file_); - bytes_since_flush_ = 0; - } - // Figure out when we are due for another flush. - const int64 next = (FLAGS_logbufsecs - * static_cast(1000000)); // in usec - next_flush_time_ = CycleClock_Now() + UsecToCycles(next); -} - -bool LogFileObject::CreateLogfile(const char* time_pid_string) { - string string_filename = base_filename_+filename_extension_+ - time_pid_string; - const char* filename = string_filename.c_str(); - int fd = open(filename, O_WRONLY | O_CREAT | O_EXCL, 0664); - if (fd == -1) return false; -#ifdef HAVE_FCNTL - // Mark the file close-on-exec. We don't really care if this fails - fcntl(fd, F_SETFD, FD_CLOEXEC); -#endif - - file_ = fdopen(fd, "a"); // Make a FILE*. - if (file_ == NULL) { // Man, we're screwed! - close(fd); - unlink(filename); // Erase the half-baked evidence: an unusable log file - return false; - } - - // We try to create a symlink called ., - // which is easier to use. (Every time we create a new logfile, - // we destroy the old symlink and create a new one, so it always - // points to the latest logfile.) If it fails, we're sad but it's - // no error. - if (!symlink_basename_.empty()) { - // take directory from filename - const char* slash = strrchr(filename, PATH_SEPARATOR); - const string linkname = - symlink_basename_ + '.' + LogSeverityNames[severity_]; - string linkpath; - if ( slash ) linkpath = string(filename, slash-filename+1); // get dirname - linkpath += linkname; - unlink(linkpath.c_str()); // delete old one if it exists - - // We must have unistd.h. -#ifdef HAVE_UNISTD_H - // Make the symlink be relative (in the same dir) so that if the - // entire log directory gets relocated the link is still valid. - const char *linkdest = slash ? (slash + 1) : filename; - if (symlink(linkdest, linkpath.c_str()) != 0) { - // silently ignore failures - } - - // Make an additional link to the log file in a place specified by - // FLAGS_log_link, if indicated - if (!FLAGS_log_link.empty()) { - linkpath = FLAGS_log_link + "/" + linkname; - unlink(linkpath.c_str()); // delete old one if it exists - if (symlink(filename, linkpath.c_str()) != 0) { - // silently ignore failures - } - } -#endif - } - - return true; // Everything worked -} - -void LogFileObject::Write(bool force_flush, - time_t timestamp, - const char* message, - int message_len) { - MutexLock l(&lock_); - - // We don't log if the base_name_ is "" (which means "don't write") - if (base_filename_selected_ && base_filename_.empty()) { - return; - } - - if (static_cast(file_length_ >> 20) >= MaxLogSize() || - PidHasChanged()) { - if (file_ != NULL) fclose(file_); - file_ = NULL; - file_length_ = bytes_since_flush_ = 0; - rollover_attempt_ = kRolloverAttemptFrequency-1; - } - - // If there's no destination file, make one before outputting - if (file_ == NULL) { - // Try to rollover the log file every 32 log messages. The only time - // this could matter would be when we have trouble creating the log - // file. If that happens, we'll lose lots of log messages, of course! - if (++rollover_attempt_ != kRolloverAttemptFrequency) return; - rollover_attempt_ = 0; - - struct ::tm tm_time; - localtime_r(×tamp, &tm_time); - - // The logfile's filename will have the date/time & pid in it - char time_pid_string[256]; // More than enough chars for time, pid, \0 - ostrstream time_pid_stream(time_pid_string, sizeof(time_pid_string)); - time_pid_stream.fill('0'); - time_pid_stream << 1900+tm_time.tm_year - << setw(2) << 1+tm_time.tm_mon - << setw(2) << tm_time.tm_mday - << '-' - << setw(2) << tm_time.tm_hour - << setw(2) << tm_time.tm_min - << setw(2) << tm_time.tm_sec - << '.' - << GetMainThreadPid() - << '\0'; - - if (base_filename_selected_) { - if (!CreateLogfile(time_pid_string)) { - perror("Could not create log file"); - fprintf(stderr, "COULD NOT CREATE LOGFILE '%s'!\n", time_pid_string); - return; - } - } else { - // If no base filename for logs of this severity has been set, use a - // default base filename of - // "...log..". So - // logfiles will have names like - // webserver.examplehost.root.log.INFO.19990817-150000.4354, where - // 19990817 is a date (1999 August 17), 150000 is a time (15:00:00), - // and 4354 is the pid of the logging process. The date & time reflect - // when the file was created for output. - // - // Where does the file get put? Successively try the directories - // "/tmp", and "." - string stripped_filename( - glog_internal_namespace_::ProgramInvocationShortName()); - string hostname; - GetHostName(&hostname); - - string uidname = MyUserName(); - // We should not call CHECK() here because this function can be - // called after holding on to log_mutex. We don't want to - // attempt to hold on to the same mutex, and get into a - // deadlock. Simply use a name like invalid-user. - if (uidname.empty()) uidname = "invalid-user"; - - stripped_filename = stripped_filename+'.'+hostname+'.' - +uidname+".log." - +LogSeverityNames[severity_]+'.'; - // We're going to (potentially) try to put logs in several different dirs - const vector & log_dirs = GetLoggingDirectories(); - - // Go through the list of dirs, and try to create the log file in each - // until we succeed or run out of options - bool success = false; - for (vector::const_iterator dir = log_dirs.begin(); - dir != log_dirs.end(); - ++dir) { - base_filename_ = *dir + "/" + stripped_filename; - if ( CreateLogfile(time_pid_string) ) { - success = true; - break; - } - } - // If we never succeeded, we have to give up - if ( success == false ) { - perror("Could not create logging file"); - fprintf(stderr, "COULD NOT CREATE A LOGGINGFILE %s!", time_pid_string); - return; - } - } - - // Write a header message into the log file - char file_header_string[512]; // Enough chars for time and binary info - ostrstream file_header_stream(file_header_string, - sizeof(file_header_string)); - file_header_stream.fill('0'); - file_header_stream << "Log file created at: " - << 1900+tm_time.tm_year << '/' - << setw(2) << 1+tm_time.tm_mon << '/' - << setw(2) << tm_time.tm_mday - << ' ' - << setw(2) << tm_time.tm_hour << ':' - << setw(2) << tm_time.tm_min << ':' - << setw(2) << tm_time.tm_sec << '\n' - << "Running on machine: " - << LogDestination::hostname() << '\n' - << "Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu " - << "threadid file:line] msg" << '\n' - << '\0'; - int header_len = strlen(file_header_string); - fwrite(file_header_string, 1, header_len, file_); - file_length_ += header_len; - bytes_since_flush_ += header_len; - } - - // Write to LOG file - if ( !stop_writing ) { - // fwrite() doesn't return an error when the disk is full, for - // messages that are less than 4096 bytes. When the disk is full, - // it returns the message length for messages that are less than - // 4096 bytes. fwrite() returns 4096 for message lengths that are - // greater than 4096, thereby indicating an error. - errno = 0; - fwrite(message, 1, message_len, file_); - if ( FLAGS_stop_logging_if_full_disk && - errno == ENOSPC ) { // disk full, stop writing to disk - stop_writing = true; // until the disk is - return; - } else { - file_length_ += message_len; - bytes_since_flush_ += message_len; - } - } else { - if ( CycleClock_Now() >= next_flush_time_ ) - stop_writing = false; // check to see if disk has free space. - return; // no need to flush - } - - // See important msgs *now*. Also, flush logs at least every 10^6 chars, - // or every "FLAGS_logbufsecs" seconds. - if ( force_flush || - (bytes_since_flush_ >= 1000000) || - (CycleClock_Now() >= next_flush_time_) ) { - FlushUnlocked(); -#ifdef OS_LINUX - if (FLAGS_drop_log_memory) { - if (file_length_ >= logging::kPageSize) { - // don't evict the most recent page - uint32 len = file_length_ & ~(logging::kPageSize - 1); - posix_fadvise(fileno(file_), 0, len, POSIX_FADV_DONTNEED); - } - } -#endif - } -} - -} // namespace - -// An arbitrary limit on the length of a single log message. This -// is so that streaming can be done more efficiently. -const size_t LogMessage::kMaxLogMessageLen = 30000; - -// Static log data space to avoid alloc failures in a LOG(FATAL) -// -// Since multiple threads may call LOG(FATAL), and we want to preserve -// the data from the first call, we allocate two sets of space. One -// for exclusive use by the first thread, and one for shared use by -// all other threads. -static Mutex fatal_msg_lock; -static CrashReason crash_reason; -static bool fatal_msg_exclusive = true; -static char fatal_msg_buf_exclusive[LogMessage::kMaxLogMessageLen+1]; -static char fatal_msg_buf_shared[LogMessage::kMaxLogMessageLen+1]; -static LogMessage::LogStream fatal_msg_stream_exclusive( - fatal_msg_buf_exclusive, LogMessage::kMaxLogMessageLen, 0); -static LogMessage::LogStream fatal_msg_stream_shared( - fatal_msg_buf_shared, LogMessage::kMaxLogMessageLen, 0); -LogMessage::LogMessageData LogMessage::fatal_msg_data_exclusive_; -LogMessage::LogMessageData LogMessage::fatal_msg_data_shared_; - -LogMessage::LogMessageData::~LogMessageData() { - delete[] buf_; - delete stream_alloc_; -} - -LogMessage::LogMessage(const char* file, int line, LogSeverity severity, - int ctr, void (LogMessage::*send_method)()) { - Init(file, line, severity, send_method); - data_->stream_->set_ctr(ctr); -} - -LogMessage::LogMessage(const char* file, int line, - const CheckOpString& result) { - Init(file, line, FATAL, &LogMessage::SendToLog); - stream() << "Check failed: " << (*result.str_) << " "; -} - -LogMessage::LogMessage(const char* file, int line) { - Init(file, line, INFO, &LogMessage::SendToLog); -} - -LogMessage::LogMessage(const char* file, int line, LogSeverity severity) { - Init(file, line, severity, &LogMessage::SendToLog); -} - -LogMessage::LogMessage(const char* file, int line, LogSeverity severity, - LogSink* sink, bool also_send_to_log) { - Init(file, line, severity, also_send_to_log ? &LogMessage::SendToSinkAndLog : - &LogMessage::SendToSink); - data_->sink_ = sink; // override Init()'s setting to NULL -} - -LogMessage::LogMessage(const char* file, int line, LogSeverity severity, - vector *outvec) { - Init(file, line, severity, &LogMessage::SaveOrSendToLog); - data_->outvec_ = outvec; // override Init()'s setting to NULL -} - -LogMessage::LogMessage(const char* file, int line, LogSeverity severity, - string *message) { - Init(file, line, severity, &LogMessage::WriteToStringAndLog); - data_->message_ = message; // override Init()'s setting to NULL -} - -void LogMessage::Init(const char* file, - int line, - LogSeverity severity, - void (LogMessage::*send_method)()) { - allocated_ = NULL; - if (severity != FATAL || !exit_on_dfatal) { - allocated_ = new LogMessageData(); - data_ = allocated_; - data_->buf_ = new char[kMaxLogMessageLen+1]; - data_->message_text_ = data_->buf_; - data_->stream_alloc_ = - new LogStream(data_->message_text_, kMaxLogMessageLen, 0); - data_->stream_ = data_->stream_alloc_; - data_->first_fatal_ = false; - } else { - MutexLock l(&fatal_msg_lock); - if (fatal_msg_exclusive) { - fatal_msg_exclusive = false; - data_ = &fatal_msg_data_exclusive_; - data_->message_text_ = fatal_msg_buf_exclusive; - data_->stream_ = &fatal_msg_stream_exclusive; - data_->first_fatal_ = true; - } else { - data_ = &fatal_msg_data_shared_; - data_->message_text_ = fatal_msg_buf_shared; - data_->stream_ = &fatal_msg_stream_shared; - data_->first_fatal_ = false; - } - data_->stream_alloc_ = NULL; - } - - stream().fill('0'); - data_->preserved_errno_ = errno; - data_->severity_ = severity; - data_->line_ = line; - data_->send_method_ = send_method; - data_->sink_ = NULL; - data_->outvec_ = NULL; - WallTime now = WallTime_Now(); - data_->timestamp_ = static_cast(now); - localtime_r(&data_->timestamp_, &data_->tm_time_); - int usecs = static_cast((now - data_->timestamp_) * 1000000); - RawLog__SetLastTime(data_->tm_time_, usecs); - - data_->num_chars_to_log_ = 0; - data_->num_chars_to_syslog_ = 0; - data_->basename_ = const_basename(file); - data_->fullname_ = file; - data_->has_been_flushed_ = false; - - // If specified, prepend a prefix to each line. For example: - // I1018 160715 f5d4fbb0 logging.cc:1153] - // (log level, GMT month, date, time, thread_id, file basename, line) - // We exclude the thread_id for the default thread. - if (FLAGS_log_prefix && (line != kNoLogPrefix)) { - stream() << LogSeverityNames[severity][0] - << setw(2) << 1+data_->tm_time_.tm_mon - << setw(2) << data_->tm_time_.tm_mday - << ' ' - << setw(2) << data_->tm_time_.tm_hour << ':' - << setw(2) << data_->tm_time_.tm_min << ':' - << setw(2) << data_->tm_time_.tm_sec << "." - << setw(6) << usecs - << ' ' - << setfill(' ') << setw(5) - << static_cast(GetTID()) << setfill('0') - << ' ' - << data_->basename_ << ':' << data_->line_ << "] "; - } - data_->num_prefix_chars_ = data_->stream_->pcount(); - - if (!FLAGS_log_backtrace_at.empty()) { - char fileline[128]; - snprintf(fileline, sizeof(fileline), "%s:%d", data_->basename_, line); -#ifdef HAVE_STACKTRACE - if (!strcmp(FLAGS_log_backtrace_at.c_str(), fileline)) { - string stacktrace; - DumpStackTraceToString(&stacktrace); - stream() << " (stacktrace:\n" << stacktrace << ") "; - } -#endif - } -} - -LogMessage::~LogMessage() { - Flush(); - delete allocated_; -} - -// Flush buffered message, called by the destructor, or any other function -// that needs to synchronize the log. -void LogMessage::Flush() { - if (data_->has_been_flushed_ || data_->severity_ < FLAGS_minloglevel) - return; - - data_->num_chars_to_log_ = data_->stream_->pcount(); - data_->num_chars_to_syslog_ = - data_->num_chars_to_log_ - data_->num_prefix_chars_; - - // Do we need to add a \n to the end of this message? - bool append_newline = - (data_->message_text_[data_->num_chars_to_log_-1] != '\n'); - char original_final_char = '\0'; - - // If we do need to add a \n, we'll do it by violating the memory of the - // ostrstream buffer. This is quick, and we'll make sure to undo our - // modification before anything else is done with the ostrstream. It - // would be preferable not to do things this way, but it seems to be - // the best way to deal with this. - if (append_newline) { - original_final_char = data_->message_text_[data_->num_chars_to_log_]; - data_->message_text_[data_->num_chars_to_log_++] = '\n'; - } - - // Prevent any subtle race conditions by wrapping a mutex lock around - // the actual logging action per se. - { - MutexLock l(&log_mutex); - (this->*(data_->send_method_))(); - ++num_messages_[static_cast(data_->severity_)]; - } - LogDestination::WaitForSinks(data_); - - if (append_newline) { - // Fix the ostrstream back how it was before we screwed with it. - // It's 99.44% certain that we don't need to worry about doing this. - data_->message_text_[data_->num_chars_to_log_-1] = original_final_char; - } - - // If errno was already set before we enter the logging call, we'll - // set it back to that value when we return from the logging call. - // It happens often that we log an error message after a syscall - // failure, which can potentially set the errno to some other - // values. We would like to preserve the original errno. - if (data_->preserved_errno_ != 0) { - errno = data_->preserved_errno_; - } - - // Note that this message is now safely logged. If we're asked to flush - // again, as a result of destruction, say, we'll do nothing on future calls. - data_->has_been_flushed_ = true; -} - -// Copy of first FATAL log message so that we can print it out again -// after all the stack traces. To preserve legacy behavior, we don't -// use fatal_msg_buf_exclusive. -static time_t fatal_time; -static char fatal_message[256]; - -void ReprintFatalMessage() { - if (fatal_message[0]) { - const int n = strlen(fatal_message); - if (!FLAGS_logtostderr) { - // Also write to stderr - WriteToStderr(fatal_message, n); - } - LogDestination::LogToAllLogfiles(ERROR, fatal_time, fatal_message, n); - } -} - -// L >= log_mutex (callers must hold the log_mutex). -void LogMessage::SendToLog() EXCLUSIVE_LOCKS_REQUIRED(log_mutex) { - static bool already_warned_before_initgoogle = false; - - log_mutex.AssertHeld(); - - RAW_DCHECK(data_->num_chars_to_log_ > 0 && - data_->message_text_[data_->num_chars_to_log_-1] == '\n', ""); - - // Messages of a given severity get logged to lower severity logs, too - - if (!already_warned_before_initgoogle && !IsGoogleLoggingInitialized()) { - const char w[] = "WARNING: Logging before InitGoogleLogging() is " - "written to STDERR\n"; - WriteToStderr(w, strlen(w)); - already_warned_before_initgoogle = true; - } - - // global flag: never log to file if set. Also -- don't log to a - // file if we haven't parsed the command line flags to get the - // program name. - if (FLAGS_logtostderr || !IsGoogleLoggingInitialized()) { - WriteToStderr(data_->message_text_, data_->num_chars_to_log_); - - // this could be protected by a flag if necessary. - LogDestination::LogToSinks(data_->severity_, - data_->fullname_, data_->basename_, - data_->line_, &data_->tm_time_, - data_->message_text_ + data_->num_prefix_chars_, - (data_->num_chars_to_log_ - - data_->num_prefix_chars_ - 1)); - } else { - - // log this message to all log files of severity <= severity_ - LogDestination::LogToAllLogfiles(data_->severity_, data_->timestamp_, - data_->message_text_, - data_->num_chars_to_log_); - - LogDestination::MaybeLogToStderr(data_->severity_, data_->message_text_, - data_->num_chars_to_log_); - LogDestination::MaybeLogToEmail(data_->severity_, data_->message_text_, - data_->num_chars_to_log_); - LogDestination::LogToSinks(data_->severity_, - data_->fullname_, data_->basename_, - data_->line_, &data_->tm_time_, - data_->message_text_ + data_->num_prefix_chars_, - (data_->num_chars_to_log_ - - data_->num_prefix_chars_ - 1)); - // NOTE: -1 removes trailing \n - } - - // If we log a FATAL message, flush all the log destinations, then toss - // a signal for others to catch. We leave the logs in a state that - // someone else can use them (as long as they flush afterwards) - if (data_->severity_ == FATAL && exit_on_dfatal) { - if (data_->first_fatal_) { - // Store crash information so that it is accessible from within signal - // handlers that may be invoked later. - RecordCrashReason(&crash_reason); - SetCrashReason(&crash_reason); - - // Store shortened fatal message for other logs and GWQ status - const int copy = min(data_->num_chars_to_log_, - sizeof(fatal_message)-1); - memcpy(fatal_message, data_->message_text_, copy); - fatal_message[copy] = '\0'; - fatal_time = data_->timestamp_; - } - - if (!FLAGS_logtostderr) { - for (int i = 0; i < NUM_SEVERITIES; ++i) { - if ( LogDestination::log_destinations_[i] ) - LogDestination::log_destinations_[i]->logger_->Write(true, 0, "", 0); - } - } - - // release the lock that our caller (directly or indirectly) - // LogMessage::~LogMessage() grabbed so that signal handlers - // can use the logging facility. Alternately, we could add - // an entire unsafe logging interface to bypass locking - // for signal handlers but this seems simpler. - log_mutex.Unlock(); - LogDestination::WaitForSinks(data_); - - const char* message = "*** Check failure stack trace: ***\n"; - if (write(STDERR_FILENO, message, strlen(message)) < 0) { - // Ignore errors. - } - Fail(); - } -} - -void LogMessage::RecordCrashReason( - glog_internal_namespace_::CrashReason* reason) { - reason->filename = fatal_msg_data_exclusive_.fullname_; - reason->line_number = fatal_msg_data_exclusive_.line_; - reason->message = fatal_msg_buf_exclusive + - fatal_msg_data_exclusive_.num_prefix_chars_; -#ifdef HAVE_STACKTRACE - // Retrieve the stack trace, omitting the logging frames that got us here. - reason->depth = GetStackTrace(reason->stack, ARRAYSIZE(reason->stack), 4); -#else - reason->depth = 0; -#endif -} - -static void logging_fail() { -#if defined(_DEBUG) && defined(_MSC_VER) - // When debugging on windows, avoid the obnoxious dialog and make - // it possible to continue past a LOG(FATAL) in the debugger - _asm int 3 -#else - abort(); -#endif -} - -#ifdef HAVE___ATTRIBUTE__ -GOOGLE_GLOG_DLL_DECL -void (*g_logging_fail_func)() __attribute__((noreturn)) = &logging_fail; -#else -GOOGLE_GLOG_DLL_DECL void (*g_logging_fail_func)() = &logging_fail; -#endif - -void InstallFailureFunction(void (*fail_func)()) { - g_logging_fail_func = fail_func; -} - -void LogMessage::Fail() { - g_logging_fail_func(); -} - -// L >= log_mutex (callers must hold the log_mutex). -void LogMessage::SendToSink() EXCLUSIVE_LOCKS_REQUIRED(log_mutex) { - if (data_->sink_ != NULL) { - RAW_DCHECK(data_->num_chars_to_log_ > 0 && - data_->message_text_[data_->num_chars_to_log_-1] == '\n', ""); - data_->sink_->send(data_->severity_, data_->fullname_, data_->basename_, - data_->line_, &data_->tm_time_, - data_->message_text_ + data_->num_prefix_chars_, - (data_->num_chars_to_log_ - - data_->num_prefix_chars_ - 1)); - } -} - -// L >= log_mutex (callers must hold the log_mutex). -void LogMessage::SendToSinkAndLog() EXCLUSIVE_LOCKS_REQUIRED(log_mutex) { - SendToSink(); - SendToLog(); -} - -// L >= log_mutex (callers must hold the log_mutex). -void LogMessage::SaveOrSendToLog() EXCLUSIVE_LOCKS_REQUIRED(log_mutex) { - if (data_->outvec_ != NULL) { - RAW_DCHECK(data_->num_chars_to_log_ > 0 && - data_->message_text_[data_->num_chars_to_log_-1] == '\n', ""); - // Omit prefix of message and trailing newline when recording in outvec_. - const char *start = data_->message_text_ + data_->num_prefix_chars_; - int len = data_->num_chars_to_log_ - data_->num_prefix_chars_ - 1; - data_->outvec_->push_back(string(start, len)); - } else { - SendToLog(); - } -} - -void LogMessage::WriteToStringAndLog() EXCLUSIVE_LOCKS_REQUIRED(log_mutex) { - if (data_->message_ != NULL) { - RAW_DCHECK(data_->num_chars_to_log_ > 0 && - data_->message_text_[data_->num_chars_to_log_-1] == '\n', ""); - // Omit prefix of message and trailing newline when writing to message_. - const char *start = data_->message_text_ + data_->num_prefix_chars_; - int len = data_->num_chars_to_log_ - data_->num_prefix_chars_ - 1; - data_->message_->assign(start, len); - } - SendToLog(); -} - -// L >= log_mutex (callers must hold the log_mutex). -void LogMessage::SendToSyslogAndLog() { -#ifdef HAVE_SYSLOG_H - // Before any calls to syslog(), make a single call to openlog() - static bool openlog_already_called = false; - if (!openlog_already_called) { - openlog(glog_internal_namespace_::ProgramInvocationShortName(), - LOG_CONS | LOG_NDELAY | LOG_PID, - LOG_USER); - openlog_already_called = true; - } - - // This array maps Google severity levels to syslog levels - const int SEVERITY_TO_LEVEL[] = { LOG_INFO, LOG_WARNING, LOG_ERR, LOG_EMERG }; - syslog(LOG_USER | SEVERITY_TO_LEVEL[static_cast(data_->severity_)], "%.*s", - int(data_->num_chars_to_syslog_), - data_->message_text_ + data_->num_prefix_chars_); - SendToLog(); -#else - LOG(ERROR) << "No syslog support: message=" << data_->message_text_; -#endif -} - -base::Logger* base::GetLogger(LogSeverity severity) { - MutexLock l(&log_mutex); - return LogDestination::log_destination(severity)->logger_; -} - -void base::SetLogger(LogSeverity severity, base::Logger* logger) { - MutexLock l(&log_mutex); - LogDestination::log_destination(severity)->logger_ = logger; -} - -// L < log_mutex. Acquires and releases mutex_. -int64 LogMessage::num_messages(int severity) { - MutexLock l(&log_mutex); - return num_messages_[severity]; -} - -// Output the COUNTER value. This is only valid if ostream is a -// LogStream. -ostream& operator<<(ostream &os, const PRIVATE_Counter&) { - LogMessage::LogStream *log = dynamic_cast(&os); - CHECK(log == log->self()); - os << log->ctr(); - return os; -} - -ErrnoLogMessage::ErrnoLogMessage(const char* file, int line, - LogSeverity severity, int ctr, - void (LogMessage::*send_method)()) - : LogMessage(file, line, severity, ctr, send_method) { -} - -ErrnoLogMessage::~ErrnoLogMessage() { - // Don't access errno directly because it may have been altered - // while streaming the message. - char buf[100]; - posix_strerror_r(preserved_errno(), buf, sizeof(buf)); - stream() << ": " << buf << " [" << preserved_errno() << "]"; -} - -void FlushLogFiles(LogSeverity min_severity) { - LogDestination::FlushLogFiles(min_severity); -} - -void FlushLogFilesUnsafe(LogSeverity min_severity) { - LogDestination::FlushLogFilesUnsafe(min_severity); -} - -void SetLogDestination(LogSeverity severity, const char* base_filename) { - LogDestination::SetLogDestination(severity, base_filename); -} - -void SetLogSymlink(LogSeverity severity, const char* symlink_basename) { - LogDestination::SetLogSymlink(severity, symlink_basename); -} - -LogSink::~LogSink() { -} - -void LogSink::WaitTillSent() { - // noop default -} - -string LogSink::ToString(LogSeverity severity, const char* file, int line, - const struct ::tm* tm_time, - const char* message, size_t message_len) { - ostringstream stream(string(message, message_len)); - stream.fill('0'); - - // FIXME(jrvb): Updating this to use the correct value for usecs - // requires changing the signature for both this method and - // LogSink::send(). This change needs to be done in a separate CL - // so subclasses of LogSink can be updated at the same time. - int usecs = 0; - - stream << LogSeverityNames[severity][0] - << setw(2) << 1+tm_time->tm_mon - << setw(2) << tm_time->tm_mday - << ' ' - << setw(2) << tm_time->tm_hour << ':' - << setw(2) << tm_time->tm_min << ':' - << setw(2) << tm_time->tm_sec << '.' - << setw(6) << usecs - << ' ' - << setfill(' ') << setw(5) << GetTID() << setfill('0') - << ' ' - << file << ':' << line << "] "; - - stream << string(message, message_len); - return stream.str(); -} - -void AddLogSink(LogSink *destination) { - LogDestination::AddLogSink(destination); -} - -void RemoveLogSink(LogSink *destination) { - LogDestination::RemoveLogSink(destination); -} - -void SetLogFilenameExtension(const char* ext) { - LogDestination::SetLogFilenameExtension(ext); -} - -void SetStderrLogging(LogSeverity min_severity) { - LogDestination::SetStderrLogging(min_severity); -} - -void SetEmailLogging(LogSeverity min_severity, const char* addresses) { - LogDestination::SetEmailLogging(min_severity, addresses); -} - -void LogToStderr() { - LogDestination::LogToStderr(); -} - -namespace base { -namespace internal { - -bool GetExitOnDFatal() { - MutexLock l(&log_mutex); - return exit_on_dfatal; -} - -// Determines whether we exit the program for a LOG(DFATAL) message in -// debug mode. It does this by skipping the call to Fail/FailQuietly. -// This is intended for testing only. -// -// This can have some effects on LOG(FATAL) as well. Failure messages -// are always allocated (rather than sharing a buffer), the crash -// reason is not recorded, the "gwq" status message is not updated, -// and the stack trace is not recorded. The LOG(FATAL) *will* still -// exit the program. Since this function is used only in testing, -// these differences are acceptable. -void SetExitOnDFatal(bool value) { - MutexLock l(&log_mutex); - exit_on_dfatal = value; -} - -} // namespace internal -} // namespace base - -// use_logging controls whether the logging functions LOG/VLOG are used -// to log errors. It should be set to false when the caller holds the -// log_mutex. -static bool SendEmailInternal(const char*dest, const char *subject, - const char*body, bool use_logging) { - if (dest && *dest) { - if ( use_logging ) { - VLOG(1) << "Trying to send TITLE:" << subject - << " BODY:" << body << " to " << dest; - } else { - fprintf(stderr, "Trying to send TITLE: %s BODY: %s to %s\n", - subject, body, dest); - } - - string cmd = - FLAGS_logmailer + " -s\"" + subject + "\" " + dest; - FILE* pipe = popen(cmd.c_str(), "w"); - if (pipe != NULL) { - // Add the body if we have one - if (body) - fwrite(body, sizeof(char), strlen(body), pipe); - bool ok = pclose(pipe) != -1; - if ( !ok ) { - if ( use_logging ) { - char buf[100]; - posix_strerror_r(errno, buf, sizeof(buf)); - LOG(ERROR) << "Problems sending mail to " << dest << ": " << buf; - } else { - char buf[100]; - posix_strerror_r(errno, buf, sizeof(buf)); - fprintf(stderr, "Problems sending mail to %s: %s\n", dest, buf); - } - } - return ok; - } else { - if ( use_logging ) { - LOG(ERROR) << "Unable to send mail to " << dest; - } else { - fprintf(stderr, "Unable to send mail to %s\n", dest); - } - } - } - return false; -} - -bool SendEmail(const char*dest, const char *subject, const char*body){ - return SendEmailInternal(dest, subject, body, true); -} - -static void GetTempDirectories(vector* list) { - list->clear(); -#ifdef OS_WINDOWS - // On windows we'll try to find a directory in this order: - // C:/Documents & Settings/whomever/TEMP (or whatever GetTempPath() is) - // C:/TMP/ - // C:/TEMP/ - // C:/WINDOWS/ or C:/WINNT/ - // . - char tmp[MAX_PATH]; - if (GetTempPathA(MAX_PATH, tmp)) - list->push_back(tmp); - list->push_back("C:\\tmp\\"); - list->push_back("C:\\temp\\"); -#else - // Directories, in order of preference. If we find a dir that - // exists, we stop adding other less-preferred dirs - const char * candidates[] = { - // Non-null only during unittest/regtest - getenv("TEST_TMPDIR"), - - // Explicitly-supplied temp dirs - getenv("TMPDIR"), getenv("TMP"), - - // If all else fails - "/tmp", - }; - - for (int i = 0; i < ARRAYSIZE(candidates); i++) { - const char *d = candidates[i]; - if (!d) continue; // Empty env var - - // Make sure we don't surprise anyone who's expecting a '/' - string dstr = d; - if (dstr[dstr.size() - 1] != '/') { - dstr += "/"; - } - list->push_back(dstr); - - struct stat statbuf; - if (!stat(d, &statbuf) && S_ISDIR(statbuf.st_mode)) { - // We found a dir that exists - we're done. - return; - } - } - -#endif -} - -static vector* logging_directories_list; - -const vector& GetLoggingDirectories() { - // Not strictly thread-safe but we're called early in InitGoogle(). - if (logging_directories_list == NULL) { - logging_directories_list = new vector; - - if ( !FLAGS_log_dir.empty() ) { - // A dir was specified, we should use it - logging_directories_list->push_back(FLAGS_log_dir.c_str()); - } else { - GetTempDirectories(logging_directories_list); -#ifdef OS_WINDOWS - char tmp[MAX_PATH]; - if (GetWindowsDirectoryA(tmp, MAX_PATH)) - logging_directories_list->push_back(tmp); - logging_directories_list->push_back(".\\"); -#else - logging_directories_list->push_back("./"); -#endif - } - } - return *logging_directories_list; -} - -void TestOnly_ClearLoggingDirectoriesList() { - fprintf(stderr, "TestOnly_ClearLoggingDirectoriesList should only be " - "called from test code.\n"); - delete logging_directories_list; - logging_directories_list = NULL; -} - -void GetExistingTempDirectories(vector* list) { - GetTempDirectories(list); - vector::iterator i_dir = list->begin(); - while( i_dir != list->end() ) { - // zero arg to access means test for existence; no constant - // defined on windows - if ( access(i_dir->c_str(), 0) ) { - i_dir = list->erase(i_dir); - } else { - ++i_dir; - } - } -} - -void TruncateLogFile(const char *path, int64 limit, int64 keep) { -#ifdef HAVE_UNISTD_H - struct stat statbuf; - const int kCopyBlockSize = 8 << 10; - char copybuf[kCopyBlockSize]; - int64 read_offset, write_offset; - // Don't follow symlinks unless they're our own fd symlinks in /proc - int flags = O_RDWR; - const char *procfd_prefix = "/proc/self/fd/"; - if (strncmp(procfd_prefix, path, strlen(procfd_prefix))) flags |= O_NOFOLLOW; - - int fd = open(path, flags); - if (fd == -1) { - if (errno == EFBIG) { - // The log file in question has got too big for us to open. The - // real fix for this would be to compile logging.cc (or probably - // all of base/...) with -D_FILE_OFFSET_BITS=64 but that's - // rather scary. - // Instead just truncate the file to something we can manage - if (truncate(path, 0) == -1) { - PLOG(ERROR) << "Unable to truncate " << path; - } else { - LOG(ERROR) << "Truncated " << path << " due to EFBIG error"; - } - } else { - PLOG(ERROR) << "Unable to open " << path; - } - return; - } - - if (fstat(fd, &statbuf) == -1) { - PLOG(ERROR) << "Unable to fstat()"; - goto out_close_fd; - } - - // See if the path refers to a regular file bigger than the - // specified limit - if (!S_ISREG(statbuf.st_mode)) goto out_close_fd; - if (statbuf.st_size <= limit) goto out_close_fd; - if (statbuf.st_size <= keep) goto out_close_fd; - - // This log file is too large - we need to truncate it - LOG(INFO) << "Truncating " << path << " to " << keep << " bytes"; - - // Copy the last "keep" bytes of the file to the beginning of the file - read_offset = statbuf.st_size - keep; - write_offset = 0; - int bytesin, bytesout; - while ((bytesin = pread(fd, copybuf, sizeof(copybuf), read_offset)) > 0) { - bytesout = pwrite(fd, copybuf, bytesin, write_offset); - if (bytesout == -1) { - PLOG(ERROR) << "Unable to write to " << path; - break; - } else if (bytesout != bytesin) { - LOG(ERROR) << "Expected to write " << bytesin << ", wrote " << bytesout; - } - read_offset += bytesin; - write_offset += bytesout; - } - if (bytesin == -1) PLOG(ERROR) << "Unable to read from " << path; - - // Truncate the remainder of the file. If someone else writes to the - // end of the file after our last read() above, we lose their latest - // data. Too bad ... - if (ftruncate(fd, write_offset) == -1) { - PLOG(ERROR) << "Unable to truncate " << path; - } - - out_close_fd: - close(fd); -#else - LOG(ERROR) << "No log truncation support."; -#endif -} - -void TruncateStdoutStderr() { -#ifdef HAVE_UNISTD_H - int64 limit = MaxLogSize() << 20; - int64 keep = 1 << 20; - TruncateLogFile("/proc/self/fd/1", limit, keep); - TruncateLogFile("/proc/self/fd/2", limit, keep); -#else - LOG(ERROR) << "No log truncation support."; -#endif -} - - -// Helper functions for string comparisons. -#define DEFINE_CHECK_STROP_IMPL(name, func, expected) \ - string* Check##func##expected##Impl(const char* s1, const char* s2, \ - const char* names) { \ - bool equal = s1 == s2 || (s1 && s2 && !func(s1, s2)); \ - if (equal == expected) return NULL; \ - else { \ - strstream ss; \ - if (!s1) s1 = ""; \ - if (!s2) s2 = ""; \ - ss << #name " failed: " << names << " (" << s1 << " vs. " << s2 << ")"; \ - return new string(ss.str(), ss.pcount()); \ - } \ - } -DEFINE_CHECK_STROP_IMPL(CHECK_STREQ, strcmp, true) -DEFINE_CHECK_STROP_IMPL(CHECK_STRNE, strcmp, false) -DEFINE_CHECK_STROP_IMPL(CHECK_STRCASEEQ, strcasecmp, true) -DEFINE_CHECK_STROP_IMPL(CHECK_STRCASENE, strcasecmp, false) -#undef DEFINE_CHECK_STROP_IMPL - -int posix_strerror_r(int err, char *buf, size_t len) { - // Sanity check input parameters - if (buf == NULL || len <= 0) { - errno = EINVAL; - return -1; - } - - // Reset buf and errno, and try calling whatever version of strerror_r() - // is implemented by glibc - buf[0] = '\000'; - int old_errno = errno; - errno = 0; - char *rc = reinterpret_cast(strerror_r(err, buf, len)); - - // Both versions set errno on failure - if (errno) { - // Should already be there, but better safe than sorry - buf[0] = '\000'; - return -1; - } - errno = old_errno; - - // POSIX is vague about whether the string will be terminated, although - // is indirectly implies that typically ERANGE will be returned, instead - // of truncating the string. This is different from the GNU implementation. - // We play it safe by always terminating the string explicitly. - buf[len-1] = '\000'; - - // If the function succeeded, we can use its exit code to determine the - // semantics implemented by glibc - if (!rc) { - return 0; - } else { - // GNU semantics detected - if (rc == buf) { - return 0; - } else { - buf[0] = '\000'; -#if defined(OS_MACOSX) || defined(OS_FREEBSD) || defined(OS_OPENBSD) - if (reinterpret_cast(rc) < sys_nerr) { - // This means an error on MacOSX or FreeBSD. - return -1; - } -#endif - strncat(buf, rc, len-1); - return 0; - } - } -} - -LogMessageFatal::LogMessageFatal(const char* file, int line) : - LogMessage(file, line, FATAL) {} - -LogMessageFatal::LogMessageFatal(const char* file, int line, - const CheckOpString& result) : - LogMessage(file, line, result) {} - -LogMessageFatal::~LogMessageFatal() { - Flush(); - LogMessage::Fail(); -} - -void InitGoogleLogging(const char* argv0) { - glog_internal_namespace_::InitGoogleLoggingUtilities(argv0); -} - -void ShutdownGoogleLogging() { - glog_internal_namespace_::ShutdownGoogleLoggingUtilities(); - LogDestination::DeleteLogDestinations(); - delete logging_directories_list; - logging_directories_list = NULL; -} - -_END_GOOGLE_NAMESPACE_ diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/logging_unittest.cc b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/logging_unittest.cc deleted file mode 100644 index 5fc34d4a4e2f..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/logging_unittest.cc +++ /dev/null @@ -1,1210 +0,0 @@ -// Copyright (c) 2002, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: Ray Sidney - -#include "config_for_unittests.h" -#include "utilities.h" - -#include -#ifdef HAVE_GLOB_H -# include -#endif -#include -#ifdef HAVE_UNISTD_H -# include -#endif - -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "base/commandlineflags.h" -#include "glog/logging.h" -#include "glog/raw_logging.h" -#include "googletest.h" - -DECLARE_string(log_backtrace_at); // logging.cc - -#ifdef HAVE_LIB_GFLAGS -#include -#endif - -#ifdef HAVE_LIB_GMOCK -#include -#include "mock-log.h" -// Introduce several symbols from gmock. -using testing::_; -using testing::AnyNumber; -using testing::HasSubstr; -using testing::AllOf; -using testing::StrNe; -using testing::StrictMock; -using testing::InitGoogleMock; -using GOOGLE_NAMESPACE::glog_testing::ScopedMockLog; -#endif - -using namespace std; -using namespace GOOGLE_NAMESPACE; - -// Some non-advertised functions that we want to test or use. -_START_GOOGLE_NAMESPACE_ -namespace base { -namespace internal { -bool GetExitOnDFatal(); -void SetExitOnDFatal(bool value); -} // namespace internal -} // namespace base -_END_GOOGLE_NAMESPACE_ - -static void TestLogging(bool check_counts); -static void TestRawLogging(); -static void LogWithLevels(int v, int severity, bool err, bool alsoerr); -static void TestLoggingLevels(); -static void TestLogString(); -static void TestLogSink(); -static void TestLogToString(); -static void TestLogSinkWaitTillSent(); -static void TestCHECK(); -static void TestDCHECK(); -static void TestSTREQ(); -static void TestBasename(); -static void TestSymlink(); -static void TestExtension(); -static void TestWrapper(); -static void TestErrno(); -static void TestTruncate(); - -static int x = -1; -static void BM_Check1(int n) { - while (n-- > 0) { - CHECK_GE(n, x); - CHECK_GE(n, x); - CHECK_GE(n, x); - CHECK_GE(n, x); - CHECK_GE(n, x); - CHECK_GE(n, x); - CHECK_GE(n, x); - CHECK_GE(n, x); - } -} -BENCHMARK(BM_Check1); - -static void CheckFailure(int a, int b, const char* file, int line, const char* msg); -static void BM_Check3(int n) { - while (n-- > 0) { - if (n < x) CheckFailure(n, x, __FILE__, __LINE__, "n < x"); - if (n < x) CheckFailure(n, x, __FILE__, __LINE__, "n < x"); - if (n < x) CheckFailure(n, x, __FILE__, __LINE__, "n < x"); - if (n < x) CheckFailure(n, x, __FILE__, __LINE__, "n < x"); - if (n < x) CheckFailure(n, x, __FILE__, __LINE__, "n < x"); - if (n < x) CheckFailure(n, x, __FILE__, __LINE__, "n < x"); - if (n < x) CheckFailure(n, x, __FILE__, __LINE__, "n < x"); - if (n < x) CheckFailure(n, x, __FILE__, __LINE__, "n < x"); - } -} -BENCHMARK(BM_Check3); - -static void BM_Check2(int n) { - if (n == 17) { - x = 5; - } - while (n-- > 0) { - CHECK(n >= x); - CHECK(n >= x); - CHECK(n >= x); - CHECK(n >= x); - CHECK(n >= x); - CHECK(n >= x); - CHECK(n >= x); - CHECK(n >= x); - } -} -BENCHMARK(BM_Check2); - -static void CheckFailure(int a, int b, const char* file, int line, const char* msg) { -} - -static void BM_logspeed(int n) { - while (n-- > 0) { - LOG(INFO) << "test message"; - } -} -BENCHMARK(BM_logspeed); - -static void BM_vlog(int n) { - while (n-- > 0) { - VLOG(1) << "test message"; - } -} -BENCHMARK(BM_vlog); - -int main(int argc, char **argv) { -#ifdef HAVE_LIB_GFLAGS - ParseCommandLineFlags(&argc, &argv, true); -#endif - - // Test some basics before InitGoogleLogging: - CaptureTestStderr(); - LogWithLevels(FLAGS_v, FLAGS_stderrthreshold, - FLAGS_logtostderr, FLAGS_alsologtostderr); - LogWithLevels(0, 0, 0, 0); // simulate "before global c-tors" - const string early_stderr = GetCapturedTestStderr(); - - InitGoogleLogging(argv[0]); - - RunSpecifiedBenchmarks(); - - FLAGS_logtostderr = true; - - InitGoogleTest(&argc, argv); -#ifdef HAVE_LIB_GMOCK - InitGoogleMock(&argc, argv); -#endif - - // so that death tests run before we use threads - CHECK_EQ(RUN_ALL_TESTS(), 0); - - CaptureTestStderr(); - - // re-emit early_stderr - LogMessage("dummy", LogMessage::kNoLogPrefix, INFO).stream() << early_stderr; - - TestLogging(true); - TestRawLogging(); - TestLoggingLevels(); - TestLogString(); - TestLogSink(); - TestLogToString(); - TestLogSinkWaitTillSent(); - TestCHECK(); - TestDCHECK(); - TestSTREQ(); - - // TODO: The golden test portion of this test is very flakey. - EXPECT_TRUE( - MungeAndDiffTestStderr(FLAGS_test_srcdir + "/src/logging_unittest.err")); - - FLAGS_logtostderr = false; - - TestBasename(); - TestSymlink(); - TestExtension(); - TestWrapper(); - TestErrno(); - TestTruncate(); - - ShutdownGoogleLogging(); - - fprintf(stdout, "PASS\n"); - return 0; -} - -void TestLogging(bool check_counts) { - int64 base_num_infos = LogMessage::num_messages(INFO); - int64 base_num_warning = LogMessage::num_messages(WARNING); - int64 base_num_errors = LogMessage::num_messages(ERROR); - - LOG(INFO) << string("foo ") << "bar " << 10 << ' ' << 3.4; - for ( int i = 0; i < 10; ++i ) { - int old_errno = errno; - errno = i; - PLOG_EVERY_N(ERROR, 2) << "Plog every 2, iteration " << COUNTER; - errno = old_errno; - - LOG_EVERY_N(ERROR, 3) << "Log every 3, iteration " << COUNTER << endl; - LOG_EVERY_N(ERROR, 4) << "Log every 4, iteration " << COUNTER << endl; - - LOG_IF_EVERY_N(WARNING, true, 5) << "Log if every 5, iteration " << COUNTER; - LOG_IF_EVERY_N(WARNING, false, 3) - << "Log if every 3, iteration " << COUNTER; - LOG_IF_EVERY_N(INFO, true, 1) << "Log if every 1, iteration " << COUNTER; - LOG_IF_EVERY_N(ERROR, (i < 3), 2) - << "Log if less than 3 every 2, iteration " << COUNTER; - } - LOG_IF(WARNING, true) << "log_if this"; - LOG_IF(WARNING, false) << "don't log_if this"; - - char s[] = "array"; - LOG(INFO) << s; - const char const_s[] = "const array"; - LOG(INFO) << const_s; - int j = 1000; - LOG(ERROR) << string("foo") << ' '<< j << ' ' << setw(10) << j << " " - << setw(1) << hex << j; - - LogMessage("foo", LogMessage::kNoLogPrefix, INFO).stream() << "no prefix"; - - if (check_counts) { - CHECK_EQ(base_num_infos + 14, LogMessage::num_messages(INFO)); - CHECK_EQ(base_num_warning + 3, LogMessage::num_messages(WARNING)); - CHECK_EQ(base_num_errors + 15, LogMessage::num_messages(ERROR)); - } -} - -static void NoAllocNewHook() { - CHECK(false) << "unexpected new"; -} - -struct NewHook { - NewHook() { - g_new_hook = &NoAllocNewHook; - } - ~NewHook() { - g_new_hook = NULL; - } -}; - -TEST(DeathNoAllocNewHook, logging) { - // tests that NewHook used below works - NewHook new_hook; - ASSERT_DEATH({ - new int; - }, "unexpected new"); -} - -void TestRawLogging() { - string* foo = new string("foo "); - string huge_str(50000, 'a'); - - FlagSaver saver; - - // Check that RAW loggging does not use mallocs. - NewHook new_hook; - - RAW_LOG(INFO, "%s%s%d%c%f", foo->c_str(), "bar ", 10, ' ', 3.4); - char s[] = "array"; - RAW_LOG(WARNING, "%s", s); - const char const_s[] = "const array"; - RAW_LOG(INFO, "%s", const_s); - void* p = reinterpret_cast(0x12345678); - RAW_LOG(INFO, "ptr %p", p); - p = NULL; - RAW_LOG(INFO, "ptr %p", p); - int j = 1000; - RAW_LOG(ERROR, "%s%d%c%010d%s%1x", foo->c_str(), j, ' ', j, " ", j); - RAW_VLOG(0, "foo %d", j); - -#ifdef NDEBUG - RAW_LOG(INFO, "foo %d", j); // so that have same stderr to compare -#else - RAW_DLOG(INFO, "foo %d", j); // test RAW_DLOG in debug mode -#endif - - // test how long messages are chopped: - RAW_LOG(WARNING, "Huge string: %s", huge_str.c_str()); - RAW_VLOG(0, "Huge string: %s", huge_str.c_str()); - - FLAGS_v = 0; - RAW_LOG(INFO, "log"); - RAW_VLOG(0, "vlog 0 on"); - RAW_VLOG(1, "vlog 1 off"); - RAW_VLOG(2, "vlog 2 off"); - RAW_VLOG(3, "vlog 3 off"); - FLAGS_v = 2; - RAW_LOG(INFO, "log"); - RAW_VLOG(1, "vlog 1 on"); - RAW_VLOG(2, "vlog 2 on"); - RAW_VLOG(3, "vlog 3 off"); - -#ifdef NDEBUG - RAW_DCHECK(1 == 2, " RAW_DCHECK's shouldn't be compiled in normal mode"); -#endif - - RAW_CHECK(1 == 1, "should be ok"); - RAW_DCHECK(true, "should be ok"); - - delete foo; -} - -void LogWithLevels(int v, int severity, bool err, bool alsoerr) { - RAW_LOG(INFO, - "Test: v=%d stderrthreshold=%d logtostderr=%d alsologtostderr=%d", - v, severity, err, alsoerr); - - FlagSaver saver; - - FLAGS_v = v; - FLAGS_stderrthreshold = severity; - FLAGS_logtostderr = err; - FLAGS_alsologtostderr = alsoerr; - - RAW_VLOG(-1, "vlog -1"); - RAW_VLOG(0, "vlog 0"); - RAW_VLOG(1, "vlog 1"); - RAW_LOG(INFO, "log info"); - RAW_LOG(WARNING, "log warning"); - RAW_LOG(ERROR, "log error"); - - VLOG(-1) << "vlog -1"; - VLOG(0) << "vlog 0"; - VLOG(1) << "vlog 1"; - LOG(INFO) << "log info"; - LOG(WARNING) << "log warning"; - LOG(ERROR) << "log error"; - - VLOG_IF(-1, true) << "vlog_if -1"; - VLOG_IF(-1, false) << "don't vlog_if -1"; - VLOG_IF(0, true) << "vlog_if 0"; - VLOG_IF(0, false) << "don't vlog_if 0"; - VLOG_IF(1, true) << "vlog_if 1"; - VLOG_IF(1, false) << "don't vlog_if 1"; - LOG_IF(INFO, true) << "log_if info"; - LOG_IF(INFO, false) << "don't log_if info"; - LOG_IF(WARNING, true) << "log_if warning"; - LOG_IF(WARNING, false) << "don't log_if warning"; - LOG_IF(ERROR, true) << "log_if error"; - LOG_IF(ERROR, false) << "don't log_if error"; - - int c; - c = 1; VLOG_IF(100, c -= 2) << "vlog_if 100 expr"; EXPECT_EQ(c, -1); - c = 1; VLOG_IF(0, c -= 2) << "vlog_if 0 expr"; EXPECT_EQ(c, -1); - c = 1; LOG_IF(INFO, c -= 2) << "log_if info expr"; EXPECT_EQ(c, -1); - c = 1; LOG_IF(ERROR, c -= 2) << "log_if error expr"; EXPECT_EQ(c, -1); - c = 2; VLOG_IF(0, c -= 2) << "don't vlog_if 0 expr"; EXPECT_EQ(c, 0); - c = 2; LOG_IF(ERROR, c -= 2) << "don't log_if error expr"; EXPECT_EQ(c, 0); - - c = 3; LOG_IF_EVERY_N(INFO, c -= 4, 1) << "log_if info every 1 expr"; - EXPECT_EQ(c, -1); - c = 3; LOG_IF_EVERY_N(ERROR, c -= 4, 1) << "log_if error every 1 expr"; - EXPECT_EQ(c, -1); - c = 4; LOG_IF_EVERY_N(ERROR, c -= 4, 3) << "don't log_if info every 3 expr"; - EXPECT_EQ(c, 0); - c = 4; LOG_IF_EVERY_N(ERROR, c -= 4, 3) << "don't log_if error every 3 expr"; - EXPECT_EQ(c, 0); - c = 5; VLOG_IF_EVERY_N(0, c -= 4, 1) << "vlog_if 0 every 1 expr"; - EXPECT_EQ(c, 1); - c = 5; VLOG_IF_EVERY_N(100, c -= 4, 3) << "vlog_if 100 every 3 expr"; - EXPECT_EQ(c, 1); - c = 6; VLOG_IF_EVERY_N(0, c -= 6, 1) << "don't vlog_if 0 every 1 expr"; - EXPECT_EQ(c, 0); - c = 6; VLOG_IF_EVERY_N(100, c -= 6, 3) << "don't vlog_if 100 every 1 expr"; - EXPECT_EQ(c, 0); -} - -void TestLoggingLevels() { - LogWithLevels(0, INFO, false, false); - LogWithLevels(1, INFO, false, false); - LogWithLevels(-1, INFO, false, false); - LogWithLevels(0, WARNING, false, false); - LogWithLevels(0, ERROR, false, false); - LogWithLevels(0, FATAL, false, false); - LogWithLevels(0, FATAL, true, false); - LogWithLevels(0, FATAL, false, true); - LogWithLevels(1, WARNING, false, false); - LogWithLevels(1, FATAL, false, true); -} - -TEST(DeathRawCHECK, logging) { - ASSERT_DEATH(RAW_CHECK(false, "failure 1"), - "RAW: Check false failed: failure 1"); - ASSERT_DEBUG_DEATH(RAW_DCHECK(1 == 2, "failure 2"), - "RAW: Check 1 == 2 failed: failure 2"); -} - -void TestLogString() { - vector errors; - vector *no_errors = NULL; - - LOG_STRING(INFO, &errors) << "LOG_STRING: " << "collected info"; - LOG_STRING(WARNING, &errors) << "LOG_STRING: " << "collected warning"; - LOG_STRING(ERROR, &errors) << "LOG_STRING: " << "collected error"; - - LOG_STRING(INFO, no_errors) << "LOG_STRING: " << "reported info"; - LOG_STRING(WARNING, no_errors) << "LOG_STRING: " << "reported warning"; - LOG_STRING(ERROR, NULL) << "LOG_STRING: " << "reported error"; - - for (size_t i = 0; i < errors.size(); ++i) { - LOG(INFO) << "Captured by LOG_STRING: " << errors[i]; - } -} - -void TestLogToString() { - string error; - string* no_error = NULL; - - LOG_TO_STRING(INFO, &error) << "LOG_TO_STRING: " << "collected info"; - LOG(INFO) << "Captured by LOG_TO_STRING: " << error; - LOG_TO_STRING(WARNING, &error) << "LOG_TO_STRING: " << "collected warning"; - LOG(INFO) << "Captured by LOG_TO_STRING: " << error; - LOG_TO_STRING(ERROR, &error) << "LOG_TO_STRING: " << "collected error"; - LOG(INFO) << "Captured by LOG_TO_STRING: " << error; - - LOG_TO_STRING(INFO, no_error) << "LOG_TO_STRING: " << "reported info"; - LOG_TO_STRING(WARNING, no_error) << "LOG_TO_STRING: " << "reported warning"; - LOG_TO_STRING(ERROR, NULL) << "LOG_TO_STRING: " << "reported error"; -} - -class TestLogSinkImpl : public LogSink { - public: - vector errors; - virtual void send(LogSeverity severity, const char* full_filename, - const char* base_filename, int line, - const struct tm* tm_time, - const char* message, size_t message_len) { - errors.push_back( - ToString(severity, base_filename, line, tm_time, message, message_len)); - } -}; - -void TestLogSink() { - TestLogSinkImpl sink; - LogSink *no_sink = NULL; - - LOG_TO_SINK(&sink, INFO) << "LOG_TO_SINK: " << "collected info"; - LOG_TO_SINK(&sink, WARNING) << "LOG_TO_SINK: " << "collected warning"; - LOG_TO_SINK(&sink, ERROR) << "LOG_TO_SINK: " << "collected error"; - - LOG_TO_SINK(no_sink, INFO) << "LOG_TO_SINK: " << "reported info"; - LOG_TO_SINK(no_sink, WARNING) << "LOG_TO_SINK: " << "reported warning"; - LOG_TO_SINK(NULL, ERROR) << "LOG_TO_SINK: " << "reported error"; - - LOG_TO_SINK_BUT_NOT_TO_LOGFILE(&sink, INFO) - << "LOG_TO_SINK_BUT_NOT_TO_LOGFILE: " << "collected info"; - LOG_TO_SINK_BUT_NOT_TO_LOGFILE(&sink, WARNING) - << "LOG_TO_SINK_BUT_NOT_TO_LOGFILE: " << "collected warning"; - LOG_TO_SINK_BUT_NOT_TO_LOGFILE(&sink, ERROR) - << "LOG_TO_SINK_BUT_NOT_TO_LOGFILE: " << "collected error"; - - LOG_TO_SINK_BUT_NOT_TO_LOGFILE(no_sink, INFO) - << "LOG_TO_SINK_BUT_NOT_TO_LOGFILE: " << "thrashed info"; - LOG_TO_SINK_BUT_NOT_TO_LOGFILE(no_sink, WARNING) - << "LOG_TO_SINK_BUT_NOT_TO_LOGFILE: " << "thrashed warning"; - LOG_TO_SINK_BUT_NOT_TO_LOGFILE(NULL, ERROR) - << "LOG_TO_SINK_BUT_NOT_TO_LOGFILE: " << "thrashed error"; - - LOG(INFO) << "Captured by LOG_TO_SINK:"; - for (size_t i = 0; i < sink.errors.size(); ++i) { - LogMessage("foo", LogMessage::kNoLogPrefix, INFO).stream() - << sink.errors[i]; - } -} - -// For testing using CHECK*() on anonymous enums. -enum { - CASE_A, - CASE_B -}; - -void TestCHECK() { - // Tests using CHECK*() on int values. - CHECK(1 == 1); - CHECK_EQ(1, 1); - CHECK_NE(1, 2); - CHECK_GE(1, 1); - CHECK_GE(2, 1); - CHECK_LE(1, 1); - CHECK_LE(1, 2); - CHECK_GT(2, 1); - CHECK_LT(1, 2); - - // Tests using CHECK*() on anonymous enums. - // Apple's GCC doesn't like this. -#if !defined(OS_MACOSX) - CHECK_EQ(CASE_A, CASE_A); - CHECK_NE(CASE_A, CASE_B); - CHECK_GE(CASE_A, CASE_A); - CHECK_GE(CASE_B, CASE_A); - CHECK_LE(CASE_A, CASE_A); - CHECK_LE(CASE_A, CASE_B); - CHECK_GT(CASE_B, CASE_A); - CHECK_LT(CASE_A, CASE_B); -#endif -} - -void TestDCHECK() { -#ifdef NDEBUG - DCHECK( 1 == 2 ) << " DCHECK's shouldn't be compiled in normal mode"; -#endif - DCHECK( 1 == 1 ); - DCHECK_EQ(1, 1); - DCHECK_NE(1, 2); - DCHECK_GE(1, 1); - DCHECK_GE(2, 1); - DCHECK_LE(1, 1); - DCHECK_LE(1, 2); - DCHECK_GT(2, 1); - DCHECK_LT(1, 2); - - auto_ptr sptr(new int64); - int64* ptr = DCHECK_NOTNULL(sptr.get()); - CHECK_EQ(ptr, sptr.get()); -} - -void TestSTREQ() { - CHECK_STREQ("this", "this"); - CHECK_STREQ(NULL, NULL); - CHECK_STRCASEEQ("this", "tHiS"); - CHECK_STRCASEEQ(NULL, NULL); - CHECK_STRNE("this", "tHiS"); - CHECK_STRNE("this", NULL); - CHECK_STRCASENE("this", "that"); - CHECK_STRCASENE(NULL, "that"); - CHECK_STREQ((string("a")+"b").c_str(), "ab"); - CHECK_STREQ(string("test").c_str(), - (string("te") + string("st")).c_str()); -} - -TEST(DeathSTREQ, logging) { - ASSERT_DEATH(CHECK_STREQ(NULL, "this"), ""); - ASSERT_DEATH(CHECK_STREQ("this", "siht"), ""); - ASSERT_DEATH(CHECK_STRCASEEQ(NULL, "siht"), ""); - ASSERT_DEATH(CHECK_STRCASEEQ("this", "siht"), ""); - ASSERT_DEATH(CHECK_STRNE(NULL, NULL), ""); - ASSERT_DEATH(CHECK_STRNE("this", "this"), ""); - ASSERT_DEATH(CHECK_STREQ((string("a")+"b").c_str(), "abc"), ""); -} - -TEST(CheckNOTNULL, Simple) { - int64 t; - void *ptr = static_cast(&t); - void *ref = CHECK_NOTNULL(ptr); - EXPECT_EQ(ptr, ref); - CHECK_NOTNULL(reinterpret_cast(ptr)); - CHECK_NOTNULL(reinterpret_cast(ptr)); - CHECK_NOTNULL(reinterpret_cast(ptr)); - CHECK_NOTNULL(reinterpret_cast(ptr)); -} - -TEST(DeathCheckNN, Simple) { - ASSERT_DEATH(CHECK_NOTNULL(static_cast(NULL)), ""); -} - -// Get list of file names that match pattern -static void GetFiles(const string& pattern, vector* files) { - files->clear(); -#if defined(HAVE_GLOB_H) - glob_t g; - const int r = glob(pattern.c_str(), 0, NULL, &g); - CHECK((r == 0) || (r == GLOB_NOMATCH)) << ": error matching " << pattern; - for (int i = 0; i < g.gl_pathc; i++) { - files->push_back(string(g.gl_pathv[i])); - } - globfree(&g); -#elif defined(OS_WINDOWS) - WIN32_FIND_DATAA data; - HANDLE handle = FindFirstFileA(pattern.c_str(), &data); - size_t index = pattern.rfind('\\'); - if (index == string::npos) { - LOG(FATAL) << "No directory separator."; - } - const string dirname = pattern.substr(0, index + 1); - if (FAILED(handle)) { - // Finding no files is OK. - return; - } - do { - files->push_back(dirname + data.cFileName); - } while (FindNextFileA(handle, &data)); - LOG_SYSRESULT(FindClose(handle)); -#else -# error There is no way to do glob. -#endif -} - -// Delete files patching pattern -static void DeleteFiles(const string& pattern) { - vector files; - GetFiles(pattern, &files); - for (size_t i = 0; i < files.size(); i++) { - CHECK(unlink(files[i].c_str()) == 0) << ": " << strerror(errno); - } -} - -static void CheckFile(const string& name, const string& expected_string) { - vector files; - GetFiles(name + "*", &files); - CHECK_EQ(files.size(), 1); - - FILE* file = fopen(files[0].c_str(), "r"); - CHECK(file != NULL) << ": could not open " << files[0]; - char buf[1000]; - while (fgets(buf, sizeof(buf), file) != NULL) { - if (strstr(buf, expected_string.c_str()) != NULL) { - fclose(file); - return; - } - } - fclose(file); - LOG(FATAL) << "Did not find " << expected_string << " in " << files[0]; -} - -static void TestBasename() { - fprintf(stderr, "==== Test setting log file basename\n"); - const string dest = FLAGS_test_tmpdir + "/logging_test_basename"; - DeleteFiles(dest + "*"); - - SetLogDestination(INFO, dest.c_str()); - LOG(INFO) << "message to new base"; - FlushLogFiles(INFO); - - CheckFile(dest, "message to new base"); - - // Release file handle for the destination file to unlock the file in Windows. - LogToStderr(); - DeleteFiles(dest + "*"); -} - -static void TestSymlink() { -#ifndef OS_WINDOWS - fprintf(stderr, "==== Test setting log file symlink\n"); - string dest = FLAGS_test_tmpdir + "/logging_test_symlink"; - string sym = FLAGS_test_tmpdir + "/symlinkbase"; - DeleteFiles(dest + "*"); - DeleteFiles(sym + "*"); - - SetLogSymlink(INFO, "symlinkbase"); - SetLogDestination(INFO, dest.c_str()); - LOG(INFO) << "message to new symlink"; - FlushLogFiles(INFO); - CheckFile(sym, "message to new symlink"); - - DeleteFiles(dest + "*"); - DeleteFiles(sym + "*"); -#endif -} - -static void TestExtension() { - fprintf(stderr, "==== Test setting log file extension\n"); - string dest = FLAGS_test_tmpdir + "/logging_test_extension"; - DeleteFiles(dest + "*"); - - SetLogDestination(INFO, dest.c_str()); - SetLogFilenameExtension("specialextension"); - LOG(INFO) << "message to new extension"; - FlushLogFiles(INFO); - CheckFile(dest, "message to new extension"); - - // Check that file name ends with extension - vector filenames; - GetFiles(dest + "*", &filenames); - CHECK_EQ(filenames.size(), 1); - CHECK(strstr(filenames[0].c_str(), "specialextension") != NULL); - - // Release file handle for the destination file to unlock the file in Windows. - LogToStderr(); - DeleteFiles(dest + "*"); -} - -struct MyLogger : public base::Logger { - string data; - - virtual void Write(bool should_flush, - time_t timestamp, - const char* message, - int length) { - data.append(message, length); - } - - virtual void Flush() { } - - virtual uint32 LogSize() { return data.length(); } -}; - -static void TestWrapper() { - fprintf(stderr, "==== Test log wrapper\n"); - - MyLogger my_logger; - base::Logger* old_logger = base::GetLogger(INFO); - base::SetLogger(INFO, &my_logger); - LOG(INFO) << "Send to wrapped logger"; - FlushLogFiles(INFO); - base::SetLogger(INFO, old_logger); - - CHECK(strstr(my_logger.data.c_str(), "Send to wrapped logger") != NULL); -} - -static void TestErrno() { - fprintf(stderr, "==== Test errno preservation\n"); - - errno = ENOENT; - TestLogging(false); - CHECK_EQ(errno, ENOENT); -} - -static void TestOneTruncate(const char *path, int64 limit, int64 keep, - int64 dsize, int64 ksize, int64 expect) { - int fd; - CHECK_ERR(fd = open(path, O_RDWR | O_CREAT | O_TRUNC, 0600)); - - const char *discardstr = "DISCARDME!", *keepstr = "KEEPME!"; - - // Fill the file with the requested data; first discard data, then kept data - int64 written = 0; - while (written < dsize) { - int bytes = min(dsize - written, strlen(discardstr)); - CHECK_ERR(write(fd, discardstr, bytes)); - written += bytes; - } - written = 0; - while (written < ksize) { - int bytes = min(ksize - written, strlen(keepstr)); - CHECK_ERR(write(fd, keepstr, bytes)); - written += bytes; - } - - TruncateLogFile(path, limit, keep); - - // File should now be shorter - struct stat statbuf; - CHECK_ERR(fstat(fd, &statbuf)); - CHECK_EQ(statbuf.st_size, expect); - CHECK_ERR(lseek(fd, 0, SEEK_SET)); - - // File should contain the suffix of the original file - int buf_size = statbuf.st_size + 1; - char* buf = new char[buf_size]; - memset(buf, 0, sizeof(buf)); - CHECK_ERR(read(fd, buf, buf_size)); - - const char *p = buf; - int64 checked = 0; - while (checked < expect) { - int bytes = min(expect - checked, strlen(keepstr)); - CHECK(!memcmp(p, keepstr, bytes)); - checked += bytes; - } - close(fd); - delete[] buf; -} - -static void TestTruncate() { -#ifdef HAVE_UNISTD_H - fprintf(stderr, "==== Test log truncation\n"); - string path = FLAGS_test_tmpdir + "/truncatefile"; - - // Test on a small file - TestOneTruncate(path.c_str(), 10, 10, 10, 10, 10); - - // And a big file (multiple blocks to copy) - TestOneTruncate(path.c_str(), 2<<20, 4<<10, 3<<20, 4<<10, 4<<10); - - // Check edge-case limits - TestOneTruncate(path.c_str(), 10, 20, 0, 20, 20); - TestOneTruncate(path.c_str(), 10, 0, 0, 0, 0); - TestOneTruncate(path.c_str(), 10, 50, 0, 10, 10); - TestOneTruncate(path.c_str(), 50, 100, 0, 30, 30); - - // MacOSX 10.4 doesn't fail in this case. - // Windows doesn't have symlink. - // Let's just ignore this test for these cases. -#if !defined(OS_MACOSX) && !defined(OS_WINDOWS) - // Through a symlink should fail to truncate - string linkname = path + ".link"; - unlink(linkname.c_str()); - CHECK_ERR(symlink(path.c_str(), linkname.c_str())); - TestOneTruncate(linkname.c_str(), 10, 10, 0, 30, 30); -#endif - - // The /proc/self path makes sense only for linux. -#if defined(OS_LINUX) - // Through an open fd symlink should work - int fd; - CHECK_ERR(fd = open(path.c_str(), O_APPEND | O_WRONLY)); - char fdpath[64]; - snprintf(fdpath, sizeof(fdpath), "/proc/self/fd/%d", fd); - TestOneTruncate(fdpath, 10, 10, 10, 10, 10); -#endif - -#endif -} - -_START_GOOGLE_NAMESPACE_ -namespace glog_internal_namespace_ { -extern // in logging.cc -bool SafeFNMatch_(const char* pattern, size_t patt_len, - const char* str, size_t str_len); -} // namespace glog_internal_namespace_ -using glog_internal_namespace_::SafeFNMatch_; -_END_GOOGLE_NAMESPACE_ - -static bool WrapSafeFNMatch(string pattern, string str) { - pattern += "abc"; - str += "defgh"; - return SafeFNMatch_(pattern.data(), pattern.size() - 3, - str.data(), str.size() - 5); -} - -TEST(SafeFNMatch, logging) { - CHECK(WrapSafeFNMatch("foo", "foo")); - CHECK(!WrapSafeFNMatch("foo", "bar")); - CHECK(!WrapSafeFNMatch("foo", "fo")); - CHECK(!WrapSafeFNMatch("foo", "foo2")); - CHECK(WrapSafeFNMatch("bar/foo.ext", "bar/foo.ext")); - CHECK(WrapSafeFNMatch("*ba*r/fo*o.ext*", "bar/foo.ext")); - CHECK(!WrapSafeFNMatch("bar/foo.ext", "bar/baz.ext")); - CHECK(!WrapSafeFNMatch("bar/foo.ext", "bar/foo")); - CHECK(!WrapSafeFNMatch("bar/foo.ext", "bar/foo.ext.zip")); - CHECK(WrapSafeFNMatch("ba?/*.ext", "bar/foo.ext")); - CHECK(WrapSafeFNMatch("ba?/*.ext", "baZ/FOO.ext")); - CHECK(!WrapSafeFNMatch("ba?/*.ext", "barr/foo.ext")); - CHECK(!WrapSafeFNMatch("ba?/*.ext", "bar/foo.ext2")); - CHECK(WrapSafeFNMatch("ba?/*", "bar/foo.ext2")); - CHECK(WrapSafeFNMatch("ba?/*", "bar/")); - CHECK(!WrapSafeFNMatch("ba?/?", "bar/")); - CHECK(!WrapSafeFNMatch("ba?/*", "bar")); -} - -// TestWaitingLogSink will save messages here -// No lock: Accessed only by TestLogSinkWriter thread -// and after its demise by its creator. -static vector global_messages; - -// helper for TestWaitingLogSink below. -// Thread that does the logic of TestWaitingLogSink -// It's free to use LOG() itself. -class TestLogSinkWriter : public Thread { - public: - - TestLogSinkWriter() : should_exit_(false) { - SetJoinable(true); - Start(); - } - - // Just buffer it (can't use LOG() here). - void Buffer(const string& message) { - mutex_.Lock(); - RAW_LOG(INFO, "Buffering"); - messages_.push(message); - mutex_.Unlock(); - RAW_LOG(INFO, "Buffered"); - } - - // Wait for the buffer to clear (can't use LOG() here). - void Wait() { - RAW_LOG(INFO, "Waiting"); - mutex_.Lock(); - while (!NoWork()) { - mutex_.Unlock(); - SleepForMilliseconds(1); - mutex_.Lock(); - } - RAW_LOG(INFO, "Waited"); - mutex_.Unlock(); - } - - // Trigger thread exit. - void Stop() { - MutexLock l(&mutex_); - should_exit_ = true; - } - - private: - - // helpers --------------- - - // For creating a "Condition". - bool NoWork() { return messages_.empty(); } - bool HaveWork() { return !messages_.empty() || should_exit_; } - - // Thread body; CAN use LOG() here! - virtual void Run() { - while (1) { - mutex_.Lock(); - while (!HaveWork()) { - mutex_.Unlock(); - SleepForMilliseconds(1); - mutex_.Lock(); - } - if (should_exit_ && messages_.empty()) { - mutex_.Unlock(); - break; - } - // Give the main thread time to log its message, - // so that we get a reliable log capture to compare to golden file. - // Same for the other sleep below. - SleepForMilliseconds(20); - RAW_LOG(INFO, "Sink got a messages"); // only RAW_LOG under mutex_ here - string message = messages_.front(); - messages_.pop(); - // Normally this would be some more real/involved logging logic - // where LOG() usage can't be eliminated, - // e.g. pushing the message over with an RPC: - int messages_left = messages_.size(); - mutex_.Unlock(); - SleepForMilliseconds(20); - // May not use LOG while holding mutex_, because Buffer() - // acquires mutex_, and Buffer is called from LOG(), - // which has its own internal mutex: - // LOG()->LogToSinks()->TestWaitingLogSink::send()->Buffer() - LOG(INFO) << "Sink is sending out a message: " << message; - LOG(INFO) << "Have " << messages_left << " left"; - global_messages.push_back(message); - } - } - - // data --------------- - - Mutex mutex_; - bool should_exit_; - queue messages_; // messages to be logged -}; - -// A log sink that exercises WaitTillSent: -// it pushes data to a buffer and wakes up another thread to do the logging -// (that other thread can than use LOG() itself), -class TestWaitingLogSink : public LogSink { - public: - - TestWaitingLogSink() { - tid_ = pthread_self(); // for thread-specific behavior - AddLogSink(this); - } - ~TestWaitingLogSink() { - RemoveLogSink(this); - writer_.Stop(); - writer_.Join(); - } - - // (re)define LogSink interface - - virtual void send(LogSeverity severity, const char* full_filename, - const char* base_filename, int line, - const struct tm* tm_time, - const char* message, size_t message_len) { - // Push it to Writer thread if we are the original logging thread. - // Note: Something like ThreadLocalLogSink is a better choice - // to do thread-specific LogSink logic for real. - if (pthread_equal(tid_, pthread_self())) { - writer_.Buffer(ToString(severity, base_filename, line, - tm_time, message, message_len)); - } - } - virtual void WaitTillSent() { - // Wait for Writer thread if we are the original logging thread. - if (pthread_equal(tid_, pthread_self())) writer_.Wait(); - } - - private: - - pthread_t tid_; - TestLogSinkWriter writer_; -}; - -// Check that LogSink::WaitTillSent can be used in the advertised way. -// We also do golden-stderr comparison. -static void TestLogSinkWaitTillSent() { - { TestWaitingLogSink sink; - // Sleeps give the sink threads time to do all their work, - // so that we get a reliable log capture to compare to the golden file. - LOG(INFO) << "Message 1"; - SleepForMilliseconds(60); - LOG(ERROR) << "Message 2"; - SleepForMilliseconds(60); - LOG(WARNING) << "Message 3"; - SleepForMilliseconds(60); - } - for (size_t i = 0; i < global_messages.size(); ++i) { - LOG(INFO) << "Sink capture: " << global_messages[i]; - } - CHECK_EQ(global_messages.size(), 3); -} - -TEST(Strerror, logging) { - int errcode = EINTR; - char *msg = strdup(strerror(errcode)); - int buf_size = strlen(msg) + 1; - char *buf = new char[buf_size]; - CHECK_EQ(posix_strerror_r(errcode, NULL, 0), -1); - buf[0] = 'A'; - CHECK_EQ(posix_strerror_r(errcode, buf, 0), -1); - CHECK_EQ(buf[0], 'A'); - CHECK_EQ(posix_strerror_r(errcode, NULL, buf_size), -1); -#if defined(OS_MACOSX) || defined(OS_FREEBSD) || defined(OS_OPENBSD) - // MacOSX or FreeBSD considers this case is an error since there is - // no enough space. - CHECK_EQ(posix_strerror_r(errcode, buf, 1), -1); -#else - CHECK_EQ(posix_strerror_r(errcode, buf, 1), 0); -#endif - CHECK_STREQ(buf, ""); - CHECK_EQ(posix_strerror_r(errcode, buf, buf_size), 0); - CHECK_STREQ(buf, msg); - free(msg); - delete[] buf; -} - -// Simple routines to look at the sizes of generated code for LOG(FATAL) and -// CHECK(..) via objdump -void MyFatal() { - LOG(FATAL) << "Failed"; -} -void MyCheck(bool a, bool b) { - CHECK_EQ(a, b); -} - -#ifdef HAVE_LIB_GMOCK - -TEST(DVLog, Basic) { - ScopedMockLog log; - -#if NDEBUG - // We are expecting that nothing is logged. - EXPECT_CALL(log, Log(_, _, _)).Times(0); -#else - EXPECT_CALL(log, Log(INFO, __FILE__, "debug log")); -#endif - - FLAGS_v = 1; - DVLOG(1) << "debug log"; -} - -TEST(DVLog, V0) { - ScopedMockLog log; - - // We are expecting that nothing is logged. - EXPECT_CALL(log, Log(_, _, _)).Times(0); - - FLAGS_v = 0; - DVLOG(1) << "debug log"; -} - -TEST(LogAtLevel, Basic) { - ScopedMockLog log; - - // The function version outputs "logging.h" as a file name. - EXPECT_CALL(log, Log(WARNING, StrNe(__FILE__), "function version")); - EXPECT_CALL(log, Log(INFO, __FILE__, "macro version")); - - int severity = WARNING; - LogAtLevel(severity, "function version"); - - severity = INFO; - // We can use the macro version as a C++ stream. - LOG_AT_LEVEL(severity) << "macro" << ' ' << "version"; -} - -TEST(TestExitOnDFatal, ToBeOrNotToBe) { - // Check the default setting... - EXPECT_TRUE(base::internal::GetExitOnDFatal()); - - // Turn off... - base::internal::SetExitOnDFatal(false); - EXPECT_FALSE(base::internal::GetExitOnDFatal()); - - // We don't die. - { - ScopedMockLog log; - //EXPECT_CALL(log, Log(_, _, _)).Times(AnyNumber()); - // LOG(DFATAL) has severity FATAL if debugging, but is - // downgraded to ERROR if not debugging. - const LogSeverity severity = -#ifdef NDEBUG - ERROR; -#else - FATAL; -#endif - EXPECT_CALL(log, Log(severity, __FILE__, "This should not be fatal")); - LOG(DFATAL) << "This should not be fatal"; - } - - // Turn back on... - base::internal::SetExitOnDFatal(true); - EXPECT_TRUE(base::internal::GetExitOnDFatal()); - -#ifdef GTEST_HAS_DEATH_TEST - // Death comes on little cats' feet. - EXPECT_DEBUG_DEATH({ - LOG(DFATAL) << "This should be fatal in debug mode"; - }, "This should be fatal in debug mode"); -#endif -} - -#ifdef HAVE_STACKTRACE - -static void BacktraceAtHelper() { - LOG(INFO) << "Not me"; - -// The vertical spacing of the next 3 lines is significant. - LOG(INFO) << "Backtrace me"; -} -static int kBacktraceAtLine = __LINE__ - 2; // The line of the LOG(INFO) above - -TEST(LogBacktraceAt, DoesNotBacktraceWhenDisabled) { - StrictMock log; - - FLAGS_log_backtrace_at = ""; - - EXPECT_CALL(log, Log(_, _, "Backtrace me")); - EXPECT_CALL(log, Log(_, _, "Not me")); - - BacktraceAtHelper(); -} - -TEST(LogBacktraceAt, DoesBacktraceAtRightLineWhenEnabled) { - StrictMock log; - - char where[100]; - snprintf(where, 100, "%s:%d", const_basename(__FILE__), kBacktraceAtLine); - FLAGS_log_backtrace_at = where; - - // The LOG at the specified line should include a stacktrace which includes - // the name of the containing function, followed by the log message. - // We use HasSubstr()s instead of ContainsRegex() for environments - // which don't have regexp. - EXPECT_CALL(log, Log(_, _, AllOf(HasSubstr("stacktrace:"), - HasSubstr("BacktraceAtHelper"), - HasSubstr("main"), - HasSubstr("Backtrace me")))); - // Other LOGs should not include a backtrace. - EXPECT_CALL(log, Log(_, _, "Not me")); - - BacktraceAtHelper(); -} - -#endif // HAVE_STACKTRACE - -#endif // HAVE_LIB_GMOCK - -struct UserDefinedClass { - bool operator==(const UserDefinedClass& rhs) const { return true; } -}; - -inline ostream& operator<<(ostream& out, const UserDefinedClass& u) { - out << "OK"; - return out; -} - -TEST(UserDefinedClass, logging) { - UserDefinedClass u; - vector buf; - LOG_STRING(INFO, &buf) << u; - CHECK_EQ(1, buf.size()); - CHECK(buf[0].find("OK") != string::npos); - - // We must be able to compile this. - CHECK_EQ(u, u); -} diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/logging_unittest.err b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/logging_unittest.err deleted file mode 100644 index 4f80bf5d72e0..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/logging_unittest.err +++ /dev/null @@ -1,305 +0,0 @@ -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=2 logtostderr=0 alsologtostderr=0 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog -1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 0 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log info -WDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error -WARNING: Logging before InitGoogleLogging() is written to STDERR -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog -1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 0 -IDATE TIME__ THREADID logging_unittest.cc:LINE] log info -WDATE TIME__ THREADID logging_unittest.cc:LINE] log warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] log error -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if -1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 -IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info -WDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info expr -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info every 1 expr -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 every 1 expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=0 logtostderr=0 alsologtostderr=0 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog -1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 0 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log info -WDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog -1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 0 -IDATE TIME__ THREADID logging_unittest.cc:LINE] log info -WDATE TIME__ THREADID logging_unittest.cc:LINE] log warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] log error -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if -1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 -IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info -WDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info expr -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info every 1 expr -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 every 1 expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] foo bar 10 3.4 -EDATE TIME__ THREADID logging_unittest.cc:LINE] Plog every 2, iteration 1: __SUCCESS__ [0] -EDATE TIME__ THREADID logging_unittest.cc:LINE] Log every 3, iteration 1 -EDATE TIME__ THREADID logging_unittest.cc:LINE] Log every 4, iteration 1 -WDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 5, iteration 1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 1 -EDATE TIME__ THREADID logging_unittest.cc:LINE] Log if less than 3 every 2, iteration 1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 2 -EDATE TIME__ THREADID logging_unittest.cc:LINE] Plog every 2, iteration 3: __ENOENT__ [2] -IDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 3 -EDATE TIME__ THREADID logging_unittest.cc:LINE] Log if less than 3 every 2, iteration 3 -EDATE TIME__ THREADID logging_unittest.cc:LINE] Log every 3, iteration 4 -IDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 4 -EDATE TIME__ THREADID logging_unittest.cc:LINE] Plog every 2, iteration 5: __EINTR__ [4] -EDATE TIME__ THREADID logging_unittest.cc:LINE] Log every 4, iteration 5 -IDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 5 -WDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 5, iteration 6 -IDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 6 -EDATE TIME__ THREADID logging_unittest.cc:LINE] Plog every 2, iteration 7: __ENXIO__ [6] -EDATE TIME__ THREADID logging_unittest.cc:LINE] Log every 3, iteration 7 -IDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 7 -IDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 8 -EDATE TIME__ THREADID logging_unittest.cc:LINE] Plog every 2, iteration 9: __ENOEXEC__ [8] -EDATE TIME__ THREADID logging_unittest.cc:LINE] Log every 4, iteration 9 -IDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 9 -EDATE TIME__ THREADID logging_unittest.cc:LINE] Log every 3, iteration 10 -IDATE TIME__ THREADID logging_unittest.cc:LINE] Log if every 1, iteration 10 -WDATE TIME__ THREADID logging_unittest.cc:LINE] log_if this -IDATE TIME__ THREADID logging_unittest.cc:LINE] array -IDATE TIME__ THREADID logging_unittest.cc:LINE] const array -EDATE TIME__ THREADID logging_unittest.cc:LINE] foo 1000 0000001000 3e8 -no prefix -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: foo bar 10 3.400000 -WDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: array -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: const array -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: ptr 0x12345678 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: ptr __NULLP__ -EDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: foo 1000 0000001000 3e8 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: foo 1000 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: foo 1000 -WDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: RAW_LOG ERROR: The Message was too long! -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: RAW_LOG ERROR: The Message was too long! -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 0 on -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 1 on -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 2 on -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=0 logtostderr=0 alsologtostderr=0 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog -1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 0 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log info -WDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog -1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 0 -IDATE TIME__ THREADID logging_unittest.cc:LINE] log info -WDATE TIME__ THREADID logging_unittest.cc:LINE] log warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] log error -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if -1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 -IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info -WDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info expr -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info every 1 expr -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 every 1 expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=1 stderrthreshold=0 logtostderr=0 alsologtostderr=0 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog -1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 0 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log info -WDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog -1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 0 -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] log info -WDATE TIME__ THREADID logging_unittest.cc:LINE] log warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] log error -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if -1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info -WDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info expr -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info every 1 expr -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 every 1 expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=-1 stderrthreshold=0 logtostderr=0 alsologtostderr=0 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog -1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log info -WDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog -1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] log info -WDATE TIME__ THREADID logging_unittest.cc:LINE] log warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] log error -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if -1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info -WDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error -IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info expr -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info every 1 expr -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=1 logtostderr=0 alsologtostderr=0 -WDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error -WDATE TIME__ THREADID logging_unittest.cc:LINE] log warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] log error -WDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=2 logtostderr=0 alsologtostderr=0 -EDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error -EDATE TIME__ THREADID logging_unittest.cc:LINE] log error -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=3 logtostderr=0 alsologtostderr=0 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=3 logtostderr=1 alsologtostderr=0 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog -1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 0 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log info -WDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog -1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 0 -IDATE TIME__ THREADID logging_unittest.cc:LINE] log info -WDATE TIME__ THREADID logging_unittest.cc:LINE] log warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] log error -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if -1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 -IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info -WDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info expr -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info every 1 expr -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 every 1 expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=0 stderrthreshold=3 logtostderr=0 alsologtostderr=1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog -1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 0 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log info -WDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog -1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 0 -IDATE TIME__ THREADID logging_unittest.cc:LINE] log info -WDATE TIME__ THREADID logging_unittest.cc:LINE] log warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] log error -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if -1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 -IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info -WDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info expr -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info every 1 expr -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 every 1 expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=1 stderrthreshold=1 logtostderr=0 alsologtostderr=0 -WDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error -WDATE TIME__ THREADID logging_unittest.cc:LINE] log warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] log error -WDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Test: v=1 stderrthreshold=3 logtostderr=0 alsologtostderr=1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog -1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 0 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: vlog 1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log info -WDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: log error -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog -1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 0 -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog 1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] log info -WDATE TIME__ THREADID logging_unittest.cc:LINE] log warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] log error -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if -1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info -WDATE TIME__ THREADID logging_unittest.cc:LINE] log_if warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info expr -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] log_if info every 1 expr -EDATE TIME__ THREADID logging_unittest.cc:LINE] log_if error every 1 expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] vlog_if 0 every 1 expr -IDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_STRING: reported info -WDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_STRING: reported warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_STRING: reported error -IDATE TIME__ THREADID logging_unittest.cc:LINE] Captured by LOG_STRING: LOG_STRING: collected info -IDATE TIME__ THREADID logging_unittest.cc:LINE] Captured by LOG_STRING: LOG_STRING: collected warning -IDATE TIME__ THREADID logging_unittest.cc:LINE] Captured by LOG_STRING: LOG_STRING: collected error -IDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: collected info -WDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: collected warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: collected error -IDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: reported info -WDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: reported warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: reported error -IDATE TIME__ THREADID logging_unittest.cc:LINE] Captured by LOG_TO_SINK: -IDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: collected info -WDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: collected warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK: collected error -IDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK_BUT_NOT_TO_LOGFILE: collected info -WDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK_BUT_NOT_TO_LOGFILE: collected warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_SINK_BUT_NOT_TO_LOGFILE: collected error -IDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_STRING: collected info -IDATE TIME__ THREADID logging_unittest.cc:LINE] Captured by LOG_TO_STRING: LOG_TO_STRING: collected info -WDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_STRING: collected warning -IDATE TIME__ THREADID logging_unittest.cc:LINE] Captured by LOG_TO_STRING: LOG_TO_STRING: collected warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_STRING: collected error -IDATE TIME__ THREADID logging_unittest.cc:LINE] Captured by LOG_TO_STRING: LOG_TO_STRING: collected error -IDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_STRING: reported info -WDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_STRING: reported warning -EDATE TIME__ THREADID logging_unittest.cc:LINE] LOG_TO_STRING: reported error -IDATE TIME__ THREADID logging_unittest.cc:LINE] Message 1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Buffering -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Buffered -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Waiting -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Sink got a messages -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Waited -IDATE TIME__ THREADID logging_unittest.cc:LINE] Sink is sending out a message: IDATE TIME__ THREADID logging_unittest.cc:LINE] Message 1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] Have 0 left -EDATE TIME__ THREADID logging_unittest.cc:LINE] Message 2 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Buffering -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Buffered -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Waiting -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Sink got a messages -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Waited -IDATE TIME__ THREADID logging_unittest.cc:LINE] Sink is sending out a message: EDATE TIME__ THREADID logging_unittest.cc:LINE] Message 2 -IDATE TIME__ THREADID logging_unittest.cc:LINE] Have 0 left -WDATE TIME__ THREADID logging_unittest.cc:LINE] Message 3 -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Buffering -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Buffered -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Waiting -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Sink got a messages -IDATE TIME__ THREADID logging_unittest.cc:LINE] RAW: Waited -IDATE TIME__ THREADID logging_unittest.cc:LINE] Sink is sending out a message: WDATE TIME__ THREADID logging_unittest.cc:LINE] Message 3 -IDATE TIME__ THREADID logging_unittest.cc:LINE] Have 0 left -IDATE TIME__ THREADID logging_unittest.cc:LINE] Sink capture: IDATE TIME__ THREADID logging_unittest.cc:LINE] Message 1 -IDATE TIME__ THREADID logging_unittest.cc:LINE] Sink capture: EDATE TIME__ THREADID logging_unittest.cc:LINE] Message 2 -IDATE TIME__ THREADID logging_unittest.cc:LINE] Sink capture: WDATE TIME__ THREADID logging_unittest.cc:LINE] Message 3 diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/mock-log.h b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/mock-log.h deleted file mode 100644 index 5b21811504d2..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/mock-log.h +++ /dev/null @@ -1,155 +0,0 @@ -// Copyright (c) 2007, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: Zhanyong Wan -// -// Defines the ScopedMockLog class (using Google C++ Mocking -// Framework), which is convenient for testing code that uses LOG(). - -#ifndef GLOG_SRC_MOCK_LOG_H_ -#define GLOG_SRC_MOCK_LOG_H_ - -// For GOOGLE_NAMESPACE. This must go first so we get _XOPEN_SOURCE. -#include "utilities.h" - -#include - -#include - -#include "glog/logging.h" - -_START_GOOGLE_NAMESPACE_ -namespace glog_testing { - -// A ScopedMockLog object intercepts LOG() messages issued during its -// lifespan. Using this together with Google C++ Mocking Framework, -// it's very easy to test how a piece of code calls LOG(). The -// typical usage: -// -// TEST(FooTest, LogsCorrectly) { -// ScopedMockLog log; -// -// // We expect the WARNING "Something bad!" exactly twice. -// EXPECT_CALL(log, Log(WARNING, _, "Something bad!")) -// .Times(2); -// -// // We allow foo.cc to call LOG(INFO) any number of times. -// EXPECT_CALL(log, Log(INFO, HasSubstr("/foo.cc"), _)) -// .Times(AnyNumber()); -// -// Foo(); // Exercises the code under test. -// } -class ScopedMockLog : public GOOGLE_NAMESPACE::LogSink { - public: - // When a ScopedMockLog object is constructed, it starts to - // intercept logs. - ScopedMockLog() { AddLogSink(this); } - - // When the object is destructed, it stops intercepting logs. - virtual ~ScopedMockLog() { RemoveLogSink(this); } - - // Implements the mock method: - // - // void Log(LogSeverity severity, const string& file_path, - // const string& message); - // - // The second argument to Send() is the full path of the source file - // in which the LOG() was issued. - // - // Note, that in a multi-threaded environment, all LOG() messages from a - // single thread will be handled in sequence, but that cannot be guaranteed - // for messages from different threads. In fact, if the same or multiple - // expectations are matched on two threads concurrently, their actions will - // be executed concurrently as well and may interleave. - MOCK_METHOD3(Log, void(GOOGLE_NAMESPACE::LogSeverity severity, - const std::string& file_path, - const std::string& message)); - - private: - // Implements the send() virtual function in class LogSink. - // Whenever a LOG() statement is executed, this function will be - // invoked with information presented in the LOG(). - // - // The method argument list is long and carries much information a - // test usually doesn't care about, so we trim the list before - // forwarding the call to Log(), which is much easier to use in - // tests. - // - // We still cannot call Log() directly, as it may invoke other LOG() - // messages, either due to Invoke, or due to an error logged in - // Google C++ Mocking Framework code, which would trigger a deadlock - // since a lock is held during send(). - // - // Hence, we save the message for WaitTillSent() which will be called after - // the lock on send() is released, and we'll call Log() inside - // WaitTillSent(). Since while a single send() call may be running at a - // time, multiple WaitTillSent() calls (along with the one send() call) may - // be running simultaneously, we ensure thread-safety of the exchange between - // send() and WaitTillSent(), and that for each message, LOG(), send(), - // WaitTillSent() and Log() are executed in the same thread. - virtual void send(GOOGLE_NAMESPACE::LogSeverity severity, - const char* full_filename, - const char* base_filename, int line, const tm* tm_time, - const char* message, size_t message_len) { - // We are only interested in the log severity, full file name, and - // log message. - message_info_.severity = severity; - message_info_.file_path = full_filename; - message_info_.message = std::string(message, message_len); - } - - // Implements the WaitTillSent() virtual function in class LogSink. - // It will be executed after send() and after the global logging lock is - // released, so calls within it (or rather within the Log() method called - // within) may also issue LOG() statements. - // - // LOG(), send(), WaitTillSent() and Log() will occur in the same thread for - // a given log message. - virtual void WaitTillSent() { - // First, and very importantly, we save a copy of the message being - // processed before calling Log(), since Log() may indirectly call send() - // and WaitTillSent() in the same thread again. - MessageInfo message_info = message_info_; - Log(message_info.severity, message_info.file_path, message_info.message); - } - - // All relevant information about a logged message that needs to be passed - // from send() to WaitTillSent(). - struct MessageInfo { - GOOGLE_NAMESPACE::LogSeverity severity; - std::string file_path; - std::string message; - }; - MessageInfo message_info_; -}; - -} // namespace glog_testing -_END_GOOGLE_NAMESPACE_ - -#endif // GLOG_SRC_MOCK_LOG_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/mock-log_test.cc b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/mock-log_test.cc deleted file mode 100644 index 7d58a307c222..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/mock-log_test.cc +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright (c) 2007, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: Zhanyong Wan - -// Tests the ScopedMockLog class. - -#include "mock-log.h" - -#include - -#include -#include - -namespace { - -using GOOGLE_NAMESPACE::INFO; -using GOOGLE_NAMESPACE::WARNING; -using GOOGLE_NAMESPACE::ERROR; -using GOOGLE_NAMESPACE::glog_testing::ScopedMockLog; -using std::string; -using testing::_; -using testing::HasSubstr; -using testing::InSequence; -using testing::InvokeWithoutArgs; - -// Tests that ScopedMockLog intercepts LOG()s when it's alive. -TEST(ScopedMockLogTest, InterceptsLog) { - ScopedMockLog log; - - InSequence s; - EXPECT_CALL(log, Log(WARNING, HasSubstr("/mock-log_test.cc"), "Fishy.")); - EXPECT_CALL(log, Log(INFO, _, "Working...")) - .Times(2); - EXPECT_CALL(log, Log(ERROR, _, "Bad!!")); - - LOG(WARNING) << "Fishy."; - LOG(INFO) << "Working..."; - LOG(INFO) << "Working..."; - LOG(ERROR) << "Bad!!"; -} - -void LogBranch() { - LOG(INFO) << "Logging a branch..."; -} - -void LogTree() { - LOG(INFO) << "Logging the whole tree..."; -} - -void LogForest() { - LOG(INFO) << "Logging the entire forest."; - LOG(INFO) << "Logging the entire forest.."; - LOG(INFO) << "Logging the entire forest..."; -} - -// The purpose of the following test is to verify that intercepting logging -// continues to work properly if a LOG statement is executed within the scope -// of a mocked call. -TEST(ScopedMockLogTest, LogDuringIntercept) { - ScopedMockLog log; - InSequence s; - EXPECT_CALL(log, Log(INFO, __FILE__, "Logging a branch...")) - .WillOnce(InvokeWithoutArgs(LogTree)); - EXPECT_CALL(log, Log(INFO, __FILE__, "Logging the whole tree...")) - .WillOnce(InvokeWithoutArgs(LogForest)); - EXPECT_CALL(log, Log(INFO, __FILE__, "Logging the entire forest.")); - EXPECT_CALL(log, Log(INFO, __FILE__, "Logging the entire forest..")); - EXPECT_CALL(log, Log(INFO, __FILE__, "Logging the entire forest...")); - LogBranch(); -} - -} // namespace - -int main(int argc, char **argv) { - GOOGLE_NAMESPACE::InitGoogleLogging(argv[0]); - testing::InitGoogleMock(&argc, argv); - - return RUN_ALL_TESTS(); -} diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/raw_logging.cc b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/raw_logging.cc deleted file mode 100644 index 50c6a719943d..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/raw_logging.cc +++ /dev/null @@ -1,172 +0,0 @@ -// Copyright (c) 2006, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: Maxim Lifantsev -// -// logging_unittest.cc covers the functionality herein - -#include "utilities.h" - -#include -#include -#include -#ifdef HAVE_UNISTD_H -# include // for close() and write() -#endif -#include // for open() -#include -#include "config.h" -#include "glog/logging.h" // To pick up flag settings etc. -#include "glog/raw_logging.h" -#include "base/commandlineflags.h" - -#ifdef HAVE_STACKTRACE -# include "stacktrace.h" -#endif - -#if defined(HAVE_SYSCALL_H) -#include // for syscall() -#elif defined(HAVE_SYS_SYSCALL_H) -#include // for syscall() -#endif -#ifdef HAVE_UNISTD_H -# include -#endif - -#if defined(HAVE_SYSCALL_H) || defined(HAVE_SYS_SYSCALL_H) -# define safe_write(fd, s, len) syscall(SYS_write, fd, s, len) -#else - // Not so safe, but what can you do? -# define safe_write(fd, s, len) write(fd, s, len) -#endif - -_START_GOOGLE_NAMESPACE_ - -// Data for RawLog__ below. We simply pick up the latest -// time data created by a normal log message to avoid calling -// localtime_r which can allocate memory. -static struct ::tm last_tm_time_for_raw_log; -static int last_usecs_for_raw_log; - -void RawLog__SetLastTime(const struct ::tm& t, int usecs) { - memcpy(&last_tm_time_for_raw_log, &t, sizeof(last_tm_time_for_raw_log)); - last_usecs_for_raw_log = usecs; -} - -// CAVEAT: vsnprintf called from *DoRawLog below has some (exotic) code paths -// that invoke malloc() and getenv() that might acquire some locks. -// If this becomes a problem we should reimplement a subset of vsnprintf -// that does not need locks and malloc. - -// Helper for RawLog__ below. -// *DoRawLog writes to *buf of *size and move them past the written portion. -// It returns true iff there was no overflow or error. -static bool DoRawLog(char** buf, int* size, const char* format, ...) { - va_list ap; - va_start(ap, format); - int n = vsnprintf(*buf, *size, format, ap); - va_end(ap); - if (n < 0 || n > *size) return false; - *size -= n; - *buf += n; - return true; -} - -// Helper for RawLog__ below. -inline static bool VADoRawLog(char** buf, int* size, - const char* format, va_list ap) { - int n = vsnprintf(*buf, *size, format, ap); - if (n < 0 || n > *size) return false; - *size -= n; - *buf += n; - return true; -} - -static const int kLogBufSize = 3000; -static bool crashed = false; -static CrashReason crash_reason; -static char crash_buf[kLogBufSize + 1] = { 0 }; // Will end in '\0' - -void RawLog__(LogSeverity severity, const char* file, int line, - const char* format, ...) { - if (!(FLAGS_logtostderr || severity >= FLAGS_stderrthreshold || - FLAGS_alsologtostderr || !IsGoogleLoggingInitialized())) { - return; // this stderr log message is suppressed - } - // can't call localtime_r here: it can allocate - struct ::tm& t = last_tm_time_for_raw_log; - char buffer[kLogBufSize]; - char* buf = buffer; - int size = sizeof(buffer); - - // NOTE: this format should match the specification in base/logging.h - DoRawLog(&buf, &size, "%c%02d%02d %02d:%02d:%02d.%06d %5u %s:%d] RAW: ", - LogSeverityNames[severity][0], - 1 + t.tm_mon, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec, - last_usecs_for_raw_log, - static_cast(GetTID()), - const_basename(const_cast(file)), line); - - // Record the position and size of the buffer after the prefix - const char* msg_start = buf; - const int msg_size = size; - - va_list ap; - va_start(ap, format); - bool no_chop = VADoRawLog(&buf, &size, format, ap); - va_end(ap); - if (no_chop) { - DoRawLog(&buf, &size, "\n"); - } else { - DoRawLog(&buf, &size, "RAW_LOG ERROR: The Message was too long!\n"); - } - // We make a raw syscall to write directly to the stderr file descriptor, - // avoiding FILE buffering (to avoid invoking malloc()), and bypassing - // libc (to side-step any libc interception). - // We write just once to avoid races with other invocations of RawLog__. - safe_write(STDERR_FILENO, buffer, strlen(buffer)); - if (severity == FATAL) { - if (!sync_val_compare_and_swap(&crashed, false, true)) { - crash_reason.filename = file; - crash_reason.line_number = line; - memcpy(crash_buf, msg_start, msg_size); // Don't include prefix - crash_reason.message = crash_buf; -#ifdef HAVE_STACKTRACE - crash_reason.depth = - GetStackTrace(crash_reason.stack, ARRAYSIZE(crash_reason.stack), 1); -#else - crash_reason.depth = 0; -#endif - SetCrashReason(&crash_reason); - } - LogMessage::Fail(); // abort() - } -} - -_END_GOOGLE_NAMESPACE_ diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/signalhandler.cc b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/signalhandler.cc deleted file mode 100644 index 7c8fe57426fb..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/signalhandler.cc +++ /dev/null @@ -1,350 +0,0 @@ -// Copyright (c) 2008, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: Satoru Takabayashi -// -// Implementation of InstallFailureSignalHandler(). - -#include "utilities.h" -#include "stacktrace.h" -#include "symbolize.h" -#include "glog/logging.h" - -#include -#include -#ifdef HAVE_UCONTEXT_H -# include -#endif -#ifdef HAVE_SYS_UCONTEXT_H -# include -#endif -#include - -_START_GOOGLE_NAMESPACE_ - -namespace { - -// We'll install the failure signal handler for these signals. We could -// use strsignal() to get signal names, but we don't use it to avoid -// introducing yet another #ifdef complication. -// -// The list should be synced with the comment in signalhandler.h. -const struct { - int number; - const char *name; -} kFailureSignals[] = { - { SIGSEGV, "SIGSEGV" }, - { SIGILL, "SIGILL" }, - { SIGFPE, "SIGFPE" }, - { SIGABRT, "SIGABRT" }, - { SIGBUS, "SIGBUS" }, - { SIGTERM, "SIGTERM" }, -}; - -// Returns the program counter from signal context, NULL if unknown. -void* GetPC(void* ucontext_in_void) { -#if (defined(HAVE_UCONTEXT_H) || defined(HAVE_SYS_UCONTEXT_H)) && defined(PC_FROM_UCONTEXT) - if (ucontext_in_void != NULL) { - ucontext_t *context = reinterpret_cast(ucontext_in_void); - return (void*)context->PC_FROM_UCONTEXT; - } -#endif - return NULL; -} - -// The class is used for formatting error messages. We don't use printf() -// as it's not async signal safe. -class MinimalFormatter { - public: - MinimalFormatter(char *buffer, int size) - : buffer_(buffer), - cursor_(buffer), - end_(buffer + size) { - } - - // Returns the number of bytes written in the buffer. - int num_bytes_written() const { return cursor_ - buffer_; } - - // Appends string from "str" and updates the internal cursor. - void AppendString(const char* str) { - int i = 0; - while (str[i] != '\0' && cursor_ + i < end_) { - cursor_[i] = str[i]; - ++i; - } - cursor_ += i; - } - - // Formats "number" in "radix" and updates the internal cursor. - // Lowercase letters are used for 'a' - 'z'. - void AppendUint64(uint64 number, int radix) { - int i = 0; - while (cursor_ + i < end_) { - const int tmp = number % radix; - number /= radix; - cursor_[i] = (tmp < 10 ? '0' + tmp : 'a' + tmp - 10); - ++i; - if (number == 0) { - break; - } - } - // Reverse the bytes written. - std::reverse(cursor_, cursor_ + i); - cursor_ += i; - } - - // Formats "number" as hexadecimal number, and updates the internal - // cursor. Padding will be added in front if needed. - void AppendHexWithPadding(uint64 number, int width) { - char* start = cursor_; - AppendString("0x"); - AppendUint64(number, 16); - // Move to right and add padding in front if needed. - if (cursor_ < start + width) { - const int64 delta = start + width - cursor_; - std::copy(start, cursor_, start + delta); - std::fill(start, start + delta, ' '); - cursor_ = start + width; - } - } - - private: - char *buffer_; - char *cursor_; - const char * const end_; -}; - -// Writes the given data with the size to the standard error. -void WriteToStderr(const char* data, int size) { - if (write(STDERR_FILENO, data, size) < 0) { - // Ignore errors. - } -} - -// The writer function can be changed by InstallFailureWriter(). -void (*g_failure_writer)(const char* data, int size) = WriteToStderr; - -// Dumps time information. We don't dump human-readable time information -// as localtime() is not guaranteed to be async signal safe. -void DumpTimeInfo() { - time_t time_in_sec = time(NULL); - char buf[256]; // Big enough for time info. - MinimalFormatter formatter(buf, sizeof(buf)); - formatter.AppendString("*** Aborted at "); - formatter.AppendUint64(time_in_sec, 10); - formatter.AppendString(" (unix time)"); - formatter.AppendString(" try \"date -d @"); - formatter.AppendUint64(time_in_sec, 10); - formatter.AppendString("\" if you are using GNU date ***\n"); - g_failure_writer(buf, formatter.num_bytes_written()); -} - -// Dumps information about the signal to STDERR. -void DumpSignalInfo(int signal_number, siginfo_t *siginfo) { - // Get the signal name. - const char* signal_name = NULL; - for (int i = 0; i < ARRAYSIZE(kFailureSignals); ++i) { - if (signal_number == kFailureSignals[i].number) { - signal_name = kFailureSignals[i].name; - } - } - - char buf[256]; // Big enough for signal info. - MinimalFormatter formatter(buf, sizeof(buf)); - - formatter.AppendString("*** "); - if (signal_name) { - formatter.AppendString(signal_name); - } else { - // Use the signal number if the name is unknown. The signal name - // should be known, but just in case. - formatter.AppendString("Signal "); - formatter.AppendUint64(signal_number, 10); - } - formatter.AppendString(" (@0x"); - formatter.AppendUint64(reinterpret_cast(siginfo->si_addr), 16); - formatter.AppendString(")"); - formatter.AppendString(" received by PID "); - formatter.AppendUint64(getpid(), 10); - formatter.AppendString(" (TID 0x"); - // We assume pthread_t is an integral number or a pointer, rather - // than a complex struct. In some environments, pthread_self() - // returns an uint64 but in some other environments pthread_self() - // returns a pointer. Hence we use C-style cast here, rather than - // reinterpret/static_cast, to support both types of environments. - formatter.AppendUint64((uintptr_t)pthread_self(), 16); - formatter.AppendString(") "); - // Only linux has the PID of the signal sender in si_pid. -#ifdef OS_LINUX - formatter.AppendString("from PID "); - formatter.AppendUint64(siginfo->si_pid, 10); - formatter.AppendString("; "); -#endif - formatter.AppendString("stack trace: ***\n"); - g_failure_writer(buf, formatter.num_bytes_written()); -} - -// Dumps information about the stack frame to STDERR. -void DumpStackFrameInfo(const char* prefix, void* pc) { - // Get the symbol name. - const char *symbol = "(unknown)"; - char symbolized[1024]; // Big enough for a sane symbol. - // Symbolizes the previous address of pc because pc may be in the - // next function. - if (Symbolize(reinterpret_cast(pc) - 1, - symbolized, sizeof(symbolized))) { - symbol = symbolized; - } - - char buf[1024]; // Big enough for stack frame info. - MinimalFormatter formatter(buf, sizeof(buf)); - - formatter.AppendString(prefix); - formatter.AppendString("@ "); - const int width = 2 * sizeof(void*) + 2; // + 2 for "0x". - formatter.AppendHexWithPadding(reinterpret_cast(pc), width); - formatter.AppendString(" "); - formatter.AppendString(symbol); - formatter.AppendString("\n"); - g_failure_writer(buf, formatter.num_bytes_written()); -} - -// Invoke the default signal handler. -void InvokeDefaultSignalHandler(int signal_number) { - struct sigaction sig_action; - memset(&sig_action, 0, sizeof(sig_action)); - sigemptyset(&sig_action.sa_mask); - sig_action.sa_handler = SIG_DFL; - sigaction(signal_number, &sig_action, NULL); - kill(getpid(), signal_number); -} - -// This variable is used for protecting FailureSignalHandler() from -// dumping stuff while another thread is doing it. Our policy is to let -// the first thread dump stuff and let other threads wait. -// See also comments in FailureSignalHandler(). -static pthread_t* g_entered_thread_id_pointer = NULL; - -// Dumps signal and stack frame information, and invokes the default -// signal handler once our job is done. -void FailureSignalHandler(int signal_number, - siginfo_t *signal_info, - void *ucontext) { - // First check if we've already entered the function. We use an atomic - // compare and swap operation for platforms that support it. For other - // platforms, we use a naive method that could lead to a subtle race. - - // We assume pthread_self() is async signal safe, though it's not - // officially guaranteed. - pthread_t my_thread_id = pthread_self(); - // NOTE: We could simply use pthread_t rather than pthread_t* for this, - // if pthread_self() is guaranteed to return non-zero value for thread - // ids, but there is no such guarantee. We need to distinguish if the - // old value (value returned from __sync_val_compare_and_swap) is - // different from the original value (in this case NULL). - pthread_t* old_thread_id_pointer = - glog_internal_namespace_::sync_val_compare_and_swap( - &g_entered_thread_id_pointer, - static_cast(NULL), - &my_thread_id); - if (old_thread_id_pointer != NULL) { - // We've already entered the signal handler. What should we do? - if (pthread_equal(my_thread_id, *g_entered_thread_id_pointer)) { - // It looks the current thread is reentering the signal handler. - // Something must be going wrong (maybe we are reentering by another - // type of signal?). Kill ourself by the default signal handler. - InvokeDefaultSignalHandler(signal_number); - } - // Another thread is dumping stuff. Let's wait until that thread - // finishes the job and kills the process. - while (true) { - sleep(1); - } - } - // This is the first time we enter the signal handler. We are going to - // do some interesting stuff from here. - // TODO(satorux): We might want to set timeout here using alarm(), but - // mixing alarm() and sleep() can be a bad idea. - - // First dump time info. - DumpTimeInfo(); - - // Get the program counter from ucontext. - void *pc = GetPC(ucontext); - DumpStackFrameInfo("PC: ", pc); - -#ifdef HAVE_STACKTRACE - // Get the stack traces. - void *stack[32]; - // +1 to exclude this function. - const int depth = GetStackTrace(stack, ARRAYSIZE(stack), 1); - DumpSignalInfo(signal_number, signal_info); - // Dump the stack traces. - for (int i = 0; i < depth; ++i) { - DumpStackFrameInfo(" ", stack[i]); - } -#endif - - // *** TRANSITION *** - // - // BEFORE this point, all code must be async-termination-safe! - // (See WARNING above.) - // - // AFTER this point, we do unsafe things, like using LOG()! - // The process could be terminated or hung at any time. We try to - // do more useful things first and riskier things later. - - // Flush the logs before we do anything in case 'anything' - // causes problems. - FlushLogFilesUnsafe(0); - - // Kill ourself by the default signal handler. - InvokeDefaultSignalHandler(signal_number); -} - -} // namespace - -void InstallFailureSignalHandler() { - // Build the sigaction struct. - struct sigaction sig_action; - memset(&sig_action, 0, sizeof(sig_action)); - sigemptyset(&sig_action.sa_mask); - sig_action.sa_flags |= SA_SIGINFO; - sig_action.sa_sigaction = &FailureSignalHandler; - - for (int i = 0; i < ARRAYSIZE(kFailureSignals); ++i) { - CHECK_ERR(sigaction(kFailureSignals[i].number, &sig_action, NULL)); - } -} - -void InstallFailureWriter(void (*writer)(const char* data, int size)) { - g_failure_writer = writer; -} - -_END_GOOGLE_NAMESPACE_ diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/signalhandler_unittest.cc b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/signalhandler_unittest.cc deleted file mode 100644 index 1cd0fa010e38..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/signalhandler_unittest.cc +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright (c) 2008, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: Satoru Takabayashi -// -// This is a helper binary for testing signalhandler.cc. The actual test -// is done in signalhandler_unittest.sh. - -#include "utilities.h" - -#include -#include -#include -#include -#include -#include "glog/logging.h" - -using namespace GOOGLE_NAMESPACE; - -void* DieInThread(void*) { - // We assume pthread_t is an integral number or a pointer, rather - // than a complex struct. In some environments, pthread_self() - // returns an uint64 but in some other environments pthread_self() - // returns a pointer. Hence we use C-style cast here, rather than - // reinterpret/static_cast, to support both types of environments. - fprintf(stderr, "0x%lx is dying\n", (long)pthread_self()); - // Use volatile to prevent from these to be optimized away. - volatile int a = 0; - volatile int b = 1 / a; - fprintf(stderr, "We should have died: b=%d\n", b); - return NULL; -} - -void WriteToStdout(const char* data, int size) { - if (write(STDOUT_FILENO, data, size) < 0) { - // Ignore errors. - } -} - -int main(int argc, char **argv) { -#if defined(HAVE_STACKTRACE) && defined(HAVE_SYMBOLIZE) - InitGoogleLogging(argv[0]); -#ifdef HAVE_LIB_GFLAGS - ParseCommandLineFlags(&argc, &argv, true); -#endif - InstallFailureSignalHandler(); - const std::string command = argc > 1 ? argv[1] : "none"; - if (command == "segv") { - // We'll check if this is outputted. - LOG(INFO) << "create the log file"; - LOG(INFO) << "a message before segv"; - // We assume 0xDEAD is not writable. - int *a = (int*)0xDEAD; - *a = 0; - } else if (command == "loop") { - fprintf(stderr, "looping\n"); - while (true); - } else if (command == "die_in_thread") { - pthread_t thread; - pthread_create(&thread, NULL, &DieInThread, NULL); - pthread_join(thread, NULL); - } else if (command == "dump_to_stdout") { - InstallFailureWriter(WriteToStdout); - abort(); - } else { - // Tell the shell script - puts("OK"); - } -#endif - return 0; -} diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/signalhandler_unittest.sh b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/signalhandler_unittest.sh deleted file mode 100755 index 3b57b05d438f..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/signalhandler_unittest.sh +++ /dev/null @@ -1,131 +0,0 @@ -#! /bin/sh -# -# Copyright (c) 2008, Google Inc. -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following disclaimer -# in the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# Author: Satoru Takabayashi -# -# Unit tests for signalhandler.cc. - -die () { - echo $1 - exit 1 -} - -BINDIR=".libs" -LIBGLOG="$BINDIR/libglog.so" - -BINARY="$BINDIR/signalhandler_unittest" -LOG_INFO="./signalhandler_unittest.INFO" - -# Remove temporary files. -rm -f signalhandler.out* - -if test -e "$BINARY"; then - # We need shared object. - export LD_LIBRARY_PATH=$BINDIR - export DYLD_LIBRARY_PATH=$BINDIR -else - # For windows - BINARY="./signalhandler_unittest.exe" - if ! test -e "$BINARY"; then - echo "We coundn't find demangle_unittest binary." - exit 1 - fi -fi - -if [ x`$BINARY` != 'xOK' ]; then - echo "PASS (No stacktrace support. We don't run this test.)" - exit 0 -fi - -# The PC cannot be obtained in signal handlers on PowerPC correctly. -# We just skip the test for PowerPC. -if [ x`uname -p` = x"powerpc" ]; then - echo "PASS (We don't test the signal handler on PowerPC.)" - exit 0 -fi - -# Test for a case the program kills itself by SIGSEGV. -GOOGLE_LOG_DIR=. $BINARY segv 2> signalhandler.out1 -for pattern in SIGSEGV 0xdead main "Aborted at [0-9]"; do - if ! grep --quiet "$pattern" signalhandler.out1; then - die "'$pattern' should appear in the output" - fi -done -if ! grep --quiet "a message before segv" $LOG_INFO; then - die "'a message before segv' should appear in the INFO log" -fi -rm -f $LOG_INFO - -# Test for a case the program is killed by this shell script. -# $! = the process id of the last command run in the background. -# $$ = the process id of this shell. -$BINARY loop 2> signalhandler.out2 & -# Wait until "looping" is written in the file. This indicates the program -# is ready to accept signals. -while true; do - if grep --quiet looping signalhandler.out2; then - break - fi -done -kill -TERM $! -wait $! - -from_pid='' -# Only linux has the process ID of the signal sender. -if [ x`uname` = "xLinux" ]; then - from_pid="from PID $$" -fi -for pattern in SIGTERM "by PID $!" "$from_pid" main "Aborted at [0-9]"; do - if ! grep --quiet "$pattern" signalhandler.out2; then - die "'$pattern' should appear in the output" - fi -done - -# Test for a case the program dies in a non-main thread. -$BINARY die_in_thread 2> signalhandler.out3 -EXPECTED_TID="`sed 's/ .*//' signalhandler.out3`" - -for pattern in SIGFPE DieInThread "TID $EXPECTED_TID" "Aborted at [0-9]"; do - if ! grep --quiet "$pattern" signalhandler.out3; then - die "'$pattern' should appear in the output" - fi -done - -# Test for a case the program installs a custom failure writer that writes -# stuff to stdout instead of stderr. -$BINARY dump_to_stdout 1> signalhandler.out4 -for pattern in SIGABRT main "Aborted at [0-9]"; do - if ! grep --quiet "$pattern" signalhandler.out4; then - die "'$pattern' should appear in the output" - fi -done - -echo PASS diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stacktrace_libunwind-inl.h b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stacktrace_libunwind-inl.h deleted file mode 100644 index 0dc14c6506e9..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stacktrace_libunwind-inl.h +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright (c) 2005 - 2007, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: Arun Sharma -// -// Produce stack trace using libunwind - -#include "utilities.h" - -extern "C" { -#define UNW_LOCAL_ONLY -#include -} -#include "glog/raw_logging.h" -#include "stacktrace.h" - -_START_GOOGLE_NAMESPACE_ - -// Sometimes, we can try to get a stack trace from within a stack -// trace, because libunwind can call mmap (maybe indirectly via an -// internal mmap based memory allocator), and that mmap gets trapped -// and causes a stack-trace request. If were to try to honor that -// recursive request, we'd end up with infinite recursion or deadlock. -// Luckily, it's safe to ignore those subsequent traces. In such -// cases, we return 0 to indicate the situation. -static bool g_now_entering = false; - -// If you change this function, also change GetStackFrames below. -int GetStackTrace(void** result, int max_depth, int skip_count) { - void *ip; - int n = 0; - unw_cursor_t cursor; - unw_context_t uc; - - if (sync_val_compare_and_swap(&g_now_entering, false, true)) { - return 0; - } - - unw_getcontext(&uc); - RAW_CHECK(unw_init_local(&cursor, &uc) >= 0, "unw_init_local failed"); - skip_count++; // Do not include the "GetStackTrace" frame - - while (n < max_depth) { - int ret = unw_get_reg(&cursor, UNW_REG_IP, (unw_word_t *) &ip); - if (ret < 0) - break; - if (skip_count > 0) { - skip_count--; - } else { - result[n++] = ip; - } - ret = unw_step(&cursor); - if (ret <= 0) - break; - } - - g_now_entering = false; - return n; -} - -_END_GOOGLE_NAMESPACE_ diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stacktrace_powerpc-inl.h b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stacktrace_powerpc-inl.h deleted file mode 100644 index 1090ddedbc75..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stacktrace_powerpc-inl.h +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright (c) 2007, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: Craig Silverstein -// -// Produce stack trace. I'm guessing (hoping!) the code is much like -// for x86. For apple machines, at least, it seems to be; see -// http://developer.apple.com/documentation/mac/runtimehtml/RTArch-59.html -// http://www.linux-foundation.org/spec/ELF/ppc64/PPC-elf64abi-1.9.html#STACK -// Linux has similar code: http://patchwork.ozlabs.org/linuxppc/patch?id=8882 - -#include -#include // for uintptr_t -#include "stacktrace.h" - -_START_GOOGLE_NAMESPACE_ - -// Given a pointer to a stack frame, locate and return the calling -// stackframe, or return NULL if no stackframe can be found. Perform sanity -// checks (the strictness of which is controlled by the boolean parameter -// "STRICT_UNWINDING") to reduce the chance that a bad pointer is returned. -template -static void **NextStackFrame(void **old_sp) { - void **new_sp = (void **) *old_sp; - - // Check that the transition from frame pointer old_sp to frame - // pointer new_sp isn't clearly bogus - if (STRICT_UNWINDING) { - // With the stack growing downwards, older stack frame must be - // at a greater address that the current one. - if (new_sp <= old_sp) return NULL; - // Assume stack frames larger than 100,000 bytes are bogus. - if ((uintptr_t)new_sp - (uintptr_t)old_sp > 100000) return NULL; - } else { - // In the non-strict mode, allow discontiguous stack frames. - // (alternate-signal-stacks for example). - if (new_sp == old_sp) return NULL; - // And allow frames upto about 1MB. - if ((new_sp > old_sp) - && ((uintptr_t)new_sp - (uintptr_t)old_sp > 1000000)) return NULL; - } - if ((uintptr_t)new_sp & (sizeof(void *) - 1)) return NULL; - return new_sp; -} - -// This ensures that GetStackTrace stes up the Link Register properly. -void StacktracePowerPCDummyFunction() __attribute__((noinline)); -void StacktracePowerPCDummyFunction() { __asm__ volatile(""); } - -// If you change this function, also change GetStackFrames below. -int GetStackTrace(void** result, int max_depth, int skip_count) { - void **sp; - // Apple OS X uses an old version of gnu as -- both Darwin 7.9.0 (Panther) - // and Darwin 8.8.1 (Tiger) use as 1.38. This means we have to use a - // different asm syntax. I don't know quite the best way to discriminate - // systems using the old as from the new one; I've gone with __APPLE__. -#ifdef __APPLE__ - __asm__ volatile ("mr %0,r1" : "=r" (sp)); -#else - __asm__ volatile ("mr %0,1" : "=r" (sp)); -#endif - - // On PowerPC, the "Link Register" or "Link Record" (LR), is a stack - // entry that holds the return address of the subroutine call (what - // instruction we run after our function finishes). This is the - // same as the stack-pointer of our parent routine, which is what we - // want here. While the compiler will always(?) set up LR for - // subroutine calls, it may not for leaf functions (such as this one). - // This routine forces the compiler (at least gcc) to push it anyway. - StacktracePowerPCDummyFunction(); - - // The LR save area is used by the callee, so the top entry is bogus. - skip_count++; - - int n = 0; - while (sp && n < max_depth) { - if (skip_count > 0) { - skip_count--; - } else { - // PowerPC has 3 main ABIs, which say where in the stack the - // Link Register is. For DARWIN and AIX (used by apple and - // linux ppc64), it's in sp[2]. For SYSV (used by linux ppc), - // it's in sp[1]. -#if defined(_CALL_AIX) || defined(_CALL_DARWIN) - result[n++] = *(sp+2); -#elif defined(_CALL_SYSV) - result[n++] = *(sp+1); -#elif defined(__APPLE__) || (defined(__linux) && defined(__PPC64__)) - // This check is in case the compiler doesn't define _CALL_AIX/etc. - result[n++] = *(sp+2); -#elif defined(__linux) - // This check is in case the compiler doesn't define _CALL_SYSV. - result[n++] = *(sp+1); -#else -#error Need to specify the PPC ABI for your archiecture. -#endif - } - // Use strict unwinding rules. - sp = NextStackFrame(sp); - } - return n; -} - -_END_GOOGLE_NAMESPACE_ diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stacktrace_unittest.cc b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stacktrace_unittest.cc deleted file mode 100644 index 0acd2c9af3fc..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stacktrace_unittest.cc +++ /dev/null @@ -1,157 +0,0 @@ -// Copyright (c) 2004, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#include "utilities.h" - -#include -#include -#include "config.h" -#include "base/commandlineflags.h" -#include "glog/logging.h" -#include "stacktrace.h" - -#ifdef HAVE_EXECINFO_H -# include -#endif - -using namespace GOOGLE_NAMESPACE; - -#ifdef HAVE_STACKTRACE - -// Obtain a backtrace, verify that the expected callers are present in the -// backtrace, and maybe print the backtrace to stdout. - -//-----------------------------------------------------------------------// -void CheckStackTraceLeaf(); -void CheckStackTrace4(int i); -void CheckStackTrace3(int i); -void CheckStackTrace2(int i); -void CheckStackTrace1(int i); -void CheckStackTrace(int i); -//-----------------------------------------------------------------------// - -// The sequence of functions whose return addresses we expect to see in the -// backtrace. -const int BACKTRACE_STEPS = 6; -void * expected_stack[BACKTRACE_STEPS] = { - (void *) &CheckStackTraceLeaf, - (void *) &CheckStackTrace4, - (void *) &CheckStackTrace3, - (void *) &CheckStackTrace2, - (void *) &CheckStackTrace1, - (void *) &CheckStackTrace, -}; - -// Depending on the architecture/compiler/libraries, (not sure which) -// the current function may or may not appear in the backtrace. -// For gcc-2: -// -// stack[0] is ret addr within CheckStackTrace4 -// stack[1] is ret addr within CheckStackTrace3 -// stack[2] is ret addr within CheckStackTrace2 -// stack[3] is ret addr within CheckStackTrace1 -// stack[4] is ret addr within CheckStackTrace -// -// For gcc3-k8: -// -// stack[0] is ret addr within CheckStackTraceLeaf -// stack[1] is ret addr within CheckStackTrace4 -// ... -// stack[5] is ret addr within CheckStackTrace - -//-----------------------------------------------------------------------// - -const int kMaxFnLen = 0x40; // assume relevant functions are only this long - -void CheckRetAddrIsInFunction( void * ret_addr, void * function_start_addr) -{ - CHECK_GE(ret_addr, function_start_addr); - CHECK_LE(ret_addr, (void *) ((char *) function_start_addr + kMaxFnLen)); -} - -//-----------------------------------------------------------------------// - -void CheckStackTraceLeaf(void) { - const int STACK_LEN = 10; - void *stack[STACK_LEN]; - int size; - - size = GetStackTrace(stack, STACK_LEN, 0); - printf("Obtained %d stack frames.\n", size); - CHECK_LE(size, STACK_LEN); - - if (1) { -#ifdef HAVE_EXECINFO_H - char **strings = backtrace_symbols(stack, size); - printf("Obtained %d stack frames.\n", size); - for (int i = 0; i < size; i++) - printf("%s %p\n", strings[i], stack[i]); - printf("CheckStackTrace() addr: %p\n", &CheckStackTrace); - free(strings); -#endif - } - for (int i = 0; i < BACKTRACE_STEPS; i++) { - printf("Backtrace %d: expected: %p..%p actual: %p ... ", - i, expected_stack[i], - reinterpret_cast(expected_stack[i]) + kMaxFnLen, stack[i]); - CheckRetAddrIsInFunction(stack[i], expected_stack[i]); - printf("OK\n"); - } - - // Check if the second stacktrace returns the same size. - CHECK_EQ(size, GetStackTrace(stack, STACK_LEN, 0)); -} - -//-----------------------------------------------------------------------// - -/* Dummy functions to make the backtrace more interesting. */ -void CheckStackTrace4(int i) { for (int j = i; j >= 0; j--) CheckStackTraceLeaf(); } -void CheckStackTrace3(int i) { for (int j = i; j >= 0; j--) CheckStackTrace4(j); } -void CheckStackTrace2(int i) { for (int j = i; j >= 0; j--) CheckStackTrace3(j); } -void CheckStackTrace1(int i) { for (int j = i; j >= 0; j--) CheckStackTrace2(j); } -void CheckStackTrace(int i) { for (int j = i; j >= 0; j--) CheckStackTrace1(j); } - -//-----------------------------------------------------------------------// - -int main(int argc, char ** argv) { - FLAGS_logtostderr = true; - InitGoogleLogging(argv[0]); - - CheckStackTrace(0); - - printf("PASS\n"); - return 0; -} - -#else -int main() { - printf("PASS (no stacktrace support)\n"); - return 0; -} -#endif // HAVE_STACKTRACE diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stacktrace_x86-inl.h b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stacktrace_x86-inl.h deleted file mode 100644 index cfd31f783e35..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stacktrace_x86-inl.h +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright (c) 2000 - 2007, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Produce stack trace - -#include // for uintptr_t - -#include "utilities.h" // for OS_* macros - -#if !defined(OS_WINDOWS) -#include -#include -#endif - -#include // for NULL -#include "stacktrace.h" - -_START_GOOGLE_NAMESPACE_ - -// Given a pointer to a stack frame, locate and return the calling -// stackframe, or return NULL if no stackframe can be found. Perform sanity -// checks (the strictness of which is controlled by the boolean parameter -// "STRICT_UNWINDING") to reduce the chance that a bad pointer is returned. -template -static void **NextStackFrame(void **old_sp) { - void **new_sp = (void **) *old_sp; - - // Check that the transition from frame pointer old_sp to frame - // pointer new_sp isn't clearly bogus - if (STRICT_UNWINDING) { - // With the stack growing downwards, older stack frame must be - // at a greater address that the current one. - if (new_sp <= old_sp) return NULL; - // Assume stack frames larger than 100,000 bytes are bogus. - if ((uintptr_t)new_sp - (uintptr_t)old_sp > 100000) return NULL; - } else { - // In the non-strict mode, allow discontiguous stack frames. - // (alternate-signal-stacks for example). - if (new_sp == old_sp) return NULL; - // And allow frames upto about 1MB. - if ((new_sp > old_sp) - && ((uintptr_t)new_sp - (uintptr_t)old_sp > 1000000)) return NULL; - } - if ((uintptr_t)new_sp & (sizeof(void *) - 1)) return NULL; -#ifdef __i386__ - // On 64-bit machines, the stack pointer can be very close to - // 0xffffffff, so we explicitly check for a pointer into the - // last two pages in the address space - if ((uintptr_t)new_sp >= 0xffffe000) return NULL; -#endif -#if !defined(OS_WINDOWS) - if (!STRICT_UNWINDING) { - // Lax sanity checks cause a crash in 32-bit tcmalloc/crash_reason_test - // on AMD-based machines with VDSO-enabled kernels. - // Make an extra sanity check to insure new_sp is readable. - // Note: NextStackFrame() is only called while the program - // is already on its last leg, so it's ok to be slow here. - static int page_size = getpagesize(); - void *new_sp_aligned = (void *)((uintptr_t)new_sp & ~(page_size - 1)); - if (msync(new_sp_aligned, page_size, MS_ASYNC) == -1) - return NULL; - } -#endif - return new_sp; -} - -// If you change this function, also change GetStackFrames below. -int GetStackTrace(void** result, int max_depth, int skip_count) { - void **sp; -#ifdef __i386__ - // Stack frame format: - // sp[0] pointer to previous frame - // sp[1] caller address - // sp[2] first argument - // ... - sp = (void **)&result - 2; -#endif - -#ifdef __x86_64__ - // __builtin_frame_address(0) can return the wrong address on gcc-4.1.0-k8 - unsigned long rbp; - // Move the value of the register %rbp into the local variable rbp. - // We need 'volatile' to prevent this instruction from getting moved - // around during optimization to before function prologue is done. - // An alternative way to achieve this - // would be (before this __asm__ instruction) to call Noop() defined as - // static void Noop() __attribute__ ((noinline)); // prevent inlining - // static void Noop() { asm(""); } // prevent optimizing-away - __asm__ volatile ("mov %%rbp, %0" : "=r" (rbp)); - // Arguments are passed in registers on x86-64, so we can't just - // offset from &result - sp = (void **) rbp; -#endif - - int n = 0; - while (sp && n < max_depth) { - if (*(sp+1) == (void *)0) { - // In 64-bit code, we often see a frame that - // points to itself and has a return address of 0. - break; - } - if (skip_count > 0) { - skip_count--; - } else { - result[n++] = *(sp+1); - } - // Use strict unwinding rules. - sp = NextStackFrame(sp); - } - return n; -} - -_END_GOOGLE_NAMESPACE_ diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stacktrace_x86_64-inl.h b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stacktrace_x86_64-inl.h deleted file mode 100644 index f7d1dca85bc1..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stacktrace_x86_64-inl.h +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright (c) 2005 - 2007, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: Arun Sharma -// -// Produce stack trace using libgcc - -extern "C" { -#include // for NULL -#include // ABI defined unwinder -} -#include "stacktrace.h" - -_START_GOOGLE_NAMESPACE_ - -typedef struct { - void **result; - int max_depth; - int skip_count; - int count; -} trace_arg_t; - - -// Workaround for the malloc() in _Unwind_Backtrace() issue. -static _Unwind_Reason_Code nop_backtrace(struct _Unwind_Context *uc, void *opq) { - return _URC_NO_REASON; -} - - -// This code is not considered ready to run until -// static initializers run so that we are guaranteed -// that any malloc-related initialization is done. -static bool ready_to_run = false; -class StackTraceInit { - public: - StackTraceInit() { - // Extra call to force initialization - _Unwind_Backtrace(nop_backtrace, NULL); - ready_to_run = true; - } -}; - -static StackTraceInit module_initializer; // Force initialization - -static _Unwind_Reason_Code GetOneFrame(struct _Unwind_Context *uc, void *opq) { - trace_arg_t *targ = (trace_arg_t *) opq; - - if (targ->skip_count > 0) { - targ->skip_count--; - } else { - targ->result[targ->count++] = (void *) _Unwind_GetIP(uc); - } - - if (targ->count == targ->max_depth) - return _URC_END_OF_STACK; - - return _URC_NO_REASON; -} - -// If you change this function, also change GetStackFrames below. -int GetStackTrace(void** result, int max_depth, int skip_count) { - if (!ready_to_run) - return 0; - - trace_arg_t targ; - - skip_count += 1; // Do not include the "GetStackTrace" frame - - targ.result = result; - targ.max_depth = max_depth; - targ.skip_count = skip_count; - targ.count = 0; - - _Unwind_Backtrace(GetOneFrame, &targ); - - return targ.count; -} - -_END_GOOGLE_NAMESPACE_ diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stl_logging_unittest.cc b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stl_logging_unittest.cc deleted file mode 100644 index 0ed4695da499..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stl_logging_unittest.cc +++ /dev/null @@ -1,191 +0,0 @@ -// Copyright (c) 2003, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#include "utilities.h" -#include "config.h" - -#ifdef HAVE_USING_OPERATOR - -#include "glog/stl_logging.h" - -#include -#include -#include -#include -#include - -#ifdef __GNUC__ -# include -# include -#endif - -#include "glog/logging.h" -#include "googletest.h" - -using namespace std; -#ifdef __GNUC__ -using namespace __gnu_cxx; -#endif - -struct user_hash { - size_t operator()(int x) const { return x; } -}; - -void TestSTLLogging() { - { - // Test a sequence. - vector v; - v.push_back(10); - v.push_back(20); - v.push_back(30); - char ss_buf[1000]; - ostrstream ss(ss_buf, sizeof(ss_buf)); - // Just ostrstream s1; leaks heap. - ss << v << ends; - CHECK_STREQ(ss.str(), "10 20 30"); - vector copied_v(v); - CHECK_EQ(v, copied_v); // This must compile. - } - - { - // Test a sorted pair associative container. - map< int, string > m; - m[20] = "twenty"; - m[10] = "ten"; - m[30] = "thirty"; - char ss_buf[1000]; - ostrstream ss(ss_buf, sizeof(ss_buf)); - ss << m << ends; - CHECK_STREQ(ss.str(), "(10, ten) (20, twenty) (30, thirty)"); - map< int, string > copied_m(m); - CHECK_EQ(m, copied_m); // This must compile. - } - -#ifdef __GNUC__ - { - // Test a hashed simple associative container. - hash_set hs; - hs.insert(10); - hs.insert(20); - hs.insert(30); - char ss_buf[1000]; - ostrstream ss(ss_buf, sizeof(ss_buf)); - ss << hs << ends; - CHECK_STREQ(ss.str(), "10 20 30"); - hash_set copied_hs(hs); - CHECK_EQ(hs, copied_hs); // This must compile. - } -#endif - -#ifdef __GNUC__ - { - // Test a hashed pair associative container. - hash_map hm; - hm[10] = "ten"; - hm[20] = "twenty"; - hm[30] = "thirty"; - char ss_buf[1000]; - ostrstream ss(ss_buf, sizeof(ss_buf)); - ss << hm << ends; - CHECK_STREQ(ss.str(), "(10, ten) (20, twenty) (30, thirty)"); - hash_map copied_hm(hm); - CHECK_EQ(hm, copied_hm); // this must compile - } -#endif - - { - // Test a long sequence. - vector v; - string expected; - for (int i = 0; i < 100; i++) { - v.push_back(i); - if (i > 0) expected += ' '; - char buf[256]; - sprintf(buf, "%d", i); - expected += buf; - } - v.push_back(100); - expected += " ..."; - char ss_buf[1000]; - ostrstream ss(ss_buf, sizeof(ss_buf)); - ss << v << ends; - CHECK_STREQ(ss.str(), expected.c_str()); - } - - { - // Test a sorted pair associative container. - // Use a non-default comparison functor. - map< int, string, greater > m; - m[20] = "twenty"; - m[10] = "ten"; - m[30] = "thirty"; - char ss_buf[1000]; - ostrstream ss(ss_buf, sizeof(ss_buf)); - ss << m << ends; - CHECK_STREQ(ss.str(), "(30, thirty) (20, twenty) (10, ten)"); - map< int, string, greater > copied_m(m); - CHECK_EQ(m, copied_m); // This must compile. - } - -#ifdef __GNUC__ - { - // Test a hashed simple associative container. - // Use a user defined hash function. - hash_set hs; - hs.insert(10); - hs.insert(20); - hs.insert(30); - char ss_buf[1000]; - ostrstream ss(ss_buf, sizeof(ss_buf)); - ss << hs << ends; - CHECK_STREQ(ss.str(), "10 20 30"); - hash_set copied_hs(hs); - CHECK_EQ(hs, copied_hs); // This must compile. - } -#endif -} - -int main(int argc, char** argv) { - TestSTLLogging(); - std::cout << "PASS\n"; - return 0; -} - -#else - -#include - -int main(int argc, char** argv) { - std::cout << "We don't support stl_logging for this compiler.\n" - << "(we need compiler support of 'using ::operator<<' " - << "for this feature.)\n"; - return 0; -} - -#endif // HAVE_USING_OPERATOR diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/symbolize.cc b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/symbolize.cc deleted file mode 100644 index 3465de6c6feb..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/symbolize.cc +++ /dev/null @@ -1,681 +0,0 @@ -// Copyright (c) 2006, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: Satoru Takabayashi -// Stack-footprint reduction work done by Raksit Ashok -// -// Implementation note: -// -// We don't use heaps but only use stacks. We want to reduce the -// stack consumption so that the symbolizer can run on small stacks. -// -// Here are some numbers collected with GCC 4.1.0 on x86: -// - sizeof(Elf32_Sym) = 16 -// - sizeof(Elf32_Shdr) = 40 -// - sizeof(Elf64_Sym) = 24 -// - sizeof(Elf64_Shdr) = 64 -// -// This implementation is intended to be async-signal-safe but uses -// some functions which are not guaranteed to be so, such as memchr() -// and memmove(). We assume they are async-signal-safe. -// - -#include "utilities.h" - -#if defined(HAVE_SYMBOLIZE) - -#include - -#include "symbolize.h" -#include "demangle.h" - -_START_GOOGLE_NAMESPACE_ - -// We don't use assert() since it's not guaranteed to be -// async-signal-safe. Instead we define a minimal assertion -// macro. So far, we don't need pretty printing for __FILE__, etc. - -// A wrapper for abort() to make it callable in ? :. -static int AssertFail() { - abort(); - return 0; // Should not reach. -} - -#define SAFE_ASSERT(expr) ((expr) ? 0 : AssertFail()) - -static SymbolizeCallback g_symbolize_callback = NULL; -void InstallSymbolizeCallback(SymbolizeCallback callback) { - g_symbolize_callback = callback; -} - -// This function wraps the Demangle function to provide an interface -// where the input symbol is demangled in-place. -// To keep stack consumption low, we would like this function to not -// get inlined. -static ATTRIBUTE_NOINLINE void DemangleInplace(char *out, int out_size) { - char demangled[256]; // Big enough for sane demangled symbols. - if (Demangle(out, demangled, sizeof(demangled))) { - // Demangling succeeded. Copy to out if the space allows. - int len = strlen(demangled); - if (len + 1 <= out_size) { // +1 for '\0'. - SAFE_ASSERT(len < sizeof(demangled)); - memmove(out, demangled, len + 1); - } - } -} - -_END_GOOGLE_NAMESPACE_ - -#if defined(__ELF__) - -#include -#include -#include -#include -#include -#include // For ElfW() macro. -#include -#include -#include -#include -#include -#include -#include -#include - -#include "symbolize.h" -#include "config.h" -#include "glog/raw_logging.h" - -// Re-runs fn until it doesn't cause EINTR. -#define NO_INTR(fn) do {} while ((fn) < 0 && errno == EINTR) - -_START_GOOGLE_NAMESPACE_ - -// Read up to "count" bytes from file descriptor "fd" into the buffer -// starting at "buf" while handling short reads and EINTR. On -// success, return the number of bytes read. Otherwise, return -1. -static ssize_t ReadPersistent(const int fd, void *buf, const size_t count) { - SAFE_ASSERT(fd >= 0); - SAFE_ASSERT(count >= 0 && count <= std::numeric_limits::max()); - char *buf0 = reinterpret_cast(buf); - ssize_t num_bytes = 0; - while (num_bytes < count) { - ssize_t len; - NO_INTR(len = read(fd, buf0 + num_bytes, count - num_bytes)); - if (len < 0) { // There was an error other than EINTR. - return -1; - } - if (len == 0) { // Reached EOF. - break; - } - num_bytes += len; - } - SAFE_ASSERT(num_bytes <= count); - return num_bytes; -} - -// Read up to "count" bytes from "offset" in the file pointed by file -// descriptor "fd" into the buffer starting at "buf". On success, -// return the number of bytes read. Otherwise, return -1. -static ssize_t ReadFromOffset(const int fd, void *buf, - const size_t count, const off_t offset) { - off_t off = lseek(fd, offset, SEEK_SET); - if (off == (off_t)-1) { - return -1; - } - return ReadPersistent(fd, buf, count); -} - -// Try reading exactly "count" bytes from "offset" bytes in a file -// pointed by "fd" into the buffer starting at "buf" while handling -// short reads and EINTR. On success, return true. Otherwise, return -// false. -static bool ReadFromOffsetExact(const int fd, void *buf, - const size_t count, const off_t offset) { - ssize_t len = ReadFromOffset(fd, buf, count, offset); - return len == count; -} - -// Returns elf_header.e_type if the file pointed by fd is an ELF binary. -static int FileGetElfType(const int fd) { - ElfW(Ehdr) elf_header; - if (!ReadFromOffsetExact(fd, &elf_header, sizeof(elf_header), 0)) { - return -1; - } - if (memcmp(elf_header.e_ident, ELFMAG, SELFMAG) != 0) { - return -1; - } - return elf_header.e_type; -} - -// Read the section headers in the given ELF binary, and if a section -// of the specified type is found, set the output to this section header -// and return true. Otherwise, return false. -// To keep stack consumption low, we would like this function to not get -// inlined. -static ATTRIBUTE_NOINLINE bool -GetSectionHeaderByType(const int fd, ElfW(Half) sh_num, const off_t sh_offset, - ElfW(Word) type, ElfW(Shdr) *out) { - // Read at most 16 section headers at a time to save read calls. - ElfW(Shdr) buf[16]; - for (int i = 0; i < sh_num;) { - const ssize_t num_bytes_left = (sh_num - i) * sizeof(buf[0]); - const ssize_t num_bytes_to_read = - (sizeof(buf) > num_bytes_left) ? num_bytes_left : sizeof(buf); - const ssize_t len = ReadFromOffset(fd, buf, num_bytes_to_read, - sh_offset + i * sizeof(buf[0])); - SAFE_ASSERT(len % sizeof(buf[0]) == 0); - const ssize_t num_headers_in_buf = len / sizeof(buf[0]); - SAFE_ASSERT(num_headers_in_buf <= sizeof(buf) / sizeof(buf[0])); - for (int j = 0; j < num_headers_in_buf; ++j) { - if (buf[j].sh_type == type) { - *out = buf[j]; - return true; - } - } - i += num_headers_in_buf; - } - return false; -} - -// There is no particular reason to limit section name to 63 characters, -// but there has (as yet) been no need for anything longer either. -const int kMaxSectionNameLen = 64; - -// name_len should include terminating '\0'. -bool GetSectionHeaderByName(int fd, const char *name, size_t name_len, - ElfW(Shdr) *out) { - ElfW(Ehdr) elf_header; - if (!ReadFromOffsetExact(fd, &elf_header, sizeof(elf_header), 0)) { - return false; - } - - ElfW(Shdr) shstrtab; - off_t shstrtab_offset = (elf_header.e_shoff + - elf_header.e_shentsize * elf_header.e_shstrndx); - if (!ReadFromOffsetExact(fd, &shstrtab, sizeof(shstrtab), shstrtab_offset)) { - return false; - } - - for (int i = 0; i < elf_header.e_shnum; ++i) { - off_t section_header_offset = (elf_header.e_shoff + - elf_header.e_shentsize * i); - if (!ReadFromOffsetExact(fd, out, sizeof(*out), section_header_offset)) { - return false; - } - char header_name[kMaxSectionNameLen]; - if (sizeof(header_name) < name_len) { - RAW_LOG(WARNING, "Section name '%s' is too long (%"PRIuS"); " - "section will not be found (even if present).", name, name_len); - // No point in even trying. - return false; - } - off_t name_offset = shstrtab.sh_offset + out->sh_name; - ssize_t n_read = ReadFromOffset(fd, &header_name, name_len, name_offset); - if (n_read == -1) { - return false; - } else if (n_read != name_len) { - // Short read -- name could be at end of file. - continue; - } - if (memcmp(header_name, name, name_len) == 0) { - return true; - } - } - return false; -} - -// Read a symbol table and look for the symbol containing the -// pc. Iterate over symbols in a symbol table and look for the symbol -// containing "pc". On success, return true and write the symbol name -// to out. Otherwise, return false. -// To keep stack consumption low, we would like this function to not get -// inlined. -static ATTRIBUTE_NOINLINE bool -FindSymbol(uint64_t pc, const int fd, char *out, int out_size, - uint64_t symbol_offset, const ElfW(Shdr) *strtab, - const ElfW(Shdr) *symtab) { - if (symtab == NULL) { - return false; - } - const int num_symbols = symtab->sh_size / symtab->sh_entsize; - for (int i = 0; i < num_symbols;) { - off_t offset = symtab->sh_offset + i * symtab->sh_entsize; - - // If we are reading Elf64_Sym's, we want to limit this array to - // 32 elements (to keep stack consumption low), otherwise we can - // have a 64 element Elf32_Sym array. -#if __WORDSIZE == 64 -#define NUM_SYMBOLS 32 -#else -#define NUM_SYMBOLS 64 -#endif - - // Read at most NUM_SYMBOLS symbols at once to save read() calls. - ElfW(Sym) buf[NUM_SYMBOLS]; - const ssize_t len = ReadFromOffset(fd, &buf, sizeof(buf), offset); - SAFE_ASSERT(len % sizeof(buf[0]) == 0); - const ssize_t num_symbols_in_buf = len / sizeof(buf[0]); - SAFE_ASSERT(num_symbols_in_buf <= sizeof(buf)/sizeof(buf[0])); - for (int j = 0; j < num_symbols_in_buf; ++j) { - const ElfW(Sym)& symbol = buf[j]; - uint64_t start_address = symbol.st_value; - start_address += symbol_offset; - uint64_t end_address = start_address + symbol.st_size; - if (symbol.st_value != 0 && // Skip null value symbols. - symbol.st_shndx != 0 && // Skip undefined symbols. - start_address <= pc && pc < end_address) { - ssize_t len1 = ReadFromOffset(fd, out, out_size, - strtab->sh_offset + symbol.st_name); - if (len1 <= 0 || memchr(out, '\0', out_size) == NULL) { - return false; - } - return true; // Obtained the symbol name. - } - } - i += num_symbols_in_buf; - } - return false; -} - -// Get the symbol name of "pc" from the file pointed by "fd". Process -// both regular and dynamic symbol tables if necessary. On success, -// write the symbol name to "out" and return true. Otherwise, return -// false. -static bool GetSymbolFromObjectFile(const int fd, uint64_t pc, - char *out, int out_size, - uint64_t map_start_address) { - // Read the ELF header. - ElfW(Ehdr) elf_header; - if (!ReadFromOffsetExact(fd, &elf_header, sizeof(elf_header), 0)) { - return false; - } - - uint64_t symbol_offset = 0; - if (elf_header.e_type == ET_DYN) { // DSO needs offset adjustment. - symbol_offset = map_start_address; - } - - ElfW(Shdr) symtab, strtab; - - // Consult a regular symbol table first. - if (!GetSectionHeaderByType(fd, elf_header.e_shnum, elf_header.e_shoff, - SHT_SYMTAB, &symtab)) { - return false; - } - if (!ReadFromOffsetExact(fd, &strtab, sizeof(strtab), elf_header.e_shoff + - symtab.sh_link * sizeof(symtab))) { - return false; - } - if (FindSymbol(pc, fd, out, out_size, symbol_offset, - &strtab, &symtab)) { - return true; // Found the symbol in a regular symbol table. - } - - // If the symbol is not found, then consult a dynamic symbol table. - if (!GetSectionHeaderByType(fd, elf_header.e_shnum, elf_header.e_shoff, - SHT_DYNSYM, &symtab)) { - return false; - } - if (!ReadFromOffsetExact(fd, &strtab, sizeof(strtab), elf_header.e_shoff + - symtab.sh_link * sizeof(symtab))) { - return false; - } - if (FindSymbol(pc, fd, out, out_size, symbol_offset, - &strtab, &symtab)) { - return true; // Found the symbol in a dynamic symbol table. - } - - return false; -} - -namespace { -// Thin wrapper around a file descriptor so that the file descriptor -// gets closed for sure. -struct FileDescriptor { - const int fd_; - explicit FileDescriptor(int fd) : fd_(fd) {} - ~FileDescriptor() { - if (fd_ >= 0) { - NO_INTR(close(fd_)); - } - } - int get() { return fd_; } - - private: - explicit FileDescriptor(const FileDescriptor&); - void operator=(const FileDescriptor&); -}; - -// Helper class for reading lines from file. -// -// Note: we don't use ProcMapsIterator since the object is big (it has -// a 5k array member) and uses async-unsafe functions such as sscanf() -// and snprintf(). -class LineReader { - public: - explicit LineReader(int fd, char *buf, int buf_len) : fd_(fd), - buf_(buf), buf_len_(buf_len), bol_(buf), eol_(buf), eod_(buf) { - } - - // Read '\n'-terminated line from file. On success, modify "bol" - // and "eol", then return true. Otherwise, return false. - // - // Note: if the last line doesn't end with '\n', the line will be - // dropped. It's an intentional behavior to make the code simple. - bool ReadLine(const char **bol, const char **eol) { - if (BufferIsEmpty()) { // First time. - const ssize_t num_bytes = ReadPersistent(fd_, buf_, buf_len_); - if (num_bytes <= 0) { // EOF or error. - return false; - } - eod_ = buf_ + num_bytes; - bol_ = buf_; - } else { - bol_ = eol_ + 1; // Advance to the next line in the buffer. - SAFE_ASSERT(bol_ <= eod_); // "bol_" can point to "eod_". - if (!HasCompleteLine()) { - const int incomplete_line_length = eod_ - bol_; - // Move the trailing incomplete line to the beginning. - memmove(buf_, bol_, incomplete_line_length); - // Read text from file and append it. - char * const append_pos = buf_ + incomplete_line_length; - const int capacity_left = buf_len_ - incomplete_line_length; - const ssize_t num_bytes = ReadPersistent(fd_, append_pos, - capacity_left); - if (num_bytes <= 0) { // EOF or error. - return false; - } - eod_ = append_pos + num_bytes; - bol_ = buf_; - } - } - eol_ = FindLineFeed(); - if (eol_ == NULL) { // '\n' not found. Malformed line. - return false; - } - *eol_ = '\0'; // Replace '\n' with '\0'. - - *bol = bol_; - *eol = eol_; - return true; - } - - // Beginning of line. - const char *bol() { - return bol_; - } - - // End of line. - const char *eol() { - return eol_; - } - - private: - explicit LineReader(const LineReader&); - void operator=(const LineReader&); - - char *FindLineFeed() { - return reinterpret_cast(memchr(bol_, '\n', eod_ - bol_)); - } - - bool BufferIsEmpty() { - return buf_ == eod_; - } - - bool HasCompleteLine() { - return !BufferIsEmpty() && FindLineFeed() != NULL; - } - - const int fd_; - char * const buf_; - const int buf_len_; - char *bol_; - char *eol_; - const char *eod_; // End of data in "buf_". -}; -} // namespace - -// Place the hex number read from "start" into "*hex". The pointer to -// the first non-hex character or "end" is returned. -static char *GetHex(const char *start, const char *end, uint64_t *hex) { - *hex = 0; - const char *p; - for (p = start; p < end; ++p) { - int ch = *p; - if ((ch >= '0' && ch <= '9') || - (ch >= 'A' && ch <= 'F') || (ch >= 'a' && ch <= 'f')) { - *hex = (*hex << 4) | (ch < 'A' ? ch - '0' : (ch & 0xF) + 9); - } else { // Encountered the first non-hex character. - break; - } - } - SAFE_ASSERT(p <= end); - return const_cast(p); -} - -// Search for the object file (from /proc/self/maps) that contains -// the specified pc. If found, open this file and return the file handle, -// and also set start_address to the start address of where this object -// file is mapped to in memory. Otherwise, return -1. -static ATTRIBUTE_NOINLINE int -OpenObjectFileContainingPcAndGetStartAddress(uint64_t pc, - uint64_t &start_address) { - int object_fd; - - // Open /proc/self/maps. - int maps_fd; - NO_INTR(maps_fd = open("/proc/self/maps", O_RDONLY)); - FileDescriptor wrapped_maps_fd(maps_fd); - if (wrapped_maps_fd.get() < 0) { - return -1; - } - - // Iterate over maps and look for the map containing the pc. Then - // look into the symbol tables inside. - char buf[1024]; // Big enough for line of sane /proc/self/maps - LineReader reader(wrapped_maps_fd.get(), buf, sizeof(buf)); - while (true) { - const char *cursor; - const char *eol; - if (!reader.ReadLine(&cursor, &eol)) { // EOF or malformed line. - return -1; - } - - // Start parsing line in /proc/self/maps. Here is an example: - // - // 08048000-0804c000 r-xp 00000000 08:01 2142121 /bin/cat - // - // We want start address (08048000), end address (0804c000), flags - // (r-xp) and file name (/bin/cat). - - // Read start address. - cursor = GetHex(cursor, eol, &start_address); - if (cursor == eol || *cursor != '-') { - return -1; // Malformed line. - } - ++cursor; // Skip '-'. - - // Read end address. - uint64_t end_address; - cursor = GetHex(cursor, eol, &end_address); - if (cursor == eol || *cursor != ' ') { - return -1; // Malformed line. - } - ++cursor; // Skip ' '. - - // Check start and end addresses. - if (!(start_address <= pc && pc < end_address)) { - continue; // We skip this map. PC isn't in this map. - } - - // Read flags. Skip flags until we encounter a space or eol. - const char * const flags_start = cursor; - while (cursor < eol && *cursor != ' ') { - ++cursor; - } - // We expect at least four letters for flags (ex. "r-xp"). - if (cursor == eol || cursor < flags_start + 4) { - return -1; // Malformed line. - } - - // Check flags. We are only interested in "r-x" maps. - if (memcmp(flags_start, "r-x", 3) != 0) { // Not a "r-x" map. - continue; // We skip this map. - } - ++cursor; // Skip ' '. - - // Skip to file name. "cursor" now points to file offset. We need to - // skip at least three spaces for file offset, dev, and inode. - int num_spaces = 0; - while (cursor < eol) { - if (*cursor == ' ') { - ++num_spaces; - } else if (num_spaces >= 3) { - // The first non-space character after skipping three spaces - // is the beginning of the file name. - break; - } - ++cursor; - } - if (cursor == eol) { - return -1; // Malformed line. - } - - // Finally, "cursor" now points to file name of our interest. - NO_INTR(object_fd = open(cursor, O_RDONLY)); - if (object_fd < 0) { - return -1; - } - return object_fd; - } -} - -// The implementation of our symbolization routine. If it -// successfully finds the symbol containing "pc" and obtains the -// symbol name, returns true and write the symbol name to "out". -// Otherwise, returns false. If Callback function is installed via -// InstallSymbolizeCallback(), the function is also called in this function, -// and "out" is used as its output. -// To keep stack consumption low, we would like this function to not -// get inlined. -static ATTRIBUTE_NOINLINE bool SymbolizeAndDemangle(void *pc, char *out, - int out_size) { - uint64_t pc0 = reinterpret_cast(pc); - uint64_t start_address = 0; - - int object_fd = OpenObjectFileContainingPcAndGetStartAddress(pc0, - start_address); - if (object_fd == -1) { - return false; - } - FileDescriptor wrapped_object_fd(object_fd); - int elf_type = FileGetElfType(wrapped_object_fd.get()); - if (elf_type == -1) { - return false; - } - if (g_symbolize_callback) { - // Run the call back if it's installed. - // Note: relocation (and much of the rest of this code) will be - // wrong for prelinked shared libraries and PIE executables. - uint64 relocation = (elf_type == ET_DYN) ? start_address : 0; - int num_bytes_written = g_symbolize_callback(wrapped_object_fd.get(), - pc, out, out_size, - relocation); - if (num_bytes_written > 0) { - out += num_bytes_written; - out_size -= num_bytes_written; - } - } - if (!GetSymbolFromObjectFile(wrapped_object_fd.get(), pc0, - out, out_size, start_address)) { - return false; - } - - // Symbolization succeeded. Now we try to demangle the symbol. - DemangleInplace(out, out_size); - return true; -} - -_END_GOOGLE_NAMESPACE_ - -#elif defined(OS_MACOSX) && defined(HAVE_DLADDR) - -#include -#include - -_START_GOOGLE_NAMESPACE_ - -static ATTRIBUTE_NOINLINE bool SymbolizeAndDemangle(void *pc, char *out, - int out_size) { - Dl_info info; - if (dladdr(pc, &info)) { - if (strlen(info.dli_sname) < out_size) { - strcpy(out, info.dli_sname); - // Symbolization succeeded. Now we try to demangle the symbol. - DemangleInplace(out, out_size); - return true; - } - } - return false; -} - -_END_GOOGLE_NAMESPACE_ - -#else -# error BUG: HAVE_SYMBOLIZE was wrongly set -#endif - -_START_GOOGLE_NAMESPACE_ - -bool Symbolize(void *pc, char *out, int out_size) { - SAFE_ASSERT(out_size >= 0); - return SymbolizeAndDemangle(pc, out, out_size); -} - -_END_GOOGLE_NAMESPACE_ - -#else /* HAVE_SYMBOLIZE */ - -#include - -#include "config.h" - -_START_GOOGLE_NAMESPACE_ - -// TODO: Support other environments. -bool Symbolize(void *pc, char *out, int out_size) { - assert(0); - return false; -} - -_END_GOOGLE_NAMESPACE_ - -#endif diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/symbolize.h b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/symbolize.h deleted file mode 100644 index 1ebe4dd94a25..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/symbolize.h +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright (c) 2006, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: Satoru Takabayashi -// -// This library provides Symbolize() function that symbolizes program -// counters to their corresponding symbol names on linux platforms. -// This library has a minimal implementation of an ELF symbol table -// reader (i.e. it doesn't depend on libelf, etc.). -// -// The algorithm used in Symbolize() is as follows. -// -// 1. Go through a list of maps in /proc/self/maps and find the map -// containing the program counter. -// -// 2. Open the mapped file and find a regular symbol table inside. -// Iterate over symbols in the symbol table and look for the symbol -// containing the program counter. If such a symbol is found, -// obtain the symbol name, and demangle the symbol if possible. -// If the symbol isn't found in the regular symbol table (binary is -// stripped), try the same thing with a dynamic symbol table. -// -// Note that Symbolize() is originally implemented to be used in -// FailureSignalHandler() in base/google.cc. Hence it doesn't use -// malloc() and other unsafe operations. It should be both -// thread-safe and async-signal-safe. - -#ifndef BASE_SYMBOLIZE_H_ -#define BASE_SYMBOLIZE_H_ - -#include "utilities.h" -#include "config.h" -#include "glog/logging.h" - -#ifdef HAVE_SYMBOLIZE - -#if defined(__ELF__) // defined by gcc on Linux -#include -#include // For ElfW() macro. - -// If there is no ElfW macro, let's define it by ourself. -#ifndef ElfW -# if SIZEOF_VOID_P == 4 -# define ElfW(type) Elf32_##type -# elif SIZEOF_VOID_P == 8 -# define ElfW(type) Elf64_##type -# else -# error "Unknown sizeof(void *)" -# endif -#endif - -_START_GOOGLE_NAMESPACE_ - -// Gets the section header for the given name, if it exists. Returns true on -// success. Otherwise, returns false. -bool GetSectionHeaderByName(int fd, const char *name, size_t name_len, - ElfW(Shdr) *out); - -_END_GOOGLE_NAMESPACE_ - -#endif /* __ELF__ */ - -_START_GOOGLE_NAMESPACE_ - -// Installs a callback function, which will be called right before a symbol name -// is printed. The callback is intended to be used for showing a file name and a -// line number preceding a symbol name. -// "fd" is a file descriptor of the object file containing the program -// counter "pc". The callback function should write output to "out" -// and return the size of the output written. On error, the callback -// function should return -1. -typedef int (*SymbolizeCallback)(int fd, void *pc, char *out, size_t out_size, - uint64 relocation); -void InstallSymbolizeCallback(SymbolizeCallback callback); - -_END_GOOGLE_NAMESPACE_ - -#endif - -_START_GOOGLE_NAMESPACE_ - -// Symbolizes a program counter. On success, returns true and write the -// symbol name to "out". The symbol name is demangled if possible -// (supports symbols generated by GCC 3.x or newer). Otherwise, -// returns false. -bool Symbolize(void *pc, char *out, int out_size); - -_END_GOOGLE_NAMESPACE_ - -#endif // BASE_SYMBOLIZE_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/symbolize_unittest.cc b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/symbolize_unittest.cc deleted file mode 100644 index f25909d1247b..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/symbolize_unittest.cc +++ /dev/null @@ -1,365 +0,0 @@ -// Copyright (c) 2006, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: Satoru Takabayashi -// -// Unit tests for functions in symbolize.cc. - -#include "utilities.h" - -#include -#include - -#include "glog/logging.h" -#include "symbolize.h" -#include "googletest.h" -#include "config.h" - -using namespace std; -using namespace GOOGLE_NAMESPACE; - -#if defined(HAVE_STACKTRACE) && defined(__ELF__) - -#define always_inline - -// This unit tests make sense only with GCC. -// Uses lots of GCC specific features. -#if defined(__GNUC__) && !defined(__OPENCC__) -# if __GNUC__ >= 4 -# define TEST_WITH_MODERN_GCC -# if __i386__ // always_inline isn't supported for x86_64 with GCC 4.1.0. -# undef always_inline -# define always_inline __attribute__((always_inline)) -# define HAVE_ALWAYS_INLINE -# endif // __i386__ -# else -# endif // __GNUC__ >= 4 -# if defined(__i386__) || defined(__x86_64__) -# define TEST_X86_32_AND_64 1 -# endif // defined(__i386__) || defined(__x86_64__) -#endif - -// A wrapper function for Symbolize() to make the unit test simple. -static const char *TrySymbolize(void *pc) { - static char symbol[4096]; - if (Symbolize(pc, symbol, sizeof(symbol))) { - return symbol; - } else { - return NULL; - } -} - -// Make them C linkage to avoid mangled names. -extern "C" { -void nonstatic_func() { - volatile int a = 0; - ++a; -} - -static void static_func() { - volatile int a = 0; - ++a; -} -} - -TEST(Symbolize, Symbolize) { - // We do C-style cast since GCC 2.95.3 doesn't allow - // reinterpret_cast(&func). - - // Compilers should give us pointers to them. - EXPECT_STREQ("nonstatic_func", TrySymbolize((void *)(&nonstatic_func))); - EXPECT_STREQ("static_func", TrySymbolize((void *)(&static_func))); - - EXPECT_TRUE(NULL == TrySymbolize(NULL)); -} - -struct Foo { - static void func(int x); -}; - -void ATTRIBUTE_NOINLINE Foo::func(int x) { - volatile int a = x; - ++a; -} - -// With a modern GCC, Symbolize() should return demangled symbol -// names. Function parameters should be omitted. -#ifdef TEST_WITH_MODERN_GCC -TEST(Symbolize, SymbolizeWithDemangling) { - Foo::func(100); - EXPECT_STREQ("Foo::func()", TrySymbolize((void *)(&Foo::func))); -} -#endif - -// Tests that verify that Symbolize footprint is within some limit. - -// To measure the stack footprint of the Symbolize function, we create -// a signal handler (for SIGUSR1 say) that calls the Symbolize function -// on an alternate stack. This alternate stack is initialized to some -// known pattern (0x55, 0x55, 0x55, ...). We then self-send this signal, -// and after the signal handler returns, look at the alternate stack -// buffer to see what portion has been touched. -// -// This trick gives us the the stack footprint of the signal handler. -// But the signal handler, even before the call to Symbolize, consumes -// some stack already. We however only want the stack usage of the -// Symbolize function. To measure this accurately, we install two signal -// handlers: one that does nothing and just returns, and another that -// calls Symbolize. The difference between the stack consumption of these -// two signals handlers should give us the Symbolize stack foorprint. - -static void *g_pc_to_symbolize; -static char g_symbolize_buffer[4096]; -static char *g_symbolize_result; - -static void EmptySignalHandler(int signo) {} - -static void SymbolizeSignalHandler(int signo) { - if (Symbolize(g_pc_to_symbolize, g_symbolize_buffer, - sizeof(g_symbolize_buffer))) { - g_symbolize_result = g_symbolize_buffer; - } else { - g_symbolize_result = NULL; - } -} - -const int kAlternateStackSize = 8096; -const char kAlternateStackFillValue = 0x55; - -// These helper functions look at the alternate stack buffer, and figure -// out what portion of this buffer has been touched - this is the stack -// consumption of the signal handler running on this alternate stack. -static ATTRIBUTE_NOINLINE bool StackGrowsDown(int *x) { - int y; - return &y < x; -} -static int GetStackConsumption(const char* alt_stack) { - int x; - if (StackGrowsDown(&x)) { - for (int i = 0; i < kAlternateStackSize; i++) { - if (alt_stack[i] != kAlternateStackFillValue) { - return (kAlternateStackSize - i); - } - } - } else { - for (int i = (kAlternateStackSize - 1); i >= 0; i--) { - if (alt_stack[i] != kAlternateStackFillValue) { - return i; - } - } - } - return -1; -} - -#ifdef HAVE_SIGALTSTACK - -// Call Symbolize and figure out the stack footprint of this call. -static const char *SymbolizeStackConsumption(void *pc, int *stack_consumed) { - - g_pc_to_symbolize = pc; - - // The alt-signal-stack cannot be heap allocated because there is a - // bug in glibc-2.2 where some signal handler setup code looks at the - // current stack pointer to figure out what thread is currently running. - // Therefore, the alternate stack must be allocated from the main stack - // itself. - char altstack[kAlternateStackSize]; - memset(altstack, kAlternateStackFillValue, kAlternateStackSize); - - // Set up the alt-signal-stack (and save the older one). - stack_t sigstk; - memset(&sigstk, 0, sizeof(stack_t)); - stack_t old_sigstk; - sigstk.ss_sp = altstack; - sigstk.ss_size = kAlternateStackSize; - sigstk.ss_flags = 0; - CHECK_ERR(sigaltstack(&sigstk, &old_sigstk)); - - // Set up SIGUSR1 and SIGUSR2 signal handlers (and save the older ones). - struct sigaction sa; - memset(&sa, 0, sizeof(struct sigaction)); - struct sigaction old_sa1, old_sa2; - sigemptyset(&sa.sa_mask); - sa.sa_flags = SA_ONSTACK; - - // SIGUSR1 maps to EmptySignalHandler. - sa.sa_handler = EmptySignalHandler; - CHECK_ERR(sigaction(SIGUSR1, &sa, &old_sa1)); - - // SIGUSR2 maps to SymbolizeSignalHanlder. - sa.sa_handler = SymbolizeSignalHandler; - CHECK_ERR(sigaction(SIGUSR2, &sa, &old_sa2)); - - // Send SIGUSR1 signal and measure the stack consumption of the empty - // signal handler. - CHECK_ERR(kill(getpid(), SIGUSR1)); - int stack_consumption1 = GetStackConsumption(altstack); - - // Send SIGUSR2 signal and measure the stack consumption of the symbolize - // signal handler. - CHECK_ERR(kill(getpid(), SIGUSR2)); - int stack_consumption2 = GetStackConsumption(altstack); - - // The difference between the two stack consumption values is the - // stack footprint of the Symbolize function. - if (stack_consumption1 != -1 && stack_consumption2 != -1) { - *stack_consumed = stack_consumption2 - stack_consumption1; - } else { - *stack_consumed = -1; - } - - // Log the stack consumption values. - LOG(INFO) << "Stack consumption of empty signal handler: " - << stack_consumption1; - LOG(INFO) << "Stack consumption of symbolize signal handler: " - << stack_consumption2; - LOG(INFO) << "Stack consumption of Symbolize: " << *stack_consumed; - - // Now restore the old alt-signal-stack and signal handlers. - CHECK_ERR(sigaltstack(&old_sigstk, NULL)); - CHECK_ERR(sigaction(SIGUSR1, &old_sa1, NULL)); - CHECK_ERR(sigaction(SIGUSR2, &old_sa2, NULL)); - - return g_symbolize_result; -} - -// Symbolize stack consumption should be within 2kB. -const int kStackConsumptionUpperLimit = 2048; - -TEST(Symbolize, SymbolizeStackConsumption) { - int stack_consumed; - const char* symbol; - - symbol = SymbolizeStackConsumption((void *)(&nonstatic_func), - &stack_consumed); - EXPECT_STREQ("nonstatic_func", symbol); - EXPECT_GT(stack_consumed, 0); - EXPECT_LT(stack_consumed, kStackConsumptionUpperLimit); - - symbol = SymbolizeStackConsumption((void *)(&static_func), - &stack_consumed); - EXPECT_STREQ("static_func", symbol); - EXPECT_GT(stack_consumed, 0); - EXPECT_LT(stack_consumed, kStackConsumptionUpperLimit); -} - -#ifdef TEST_WITH_MODERN_GCC -TEST(Symbolize, SymbolizeWithDemanglingStackConsumption) { - Foo::func(100); - int stack_consumed; - const char* symbol; - - symbol = SymbolizeStackConsumption((void *)(&Foo::func), &stack_consumed); - - EXPECT_STREQ("Foo::func()", symbol); - EXPECT_GT(stack_consumed, 0); - EXPECT_LT(stack_consumed, kStackConsumptionUpperLimit); -} -#endif - -#endif // HAVE_SIGALTSTACK - -// x86 specific tests. Uses some inline assembler. -extern "C" { -inline void* always_inline inline_func() { - register void *pc = NULL; -#ifdef TEST_X86_32_AND_64 - __asm__ __volatile__("call 1f; 1: pop %0" : "=r"(pc)); -#endif - return pc; -} - -void* ATTRIBUTE_NOINLINE non_inline_func() { - register void *pc = NULL; -#ifdef TEST_X86_32_AND_64 - __asm__ __volatile__("call 1f; 1: pop %0" : "=r"(pc)); -#endif - return pc; -} - -void ATTRIBUTE_NOINLINE TestWithPCInsideNonInlineFunction() { -#if defined(TEST_X86_32_AND_64) && defined(HAVE_ATTRIBUTE_NOINLINE) - void *pc = non_inline_func(); - const char *symbol = TrySymbolize(pc); - CHECK(symbol != NULL); - CHECK_STREQ(symbol, "non_inline_func"); - cout << "Test case TestWithPCInsideNonInlineFunction passed." << endl; -#endif -} - -void ATTRIBUTE_NOINLINE TestWithPCInsideInlineFunction() { -#if defined(TEST_X86_32_AND_64) && defined(HAVE_ALWAYS_INLINE) - void *pc = inline_func(); // Must be inlined. - const char *symbol = TrySymbolize(pc); - CHECK(symbol != NULL); - CHECK_STREQ(symbol, __FUNCTION__); - cout << "Test case TestWithPCInsideInlineFunction passed." << endl; -#endif -} -} - -// Test with a return address. -void ATTRIBUTE_NOINLINE TestWithReturnAddress() { -#if defined(HAVE_ATTRIBUTE_NOINLINE) - void *return_address = __builtin_return_address(0); - const char *symbol = TrySymbolize(return_address); - CHECK(symbol != NULL); - CHECK_STREQ(symbol, "main"); - cout << "Test case TestWithReturnAddress passed." << endl; -#endif -} - -int main(int argc, char **argv) { - FLAGS_logtostderr = true; - InitGoogleLogging(argv[0]); - InitGoogleTest(&argc, argv); -#ifdef HAVE_SYMBOLIZE - // We don't want to get affected by the callback interface, that may be - // used to install some callback function at InitGoogle() time. - InstallSymbolizeCallback(NULL); - - TestWithPCInsideInlineFunction(); - TestWithPCInsideNonInlineFunction(); - TestWithReturnAddress(); - return RUN_ALL_TESTS(); -#else - return 0; -#endif -} - -#else -int main() { -#ifdef HAVE_SYMBOLIZE - printf("PASS (no symbolize_unittest support)\n"); -#else - printf("PASS (no symbolize support)\n"); -#endif - return 0; -} -#endif // HAVE_STACKTRACE diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/utilities.cc b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/utilities.cc deleted file mode 100644 index 52b802a27f29..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/utilities.cc +++ /dev/null @@ -1,346 +0,0 @@ -// Copyright (c) 2008, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: Shinichiro Hamaji - -#include "utilities.h" - -#include -#include - -#include -#ifdef HAVE_SYS_TIME_H -# include -#endif -#include -#if defined(HAVE_SYSCALL_H) -#include // for syscall() -#elif defined(HAVE_SYS_SYSCALL_H) -#include // for syscall() -#endif -#ifdef HAVE_SYSLOG_H -# include -#endif - -#include "base/googleinit.h" - -using std::string; - -_START_GOOGLE_NAMESPACE_ - -static const char* g_program_invocation_short_name = NULL; -static pthread_t g_main_thread_id; - -_END_GOOGLE_NAMESPACE_ - -// The following APIs are all internal. -#ifdef HAVE_STACKTRACE - -#include "stacktrace.h" -#include "symbolize.h" -#include "base/commandlineflags.h" - -GLOG_DEFINE_bool(symbolize_stacktrace, true, - "Symbolize the stack trace in the tombstone"); - -_START_GOOGLE_NAMESPACE_ - -typedef void DebugWriter(const char*, void*); - -// The %p field width for printf() functions is two characters per byte. -// For some environments, add two extra bytes for the leading "0x". -static const int kPrintfPointerFieldWidth = 2 + 2 * sizeof(void*); - -static void DebugWriteToStderr(const char* data, void *unused) { - // This one is signal-safe. - if (write(STDERR_FILENO, data, strlen(data)) < 0) { - // Ignore errors. - } -} - -void DebugWriteToString(const char* data, void *arg) { - reinterpret_cast(arg)->append(data); -} - -#ifdef HAVE_SYMBOLIZE -// Print a program counter and its symbol name. -static void DumpPCAndSymbol(DebugWriter *writerfn, void *arg, void *pc, - const char * const prefix) { - char tmp[1024]; - const char *symbol = "(unknown)"; - // Symbolizes the previous address of pc because pc may be in the - // next function. The overrun happens when the function ends with - // a call to a function annotated noreturn (e.g. CHECK). - if (Symbolize(reinterpret_cast(pc) - 1, tmp, sizeof(tmp))) { - symbol = tmp; - } - char buf[1024]; - snprintf(buf, sizeof(buf), "%s@ %*p %s\n", - prefix, kPrintfPointerFieldWidth, pc, symbol); - writerfn(buf, arg); -} -#endif - -static void DumpPC(DebugWriter *writerfn, void *arg, void *pc, - const char * const prefix) { - char buf[100]; - snprintf(buf, sizeof(buf), "%s@ %*p\n", - prefix, kPrintfPointerFieldWidth, pc); - writerfn(buf, arg); -} - -// Dump current stack trace as directed by writerfn -static void DumpStackTrace(int skip_count, DebugWriter *writerfn, void *arg) { - // Print stack trace - void* stack[32]; - int depth = GetStackTrace(stack, ARRAYSIZE(stack), skip_count+1); - for (int i = 0; i < depth; i++) { -#if defined(HAVE_SYMBOLIZE) - if (FLAGS_symbolize_stacktrace) { - DumpPCAndSymbol(writerfn, arg, stack[i], " "); - } else { - DumpPC(writerfn, arg, stack[i], " "); - } -#else - DumpPC(writerfn, arg, stack[i], " "); -#endif - } -} - -static void DumpStackTraceAndExit() { - DumpStackTrace(1, DebugWriteToStderr, NULL); - - // Set the default signal handler for SIGABRT, to avoid invoking our - // own signal handler installed by InstallFailedSignalHandler(). - struct sigaction sig_action; - memset(&sig_action, 0, sizeof(sig_action)); - sigemptyset(&sig_action.sa_mask); - sig_action.sa_handler = SIG_DFL; - sigaction(SIGABRT, &sig_action, NULL); - - abort(); -} - -_END_GOOGLE_NAMESPACE_ - -#endif // HAVE_STACKTRACE - -_START_GOOGLE_NAMESPACE_ - -namespace glog_internal_namespace_ { - -const char* ProgramInvocationShortName() { - if (g_program_invocation_short_name != NULL) { - return g_program_invocation_short_name; - } else { - // TODO(hamaji): Use /proc/self/cmdline and so? - return "UNKNOWN"; - } -} - -bool IsGoogleLoggingInitialized() { - return g_program_invocation_short_name != NULL; -} - -bool is_default_thread() { - if (g_program_invocation_short_name == NULL) { - // InitGoogleLogging() not yet called, so unlikely to be in a different - // thread - return true; - } else { - return pthread_equal(pthread_self(), g_main_thread_id); - } -} - -#ifdef OS_WINDOWS -struct timeval { - long tv_sec, tv_usec; -}; - -// Based on: http://www.google.com/codesearch/p?hl=en#dR3YEbitojA/os_win32.c&q=GetSystemTimeAsFileTime%20license:bsd -// See COPYING for copyright information. -static int gettimeofday(struct timeval *tv, void* tz) { -#define EPOCHFILETIME (116444736000000000ULL) - FILETIME ft; - LARGE_INTEGER li; - uint64 tt; - - GetSystemTimeAsFileTime(&ft); - li.LowPart = ft.dwLowDateTime; - li.HighPart = ft.dwHighDateTime; - tt = (li.QuadPart - EPOCHFILETIME) / 10; - tv->tv_sec = tt / 1000000; - tv->tv_usec = tt % 1000000; - - return 0; -} -#endif - -int64 CycleClock_Now() { - // TODO(hamaji): temporary impementation - it might be too slow. - struct timeval tv; - gettimeofday(&tv, NULL); - return static_cast(tv.tv_sec) * 1000000 + tv.tv_usec; -} - -int64 UsecToCycles(int64 usec) { - return usec; -} - -WallTime WallTime_Now() { - // Now, cycle clock is retuning microseconds since the epoch. - return CycleClock_Now() * 0.000001; -} - -static int32 g_main_thread_pid = getpid(); -int32 GetMainThreadPid() { - return g_main_thread_pid; -} - -bool PidHasChanged() { - int32 pid = getpid(); - if (g_main_thread_pid == pid) { - return false; - } - g_main_thread_pid = pid; - return true; -} - -pid_t GetTID() { - // On Linux and FreeBSD, we try to use gettid(). -#if defined OS_LINUX || defined OS_FREEBSD || defined OS_MACOSX -#ifndef __NR_gettid -#ifdef OS_MACOSX -#define __NR_gettid SYS_gettid -#elif ! defined __i386__ -#error "Must define __NR_gettid for non-x86 platforms" -#else -#define __NR_gettid 224 -#endif -#endif - static bool lacks_gettid = false; - if (!lacks_gettid) { - pid_t tid = syscall(__NR_gettid); - if (tid != -1) { - return tid; - } - // Technically, this variable has to be volatile, but there is a small - // performance penalty in accessing volatile variables and there should - // not be any serious adverse effect if a thread does not immediately see - // the value change to "true". - lacks_gettid = true; - } -#endif // OS_LINUX || OS_FREEBSD - - // If gettid() could not be used, we use one of the following. -#if defined OS_LINUX - return getpid(); // Linux: getpid returns thread ID when gettid is absent -#elif defined OS_WINDOWS || defined OS_CYGWIN - return GetCurrentThreadId(); -#else - // If none of the techniques above worked, we use pthread_self(). - return (pid_t)(uintptr_t)pthread_self(); -#endif -} - -const char* const_basename(const char* filepath) { - const char* base = strrchr(filepath, '/'); -#ifdef OS_WINDOWS // Look for either path separator in Windows - if (!base) - base = strrchr(filepath, '\\'); -#endif - return base ? (base+1) : filepath; -} - -static string g_my_user_name; -const string& MyUserName() { - return g_my_user_name; -} -static void MyUserNameInitializer() { - // TODO(hamaji): Probably this is not portable. -#if defined(OS_WINDOWS) - const char* user = getenv("USERNAME"); -#else - const char* user = getenv("USER"); -#endif - if (user != NULL) { - g_my_user_name = user; - } else { - g_my_user_name = "invalid-user"; - } -} -REGISTER_MODULE_INITIALIZER(utilities, MyUserNameInitializer()); - -#ifdef HAVE_STACKTRACE -void DumpStackTraceToString(string* stacktrace) { - DumpStackTrace(1, DebugWriteToString, stacktrace); -} -#endif - -// We use an atomic operation to prevent problems with calling CrashReason -// from inside the Mutex implementation (potentially through RAW_CHECK). -static const CrashReason* g_reason = 0; - -void SetCrashReason(const CrashReason* r) { - sync_val_compare_and_swap(&g_reason, - reinterpret_cast(0), - r); -} - -void InitGoogleLoggingUtilities(const char* argv0) { - CHECK(!IsGoogleLoggingInitialized()) - << "You called InitGoogleLogging() twice!"; - const char* slash = strrchr(argv0, '/'); -#ifdef OS_WINDOWS - if (!slash) slash = strrchr(argv0, '\\'); -#endif - g_program_invocation_short_name = slash ? slash + 1 : argv0; - g_main_thread_id = pthread_self(); - -#ifdef HAVE_STACKTRACE - InstallFailureFunction(&DumpStackTraceAndExit); -#endif -} - -void ShutdownGoogleLoggingUtilities() { - CHECK(IsGoogleLoggingInitialized()) - << "You called ShutdownGoogleLogging() without calling InitGoogleLogging() first!"; -#ifdef HAVE_SYSLOG_H - closelog(); -#endif -} - -} // namespace glog_internal_namespace_ - -_END_GOOGLE_NAMESPACE_ - -// Make an implementation of stacktrace compiled. -#ifdef STACKTRACE_H -# include STACKTRACE_H -#endif diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/utilities.h b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/utilities.h deleted file mode 100644 index 42785dc0f576..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/utilities.h +++ /dev/null @@ -1,226 +0,0 @@ -// Copyright (c) 2008, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: Shinichiro Hamaji -// -// Define utilties for glog internal usage. - -#ifndef UTILITIES_H__ -#define UTILITIES_H__ - -#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) -# define OS_WINDOWS -#elif defined(__CYGWIN__) || defined(__CYGWIN32__) -# define OS_CYGWIN -#elif defined(linux) || defined(__linux) || defined(__linux__) -# define OS_LINUX -#elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) -# define OS_MACOSX -#elif defined(__FreeBSD__) -# define OS_FREEBSD -#elif defined(__NetBSD__) -# define OS_NETBSD -#elif defined(__OpenBSD__) -# define OS_OPENBSD -#else -// TODO(hamaji): Add other platforms. -#endif - -// printf macros for size_t, in the style of inttypes.h -#ifdef _LP64 -#define __PRIS_PREFIX "z" -#else -#define __PRIS_PREFIX -#endif - -// Use these macros after a % in a printf format string -// to get correct 32/64 bit behavior, like this: -// size_t size = records.size(); -// printf("%"PRIuS"\n", size); - -#define PRIdS __PRIS_PREFIX "d" -#define PRIxS __PRIS_PREFIX "x" -#define PRIuS __PRIS_PREFIX "u" -#define PRIXS __PRIS_PREFIX "X" -#define PRIoS __PRIS_PREFIX "o" - -#include "base/mutex.h" // This must go first so we get _XOPEN_SOURCE - -#include - -#if defined(OS_WINDOWS) -# include "port.h" -#endif - -#include "config.h" -#include "glog/logging.h" - -// There are three different ways we can try to get the stack trace: -// -// 1) The libunwind library. This is still in development, and as a -// separate library adds a new dependency, but doesn't need a frame -// pointer. It also doesn't call malloc. -// -// 2) Our hand-coded stack-unwinder. This depends on a certain stack -// layout, which is used by gcc (and those systems using a -// gcc-compatible ABI) on x86 systems, at least since gcc 2.95. -// It uses the frame pointer to do its work. -// -// 3) The gdb unwinder -- also the one used by the c++ exception code. -// It's obviously well-tested, but has a fatal flaw: it can call -// malloc() from the unwinder. This is a problem because we're -// trying to use the unwinder to instrument malloc(). -// -// Note: if you add a new implementation here, make sure it works -// correctly when GetStackTrace() is called with max_depth == 0. -// Some code may do that. - -#if defined(HAVE_LIB_UNWIND) -# define STACKTRACE_H "stacktrace_libunwind-inl.h" -#elif !defined(NO_FRAME_POINTER) -# if defined(__i386__) && __GNUC__ >= 2 -# define STACKTRACE_H "stacktrace_x86-inl.h" -# elif defined(__x86_64__) && __GNUC__ >= 2 -# define STACKTRACE_H "stacktrace_x86_64-inl.h" -# elif (defined(__ppc__) || defined(__PPC__)) && __GNUC__ >= 2 -# define STACKTRACE_H "stacktrace_powerpc-inl.h" -# endif -#endif - -#if !defined(STACKTRACE_H) && defined(HAVE_EXECINFO_H) -# define STACKTRACE_H "stacktrace_generic-inl.h" -#endif - -#if defined(STACKTRACE_H) -# define HAVE_STACKTRACE -#endif - -// defined by gcc -#if defined(__ELF__) && defined(OS_LINUX) -# define HAVE_SYMBOLIZE -#elif defined(OS_MACOSX) && defined(HAVE_DLADDR) -// Use dladdr to symbolize. -# define HAVE_SYMBOLIZE -#endif - -#ifndef ARRAYSIZE -// There is a better way, but this is good enough for our purpose. -# define ARRAYSIZE(a) (sizeof(a) / sizeof(*(a))) -#endif - -_START_GOOGLE_NAMESPACE_ - -namespace glog_internal_namespace_ { - -#ifdef HAVE___ATTRIBUTE__ -# define ATTRIBUTE_NOINLINE __attribute__ ((noinline)) -# define HAVE_ATTRIBUTE_NOINLINE -#else -# define ATTRIBUTE_NOINLINE -#endif - -const char* ProgramInvocationShortName(); - -bool IsGoogleLoggingInitialized(); - -bool is_default_thread(); - -int64 CycleClock_Now(); - -int64 UsecToCycles(int64 usec); - -typedef double WallTime; -WallTime WallTime_Now(); - -int32 GetMainThreadPid(); -bool PidHasChanged(); - -pid_t GetTID(); - -const std::string& MyUserName(); - -// Get the part of filepath after the last path separator. -// (Doesn't modify filepath, contrary to basename() in libgen.h.) -const char* const_basename(const char* filepath); - -// Wrapper of __sync_val_compare_and_swap. If the GCC extension isn't -// defined, we try the CPU specific logics (we only support x86 and -// x86_64 for now) first, then use a naive implementation, which has a -// race condition. -template -inline T sync_val_compare_and_swap(T* ptr, T oldval, T newval) { -#if defined(HAVE___SYNC_VAL_COMPARE_AND_SWAP) - return __sync_val_compare_and_swap(ptr, oldval, newval); -#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) - T ret; - __asm__ __volatile__("lock; cmpxchg %1, (%2);" - :"=a"(ret) - // GCC may produces %sil or %dil for - // constraint "r", but some of apple's gas - // dosn't know the 8 bit registers. - // We use "q" to avoid these registers. - :"q"(newval), "q"(ptr), "a"(oldval) - :"memory", "cc"); - return ret; -#else - T ret = *ptr; - if (ret == oldval) { - *ptr = newval; - } - return ret; -#endif -} - -void DumpStackTraceToString(std::string* stacktrace); - -struct CrashReason { - CrashReason() : filename(0), line_number(0), message(0), depth(0) {} - - const char* filename; - int line_number; - const char* message; - - // We'll also store a bit of stack trace context at the time of crash as - // it may not be available later on. - void* stack[32]; - int depth; -}; - -void SetCrashReason(const CrashReason* r); - -void InitGoogleLoggingUtilities(const char* argv0); -void ShutdownGoogleLoggingUtilities(); - -} // namespace glog_internal_namespace_ - -_END_GOOGLE_NAMESPACE_ - -using namespace GOOGLE_NAMESPACE::glog_internal_namespace_; - -#endif // UTILITIES_H__ diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/vlog_is_on.cc b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/vlog_is_on.cc deleted file mode 100644 index ee0e412f6609..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/vlog_is_on.cc +++ /dev/null @@ -1,249 +0,0 @@ -// Copyright (c) 1999, 2007, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: Ray Sidney and many others -// -// Broken out from logging.cc by Soren Lassen -// logging_unittest.cc covers the functionality herein - -#include "utilities.h" - -#include -#include -#include -#include -#include -#include "base/commandlineflags.h" -#include "glog/logging.h" -#include "glog/raw_logging.h" -#include "base/googleinit.h" - -// glog doesn't have annotation -#define ANNOTATE_BENIGN_RACE(address, description) - -using std::string; - -GLOG_DEFINE_int32(v, 0, "Show all VLOG(m) messages for m <= this." -" Overridable by --vmodule."); - -GLOG_DEFINE_string(vmodule, "", "per-module verbose level." -" Argument is a comma-separated list of =." -" is a glob pattern, matched against the filename base" -" (that is, name ignoring .cc/.h./-inl.h)." -" overrides any value given by --v."); - -_START_GOOGLE_NAMESPACE_ - -namespace glog_internal_namespace_ { - -// Implementation of fnmatch that does not need 0-termination -// of arguments and does not allocate any memory, -// but we only support "*" and "?" wildcards, not the "[...]" patterns. -// It's not a static function for the unittest. -GOOGLE_GLOG_DLL_DECL bool SafeFNMatch_(const char* pattern, - size_t patt_len, - const char* str, - size_t str_len) { - int p = 0; - int s = 0; - while (1) { - if (p == patt_len && s == str_len) return true; - if (p == patt_len) return false; - if (s == str_len) return p+1 == patt_len && pattern[p] == '*'; - if (pattern[p] == str[s] || pattern[p] == '?') { - p += 1; - s += 1; - continue; - } - if (pattern[p] == '*') { - if (p+1 == patt_len) return true; - do { - if (SafeFNMatch_(pattern+(p+1), patt_len-(p+1), str+s, str_len-s)) { - return true; - } - s += 1; - } while (s != str_len); - return false; - } - return false; - } -} - -} // namespace glog_internal_namespace_ - -using glog_internal_namespace_::SafeFNMatch_; - -int32 kLogSiteUninitialized = 1000; - -// List of per-module log levels from FLAGS_vmodule. -// Once created each element is never deleted/modified -// except for the vlog_level: other threads will read VModuleInfo blobs -// w/o locks and we'll store pointers to vlog_level at VLOG locations -// that will never go away. -// We can't use an STL struct here as we wouldn't know -// when it's safe to delete/update it: other threads need to use it w/o locks. -struct VModuleInfo { - string module_pattern; - mutable int32 vlog_level; // Conceptually this is an AtomicWord, but it's - // too much work to use AtomicWord type here - // w/o much actual benefit. - const VModuleInfo* next; -}; - -// This protects the following global variables. -static Mutex vmodule_lock; -// Pointer to head of the VModuleInfo list. -// It's a map from module pattern to logging level for those module(s). -static VModuleInfo* vmodule_list = 0; -// Boolean initialization flag. -static bool inited_vmodule = false; - -// L >= vmodule_lock. -static void VLOG2Initializer() { - vmodule_lock.AssertHeld(); - // Can now parse --vmodule flag and initialize mapping of module-specific - // logging levels. - inited_vmodule = false; - const char* vmodule = FLAGS_vmodule.c_str(); - const char* sep; - VModuleInfo* head = NULL; - VModuleInfo* tail = NULL; - while ((sep = strchr(vmodule, '=')) != NULL) { - string pattern(vmodule, sep - vmodule); - int module_level; - if (sscanf(sep, "=%d", &module_level) == 1) { - VModuleInfo* info = new VModuleInfo; - info->module_pattern = pattern; - info->vlog_level = module_level; - if (head) tail->next = info; - else head = info; - tail = info; - } - // Skip past this entry - vmodule = strchr(sep, ','); - if (vmodule == NULL) break; - vmodule++; // Skip past "," - } - if (head) { // Put them into the list at the head: - tail->next = vmodule_list; - vmodule_list = head; - } - inited_vmodule = true; -} - -// This can be called very early, so we use SpinLock and RAW_VLOG here. -int SetVLOGLevel(const char* module_pattern, int log_level) { - int result = FLAGS_v; - int const pattern_len = strlen(module_pattern); - bool found = false; - MutexLock l(&vmodule_lock); // protect whole read-modify-write - for (const VModuleInfo* info = vmodule_list; - info != NULL; info = info->next) { - if (info->module_pattern == module_pattern) { - if (!found) { - result = info->vlog_level; - found = true; - } - info->vlog_level = log_level; - } else if (!found && - SafeFNMatch_(info->module_pattern.c_str(), - info->module_pattern.size(), - module_pattern, pattern_len)) { - result = info->vlog_level; - found = true; - } - } - if (!found) { - VModuleInfo* info = new VModuleInfo; - info->module_pattern = module_pattern; - info->vlog_level = log_level; - info->next = vmodule_list; - vmodule_list = info; - } - RAW_VLOG(1, "Set VLOG level for \"%s\" to %d", module_pattern, log_level); - return result; -} - -// NOTE: Individual VLOG statements cache the integer log level pointers. -// NOTE: This function must not allocate memory or require any locks. -bool InitVLOG3__(int32** site_flag, int32* site_default, - const char* fname, int32 verbose_level) { - MutexLock l(&vmodule_lock); - bool read_vmodule_flag = inited_vmodule; - if (!read_vmodule_flag) { - VLOG2Initializer(); - } - - // protect the errno global in case someone writes: - // VLOG(..) << "The last error was " << strerror(errno) - int old_errno = errno; - - // site_default normally points to FLAGS_v - int32* site_flag_value = site_default; - - // Get basename for file - const char* base = strrchr(fname, '/'); - base = base ? (base+1) : fname; - const char* base_end = strchr(base, '.'); - size_t base_length = base_end ? (base_end - base) : strlen(base); - - // Trim out trailing "-inl" if any - if (base_length >= 4 && (memcmp(base+base_length-4, "-inl", 4) == 0)) { - base_length -= 4; - } - - // TODO: Trim out _unittest suffix? Perhaps it is better to have - // the extra control and just leave it there. - - // find target in vector of modules, replace site_flag_value with - // a module-specific verbose level, if any. - for (const VModuleInfo* info = vmodule_list; - info != NULL; info = info->next) { - if (SafeFNMatch_(info->module_pattern.c_str(), info->module_pattern.size(), - base, base_length)) { - site_flag_value = &info->vlog_level; - // value at info->vlog_level is now what controls - // the VLOG at the caller site forever - break; - } - } - - // Cache the vlog value pointer if --vmodule flag has been parsed. - ANNOTATE_BENIGN_RACE(site_flag, - "*site_flag may be written by several threads," - " but the value will be the same"); - if (read_vmodule_flag) *site_flag = site_flag_value; - - // restore the errno in case something recoverable went wrong during - // the initialization of the VLOG mechanism (see above note "protect the..") - errno = old_errno; - return *site_flag_value >= verbose_level; -} - -_END_GOOGLE_NAMESPACE_ diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/config.h b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/config.h deleted file mode 100755 index 114762e846d5..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/config.h +++ /dev/null @@ -1,136 +0,0 @@ -/* src/config.h.in. Generated from configure.ac by autoheader. */ - -/* Namespace for Google classes */ -#define GOOGLE_NAMESPACE google - -/* Define if you have the `dladdr' function */ -#undef HAVE_DLADDR - -/* Define to 1 if you have the header file. */ -#undef HAVE_DLFCN_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_EXECINFO_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_LIBUNWIND_H - -/* define if you have google gflags library */ -#undef HAVE_LIB_GFLAGS - -/* define if you have libunwind */ -#undef HAVE_LIB_UNWIND - -/* Define to 1 if you have the header file. */ -#undef HAVE_MEMORY_H - -/* define if the compiler implements namespaces */ -#undef HAVE_NAMESPACES - -/* Define if you have POSIX threads libraries and header files. */ -#undef HAVE_PTHREAD - -/* define if the compiler implements pthread_rwlock_* */ -#undef HAVE_RWLOCK - -/* Define if you have the `sigaltstack' function */ -#undef HAVE_SIGALTSTACK - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDLIB_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYSCALL_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_SYSCALL_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_UCONTEXT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_UNISTD_H - -/* define if the compiler supports using expression for operator */ -#undef HAVE_USING_OPERATOR - -/* define if your compiler has __attribute__ */ -#undef HAVE___ATTRIBUTE__ - -/* define if your compiler has __builtin_expect */ -#undef HAVE___BUILTIN_EXPECT - -/* define if your compiler has __sync_val_compare_and_swap */ -#undef HAVE___SYNC_VAL_COMPARE_AND_SWAP - -/* Name of package */ -#undef PACKAGE - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* How to access the PC from a struct ucontext */ -#undef PC_FROM_UCONTEXT - -/* Define to necessary symbol if this constant uses a non-standard name on - your system. */ -#undef PTHREAD_CREATE_JOINABLE - -/* The size of `void *', as computed by sizeof. */ -#undef SIZEOF_VOID_P - -/* Define to 1 if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* the namespace where STL code like vector<> is defined */ -#undef STL_NAMESPACE - -/* Version number of package */ -#undef VERSION - -/* Stops putting the code inside the Google namespace */ -#define _END_GOOGLE_NAMESPACE_ } - -/* Puts following code inside the Google namespace */ -#define _START_GOOGLE_NAMESPACE_ namespace google { - -/* Always the empty-string on non-windows systems. On windows, should be - "__declspec(dllexport)". This way, when we compile the dll, we export our - functions/classes. It's safe to define this here because config.h is only - used internally, to compile the DLL, and every DLL source file #includes - "config.h" before anything else. */ -#ifndef GOOGLE_GLOG_DLL_DECL -# define GOOGLE_GLOG_IS_A_DLL 1 /* not set if you're statically linking */ -# define GOOGLE_GLOG_DLL_DECL __declspec(dllexport) -# define GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS __declspec(dllimport) -#endif diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/glog/log_severity.h b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/glog/log_severity.h deleted file mode 100644 index 5e7d09effb2f..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/glog/log_severity.h +++ /dev/null @@ -1,88 +0,0 @@ -// This file is automatically generated from src/glog/log_severity.h -// using src/windows/preprocess.sh. -// DO NOT EDIT! - -// Copyright (c) 2007, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef BASE_LOG_SEVERITY_H__ -#define BASE_LOG_SEVERITY_H__ - -// Annoying stuff for windows -- makes sure clients can import these functions -#ifndef GOOGLE_GLOG_DLL_DECL -# if defined(_WIN32) && !defined(__CYGWIN__) -# define GOOGLE_GLOG_DLL_DECL __declspec(dllimport) -# else -# define GOOGLE_GLOG_DLL_DECL -# endif -#endif - -// Variables of type LogSeverity are widely taken to lie in the range -// [0, NUM_SEVERITIES-1]. Be careful to preserve this assumption if -// you ever need to change their values or add a new severity. -typedef int LogSeverity; - -const int INFO = 0, WARNING = 1, ERROR = 2, FATAL = 3, NUM_SEVERITIES = 4; - -// DFATAL is FATAL in debug mode, ERROR in normal mode -#ifdef NDEBUG -#define DFATAL_LEVEL ERROR -#else -#define DFATAL_LEVEL FATAL -#endif - -extern GOOGLE_GLOG_DLL_DECL const char* const LogSeverityNames[NUM_SEVERITIES]; - -// NDEBUG usage helpers related to (RAW_)DCHECK: -// -// DEBUG_MODE is for small !NDEBUG uses like -// if (DEBUG_MODE) foo.CheckThatFoo(); -// instead of substantially more verbose -// #ifndef NDEBUG -// foo.CheckThatFoo(); -// #endif -// -// IF_DEBUG_MODE is for small !NDEBUG uses like -// IF_DEBUG_MODE( string error; ) -// DCHECK(Foo(&error)) << error; -// instead of substantially more verbose -// #ifndef NDEBUG -// string error; -// DCHECK(Foo(&error)) << error; -// #endif -// -#ifdef NDEBUG -enum { DEBUG_MODE = 0 }; -#define IF_DEBUG_MODE(x) -#else -enum { DEBUG_MODE = 1 }; -#define IF_DEBUG_MODE(x) x -#endif - -#endif // BASE_LOG_SEVERITY_H__ diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/glog/logging.h b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/glog/logging.h deleted file mode 100755 index 7a6df74f4941..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/glog/logging.h +++ /dev/null @@ -1,1510 +0,0 @@ -// This file is automatically generated from src/glog/logging.h.in -// using src/windows/preprocess.sh. -// DO NOT EDIT! - -// Copyright (c) 1999, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: Ray Sidney -// -// This file contains #include information about logging-related stuff. -// Pretty much everybody needs to #include this file so that they can -// log various happenings. -// -#ifndef _LOGGING_H_ -#define _LOGGING_H_ - -#include -#include -#include -#include -#if 0 -# include -#endif -#ifdef __DEPRECATED -// Make GCC quiet. -# undef __DEPRECATED -# include -# define __DEPRECATED -#else -# include -#endif -#include - -// Annoying stuff for windows -- makes sure clients can import these functions -#ifndef GOOGLE_GLOG_DLL_DECL -# if defined(_WIN32) && !defined(__CYGWIN__) -# define GOOGLE_GLOG_DLL_DECL __declspec(dllimport) -# else -# define GOOGLE_GLOG_DLL_DECL -# endif -#endif - -// We care a lot about number of bits things take up. Unfortunately, -// systems define their bit-specific ints in a lot of different ways. -// We use our own way, and have a typedef to get there. -// Note: these commands below may look like "#if 1" or "#if 0", but -// that's because they were constructed that way at ./configure time. -// Look at logging.h.in to see how they're calculated (based on your config). -#if 0 -#include // the normal place uint16_t is defined -#endif -#if 0 -#include // the normal place u_int16_t is defined -#endif -#if 0 -#include // a third place for uint16_t or u_int16_t -#endif - -#if 0 -#include -#endif - -namespace google { - -#if 0 // the C99 format -typedef int32_t int32; -typedef uint32_t uint32; -typedef int64_t int64; -typedef uint64_t uint64; -#elif 0 // the BSD format -typedef int32_t int32; -typedef u_int32_t uint32; -typedef int64_t int64; -typedef u_int64_t uint64; -#elif 1 // the windows (vc7) format -typedef __int32 int32; -typedef unsigned __int32 uint32; -typedef __int64 int64; -typedef unsigned __int64 uint64; -#else -#error Do not know how to define a 32-bit integer quantity on your system -#endif - -} - -// The global value of GOOGLE_STRIP_LOG. All the messages logged to -// LOG(XXX) with severity less than GOOGLE_STRIP_LOG will not be displayed. -// If it can be determined at compile time that the message will not be -// printed, the statement will be compiled out. -// -// Example: to strip out all INFO and WARNING messages, use the value -// of 2 below. To make an exception for WARNING messages from a single -// file, add "#define GOOGLE_STRIP_LOG 1" to that file _before_ including -// base/logging.h -#ifndef GOOGLE_STRIP_LOG -#define GOOGLE_STRIP_LOG 0 -#endif - -// GCC can be told that a certain branch is not likely to be taken (for -// instance, a CHECK failure), and use that information in static analysis. -// Giving it this information can help it optimize for the common case in -// the absence of better information (ie. -fprofile-arcs). -// -#ifndef GOOGLE_PREDICT_BRANCH_NOT_TAKEN -#if 0 -#define GOOGLE_PREDICT_BRANCH_NOT_TAKEN(x) (__builtin_expect(x, 0)) -#else -#define GOOGLE_PREDICT_BRANCH_NOT_TAKEN(x) x -#endif -#endif - -// Make a bunch of macros for logging. The way to log things is to stream -// things to LOG(). E.g., -// -// LOG(INFO) << "Found " << num_cookies << " cookies"; -// -// You can capture log messages in a string, rather than reporting them -// immediately: -// -// vector errors; -// LOG_STRING(ERROR, &errors) << "Couldn't parse cookie #" << cookie_num; -// -// This pushes back the new error onto 'errors'; if given a NULL pointer, -// it reports the error via LOG(ERROR). -// -// You can also do conditional logging: -// -// LOG_IF(INFO, num_cookies > 10) << "Got lots of cookies"; -// -// You can also do occasional logging (log every n'th occurrence of an -// event): -// -// LOG_EVERY_N(INFO, 10) << "Got the " << COUNTER << "th cookie"; -// -// The above will cause log messages to be output on the 1st, 11th, 21st, ... -// times it is executed. Note that the special COUNTER value is used to -// identify which repetition is happening. -// -// You can also do occasional conditional logging (log every n'th -// occurrence of an event, when condition is satisfied): -// -// LOG_IF_EVERY_N(INFO, (size > 1024), 10) << "Got the " << COUNTER -// << "th big cookie"; -// -// You can log messages the first N times your code executes a line. E.g. -// -// LOG_FIRST_N(INFO, 20) << "Got the " << COUNTER << "th cookie"; -// -// Outputs log messages for the first 20 times it is executed. -// -// Analogous SYSLOG, SYSLOG_IF, and SYSLOG_EVERY_N macros are available. -// These log to syslog as well as to the normal logs. If you use these at -// all, you need to be aware that syslog can drastically reduce performance, -// especially if it is configured for remote logging! Don't use these -// unless you fully understand this and have a concrete need to use them. -// Even then, try to minimize your use of them. -// -// There are also "debug mode" logging macros like the ones above: -// -// DLOG(INFO) << "Found cookies"; -// -// DLOG_IF(INFO, num_cookies > 10) << "Got lots of cookies"; -// -// DLOG_EVERY_N(INFO, 10) << "Got the " << COUNTER << "th cookie"; -// -// All "debug mode" logging is compiled away to nothing for non-debug mode -// compiles. -// -// We also have -// -// LOG_ASSERT(assertion); -// DLOG_ASSERT(assertion); -// -// which is syntactic sugar for {,D}LOG_IF(FATAL, assert fails) << assertion; -// -// There are "verbose level" logging macros. They look like -// -// VLOG(1) << "I'm printed when you run the program with --v=1 or more"; -// VLOG(2) << "I'm printed when you run the program with --v=2 or more"; -// -// These always log at the INFO log level (when they log at all). -// The verbose logging can also be turned on module-by-module. For instance, -// --vmodule=mapreduce=2,file=1,gfs*=3 --v=0 -// will cause: -// a. VLOG(2) and lower messages to be printed from mapreduce.{h,cc} -// b. VLOG(1) and lower messages to be printed from file.{h,cc} -// c. VLOG(3) and lower messages to be printed from files prefixed with "gfs" -// d. VLOG(0) and lower messages to be printed from elsewhere -// -// The wildcarding functionality shown by (c) supports both '*' (match -// 0 or more characters) and '?' (match any single character) wildcards. -// -// There's also VLOG_IS_ON(n) "verbose level" condition macro. To be used as -// -// if (VLOG_IS_ON(2)) { -// // do some logging preparation and logging -// // that can't be accomplished with just VLOG(2) << ...; -// } -// -// There are also VLOG_IF, VLOG_EVERY_N and VLOG_IF_EVERY_N "verbose level" -// condition macros for sample cases, when some extra computation and -// preparation for logs is not needed. -// VLOG_IF(1, (size > 1024)) -// << "I'm printed when size is more than 1024 and when you run the " -// "program with --v=1 or more"; -// VLOG_EVERY_N(1, 10) -// << "I'm printed every 10th occurrence, and when you run the program " -// "with --v=1 or more. Present occurence is " << COUNTER; -// VLOG_IF_EVERY_N(1, (size > 1024), 10) -// << "I'm printed on every 10th occurence of case when size is more " -// " than 1024, when you run the program with --v=1 or more. "; -// "Present occurence is " << COUNTER; -// -// The supported severity levels for macros that allow you to specify one -// are (in increasing order of severity) INFO, WARNING, ERROR, and FATAL. -// Note that messages of a given severity are logged not only in the -// logfile for that severity, but also in all logfiles of lower severity. -// E.g., a message of severity FATAL will be logged to the logfiles of -// severity FATAL, ERROR, WARNING, and INFO. -// -// There is also the special severity of DFATAL, which logs FATAL in -// debug mode, ERROR in normal mode. -// -// Very important: logging a message at the FATAL severity level causes -// the program to terminate (after the message is logged). -// -// Unless otherwise specified, logs will be written to the filename -// "...log..", followed -// by the date, time, and pid (you can't prevent the date, time, and pid -// from being in the filename). -// -// The logging code takes two flags: -// --v=# set the verbose level -// --logtostderr log all the messages to stderr instead of to logfiles - -// LOG LINE PREFIX FORMAT -// -// Log lines have this form: -// -// Lmmdd hh:mm:ss.uuuuuu threadid file:line] msg... -// -// where the fields are defined as follows: -// -// L A single character, representing the log level -// (eg 'I' for INFO) -// mm The month (zero padded; ie May is '05') -// dd The day (zero padded) -// hh:mm:ss.uuuuuu Time in hours, minutes and fractional seconds -// threadid The space-padded thread ID as returned by GetTID() -// (this matches the PID on Linux) -// file The file name -// line The line number -// msg The user-supplied message -// -// Example: -// -// I1103 11:57:31.739339 24395 google.cc:2341] Command line: ./some_prog -// I1103 11:57:31.739403 24395 google.cc:2342] Process id 24395 -// -// NOTE: although the microseconds are useful for comparing events on -// a single machine, clocks on different machines may not be well -// synchronized. Hence, use caution when comparing the low bits of -// timestamps from different machines. - -#ifndef DECLARE_VARIABLE -#define MUST_UNDEF_GFLAGS_DECLARE_MACROS -#define DECLARE_VARIABLE(type, name, tn) \ - namespace FLAG__namespace_do_not_use_directly_use_DECLARE_##tn##_instead { \ - extern GOOGLE_GLOG_DLL_DECL type FLAGS_##name; \ - } \ - using FLAG__namespace_do_not_use_directly_use_DECLARE_##tn##_instead::FLAGS_##name - -// bool specialization -#define DECLARE_bool(name) \ - DECLARE_VARIABLE(bool, name, bool) - -// int32 specialization -#define DECLARE_int32(name) \ - DECLARE_VARIABLE(google::int32, name, int32) - -// Special case for string, because we have to specify the namespace -// std::string, which doesn't play nicely with our FLAG__namespace hackery. -#define DECLARE_string(name) \ - namespace FLAG__namespace_do_not_use_directly_use_DECLARE_string_instead { \ - extern GOOGLE_GLOG_DLL_DECL std::string FLAGS_##name; \ - } \ - using FLAG__namespace_do_not_use_directly_use_DECLARE_string_instead::FLAGS_##name -#endif - -// Set whether log messages go to stderr instead of logfiles -DECLARE_bool(logtostderr); - -// Set whether log messages go to stderr in addition to logfiles. -DECLARE_bool(alsologtostderr); - -// Log messages at a level >= this flag are automatically sent to -// stderr in addition to log files. -DECLARE_int32(stderrthreshold); - -// Set whether the log prefix should be prepended to each line of output. -DECLARE_bool(log_prefix); - -// Log messages at a level <= this flag are buffered. -// Log messages at a higher level are flushed immediately. -DECLARE_int32(logbuflevel); - -// Sets the maximum number of seconds which logs may be buffered for. -DECLARE_int32(logbufsecs); - -// Log suppression level: messages logged at a lower level than this -// are suppressed. -DECLARE_int32(minloglevel); - -// If specified, logfiles are written into this directory instead of the -// default logging directory. -DECLARE_string(log_dir); - -// Sets the path of the directory into which to put additional links -// to the log files. -DECLARE_string(log_link); - -DECLARE_int32(v); // in vlog_is_on.cc - -// Sets the maximum log file size (in MB). -DECLARE_int32(max_log_size); - -// Sets whether to avoid logging to the disk if the disk is full. -DECLARE_bool(stop_logging_if_full_disk); - -#ifdef MUST_UNDEF_GFLAGS_DECLARE_MACROS -#undef MUST_UNDEF_GFLAGS_DECLARE_MACROS -#undef DECLARE_VARIABLE -#undef DECLARE_bool -#undef DECLARE_int32 -#undef DECLARE_string -#endif - -// Log messages below the GOOGLE_STRIP_LOG level will be compiled away for -// security reasons. See LOG(severtiy) below. - -// A few definitions of macros that don't generate much code. Since -// LOG(INFO) and its ilk are used all over our code, it's -// better to have compact code for these operations. - -#if GOOGLE_STRIP_LOG == 0 -#define COMPACT_GOOGLE_LOG_INFO google::LogMessage( \ - __FILE__, __LINE__) -#define LOG_TO_STRING_INFO(message) google::LogMessage( \ - __FILE__, __LINE__, google::INFO, message) -#else -#define COMPACT_GOOGLE_LOG_INFO google::NullStream() -#define LOG_TO_STRING_INFO(message) google::NullStream() -#endif - -#if GOOGLE_STRIP_LOG <= 1 -#define COMPACT_GOOGLE_LOG_WARNING google::LogMessage( \ - __FILE__, __LINE__, google::WARNING) -#define LOG_TO_STRING_WARNING(message) google::LogMessage( \ - __FILE__, __LINE__, google::WARNING, message) -#else -#define COMPACT_GOOGLE_LOG_WARNING google::NullStream() -#define LOG_TO_STRING_WARNING(message) google::NullStream() -#endif - -#if GOOGLE_STRIP_LOG <= 2 -#define COMPACT_GOOGLE_LOG_ERROR google::LogMessage( \ - __FILE__, __LINE__, google::ERROR) -#define LOG_TO_STRING_ERROR(message) google::LogMessage( \ - __FILE__, __LINE__, google::ERROR, message) -#else -#define COMPACT_GOOGLE_LOG_ERROR google::NullStream() -#define LOG_TO_STRING_ERROR(message) google::NullStream() -#endif - -#if GOOGLE_STRIP_LOG <= 3 -#define COMPACT_GOOGLE_LOG_FATAL google::LogMessageFatal( \ - __FILE__, __LINE__) -#define LOG_TO_STRING_FATAL(message) google::LogMessage( \ - __FILE__, __LINE__, google::FATAL, message) -#else -#define COMPACT_GOOGLE_LOG_FATAL google::NullStreamFatal() -#define LOG_TO_STRING_FATAL(message) google::NullStreamFatal() -#endif - -// For DFATAL, we want to use LogMessage (as opposed to -// LogMessageFatal), to be consistent with the original behavior. -#ifdef NDEBUG -#define COMPACT_GOOGLE_LOG_DFATAL COMPACT_GOOGLE_LOG_ERROR -#elif GOOGLE_STRIP_LOG <= 3 -#define COMPACT_GOOGLE_LOG_DFATAL google::LogMessage( \ - __FILE__, __LINE__, google::FATAL) -#else -#define COMPACT_GOOGLE_LOG_DFATAL google::NullStreamFatal() -#endif - -#define GOOGLE_LOG_INFO(counter) google::LogMessage(__FILE__, __LINE__, google::INFO, counter, &google::LogMessage::SendToLog) -#define SYSLOG_INFO(counter) \ - google::LogMessage(__FILE__, __LINE__, google::INFO, counter, \ - &google::LogMessage::SendToSyslogAndLog) -#define GOOGLE_LOG_WARNING(counter) \ - google::LogMessage(__FILE__, __LINE__, google::WARNING, counter, \ - &google::LogMessage::SendToLog) -#define SYSLOG_WARNING(counter) \ - google::LogMessage(__FILE__, __LINE__, google::WARNING, counter, \ - &google::LogMessage::SendToSyslogAndLog) -#define GOOGLE_LOG_ERROR(counter) \ - google::LogMessage(__FILE__, __LINE__, google::ERROR, counter, \ - &google::LogMessage::SendToLog) -#define SYSLOG_ERROR(counter) \ - google::LogMessage(__FILE__, __LINE__, google::ERROR, counter, \ - &google::LogMessage::SendToSyslogAndLog) -#define GOOGLE_LOG_FATAL(counter) \ - google::LogMessage(__FILE__, __LINE__, google::FATAL, counter, \ - &google::LogMessage::SendToLog) -#define SYSLOG_FATAL(counter) \ - google::LogMessage(__FILE__, __LINE__, google::FATAL, counter, \ - &google::LogMessage::SendToSyslogAndLog) -#define GOOGLE_LOG_DFATAL(counter) \ - google::LogMessage(__FILE__, __LINE__, google::DFATAL_LEVEL, counter, \ - &google::LogMessage::SendToLog) -#define SYSLOG_DFATAL(counter) \ - google::LogMessage(__FILE__, __LINE__, google::DFATAL_LEVEL, counter, \ - &google::LogMessage::SendToSyslogAndLog) - -#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) || defined(__CYGWIN32__) -// A very useful logging macro to log windows errors: -#define LOG_SYSRESULT(result) \ - if (FAILED(result)) { \ - LPTSTR message = NULL; \ - LPTSTR msg = reinterpret_cast(&message); \ - DWORD message_length = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | \ - FORMAT_MESSAGE_FROM_SYSTEM, \ - 0, result, 0, msg, 100, NULL); \ - if (message_length > 0) { \ - google::LogMessage(__FILE__, __LINE__, ERROR, 0, \ - &google::LogMessage::SendToLog).stream() << message; \ - LocalFree(message); \ - } \ - } -#endif - -// We use the preprocessor's merging operator, "##", so that, e.g., -// LOG(INFO) becomes the token GOOGLE_LOG_INFO. There's some funny -// subtle difference between ostream member streaming functions (e.g., -// ostream::operator<<(int) and ostream non-member streaming functions -// (e.g., ::operator<<(ostream&, string&): it turns out that it's -// impossible to stream something like a string directly to an unnamed -// ostream. We employ a neat hack by calling the stream() member -// function of LogMessage which seems to avoid the problem. -#define LOG(severity) COMPACT_GOOGLE_LOG_ ## severity.stream() -#define SYSLOG(severity) SYSLOG_ ## severity(0).stream() - -namespace google { - -// They need the definitions of integer types. -#include "glog/log_severity.h" -#include "glog/vlog_is_on.h" - -// Initialize google's logging library. You will see the program name -// specified by argv0 in log outputs. -GOOGLE_GLOG_DLL_DECL void InitGoogleLogging(const char* argv0); - -// Shutdown google's logging library. -GOOGLE_GLOG_DLL_DECL void ShutdownGoogleLogging(); - -// Install a function which will be called after LOG(FATAL). -GOOGLE_GLOG_DLL_DECL void InstallFailureFunction(void (*fail_func)()); - -class LogSink; // defined below - -// If a non-NULL sink pointer is given, we push this message to that sink. -// For LOG_TO_SINK we then do normal LOG(severity) logging as well. -// This is useful for capturing messages and passing/storing them -// somewhere more specific than the global log of the process. -// Argument types: -// LogSink* sink; -// LogSeverity severity; -// The cast is to disambiguate NULL arguments. -#define LOG_TO_SINK(sink, severity) \ - google::LogMessage( \ - __FILE__, __LINE__, \ - google::severity, \ - static_cast(sink), true).stream() -#define LOG_TO_SINK_BUT_NOT_TO_LOGFILE(sink, severity) \ - google::LogMessage( \ - __FILE__, __LINE__, \ - google::severity, \ - static_cast(sink), false).stream() - -// If a non-NULL string pointer is given, we write this message to that string. -// We then do normal LOG(severity) logging as well. -// This is useful for capturing messages and storing them somewhere more -// specific than the global log of the process. -// Argument types: -// string* message; -// LogSeverity severity; -// The cast is to disambiguate NULL arguments. -// NOTE: LOG(severity) expands to LogMessage().stream() for the specified -// severity. -#define LOG_TO_STRING(severity, message) \ - LOG_TO_STRING_##severity(static_cast(message)).stream() - -// If a non-NULL pointer is given, we push the message onto the end -// of a vector of strings; otherwise, we report it with LOG(severity). -// This is handy for capturing messages and perhaps passing them back -// to the caller, rather than reporting them immediately. -// Argument types: -// LogSeverity severity; -// vector *outvec; -// The cast is to disambiguate NULL arguments. -#define LOG_STRING(severity, outvec) \ - LOG_TO_STRING_##severity(static_cast*>(outvec)).stream() - -#define LOG_IF(severity, condition) \ - !(condition) ? (void) 0 : google::LogMessageVoidify() & LOG(severity) -#define SYSLOG_IF(severity, condition) \ - !(condition) ? (void) 0 : google::LogMessageVoidify() & SYSLOG(severity) - -#define LOG_ASSERT(condition) \ - LOG_IF(FATAL, !(condition)) << "Assert failed: " #condition -#define SYSLOG_ASSERT(condition) \ - SYSLOG_IF(FATAL, !(condition)) << "Assert failed: " #condition - -// CHECK dies with a fatal error if condition is not true. It is *not* -// controlled by NDEBUG, so the check will be executed regardless of -// compilation mode. Therefore, it is safe to do things like: -// CHECK(fp->Write(x) == 4) -#define CHECK(condition) \ - LOG_IF(FATAL, GOOGLE_PREDICT_BRANCH_NOT_TAKEN(!(condition))) \ - << "Check failed: " #condition " " - -// A container for a string pointer which can be evaluated to a bool - -// true iff the pointer is NULL. -struct CheckOpString { - CheckOpString(std::string* str) : str_(str) { } - // No destructor: if str_ is non-NULL, we're about to LOG(FATAL), - // so there's no point in cleaning up str_. - operator bool() const { - return GOOGLE_PREDICT_BRANCH_NOT_TAKEN(str_ != NULL); - } - std::string* str_; -}; - -// Function is overloaded for integral types to allow static const -// integrals declared in classes and not defined to be used as arguments to -// CHECK* macros. It's not encouraged though. -template -inline const T& GetReferenceableValue(const T& t) { return t; } -inline char GetReferenceableValue(char t) { return t; } -inline unsigned char GetReferenceableValue(unsigned char t) { return t; } -inline signed char GetReferenceableValue(signed char t) { return t; } -inline short GetReferenceableValue(short t) { return t; } -inline unsigned short GetReferenceableValue(unsigned short t) { return t; } -inline int GetReferenceableValue(int t) { return t; } -inline unsigned int GetReferenceableValue(unsigned int t) { return t; } -inline long GetReferenceableValue(long t) { return t; } -inline unsigned long GetReferenceableValue(unsigned long t) { return t; } -inline long long GetReferenceableValue(long long t) { return t; } -inline unsigned long long GetReferenceableValue(unsigned long long t) { - return t; -} - -// This is a dummy class to define the following operator. -struct DummyClassToDefineOperator {}; - -} - -// Define global operator<< to declare using ::operator<<. -// This declaration will allow use to use CHECK macros for user -// defined classes which have operator<< (e.g., stl_logging.h). -inline std::ostream& operator<<( - std::ostream& out, const google::DummyClassToDefineOperator&) { - return out; -} - -namespace google { - -// Build the error message string. -template -std::string* MakeCheckOpString(const t1& v1, const t2& v2, const char* names) { - // It means that we cannot use stl_logging if compiler doesn't - // support using expression for operator. - // TODO(hamaji): Figure out a way to fix. -#if 1 - using ::operator<<; -#endif - std::strstream ss; - ss << names << " (" << v1 << " vs. " << v2 << ")"; - return new std::string(ss.str(), ss.pcount()); -} - -// Helper functions for CHECK_OP macro. -// The (int, int) specialization works around the issue that the compiler -// will not instantiate the template version of the function on values of -// unnamed enum type - see comment below. -#define DEFINE_CHECK_OP_IMPL(name, op) \ - template \ - inline std::string* Check##name##Impl(const t1& v1, const t2& v2, \ - const char* names) { \ - if (v1 op v2) return NULL; \ - else return MakeCheckOpString(v1, v2, names); \ - } \ - inline std::string* Check##name##Impl(int v1, int v2, const char* names) { \ - return Check##name##Impl(v1, v2, names); \ - } - -// Use _EQ, _NE, _LE, etc. in case the file including base/logging.h -// provides its own #defines for the simpler names EQ, NE, LE, etc. -// This happens if, for example, those are used as token names in a -// yacc grammar. -DEFINE_CHECK_OP_IMPL(_EQ, ==) -DEFINE_CHECK_OP_IMPL(_NE, !=) -DEFINE_CHECK_OP_IMPL(_LE, <=) -DEFINE_CHECK_OP_IMPL(_LT, < ) -DEFINE_CHECK_OP_IMPL(_GE, >=) -DEFINE_CHECK_OP_IMPL(_GT, > ) -#undef DEFINE_CHECK_OP_IMPL - -// Helper macro for binary operators. -// Don't use this macro directly in your code, use CHECK_EQ et al below. - -#if defined(STATIC_ANALYSIS) -// Only for static analysis tool to know that it is equivalent to assert -#define CHECK_OP_LOG(name, op, val1, val2, log) CHECK((val1) op (val2)) -#elif !defined(NDEBUG) -// In debug mode, avoid constructing CheckOpStrings if possible, -// to reduce the overhead of CHECK statments by 2x. -// Real DCHECK-heavy tests have seen 1.5x speedups. - -// The meaning of "string" might be different between now and -// when this macro gets invoked (e.g., if someone is experimenting -// with other string implementations that get defined after this -// file is included). Save the current meaning now and use it -// in the macro. -typedef std::string _Check_string; -#define CHECK_OP_LOG(name, op, val1, val2, log) \ - while (google::_Check_string* _result = \ - google::Check##name##Impl( \ - google::GetReferenceableValue(val1), \ - google::GetReferenceableValue(val2), \ - #val1 " " #op " " #val2)) \ - log(__FILE__, __LINE__, \ - google::CheckOpString(_result)).stream() -#else -// In optimized mode, use CheckOpString to hint to compiler that -// the while condition is unlikely. -#define CHECK_OP_LOG(name, op, val1, val2, log) \ - while (google::CheckOpString _result = \ - google::Check##name##Impl( \ - google::GetReferenceableValue(val1), \ - google::GetReferenceableValue(val2), \ - #val1 " " #op " " #val2)) \ - log(__FILE__, __LINE__, _result).stream() -#endif // STATIC_ANALYSIS, !NDEBUG - -#if GOOGLE_STRIP_LOG <= 3 -#define CHECK_OP(name, op, val1, val2) \ - CHECK_OP_LOG(name, op, val1, val2, google::LogMessageFatal) -#else -#define CHECK_OP(name, op, val1, val2) \ - CHECK_OP_LOG(name, op, val1, val2, google::NullStreamFatal) -#endif // STRIP_LOG <= 3 - -// Equality/Inequality checks - compare two values, and log a FATAL message -// including the two values when the result is not as expected. The values -// must have operator<<(ostream, ...) defined. -// -// You may append to the error message like so: -// CHECK_NE(1, 2) << ": The world must be ending!"; -// -// We are very careful to ensure that each argument is evaluated exactly -// once, and that anything which is legal to pass as a function argument is -// legal here. In particular, the arguments may be temporary expressions -// which will end up being destroyed at the end of the apparent statement, -// for example: -// CHECK_EQ(string("abc")[1], 'b'); -// -// WARNING: These don't compile correctly if one of the arguments is a pointer -// and the other is NULL. To work around this, simply static_cast NULL to the -// type of the desired pointer. - -#define CHECK_EQ(val1, val2) CHECK_OP(_EQ, ==, val1, val2) -#define CHECK_NE(val1, val2) CHECK_OP(_NE, !=, val1, val2) -#define CHECK_LE(val1, val2) CHECK_OP(_LE, <=, val1, val2) -#define CHECK_LT(val1, val2) CHECK_OP(_LT, < , val1, val2) -#define CHECK_GE(val1, val2) CHECK_OP(_GE, >=, val1, val2) -#define CHECK_GT(val1, val2) CHECK_OP(_GT, > , val1, val2) - -// Check that the input is non NULL. This very useful in constructor -// initializer lists. - -#define CHECK_NOTNULL(val) \ - google::CheckNotNull(__FILE__, __LINE__, "'" #val "' Must be non NULL", (val)) - -// Helper functions for string comparisons. -// To avoid bloat, the definitions are in logging.cc. -#define DECLARE_CHECK_STROP_IMPL(func, expected) \ - GOOGLE_GLOG_DLL_DECL std::string* Check##func##expected##Impl( \ - const char* s1, const char* s2, const char* names); -DECLARE_CHECK_STROP_IMPL(strcmp, true) -DECLARE_CHECK_STROP_IMPL(strcmp, false) -DECLARE_CHECK_STROP_IMPL(strcasecmp, true) -DECLARE_CHECK_STROP_IMPL(strcasecmp, false) -#undef DECLARE_CHECK_STROP_IMPL - -// Helper macro for string comparisons. -// Don't use this macro directly in your code, use CHECK_STREQ et al below. -#define CHECK_STROP(func, op, expected, s1, s2) \ - while (google::CheckOpString _result = \ - google::Check##func##expected##Impl((s1), (s2), \ - #s1 " " #op " " #s2)) \ - LOG(FATAL) << *_result.str_ - - -// String (char*) equality/inequality checks. -// CASE versions are case-insensitive. -// -// Note that "s1" and "s2" may be temporary strings which are destroyed -// by the compiler at the end of the current "full expression" -// (e.g. CHECK_STREQ(Foo().c_str(), Bar().c_str())). - -#define CHECK_STREQ(s1, s2) CHECK_STROP(strcmp, ==, true, s1, s2) -#define CHECK_STRNE(s1, s2) CHECK_STROP(strcmp, !=, false, s1, s2) -#define CHECK_STRCASEEQ(s1, s2) CHECK_STROP(strcasecmp, ==, true, s1, s2) -#define CHECK_STRCASENE(s1, s2) CHECK_STROP(strcasecmp, !=, false, s1, s2) - -#define CHECK_INDEX(I,A) CHECK(I < (sizeof(A)/sizeof(A[0]))) -#define CHECK_BOUND(B,A) CHECK(B <= (sizeof(A)/sizeof(A[0]))) - -#define CHECK_DOUBLE_EQ(val1, val2) \ - do { \ - CHECK_LE((val1), (val2)+0.000000000000001L); \ - CHECK_GE((val1), (val2)-0.000000000000001L); \ - } while (0) - -#define CHECK_NEAR(val1, val2, margin) \ - do { \ - CHECK_LE((val1), (val2)+(margin)); \ - CHECK_GE((val1), (val2)-(margin)); \ - } while (0) - -// perror()..googly style! -// -// PLOG() and PLOG_IF() and PCHECK() behave exactly like their LOG* and -// CHECK equivalents with the addition that they postpend a description -// of the current state of errno to their output lines. - -#define PLOG(severity) GOOGLE_PLOG(severity, 0).stream() - -#define GOOGLE_PLOG(severity, counter) \ - google::ErrnoLogMessage( \ - __FILE__, __LINE__, google::severity, counter, \ - &google::LogMessage::SendToLog) - -#define PLOG_IF(severity, condition) \ - !(condition) ? (void) 0 : google::LogMessageVoidify() & PLOG(severity) - -// A CHECK() macro that postpends errno if the condition is false. E.g. -// -// if (poll(fds, nfds, timeout) == -1) { PCHECK(errno == EINTR); ... } -#define PCHECK(condition) \ - PLOG_IF(FATAL, GOOGLE_PREDICT_BRANCH_NOT_TAKEN(!(condition))) \ - << "Check failed: " #condition " " - -// A CHECK() macro that lets you assert the success of a function that -// returns -1 and sets errno in case of an error. E.g. -// -// CHECK_ERR(mkdir(path, 0700)); -// -// or -// -// int fd = open(filename, flags); CHECK_ERR(fd) << ": open " << filename; -#define CHECK_ERR(invocation) \ -PLOG_IF(FATAL, GOOGLE_PREDICT_BRANCH_NOT_TAKEN((invocation) == -1)) \ - << #invocation - -// Use macro expansion to create, for each use of LOG_EVERY_N(), static -// variables with the __LINE__ expansion as part of the variable name. -#define LOG_EVERY_N_VARNAME(base, line) LOG_EVERY_N_VARNAME_CONCAT(base, line) -#define LOG_EVERY_N_VARNAME_CONCAT(base, line) base ## line - -#define LOG_OCCURRENCES LOG_EVERY_N_VARNAME(occurrences_, __LINE__) -#define LOG_OCCURRENCES_MOD_N LOG_EVERY_N_VARNAME(occurrences_mod_n_, __LINE__) - -#define SOME_KIND_OF_LOG_EVERY_N(severity, n, what_to_do) \ - static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \ - ++LOG_OCCURRENCES; \ - if (++LOG_OCCURRENCES_MOD_N > n) LOG_OCCURRENCES_MOD_N -= n; \ - if (LOG_OCCURRENCES_MOD_N == 1) \ - google::LogMessage( \ - __FILE__, __LINE__, google::severity, LOG_OCCURRENCES, \ - &what_to_do).stream() - -#define SOME_KIND_OF_LOG_IF_EVERY_N(severity, condition, n, what_to_do) \ - static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \ - ++LOG_OCCURRENCES; \ - if (condition && \ - ((LOG_OCCURRENCES_MOD_N=(LOG_OCCURRENCES_MOD_N + 1) % n) == (1 % n))) \ - google::LogMessage( \ - __FILE__, __LINE__, google::severity, LOG_OCCURRENCES, \ - &what_to_do).stream() - -#define SOME_KIND_OF_PLOG_EVERY_N(severity, n, what_to_do) \ - static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \ - ++LOG_OCCURRENCES; \ - if (++LOG_OCCURRENCES_MOD_N > n) LOG_OCCURRENCES_MOD_N -= n; \ - if (LOG_OCCURRENCES_MOD_N == 1) \ - google::ErrnoLogMessage( \ - __FILE__, __LINE__, google::severity, LOG_OCCURRENCES, \ - &what_to_do).stream() - -#define SOME_KIND_OF_LOG_FIRST_N(severity, n, what_to_do) \ - static int LOG_OCCURRENCES = 0; \ - if (LOG_OCCURRENCES <= n) \ - ++LOG_OCCURRENCES; \ - if (LOG_OCCURRENCES <= n) \ - google::LogMessage( \ - __FILE__, __LINE__, google::severity, LOG_OCCURRENCES, \ - &what_to_do).stream() - -namespace glog_internal_namespace_ { -template -struct CompileAssert { -}; -struct CrashReason; -} // namespace glog_internal_namespace_ - -#define GOOGLE_GLOG_COMPILE_ASSERT(expr, msg) \ - typedef google::glog_internal_namespace_::CompileAssert<(bool(expr))> msg[bool(expr) ? 1 : -1] - -#define LOG_EVERY_N(severity, n) \ - GOOGLE_GLOG_COMPILE_ASSERT(google::severity < \ - google::NUM_SEVERITIES, \ - INVALID_REQUESTED_LOG_SEVERITY); \ - SOME_KIND_OF_LOG_EVERY_N(severity, (n), google::LogMessage::SendToLog) - -#define SYSLOG_EVERY_N(severity, n) \ - SOME_KIND_OF_LOG_EVERY_N(severity, (n), google::LogMessage::SendToSyslogAndLog) - -#define PLOG_EVERY_N(severity, n) \ - SOME_KIND_OF_PLOG_EVERY_N(severity, (n), google::LogMessage::SendToLog) - -#define LOG_FIRST_N(severity, n) \ - SOME_KIND_OF_LOG_FIRST_N(severity, (n), google::LogMessage::SendToLog) - -#define LOG_IF_EVERY_N(severity, condition, n) \ - SOME_KIND_OF_LOG_IF_EVERY_N(severity, (condition), (n), google::LogMessage::SendToLog) - -// We want the special COUNTER value available for LOG_EVERY_X()'ed messages -enum PRIVATE_Counter {COUNTER}; - - -// Plus some debug-logging macros that get compiled to nothing for production - -#ifndef NDEBUG - -#define DLOG(severity) LOG(severity) -#define DVLOG(verboselevel) VLOG(verboselevel) -#define DLOG_IF(severity, condition) LOG_IF(severity, condition) -#define DLOG_EVERY_N(severity, n) LOG_EVERY_N(severity, n) -#define DLOG_IF_EVERY_N(severity, condition, n) \ - LOG_IF_EVERY_N(severity, condition, n) -#define DLOG_ASSERT(condition) LOG_ASSERT(condition) - -// debug-only checking. not executed in NDEBUG mode. -#define DCHECK(condition) CHECK(condition) -#define DCHECK_EQ(val1, val2) CHECK_EQ(val1, val2) -#define DCHECK_NE(val1, val2) CHECK_NE(val1, val2) -#define DCHECK_LE(val1, val2) CHECK_LE(val1, val2) -#define DCHECK_LT(val1, val2) CHECK_LT(val1, val2) -#define DCHECK_GE(val1, val2) CHECK_GE(val1, val2) -#define DCHECK_GT(val1, val2) CHECK_GT(val1, val2) -#define DCHECK_NOTNULL(val) CHECK_NOTNULL(val) -#define DCHECK_STREQ(str1, str2) CHECK_STREQ(str1, str2) -#define DCHECK_STRCASEEQ(str1, str2) CHECK_STRCASEEQ(str1, str2) -#define DCHECK_STRNE(str1, str2) CHECK_STRNE(str1, str2) -#define DCHECK_STRCASENE(str1, str2) CHECK_STRCASENE(str1, str2) - -#else // NDEBUG - -#define DLOG(severity) \ - true ? (void) 0 : google::LogMessageVoidify() & LOG(severity) - -#define DVLOG(verboselevel) \ - (true || !VLOG_IS_ON(verboselevel)) ?\ - (void) 0 : google::LogMessageVoidify() & LOG(INFO) - -#define DLOG_IF(severity, condition) \ - (true || !(condition)) ? (void) 0 : google::LogMessageVoidify() & LOG(severity) - -#define DLOG_EVERY_N(severity, n) \ - true ? (void) 0 : google::LogMessageVoidify() & LOG(severity) - -#define DLOG_IF_EVERY_N(severity, condition, n) \ - (true || !(condition))? (void) 0 : google::LogMessageVoidify() & LOG(severity) - -#define DLOG_ASSERT(condition) \ - true ? (void) 0 : LOG_ASSERT(condition) - -#define DCHECK(condition) \ - while (false) \ - CHECK(condition) - -#define DCHECK_EQ(val1, val2) \ - while (false) \ - CHECK_EQ(val1, val2) - -#define DCHECK_NE(val1, val2) \ - while (false) \ - CHECK_NE(val1, val2) - -#define DCHECK_LE(val1, val2) \ - while (false) \ - CHECK_LE(val1, val2) - -#define DCHECK_LT(val1, val2) \ - while (false) \ - CHECK_LT(val1, val2) - -#define DCHECK_GE(val1, val2) \ - while (false) \ - CHECK_GE(val1, val2) - -#define DCHECK_GT(val1, val2) \ - while (false) \ - CHECK_GT(val1, val2) - -#define DCHECK_NOTNULL(val) (val) - -#define DCHECK_STREQ(str1, str2) \ - while (false) \ - CHECK_STREQ(str1, str2) - -#define DCHECK_STRCASEEQ(str1, str2) \ - while (false) \ - CHECK_STRCASEEQ(str1, str2) - -#define DCHECK_STRNE(str1, str2) \ - while (false) \ - CHECK_STRNE(str1, str2) - -#define DCHECK_STRCASENE(str1, str2) \ - while (false) \ - CHECK_STRCASENE(str1, str2) - - -#endif // NDEBUG - -// Log only in verbose mode. - -#define VLOG(verboselevel) LOG_IF(INFO, VLOG_IS_ON(verboselevel)) - -#define VLOG_IF(verboselevel, condition) \ - LOG_IF(INFO, (condition) && VLOG_IS_ON(verboselevel)) - -#define VLOG_EVERY_N(verboselevel, n) \ - LOG_IF_EVERY_N(INFO, VLOG_IS_ON(verboselevel), n) - -#define VLOG_IF_EVERY_N(verboselevel, condition, n) \ - LOG_IF_EVERY_N(INFO, (condition) && VLOG_IS_ON(verboselevel), n) - -// -// This class more or less represents a particular log message. You -// create an instance of LogMessage and then stream stuff to it. -// When you finish streaming to it, ~LogMessage is called and the -// full message gets streamed to the appropriate destination. -// -// You shouldn't actually use LogMessage's constructor to log things, -// though. You should use the LOG() macro (and variants thereof) -// above. -class GOOGLE_GLOG_DLL_DECL LogMessage { -public: - enum { - // Passing kNoLogPrefix for the line number disables the - // log-message prefix. Useful for using the LogMessage - // infrastructure as a printing utility. See also the --log_prefix - // flag for controlling the log-message prefix on an - // application-wide basis. - kNoLogPrefix = -1 - }; - - // LogStream inherit from non-DLL-exported class (std::ostrstream) - // and VC++ produces a warning for this situation. - // However, MSDN says "C4275 can be ignored in Microsoft Visual C++ - // 2005 if you are deriving from a type in the Standard C++ Library" - // http://msdn.microsoft.com/en-us/library/3tdb471s(VS.80).aspx - // Let's just ignore the warning. -#ifdef _MSC_VER -# pragma warning(disable: 4275) -#endif - class GOOGLE_GLOG_DLL_DECL LogStream : public std::ostrstream { -#ifdef _MSC_VER -# pragma warning(default: 4275) -#endif - public: - LogStream(char *buf, int len, int ctr) - : ostrstream(buf, len), - ctr_(ctr) { - self_ = this; - } - - int ctr() const { return ctr_; } - void set_ctr(int ctr) { ctr_ = ctr; } - LogStream* self() const { return self_; } - - private: - int ctr_; // Counter hack (for the LOG_EVERY_X() macro) - LogStream *self_; // Consistency check hack - }; - -public: - // icc 8 requires this typedef to avoid an internal compiler error. - typedef void (LogMessage::*SendMethod)(); - - LogMessage(const char* file, int line, LogSeverity severity, int ctr, - SendMethod send_method); - - // Two special constructors that generate reduced amounts of code at - // LOG call sites for common cases. - - // Used for LOG(INFO): Implied are: - // severity = INFO, ctr = 0, send_method = &LogMessage::SendToLog. - // - // Using this constructor instead of the more complex constructor above - // saves 19 bytes per call site. - LogMessage(const char* file, int line); - - // Used for LOG(severity) where severity != INFO. Implied - // are: ctr = 0, send_method = &LogMessage::SendToLog - // - // Using this constructor instead of the more complex constructor above - // saves 17 bytes per call site. - LogMessage(const char* file, int line, LogSeverity severity); - - // Constructor to log this message to a specified sink (if not NULL). - // Implied are: ctr = 0, send_method = &LogMessage::SendToSinkAndLog if - // also_send_to_log is true, send_method = &LogMessage::SendToSink otherwise. - LogMessage(const char* file, int line, LogSeverity severity, LogSink* sink, - bool also_send_to_log); - - // Constructor where we also give a vector pointer - // for storing the messages (if the pointer is not NULL). - // Implied are: ctr = 0, send_method = &LogMessage::SaveOrSendToLog. - LogMessage(const char* file, int line, LogSeverity severity, - std::vector* outvec); - - // Constructor where we also give a string pointer for storing the - // message (if the pointer is not NULL). Implied are: ctr = 0, - // send_method = &LogMessage::WriteToStringAndLog. - LogMessage(const char* file, int line, LogSeverity severity, - std::string* message); - - // A special constructor used for check failures - LogMessage(const char* file, int line, const CheckOpString& result); - - ~LogMessage(); - - // Flush a buffered message to the sink set in the constructor. Always - // called by the destructor, it may also be called from elsewhere if - // needed. Only the first call is actioned; any later ones are ignored. - void Flush(); - - // An arbitrary limit on the length of a single log message. This - // is so that streaming can be done more efficiently. - static const size_t kMaxLogMessageLen; - - // Theses should not be called directly outside of logging.*, - // only passed as SendMethod arguments to other LogMessage methods: - void SendToLog(); // Actually dispatch to the logs - void SendToSyslogAndLog(); // Actually dispatch to syslog and the logs - - // Call abort() or similar to perform LOG(FATAL) crash. - static void Fail() ; - - std::ostream& stream() { return *(data_->stream_); } - - int preserved_errno() const { return data_->preserved_errno_; } - - // Must be called without the log_mutex held. (L < log_mutex) - static int64 num_messages(int severity); - -private: - // Fully internal SendMethod cases: - void SendToSinkAndLog(); // Send to sink if provided and dispatch to the logs - void SendToSink(); // Send to sink if provided, do nothing otherwise. - - // Write to string if provided and dispatch to the logs. - void WriteToStringAndLog(); - - void SaveOrSendToLog(); // Save to stringvec if provided, else to logs - - void Init(const char* file, int line, LogSeverity severity, - void (LogMessage::*send_method)()); - - // Used to fill in crash information during LOG(FATAL) failures. - void RecordCrashReason(glog_internal_namespace_::CrashReason* reason); - - // Counts of messages sent at each priority: - static int64 num_messages_[NUM_SEVERITIES]; // under log_mutex - - // We keep the data in a separate struct so that each instance of - // LogMessage uses less stack space. - struct GOOGLE_GLOG_DLL_DECL LogMessageData { - LogMessageData() {}; - - int preserved_errno_; // preserved errno - char* buf_; - char* message_text_; // Complete message text (points to selected buffer) - LogStream* stream_alloc_; - LogStream* stream_; - char severity_; // What level is this LogMessage logged at? - int line_; // line number where logging call is. - void (LogMessage::*send_method_)(); // Call this in destructor to send - union { // At most one of these is used: union to keep the size low. - LogSink* sink_; // NULL or sink to send message to - std::vector* outvec_; // NULL or vector to push message onto - std::string* message_; // NULL or string to write message into - }; - time_t timestamp_; // Time of creation of LogMessage - struct ::tm tm_time_; // Time of creation of LogMessage - size_t num_prefix_chars_; // # of chars of prefix in this message - size_t num_chars_to_log_; // # of chars of msg to send to log - size_t num_chars_to_syslog_; // # of chars of msg to send to syslog - const char* basename_; // basename of file that called LOG - const char* fullname_; // fullname of file that called LOG - bool has_been_flushed_; // false => data has not been flushed - bool first_fatal_; // true => this was first fatal msg - - ~LogMessageData(); - private: - LogMessageData(const LogMessageData&); - void operator=(const LogMessageData&); - }; - - static LogMessageData fatal_msg_data_exclusive_; - static LogMessageData fatal_msg_data_shared_; - - LogMessageData* allocated_; - LogMessageData* data_; - - friend class LogDestination; - - LogMessage(const LogMessage&); - void operator=(const LogMessage&); -}; - -// This class happens to be thread-hostile because all instances share -// a single data buffer, but since it can only be created just before -// the process dies, we don't worry so much. -class GOOGLE_GLOG_DLL_DECL LogMessageFatal : public LogMessage { - public: - LogMessageFatal(const char* file, int line); - LogMessageFatal(const char* file, int line, const CheckOpString& result); - ~LogMessageFatal() ; -}; - -// A non-macro interface to the log facility; (useful -// when the logging level is not a compile-time constant). -inline void LogAtLevel(int const severity, std::string const &msg) { - LogMessage(__FILE__, __LINE__, severity).stream() << msg; -} - -// A macro alternative of LogAtLevel. New code may want to use this -// version since there are two advantages: 1. this version outputs the -// file name and the line number where this macro is put like other -// LOG macros, 2. this macro can be used as C++ stream. -#define LOG_AT_LEVEL(severity) google::LogMessage(__FILE__, __LINE__, severity).stream() - -// A small helper for CHECK_NOTNULL(). -template -T* CheckNotNull(const char *file, int line, const char *names, T* t) { - if (t == NULL) { - LogMessageFatal(file, line, new std::string(names)); - } - return t; -} - -// Allow folks to put a counter in the LOG_EVERY_X()'ed messages. This -// only works if ostream is a LogStream. If the ostream is not a -// LogStream you'll get an assert saying as much at runtime. -GOOGLE_GLOG_DLL_DECL std::ostream& operator<<(std::ostream &os, - const PRIVATE_Counter&); - - -// Derived class for PLOG*() above. -class GOOGLE_GLOG_DLL_DECL ErrnoLogMessage : public LogMessage { - public: - - ErrnoLogMessage(const char* file, int line, LogSeverity severity, int ctr, - void (LogMessage::*send_method)()); - - // Postpends ": strerror(errno) [errno]". - ~ErrnoLogMessage(); - - private: - ErrnoLogMessage(const ErrnoLogMessage&); - void operator=(const ErrnoLogMessage&); -}; - - -// This class is used to explicitly ignore values in the conditional -// logging macros. This avoids compiler warnings like "value computed -// is not used" and "statement has no effect". - -class GOOGLE_GLOG_DLL_DECL LogMessageVoidify { - public: - LogMessageVoidify() { } - // This has to be an operator with a precedence lower than << but - // higher than ?: - void operator&(std::ostream&) { } -}; - - -// Flushes all log files that contains messages that are at least of -// the specified severity level. Thread-safe. -GOOGLE_GLOG_DLL_DECL void FlushLogFiles(LogSeverity min_severity); - -// Flushes all log files that contains messages that are at least of -// the specified severity level. Thread-hostile because it ignores -// locking -- used for catastrophic failures. -GOOGLE_GLOG_DLL_DECL void FlushLogFilesUnsafe(LogSeverity min_severity); - -// -// Set the destination to which a particular severity level of log -// messages is sent. If base_filename is "", it means "don't log this -// severity". Thread-safe. -// -GOOGLE_GLOG_DLL_DECL void SetLogDestination(LogSeverity severity, - const char* base_filename); - -// -// Set the basename of the symlink to the latest log file at a given -// severity. If symlink_basename is empty, do not make a symlink. If -// you don't call this function, the symlink basename is the -// invocation name of the program. Thread-safe. -// -GOOGLE_GLOG_DLL_DECL void SetLogSymlink(LogSeverity severity, - const char* symlink_basename); - -// -// Used to send logs to some other kind of destination -// Users should subclass LogSink and override send to do whatever they want. -// Implementations must be thread-safe because a shared instance will -// be called from whichever thread ran the LOG(XXX) line. -class GOOGLE_GLOG_DLL_DECL LogSink { - public: - virtual ~LogSink(); - - // Sink's logging logic (message_len is such as to exclude '\n' at the end). - // This method can't use LOG() or CHECK() as logging system mutex(s) are held - // during this call. - virtual void send(LogSeverity severity, const char* full_filename, - const char* base_filename, int line, - const struct ::tm* tm_time, - const char* message, size_t message_len) = 0; - - // Redefine this to implement waiting for - // the sink's logging logic to complete. - // It will be called after each send() returns, - // but before that LogMessage exits or crashes. - // By default this function does nothing. - // Using this function one can implement complex logic for send() - // that itself involves logging; and do all this w/o causing deadlocks and - // inconsistent rearrangement of log messages. - // E.g. if a LogSink has thread-specific actions, the send() method - // can simply add the message to a queue and wake up another thread that - // handles real logging while itself making some LOG() calls; - // WaitTillSent() can be implemented to wait for that logic to complete. - // See our unittest for an example. - virtual void WaitTillSent(); - - // Returns the normal text output of the log message. - // Can be useful to implement send(). - static std::string ToString(LogSeverity severity, const char* file, int line, - const struct ::tm* tm_time, - const char* message, size_t message_len); -}; - -// Add or remove a LogSink as a consumer of logging data. Thread-safe. -GOOGLE_GLOG_DLL_DECL void AddLogSink(LogSink *destination); -GOOGLE_GLOG_DLL_DECL void RemoveLogSink(LogSink *destination); - -// -// Specify an "extension" added to the filename specified via -// SetLogDestination. This applies to all severity levels. It's -// often used to append the port we're listening on to the logfile -// name. Thread-safe. -// -GOOGLE_GLOG_DLL_DECL void SetLogFilenameExtension( - const char* filename_extension); - -// -// Make it so that all log messages of at least a particular severity -// are logged to stderr (in addition to logging to the usual log -// file(s)). Thread-safe. -// -GOOGLE_GLOG_DLL_DECL void SetStderrLogging(LogSeverity min_severity); - -// -// Make it so that all log messages go only to stderr. Thread-safe. -// -GOOGLE_GLOG_DLL_DECL void LogToStderr(); - -// -// Make it so that all log messages of at least a particular severity are -// logged via email to a list of addresses (in addition to logging to the -// usual log file(s)). The list of addresses is just a string containing -// the email addresses to send to (separated by spaces, say). Thread-safe. -// -GOOGLE_GLOG_DLL_DECL void SetEmailLogging(LogSeverity min_severity, - const char* addresses); - -// A simple function that sends email. dest is a commma-separated -// list of addressess. Thread-safe. -GOOGLE_GLOG_DLL_DECL bool SendEmail(const char *dest, - const char *subject, const char *body); - -GOOGLE_GLOG_DLL_DECL const std::vector& GetLoggingDirectories(); - -// For tests only: Clear the internal [cached] list of logging directories to -// force a refresh the next time GetLoggingDirectories is called. -// Thread-hostile. -void TestOnly_ClearLoggingDirectoriesList(); - -// Returns a set of existing temporary directories, which will be a -// subset of the directories returned by GetLogginDirectories(). -// Thread-safe. -GOOGLE_GLOG_DLL_DECL void GetExistingTempDirectories( - std::vector* list); - -// Print any fatal message again -- useful to call from signal handler -// so that the last thing in the output is the fatal message. -// Thread-hostile, but a race is unlikely. -GOOGLE_GLOG_DLL_DECL void ReprintFatalMessage(); - -// Truncate a log file that may be the append-only output of multiple -// processes and hence can't simply be renamed/reopened (typically a -// stdout/stderr). If the file "path" is > "limit" bytes, copy the -// last "keep" bytes to offset 0 and truncate the rest. Since we could -// be racing with other writers, this approach has the potential to -// lose very small amounts of data. For security, only follow symlinks -// if the path is /proc/self/fd/* -GOOGLE_GLOG_DLL_DECL void TruncateLogFile(const char *path, - int64 limit, int64 keep); - -// Truncate stdout and stderr if they are over the value specified by -// --max_log_size; keep the final 1MB. This function has the same -// race condition as TruncateLogFile. -GOOGLE_GLOG_DLL_DECL void TruncateStdoutStderr(); - -// Return the string representation of the provided LogSeverity level. -// Thread-safe. -GOOGLE_GLOG_DLL_DECL const char* GetLogSeverityName(LogSeverity severity); - -// --------------------------------------------------------------------- -// Implementation details that are not useful to most clients -// --------------------------------------------------------------------- - -// A Logger is the interface used by logging modules to emit entries -// to a log. A typical implementation will dump formatted data to a -// sequence of files. We also provide interfaces that will forward -// the data to another thread so that the invoker never blocks. -// Implementations should be thread-safe since the logging system -// will write to them from multiple threads. - -namespace base { - -class GOOGLE_GLOG_DLL_DECL Logger { - public: - virtual ~Logger(); - - // Writes "message[0,message_len-1]" corresponding to an event that - // occurred at "timestamp". If "force_flush" is true, the log file - // is flushed immediately. - // - // The input message has already been formatted as deemed - // appropriate by the higher level logging facility. For example, - // textual log messages already contain timestamps, and the - // file:linenumber header. - virtual void Write(bool force_flush, - time_t timestamp, - const char* message, - int message_len) = 0; - - // Flush any buffered messages - virtual void Flush() = 0; - - // Get the current LOG file size. - // The returned value is approximate since some - // logged data may not have been flushed to disk yet. - virtual uint32 LogSize() = 0; -}; - -// Get the logger for the specified severity level. The logger -// remains the property of the logging module and should not be -// deleted by the caller. Thread-safe. -extern GOOGLE_GLOG_DLL_DECL Logger* GetLogger(LogSeverity level); - -// Set the logger for the specified severity level. The logger -// becomes the property of the logging module and should not -// be deleted by the caller. Thread-safe. -extern GOOGLE_GLOG_DLL_DECL void SetLogger(LogSeverity level, Logger* logger); - -} - -// glibc has traditionally implemented two incompatible versions of -// strerror_r(). There is a poorly defined convention for picking the -// version that we want, but it is not clear whether it even works with -// all versions of glibc. -// So, instead, we provide this wrapper that automatically detects the -// version that is in use, and then implements POSIX semantics. -// N.B. In addition to what POSIX says, we also guarantee that "buf" will -// be set to an empty string, if this function failed. This means, in most -// cases, you do not need to check the error code and you can directly -// use the value of "buf". It will never have an undefined value. -GOOGLE_GLOG_DLL_DECL int posix_strerror_r(int err, char *buf, size_t len); - - -// A class for which we define operator<<, which does nothing. -class GOOGLE_GLOG_DLL_DECL NullStream : public LogMessage::LogStream { - public: - // Initialize the LogStream so the messages can be written somewhere - // (they'll never be actually displayed). This will be needed if a - // NullStream& is implicitly converted to LogStream&, in which case - // the overloaded NullStream::operator<< will not be invoked. - NullStream() : LogMessage::LogStream(message_buffer_, 1, 0) { } - NullStream(const char* /*file*/, int /*line*/, - const CheckOpString& /*result*/) : - LogMessage::LogStream(message_buffer_, 1, 0) { } - NullStream &stream() { return *this; } - private: - // A very short buffer for messages (which we discard anyway). This - // will be needed if NullStream& converted to LogStream& (e.g. as a - // result of a conditional expression). - char message_buffer_[2]; -}; - -// Do nothing. This operator is inline, allowing the message to be -// compiled away. The message will not be compiled away if we do -// something like (flag ? LOG(INFO) : LOG(ERROR)) << message; when -// SKIP_LOG=WARNING. In those cases, NullStream will be implicitly -// converted to LogStream and the message will be computed and then -// quietly discarded. -template -inline NullStream& operator<<(NullStream &str, const T &value) { return str; } - -// Similar to NullStream, but aborts the program (without stack -// trace), like LogMessageFatal. -class GOOGLE_GLOG_DLL_DECL NullStreamFatal : public NullStream { - public: - NullStreamFatal() { } - NullStreamFatal(const char* file, int line, const CheckOpString& result) : - NullStream(file, line, result) { } - ~NullStreamFatal() { _exit(1); } -}; - -// Install a signal handler that will dump signal information and a stack -// trace when the program crashes on certain signals. We'll install the -// signal handler for the following signals. -// -// SIGSEGV, SIGILL, SIGFPE, SIGABRT, SIGBUS, and SIGTERM. -// -// By default, the signal handler will write the failure dump to the -// standard error. You can customize the destination by installing your -// own writer function by InstallFailureWriter() below. -// -// Note on threading: -// -// The function should be called before threads are created, if you want -// to use the failure signal handler for all threads. The stack trace -// will be shown only for the thread that receives the signal. In other -// words, stack traces of other threads won't be shown. -GOOGLE_GLOG_DLL_DECL void InstallFailureSignalHandler(); - -// Installs a function that is used for writing the failure dump. "data" -// is the pointer to the beginning of a message to be written, and "size" -// is the size of the message. You should not expect the data is -// terminated with '\0'. -GOOGLE_GLOG_DLL_DECL void InstallFailureWriter( - void (*writer)(const char* data, int size)); - -} - -#endif // _LOGGING_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/glog/raw_logging.h b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/glog/raw_logging.h deleted file mode 100755 index c81e67bf99c9..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/glog/raw_logging.h +++ /dev/null @@ -1,189 +0,0 @@ -// This file is automatically generated from src/glog/raw_logging.h.in -// using src/windows/preprocess.sh. -// DO NOT EDIT! - -// Copyright (c) 2006, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: Maxim Lifantsev -// -// Thread-safe logging routines that do not allocate any memory or -// acquire any locks, and can therefore be used by low-level memory -// allocation and synchronization code. - -#ifndef BASE_RAW_LOGGING_H_ -#define BASE_RAW_LOGGING_H_ - -#include - -namespace google { - -#include "glog/log_severity.h" -#include "glog/vlog_is_on.h" - -// Annoying stuff for windows -- makes sure clients can import these functions -#ifndef GOOGLE_GLOG_DLL_DECL -# if defined(_WIN32) && !defined(__CYGWIN__) -# define GOOGLE_GLOG_DLL_DECL __declspec(dllimport) -# else -# define GOOGLE_GLOG_DLL_DECL -# endif -#endif - -// This is similar to LOG(severity) << format... and VLOG(level) << format.., -// but -// * it is to be used ONLY by low-level modules that can't use normal LOG() -// * it is desiged to be a low-level logger that does not allocate any -// memory and does not need any locks, hence: -// * it logs straight and ONLY to STDERR w/o buffering -// * it uses an explicit format and arguments list -// * it will silently chop off really long message strings -// Usage example: -// RAW_LOG(ERROR, "Failed foo with %i: %s", status, error); -// RAW_VLOG(3, "status is %i", status); -// These will print an almost standard log lines like this to stderr only: -// E0821 211317 file.cc:123] RAW: Failed foo with 22: bad_file -// I0821 211317 file.cc:142] RAW: status is 20 -#define RAW_LOG(severity, ...) \ - do { \ - switch (google::severity) { \ - case 0: \ - RAW_LOG_INFO(__VA_ARGS__); \ - break; \ - case 1: \ - RAW_LOG_WARNING(__VA_ARGS__); \ - break; \ - case 2: \ - RAW_LOG_ERROR(__VA_ARGS__); \ - break; \ - case 3: \ - RAW_LOG_FATAL(__VA_ARGS__); \ - break; \ - default: \ - break; \ - } \ - } while (0) - -// The following STRIP_LOG testing is performed in the header file so that it's -// possible to completely compile out the logging code and the log messages. -#if STRIP_LOG == 0 -#define RAW_VLOG(verboselevel, ...) \ - do { \ - if (VLOG_IS_ON(verboselevel)) { \ - RAW_LOG_INFO(__VA_ARGS__); \ - } \ - } while (0) -#else -#define RAW_VLOG(verboselevel, ...) RawLogStub__(0, __VA_ARGS__) -#endif // STRIP_LOG == 0 - -#if STRIP_LOG == 0 -#define RAW_LOG_INFO(...) google::RawLog__(google::INFO, \ - __FILE__, __LINE__, __VA_ARGS__) -#else -#define RAW_LOG_INFO(...) google::RawLogStub__(0, __VA_ARGS__) -#endif // STRIP_LOG == 0 - -#if STRIP_LOG <= 1 -#define RAW_LOG_WARNING(...) google::RawLog__(google::WARNING, \ - __FILE__, __LINE__, __VA_ARGS__) -#else -#define RAW_LOG_WARNING(...) google::RawLogStub__(0, __VA_ARGS__) -#endif // STRIP_LOG <= 1 - -#if STRIP_LOG <= 2 -#define RAW_LOG_ERROR(...) google::RawLog__(google::ERROR, \ - __FILE__, __LINE__, __VA_ARGS__) -#else -#define RAW_LOG_ERROR(...) google::RawLogStub__(0, __VA_ARGS__) -#endif // STRIP_LOG <= 2 - -#if STRIP_LOG <= 3 -#define RAW_LOG_FATAL(...) google::RawLog__(google::FATAL, \ - __FILE__, __LINE__, __VA_ARGS__) -#else -#define RAW_LOG_FATAL(...) \ - do { \ - google::RawLogStub__(0, __VA_ARGS__); \ - exit(1); \ - } while (0) -#endif // STRIP_LOG <= 3 - -// Similar to CHECK(condition) << message, -// but for low-level modules: we use only RAW_LOG that does not allocate memory. -// We do not want to provide args list here to encourage this usage: -// if (!cond) RAW_LOG(FATAL, "foo ...", hard_to_compute_args); -// so that the args are not computed when not needed. -#define RAW_CHECK(condition, message) \ - do { \ - if (!(condition)) { \ - RAW_LOG(FATAL, "Check %s failed: %s", #condition, message); \ - } \ - } while (0) - -// Debug versions of RAW_LOG and RAW_CHECK -#ifndef NDEBUG - -#define RAW_DLOG(severity, ...) RAW_LOG(severity, __VA_ARGS__) -#define RAW_DCHECK(condition, message) RAW_CHECK(condition, message) - -#else // NDEBUG - -#define RAW_DLOG(severity, ...) \ - while (false) \ - RAW_LOG(severity, __VA_ARGS__) -#define RAW_DCHECK(condition, message) \ - while (false) \ - RAW_CHECK(condition, message) - -#endif // NDEBUG - -// Stub log function used to work around for unused variable warnings when -// building with STRIP_LOG > 0. -static inline void RawLogStub__(int ignored, ...) { -} - -// Helper function to implement RAW_LOG and RAW_VLOG -// Logs format... at "severity" level, reporting it -// as called from file:line. -// This does not allocate memory or acquire locks. -GOOGLE_GLOG_DLL_DECL void RawLog__(LogSeverity severity, - const char* file, - int line, - const char* format, ...) - ; - -// Hack to propagate time information into this module so that -// this module does not have to directly call localtime_r(), -// which could allocate memory. -GOOGLE_GLOG_DLL_DECL void RawLog__SetLastTime(const struct tm& t, int usecs); - -} - -#endif // BASE_RAW_LOGGING_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/glog/stl_logging.h b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/glog/stl_logging.h deleted file mode 100755 index d76f6c18e240..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/glog/stl_logging.h +++ /dev/null @@ -1,158 +0,0 @@ -// This file is automatically generated from src/glog/stl_logging.h.in -// using src/windows/preprocess.sh. -// DO NOT EDIT! - -// Copyright (c) 2003, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Stream output operators for STL containers; to be used for logging *only*. -// Inclusion of this file lets you do: -// -// list x; -// LOG(INFO) << "data: " << x; -// vector v1, v2; -// CHECK_EQ(v1, v2); -// -// Note that if you want to use these operators from the non-global namespace, -// you may get an error since they are not in namespace std (and they are not -// in namespace std since that would result in undefined behavior). You may -// need to write -// -// using ::operator<<; -// -// to fix these errors. - -#ifndef UTIL_GTL_STL_LOGGING_INL_H_ -#define UTIL_GTL_STL_LOGGING_INL_H_ - -#if !1 -# error We do not support stl_logging for this compiler -#endif - -#include -#include -#include -#include -#include -#include -#include - -#ifdef __GNUC__ -# include -# include -# include -#endif - -template -inline std::ostream& operator<<(std::ostream& out, - const std::pair& p) { - out << '(' << p.first << ", " << p.second << ')'; - return out; -} - -namespace google { - -template -inline void PrintSequence(std::ostream& out, Iter begin, Iter end) { - using ::operator<<; - // Output at most 100 elements -- appropriate if used for logging. - for (int i = 0; begin != end && i < 100; ++i, ++begin) { - if (i > 0) out << ' '; - out << *begin; - } - if (begin != end) { - out << " ..."; - } -} - -} - -#define OUTPUT_TWO_ARG_CONTAINER(Sequence) \ -template \ -inline std::ostream& operator<<(std::ostream& out, \ - const Sequence& seq) { \ - google::PrintSequence(out, seq.begin(), seq.end()); \ - return out; \ -} - -OUTPUT_TWO_ARG_CONTAINER(std::vector) -OUTPUT_TWO_ARG_CONTAINER(std::deque) -OUTPUT_TWO_ARG_CONTAINER(std::list) -#ifdef __GNUC__ -OUTPUT_TWO_ARG_CONTAINER(__gnu_cxx::slist) -#endif - -#undef OUTPUT_TWO_ARG_CONTAINER - -#define OUTPUT_THREE_ARG_CONTAINER(Sequence) \ -template \ -inline std::ostream& operator<<(std::ostream& out, \ - const Sequence& seq) { \ - google::PrintSequence(out, seq.begin(), seq.end()); \ - return out; \ -} - -OUTPUT_THREE_ARG_CONTAINER(std::set) -OUTPUT_THREE_ARG_CONTAINER(std::multiset) - -#undef OUTPUT_THREE_ARG_CONTAINER - -#define OUTPUT_FOUR_ARG_CONTAINER(Sequence) \ -template \ -inline std::ostream& operator<<(std::ostream& out, \ - const Sequence& seq) { \ - google::PrintSequence(out, seq.begin(), seq.end()); \ - return out; \ -} - -OUTPUT_FOUR_ARG_CONTAINER(std::map) -OUTPUT_FOUR_ARG_CONTAINER(std::multimap) -#ifdef __GNUC__ -OUTPUT_FOUR_ARG_CONTAINER(__gnu_cxx::hash_set) -OUTPUT_FOUR_ARG_CONTAINER(__gnu_cxx::hash_multiset) -#endif - -#undef OUTPUT_FOUR_ARG_CONTAINER - -#define OUTPUT_FIVE_ARG_CONTAINER(Sequence) \ -template \ -inline std::ostream& operator<<(std::ostream& out, \ - const Sequence& seq) { \ - google::PrintSequence(out, seq.begin(), seq.end()); \ - return out; \ -} - -#ifdef __GNUC__ -OUTPUT_FIVE_ARG_CONTAINER(__gnu_cxx::hash_map) -OUTPUT_FIVE_ARG_CONTAINER(__gnu_cxx::hash_multimap) -#endif - -#undef OUTPUT_FIVE_ARG_CONTAINER - -#endif // UTIL_GTL_STL_LOGGING_INL_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/glog/vlog_is_on.h b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/glog/vlog_is_on.h deleted file mode 100755 index 409a4011b385..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/glog/vlog_is_on.h +++ /dev/null @@ -1,133 +0,0 @@ -// This file is automatically generated from src/glog/vlog_is_on.h.in -// using src/windows/preprocess.sh. -// DO NOT EDIT! - -// Copyright (c) 1999, 2007, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: Ray Sidney and many others -// -// Defines the VLOG_IS_ON macro that controls the variable-verbosity -// conditional logging. -// -// It's used by VLOG and VLOG_IF in logging.h -// and by RAW_VLOG in raw_logging.h to trigger the logging. -// -// It can also be used directly e.g. like this: -// if (VLOG_IS_ON(2)) { -// // do some logging preparation and logging -// // that can't be accomplished e.g. via just VLOG(2) << ...; -// } -// -// The truth value that VLOG_IS_ON(level) returns is determined by -// the three verbosity level flags: -// --v= Gives the default maximal active V-logging level; -// 0 is the default. -// Normally positive values are used for V-logging levels. -// --vmodule= Gives the per-module maximal V-logging levels to override -// the value given by --v. -// E.g. "my_module=2,foo*=3" would change the logging level -// for all code in source files "my_module.*" and "foo*.*" -// ("-inl" suffixes are also disregarded for this matching). -// -// SetVLOGLevel helper function is provided to do limited dynamic control over -// V-logging by overriding the per-module settings given via --vmodule flag. -// -// CAVEAT: --vmodule functionality is not available in non gcc compilers. -// - -#ifndef BASE_VLOG_IS_ON_H_ -#define BASE_VLOG_IS_ON_H_ - -#include "glog/log_severity.h" - -// Annoying stuff for windows -- makes sure clients can import these functions -#ifndef GOOGLE_GLOG_DLL_DECL -# if defined(_WIN32) && !defined(__CYGWIN__) -# define GOOGLE_GLOG_DLL_DECL __declspec(dllimport) -# else -# define GOOGLE_GLOG_DLL_DECL -# endif -#endif - -#if defined(__GNUC__) -// We emit an anonymous static int* variable at every VLOG_IS_ON(n) site. -// (Normally) the first time every VLOG_IS_ON(n) site is hit, -// we determine what variable will dynamically control logging at this site: -// it's either FLAGS_v or an appropriate internal variable -// matching the current source file that represents results of -// parsing of --vmodule flag and/or SetVLOGLevel calls. -#define VLOG_IS_ON(verboselevel) \ - __extension__ \ - ({ static google::int32* vlocal__ = &google::kLogSiteUninitialized; \ - google::int32 verbose_level__ = (verboselevel); \ - (*vlocal__ >= verbose_level__) && \ - ((vlocal__ != &google::kLogSiteUninitialized) || \ - (google::InitVLOG3__(&vlocal__, &FLAGS_v, \ - __FILE__, verbose_level__))); }) -#else -// GNU extensions not available, so we do not support --vmodule. -// Dynamic value of FLAGS_v always controls the logging level. -#define VLOG_IS_ON(verboselevel) (FLAGS_v >= (verboselevel)) -#endif - -// Set VLOG(_IS_ON) level for module_pattern to log_level. -// This lets us dynamically control what is normally set by the --vmodule flag. -// Returns the level that previously applied to module_pattern. -// NOTE: To change the log level for VLOG(_IS_ON) sites -// that have already executed after/during InitGoogleLogging, -// one needs to supply the exact --vmodule pattern that applied to them. -// (If no --vmodule pattern applied to them -// the value of FLAGS_v will continue to control them.) -extern GOOGLE_GLOG_DLL_DECL int SetVLOGLevel(const char* module_pattern, - int log_level); - -// Various declarations needed for VLOG_IS_ON above: ========================= - -// Special value used to indicate that a VLOG_IS_ON site has not been -// initialized. We make this a large value, so the common-case check -// of "*vlocal__ >= verbose_level__" in VLOG_IS_ON definition -// passes in such cases and InitVLOG3__ is then triggered. -extern google::int32 kLogSiteUninitialized; - -// Helper routine which determines the logging info for a particalur VLOG site. -// site_flag is the address of the site-local pointer to the controlling -// verbosity level -// site_default is the default to use for *site_flag -// fname is the current source file name -// verbose_level is the argument to VLOG_IS_ON -// We will return the return value for VLOG_IS_ON -// and if possible set *site_flag appropriately. -extern GOOGLE_GLOG_DLL_DECL bool InitVLOG3__( - google::int32** site_flag, - google::int32* site_default, - const char* fname, - google::int32 verbose_level); - -#endif // BASE_VLOG_IS_ON_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/port.h b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/port.h deleted file mode 100755 index d093bf5d34c6..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/port.h +++ /dev/null @@ -1,149 +0,0 @@ -/* Copyright (c) 2008, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * --- - * Author: Craig Silverstein - * Copied from google-perftools and modified by Shinichiro Hamaji - * - * These are some portability typedefs and defines to make it a bit - * easier to compile this code under VC++. - * - * Several of these are taken from glib: - * http://developer.gnome.org/doc/API/glib/glib-windows-compatability-functions.html - */ - -#ifndef CTEMPLATE_WINDOWS_PORT_H_ -#define CTEMPLATE_WINDOWS_PORT_H_ - -#include "config.h" - -#ifdef _WIN32 - -#define WIN32_LEAN_AND_MEAN /* We always want minimal includes */ -#include -#include /* for gethostname */ -#include /* because we so often use open/close/etc */ -#include /* for _getcwd() */ -#include /* for _getpid() */ -#include /* read in vsnprintf decl. before redifining it */ -#include /* template_dictionary.cc uses va_copy */ -#include /* for _strnicmp(), strerror_s() */ -#include /* for localtime_s() */ -/* Note: the C++ #includes are all together at the bottom. This file is - * used by both C and C++ code, so we put all the C++ together. - */ - -/* 4244: otherwise we get problems when substracting two size_t's to an int - * 4251: it's complaining about a private struct I've chosen not to dllexport - * 4355: we use this in a constructor, but we do it safely - * 4715: for some reason VC++ stopped realizing you can't return after abort() - * 4800: we know we're casting ints/char*'s to bools, and we're ok with that - * 4996: Yes, we're ok using "unsafe" functions like fopen() and strerror() - */ -#pragma warning(disable:4244 4251 4355 4715 4800 4996) - -/* file I/O */ -#define PATH_MAX 1024 -#define access _access -#define getcwd _getcwd -#define open _open -#define read _read -#define write _write -#define lseek _lseek -#define close _close -#define popen _popen -#define pclose _pclose -#define R_OK 04 /* read-only (for access()) */ -#define S_ISDIR(m) (((m) & _S_IFMT) == _S_IFDIR) -#ifndef __MINGW32__ -enum { STDIN_FILENO = 0, STDOUT_FILENO = 1, STDERR_FILENO = 2 }; -#endif -#define S_IRUSR S_IREAD -#define S_IWUSR S_IWRITE - -/* Not quite as lightweight as a hard-link, but more than good enough for us. */ -#define link(oldpath, newpath) CopyFileA(oldpath, newpath, false) - -#define strcasecmp _stricmp -#define strncasecmp _strnicmp - -/* In windows-land, hash<> is called hash_compare<> (from xhash.h) */ -#define hash hash_compare - -/* Sleep is in ms, on windows */ -#define sleep(secs) Sleep((secs) * 1000) - -/* We can't just use _vsnprintf and _snprintf as drop-in-replacements, - * because they don't always NUL-terminate. :-( We also can't use the - * name vsnprintf, since windows defines that (but not snprintf (!)). - */ -extern int snprintf(char *str, size_t size, - const char *format, ...); -extern int safe_vsnprintf(char *str, size_t size, - const char *format, va_list ap); -#define vsnprintf(str, size, format, ap) safe_vsnprintf(str, size, format, ap) -#define va_copy(dst, src) (dst) = (src) - -/* Windows doesn't support specifying the number of buckets as a - * hash_map constructor arg, so we leave this blank. - */ -#define CTEMPLATE_SMALL_HASHTABLE - -#define DEFAULT_TEMPLATE_ROOTDIR ".." - -// ----------------------------------- SYSTEM/PROCESS -typedef int pid_t; -#define getpid _getpid - -// ----------------------------------- THREADS -typedef DWORD pthread_t; -typedef DWORD pthread_key_t; -typedef LONG pthread_once_t; -enum { PTHREAD_ONCE_INIT = 0 }; // important that this be 0! for SpinLock -#define pthread_self GetCurrentThreadId -#define pthread_equal(pthread_t_1, pthread_t_2) ((pthread_t_1)==(pthread_t_2)) - -inline struct tm* localtime_r(const time_t* timep, struct tm* result) { - localtime_s(result, timep); - return result; -} - -inline char* strerror_r(int errnum, char* buf, size_t buflen) { - strerror_s(buf, buflen, errnum); - return buf; -} - -#ifndef __cplusplus -/* I don't see how to get inlining for C code in MSVC. Ah well. */ -#define inline -#endif - -#endif /* _WIN32 */ - -#endif /* CTEMPLATE_WINDOWS_PORT_H_ */ diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/preprocess.sh b/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/preprocess.sh deleted file mode 100755 index ea4352e8e3a8..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/preprocess.sh +++ /dev/null @@ -1,118 +0,0 @@ -#!/bin/sh - -# Copyright (c) 2008, Google Inc. -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following disclaimer -# in the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -# --- -# Author: Craig Silverstein -# Copied from google-perftools and modified by Shinichiro Hamaji -# -# This script is meant to be run at distribution-generation time, for -# instance by autogen.sh. It does some of the work configure would -# normally do, for windows systems. In particular, it expands all the -# @...@ variables found in .in files, and puts them here, in the windows -# directory. -# -# This script should be run before any new release. - -if [ -z "$1" ]; then - echo "USAGE: $0 " - exit 1 -fi - -DLLDEF_MACRO_NAME="GLOG_DLL_DECL" - -# The text we put in every .h files we create. As a courtesy, we'll -# include a helpful comment for windows users as to how to use -# GLOG_DLL_DECL. Apparently sed expands \n into a newline. Good! -DLLDEF_DEFINES="\ -// NOTE: if you are statically linking the template library into your binary\n\ -// (rather than using the template .dll), set '/D $DLLDEF_MACRO_NAME='\n\ -// as a compiler flag in your project file to turn off the dllimports.\n\ -#ifndef $DLLDEF_MACRO_NAME\n\ -# define $DLLDEF_MACRO_NAME __declspec(dllimport)\n\ -#endif" - -# Read all the windows config info into variables -# In order for the 'set' to take, this requires putting all in a subshell. -( - while read define varname value; do - [ "$define" != "#define" ] && continue - eval "$varname='$value'" - done - - # Process all the .in files in the "glog" subdirectory - mkdir -p "$1/windows/glog" - for file in `echo "$1"/glog/*.in`; do - echo "Processing $file" - outfile="$1/windows/glog/`basename $file .in`" - - echo "\ -// This file is automatically generated from $file -// using src/windows/preprocess.sh. -// DO NOT EDIT! -" > "$outfile" - # Besides replacing @...@, we also need to turn on dllimport - # We also need to replace hash by hash_compare (annoying we hard-code :-( ) - sed -e "s!@ac_windows_dllexport@!$DLLDEF_MACRO_NAME!g" \ - -e "s!@ac_windows_dllexport_defines@!$DLLDEF_DEFINES!g" \ - -e "s!@ac_cv_cxx_hash_map@!$HASH_MAP_H!g" \ - -e "s!@ac_cv_cxx_hash_namespace@!$HASH_NAMESPACE!g" \ - -e "s!@ac_cv_cxx_hash_set@!$HASH_SET_H!g" \ - -e "s!@ac_cv_have_stdint_h@!0!g" \ - -e "s!@ac_cv_have_systypes_h@!0!g" \ - -e "s!@ac_cv_have_inttypes_h@!0!g" \ - -e "s!@ac_cv_have_unistd_h@!0!g" \ - -e "s!@ac_cv_have_uint16_t@!0!g" \ - -e "s!@ac_cv_have_u_int16_t@!0!g" \ - -e "s!@ac_cv_have___uint16@!1!g" \ - -e "s!@ac_cv_have_libgflags@!0!g" \ - -e "s!@ac_cv_have___builtin_expect@!0!g" \ - -e "s!@ac_cv_cxx_using_operator@!1!g" \ - -e "s!@ac_cv___attribute___noreturn@!!g" \ - -e "s!@ac_cv___attribute___printf_4_5@!!g" \ - -e "s!@ac_google_attribute@!${HAVE___ATTRIBUTE__:-0}!g" \ - -e "s!@ac_google_end_namespace@!$_END_GOOGLE_NAMESPACE_!g" \ - -e "s!@ac_google_namespace@!$GOOGLE_NAMESPACE!g" \ - -e "s!@ac_google_start_namespace@!$_START_GOOGLE_NAMESPACE_!g" \ - -e "s!@ac_htmlparser_namespace@!$HTMLPARSER_NAMESPACE!g" \ - -e "s!\\bhash\\b!hash_compare!g" \ - "$file" >> "$outfile" - done -) < "$1/windows/config.h" - -# log_severity.h isn't a .in file. -echo "\ -// This file is automatically generated from $1/glog/log_severity.h -// using src/windows/preprocess.sh. -// DO NOT EDIT! -" > "$1/windows/glog/log_severity.h" -cat "$1/glog/log_severity.h" >> "$1/windows/glog/log_severity.h" - -echo "DONE" diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/vsprojects/libglog/libglog.vcproj b/toolkit/crashreporter/google-breakpad/src/third_party/glog/vsprojects/libglog/libglog.vcproj deleted file mode 100755 index 67aeaaccfaf0..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/vsprojects/libglog/libglog.vcproj +++ /dev/null @@ -1,249 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/vsprojects/libglog_static/libglog_static.vcproj b/toolkit/crashreporter/google-breakpad/src/third_party/glog/vsprojects/libglog_static/libglog_static.vcproj deleted file mode 100644 index ea66936ad2d5..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/vsprojects/libglog_static/libglog_static.vcproj +++ /dev/null @@ -1,220 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/vsprojects/logging_unittest/logging_unittest.vcproj b/toolkit/crashreporter/google-breakpad/src/third_party/glog/vsprojects/logging_unittest/logging_unittest.vcproj deleted file mode 100755 index 649a234174b3..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/vsprojects/logging_unittest/logging_unittest.vcproj +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/vsprojects/logging_unittest_static/logging_unittest_static.vcproj b/toolkit/crashreporter/google-breakpad/src/third_party/glog/vsprojects/logging_unittest_static/logging_unittest_static.vcproj deleted file mode 100644 index 0d33aaf408bc..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/vsprojects/logging_unittest_static/logging_unittest_static.vcproj +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/ia32_insn.c b/toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/ia32_insn.c index e4f42108e96f..cc277608bfab 100644 --- a/toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/ia32_insn.c +++ b/toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/ia32_insn.c @@ -538,12 +538,10 @@ size_t ia32_table_lookup( unsigned char *buf, size_t buf_len, static size_t handle_insn_suffix( unsigned char *buf, size_t buf_len, ia32_insn_t *raw_insn, x86_insn_t * insn ) { - ia32_table_desc_t *table_desc; ia32_insn_t *sfx_insn; size_t size; unsigned int prefixes = 0; - table_desc = &ia32_tables[raw_insn->table]; size = ia32_table_lookup( buf, buf_len, raw_insn->table, &sfx_insn, &prefixes ); if (size == INVALID_INSN || sfx_insn->mnem_flag == INS_INVALID ) { diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/libdisasm.gyp b/toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/libdisasm.gyp new file mode 100644 index 000000000000..c48ac824f25b --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/libdisasm.gyp @@ -0,0 +1,64 @@ +# Copyright 2014 Google Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +{ + 'targets': [ + { + 'target_name': 'libdisasm', + 'type': 'static_library', + 'sources': [ + 'ia32_implicit.c', + 'ia32_implicit.h', + 'ia32_insn.c', + 'ia32_insn.h', + 'ia32_invariant.c', + 'ia32_invariant.h', + 'ia32_modrm.c', + 'ia32_modrm.h', + 'ia32_opcode_tables.c', + 'ia32_opcode_tables.h', + 'ia32_operand.c', + 'ia32_operand.h', + 'ia32_reg.c', + 'ia32_reg.h', + 'ia32_settings.c', + 'ia32_settings.h', + 'libdis.h', + 'qword.h', + 'x86_disasm.c', + 'x86_format.c', + 'x86_imm.c', + 'x86_imm.h', + 'x86_insn.c', + 'x86_misc.c', + 'x86_operand_list.c', + 'x86_operand_list.h', + ], + }, + ], +} diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/x86_disasm.c b/toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/x86_disasm.c index 756158a6a1a5..51a213a46e33 100644 --- a/toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/x86_disasm.c +++ b/toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/x86_disasm.c @@ -8,7 +8,7 @@ #include "x86_operand_list.h" -#if defined(_MSC_VER) && _MSC_VER < 1900 +#ifdef _MSC_VER #define snprintf _snprintf #define inline __inline #endif @@ -165,7 +165,7 @@ unsigned int x86_disasm_forward( unsigned char *buf, unsigned int buf_len, if (next_addr != -1 ) { next_offset = next_addr - buf_rva; /* if offset is in this buffer... */ - if ( next_addr >= buf_rva && + if ( (uint32_t)next_addr >= buf_rva && next_offset < buf_len ) { /* go ahead and disassemble */ count += x86_disasm_forward( buf, diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/x86_format.c b/toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/x86_format.c index fc095de2f026..0ec960dc8f06 100644 --- a/toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/x86_format.c +++ b/toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/x86_format.c @@ -5,7 +5,7 @@ #include "libdis.h" #include -#if defined(_MSC_VER) && _MSC_VER < 1900 +#ifdef _MSC_VER #define snprintf _snprintf #define inline __inline #endif diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/x86_insn.c b/toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/x86_insn.c index 3d8d3559c28a..5649b89fb8eb 100644 --- a/toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/x86_insn.c +++ b/toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/x86_insn.c @@ -3,7 +3,7 @@ #include "libdis.h" -#if defined(_MSC_VER) && _MSC_VER < 1900 +#ifdef _MSC_VER #define snprintf _snprintf #define inline __inline #endif diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/x86_misc.c b/toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/x86_misc.c index e72e52f506af..3d2dd0ae8b0e 100644 --- a/toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/x86_misc.c +++ b/toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/x86_misc.c @@ -8,7 +8,7 @@ #include "ia32_settings.h" extern ia32_settings_t ia32_settings; -#if defined(_MSC_VER) && _MSC_VER < 1900 +#ifdef _MSC_VER #define snprintf _snprintf #define inline __inline #endif diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/lss/codereview.settings b/toolkit/crashreporter/google-breakpad/src/third_party/lss/codereview.settings new file mode 100644 index 000000000000..5954c2bed08b --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/third_party/lss/codereview.settings @@ -0,0 +1,4 @@ +# This file is used by gcl to get repository specific information. +CODE_REVIEW_SERVER: codereview.chromium.org +CC_LIST: chromium-reviews@chromium.org,markus@chromium.org,mseaborn@chromium.org +VIEW_VC: https://chromium.googlesource.com/linux-syscall-support/+/ diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/lss/linux_syscall_support.h b/toolkit/crashreporter/google-breakpad/src/third_party/lss/linux_syscall_support.h index 18277490f4be..8a42c1c8687b 100644 --- a/toolkit/crashreporter/google-breakpad/src/third_party/lss/linux_syscall_support.h +++ b/toolkit/crashreporter/google-breakpad/src/third_party/lss/linux_syscall_support.h @@ -86,7 +86,8 @@ * Porting to other related platforms should not be difficult. */ #if (defined(__i386__) || defined(__x86_64__) || defined(__ARM_ARCH_3__) || \ - defined(__mips__) || defined(__PPC__) || defined(__ARM_EABI__)) \ + defined(__mips__) || defined(__PPC__) || defined(__ARM_EABI__) || \ + defined(__aarch64__)) \ && (defined(__linux) || defined(__ANDROID__)) #ifndef SYS_CPLUSPLUS @@ -100,9 +101,11 @@ extern "C" { #include #include +#include #include #include #include +#include #include #include #include @@ -115,9 +118,16 @@ extern "C" { #ifdef __mips__ /* Include definitions of the ABI currently in use. */ +#ifdef __ANDROID__ +/* Android doesn't have sgidefs.h, but does have asm/sgidefs.h, + * which has the definitions we need. + */ +#include +#else #include #endif #endif +#endif /* The Android NDK's #defines these macros as aliases * to their non-64 counterparts. To avoid naming conflict, remove them. */ @@ -171,12 +181,17 @@ struct kernel_dirent64 { }; /* include/linux/dirent.h */ +#if defined(__aarch64__) +// aarch64 only defines dirent64, just uses that for dirent too. +#define kernel_dirent kernel_dirent64 +#else struct kernel_dirent { long d_ino; long d_off; unsigned short d_reclen; char d_name[256]; }; +#endif /* include/linux/uio.h */ struct kernel_iovec { @@ -240,7 +255,6 @@ struct kernel_rusage { long ru_nivcsw; }; -struct siginfo; #if defined(__i386__) || defined(__ARM_EABI__) || defined(__ARM_ARCH_3__) \ || defined(__PPC__) @@ -248,7 +262,7 @@ struct siginfo; struct kernel_old_sigaction { union { void (*sa_handler_)(int); - void (*sa_sigaction_)(int, struct siginfo *, void *); + void (*sa_sigaction_)(int, siginfo_t *, void *); }; unsigned long sa_mask; unsigned long sa_flags; @@ -256,6 +270,8 @@ struct kernel_old_sigaction { } __attribute__((packed,aligned(4))); #elif (defined(__mips__) && _MIPS_SIM == _MIPS_SIM_ABI32) #define kernel_old_sigaction kernel_sigaction +#elif defined(__aarch64__) + // No kernel_old_sigaction defined for arm64. #endif /* Some kernel functions (e.g. sigaction() in 2.6.23) require that the @@ -273,7 +289,7 @@ struct kernel_old_sigaction { #define KERNEL_NSIG 64 #endif -/* include/asm-{arm,i386,mips,x86_64}/signal.h */ +/* include/asm-{arm,aarch64,i386,mips,x86_64}/signal.h */ struct kernel_sigset_t { unsigned long sig[(KERNEL_NSIG + 8*sizeof(unsigned long) - 1)/ (8*sizeof(unsigned long))]; @@ -285,13 +301,13 @@ struct kernel_sigaction { unsigned long sa_flags; union { void (*sa_handler_)(int); - void (*sa_sigaction_)(int, struct siginfo *, void *); + void (*sa_sigaction_)(int, siginfo_t *, void *); }; struct kernel_sigset_t sa_mask; #else union { void (*sa_handler_)(int); - void (*sa_sigaction_)(int, struct siginfo *, void *); + void (*sa_sigaction_)(int, siginfo_t *, void *); }; unsigned long sa_flags; void (*sa_restorer)(void); @@ -305,7 +321,7 @@ struct kernel_sockaddr { char sa_data[14]; }; -/* include/asm-{arm,i386,mips,ppc}/stat.h */ +/* include/asm-{arm,aarch64,i386,mips,ppc}/stat.h */ #ifdef __mips__ #if _MIPS_SIM == _MIPS_SIM_ABI64 struct kernel_stat { @@ -378,7 +394,7 @@ struct kernel_stat64 { }; #endif -/* include/asm-{arm,i386,mips,x86_64,ppc}/stat.h */ +/* include/asm-{arm,aarch64,i386,mips,x86_64,ppc}/stat.h */ #if defined(__i386__) || defined(__ARM_ARCH_3__) || defined(__ARM_EABI__) struct kernel_stat { /* The kernel headers suggest that st_dev and st_rdev should be 32bit @@ -409,24 +425,24 @@ struct kernel_stat { }; #elif defined(__x86_64__) struct kernel_stat { - unsigned long st_dev; - unsigned long st_ino; - unsigned long st_nlink; + uint64_t st_dev; + uint64_t st_ino; + uint64_t st_nlink; unsigned st_mode; unsigned st_uid; unsigned st_gid; unsigned __pad0; - unsigned long st_rdev; - long st_size; - long st_blksize; - long st_blocks; - unsigned long st_atime_; - unsigned long st_atime_nsec_; - unsigned long st_mtime_; - unsigned long st_mtime_nsec_; - unsigned long st_ctime_; - unsigned long st_ctime_nsec_; - long __unused[3]; + uint64_t st_rdev; + int64_t st_size; + int64_t st_blksize; + int64_t st_blocks; + uint64_t st_atime_; + uint64_t st_atime_nsec_; + uint64_t st_mtime_; + uint64_t st_mtime_nsec_; + uint64_t st_ctime_; + uint64_t st_ctime_nsec_; + int64_t __unused4[3]; }; #elif defined(__PPC__) struct kernel_stat { @@ -472,9 +488,32 @@ struct kernel_stat { int st_blocks; int st_pad4[14]; }; +#elif defined(__aarch64__) +struct kernel_stat { + unsigned long st_dev; + unsigned long st_ino; + unsigned int st_mode; + unsigned int st_nlink; + unsigned int st_uid; + unsigned int st_gid; + unsigned long st_rdev; + unsigned long __pad1; + long st_size; + int st_blksize; + int __pad2; + long st_blocks; + long st_atime_; + unsigned long st_atime_nsec_; + long st_mtime_; + unsigned long st_mtime_nsec_; + long st_ctime_; + unsigned long st_ctime_nsec_; + unsigned int __unused4; + unsigned int __unused5; +}; #endif -/* include/asm-{arm,i386,mips,x86_64,ppc}/statfs.h */ +/* include/asm-{arm,aarch64,i386,mips,x86_64,ppc}/statfs.h */ #ifdef __mips__ #if _MIPS_SIM != _MIPS_SIM_ABI64 struct kernel_statfs64 { @@ -523,11 +562,25 @@ struct kernel_statfs { long f_namelen; long f_spare[6]; }; -#else +#elif defined(__x86_64__) struct kernel_statfs { /* x86_64 actually defines all these fields as signed, whereas all other */ /* platforms define them as unsigned. Leaving them at unsigned should not */ - /* cause any problems. */ + /* cause any problems. Make sure these are 64-bit even on x32. */ + uint64_t f_type; + uint64_t f_bsize; + uint64_t f_blocks; + uint64_t f_bfree; + uint64_t f_bavail; + uint64_t f_files; + uint64_t f_ffree; + struct { int val[2]; } f_fsid; + uint64_t f_namelen; + uint64_t f_frsize; + uint64_t f_spare[5]; +}; +#else +struct kernel_statfs { unsigned long f_type; unsigned long f_bsize; unsigned long f_blocks; @@ -545,7 +598,7 @@ struct kernel_statfs { /* Definitions missing from the standard header files */ #ifndef O_DIRECTORY -#if defined(__ARM_ARCH_3__) || defined(__ARM_EABI__) +#if defined(__ARM_ARCH_3__) || defined(__ARM_EABI__) || defined(__aarch64__) #define O_DIRECTORY 0040000 #else #define O_DIRECTORY 0200000 @@ -899,6 +952,102 @@ struct kernel_statfs { #define __NR_getcpu (__NR_SYSCALL_BASE + 345) #endif /* End of ARM 3/EABI definitions */ +#elif defined(__aarch64__) +#ifndef __NR_setxattr +#define __NR_setxattr 5 +#endif +#ifndef __NR_lsetxattr +#define __NR_lsetxattr 6 +#endif +#ifndef __NR_getxattr +#define __NR_getxattr 8 +#endif +#ifndef __NR_lgetxattr +#define __NR_lgetxattr 9 +#endif +#ifndef __NR_listxattr +#define __NR_listxattr 11 +#endif +#ifndef __NR_llistxattr +#define __NR_llistxattr 12 +#endif +#ifndef __NR_ioprio_set +#define __NR_ioprio_set 30 +#endif +#ifndef __NR_ioprio_get +#define __NR_ioprio_get 31 +#endif +#ifndef __NR_unlinkat +#define __NR_unlinkat 35 +#endif +#ifndef __NR_fallocate +#define __NR_fallocate 47 +#endif +#ifndef __NR_openat +#define __NR_openat 56 +#endif +#ifndef __NR_quotactl +#define __NR_quotactl 60 +#endif +#ifndef __NR_getdents64 +#define __NR_getdents64 61 +#endif +#ifndef __NR_getdents +#define __NR_getdents __NR_getdents64 +#endif +#ifndef __NR_pread64 +#define __NR_pread64 67 +#endif +#ifndef __NR_pwrite64 +#define __NR_pwrite64 68 +#endif +#ifndef __NR_ppoll +#define __NR_ppoll 73 +#endif +#ifndef __NR_readlinkat +#define __NR_readlinkat 78 +#endif +#ifndef __NR_newfstatat +#define __NR_newfstatat 79 +#endif +#ifndef __NR_set_tid_address +#define __NR_set_tid_address 96 +#endif +#ifndef __NR_futex +#define __NR_futex 98 +#endif +#ifndef __NR_clock_gettime +#define __NR_clock_gettime 113 +#endif +#ifndef __NR_clock_getres +#define __NR_clock_getres 114 +#endif +#ifndef __NR_sched_setaffinity +#define __NR_sched_setaffinity 122 +#define __NR_sched_getaffinity 123 +#endif +#ifndef __NR_tkill +#define __NR_tkill 130 +#endif +#ifndef __NR_setresuid +#define __NR_setresuid 147 +#define __NR_getresuid 148 +#define __NR_setresgid 149 +#define __NR_getresgid 150 +#endif +#ifndef __NR_gettid +#define __NR_gettid 178 +#endif +#ifndef __NR_readahead +#define __NR_readahead 213 +#endif +#ifndef __NR_fadvise64 +#define __NR_fadvise64 223 +#endif +#ifndef __NR_move_pages +#define __NR_move_pages 239 +#endif +/* End of aarch64 definitions */ #elif defined(__x86_64__) #ifndef __NR_pread64 #define __NR_pread64 17 @@ -1418,7 +1567,7 @@ struct kernel_statfs { #undef LSS_RETURN #if (defined(__i386__) || defined(__x86_64__) || defined(__ARM_ARCH_3__) \ - || defined(__ARM_EABI__)) + || defined(__ARM_EABI__) || defined(__aarch64__)) /* Failing system calls return a negative result in the range of * -1..-4095. These are "errno" values with the sign inverted. */ @@ -1792,75 +1941,139 @@ struct kernel_statfs { #else #define LSS_ENTRYPOINT "syscall\n" #endif + + /* The x32 ABI has 32 bit longs, but the syscall interface is 64 bit. + * We need to explicitly cast to an unsigned 64 bit type to avoid implicit + * sign extension. We can't cast pointers directly because those are + * 32 bits, and gcc will dump ugly warnings about casting from a pointer + * to an integer of a different size. + */ + #undef LSS_SYSCALL_ARG + #define LSS_SYSCALL_ARG(a) ((uint64_t)(uintptr_t)(a)) + #undef _LSS_RETURN + #define _LSS_RETURN(type, res, cast) \ + do { \ + if ((uint64_t)(res) >= (uint64_t)(-4095)) { \ + LSS_ERRNO = -(res); \ + res = -1; \ + } \ + return (type)(cast)(res); \ + } while (0) + #undef LSS_RETURN + #define LSS_RETURN(type, res) _LSS_RETURN(type, res, uintptr_t) + + #undef _LSS_BODY + #define _LSS_BODY(nr, type, name, cast, ...) \ + long long __res; \ + __asm__ __volatile__(LSS_BODY_ASM##nr LSS_ENTRYPOINT \ + : "=a" (__res) \ + : "0" (__NR_##name) LSS_BODY_ARG##nr(__VA_ARGS__) \ + : LSS_BODY_CLOBBER##nr "r11", "rcx", "memory"); \ + _LSS_RETURN(type, __res, cast) #undef LSS_BODY - #define LSS_BODY(type,name, ...) \ - long __res; \ - __asm__ __volatile__(LSS_ENTRYPOINT \ - : "=a" (__res) : "0" (__NR_##name), \ - ##__VA_ARGS__ : "r11", "rcx", "memory"); \ - LSS_RETURN(type, __res) + #define LSS_BODY(nr, type, name, args...) \ + _LSS_BODY(nr, type, name, uintptr_t, ## args) + + #undef LSS_BODY_ASM0 + #undef LSS_BODY_ASM1 + #undef LSS_BODY_ASM2 + #undef LSS_BODY_ASM3 + #undef LSS_BODY_ASM4 + #undef LSS_BODY_ASM5 + #undef LSS_BODY_ASM6 + #define LSS_BODY_ASM0 + #define LSS_BODY_ASM1 LSS_BODY_ASM0 + #define LSS_BODY_ASM2 LSS_BODY_ASM1 + #define LSS_BODY_ASM3 LSS_BODY_ASM2 + #define LSS_BODY_ASM4 LSS_BODY_ASM3 "movq %5,%%r10;" + #define LSS_BODY_ASM5 LSS_BODY_ASM4 "movq %6,%%r8;" + #define LSS_BODY_ASM6 LSS_BODY_ASM5 "movq %7,%%r9;" + + #undef LSS_BODY_CLOBBER0 + #undef LSS_BODY_CLOBBER1 + #undef LSS_BODY_CLOBBER2 + #undef LSS_BODY_CLOBBER3 + #undef LSS_BODY_CLOBBER4 + #undef LSS_BODY_CLOBBER5 + #undef LSS_BODY_CLOBBER6 + #define LSS_BODY_CLOBBER0 + #define LSS_BODY_CLOBBER1 LSS_BODY_CLOBBER0 + #define LSS_BODY_CLOBBER2 LSS_BODY_CLOBBER1 + #define LSS_BODY_CLOBBER3 LSS_BODY_CLOBBER2 + #define LSS_BODY_CLOBBER4 LSS_BODY_CLOBBER3 "r10", + #define LSS_BODY_CLOBBER5 LSS_BODY_CLOBBER4 "r8", + #define LSS_BODY_CLOBBER6 LSS_BODY_CLOBBER5 "r9", + + #undef LSS_BODY_ARG0 + #undef LSS_BODY_ARG1 + #undef LSS_BODY_ARG2 + #undef LSS_BODY_ARG3 + #undef LSS_BODY_ARG4 + #undef LSS_BODY_ARG5 + #undef LSS_BODY_ARG6 + #define LSS_BODY_ARG0() + #define LSS_BODY_ARG1(arg1) \ + LSS_BODY_ARG0(), "D" (arg1) + #define LSS_BODY_ARG2(arg1, arg2) \ + LSS_BODY_ARG1(arg1), "S" (arg2) + #define LSS_BODY_ARG3(arg1, arg2, arg3) \ + LSS_BODY_ARG2(arg1, arg2), "d" (arg3) + #define LSS_BODY_ARG4(arg1, arg2, arg3, arg4) \ + LSS_BODY_ARG3(arg1, arg2, arg3), "r" (arg4) + #define LSS_BODY_ARG5(arg1, arg2, arg3, arg4, arg5) \ + LSS_BODY_ARG4(arg1, arg2, arg3, arg4), "r" (arg5) + #define LSS_BODY_ARG6(arg1, arg2, arg3, arg4, arg5, arg6) \ + LSS_BODY_ARG5(arg1, arg2, arg3, arg4, arg5), "r" (arg6) + #undef _syscall0 #define _syscall0(type,name) \ - type LSS_NAME(name)() { \ - LSS_BODY(type, name); \ + type LSS_NAME(name)(void) { \ + LSS_BODY(0, type, name); \ } #undef _syscall1 #define _syscall1(type,name,type1,arg1) \ type LSS_NAME(name)(type1 arg1) { \ - LSS_BODY(type, name, "D" ((long)(arg1))); \ + LSS_BODY(1, type, name, LSS_SYSCALL_ARG(arg1)); \ } #undef _syscall2 #define _syscall2(type,name,type1,arg1,type2,arg2) \ type LSS_NAME(name)(type1 arg1, type2 arg2) { \ - LSS_BODY(type, name, "D" ((long)(arg1)), "S" ((long)(arg2))); \ + LSS_BODY(2, type, name, LSS_SYSCALL_ARG(arg1), LSS_SYSCALL_ARG(arg2));\ } #undef _syscall3 #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3) { \ - LSS_BODY(type, name, "D" ((long)(arg1)), "S" ((long)(arg2)), \ - "d" ((long)(arg3))); \ + LSS_BODY(3, type, name, LSS_SYSCALL_ARG(arg1), LSS_SYSCALL_ARG(arg2), \ + LSS_SYSCALL_ARG(arg3)); \ } #undef _syscall4 #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4) { \ - long __res; \ - __asm__ __volatile__("movq %5,%%r10;" LSS_ENTRYPOINT : \ - "=a" (__res) : "0" (__NR_##name), \ - "D" ((long)(arg1)), "S" ((long)(arg2)), "d" ((long)(arg3)), \ - "r" ((long)(arg4)) : "r10", "r11", "rcx", "memory"); \ - LSS_RETURN(type, __res); \ + LSS_BODY(4, type, name, LSS_SYSCALL_ARG(arg1), LSS_SYSCALL_ARG(arg2), \ + LSS_SYSCALL_ARG(arg3), LSS_SYSCALL_ARG(arg4));\ } #undef _syscall5 #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ type5,arg5) \ type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ type5 arg5) { \ - long __res; \ - __asm__ __volatile__("movq %5,%%r10; movq %6,%%r8;" LSS_ENTRYPOINT :\ - "=a" (__res) : "0" (__NR_##name), \ - "D" ((long)(arg1)), "S" ((long)(arg2)), "d" ((long)(arg3)), \ - "r" ((long)(arg4)), "r" ((long)(arg5)) : \ - "r8", "r10", "r11", "rcx", "memory"); \ - LSS_RETURN(type, __res); \ + LSS_BODY(5, type, name, LSS_SYSCALL_ARG(arg1), LSS_SYSCALL_ARG(arg2), \ + LSS_SYSCALL_ARG(arg3), LSS_SYSCALL_ARG(arg4), \ + LSS_SYSCALL_ARG(arg5)); \ } #undef _syscall6 #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ type5,arg5,type6,arg6) \ type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ type5 arg5, type6 arg6) { \ - long __res; \ - __asm__ __volatile__("movq %5,%%r10; movq %6,%%r8; movq %7,%%r9;" \ - LSS_ENTRYPOINT : \ - "=a" (__res) : "0" (__NR_##name), \ - "D" ((long)(arg1)), "S" ((long)(arg2)), "d" ((long)(arg3)), \ - "r" ((long)(arg4)), "r" ((long)(arg5)), "r" ((long)(arg6)) : \ - "r8", "r9", "r10", "r11", "rcx", "memory"); \ - LSS_RETURN(type, __res); \ + LSS_BODY(6, type, name, LSS_SYSCALL_ARG(arg1), LSS_SYSCALL_ARG(arg2), \ + LSS_SYSCALL_ARG(arg3), LSS_SYSCALL_ARG(arg4), \ + LSS_SYSCALL_ARG(arg5), LSS_SYSCALL_ARG(arg6));\ } LSS_INLINE int LSS_NAME(clone)(int (*fn)(void *), void *child_stack, int flags, void *arg, int *parent_tidptr, void *newtls, int *child_tidptr) { - long __res; + long long __res; { __asm__ __volatile__(/* if (fn == NULL) * return -EINVAL; @@ -1923,16 +2136,25 @@ struct kernel_statfs { "1:\n" : "=a" (__res) : "0"(-EINVAL), "i"(__NR_clone), "i"(__NR_exit), - "r"(fn), "S"(child_stack), "D"(flags), "r"(arg), - "d"(parent_tidptr), "r"(newtls), - "r"(child_tidptr) + "r"(LSS_SYSCALL_ARG(fn)), + "S"(LSS_SYSCALL_ARG(child_stack)), + "D"(LSS_SYSCALL_ARG(flags)), + "r"(LSS_SYSCALL_ARG(arg)), + "d"(LSS_SYSCALL_ARG(parent_tidptr)), + "r"(LSS_SYSCALL_ARG(newtls)), + "r"(LSS_SYSCALL_ARG(child_tidptr)) : "rsp", "memory", "r8", "r10", "r11", "rcx"); } LSS_RETURN(int, __res); } LSS_INLINE _syscall2(int, arch_prctl, int, c, void *, a) - LSS_INLINE _syscall4(int, fadvise64, int, fd, loff_t, offset, loff_t, len, - int, advice) + + /* Need to make sure loff_t isn't truncated to 32-bits under x32. */ + LSS_INLINE int LSS_NAME(fadvise64)(int fd, loff_t offset, loff_t len, + int advice) { + LSS_BODY(4, int, fadvise64, LSS_SYSCALL_ARG(fd), (uint64_t)(offset), + (uint64_t)(len), LSS_SYSCALL_ARG(advice)); + } LSS_INLINE void (*LSS_NAME(restore_rt)(void))(void) { /* On x86-64, the kernel does not know how to return from @@ -1941,16 +2163,15 @@ struct kernel_statfs { * Unfortunately, we cannot just reference the glibc version of this * function, as glibc goes out of its way to make it inaccessible. */ - void (*res)(void); - __asm__ __volatile__("call 2f\n" - "0:.align 16\n" + long long res; + __asm__ __volatile__("jmp 2f\n" + ".align 16\n" "1:movq %1,%%rax\n" LSS_ENTRYPOINT - "2:popq %0\n" - "addq $(1b-0b),%0\n" - : "=a" (res) + "2:leaq 1b(%%rip),%0\n" + : "=r" (res) : "i" (__NR_rt_sigreturn)); - return res; + return (void (*)(void))(uintptr_t)res; } #elif defined(__ARM_ARCH_3__) /* Most definitions of _syscallX() neglect to mark "memory" as being @@ -1970,7 +2191,7 @@ struct kernel_statfs { LSS_RETURN(type, __res) #undef _syscall0 #define _syscall0(type, name) \ - type LSS_NAME(name)() { \ + type LSS_NAME(name)(void) { \ LSS_BODY(type, name); \ } #undef _syscall1 @@ -2096,7 +2317,7 @@ struct kernel_statfs { LSS_RETURN(type, __res) #undef _syscall0 #define _syscall0(type, name) \ - type LSS_NAME(name)() { \ + type LSS_NAME(name)(void) { \ LSS_BODY(type, name); \ } #undef _syscall1 @@ -2156,6 +2377,9 @@ struct kernel_statfs { __asm__ __volatile__(/* if (fn == NULL || child_stack == NULL) * return -EINVAL; */ +#ifdef __thumb2__ + "push {r7}\n" +#endif "cmp %2,#0\n" "it ne\n" "cmpne %3,#0\n" @@ -2211,12 +2435,136 @@ struct kernel_statfs { "mov r7, %10\n" "swi 0x0\n" "1:\n" +#ifdef __thumb2__ + "pop {r7}" +#endif : "=r" (__res) : "i"(-EINVAL), "r"(fn), "r"(__stack), "r"(__flags), "r"(arg), "r"(__ptid), "r"(__tls), "r"(__ctid), "i"(__NR_clone), "i"(__NR_exit) +#ifdef __thumb2__ + : "cc", "lr", "memory"); +#else : "cc", "r7", "lr", "memory"); +#endif + } + LSS_RETURN(int, __res); + } + #elif defined(__aarch64__) + /* Most definitions of _syscallX() neglect to mark "memory" as being + * clobbered. This causes problems with compilers, that do a better job + * at optimizing across __asm__ calls. + * So, we just have to redefine all of the _syscallX() macros. + */ + #undef LSS_REG + #define LSS_REG(r,a) register int64_t __r##r __asm__("x"#r) = (int64_t)a + #undef LSS_BODY + #define LSS_BODY(type,name,args...) \ + register int64_t __res_x0 __asm__("x0"); \ + int64_t __res; \ + __asm__ __volatile__ ("mov x8, %1\n" \ + "svc 0x0\n" \ + : "=r"(__res_x0) \ + : "i"(__NR_##name) , ## args \ + : "x8", "memory"); \ + __res = __res_x0; \ + LSS_RETURN(type, __res) + #undef _syscall0 + #define _syscall0(type, name) \ + type LSS_NAME(name)(void) { \ + LSS_BODY(type, name); \ + } + #undef _syscall1 + #define _syscall1(type, name, type1, arg1) \ + type LSS_NAME(name)(type1 arg1) { \ + LSS_REG(0, arg1); LSS_BODY(type, name, "r"(__r0)); \ + } + #undef _syscall2 + #define _syscall2(type, name, type1, arg1, type2, arg2) \ + type LSS_NAME(name)(type1 arg1, type2 arg2) { \ + LSS_REG(0, arg1); LSS_REG(1, arg2); \ + LSS_BODY(type, name, "r"(__r0), "r"(__r1)); \ + } + #undef _syscall3 + #define _syscall3(type, name, type1, arg1, type2, arg2, type3, arg3) \ + type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3) { \ + LSS_REG(0, arg1); LSS_REG(1, arg2); LSS_REG(2, arg3); \ + LSS_BODY(type, name, "r"(__r0), "r"(__r1), "r"(__r2)); \ + } + #undef _syscall4 + #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ + type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4) { \ + LSS_REG(0, arg1); LSS_REG(1, arg2); LSS_REG(2, arg3); \ + LSS_REG(3, arg4); \ + LSS_BODY(type, name, "r"(__r0), "r"(__r1), "r"(__r2), "r"(__r3)); \ + } + #undef _syscall5 + #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ + type5,arg5) \ + type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ + type5 arg5) { \ + LSS_REG(0, arg1); LSS_REG(1, arg2); LSS_REG(2, arg3); \ + LSS_REG(3, arg4); LSS_REG(4, arg5); \ + LSS_BODY(type, name, "r"(__r0), "r"(__r1), "r"(__r2), "r"(__r3), \ + "r"(__r4)); \ + } + #undef _syscall6 + #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ + type5,arg5,type6,arg6) \ + type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \ + type5 arg5, type6 arg6) { \ + LSS_REG(0, arg1); LSS_REG(1, arg2); LSS_REG(2, arg3); \ + LSS_REG(3, arg4); LSS_REG(4, arg5); LSS_REG(5, arg6); \ + LSS_BODY(type, name, "r"(__r0), "r"(__r1), "r"(__r2), "r"(__r3), \ + "r"(__r4), "r"(__r5)); \ + } + + LSS_INLINE int LSS_NAME(clone)(int (*fn)(void *), void *child_stack, + int flags, void *arg, int *parent_tidptr, + void *newtls, int *child_tidptr) { + int64_t __res; + { + register uint64_t __flags __asm__("x0") = flags; + register void *__stack __asm__("x1") = child_stack; + register void *__ptid __asm__("x2") = parent_tidptr; + register void *__tls __asm__("x3") = newtls; + register int *__ctid __asm__("x4") = child_tidptr; + __asm__ __volatile__(/* Push "arg" and "fn" onto the stack that will be + * used by the child. + */ + "stp %1, %4, [%2, #-16]!\n" + + /* %x0 = syscall(%x0 = flags, + * %x1 = child_stack, + * %x2 = parent_tidptr, + * %x3 = newtls, + * %x4 = child_tidptr) + */ + "mov x8, %8\n" + "svc 0x0\n" + + /* if (%r0 != 0) + * return %r0; + */ + "mov %0, x0\n" + "cbnz x0, 1f\n" + + /* In the child, now. Call "fn(arg)". + */ + "ldp x1, x0, [sp], #16\n" + "blr x1\n" + + /* Call _exit(%r0). + */ + "mov x8, %9\n" + "svc 0x0\n" + "1:\n" + : "=r" (__res) + : "r"(fn), "r"(__stack), "r"(__flags), "r"(arg), + "r"(__ptid), "r"(__tls), "r"(__ctid), + "i"(__NR_clone), "i"(__NR_exit) + : "cc", "x8", "memory"); } LSS_RETURN(int, __res); } @@ -2225,18 +2573,26 @@ struct kernel_statfs { #define LSS_REG(r,a) register unsigned long __r##r __asm__("$"#r) = \ (unsigned long)(a) #undef LSS_BODY + #undef LSS_SYSCALL_CLOBBERS + #if _MIPS_SIM == _MIPS_SIM_ABI32 + #define LSS_SYSCALL_CLOBBERS "$1", "$3", "$8", "$9", "$10", \ + "$11", "$12", "$13", "$14", "$15", \ + "$24", "$25", "hi", "lo", "memory" + #else + #define LSS_SYSCALL_CLOBBERS "$1", "$3", "$10", "$11", "$12", \ + "$13", "$14", "$15", "$24", "$25", \ + "hi", "lo", "memory" + #endif #define LSS_BODY(type,name,r7,...) \ register unsigned long __v0 __asm__("$2") = __NR_##name; \ __asm__ __volatile__ ("syscall\n" \ - : "+r"(__v0), r7 (__r7) \ + : "=r"(__v0), r7 (__r7) \ : "0"(__v0), ##__VA_ARGS__ \ - : "$8", "$9", "$10", "$11", "$12", \ - "$13", "$14", "$15", "$24", "$25", \ - "memory"); \ + : LSS_SYSCALL_CLOBBERS); \ LSS_RETURN(type, __v0, __r7) #undef _syscall0 #define _syscall0(type, name) \ - type LSS_NAME(name)() { \ + type LSS_NAME(name)(void) { \ register unsigned long __r7 __asm__("$7"); \ LSS_BODY(type, name, "=r"); \ } @@ -2346,7 +2702,7 @@ struct kernel_statfs { LSS_INLINE int LSS_NAME(clone)(int (*fn)(void *), void *child_stack, int flags, void *arg, int *parent_tidptr, void *newtls, int *child_tidptr) { - register unsigned long __v0 __asm__("$2"); + register unsigned long __v0 __asm__("$2") = -EINVAL; register unsigned long __r7 __asm__("$7") = (unsigned long)newtls; { register int __flags __asm__("$4") = flags; @@ -2365,25 +2721,24 @@ struct kernel_statfs { /* if (fn == NULL || child_stack == NULL) * return -EINVAL; */ - "li %0,%2\n" + "beqz %4,1f\n" "beqz %5,1f\n" - "beqz %6,1f\n" /* Push "arg" and "fn" onto the stack that will be * used by the child. */ #if _MIPS_SIM == _MIPS_SIM_ABI32 && _MIPS_SZPTR == 32 - "subu %6,32\n" - "sw %5,0(%6)\n" - "sw %8,4(%6)\n" + "subu %5,32\n" + "sw %4,0(%5)\n" + "sw %7,4(%5)\n" #elif _MIPS_SIM == _MIPS_SIM_NABI32 - "sub %6,32\n" - "sw %5,0(%6)\n" - "sw %8,8(%6)\n" + "sub %5,32\n" + "sw %4,0(%5)\n" + "sw %7,8(%5)\n" #else - "dsubu %6,32\n" - "sd %5,0(%6)\n" - "sd %8,8(%6)\n" + "dsubu %5,32\n" + "sd %4,0(%5)\n" + "sd %7,8(%5)\n" #endif /* $7 = syscall($4 = flags, @@ -2392,7 +2747,7 @@ struct kernel_statfs { * $7 = newtls, * $8 = child_tidptr) */ - "li $2,%3\n" + "li $2,%2\n" "syscall\n" /* if ($7 != 0) @@ -2418,7 +2773,7 @@ struct kernel_statfs { /* Call _exit($2) */ "move $4,$2\n" - "li $2,%4\n" + "li $2,%3\n" "syscall\n" "1:\n" @@ -2429,10 +2784,10 @@ struct kernel_statfs { #else "daddu $29,16\n" #endif - : "=&r" (__v0), "+r" (__r7) - : "i"(-EINVAL), "i"(__NR_clone), "i"(__NR_exit), - "r"(fn), "r"(__stack), "r"(__flags), "r"(arg), - "r"(__ptid), "r"(__r7), "r"(__ctid) + : "+r" (__v0), "+r" (__r7) + : "i"(__NR_clone), "i"(__NR_exit), "r"(fn), + "r"(__stack), "r"(__flags), "r"(arg), + "r"(__ptid), "r"(__ctid) : "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "memory"); } @@ -2625,7 +2980,7 @@ struct kernel_statfs { #define __NR__exit __NR_exit #define __NR__gettid __NR_gettid #define __NR__mremap __NR_mremap - LSS_INLINE _syscall1(int, brk, void *, e) + LSS_INLINE _syscall1(void *, brk, void *, e) LSS_INLINE _syscall1(int, chdir, const char *,p) LSS_INLINE _syscall1(int, close, int, f) LSS_INLINE _syscall2(int, clock_getres, int, c, @@ -2633,31 +2988,47 @@ struct kernel_statfs { LSS_INLINE _syscall2(int, clock_gettime, int, c, struct kernel_timespec*, t) LSS_INLINE _syscall1(int, dup, int, f) - LSS_INLINE _syscall2(int, dup2, int, s, - int, d) + #if !defined(__aarch64__) + // The dup2 syscall has been deprecated on aarch64. We polyfill it below. + LSS_INLINE _syscall2(int, dup2, int, s, + int, d) + #endif LSS_INLINE _syscall3(int, execve, const char*, f, const char*const*,a,const char*const*, e) LSS_INLINE _syscall1(int, _exit, int, e) LSS_INLINE _syscall1(int, exit_group, int, e) LSS_INLINE _syscall3(int, fcntl, int, f, int, c, long, a) - LSS_INLINE _syscall0(pid_t, fork) + #if !defined(__aarch64__) + // The fork syscall has been deprecated on aarch64. We polyfill it below. + LSS_INLINE _syscall0(pid_t, fork) + #endif LSS_INLINE _syscall2(int, fstat, int, f, struct kernel_stat*, b) LSS_INLINE _syscall2(int, fstatfs, int, f, struct kernel_statfs*, b) - LSS_INLINE _syscall2(int, ftruncate, int, f, - off_t, l) + #if defined(__x86_64__) + /* Need to make sure off_t isn't truncated to 32-bits under x32. */ + LSS_INLINE int LSS_NAME(ftruncate)(int f, off_t l) { + LSS_BODY(2, int, ftruncate, LSS_SYSCALL_ARG(f), (uint64_t)(l)); + } + #else + LSS_INLINE _syscall2(int, ftruncate, int, f, + off_t, l) + #endif LSS_INLINE _syscall4(int, futex, int*, a, int, o, int, v, struct kernel_timespec*, t) LSS_INLINE _syscall3(int, getdents, int, f, - struct kernel_dirent*, d, int, c) + struct kernel_dirent*, d, int, c) LSS_INLINE _syscall3(int, getdents64, int, f, struct kernel_dirent64*, d, int, c) LSS_INLINE _syscall0(gid_t, getegid) LSS_INLINE _syscall0(uid_t, geteuid) - LSS_INLINE _syscall0(pid_t, getpgrp) + #if !defined(__aarch64__) + // The getgprp syscall has been deprecated on aarch64. + LSS_INLINE _syscall0(pid_t, getpgrp) + #endif LSS_INLINE _syscall0(pid_t, getpid) LSS_INLINE _syscall0(pid_t, getppid) LSS_INLINE _syscall2(int, getpriority, int, a, @@ -2696,8 +3067,16 @@ struct kernel_statfs { int, who, int, ioprio) LSS_INLINE _syscall2(int, kill, pid_t, p, int, s) - LSS_INLINE _syscall3(off_t, lseek, int, f, - off_t, o, int, w) + #if defined(__x86_64__) + /* Need to make sure off_t isn't truncated to 32-bits under x32. */ + LSS_INLINE off_t LSS_NAME(lseek)(int f, off_t o, int w) { + _LSS_BODY(3, off_t, lseek, off_t, LSS_SYSCALL_ARG(f), (uint64_t)(o), + LSS_SYSCALL_ARG(w)); + } + #else + LSS_INLINE _syscall3(off_t, lseek, int, f, + off_t, o, int, w) + #endif LSS_INLINE _syscall2(int, munmap, void*, s, size_t, l) LSS_INLINE _syscall6(long, move_pages, pid_t, p, @@ -2708,12 +3087,19 @@ struct kernel_statfs { LSS_INLINE _syscall5(void*, _mremap, void*, o, size_t, os, size_t, ns, unsigned long, f, void *, a) - LSS_INLINE _syscall3(int, open, const char*, p, - int, f, int, m) - LSS_INLINE _syscall3(int, poll, struct kernel_pollfd*, u, - unsigned int, n, int, t) - LSS_INLINE _syscall2(int, prctl, int, o, - long, a) + #if !defined(__aarch64__) + // The open and poll syscalls have been deprecated on aarch64. We polyfill + // them below. + LSS_INLINE _syscall3(int, open, const char*, p, + int, f, int, m) + LSS_INLINE _syscall3(int, poll, struct kernel_pollfd*, u, + unsigned int, n, int, t) + #endif + LSS_INLINE _syscall5(int, prctl, int, option, + unsigned long, arg2, + unsigned long, arg3, + unsigned long, arg4, + unsigned long, arg5) LSS_INLINE _syscall4(long, ptrace, int, r, pid_t, p, void *, a, void *, d) #if defined(__NR_quotactl) @@ -2723,8 +3109,11 @@ struct kernel_statfs { #endif LSS_INLINE _syscall3(ssize_t, read, int, f, void *, b, size_t, c) - LSS_INLINE _syscall3(int, readlink, const char*, p, - char*, b, size_t, s) + #if !defined(__aarch64__) + // The readlink syscall has been deprecated on aarch64. We polyfill below. + LSS_INLINE _syscall3(int, readlink, const char*, p, + char*, b, size_t, s) + #endif LSS_INLINE _syscall4(int, rt_sigaction, int, s, const struct kernel_sigaction*, a, struct kernel_sigaction*, o, size_t, c) @@ -2759,17 +3148,23 @@ struct kernel_statfs { LSS_INLINE _syscall2(int, sigaltstack, const stack_t*, s, const stack_t*, o) #if defined(__NR_sigreturn) - LSS_INLINE _syscall1(int, sigreturn, unsigned long, u) + LSS_INLINE _syscall1(int, sigreturn, unsigned long, u) + #endif + #if !defined(__aarch64__) + // The stat syscall has been deprecated on aarch64. We polyfill it below. + LSS_INLINE _syscall2(int, stat, const char*, f, + struct kernel_stat*, b) #endif - LSS_INLINE _syscall2(int, stat, const char*, f, - struct kernel_stat*, b) LSS_INLINE _syscall2(int, statfs, const char*, f, struct kernel_statfs*, b) LSS_INLINE _syscall3(int, tgkill, pid_t, p, pid_t, t, int, s) LSS_INLINE _syscall2(int, tkill, pid_t, p, int, s) - LSS_INLINE _syscall1(int, unlink, const char*, f) + #if !defined(__aarch64__) + // The unlink syscall has been deprecated on aarch64. We polyfill it below. + LSS_INLINE _syscall1(int, unlink, const char*, f) + #endif LSS_INLINE _syscall3(ssize_t, write, int, f, const void *, b, size_t, c) LSS_INLINE _syscall3(ssize_t, writev, int, f, @@ -2796,8 +3191,12 @@ struct kernel_statfs { int, t, int, p, int*, s) #endif #if defined(__x86_64__) - LSS_INLINE _syscall4(int, fallocate, int, fd, int, mode, - loff_t, offset, loff_t, len) + /* Need to make sure loff_t isn't truncated to 32-bits under x32. */ + LSS_INLINE int LSS_NAME(fallocate)(int f, int mode, loff_t offset, + loff_t len) { + LSS_BODY(4, int, fallocate, LSS_SYSCALL_ARG(f), LSS_SYSCALL_ARG(mode), + (uint64_t)(offset), (uint64_t)(len)); + } LSS_INLINE int LSS_NAME(getresgid32)(gid_t *rgid, gid_t *egid, @@ -2811,10 +3210,13 @@ struct kernel_statfs { return LSS_NAME(getresuid)(ruid, euid, suid); } - LSS_INLINE _syscall6(void*, mmap, void*, s, - size_t, l, int, p, - int, f, int, d, - __off64_t, o) + /* Need to make sure __off64_t isn't truncated to 32-bits under x32. */ + LSS_INLINE void* LSS_NAME(mmap)(void *s, size_t l, int p, int f, int d, + int64_t o) { + LSS_BODY(6, void*, mmap, LSS_SYSCALL_ARG(s), LSS_SYSCALL_ARG(l), + LSS_SYSCALL_ARG(p), LSS_SYSCALL_ARG(f), + LSS_SYSCALL_ARG(d), (uint64_t)(o)); + } LSS_INLINE _syscall4(int, newfstatat, int, d, const char *, p, @@ -2871,7 +3273,7 @@ struct kernel_statfs { } #endif #if defined(__x86_64__) || defined(__ARM_ARCH_3__) || \ - defined(__ARM_EABI__) || \ + defined(__ARM_EABI__) || defined(__aarch64__) || \ (defined(__mips__) && _MIPS_SIM != _MIPS_SIM_ABI32) LSS_INLINE _syscall4(pid_t, wait4, pid_t, p, int*, s, int, o, @@ -2881,7 +3283,7 @@ struct kernel_statfs { return LSS_NAME(wait4)(pid, status, options, 0); } #endif - #if defined(__i386__) || defined(__x86_64__) + #if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__) LSS_INLINE _syscall4(int, openat, int, d, const char *, p, int, f, int, m) LSS_INLINE _syscall3(int, unlinkat, int, d, const char *, p, int, f) #endif @@ -3269,7 +3671,7 @@ struct kernel_statfs { LSS_SC_BODY(4, int, 8, d, type, protocol, sv); } #endif - #if defined(__ARM_EABI__) + #if defined(__ARM_EABI__) || defined (__aarch64__) LSS_INLINE _syscall3(ssize_t, recvmsg, int, s, struct kernel_msghdr*, msg, int, flags) LSS_INLINE _syscall3(ssize_t, sendmsg, int, s, const struct kernel_msghdr*, @@ -3346,7 +3748,7 @@ struct kernel_statfs { register unsigned long __v1 __asm__("$3"); register unsigned long __r7 __asm__("$7"); __asm__ __volatile__ ("syscall\n" - : "+r"(__v0), "=r"(__v1), "=r" (__r7) + : "=r"(__v0), "=r"(__v1), "=r" (__r7) : "0"(__v0) : "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", "$25", "memory"); @@ -3360,7 +3762,8 @@ struct kernel_statfs { return 0; } } - #else + #elif !defined(__aarch64__) + // The unlink syscall has been deprecated on aarch64. We polyfill it below. LSS_INLINE _syscall1(int, pipe, int *, p) #endif /* TODO(csilvers): see if ppc can/should support this as well */ @@ -3387,7 +3790,7 @@ struct kernel_statfs { return LSS_NAME(execve)(path, argv, (const char *const *)environ); } - LSS_INLINE pid_t LSS_NAME(gettid)() { + LSS_INLINE pid_t LSS_NAME(gettid)(void) { pid_t tid = LSS_NAME(_gettid)(); if (tid != -1) { return tid; @@ -3434,7 +3837,7 @@ struct kernel_statfs { return LSS_NAME(kill)(LSS_NAME(getpid)(), sig); } - LSS_INLINE int LSS_NAME(setpgrp)() { + LSS_INLINE int LSS_NAME(setpgrp)(void) { return LSS_NAME(setpgid)(0, 0); } @@ -3458,8 +3861,24 @@ struct kernel_statfs { return -1; } } - #if defined(__x86_64__) || \ - (defined(__mips__) && _MIPS_SIM == _MIPS_SIM_ABI64) + #if defined(__x86_64__) + /* Need to make sure loff_t isn't truncated to 32-bits under x32. */ + LSS_INLINE ssize_t LSS_NAME(pread64)(int f, void *b, size_t c, loff_t o) { + LSS_BODY(4, ssize_t, pread64, LSS_SYSCALL_ARG(f), LSS_SYSCALL_ARG(b), + LSS_SYSCALL_ARG(c), (uint64_t)(o)); + } + + LSS_INLINE ssize_t LSS_NAME(pwrite64)(int f, const void *b, size_t c, + loff_t o) { + LSS_BODY(4, ssize_t, pwrite64, LSS_SYSCALL_ARG(f), LSS_SYSCALL_ARG(b), + LSS_SYSCALL_ARG(c), (uint64_t)(o)); + } + + LSS_INLINE int LSS_NAME(readahead)(int f, loff_t o, unsigned c) { + LSS_BODY(3, int, readahead, LSS_SYSCALL_ARG(f), (uint64_t)(o), + LSS_SYSCALL_ARG(c)); + } + #elif defined(__mips__) && _MIPS_SIM == _MIPS_SIM_ABI64 LSS_INLINE _syscall4(ssize_t, pread64, int, f, void *, b, size_t, c, loff_t, o) @@ -3468,13 +3887,15 @@ struct kernel_statfs { loff_t, o) LSS_INLINE _syscall3(int, readahead, int, f, loff_t, o, unsigned, c) + LSS_INLINE _syscall6(void *, mmap, void *, addr, size_t, length, int, prot, + int, flags, int, fd, int64_t, offset) #else #define __NR__pread64 __NR_pread64 #define __NR__pwrite64 __NR_pwrite64 #define __NR__readahead __NR_readahead - #if defined(__ARM_EABI__) - /* On ARM, a 64-bit parameter has to be in an even-odd register pair. - * Hence these calls ignore their fourth argument (r3) so that their + #if defined(__ARM_EABI__) || defined(__mips__) + /* On ARM and MIPS, a 64-bit parameter has to be in an even-odd register + * pair. Hence these calls ignore their fourth argument (r3) so that their * fifth and sixth make such a pair (r4,r5). */ #define LSS_LLARG_PAD 0, @@ -3522,6 +3943,84 @@ struct kernel_statfs { #endif #endif +#if defined(__aarch64__) + LSS_INLINE _syscall3(int, dup3, int, s, int, d, int, f) + LSS_INLINE _syscall6(void *, mmap, void *, addr, size_t, length, int, prot, + int, flags, int, fd, int64_t, offset) + LSS_INLINE _syscall4(int, newfstatat, int, dirfd, const char *, pathname, + struct kernel_stat *, buf, int, flags) + LSS_INLINE _syscall2(int, pipe2, int *, pipefd, int, flags) + LSS_INLINE _syscall5(int, ppoll, struct kernel_pollfd *, u, + unsigned int, n, const struct kernel_timespec *, t, + const struct kernel_sigset_t *, sigmask, size_t, s) + LSS_INLINE _syscall4(int, readlinkat, int, d, const char *, p, char *, b, + size_t, s) +#endif + +/* + * Polyfills for deprecated syscalls. + */ + +#if defined(__aarch64__) + LSS_INLINE int LSS_NAME(dup2)(int s, int d) { + return LSS_NAME(dup3)(s, d, 0); + } + + LSS_INLINE int LSS_NAME(open)(const char *pathname, int flags, int mode) { + return LSS_NAME(openat)(AT_FDCWD, pathname, flags, mode); + } + + LSS_INLINE int LSS_NAME(unlink)(const char *pathname) { + return LSS_NAME(unlinkat)(AT_FDCWD, pathname, 0); + } + + LSS_INLINE int LSS_NAME(readlink)(const char *pathname, char *buffer, + size_t size) { + return LSS_NAME(readlinkat)(AT_FDCWD, pathname, buffer, size); + } + + LSS_INLINE pid_t LSS_NAME(pipe)(int *pipefd) { + return LSS_NAME(pipe2)(pipefd, 0); + } + + LSS_INLINE int LSS_NAME(poll)(struct kernel_pollfd *fds, unsigned int nfds, + int timeout) { + struct kernel_timespec timeout_ts; + struct kernel_timespec *timeout_ts_p = NULL; + + if (timeout >= 0) { + timeout_ts.tv_sec = timeout / 1000; + timeout_ts.tv_nsec = (timeout % 1000) * 1000000; + timeout_ts_p = &timeout_ts; + } + return LSS_NAME(ppoll)(fds, nfds, timeout_ts_p, NULL, 0); + } + + LSS_INLINE int LSS_NAME(stat)(const char *pathname, + struct kernel_stat *buf) { + return LSS_NAME(newfstatat)(AT_FDCWD, pathname, buf, 0); + } + + LSS_INLINE pid_t LSS_NAME(fork)(void) { + // No fork syscall on aarch64 - implement by means of the clone syscall. + // Note that this does not reset glibc's cached view of the PID/TID, so + // some glibc interfaces might go wrong in the forked subprocess. + int flags = SIGCHLD; + void *child_stack = NULL; + void *parent_tidptr = NULL; + void *newtls = NULL; + void *child_tidptr = NULL; + + LSS_REG(0, flags); + LSS_REG(1, child_stack); + LSS_REG(2, parent_tidptr); + LSS_REG(3, newtls); + LSS_REG(4, child_tidptr); + LSS_BODY(pid_t, clone, "r"(__r0), "r"(__r1), "r"(__r2), "r"(__r3), + "r"(__r4)); + } +#endif + #ifdef __ANDROID__ /* These restore the original values of these macros saved by the * corresponding #pragma push_macro near the top of this file. */ diff --git a/toolkit/crashreporter/google-breakpad/src/tools/linux/dump_syms/dump_syms.cc b/toolkit/crashreporter/google-breakpad/src/tools/linux/dump_syms/dump_syms.cc index f58952edf981..c8ade33a404d 100644 --- a/toolkit/crashreporter/google-breakpad/src/tools/linux/dump_syms/dump_syms.cc +++ b/toolkit/crashreporter/google-breakpad/src/tools/linux/dump_syms/dump_syms.cc @@ -43,33 +43,43 @@ int usage(const char* self) { "[directories-for-debug-file]\n\n", self); fprintf(stderr, "Options:\n"); fprintf(stderr, " -c Do not generate CFI section\n"); + fprintf(stderr, " -r Do not handle inter-compilation unit references\n"); return 1; } int main(int argc, char **argv) { - if (argc < 2 || argc > 4) + if (argc < 2) return usage(argv[0]); bool cfi = true; - int binary_index = 1; - if (strcmp("-c", argv[1]) == 0) { - cfi = false; - ++binary_index; + bool handle_inter_cu_refs = true; + int arg_index = 1; + while (arg_index < argc && strlen(argv[arg_index]) > 0 && + argv[arg_index][0] == '-') { + if (strcmp("-c", argv[arg_index]) == 0) { + cfi = false; + } else if (strcmp("-r", argv[arg_index]) == 0) { + handle_inter_cu_refs = false; + } else { + return usage(argv[0]); + } + ++arg_index; } - if (!cfi && argc == 2) + if (arg_index == argc) return usage(argv[0]); - const char *binary; + const char* binary; std::vector debug_dirs; - binary = argv[binary_index]; - for (int debug_dir_index = binary_index + 1; + binary = argv[arg_index]; + for (int debug_dir_index = arg_index + 1; debug_dir_index < argc; ++debug_dir_index) { debug_dirs.push_back(argv[debug_dir_index]); } SymbolData symbol_data = cfi ? ALL_SYMBOL_DATA : NO_CFI; - if (!WriteSymbolFile(binary, debug_dirs, symbol_data, std::cout)) { + google_breakpad::DumpOptions options(symbol_data, handle_inter_cu_refs); + if (!WriteSymbolFile(binary, debug_dirs, options, std::cout)) { fprintf(stderr, "Failed to write symbol file.\n"); return 1; } diff --git a/toolkit/crashreporter/google-breakpad/src/tools/linux/dump_syms/moz.build b/toolkit/crashreporter/google-breakpad/src/tools/linux/dump_syms/moz.build index a36b9b9acfaa..a15d4ff700d0 100644 --- a/toolkit/crashreporter/google-breakpad/src/tools/linux/dump_syms/moz.build +++ b/toolkit/crashreporter/google-breakpad/src/tools/linux/dump_syms/moz.build @@ -27,7 +27,7 @@ HOST_USE_LIBS += [ HostProgram('dump_syms') LOCAL_INCLUDES += [ - '../../..', '../../../common/linux', ] +include('/toolkit/crashreporter/crashreporter.mozbuild') diff --git a/toolkit/crashreporter/google-breakpad/src/tools/linux/md2core/minidump-2-core.cc b/toolkit/crashreporter/google-breakpad/src/tools/linux/md2core/minidump-2-core.cc index 93c46aabe245..8e9cd1291a0d 100644 --- a/toolkit/crashreporter/google-breakpad/src/tools/linux/md2core/minidump-2-core.cc +++ b/toolkit/crashreporter/google-breakpad/src/tools/linux/md2core/minidump-2-core.cc @@ -35,6 +35,7 @@ #include #include +#include #include #include #include @@ -47,6 +48,7 @@ #include #include "common/linux/memory_mapped_file.h" +#include "common/minidump_type_helper.h" #include "common/scoped_ptr.h" #include "google_breakpad/common/minidump_format.h" #include "third_party/lss/linux_syscall_support.h" @@ -72,6 +74,8 @@ #define ELF_ARCH EM_ARM #elif defined(__mips__) #define ELF_ARCH EM_MIPS +#elif defined(__aarch64__) + #define ELF_ARCH EM_AARCH64 #endif #if defined(__arm__) @@ -79,13 +83,21 @@ // containing core registers, while they use 'user_regs_struct' on other // architectures. This file-local typedef simplifies the source code. typedef user_regs user_regs_struct; +#elif defined (__mips__) +// This file-local typedef simplifies the source code. +typedef gregset_t user_regs_struct; #endif +using google_breakpad::MDTypeHelper; using google_breakpad::MemoryMappedFile; using google_breakpad::MinidumpMemoryRange; +typedef MDTypeHelper::MDRawDebug MDRawDebug; +typedef MDTypeHelper::MDRawLinkMap MDRawLinkMap; + static const MDRVA kInvalidMDRVA = static_cast(-1); static bool verbose; +static std::string g_custom_so_basedir; static int usage(const char* argv0) { fprintf(stderr, "Usage: %s [-v] \n", argv0); @@ -126,14 +138,14 @@ typedef struct elf_timeval { /* Time value with microsecond resolution */ long tv_usec; /* Microseconds */ } elf_timeval; -typedef struct elf_siginfo { /* Information about signal (unused) */ +typedef struct _elf_siginfo { /* Information about signal (unused) */ int32_t si_signo; /* Signal number */ int32_t si_code; /* Extra code */ int32_t si_errno; /* Errno */ -} elf_siginfo; +} _elf_siginfo; typedef struct prstatus { /* Information about thread; includes CPU reg*/ - elf_siginfo pr_info; /* Info associated with signal */ + _elf_siginfo pr_info; /* Info associated with signal */ uint16_t pr_cursig; /* Current signal */ unsigned long pr_sigpend; /* Set of pending signals */ unsigned long pr_sighold; /* Set of held signals */ @@ -201,12 +213,19 @@ struct CrashedProcess { struct Thread { pid_t tid; +#if defined(__mips__) + mcontext_t mcontext; +#else user_regs_struct regs; +#endif #if defined(__i386__) || defined(__x86_64__) user_fpregs_struct fpregs; #endif #if defined(__i386__) user_fpxregs_struct fpxregs; +#endif +#if defined(__aarch64__) + user_fpsimd_struct fpregs; #endif uintptr_t stack_addr; const uint8_t* stack; @@ -357,6 +376,53 @@ ParseThreadRegisters(CrashedProcess::Thread* thread, thread->regs.uregs[16] = rawregs->cpsr; thread->regs.uregs[17] = 0; // what is ORIG_r0 exactly? } +#elif defined(__aarch64__) +static void +ParseThreadRegisters(CrashedProcess::Thread* thread, + const MinidumpMemoryRange& range) { + const MDRawContextARM64* rawregs = range.GetData(0); + + for (int i = 0; i < 31; ++i) + thread->regs.regs[i] = rawregs->iregs[i]; + thread->regs.sp = rawregs->iregs[MD_CONTEXT_ARM64_REG_SP]; + thread->regs.pc = rawregs->iregs[MD_CONTEXT_ARM64_REG_PC]; + thread->regs.pstate = rawregs->cpsr; + + memcpy(thread->fpregs.vregs, rawregs->float_save.regs, 8 * 32); + thread->fpregs.fpsr = rawregs->float_save.fpsr; + thread->fpregs.fpcr = rawregs->float_save.fpcr; +} +#elif defined(__mips__) +static void +ParseThreadRegisters(CrashedProcess::Thread* thread, + const MinidumpMemoryRange& range) { + const MDRawContextMIPS* rawregs = range.GetData(0); + + for (int i = 0; i < MD_CONTEXT_MIPS_GPR_COUNT; ++i) + thread->mcontext.gregs[i] = rawregs->iregs[i]; + + thread->mcontext.pc = rawregs->epc; + + thread->mcontext.mdlo = rawregs->mdlo; + thread->mcontext.mdhi = rawregs->mdhi; + + thread->mcontext.hi1 = rawregs->hi[0]; + thread->mcontext.lo1 = rawregs->lo[0]; + thread->mcontext.hi2 = rawregs->hi[1]; + thread->mcontext.lo2 = rawregs->lo[1]; + thread->mcontext.hi3 = rawregs->hi[2]; + thread->mcontext.lo3 = rawregs->lo[2]; + + for (int i = 0; i < MD_FLOATINGSAVEAREA_MIPS_FPR_COUNT; ++i) { + thread->mcontext.fpregs.fp_r.fp_fregs[i]._fp_fregs = + rawregs->float_save.regs[i]; + } + + thread->mcontext.fpc_csr = rawregs->float_save.fpcsr; +#if _MIPS_SIM == _ABIO32 + thread->mcontext.fpc_eir = rawregs->float_save.fir; +#endif +} #else #error "This code has not been ported to your platform yet" #endif @@ -421,12 +487,25 @@ ParseSystemInfo(CrashedProcess* crashinfo, const MinidumpMemoryRange& range, "This version of minidump-2-core only supports ARM (32bit).\n"); _exit(1); } +#elif defined(__aarch64__) + if (sysinfo->processor_architecture != MD_CPU_ARCHITECTURE_ARM64) { + fprintf(stderr, + "This version of minidump-2-core only supports ARM (64bit).\n"); + _exit(1); + } +#elif defined(__mips__) + if (sysinfo->processor_architecture != MD_CPU_ARCHITECTURE_MIPS) { + fprintf(stderr, + "This version of minidump-2-core only supports mips (32bit).\n"); + _exit(1); + } #else #error "This code has not been ported to your platform yet" #endif if (!strstr(full_file.GetAsciiMDString(sysinfo->csd_version_rva).c_str(), - "Linux")) { - fprintf(stderr, "This minidump was not generated by Linux.\n"); + "Linux") && + sysinfo->platform_id != MD_OS_NACL) { + fprintf(stderr, "This minidump was not generated by Linux or NaCl.\n"); _exit(1); } @@ -444,6 +523,8 @@ ParseSystemInfo(CrashedProcess* crashinfo, const MinidumpMemoryRange& range, ? "x86-64" : sysinfo->processor_architecture == MD_CPU_ARCHITECTURE_ARM ? "ARM" + : sysinfo->processor_architecture == MD_CPU_ARCHITECTURE_MIPS + ? "MIPS" : "???", sysinfo->number_of_processors, sysinfo->processor_level, @@ -544,7 +625,7 @@ static void ParseEnvironment(CrashedProcess* crashinfo, const MinidumpMemoryRange& range) { if (verbose) { fputs("MD_LINUX_ENVIRON:\n", stderr); - char *env = new char[range.length()]; + char* env = new char[range.length()]; memcpy(env, range.data(), range.length()); int nul_count = 0; for (char *ptr = env;;) { @@ -659,14 +740,14 @@ ParseDSODebugInfo(CrashedProcess* crashinfo, const MinidumpMemoryRange& range, "MD_LINUX_DSO_DEBUG:\n" "Version: %d\n" "Number of DSOs: %d\n" - "Brk handler: %p\n" - "Dynamic loader at: %p\n" - "_DYNAMIC: %p\n", + "Brk handler: 0x%" PRIx64 "\n" + "Dynamic loader at: 0x%" PRIx64 "\n" + "_DYNAMIC: 0x%" PRIx64 "\n", debug->version, debug->dso_count, - debug->brk, - debug->ldbase, - debug->dynamic); + static_cast(debug->brk), + static_cast(debug->ldbase), + static_cast(debug->dynamic)); } crashinfo->debug = *debug; if (range.length() > sizeof(MDRawDebug)) { @@ -681,8 +762,9 @@ ParseDSODebugInfo(CrashedProcess* crashinfo, const MinidumpMemoryRange& range, if (link_map) { if (verbose) { fprintf(stderr, - "#%03d: %p, %p, \"%s\"\n", - i, link_map->addr, link_map->ld, + "#%03d: %" PRIx64 ", %" PRIx64 ", \"%s\"\n", + i, static_cast(link_map->addr), + static_cast(link_map->ld), full_file.GetAsciiMDString(link_map->name).c_str()); } crashinfo->link_map.push_back(*link_map); @@ -710,7 +792,11 @@ WriteThread(const CrashedProcess::Thread& thread, int fatal_signal) { pr.pr_info.si_signo = fatal_signal; pr.pr_cursig = fatal_signal; pr.pr_pid = thread.tid; +#if defined(__mips__) + memcpy(&pr.pr_reg, &thread.mcontext.gregs, sizeof(user_regs_struct)); +#else memcpy(&pr.pr_reg, &thread.regs, sizeof(user_regs_struct)); +#endif Nhdr nhdr; memset(&nhdr, 0, sizeof(nhdr)); @@ -783,8 +869,13 @@ ParseModuleStream(CrashedProcess* crashinfo, const MinidumpMemoryRange& range, std::string basename = slash == std::string::npos ? filename : filename.substr(slash + 1); if (strcmp(guid, "00000000-0000-0000-0000-000000000000")) { - crashinfo->signatures[rawmodule->base_of_image] = - std::string("/var/lib/breakpad/") + guid + "-" + basename; + std::string prefix; + if (!g_custom_so_basedir.empty()) + prefix = g_custom_so_basedir; + else + prefix = std::string("/var/lib/breakpad/") + guid + "-" + basename; + + crashinfo->signatures[rawmodule->base_of_image] = prefix + basename; } if (verbose) { @@ -943,6 +1034,14 @@ main(int argc, char** argv) { while (argi < argc && argv[argi][0] == '-') { if (!strcmp(argv[argi], "-v")) { verbose = true; + } else if (!strcmp(argv[argi], "--sobasedir")) { + argi++; + if (argi >= argc) { + fprintf(stderr, "--sobasedir expects an argument."); + return usage(argv[0]); + } + + g_custom_so_basedir = argv[argi]; } else { return usage(argv[0]); } @@ -952,7 +1051,7 @@ main(int argc, char** argv) { if (argc != argi + 1) return usage(argv[0]); - MemoryMappedFile mapped_file(argv[argi]); + MemoryMappedFile mapped_file(argv[argi], 0); if (!mapped_file.data()) { fprintf(stderr, "Failed to mmap dump file\n"); return 1; @@ -1127,7 +1226,7 @@ main(int argc, char** argv) { nhdr.n_type = NT_AUXV; if (!writea(1, &nhdr, sizeof(nhdr)) || !writea(1, "CORE\0\0\0\0", 8) || - !writea(1, &crashinfo.auxv, crashinfo.auxv_length)) { + !writea(1, crashinfo.auxv, crashinfo.auxv_length)) { return 1; } diff --git a/toolkit/crashreporter/google-breakpad/src/tools/linux/symupload/minidump_upload.cc b/toolkit/crashreporter/google-breakpad/src/tools/linux/symupload/minidump_upload.cc index 144c8bf626be..19f17450a1d4 100644 --- a/toolkit/crashreporter/google-breakpad/src/tools/linux/symupload/minidump_upload.cc +++ b/toolkit/crashreporter/google-breakpad/src/tools/linux/symupload/minidump_upload.cc @@ -41,32 +41,35 @@ #include #include "common/linux/http_upload.h" +#include "common/using_std_string.h" using google_breakpad::HTTPUpload; struct Options { - std::string minidumpPath; - std::string uploadURLStr; - std::string product; - std::string version; - std::string proxy; - std::string proxy_user_pwd; + string minidumpPath; + string uploadURLStr; + string product; + string version; + string proxy; + string proxy_user_pwd; bool success; }; //============================================================================= static void Start(Options *options) { - std::map parameters; + std::map parameters; // Add parameters parameters["prod"] = options->product; parameters["ver"] = options->version; + std::map files; + files["upload_file_minidump"] = options->minidumpPath; + // Send it - std::string response, error; + string response, error; bool success = HTTPUpload::SendRequest(options->uploadURLStr, parameters, - options->minidumpPath, - "upload_file_minidump", + files, options->proxy, options->proxy_user_pwd, "", @@ -78,9 +81,9 @@ static void Start(Options *options) { printf("Successfully sent the minidump file.\n"); } else { printf("Failed to send minidump: %s\n", error.c_str()); - printf("Response:\n"); - printf("%s\n", response.c_str()); } + printf("Response:\n"); + printf("%s\n", response.c_str()); options->success = success; } @@ -106,7 +109,7 @@ Usage(int argc, const char *argv[]) { static void SetupOptions(int argc, const char *argv[], Options *options) { extern int optind; - char ch; + int ch; while ((ch = getopt(argc, (char * const *)argv, "p:u:v:x:h?")) != -1) { switch (ch) { @@ -124,8 +127,9 @@ SetupOptions(int argc, const char *argv[], Options *options) { break; default: + fprintf(stderr, "Invalid option '%c'\n", ch); Usage(argc, argv); - exit(0); + exit(1); break; } } @@ -141,7 +145,7 @@ SetupOptions(int argc, const char *argv[], Options *options) { } //============================================================================= -int main (int argc, const char * argv[]) { +int main(int argc, const char* argv[]) { Options options; SetupOptions(argc, argv, &options); Start(&options); diff --git a/toolkit/crashreporter/google-breakpad/src/tools/linux/symupload/sym_upload.cc b/toolkit/crashreporter/google-breakpad/src/tools/linux/symupload/sym_upload.cc index 5b1ee6f61607..2f9a73c39f8b 100644 --- a/toolkit/crashreporter/google-breakpad/src/tools/linux/symupload/sym_upload.cc +++ b/toolkit/crashreporter/google-breakpad/src/tools/linux/symupload/sym_upload.cc @@ -50,23 +50,24 @@ #include #include "common/linux/http_upload.h" +#include "common/using_std_string.h" using google_breakpad::HTTPUpload; typedef struct { - std::string symbolsPath; - std::string uploadURLStr; - std::string proxy; - std::string proxy_user_pwd; - std::string version; + string symbolsPath; + string uploadURLStr; + string proxy; + string proxy_user_pwd; + string version; bool success; } Options; -static void TokenizeByChar(const std::string &source_string, - int c, std::vector *results) { +static void TokenizeByChar(const string &source_string, + int c, std::vector *results) { assert(results); - std::string::size_type cur_pos = 0, next_pos = 0; - while ((next_pos = source_string.find(c, cur_pos)) != std::string::npos) { + string::size_type cur_pos = 0, next_pos = 0; + while ((next_pos = source_string.find(c, cur_pos)) != string::npos) { if (next_pos != cur_pos) results->push_back(source_string.substr(cur_pos, next_pos - cur_pos)); cur_pos = next_pos + 1; @@ -78,17 +79,17 @@ static void TokenizeByChar(const std::string &source_string, //============================================================================= // Parse out the module line which have 5 parts. // MODULE -static bool ModuleDataForSymbolFile(const std::string &file, - std::vector *module_parts) { +static bool ModuleDataForSymbolFile(const string &file, + std::vector *module_parts) { assert(module_parts); const size_t kModulePartNumber = 5; - FILE *fp = fopen(file.c_str(), "r"); + FILE* fp = fopen(file.c_str(), "r"); if (fp) { char buffer[1024]; if (fgets(buffer, sizeof(buffer), fp)) { - std::string line(buffer); - std::string::size_type line_break_pos = line.find_first_of('\n'); - if (line_break_pos == std::string::npos) { + string line(buffer); + string::size_type line_break_pos = line.find_first_of('\n'); + if (line_break_pos == string::npos) { assert(0 && "The file is invalid!"); fclose(fp); return false; @@ -106,10 +107,10 @@ static bool ModuleDataForSymbolFile(const std::string &file, } //============================================================================= -static std::string CompactIdentifier(const std::string &uuid) { - std::vector components; +static string CompactIdentifier(const string &uuid) { + std::vector components; TokenizeByChar(uuid, '-', &components); - std::string result; + string result; for (size_t i = 0; i < components.size(); ++i) result += components[i]; return result; @@ -117,15 +118,15 @@ static std::string CompactIdentifier(const std::string &uuid) { //============================================================================= static void Start(Options *options) { - std::map parameters; + std::map parameters; options->success = false; - std::vector module_parts; + std::vector module_parts; if (!ModuleDataForSymbolFile(options->symbolsPath, &module_parts)) { fprintf(stderr, "Failed to parse symbol file!\n"); return; } - std::string compacted_id = CompactIdentifier(module_parts[3]); + string compacted_id = CompactIdentifier(module_parts[3]); // Add parameters if (!options->version.empty()) @@ -138,12 +139,15 @@ static void Start(Options *options) { parameters["debug_file"] = module_parts[4]; parameters["code_file"] = module_parts[4]; parameters["debug_identifier"] = compacted_id; - std::string response, error; + + std::map files; + files["symbol_file"] = options->symbolsPath; + + string response, error; long response_code; bool success = HTTPUpload::SendRequest(options->uploadURLStr, parameters, - options->symbolsPath, - "symbol_file", + files, options->proxy, options->proxy_user_pwd, "", @@ -153,6 +157,7 @@ static void Start(Options *options) { if (!success) { printf("Failed to send symbol file: %s\n", error.c_str()); + printf("Response code: %ld\n", response_code); printf("Response:\n"); printf("%s\n", response.c_str()); } else if (response_code == 0) { @@ -186,10 +191,15 @@ Usage(int argc, const char *argv[]) { static void SetupOptions(int argc, const char *argv[], Options *options) { extern int optind; - char ch; + int ch; while ((ch = getopt(argc, (char * const *)argv, "u:v:x:h?")) != -1) { switch (ch) { + case 'h': + case '?': + Usage(argc, argv); + exit(0); + break; case 'u': options->proxy_user_pwd = optarg; break; @@ -201,8 +211,9 @@ SetupOptions(int argc, const char *argv[], Options *options) { break; default: + fprintf(stderr, "Invalid option '%c'\n", ch); Usage(argc, argv); - exit(0); + exit(1); break; } } @@ -218,7 +229,7 @@ SetupOptions(int argc, const char *argv[], Options *options) { } //============================================================================= -int main (int argc, const char * argv[]) { +int main(int argc, const char* argv[]) { Options options; SetupOptions(argc, argv, &options); Start(&options); diff --git a/toolkit/crashreporter/google-breakpad/src/tools/linux/tools_linux.gypi b/toolkit/crashreporter/google-breakpad/src/tools/linux/tools_linux.gypi new file mode 100644 index 000000000000..1c15992e11fc --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/tools/linux/tools_linux.gypi @@ -0,0 +1,83 @@ +# Copyright 2014 Google Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +{ + 'target_defaults': { + 'include_dirs': [ + '../..', + ], + }, + 'targets': [ + { + 'target_name': 'dump_syms', + 'type': 'executable', + 'sources': [ + 'dump_syms/dump_syms.cc', + ], + 'dependencies': [ + '../common/common.gyp:common', + ], + }, + { + 'target_name': 'md2core', + 'type': 'executable', + 'sources': [ + 'md2core/minidump-2-core.cc', + 'md2core/minidump_memory_range.h', + ], + 'dependencies': [ + '../common/common.gyp:common', + ], + }, + { + 'target_name': 'minidump_upload', + 'type': 'executable', + 'sources': [ + 'symupload/minidump_upload.m', + ], + 'dependencies': [ + '../common/common.gyp:common', + ], + }, + { + 'target_name': 'symupload', + 'type': 'executable', + 'sources': [ + 'symupload/sym_upload.cc', + ], + 'link_settings': { + 'libraries': [ + '-ldl', + ], + }, + 'dependencies': [ + '../common/common.gyp:common', + ], + }, + ], +} diff --git a/toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/crash_report.mm b/toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/crash_report.mm index b6e3f1ccc9ba..f68200c7c9e9 100644 --- a/toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/crash_report.mm +++ b/toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/crash_report.mm @@ -164,7 +164,7 @@ static void PrintRegisters(const CallStack *stack, const string &cpu) { const StackFramePPC *frame_ppc = reinterpret_cast(frame); - if (frame_ppc->context_validity & StackFramePPC::CONTEXT_VALID_ALL == + if ((frame_ppc->context_validity & StackFramePPC::CONTEXT_VALID_ALL) == StackFramePPC::CONTEXT_VALID_ALL) { sequence = PrintRegister("srr0", frame_ppc->context.srr0, sequence); sequence = PrintRegister("srr1", frame_ppc->context.srr1, sequence); @@ -280,7 +280,7 @@ static void ProcessSingleReport(Options *options, NSString *file_path) { // Print all of the threads in the dump. int thread_count = static_cast(process_state.threads()->size()); - const std::vector + const std::vector *thread_memory_regions = process_state.thread_memory_regions(); for (int thread_index = 0; thread_index < thread_count; ++thread_index) { @@ -289,7 +289,7 @@ static void ProcessSingleReport(Options *options, NSString *file_path) { printf("\n"); printf("Thread %d\n", thread_index); PrintStack(process_state.threads()->at(thread_index), cpu); - google_breakpad::MinidumpMemoryRegion *thread_stack_bytes = + google_breakpad::MemoryRegion *thread_stack_bytes = thread_memory_regions->at(thread_index); if (options->printThreadMemory) { thread_stack_bytes->Print(); diff --git a/toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/crash_report.xcodeproj/project.pbxproj b/toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/crash_report.xcodeproj/project.pbxproj index 9c20ea1958c6..d32837cbd468 100644 --- a/toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/crash_report.xcodeproj/project.pbxproj +++ b/toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/crash_report.xcodeproj/project.pbxproj @@ -56,6 +56,15 @@ 9BE650B60B52FE3000611104 /* macho_walker.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BE650B00B52FE3000611104 /* macho_walker.cc */; }; D2A5DD4D1188651100081F03 /* cfi_frame_info.cc in Sources */ = {isa = PBXBuildFile; fileRef = D2A5DD4C1188651100081F03 /* cfi_frame_info.cc */; }; D2A5DD631188658B00081F03 /* tokenize.cc in Sources */ = {isa = PBXBuildFile; fileRef = D2A5DD621188658B00081F03 /* tokenize.cc */; }; + F407DC48185773C10064622B /* exploitability_linux.cc in Sources */ = {isa = PBXBuildFile; fileRef = F407DC40185773C10064622B /* exploitability_linux.cc */; }; + F407DC49185773C10064622B /* stack_frame_symbolizer.cc in Sources */ = {isa = PBXBuildFile; fileRef = F407DC41185773C10064622B /* stack_frame_symbolizer.cc */; }; + F407DC4A185773C10064622B /* stackwalker_arm64.cc in Sources */ = {isa = PBXBuildFile; fileRef = F407DC42185773C10064622B /* stackwalker_arm64.cc */; }; + F407DC4B185773C10064622B /* stackwalker_mips.cc in Sources */ = {isa = PBXBuildFile; fileRef = F407DC44185773C10064622B /* stackwalker_mips.cc */; }; + F407DC4C185773C10064622B /* stackwalker_ppc64.cc in Sources */ = {isa = PBXBuildFile; fileRef = F407DC46185773C10064622B /* stackwalker_ppc64.cc */; }; + F44DDD8719C85CD50047280E /* dump_context.cc in Sources */ = {isa = PBXBuildFile; fileRef = F44DDD8419C85CD50047280E /* dump_context.cc */; }; + F44DDD8819C85CD50047280E /* dump_object.cc in Sources */ = {isa = PBXBuildFile; fileRef = F44DDD8519C85CD50047280E /* dump_object.cc */; }; + F44DDD8919C85CD50047280E /* microdump_processor.cc in Sources */ = {isa = PBXBuildFile; fileRef = F44DDD8619C85CD50047280E /* microdump_processor.cc */; }; + F4D43B2F1A38490700C290B2 /* microdump.cc in Sources */ = {isa = PBXBuildFile; fileRef = F4D43B2E1A38490700C290B2 /* microdump.cc */; }; F9C7ECE50E8ABCA600E953AD /* bytereader.cc in Sources */ = {isa = PBXBuildFile; fileRef = F9C7ECE20E8ABCA600E953AD /* bytereader.cc */; }; F9C7ECE60E8ABCA600E953AD /* dwarf2reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = F9C7ECE30E8ABCA600E953AD /* dwarf2reader.cc */; }; F9C7ECE70E8ABCA600E953AD /* functioninfo.cc in Sources */ = {isa = PBXBuildFile; fileRef = F9C7ECE40E8ABCA600E953AD /* functioninfo.cc */; }; @@ -156,6 +165,23 @@ 9BE650B10B52FE3000611104 /* macho_walker.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = macho_walker.h; path = ../../../common/mac/macho_walker.h; sourceTree = SOURCE_ROOT; }; D2A5DD4C1188651100081F03 /* cfi_frame_info.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = cfi_frame_info.cc; path = ../../../processor/cfi_frame_info.cc; sourceTree = SOURCE_ROOT; }; D2A5DD621188658B00081F03 /* tokenize.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tokenize.cc; path = ../../../processor/tokenize.cc; sourceTree = SOURCE_ROOT; }; + F407DC40185773C10064622B /* exploitability_linux.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = exploitability_linux.cc; path = ../../../processor/exploitability_linux.cc; sourceTree = ""; }; + F407DC41185773C10064622B /* stack_frame_symbolizer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stack_frame_symbolizer.cc; path = ../../../processor/stack_frame_symbolizer.cc; sourceTree = ""; }; + F407DC42185773C10064622B /* stackwalker_arm64.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stackwalker_arm64.cc; path = ../../../processor/stackwalker_arm64.cc; sourceTree = ""; }; + F407DC43185773C10064622B /* stackwalker_arm64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stackwalker_arm64.h; path = ../../../processor/stackwalker_arm64.h; sourceTree = ""; }; + F407DC44185773C10064622B /* stackwalker_mips.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stackwalker_mips.cc; path = ../../../processor/stackwalker_mips.cc; sourceTree = ""; }; + F407DC45185773C10064622B /* stackwalker_mips.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stackwalker_mips.h; path = ../../../processor/stackwalker_mips.h; sourceTree = ""; }; + F407DC46185773C10064622B /* stackwalker_ppc64.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stackwalker_ppc64.cc; path = ../../../processor/stackwalker_ppc64.cc; sourceTree = ""; }; + F407DC47185773C10064622B /* stackwalker_ppc64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stackwalker_ppc64.h; path = ../../../processor/stackwalker_ppc64.h; sourceTree = ""; }; + F44DDD8419C85CD50047280E /* dump_context.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dump_context.cc; path = ../../../processor/dump_context.cc; sourceTree = ""; }; + F44DDD8519C85CD50047280E /* dump_object.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dump_object.cc; path = ../../../processor/dump_object.cc; sourceTree = ""; }; + F44DDD8619C85CD50047280E /* microdump_processor.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = microdump_processor.cc; path = ../../../processor/microdump_processor.cc; sourceTree = ""; }; + F44DDD8A19C85CFB0047280E /* dump_context.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = dump_context.h; path = ../../../google_breakpad/processor/dump_context.h; sourceTree = ""; }; + F44DDD8B19C85CFB0047280E /* dump_object.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = dump_object.h; path = ../../../google_breakpad/processor/dump_object.h; sourceTree = ""; }; + F44DDD8C19C85CFC0047280E /* microdump_processor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = microdump_processor.h; path = ../../../google_breakpad/processor/microdump_processor.h; sourceTree = ""; }; + F44DDD8D19C85CFC0047280E /* process_result.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = process_result.h; path = ../../../google_breakpad/processor/process_result.h; sourceTree = ""; }; + F4D43B2E1A38490700C290B2 /* microdump.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = microdump.cc; path = ../../../processor/microdump.cc; sourceTree = ""; }; + F4D43B301A38492000C290B2 /* microdump.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = microdump.h; path = ../../../google_breakpad/processor/microdump.h; sourceTree = ""; }; F9C7ECE20E8ABCA600E953AD /* bytereader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bytereader.cc; path = ../../../common/dwarf/bytereader.cc; sourceTree = SOURCE_ROOT; }; F9C7ECE30E8ABCA600E953AD /* dwarf2reader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf2reader.cc; path = ../../../common/dwarf/dwarf2reader.cc; sourceTree = SOURCE_ROOT; }; F9C7ECE40E8ABCA600E953AD /* functioninfo.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = functioninfo.cc; path = ../../../common/dwarf/functioninfo.cc; sourceTree = SOURCE_ROOT; }; @@ -195,7 +221,16 @@ 9BDF192D0B1BC15D00F8391B /* dump_syms.h */, 9BDF192E0B1BC15D00F8391B /* dump_syms.mm */, 08FB7796FE84155DC02AAC07 /* crash_report.mm */, + F44DDD8D19C85CFC0047280E /* process_result.h */, 9BDF176B0B1B8CB100F8391B /* on_demand_symbol_supplier.h */, + F44DDD8419C85CD50047280E /* dump_context.cc */, + F44DDD8A19C85CFB0047280E /* dump_context.h */, + F44DDD8519C85CD50047280E /* dump_object.cc */, + F44DDD8B19C85CFB0047280E /* dump_object.h */, + F4D43B2E1A38490700C290B2 /* microdump.cc */, + F4D43B301A38492000C290B2 /* microdump.h */, + F44DDD8619C85CD50047280E /* microdump_processor.cc */, + F44DDD8C19C85CFC0047280E /* microdump_processor.h */, 9BDF176C0B1B8CB100F8391B /* on_demand_symbol_supplier.mm */, 8B31FF2411F0C62700FCF3E4 /* dwarf_cfi_to_module.cc */, 8B31FF2511F0C62700FCF3E4 /* dwarf_cfi_to_module.h */, @@ -311,6 +346,14 @@ isa = PBXGroup; children = ( 4D2C7222126F9AF900B43EAF /* exploitability_win.cc */, + F407DC40185773C10064622B /* exploitability_linux.cc */, + F407DC41185773C10064622B /* stack_frame_symbolizer.cc */, + F407DC42185773C10064622B /* stackwalker_arm64.cc */, + F407DC43185773C10064622B /* stackwalker_arm64.h */, + F407DC44185773C10064622B /* stackwalker_mips.cc */, + F407DC45185773C10064622B /* stackwalker_mips.h */, + F407DC46185773C10064622B /* stackwalker_ppc64.cc */, + F407DC47185773C10064622B /* stackwalker_ppc64.h */, 4D2C721E126F9ADE00B43EAF /* exploitability.cc */, 4D2C721A126F9ACC00B43EAF /* source_line_resolver_base.cc */, D2A5DD621188658B00081F03 /* tokenize.cc */, @@ -420,6 +463,7 @@ 9BDF172C0B1B8B2400F8391B /* call_stack.cc in Sources */, 9BDF172D0B1B8B2400F8391B /* minidump_processor.cc in Sources */, 9BDF17410B1B8B9A00F8391B /* minidump.cc in Sources */, + F44DDD8719C85CD50047280E /* dump_context.cc in Sources */, 9BDF17540B1B8BF900F8391B /* stackwalker_ppc.cc in Sources */, 9BDF17550B1B8BF900F8391B /* stackwalker_x86.cc in Sources */, 9BDF17560B1B8BF900F8391B /* stackwalker.cc in Sources */, @@ -443,7 +487,9 @@ D2A5DD4D1188651100081F03 /* cfi_frame_info.cc in Sources */, D2A5DD631188658B00081F03 /* tokenize.cc in Sources */, 8B31FF2A11F0C62700FCF3E4 /* dwarf_cfi_to_module.cc in Sources */, + F4D43B2F1A38490700C290B2 /* microdump.cc in Sources */, 8B31FF2B11F0C62700FCF3E4 /* dwarf_cu_to_module.cc in Sources */, + F44DDD8819C85CD50047280E /* dump_object.cc in Sources */, 8B31FF2C11F0C62700FCF3E4 /* dwarf_line_to_module.cc in Sources */, 8B31FF4111F0C64400FCF3E4 /* stabs_reader.cc in Sources */, 8B31FF4211F0C64400FCF3E4 /* stabs_to_module.cc in Sources */, @@ -451,22 +497,28 @@ 8B31FF8811F0C6FB00FCF3E4 /* language.cc in Sources */, 8B31FF8911F0C6FB00FCF3E4 /* module.cc in Sources */, 8B31FFC511F0C8AB00FCF3E4 /* dwarf2diehandler.cc in Sources */, + F407DC49185773C10064622B /* stack_frame_symbolizer.cc in Sources */, 4D2C721B126F9ACC00B43EAF /* source_line_resolver_base.cc in Sources */, 4D2C721F126F9ADE00B43EAF /* exploitability.cc in Sources */, 4D2C7223126F9AF900B43EAF /* exploitability_win.cc in Sources */, 4D2C7227126F9B0F00B43EAF /* disassembler_x86.cc in Sources */, + F407DC48185773C10064622B /* exploitability_linux.cc in Sources */, 4D2C722B126F9B5A00B43EAF /* x86_disasm.c in Sources */, 4D2C722D126F9B6E00B43EAF /* x86_misc.c in Sources */, 4D2C722F126F9B8300B43EAF /* x86_operand_list.c in Sources */, + F407DC4A185773C10064622B /* stackwalker_arm64.cc in Sources */, 4D2C7233126F9BB000B43EAF /* ia32_invariant.c in Sources */, 4D2C7235126F9BC200B43EAF /* ia32_settings.c in Sources */, 4D2C7246126F9C0B00B43EAF /* ia32_insn.c in Sources */, 4D2C724A126F9C2300B43EAF /* ia32_opcode_tables.c in Sources */, 4D2C724C126F9C3800B43EAF /* ia32_implicit.c in Sources */, + F44DDD8919C85CD50047280E /* microdump_processor.cc in Sources */, 4D2C724E126F9C4D00B43EAF /* ia32_reg.c in Sources */, 4D2C725B126F9C8000B43EAF /* ia32_operand.c in Sources */, + F407DC4C185773C10064622B /* stackwalker_ppc64.cc in Sources */, 4D2C725D126F9C9200B43EAF /* x86_insn.c in Sources */, 4D2C7264126F9CBB00B43EAF /* ia32_modrm.c in Sources */, + F407DC4B185773C10064622B /* stackwalker_mips.cc in Sources */, 4D2C726D126F9CDC00B43EAF /* x86_imm.c in Sources */, 4D72CA5713DFBA84006CABE3 /* md5.cc in Sources */, ); diff --git a/toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/on_demand_symbol_supplier.h b/toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/on_demand_symbol_supplier.h index 704eba21413b..3fbe108ebdd8 100644 --- a/toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/on_demand_symbol_supplier.h +++ b/toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/on_demand_symbol_supplier.h @@ -41,6 +41,7 @@ namespace google_breakpad { using std::map; using std::string; +class MinidumpModule; class OnDemandSymbolSupplier : public SymbolSupplier { public: @@ -65,7 +66,8 @@ class OnDemandSymbolSupplier : public SymbolSupplier { virtual SymbolResult GetCStringSymbolData(const CodeModule *module, const SystemInfo *system_info, string *symbol_file, - char **symbol_data); + char **symbol_data, + size_t *symbol_data_size); // Delete the data buffer allocated for module in GetCStringSymbolData(). virtual void FreeSymbolData(const CodeModule *module); diff --git a/toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/on_demand_symbol_supplier.mm b/toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/on_demand_symbol_supplier.mm index edcc5ad71079..ebbca87a0584 100644 --- a/toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/on_demand_symbol_supplier.mm +++ b/toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/on_demand_symbol_supplier.mm @@ -40,7 +40,7 @@ #include "processor/pathname_stripper.h" #include "on_demand_symbol_supplier.h" -#include "dump_syms.h" +#include "common/mac/dump_syms.h" using std::map; using std::string; @@ -80,7 +80,7 @@ OnDemandSymbolSupplier::OnDemandSymbolSupplier(const string &search_dir, [dirEnum skipDescendents]; } else { NSString *filePath = [symbolSearchPath stringByAppendingPathComponent:fileName]; - NSString *dataStr = [[[NSString alloc] initWithContentsOfFile:filePath] autorelease]; + NSString *dataStr = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:NULL]; if (dataStr) { // Check file to see if it is of appropriate type, and grab module // name. @@ -164,19 +164,22 @@ SymbolSupplier::SymbolResult OnDemandSymbolSupplier::GetCStringSymbolData(const CodeModule *module, const SystemInfo *system_info, string *symbol_file, - char **symbol_data) { + char **symbol_data, + size_t *symbol_data_size) { std::string symbol_data_string; SymbolSupplier::SymbolResult result = GetSymbolFile(module, system_info, symbol_file, &symbol_data_string); if (result == FOUND) { - *symbol_data = new char[symbol_data_string.size() + 1]; + *symbol_data_size = symbol_data_string.size() + 1; + *symbol_data = new char[*symbol_data_size]; if (*symbol_data == NULL) { // Should return INTERRUPT on memory allocation failure. return INTERRUPT; } - strcpy(*symbol_data, symbol_data_string.c_str()); + memcpy(*symbol_data, symbol_data_string.c_str(), symbol_data_string.size()); + (*symbol_data)[symbol_data_string.size()] = '\0'; memory_buffers_.insert(make_pair(module->code_file(), *symbol_data)); } return result; @@ -280,7 +283,7 @@ bool OnDemandSymbolSupplier::GenerateSymbolFile(const CodeModule *module, NSString *module_str = [[NSFileManager defaultManager] stringWithFileSystemRepresentation:module_path.c_str() length:module_path.length()]; - DumpSymbols dump; + DumpSymbols dump(ALL_SYMBOL_DATA, false); if (dump.Read(module_str)) { // What Breakpad calls "x86" should be given to the system as "i386". std::string architecture; @@ -293,7 +296,7 @@ bool OnDemandSymbolSupplier::GenerateSymbolFile(const CodeModule *module, if (dump.SetArchitecture(architecture)) { std::fstream file([symbol_path fileSystemRepresentation], std::ios_base::out | std::ios_base::trunc); - dump.WriteSymbolFile(file, true); + dump.WriteSymbolFile(file); } else { printf("Architecture %s not available for %s\n", system_info->cpu.c_str(), name.c_str()); diff --git a/toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/dump_syms.xcodeproj/project.pbxproj b/toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/dump_syms.xcodeproj/project.pbxproj index 80a2386aa8c2..ee20b2dd219e 100644 --- a/toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/dump_syms.xcodeproj/project.pbxproj +++ b/toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/dump_syms.xcodeproj/project.pbxproj @@ -97,18 +97,12 @@ B8C5B51A1166534700D34F4E /* file_id.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BE650410B52F6D800611104 /* file_id.cc */; }; B8C5B51B1166534700D34F4E /* macho_id.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BE650430B52F6D800611104 /* macho_id.cc */; }; B8C5B51C1166534700D34F4E /* macho_walker.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BE650450B52F6D800611104 /* macho_walker.cc */; }; - B8C5B51D1166534700D34F4E /* dump_syms.mm in Sources */ = {isa = PBXBuildFile; fileRef = 08FB7796FE84155DC02AAC07 /* dump_syms.mm */; }; - B8C5B51E1166534700D34F4E /* dump_syms_tool.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9BDF186E0B1BB43700F8391B /* dump_syms_tool.mm */; }; + B8C5B51D1166534700D34F4E /* dump_syms.cc in Sources */ = {isa = PBXBuildFile; fileRef = 08FB7796FE84155DC02AAC07 /* dump_syms.cc */; }; + B8C5B51E1166534700D34F4E /* dump_syms_tool.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BDF186E0B1BB43700F8391B /* dump_syms_tool.cc */; }; B8C5B523116653BA00D34F4E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08FB779EFE84155DC02AAC07 /* Foundation.framework */; }; D21F97D711CBA12300239E38 /* test_assembler_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB0D9116CEC0600407530 /* test_assembler_unittest.cc */; }; D21F97D811CBA13D00239E38 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; }; D21F97E911CBA1FF00239E38 /* test_assembler.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE0911665B5700407530 /* test_assembler.cc */; }; - D24997CC16B6C16800E588C5 /* unique_string.cc in Sources */ = {isa = PBXBuildFile; fileRef = D24997CA16B6C16800E588C5 /* unique_string.cc */; }; - D24997CD16B6C16800E588C5 /* unique_string.cc in Sources */ = {isa = PBXBuildFile; fileRef = D24997CA16B6C16800E588C5 /* unique_string.cc */; }; - D24997CE16B6C16800E588C5 /* unique_string.cc in Sources */ = {isa = PBXBuildFile; fileRef = D24997CA16B6C16800E588C5 /* unique_string.cc */; }; - D2499A0016B9BA6A00E588C5 /* unique_string.cc in Sources */ = {isa = PBXBuildFile; fileRef = D24997CA16B6C16800E588C5 /* unique_string.cc */; }; - D2499A0216B9BA9600E588C5 /* unique_string.cc in Sources */ = {isa = PBXBuildFile; fileRef = D24997CA16B6C16800E588C5 /* unique_string.cc */; }; - D2499A0316B9BA9D00E588C5 /* unique_string.cc in Sources */ = {isa = PBXBuildFile; fileRef = D24997CA16B6C16800E588C5 /* unique_string.cc */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -276,7 +270,7 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 08FB7796FE84155DC02AAC07 /* dump_syms.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = dump_syms.mm; path = ../../../common/mac/dump_syms.mm; sourceTree = ""; }; + 08FB7796FE84155DC02AAC07 /* dump_syms.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = dump_syms.cc; path = ../../../common/mac/dump_syms.cc; sourceTree = ""; }; 08FB779EFE84155DC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 162F64F8161C591500CD68D5 /* arch_utilities.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = arch_utilities.cc; path = ../../../common/mac/arch_utilities.cc; sourceTree = ""; }; 162F64F9161C591500CD68D5 /* arch_utilities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = arch_utilities.h; path = ../../../common/mac/arch_utilities.h; sourceTree = ""; }; @@ -287,7 +281,7 @@ 8B3102D411F0D60300FCF3E4 /* BreakpadDebug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = BreakpadDebug.xcconfig; path = ../../../common/mac/BreakpadDebug.xcconfig; sourceTree = SOURCE_ROOT; }; 8B3102D511F0D60300FCF3E4 /* BreakpadRelease.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = BreakpadRelease.xcconfig; path = ../../../common/mac/BreakpadRelease.xcconfig; sourceTree = SOURCE_ROOT; }; 9BDF186D0B1BB43700F8391B /* dump_syms.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dump_syms.h; path = ../../../common/mac/dump_syms.h; sourceTree = ""; }; - 9BDF186E0B1BB43700F8391B /* dump_syms_tool.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = dump_syms_tool.mm; sourceTree = ""; }; + 9BDF186E0B1BB43700F8391B /* dump_syms_tool.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = dump_syms_tool.cc; sourceTree = ""; }; 9BE650410B52F6D800611104 /* file_id.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = file_id.cc; path = ../../../common/mac/file_id.cc; sourceTree = SOURCE_ROOT; }; 9BE650420B52F6D800611104 /* file_id.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = file_id.h; path = ../../../common/mac/file_id.h; sourceTree = SOURCE_ROOT; }; 9BE650430B52F6D800611104 /* macho_id.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = macho_id.cc; path = ../../../common/mac/macho_id.cc; sourceTree = SOURCE_ROOT; }; @@ -349,8 +343,6 @@ B8C5B5111166531A00D34F4E /* dump_syms */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dump_syms; sourceTree = BUILT_PRODUCTS_DIR; }; B8E8CA0C1156C854009E61B2 /* byteswap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = byteswap.h; path = ../../../common/mac/byteswap.h; sourceTree = SOURCE_ROOT; }; D21F97D211CBA0F200239E38 /* test_assembler_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = test_assembler_unittest; sourceTree = BUILT_PRODUCTS_DIR; }; - D24997CA16B6C16800E588C5 /* unique_string.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = unique_string.cc; path = ../../../common/unique_string.cc; sourceTree = ""; }; - D24997CB16B6C16800E588C5 /* unique_string.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = unique_string.h; path = ../../../common/unique_string.h; sourceTree = ""; }; F95B422B0E0E22D100DBDE83 /* bytereader-inl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "bytereader-inl.h"; path = "../../../common/dwarf/bytereader-inl.h"; sourceTree = SOURCE_ROOT; }; F95B422C0E0E22D100DBDE83 /* bytereader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bytereader.cc; path = ../../../common/dwarf/bytereader.cc; sourceTree = SOURCE_ROOT; }; F95B422D0E0E22D100DBDE83 /* bytereader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = bytereader.h; path = ../../../common/dwarf/bytereader.h; sourceTree = SOURCE_ROOT; }; @@ -501,8 +493,8 @@ 9BE650410B52F6D800611104 /* file_id.cc */, 9BE650420B52F6D800611104 /* file_id.h */, 9BDF186D0B1BB43700F8391B /* dump_syms.h */, - 08FB7796FE84155DC02AAC07 /* dump_syms.mm */, - 9BDF186E0B1BB43700F8391B /* dump_syms_tool.mm */, + 08FB7796FE84155DC02AAC07 /* dump_syms.cc */, + 9BDF186E0B1BB43700F8391B /* dump_syms_tool.cc */, B89E0E701166573700DD08C9 /* macho_dump.cc */, 4D72CAF413DFBAC2006CABE3 /* md5.cc */, 08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */, @@ -544,8 +536,6 @@ B88FAE1C11665FFD00407530 /* MODULE */ = { isa = PBXGroup; children = ( - D24997CA16B6C16800E588C5 /* unique_string.cc */, - D24997CB16B6C16800E588C5 /* unique_string.h */, B88FAE1E1166603300407530 /* dwarf_cu_to_module.cc */, B88FAE1F1166603300407530 /* dwarf_cu_to_module.h */, B88FB0D6116CEC0600407530 /* dwarf_cu_to_module_unittest.cc */, @@ -952,7 +942,6 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D2499A0216B9BA9600E588C5 /* unique_string.cc in Sources */, B84A91FB116CF7AF006C210E /* module.cc in Sources */, B84A91FC116CF7AF006C210E /* stabs_to_module.cc in Sources */, B84A91FD116CF7AF006C210E /* stabs_to_module_unittest.cc in Sources */, @@ -996,7 +985,6 @@ files = ( B88FB0BD116CEAE000407530 /* module_unittest.cc in Sources */, B88FB0C4116CEB4100407530 /* module.cc in Sources */, - D24997CE16B6C16800E588C5 /* unique_string.cc in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1013,7 +1001,6 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D2499A0316B9BA9D00E588C5 /* unique_string.cc in Sources */, B88FB0FA116CF00E00407530 /* dwarf_line_to_module.cc in Sources */, B88FB0FE116CF02400407530 /* module.cc in Sources */, B88FB0FB116CF00E00407530 /* dwarf_line_to_module_unittest.cc in Sources */, @@ -1024,7 +1011,6 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D2499A0016B9BA6A00E588C5 /* unique_string.cc in Sources */, B88FB112116CF1F000407530 /* dwarf_cu_to_module.cc in Sources */, B88FB113116CF1F000407530 /* dwarf_cu_to_module_unittest.cc in Sources */, B88FB114116CF1F000407530 /* language.cc in Sources */, @@ -1039,7 +1025,6 @@ B88FB129116CF2DD00407530 /* module.cc in Sources */, B88FB12A116CF2DD00407530 /* dwarf_cfi_to_module.cc in Sources */, B88FB12B116CF2DD00407530 /* dwarf_cfi_to_module_unittest.cc in Sources */, - D24997CD16B6C16800E588C5 /* unique_string.cc in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1092,8 +1077,8 @@ B8C5B51A1166534700D34F4E /* file_id.cc in Sources */, B8C5B51B1166534700D34F4E /* macho_id.cc in Sources */, B8C5B51C1166534700D34F4E /* macho_walker.cc in Sources */, - B8C5B51D1166534700D34F4E /* dump_syms.mm in Sources */, - B8C5B51E1166534700D34F4E /* dump_syms_tool.mm in Sources */, + B8C5B51D1166534700D34F4E /* dump_syms.cc in Sources */, + B8C5B51E1166534700D34F4E /* dump_syms_tool.cc in Sources */, B88FAE1911665FE400407530 /* dwarf2diehandler.cc in Sources */, B88FAE261166603300407530 /* dwarf_cu_to_module.cc in Sources */, B88FAE271166603300407530 /* dwarf_line_to_module.cc in Sources */, @@ -1103,7 +1088,6 @@ B88FAE3B11666C6F00407530 /* stabs_reader.cc in Sources */, B88FAE3E11666C8900407530 /* stabs_to_module.cc in Sources */, 4D72CAF513DFBAC2006CABE3 /* md5.cc in Sources */, - D24997CC16B6C16800E588C5 /* unique_string.cc in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/dump_syms_tool.cc b/toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/dump_syms_tool.cc index 8a5122c54737..54f29226116d 100644 --- a/toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/dump_syms_tool.cc +++ b/toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/dump_syms_tool.cc @@ -35,44 +35,109 @@ #include #include +#include #include #include #include "common/mac/dump_syms.h" #include "common/mac/arch_utilities.h" #include "common/mac/macho_utilities.h" +#include "common/scoped_ptr.h" using google_breakpad::DumpSymbols; +using google_breakpad::Module; +using google_breakpad::scoped_ptr; using std::vector; struct Options { - Options() : srcPath(), arch(), cfi(true) { } + Options() + : srcPath(), dsymPath(), arch(), cfi(true), handle_inter_cu_refs(true) {} + string srcPath; + string dsymPath; const NXArchInfo *arch; bool cfi; + bool handle_inter_cu_refs; }; -//============================================================================= -static bool Start(const Options &options) { - DumpSymbols dump_symbols(options.cfi ? ALL_SYMBOL_DATA : NO_CFI); +static bool StackFrameEntryComparator(const Module::StackFrameEntry* a, + const Module::StackFrameEntry* b) { + return a->address < b->address; +} - if (!dump_symbols.Read(options.srcPath)) +// Copy the CFI data from |from_module| into |to_module|, for any non- +// overlapping ranges. +static void CopyCFIDataBetweenModules(Module* to_module, + const Module* from_module) { + typedef vector::const_iterator Iterator; + + // Get the CFI data from both the source and destination modules and ensure + // it is sorted by start address. + vector from_data; + from_module->GetStackFrameEntries(&from_data); + std::sort(from_data.begin(), from_data.end(), &StackFrameEntryComparator); + + vector to_data; + to_module->GetStackFrameEntries(&to_data); + std::sort(to_data.begin(), to_data.end(), &StackFrameEntryComparator); + + Iterator to_it = to_data.begin(); + + for (Iterator it = from_data.begin(); it != from_data.end(); ++it) { + Module::StackFrameEntry* from_entry = *it; + Module::Address from_entry_end = from_entry->address + from_entry->size; + + // Find the first CFI record in the |to_module| that does not have an + // address less than the entry to be copied. + while (to_it != to_data.end()) { + if (from_entry->address > (*to_it)->address) + ++to_it; + else + break; + } + + // If the entry does not overlap, then it is safe to copy to |to_module|. + if (to_it == to_data.end() || (from_entry->address < (*to_it)->address && + from_entry_end < (*to_it)->address)) { + to_module->AddStackFrameEntry(new Module::StackFrameEntry(*from_entry)); + } + } +} + +static bool Start(const Options &options) { + SymbolData symbol_data = options.cfi ? ALL_SYMBOL_DATA : NO_CFI; + DumpSymbols dump_symbols(symbol_data, options.handle_inter_cu_refs); + + // For x86_64 binaries, the CFI data is in the __TEXT,__eh_frame of the + // Mach-O file, which is not copied into the dSYM. Whereas in i386, the CFI + // data is in the __DWARF,__debug_frame section, which is moved into the + // dSYM. Therefore, to get x86_64 CFI data, dump_syms needs to look at both + // the dSYM and the Mach-O file. If both paths are present and CFI was + // requested, then consider the Module as "split" and dump all the debug data + // from the primary debug info file, the dSYM, and then dump additional CFI + // data from the source Mach-O file. + bool split_module = + !options.dsymPath.empty() && !options.srcPath.empty() && options.cfi; + const string& primary_file = + split_module ? options.dsymPath : options.srcPath; + + if (!dump_symbols.Read(primary_file)) return false; if (options.arch) { if (!dump_symbols.SetArchitecture(options.arch->cputype, options.arch->cpusubtype)) { fprintf(stderr, "%s: no architecture '%s' is present in file.\n", - options.srcPath.c_str(), options.arch->name); + primary_file.c_str(), options.arch->name); size_t available_size; - const struct fat_arch *available = + const SuperFatArch *available = dump_symbols.AvailableArchitectures(&available_size); if (available_size == 1) fprintf(stderr, "the file's architecture is: "); else fprintf(stderr, "architectures present in the file are:\n"); for (size_t i = 0; i < available_size; i++) { - const struct fat_arch *arch = &available[i]; + const SuperFatArch *arch = &available[i]; const NXArchInfo *arch_info = google_breakpad::BreakpadGetArchInfoFromCpuType( arch->cputype, arch->cpusubtype); @@ -86,17 +151,50 @@ static bool Start(const Options &options) { } } - return dump_symbols.WriteSymbolFile(std::cout); + // Read the primary file into a Breakpad Module. + Module* module = NULL; + if (!dump_symbols.ReadSymbolData(&module)) + return false; + scoped_ptr scoped_module(module); + + // If this is a split module, read the secondary Mach-O file, from which the + // CFI data will be extracted. + if (split_module && primary_file == options.dsymPath) { + if (!dump_symbols.Read(options.srcPath)) + return false; + + Module* cfi_module = NULL; + if (!dump_symbols.ReadSymbolData(&cfi_module)) + return false; + scoped_ptr scoped_cfi_module(cfi_module); + + // Ensure that the modules are for the same debug code file. + if (cfi_module->name() != module->name() || + cfi_module->os() != module->os() || + cfi_module->architecture() != module->architecture() || + cfi_module->identifier() != module->identifier()) { + fprintf(stderr, "Cannot generate a symbol file from split sources that do" + " not match.\n"); + return false; + } + + CopyCFIDataBetweenModules(module, cfi_module); + } + + return module->Write(std::cout, symbol_data); } //============================================================================= static void Usage(int argc, const char *argv[]) { fprintf(stderr, "Output a Breakpad symbol file from a Mach-o file.\n"); - fprintf(stderr, "Usage: %s [-a ARCHITECTURE] [-c] \n", - argv[0]); + fprintf(stderr, "Usage: %s [-a ARCHITECTURE] [-c] [-g dSYM path] " + "\n", argv[0]); fprintf(stderr, "\t-a: Architecture type [default: native, or whatever is\n"); fprintf(stderr, "\t in the file, if it contains only one architecture]\n"); + fprintf(stderr, "\t-g: Debug symbol file (dSYM) to dump in addition to the " + "Mach-o file\n"); fprintf(stderr, "\t-c: Do not generate CFI section\n"); + fprintf(stderr, "\t-r: Do not handle inter-compilation unit references\n"); fprintf(stderr, "\t-h: Usage\n"); fprintf(stderr, "\t-?: Usage\n"); } @@ -106,7 +204,7 @@ static void SetupOptions(int argc, const char *argv[], Options *options) { extern int optind; signed char ch; - while ((ch = getopt(argc, (char * const *)argv, "a:ch?")) != -1) { + while ((ch = getopt(argc, (char * const *)argv, "a:g:chr?")) != -1) { switch (ch) { case 'a': { const NXArchInfo *arch_info = @@ -119,9 +217,15 @@ static void SetupOptions(int argc, const char *argv[], Options *options) { options->arch = arch_info; break; } + case 'g': + options->dsymPath = optarg; + break; case 'c': options->cfi = false; break; + case 'r': + options->handle_inter_cu_refs = false; + break; case '?': case 'h': Usage(argc, argv); diff --git a/toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/moz.build b/toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/moz.build index 4cc1a6aa3d10..a40d3961ea76 100644 --- a/toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/moz.build +++ b/toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/moz.build @@ -27,7 +27,6 @@ HOST_USE_LIBS += [ HostProgram('dump_syms') LOCAL_INCLUDES += [ - '../../..', '../../../common/mac', ] @@ -35,3 +34,5 @@ if CONFIG['HOST_OS_ARCH'] != 'Darwin': HOST_CXXFLAGS += [ '-I%s/toolkit/crashreporter/google-breakpad/src/third_party/mac_headers/' % TOPSRCDIR, ] + +include('/toolkit/crashreporter/crashreporter.mozbuild') diff --git a/toolkit/crashreporter/google-breakpad/src/tools/mac/tools_mac.gypi b/toolkit/crashreporter/google-breakpad/src/tools/mac/tools_mac.gypi new file mode 100644 index 000000000000..7457573b4b61 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/tools/mac/tools_mac.gypi @@ -0,0 +1,116 @@ +# Copyright 2014 Google Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +{ + 'target_defaults': { + 'include_dirs': [ + '../..', + ], + }, + 'targets': [ + { + 'target_name': 'crash_report', + 'type': 'executable', + 'sources': [ + 'crash_report/crash_report.mm', + 'crash_report/on_demand_symbol_supplier.h', + 'crash_report/on_demand_symbol_supplier.mm', + ], + 'link_settings': { + 'libraries': [ + '$(SDKROOT)/System/Library/Frameworks/Foundation.framework', + ], + }, + 'dependencies': [ + '../common/common.gyp:common', + '../processor/processor.gyp:processor', + ], + }, + { + 'target_name': 'dump_syms', + 'type': 'executable', + 'sources': [ + 'dump_syms/dump_syms_tool.cc', + ], + 'link_settings': { + 'libraries': [ + '$(SDKROOT)/System/Library/Frameworks/Foundation.framework', + ], + }, + 'dependencies': [ + '../common/common.gyp:common', + ], + }, + { + 'target_name': 'macho_dump', + 'type': 'executable', + 'sources': [ + 'dump_syms/macho_dump.cc', + ], + 'dependencies': [ + '../common/common.gyp:common', + ], + }, + { + 'target_name': 'minidump_upload', + 'type': 'executable', + 'sources': [ + 'symupload/minidump_upload.m', + ], + 'include_dirs': [ + '../../common/mac', + ], + 'link_settings': { + 'libraries': [ + '$(SDKROOT)/System/Library/Frameworks/Foundation.framework', + ], + }, + 'dependencies': [ + '../common/common.gyp:common', + ], + }, + { + 'target_name': 'symupload', + 'type': 'executable', + 'sources': [ + 'symupload/symupload.m', + ], + 'include_dirs': [ + '../../common/mac', + ], + 'link_settings': { + 'libraries': [ + '$(SDKROOT)/System/Library/Frameworks/Foundation.framework', + ], + }, + 'dependencies': [ + '../common/common.gyp:common', + ], + }, + ], +} diff --git a/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/copyright b/toolkit/crashreporter/google-breakpad/src/tools/mac/upload_system_symbols/arch_constants.h similarity index 52% rename from toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/copyright rename to toolkit/crashreporter/google-breakpad/src/tools/mac/upload_system_symbols/arch_constants.h index ed9d9d1ec85b..2115e54e66b1 100644 --- a/toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/copyright +++ b/toolkit/crashreporter/google-breakpad/src/tools/mac/upload_system_symbols/arch_constants.h @@ -1,24 +1,17 @@ -This package was debianized by Google Inc. on -13 June 2008. - -It was downloaded from http://code.google.com/ - -Upstream Author: opensource@google.com - -Copyright (c) 2008, Google Inc. +/* Copyright 2014, Google Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -33,3 +26,36 @@ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include +#include +#include + +// Go/Cgo does not support #define constants, so turn them into symbols +// that are reachable from Go. + +#ifndef CPU_TYPE_ARM64 +#define CPU_TYPE_ARM64 (CPU_TYPE_ARM | CPU_ARCH_ABI64) +#endif + +#ifndef CPU_SUBTYPE_ARM64_ALL +#define CPU_SUBTYPE_ARM64_ALL 0 +#endif + +const cpu_type_t kCPU_TYPE_ARM = CPU_TYPE_ARM; +const cpu_type_t kCPU_TYPE_ARM64 = CPU_TYPE_ARM64; + +const cpu_subtype_t kCPU_SUBTYPE_ARM64_ALL = CPU_SUBTYPE_ARM64_ALL; +const cpu_subtype_t kCPU_SUBTYPE_ARM_V7S = CPU_SUBTYPE_ARM_V7S; + +const char* GetNXArchInfoName(cpu_type_t cpu_type, cpu_subtype_t cpu_subtype) { + const NXArchInfo* arch_info = NXGetArchInfoFromCpuType(cpu_type, cpu_subtype); + if (!arch_info) + return 0; + return arch_info->name; +} + +const uint32_t kMachHeaderFtypeDylib = MH_DYLIB; +const uint32_t kMachHeaderFtypeBundle = MH_BUNDLE; +const uint32_t kMachHeaderFtypeExe = MH_EXECUTE; diff --git a/toolkit/crashreporter/google-breakpad/src/tools/mac/upload_system_symbols/arch_reader.go b/toolkit/crashreporter/google-breakpad/src/tools/mac/upload_system_symbols/arch_reader.go new file mode 100644 index 000000000000..f60648230c18 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/tools/mac/upload_system_symbols/arch_reader.go @@ -0,0 +1,65 @@ +/* Copyright 2014, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package main + +import ( + "debug/macho" +) + +/* +#include "arch_constants.h" +*/ +import "C" + +// getArchStringFromHeader takes a MachO FileHeader and returns a string that +// represents the CPU type and subtype. +// This function is a Go version of src/common/mac/arch_utilities.cc:BreakpadGetArchInfoFromCpuType(). +func getArchStringFromHeader(header macho.FileHeader) string { + // TODO(rsesek): As of 10.9.4, OS X doesn't list these in /usr/include/mach/machine.h. + if header.Cpu == C.kCPU_TYPE_ARM64 && header.SubCpu == C.kCPU_SUBTYPE_ARM64_ALL { + return "arm64" + } + if header.Cpu == C.kCPU_TYPE_ARM && header.SubCpu == C.kCPU_SUBTYPE_ARM_V7S { + return "armv7s" + } + + cstr := C.GetNXArchInfoName(C.cpu_type_t(header.Cpu), C.cpu_subtype_t(header.SubCpu)) + if cstr == nil { + return "" + } + return C.GoString(cstr) +} + +const ( + MachODylib macho.Type = C.kMachHeaderFtypeDylib + MachOBundle = C.kMachHeaderFtypeBundle + MachOExe = C.kMachHeaderFtypeExe +) diff --git a/toolkit/crashreporter/google-breakpad/src/tools/mac/upload_system_symbols/upload_system_symbols.go b/toolkit/crashreporter/google-breakpad/src/tools/mac/upload_system_symbols/upload_system_symbols.go new file mode 100644 index 000000000000..3556120868d5 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/tools/mac/upload_system_symbols/upload_system_symbols.go @@ -0,0 +1,420 @@ +/* Copyright 2014, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* +Tool upload_system_symbols generates and uploads Breakpad symbol files for OS X system libraries. + +This tool shells out to the dump_syms and symupload Breakpad tools. In its default mode, this +will find all dynamic libraries on the system, run dump_syms to create the Breakpad symbol files, +and then upload them to Google's crash infrastructure. + +The tool can also be used to only dump libraries or upload from a directory. See -help for more +information. + +Both i386 and x86_64 architectures will be dumped and uploaded. +*/ +package main + +import ( + "debug/macho" + "flag" + "fmt" + "io" + "io/ioutil" + "log" + "os" + "os/exec" + "path" + "regexp" + "strings" + "sync" + "time" +) + +var ( + breakpadTools = flag.String("breakpad-tools", "out/Release/", "Path to the Breakpad tools directory, containing dump_syms and symupload.") + uploadOnlyPath = flag.String("upload-from", "", "Upload a directory of symbol files that has been dumped independently.") + dumpOnlyPath = flag.String("dump-to", "", "Dump the symbols to the specified directory, but do not upload them.") + systemRoot = flag.String("system-root", "", "Path to the root of the Mac OS X system whose symbols will be dumped.") + dumpArchitecture = flag.String("arch", "", "The CPU architecture for which symbols should be dumped. If not specified, dumps all architectures.") +) + +var ( + // pathsToScan are the subpaths in the systemRoot that should be scanned for shared libraries. + pathsToScan = []string{ + "/Library/QuickTime", + "/System/Library/Components", + "/System/Library/Frameworks", + "/System/Library/PrivateFrameworks", + "/usr/lib", + } + + // uploadServers are the list of servers to which symbols should be uploaded. + uploadServers = []string{ + "https://clients2.google.com/cr/symbol", + "https://clients2.google.com/cr/staging_symbol", + } + + // blacklistRegexps match paths that should be excluded from dumping. + blacklistRegexps = []*regexp.Regexp{ + regexp.MustCompile(`/System/Library/Frameworks/Python\.framework/`), + regexp.MustCompile(`/System/Library/Frameworks/Ruby\.framework/`), + regexp.MustCompile(`_profile\.dylib$`), + regexp.MustCompile(`_debug\.dylib$`), + regexp.MustCompile(`\.a$`), + regexp.MustCompile(`\.dat$`), + } +) + +func main() { + flag.Parse() + log.SetFlags(0) + + var uq *UploadQueue + + if *uploadOnlyPath != "" { + // -upload-from specified, so handle that case early. + uq = StartUploadQueue() + uploadFromDirectory(*uploadOnlyPath, uq) + uq.Wait() + return + } + + if *systemRoot == "" { + log.Fatal("Need a -system-root to dump symbols for") + } + + if *dumpOnlyPath != "" { + // -dump-to specified, so make sure that the path is a directory. + if fi, err := os.Stat(*dumpOnlyPath); err != nil { + log.Fatal("-dump-to location: %v", err) + } else if !fi.IsDir() { + log.Fatal("-dump-to location is not a directory") + } + } + + dumpPath := *dumpOnlyPath + if *dumpOnlyPath == "" { + // If -dump-to was not specified, then run the upload pipeline and create + // a temporary dump output directory. + uq = StartUploadQueue() + + if p, err := ioutil.TempDir("", "upload_system_symbols"); err != nil { + log.Fatal("Failed to create temporary directory: %v", err) + } else { + dumpPath = p + defer os.RemoveAll(p) + } + } + + dq := StartDumpQueue(*systemRoot, dumpPath, uq) + dq.Wait() + if uq != nil { + uq.Wait() + } +} + +type WorkerPool struct { + wg sync.WaitGroup +} + +// StartWorkerPool will launch numWorkers goroutines all running workerFunc. +// When workerFunc exits, the goroutine will terminate. +func StartWorkerPool(numWorkers int, workerFunc func()) *WorkerPool { + p := new(WorkerPool) + for i := 0; i < numWorkers; i++ { + p.wg.Add(1) + go func() { + workerFunc() + p.wg.Done() + }() + } + return p +} + +// Wait for all the workers in the pool to complete the workerFunc. +func (p *WorkerPool) Wait() { + p.wg.Wait() +} + +type UploadQueue struct { + *WorkerPool + queue chan string +} + +// StartUploadQueue creates a new worker pool and queue, to which paths to +// Breakpad symbol files may be sent for uploading. +func StartUploadQueue() *UploadQueue { + uq := &UploadQueue{ + queue: make(chan string, 10), + } + uq.WorkerPool = StartWorkerPool(5, uq.worker) + return uq +} + +// Upload enqueues the contents of filepath to be uploaded. +func (uq *UploadQueue) Upload(filepath string) { + uq.queue <- filepath +} + +// Done tells the queue that no more files need to be uploaded. This must be +// called before WorkerPool.Wait. +func (uq *UploadQueue) Done() { + close(uq.queue) +} + +func (uq *UploadQueue) worker() { + symUpload := path.Join(*breakpadTools, "symupload") + + for symfile := range uq.queue { + for _, server := range uploadServers { + for i := 0; i < 3; i++ { // Give each upload 3 attempts to succeed. + cmd := exec.Command(symUpload, symfile, server) + if output, err := cmd.Output(); err == nil { + // Success. No retry needed. + fmt.Printf("Uploaded %s to %s\n", symfile, server) + break + } else { + log.Printf("Error running symupload(%s, %s), attempt %d: %v: %s\n", symfile, server, i, err, output) + time.Sleep(1 * time.Second) + } + } + } + } +} + +type DumpQueue struct { + *WorkerPool + dumpPath string + queue chan dumpRequest + uq *UploadQueue +} + +type dumpRequest struct { + path string + arch string +} + +// StartDumpQueue creates a new worker pool to find all the Mach-O libraries in +// root and dump their symbols to dumpPath. If an UploadQueue is passed, the +// path to the symbol file will be enqueued there, too. +func StartDumpQueue(root, dumpPath string, uq *UploadQueue) *DumpQueue { + dq := &DumpQueue{ + dumpPath: dumpPath, + queue: make(chan dumpRequest), + uq: uq, + } + dq.WorkerPool = StartWorkerPool(12, dq.worker) + + findLibsInRoot(root, dq) + + return dq +} + +// DumpSymbols enqueues the filepath to have its symbols dumped in the specified +// architecture. +func (dq *DumpQueue) DumpSymbols(filepath string, arch string) { + dq.queue <- dumpRequest{ + path: filepath, + arch: arch, + } +} + +func (dq *DumpQueue) Wait() { + dq.WorkerPool.Wait() + if dq.uq != nil { + dq.uq.Done() + } +} + +func (dq *DumpQueue) done() { + close(dq.queue) +} + +func (dq *DumpQueue) worker() { + dumpSyms := path.Join(*breakpadTools, "dump_syms") + + for req := range dq.queue { + filebase := path.Join(dq.dumpPath, strings.Replace(req.path, "/", "_", -1)) + symfile := fmt.Sprintf("%s_%s.sym", filebase, req.arch) + f, err := os.Create(symfile) + if err != nil { + log.Fatal("Error creating symbol file:", err) + } + + cmd := exec.Command(dumpSyms, "-a", req.arch, req.path) + cmd.Stdout = f + err = cmd.Run() + f.Close() + + if err != nil { + os.Remove(symfile) + log.Printf("Error running dump_syms(%s, %s): %v\n", req.arch, req.path, err) + } else if dq.uq != nil { + dq.uq.Upload(symfile) + } + } +} + +// uploadFromDirectory handles the upload-only case and merely uploads all files in +// a directory. +func uploadFromDirectory(directory string, uq *UploadQueue) { + d, err := os.Open(directory) + if err != nil { + log.Fatal("Could not open directory to upload: %v", err) + } + defer d.Close() + + entries, err := d.Readdirnames(0) + if err != nil { + log.Fatal("Could not read directory: %v", err) + } + + for _, entry := range entries { + uq.Upload(path.Join(directory, entry)) + } + + uq.Done() +} + +// findQueue is an implementation detail of the DumpQueue that finds all the +// Mach-O files and their architectures. +type findQueue struct { + *WorkerPool + queue chan string + dq *DumpQueue +} + +// findLibsInRoot looks in all the pathsToScan in the root and manages the +// interaction between findQueue and DumpQueue. +func findLibsInRoot(root string, dq *DumpQueue) { + fq := &findQueue{ + queue: make(chan string, 10), + dq: dq, + } + fq.WorkerPool = StartWorkerPool(12, fq.worker) + + for _, p := range pathsToScan { + fq.findLibsInPath(path.Join(root, p)) + } + + close(fq.queue) + fq.Wait() + dq.done() +} + +// findLibsInPath recursively walks the directory tree, sending file paths to +// test for being Mach-O to the findQueue. +func (fq *findQueue) findLibsInPath(loc string) { + d, err := os.Open(loc) + if err != nil { + log.Fatal("Could not open %s: %v", loc, err) + } + defer d.Close() + + for { + fis, err := d.Readdir(100) + if err != nil && err != io.EOF { + log.Fatal("Error reading directory %s: %v", loc, err) + } + + for _, fi := range fis { + fp := path.Join(loc, fi.Name()) + if fi.IsDir() { + fq.findLibsInPath(fp) + continue + } else if fi.Mode()&os.ModeSymlink != 0 { + continue + } + + // Test the blacklist in the worker to not slow down this main loop. + + fq.queue <- fp + } + + if err == io.EOF { + break + } + } +} + +func (fq *findQueue) worker() { + for fp := range fq.queue { + blacklisted := false + for _, re := range blacklistRegexps { + blacklisted = blacklisted || re.MatchString(fp) + } + if blacklisted { + continue + } + + f, err := os.Open(fp) + if err != nil { + log.Printf("%s: %v", fp, err) + continue + } + + fatFile, err := macho.NewFatFile(f) + if err == nil { + // The file is fat, so dump its architectures. + for _, fatArch := range fatFile.Arches { + fq.dumpMachOFile(fp, fatArch.File) + } + fatFile.Close() + } else if err == macho.ErrNotFat { + // The file isn't fat but may still be MachO. + thinFile, err := macho.NewFile(f) + if err != nil { + log.Printf("%s: %v", fp, err) + continue + } + fq.dumpMachOFile(fp, thinFile) + thinFile.Close() + } else { + f.Close() + } + } +} + +func (fq *findQueue) dumpMachOFile(fp string, image *macho.File) { + if image.Type != MachODylib && image.Type != MachOBundle { + return + } + + arch := getArchStringFromHeader(image.FileHeader) + if arch == "" { + // Don't know about this architecture type. + return + } + + if (*dumpArchitecture != "" && *dumpArchitecture == arch) || *dumpArchitecture == "" { + fq.dq.DumpSymbols(fp, arch) + } +} diff --git a/toolkit/crashreporter/google-breakpad/src/tools/solaris/dump_syms/moz.build b/toolkit/crashreporter/google-breakpad/src/tools/solaris/dump_syms/moz.build index 96656dba3c39..d47f0dc2f0d5 100644 --- a/toolkit/crashreporter/google-breakpad/src/tools/solaris/dump_syms/moz.build +++ b/toolkit/crashreporter/google-breakpad/src/tools/solaris/dump_syms/moz.build @@ -23,7 +23,7 @@ HOST_USE_LIBS += [ HostProgram('dump_syms') LOCAL_INCLUDES += [ - '../../..', '../../../common/solaris', ] +include('/toolkit/crashreporter/crashreporter.mozbuild') diff --git a/toolkit/crashreporter/google-breakpad/src/client/windows/build/external_code.gypi b/toolkit/crashreporter/google-breakpad/src/tools/tools.gyp similarity index 62% rename from toolkit/crashreporter/google-breakpad/src/client/windows/build/external_code.gypi rename to toolkit/crashreporter/google-breakpad/src/tools/tools.gyp index 906cfe032ef7..e6a4210fec44 100644 --- a/toolkit/crashreporter/google-breakpad/src/client/windows/build/external_code.gypi +++ b/toolkit/crashreporter/google-breakpad/src/tools/tools.gyp @@ -1,5 +1,4 @@ -# Copyright (c) 2010, Google Inc. -# All rights reserved. +# Copyright 2014 Google Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are @@ -29,43 +28,11 @@ { 'conditions': [ - [ 'OS=="linux"', { - 'target_defaults': { - 'cflags!': [ - '-Wall', - '-Werror', - ], - }, + ['OS=="mac"', { + 'includes': ['mac/tools_mac.gypi'], }], - [ 'OS=="win"', { - 'target_defaults': { - 'defines': [ - '_CRT_SECURE_NO_DEPRECATE', - '_CRT_NONSTDC_NO_WARNINGS', - '_CRT_NONSTDC_NO_DEPRECATE', - ], - 'msvs_disabled_warnings': [4800], - 'msvs_settings': { - 'VCCLCompilerTool': { - 'WarnAsError': 'false', - 'Detect64BitPortabilityProblems': 'false', - }, - }, - }, - }], - [ 'OS=="mac"', { - 'target_defaults': { - 'xcode_settings': { - 'GCC_TREAT_WARNINGS_AS_ERRORS': 'NO', - 'WARNING_CFLAGS!': ['-Wall'], - }, - }, + ['OS=="linux"', { + 'includes': ['linux/tools_linux.gypi'], }], ], } - -# Local Variables: -# tab-width:2 -# indent-tabs-mode:nil -# End: -# vim: set expandtab tabstop=2 shiftwidth=2: diff --git a/toolkit/crashreporter/google-breakpad/src/tools/windows/binaries/dump_syms.exe b/toolkit/crashreporter/google-breakpad/src/tools/windows/binaries/dump_syms.exe index 7b836a1d88a9..ca4676f5022d 100644 Binary files a/toolkit/crashreporter/google-breakpad/src/tools/windows/binaries/dump_syms.exe and b/toolkit/crashreporter/google-breakpad/src/tools/windows/binaries/dump_syms.exe differ diff --git a/toolkit/crashreporter/google-breakpad/src/tools/windows/binaries/symupload.exe b/toolkit/crashreporter/google-breakpad/src/tools/windows/binaries/symupload.exe index 6aa1f45b3152..ba319b269f62 100644 Binary files a/toolkit/crashreporter/google-breakpad/src/tools/windows/binaries/symupload.exe and b/toolkit/crashreporter/google-breakpad/src/tools/windows/binaries/symupload.exe differ diff --git a/toolkit/crashreporter/google-breakpad/src/tools/windows/converter/ms_symbol_server_converter.cc b/toolkit/crashreporter/google-breakpad/src/tools/windows/converter/ms_symbol_server_converter.cc index 28affcbb7d01..dd3f770f5590 100644 --- a/toolkit/crashreporter/google-breakpad/src/tools/windows/converter/ms_symbol_server_converter.cc +++ b/toolkit/crashreporter/google-breakpad/src/tools/windows/converter/ms_symbol_server_converter.cc @@ -113,10 +113,12 @@ MSSymbolServerConverter::MSSymbolServerConverter( assert(symbol_servers.size() > 0); +#if !defined(NDEBUG) // These are characters that are interpreted as having special meanings in // symbol_path_. - const char *kInvalidCharacters = "*;"; + const char kInvalidCharacters[] = "*;"; assert(local_cache.find_first_of(kInvalidCharacters) == string::npos); +#endif // !defined(NDEBUG) for (vector::const_iterator symbol_server = symbol_servers.begin(); symbol_server != symbol_servers.end(); @@ -183,7 +185,7 @@ class AutoSymSrv { // are supported by calling Delete(). class AutoDeleter { public: - AutoDeleter(const string &path) : path_(path) {} + explicit AutoDeleter(const string &path) : path_(path) {} ~AutoDeleter() { int error; @@ -213,18 +215,20 @@ class AutoDeleter { }; MSSymbolServerConverter::LocateResult -MSSymbolServerConverter::LocateSymbolFile(const MissingSymbolInfo &missing, - string *symbol_file) { - assert(symbol_file); - symbol_file->clear(); +MSSymbolServerConverter::LocateFile(const string &debug_or_code_file, + const string &debug_or_code_id, + const string &version, + string *file_name) { + assert(file_name); + file_name->clear(); GUIDOrSignatureIdentifier identifier; - if (!identifier.InitializeFromString(missing.debug_identifier)) { + if (!identifier.InitializeFromString(debug_or_code_id)) { fprintf(stderr, - "LocateSymbolFile: Unparseable debug_identifier for %s %s %s\n", - missing.debug_file.c_str(), - missing.debug_identifier.c_str(), - missing.version.c_str()); + "LocateFile: Unparseable identifier for %s %s %s\n", + debug_or_code_file.c_str(), + debug_or_code_id.c_str(), + version.c_str()); return LOCATE_FAILURE; } @@ -233,22 +237,22 @@ MSSymbolServerConverter::LocateSymbolFile(const MissingSymbolInfo &missing, if (!symsrv.Initialize(process, const_cast(symbol_path_.c_str()), false)) { - fprintf(stderr, "LocateSymbolFile: SymInitialize: error %d for %s %s %s\n", + fprintf(stderr, "LocateFile: SymInitialize: error %d for %s %s %s\n", GetLastError(), - missing.debug_file.c_str(), - missing.debug_identifier.c_str(), - missing.version.c_str()); + debug_or_code_file.c_str(), + debug_or_code_id.c_str(), + version.c_str()); return LOCATE_FAILURE; } if (!SymRegisterCallback64(process, SymCallback, reinterpret_cast(this))) { fprintf(stderr, - "LocateSymbolFile: SymRegisterCallback64: error %d for %s %s %s\n", + "LocateFile: SymRegisterCallback64: error %d for %s %s %s\n", GetLastError(), - missing.debug_file.c_str(), - missing.debug_identifier.c_str(), - missing.version.c_str()); + debug_or_code_file.c_str(), + debug_or_code_id.c_str(), + version.c_str()); return LOCATE_FAILURE; } @@ -267,7 +271,7 @@ MSSymbolServerConverter::LocateSymbolFile(const MissingSymbolInfo &missing, char path[MAX_PATH]; if (!SymFindFileInPath( process, NULL, - const_cast(missing.debug_file.c_str()), + const_cast(debug_or_code_file.c_str()), const_cast(identifier.guid_or_signature_pointer()), identifier.age(), 0, identifier.type() == GUIDOrSignatureIdentifier::TYPE_GUID ? @@ -286,11 +290,11 @@ MSSymbolServerConverter::LocateSymbolFile(const MissingSymbolInfo &missing, // This is an authoritiative file-not-found message. if (fail_not_found_) { fprintf(stderr, - "LocateSymbolFile: SymFindFileInPath: LOCATE_NOT_FOUND error " + "LocateFile: SymFindFileInPath: LOCATE_NOT_FOUND error " "for %s %s %s\n", - missing.debug_file.c_str(), - missing.debug_identifier.c_str(), - missing.version.c_str()); + debug_or_code_file.c_str(), + debug_or_code_id.c_str(), + version.c_str()); return LOCATE_NOT_FOUND; } @@ -299,14 +303,17 @@ MSSymbolServerConverter::LocateSymbolFile(const MissingSymbolInfo &missing, } fprintf(stderr, - "LocateSymbolFile: SymFindFileInPath: error %d for %s %s %s\n", + "LocateFile: SymFindFileInPath: error %d for %s %s %s\n", error, - missing.debug_file.c_str(), - missing.debug_identifier.c_str(), - missing.version.c_str()); + debug_or_code_file.c_str(), + debug_or_code_id.c_str(), + version.c_str()); return LOCATE_FAILURE; } + // Making sure path is null-terminated. + path[MAX_PATH - 1] = '\0'; + // The AutoDeleter ensures that the file is only kept when returning // LOCATE_SUCCESS. AutoDeleter deleter(path); @@ -314,20 +321,37 @@ MSSymbolServerConverter::LocateSymbolFile(const MissingSymbolInfo &missing, // Do the cleanup here even though it will happen when symsrv goes out of // scope, to allow it to influence the return value. if (!symsrv.Cleanup()) { - fprintf(stderr, "LocateSymbolFile: SymCleanup: error %d for %s %s %s\n", + fprintf(stderr, "LocateFile: SymCleanup: error %d for %s %s %s\n", GetLastError(), - missing.debug_file.c_str(), - missing.debug_identifier.c_str(), - missing.version.c_str()); + debug_or_code_file.c_str(), + debug_or_code_id.c_str(), + version.c_str()); return LOCATE_FAILURE; } deleter.Release(); - *symbol_file = path; + printf("Downloaded: %s\n", path); + *file_name = path; return LOCATE_SUCCESS; } + +MSSymbolServerConverter::LocateResult +MSSymbolServerConverter::LocatePEFile(const MissingSymbolInfo &missing, + string *pe_file) { + return LocateFile(missing.code_file, missing.code_identifier, + missing.version, pe_file); +} + +MSSymbolServerConverter::LocateResult +MSSymbolServerConverter::LocateSymbolFile(const MissingSymbolInfo &missing, + string *symbol_file) { + return LocateFile(missing.debug_file, missing.debug_identifier, + missing.version, symbol_file); +} + + // static BOOL CALLBACK MSSymbolServerConverter::SymCallback(HANDLE process, ULONG action, @@ -341,7 +365,7 @@ BOOL CALLBACK MSSymbolServerConverter::SymCallback(HANDLE process, IMAGEHLP_CBA_EVENT *cba_event = reinterpret_cast(data); - // Put the string into a string object to be able to use string::find + // Put the string into a string object to be able to use string::find // for substring matching. This is important because the not-found // message does not use the entire string but is appended to the URL // that SymSrv attempted to retrieve. @@ -398,7 +422,7 @@ BOOL CALLBACK MSSymbolServerConverter::SymCallback(HANDLE process, // static BOOL CALLBACK MSSymbolServerConverter::SymFindFileInPathCallback( - char *filename, void *context) { + const char *filename, void *context) { // FALSE ends the search, indicating that the located symbol file is // satisfactory. return FALSE; @@ -408,8 +432,10 @@ MSSymbolServerConverter::LocateResult MSSymbolServerConverter::LocateAndConvertSymbolFile( const MissingSymbolInfo &missing, bool keep_symbol_file, + bool keep_pe_file, string *converted_symbol_file, - string *symbol_file) { + string *symbol_file, + string *out_pe_file) { assert(converted_symbol_file); converted_symbol_file->clear(); if (symbol_file) { @@ -426,11 +452,26 @@ MSSymbolServerConverter::LocateAndConvertSymbolFile( *symbol_file = pdb_file; } + // The conversion of a symbol file for a Windows 64-bit module requires + // loading of the executable file. If there is no executable file, convert + // using only the PDB file. Without an executable file, the conversion will + // fail for 64-bit modules but it should succeed for 32-bit modules. + string pe_file; + result = LocatePEFile(missing, &pe_file); + if (result != LOCATE_SUCCESS) { + fprintf(stderr, "WARNING: Could not download: %s\n", pe_file.c_str()); + } + + if (out_pe_file && keep_pe_file) { + *out_pe_file = pe_file; + } + // Conversion may fail because the file is corrupt. If a broken file is // kept in the local cache, LocateSymbolFile will not hit the network again // to attempt to locate it. To guard against problems like this, the // symbol file in the local cache will be removed if conversion fails. AutoDeleter pdb_deleter(pdb_file); + AutoDeleter pe_deleter(pe_file); // Be sure that it's a .pdb file, since we'll be replacing .pdb with .sym // for the converted file's name. @@ -438,19 +479,7 @@ MSSymbolServerConverter::LocateAndConvertSymbolFile( // strcasecmp is called _stricmp here. if (_stricmp(pdb_extension.c_str(), ".pdb") != 0) { fprintf(stderr, "LocateAndConvertSymbolFile: " - "LocateSymbolFile: no .pdb extension for %s %s %s %s\n", - missing.debug_file.c_str(), - missing.debug_identifier.c_str(), - missing.version.c_str(), - pdb_file.c_str()); - return LOCATE_FAILURE; - } - - // PDBSourceLineWriter wants the filename as a wstring, so convert it. - wstring pdb_file_w; - if (!WindowsStringUtils::safe_mbstowcs(pdb_file, &pdb_file_w)) { - fprintf(stderr, "LocateAndConvertSymbolFile: " - "WindowsStringUtils::safe_mbstowcs failed for %s %s %s %s\n", + "no .pdb extension for %s %s %s %s\n", missing.debug_file.c_str(), missing.debug_identifier.c_str(), missing.version.c_str(), @@ -459,15 +488,36 @@ MSSymbolServerConverter::LocateAndConvertSymbolFile( } PDBSourceLineWriter writer; - if (!writer.Open(pdb_file_w, PDBSourceLineWriter::PDB_FILE)) { - fprintf(stderr, "LocateAndConvertSymbolFile: " - "PDBSourceLineWriter::Open failed for %s %s %s %ws\n", - missing.debug_file.c_str(), - missing.debug_identifier.c_str(), - missing.version.c_str(), + wstring pe_file_w; + if (!WindowsStringUtils::safe_mbstowcs(pe_file, &pe_file_w)) { + fprintf(stderr, + "LocateAndConvertSymbolFile: " + "WindowsStringUtils::safe_mbstowcs failed for %s\n", + pe_file.c_str()); + return LOCATE_FAILURE; + } + wstring pdb_file_w; + if (!WindowsStringUtils::safe_mbstowcs(pdb_file, &pdb_file_w)) { + fprintf(stderr, + "LocateAndConvertSymbolFile: " + "WindowsStringUtils::safe_mbstowcs failed for %s\n", pdb_file_w.c_str()); return LOCATE_FAILURE; } + if (!writer.Open(pdb_file_w, PDBSourceLineWriter::PDB_FILE)) { + fprintf(stderr, + "ERROR: PDBSourceLineWriter::Open failed for %s %s %s %ws\n", + missing.debug_file.c_str(), missing.debug_identifier.c_str(), + missing.version.c_str(), pdb_file_w.c_str()); + return LOCATE_FAILURE; + } + if (!writer.SetCodeFile(pe_file_w)) { + fprintf(stderr, + "ERROR: PDBSourceLineWriter::SetCodeFile failed for %s %s %s %ws\n", + missing.debug_file.c_str(), missing.debug_identifier.c_str(), + missing.version.c_str(), pe_file_w.c_str()); + return LOCATE_FAILURE; + } *converted_symbol_file = pdb_file.substr(0, pdb_file.length() - 4) + ".sym"; @@ -514,6 +564,10 @@ MSSymbolServerConverter::LocateAndConvertSymbolFile( pdb_deleter.Release(); } + if (keep_pe_file) { + pe_deleter.Release(); + } + sym_deleter.Release(); return LOCATE_SUCCESS; diff --git a/toolkit/crashreporter/google-breakpad/src/tools/windows/converter/ms_symbol_server_converter.gyp b/toolkit/crashreporter/google-breakpad/src/tools/windows/converter/ms_symbol_server_converter.gyp new file mode 100644 index 000000000000..57ec790686f1 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/tools/windows/converter/ms_symbol_server_converter.gyp @@ -0,0 +1,46 @@ +# Copyright 2013 Google Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +{ + 'includes': [ + '../../../build/common.gypi', + ], + 'targets': [ + { + 'target_name': 'ms_symbol_server_converter', + 'type': 'static_library', + 'msvs_guid': '1463C4CD-23FC-4DE9-BFDE-283338200157', + 'sources': [ + 'ms_symbol_server_converter.cc', + ], + 'dependencies': [ + '../../../common/windows/common_windows.gyp:common_windows_lib', + ], + }, + ], +} diff --git a/toolkit/crashreporter/google-breakpad/src/tools/windows/converter/ms_symbol_server_converter.h b/toolkit/crashreporter/google-breakpad/src/tools/windows/converter/ms_symbol_server_converter.h index bc1fc015cf97..d601b4333c1b 100644 --- a/toolkit/crashreporter/google-breakpad/src/tools/windows/converter/ms_symbol_server_converter.h +++ b/toolkit/crashreporter/google-breakpad/src/tools/windows/converter/ms_symbol_server_converter.h @@ -55,16 +55,15 @@ // attempting to load symbols from their server (.reload). // // This code has been tested with dbghelp.dll 6.5.3.7 and symsrv.dll 6.5.3.8, -// included with Microsoft Visual Studio 8 in Common7/IDE. This has also -// been tested with dbghelp.dll and symsrv.dll 6.6.7.5, included with that -// version of Debugging Tools for Windows, available at +// included with Microsoft Visual Studio 8 in Common7/IDE. This has also been +// tested with dbghelp.dll and symsrv.dll versions 6.6.7.5 and 6.12.2.633, +// included with the same versions of Debugging Tools for Windows, available at // http://www.microsoft.com/whdc/devtools/debugging/ . // // Author: Mark Mentovai - -#ifndef MS_SYMBOL_SERVER_CONVERTER_H__ -#define MS_SYMBOL_SERVER_CONVERTER_H__ +#ifndef TOOLS_WINDOWS_MS_SYMBOL_SERVER_CONVERTER_H_ +#define TOOLS_WINDOWS_MS_SYMBOL_SERVER_CONVERTER_H_ #include @@ -145,6 +144,13 @@ class MSSymbolServerConverter { MSSymbolServerConverter(const string &local_cache, const vector &symbol_servers); + // Locates the PE file (DLL or EXE) specified by the identifying information + // in |missing|, by checking the symbol stores identified when the object + // was created. When returning LOCATE_SUCCESS, pe_file is set to + // the pathname of the decompressed PE file as it is stored in the + // local cache. + LocateResult LocatePEFile(const MissingSymbolInfo &missing, string *pe_file); + // Locates the symbol file specified by the identifying information in // |missing|, by checking the symbol stores identified when the object // was created. When returning LOCATE_SUCCESS, symbol_file is set to @@ -159,16 +165,28 @@ class MSSymbolServerConverter { // value of LocateSymbolFile, or if LocateSymbolFile succeeds but // conversion fails, returns LOCATE_FAILURE. The pathname to the // pdb file and to the converted symbol file are returned in - // converted_symbol_file and symbol_file. symbol_file is optional and - // may be NULL. If only the converted symbol file is desired, set - // keep_symbol_file to false to indicate that the original symbol file - // (pdb) should be deleted after conversion. + // |converted_symbol_file|, |symbol_file|, and |pe_file|. |symbol_file| and + // |pe_file| are optional and may be NULL. If only the converted symbol file + // is desired, set |keep_symbol_file| and |keep_pe_file| to false to indicate + // that the original symbol file (pdb) and executable file (exe, dll) should + // be deleted after conversion. LocateResult LocateAndConvertSymbolFile(const MissingSymbolInfo &missing, bool keep_symbol_file, + bool keep_pe_file, string *converted_symbol_file, - string *symbol_file); + string *symbol_file, + string *pe_file); private: + // Locates the PDB or PE file (DLL or EXE) specified by the identifying + // information in |debug_or_code_file| and |debug_or_code_id|, by checking + // the symbol stores identified when the object was created. When + // returning LOCATE_SUCCESS, file_name is set to the pathname of the + // decompressed PDB or PE file file as it is stored in the local cache. + LocateResult LocateFile(const string &debug_or_code_file, + const string &debug_or_code_id, + const string &version, string *file_name); + // Called by various SymSrv functions to report status as progress is made // and to allow the callback to influence processing. Messages sent to this // callback can be used to distinguish between the various failure modes @@ -181,7 +199,7 @@ class MSSymbolServerConverter { // SymFindFileInPath actually seems to accept NULL for a callback function // and behave properly for our needs in that case, but the documentation // doesn't mention it, so this little callback is provided. - static BOOL CALLBACK SymFindFileInPathCallback(char *filename, + static BOOL CALLBACK SymFindFileInPathCallback(const char *filename, void *context); // The search path used by SymSrv, built based on the arguments to the @@ -198,4 +216,4 @@ class MSSymbolServerConverter { } // namespace google_breakpad -#endif // MS_SYMBOL_SERVER_CONVERTER_H__ +#endif // TOOLS_WINDOWS_MS_SYMBOL_SERVER_CONVERTER_H_ diff --git a/toolkit/crashreporter/google-breakpad/src/tools/windows/converter/ms_symbol_server_converter.vcproj b/toolkit/crashreporter/google-breakpad/src/tools/windows/converter/ms_symbol_server_converter.vcproj index 6a72ec032370..ee1263a14754 100644 --- a/toolkit/crashreporter/google-breakpad/src/tools/windows/converter/ms_symbol_server_converter.vcproj +++ b/toolkit/crashreporter/google-breakpad/src/tools/windows/converter/ms_symbol_server_converter.vcproj @@ -1,319 +1,368 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + Debug + Win32 + + + Debug + x64 + + + Purify + Win32 + + + Purify + x64 + + + Release + Win32 + + + Release + x64 + + + + {1463C4CD-23FC-4DE9-BFDE-283338200157} + Win32Proj + ms_symbol_server_converter + true + + + + Unicode + StaticLibrary + + + + + + + + + $(ExecutablePath);$(MSBuildProjectDirectory)\..\..\..\third_party\cygwin\bin\;$(MSBuildProjectDirectory)\..\..\..\third_party\python_26\ + $(SolutionDir)$(Configuration)\ + $(OutDir)obj\$(ProjectName)\ + false + false + false + false + true + true + $(ProjectName) + $(OutDir)lib\$(ProjectName)$(TargetExt) + + + + ..\..\..;$(VSInstallDir)\DIA SDK\include;..\..\..\third_party\platformsdk_win7\files\Include;$(VSInstallDir)\VC\atlmfc\include;%(AdditionalIncludeDirectories) + /MP %(AdditionalOptions) + EnableFastChecks + true + ProgramDatabase + 4100;4127;4396;4503;4512;4819;4995;4702;4800;%(DisableSpecificWarnings) + false + true + false + Disabled + _DEBUG;_WIN32_WINNT=0x0600;WINVER=0x0600;WIN32;_WINDOWS;_HAS_EXCEPTIONS=0;NOMINMAX;_CRT_RAND_S;CERT_CHAIN_PARA_HAS_EXTRA_FIELDS;WIN32_LEAN_AND_MEAN;_SECURE_ATL;CHROMIUM_BUILD;TOOLKIT_VIEWS=1;ENABLE_GPU=1;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions) + MultiThreadedDebug + false + true + Level4 + + + ../../../third_party/platformsdk_win7/files/Lib;%(AdditionalLibraryDirectories) + /ignore:4221 %(AdditionalOptions) + $(OutDir)lib\$(ProjectName)$(TargetExt) + + + wininet.lib;version.lib;msimg32.lib;ws2_32.lib;usp10.lib;psapi.lib;dbghelp.lib;$(VSInstallDir)\DIA SDK\lib\diaguids.lib;imagehlp.lib + ../../../third_party/platformsdk_win7/files/Lib;%(AdditionalLibraryDirectories) + /safeseh /dynamicbase /ignore:4199 /ignore:4221 /nxcompat %(AdditionalOptions) + dbghelp.dll;dwmapi.dll;uxtheme.dll;%(DelayLoadDLLs) + false + true + $(OutDir)lib\$(TargetName).lib + $(OutDir)$(TargetName).map + Console + MachineX86 + + + dlldata.c + true + %(Filename).h + %(Filename)_i.c + $(IntDir) + %(Filename)_p.c + %(Filename).tlb + + + ../../..;..\..\..;$(VSInstallDir)\DIA SDK\include;..\..\..\third_party\platformsdk_win7\files\Include;$(VSInstallDir)\VC\atlmfc\include;%(AdditionalIncludeDirectories) + 0x0409 + _DEBUG;_WIN32_WINNT=0x0600;WINVER=0x0600;WIN32;_WINDOWS;_HAS_EXCEPTIONS=0;NOMINMAX;_CRT_RAND_S;CERT_CHAIN_PARA_HAS_EXTRA_FIELDS;WIN32_LEAN_AND_MEAN;_SECURE_ATL;CHROMIUM_BUILD;TOOLKIT_VIEWS=1;ENABLE_GPU=1;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions) + + + + + ..\..\..;$(VSInstallDir)\DIA SDK\include;..\..\..\third_party\platformsdk_win7\files\Include;$(VSInstallDir)\VC\atlmfc\include;%(AdditionalIncludeDirectories) + /MP %(AdditionalOptions) + EnableFastChecks + true + ProgramDatabase + 4100;4127;4396;4503;4512;4819;4995;4702;4800;%(DisableSpecificWarnings) + false + true + false + Disabled + _DEBUG;_WIN32_WINNT=0x0600;WINVER=0x0600;WIN32;_WINDOWS;_HAS_EXCEPTIONS=0;NOMINMAX;_CRT_RAND_S;CERT_CHAIN_PARA_HAS_EXTRA_FIELDS;WIN32_LEAN_AND_MEAN;_SECURE_ATL;CHROMIUM_BUILD;TOOLKIT_VIEWS=1;ENABLE_GPU=1;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;NO_TCMALLOC;%(PreprocessorDefinitions) + MultiThreadedDebug + false + true + Level4 + + + ../../../third_party/platformsdk_win7/files/Lib/x64;%(AdditionalLibraryDirectories) + /ignore:4221 %(AdditionalOptions) + $(OutDir)lib\$(ProjectName)$(TargetExt) + + + wininet.lib;version.lib;msimg32.lib;ws2_32.lib;usp10.lib;psapi.lib;dbghelp.lib;$(VSInstallDir)\DIA SDK\lib\diaguids.lib;imagehlp.lib + ../../../third_party/platformsdk_win7/files/Lib/x64;%(AdditionalLibraryDirectories) + /dynamicbase /ignore:4199 /ignore:4221 /nxcompat %(AdditionalOptions) + dbghelp.dll;dwmapi.dll;uxtheme.dll;%(DelayLoadDLLs) + false + true + $(OutDir)lib\$(TargetName).lib + $(OutDir)$(TargetName).map + Console + MachineX64 + + + dlldata.c + true + %(Filename).h + %(Filename)_i.c + $(IntDir) + %(Filename)_p.c + %(Filename).tlb + + + ../../..;..\..\..;$(VSInstallDir)\DIA SDK\include;..\..\..\third_party\platformsdk_win7\files\Include;$(VSInstallDir)\VC\atlmfc\include;%(AdditionalIncludeDirectories) + 0x0409 + _DEBUG;_WIN32_WINNT=0x0600;WINVER=0x0600;WIN32;_WINDOWS;_HAS_EXCEPTIONS=0;NOMINMAX;_CRT_RAND_S;CERT_CHAIN_PARA_HAS_EXTRA_FIELDS;WIN32_LEAN_AND_MEAN;_SECURE_ATL;CHROMIUM_BUILD;TOOLKIT_VIEWS=1;ENABLE_GPU=1;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;NO_TCMALLOC;%(PreprocessorDefinitions) + + + + + ..\..\..;$(VSInstallDir)\DIA SDK\include;..\..\..\third_party\platformsdk_win7\files\Include;$(VSInstallDir)\VC\atlmfc\include;%(AdditionalIncludeDirectories) + /MP %(AdditionalOptions) + true + ProgramDatabase + 4100;4127;4396;4503;4512;4819;4995;4702;4800;%(DisableSpecificWarnings) + false + true + false + MaxSpeed + _WIN32_WINNT=0x0600;WINVER=0x0600;WIN32;_WINDOWS;_HAS_EXCEPTIONS=0;NOMINMAX;_CRT_RAND_S;CERT_CHAIN_PARA_HAS_EXTRA_FIELDS;WIN32_LEAN_AND_MEAN;_SECURE_ATL;CHROMIUM_BUILD;TOOLKIT_VIEWS=1;ENABLE_GPU=1;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;NDEBUG;NVALGRIND;%(PreprocessorDefinitions) + MultiThreaded + false + true + Level4 + + + ../../../third_party/platformsdk_win7/files/Lib;%(AdditionalLibraryDirectories) + /ignore:4221 %(AdditionalOptions) + $(OutDir)lib\$(ProjectName)$(TargetExt) + + + wininet.lib;version.lib;msimg32.lib;ws2_32.lib;usp10.lib;psapi.lib;dbghelp.lib;$(VSInstallDir)\DIA SDK\lib\diaguids.lib;imagehlp.lib + ../../../third_party/platformsdk_win7/files/Lib;%(AdditionalLibraryDirectories) + /safeseh /dynamicbase /ignore:4199 /ignore:4221 /nxcompat %(AdditionalOptions) + dbghelp.dll;dwmapi.dll;uxtheme.dll;%(DelayLoadDLLs) + false + true + $(OutDir)lib\$(TargetName).lib + $(OutDir)$(TargetName).map + Console + MachineX86 + + + dlldata.c + true + %(Filename).h + %(Filename)_i.c + $(IntDir) + %(Filename)_p.c + %(Filename).tlb + + + ../../..;..\..\..;$(VSInstallDir)\DIA SDK\include;..\..\..\third_party\platformsdk_win7\files\Include;$(VSInstallDir)\VC\atlmfc\include;%(AdditionalIncludeDirectories) + 0x0409 + _WIN32_WINNT=0x0600;WINVER=0x0600;WIN32;_WINDOWS;_HAS_EXCEPTIONS=0;NOMINMAX;_CRT_RAND_S;CERT_CHAIN_PARA_HAS_EXTRA_FIELDS;WIN32_LEAN_AND_MEAN;_SECURE_ATL;CHROMIUM_BUILD;TOOLKIT_VIEWS=1;ENABLE_GPU=1;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;NDEBUG;NVALGRIND;%(PreprocessorDefinitions);%(PreprocessorDefinitions) + + + + + ..\..\..;$(VSInstallDir)\DIA SDK\include;..\..\..\third_party\platformsdk_win7\files\Include;$(VSInstallDir)\VC\atlmfc\include;%(AdditionalIncludeDirectories) + /MP %(AdditionalOptions) + false + ProgramDatabase + 4100;4127;4396;4503;4512;4819;4995;4702;4800;%(DisableSpecificWarnings) + false + true + false + Disabled + _WIN32_WINNT=0x0600;WINVER=0x0600;WIN32;_WINDOWS;_HAS_EXCEPTIONS=0;NOMINMAX;_CRT_RAND_S;CERT_CHAIN_PARA_HAS_EXTRA_FIELDS;WIN32_LEAN_AND_MEAN;_SECURE_ATL;CHROMIUM_BUILD;TOOLKIT_VIEWS=1;ENABLE_GPU=1;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;NO_TCMALLOC;NDEBUG;NVALGRIND;PURIFY;%(PreprocessorDefinitions) + MultiThreaded + false + true + Level4 + + + ../../../third_party/platformsdk_win7/files/Lib/x64;%(AdditionalLibraryDirectories) + /ignore:4221 %(AdditionalOptions) + $(OutDir)lib\$(ProjectName)$(TargetExt) + + + wininet.lib;version.lib;msimg32.lib;ws2_32.lib;usp10.lib;psapi.lib;dbghelp.lib;$(VSInstallDir)\DIA SDK\lib\diaguids.lib;imagehlp.lib + ../../../third_party/platformsdk_win7/files/Lib/x64;%(AdditionalLibraryDirectories) + /dynamicbase /ignore:4199 /ignore:4221 /nxcompat %(AdditionalOptions) + dbghelp.dll;dwmapi.dll;uxtheme.dll;%(DelayLoadDLLs) + false + false + true + $(OutDir)lib\$(TargetName).lib + $(OutDir)$(TargetName).map + Console + MachineX64 + + + dlldata.c + true + %(Filename).h + %(Filename)_i.c + $(IntDir) + %(Filename)_p.c + %(Filename).tlb + + + ../../..;..\..\..;$(VSInstallDir)\DIA SDK\include;..\..\..\third_party\platformsdk_win7\files\Include;$(VSInstallDir)\VC\atlmfc\include;%(AdditionalIncludeDirectories) + 0x0409 + _WIN32_WINNT=0x0600;WINVER=0x0600;WIN32;_WINDOWS;_HAS_EXCEPTIONS=0;NOMINMAX;_CRT_RAND_S;CERT_CHAIN_PARA_HAS_EXTRA_FIELDS;WIN32_LEAN_AND_MEAN;_SECURE_ATL;CHROMIUM_BUILD;TOOLKIT_VIEWS=1;ENABLE_GPU=1;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;NO_TCMALLOC;NDEBUG;NVALGRIND;PURIFY;%(PreprocessorDefinitions);%(PreprocessorDefinitions) + + + + + ..\..\..;$(VSInstallDir)\DIA SDK\include;..\..\..\third_party\platformsdk_win7\files\Include;$(VSInstallDir)\VC\atlmfc\include;%(AdditionalIncludeDirectories) + /MP %(AdditionalOptions) + true + ProgramDatabase + 4100;4127;4396;4503;4512;4819;4995;4702;4800;%(DisableSpecificWarnings) + false + true + false + true + MaxSpeed + _WIN32_WINNT=0x0600;WINVER=0x0600;WIN32;_WINDOWS;_HAS_EXCEPTIONS=0;NOMINMAX;_CRT_RAND_S;CERT_CHAIN_PARA_HAS_EXTRA_FIELDS;WIN32_LEAN_AND_MEAN;_SECURE_ATL;CHROMIUM_BUILD;TOOLKIT_VIEWS=1;ENABLE_GPU=1;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;NDEBUG;NVALGRIND;%(PreprocessorDefinitions) + MultiThreaded + false + true + true + Level4 + + + ../../../third_party/platformsdk_win7/files/Lib;%(AdditionalLibraryDirectories) + /ignore:4221 %(AdditionalOptions) + $(OutDir)lib\$(ProjectName)$(TargetExt) + + + wininet.lib;version.lib;msimg32.lib;ws2_32.lib;usp10.lib;psapi.lib;dbghelp.lib;$(VSInstallDir)\DIA SDK\lib\diaguids.lib;imagehlp.lib + ../../../third_party/platformsdk_win7/files/Lib;%(AdditionalLibraryDirectories) + /safeseh /dynamicbase /ignore:4199 /ignore:4221 /nxcompat %(AdditionalOptions) + dbghelp.dll;dwmapi.dll;uxtheme.dll;%(DelayLoadDLLs) + true + false + true + $(OutDir)lib\$(TargetName).lib + $(OutDir)$(TargetName).map + true + Console + MachineX86 + + + dlldata.c + true + %(Filename).h + %(Filename)_i.c + $(IntDir) + %(Filename)_p.c + %(Filename).tlb + + + ../../..;..\..\..;$(VSInstallDir)\DIA SDK\include;..\..\..\third_party\platformsdk_win7\files\Include;$(VSInstallDir)\VC\atlmfc\include;%(AdditionalIncludeDirectories) + 0x0409 + _WIN32_WINNT=0x0600;WINVER=0x0600;WIN32;_WINDOWS;_HAS_EXCEPTIONS=0;NOMINMAX;_CRT_RAND_S;CERT_CHAIN_PARA_HAS_EXTRA_FIELDS;WIN32_LEAN_AND_MEAN;_SECURE_ATL;CHROMIUM_BUILD;TOOLKIT_VIEWS=1;ENABLE_GPU=1;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;NDEBUG;NVALGRIND;%(PreprocessorDefinitions);%(PreprocessorDefinitions) + + + + + ..\..\..;$(VSInstallDir)\DIA SDK\include;..\..\..\third_party\platformsdk_win7\files\Include;$(VSInstallDir)\VC\atlmfc\include;%(AdditionalIncludeDirectories) + /MP %(AdditionalOptions) + true + ProgramDatabase + 4100;4127;4396;4503;4512;4819;4995;4702;4800;%(DisableSpecificWarnings) + false + true + false + MaxSpeed + _WIN32_WINNT=0x0600;WINVER=0x0600;WIN32;_WINDOWS;_HAS_EXCEPTIONS=0;NOMINMAX;_CRT_RAND_S;CERT_CHAIN_PARA_HAS_EXTRA_FIELDS;WIN32_LEAN_AND_MEAN;_SECURE_ATL;CHROMIUM_BUILD;TOOLKIT_VIEWS=1;ENABLE_GPU=1;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;NO_TCMALLOC;NDEBUG;NVALGRIND;%(PreprocessorDefinitions) + MultiThreaded + false + true + Level4 + + + ../../../third_party/platformsdk_win7/files/Lib/x64;%(AdditionalLibraryDirectories) + /ignore:4221 %(AdditionalOptions) + $(OutDir)lib\$(ProjectName)$(TargetExt) + + + wininet.lib;version.lib;msimg32.lib;ws2_32.lib;usp10.lib;psapi.lib;dbghelp.lib;$(VSInstallDir)\DIA SDK\lib\diaguids.lib;imagehlp.lib + ../../../third_party/platformsdk_win7/files/Lib/x64;%(AdditionalLibraryDirectories) + /dynamicbase /ignore:4199 /ignore:4221 /nxcompat %(AdditionalOptions) + dbghelp.dll;dwmapi.dll;uxtheme.dll;%(DelayLoadDLLs) + false + true + $(OutDir)lib\$(TargetName).lib + $(OutDir)$(TargetName).map + Console + MachineX64 + + + dlldata.c + true + %(Filename).h + %(Filename)_i.c + $(IntDir) + %(Filename)_p.c + %(Filename).tlb + + + ../../..;..\..\..;$(VSInstallDir)\DIA SDK\include;..\..\..\third_party\platformsdk_win7\files\Include;$(VSInstallDir)\VC\atlmfc\include;%(AdditionalIncludeDirectories) + 0x0409 + _WIN32_WINNT=0x0600;WINVER=0x0600;WIN32;_WINDOWS;_HAS_EXCEPTIONS=0;NOMINMAX;_CRT_RAND_S;CERT_CHAIN_PARA_HAS_EXTRA_FIELDS;WIN32_LEAN_AND_MEAN;_SECURE_ATL;CHROMIUM_BUILD;TOOLKIT_VIEWS=1;ENABLE_GPU=1;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;NO_TCMALLOC;NDEBUG;NVALGRIND;%(PreprocessorDefinitions);%(PreprocessorDefinitions) + + + + + + + + + + + diff --git a/toolkit/crashreporter/google-breakpad/src/tools/windows/dump_syms/dump_syms.gyp b/toolkit/crashreporter/google-breakpad/src/tools/windows/dump_syms/dump_syms.gyp new file mode 100644 index 000000000000..b815574b2935 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/tools/windows/dump_syms/dump_syms.gyp @@ -0,0 +1,64 @@ +# Copyright 2013 Google Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +{ + 'includes': [ + '../../../build/common.gypi', + ], + 'targets': [ + { + 'target_name': 'dump_syms', + 'type': 'executable', + 'sources': [ + 'dump_syms.cc', + ], + 'dependencies': [ + '../../../common/windows/common_windows.gyp:common_windows_lib', + ], + }, + { + 'target_name': 'dump_syms_unittest', + 'type': 'executable', + 'sources': [ + 'dump_syms_unittest.cc', + ], + 'dependencies': [ + '<(DEPTH)/client/windows/unittests/testing.gyp:gmock', + '<(DEPTH)/client/windows/unittests/testing.gyp:gtest', + 'dump_syms', + ], + 'msvs_settings': { + 'VCLinkerTool': { + 'AdditionalDependencies': [ + 'shell32.lib', + ], + }, + }, + }, + ], +} diff --git a/toolkit/crashreporter/google-breakpad/src/tools/windows/dump_syms/dump_syms.vcproj b/toolkit/crashreporter/google-breakpad/src/tools/windows/dump_syms/dump_syms.vcproj index 650c1b1b25c0..2fbe301ed8b4 100644 --- a/toolkit/crashreporter/google-breakpad/src/tools/windows/dump_syms/dump_syms.vcproj +++ b/toolkit/crashreporter/google-breakpad/src/tools/windows/dump_syms/dump_syms.vcproj @@ -175,10 +175,22 @@ Filter="h;hpp;hxx;hm;inl;inc;xsd" UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" > + + + + + + @@ -199,6 +211,10 @@ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" > + + @@ -207,6 +223,10 @@ RelativePath="..\..\..\common\windows\guid_string.cc" > + + @@ -219,4 +239,4 @@ - + \ No newline at end of file diff --git a/toolkit/crashreporter/google-breakpad/src/tools/windows/dump_syms/dump_syms_unittest.cc b/toolkit/crashreporter/google-breakpad/src/tools/windows/dump_syms/dump_syms_unittest.cc new file mode 100644 index 000000000000..61f84431ede4 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/tools/windows/dump_syms/dump_syms_unittest.cc @@ -0,0 +1,204 @@ +// Copyright 2003 Google Inc. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include +#include + +#include +#include + +#include "gmock/gmock.h" +#include "gtest/gtest.h" + +namespace tools { +namespace windows { +namespace dump_syms { + +namespace { + +// Root names of PDB and dumped symbol files to be regression tested. These are +// specified in complexity of the resulting dumped symbol files. +const wchar_t* kRootNames[] = { + // A PDB file with no OMAP data. + L"dump_syms_regtest", + // A PDB file with OMAP data for an image that has been function-level + // reordered. + L"omap_reorder_funcs", + // A PDB file with OMAP data for an image that had new content injected, all + // of it with source data. + L"omap_stretched_filled", + // A PDB file with OMAP data for an image that had new content injected, but + // without source data. + L"omap_stretched", + // A PDB file with OMAP data for an image that has been basic block reordered. + L"omap_reorder_bbs", + // A 64bit PDB file with no OMAP data. + L"dump_syms_regtest64", +}; + +void TrimLastComponent(const std::wstring& path, + std::wstring* trimmed, + std::wstring* component) { + size_t len = path.size(); + while (len > 0 && path[len - 1] != '\\') + --len; + + if (component != NULL) + component->assign(path.c_str() + len, path.c_str() + path.size()); + + while (len > 0 && path[len - 1] == '\\') + --len; + + if (trimmed != NULL) + trimmed->assign(path.c_str(), len); +} + +// Get the directory of the current executable. +bool GetSelfDirectory(std::wstring* self_dir) { + std::wstring command_line = GetCommandLineW(); + + int num_args = 0; + wchar_t** args = NULL; + args = ::CommandLineToArgvW(command_line.c_str(), &num_args); + if (args == NULL) + return false; + + *self_dir = args[0]; + TrimLastComponent(*self_dir, self_dir, NULL); + + return true; +} + +void RunCommand(const std::wstring& command_line, + std::string* stdout_string) { + // Create a PIPE for the child process stdout. + HANDLE child_stdout_read = 0; + HANDLE child_stdout_write = 0; + SECURITY_ATTRIBUTES sec_attr_stdout = {}; + sec_attr_stdout.nLength = sizeof(sec_attr_stdout); + sec_attr_stdout.bInheritHandle = TRUE; + ASSERT_TRUE(::CreatePipe(&child_stdout_read, &child_stdout_write, + &sec_attr_stdout, 0)); + ASSERT_TRUE(::SetHandleInformation(child_stdout_read, HANDLE_FLAG_INHERIT, + 0)); + + // Create a PIPE for the child process stdin. + HANDLE child_stdin_read = 0; + HANDLE child_stdin_write = 0; + SECURITY_ATTRIBUTES sec_attr_stdin = {}; + sec_attr_stdin.nLength = sizeof(sec_attr_stdin); + sec_attr_stdin.bInheritHandle = TRUE; + ASSERT_TRUE(::CreatePipe(&child_stdin_read, &child_stdin_write, + &sec_attr_stdin, 0)); + ASSERT_TRUE(::SetHandleInformation(child_stdin_write, HANDLE_FLAG_INHERIT, + 0)); + + // Startup the child. + STARTUPINFO startup_info = {}; + PROCESS_INFORMATION process_info = {}; + startup_info.cb = sizeof(STARTUPINFO); + startup_info.hStdError = child_stdout_write; + startup_info.hStdInput = child_stdin_read; + startup_info.hStdOutput = child_stdout_write; + startup_info.dwFlags = STARTF_USESTDHANDLES; + ASSERT_TRUE(::CreateProcessW(NULL, (LPWSTR)command_line.c_str(), NULL, NULL, + TRUE, 0, NULL, NULL, + &startup_info, &process_info)); + + // Collect the output. + ASSERT_TRUE(::CloseHandle(child_stdout_write)); + char buffer[4096] = {}; + DWORD bytes_read = 0; + while (::ReadFile(child_stdout_read, buffer, sizeof(buffer), &bytes_read, + NULL) && bytes_read > 0) { + stdout_string->append(buffer, bytes_read); + } + + // Wait for the process to finish. + ::WaitForSingleObject(process_info.hProcess, INFINITE); + + // Shut down all of our handles. + ASSERT_TRUE(::CloseHandle(process_info.hThread)); + ASSERT_TRUE(::CloseHandle(process_info.hProcess)); + ASSERT_TRUE(::CloseHandle(child_stdin_write)); + ASSERT_TRUE(::CloseHandle(child_stdin_read)); + ASSERT_TRUE(::CloseHandle(child_stdout_read)); +} + +void GetFileContents(const std::wstring& path, std::string* content) { + FILE* f = ::_wfopen(path.c_str(), L"rb"); + ASSERT_TRUE(f != NULL); + + char buffer[4096] = {}; + while (true) { + size_t bytes_read = ::fread(buffer, 1, sizeof(buffer), f); + if (bytes_read == 0) + break; + content->append(buffer, bytes_read); + } +} + +class DumpSymsRegressionTest : public testing::Test { + public: + virtual void SetUp() { + std::wstring self_dir; + ASSERT_TRUE(GetSelfDirectory(&self_dir)); + dump_syms_exe = self_dir + L"\\dump_syms.exe"; + + TrimLastComponent(self_dir, &testdata_dir, NULL); + testdata_dir += L"\\testdata"; + } + + std::wstring dump_syms_exe; + std::wstring testdata_dir; +}; + +} //namespace + +TEST_F(DumpSymsRegressionTest, EnsureDumpedSymbolsMatch) { + for (size_t i = 0; i < sizeof(kRootNames) / sizeof(kRootNames[0]); ++i) { + const wchar_t* root_name = kRootNames[i]; + std::wstring root_path = testdata_dir + L"\\" + root_name; + + std::wstring sym_path = root_path + L".sym"; + std::string expected_symbols; + ASSERT_NO_FATAL_FAILURE(GetFileContents(sym_path, &expected_symbols)); + + std::wstring pdb_path = root_path + L".pdb"; + std::wstring command_line = L"\"" + dump_syms_exe + L"\" \"" + + pdb_path + L"\""; + std::string symbols; + ASSERT_NO_FATAL_FAILURE(RunCommand(command_line, &symbols)); + + EXPECT_EQ(expected_symbols, symbols); + } +} + +} // namespace dump_syms +} // namespace windows +} // namespace tools \ No newline at end of file diff --git a/toolkit/crashreporter/google-breakpad/src/tools/windows/dump_syms/testdata/dump_syms_regtest.pdb b/toolkit/crashreporter/google-breakpad/src/tools/windows/dump_syms/testdata/dump_syms_regtest.pdb deleted file mode 100644 index bb3e14efb734..000000000000 Binary files a/toolkit/crashreporter/google-breakpad/src/tools/windows/dump_syms/testdata/dump_syms_regtest.pdb and /dev/null differ diff --git a/toolkit/crashreporter/google-breakpad/src/tools/windows/dump_syms/testdata/dump_syms_regtest.sym b/toolkit/crashreporter/google-breakpad/src/tools/windows/dump_syms/testdata/dump_syms_regtest.sym deleted file mode 100644 index 8e5ce026aad4..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/tools/windows/dump_syms/testdata/dump_syms_regtest.sym +++ /dev/null @@ -1,14097 +0,0 @@ -MODULE windows x86 3EB931A9CE0242ABB14FFDF4ECAA97FC1 dump_syms_regtest.pdb -FILE 1 c:\breakpad\trunk\src\tools\windows\dump_syms\testdata\dump_syms_regtest.cc -FILE 2 f:\sp\public\sdk\inc\reason.h -FILE 3 f:\sp\public\sdk\inc\wincon.h -FILE 4 f:\sp\public\sdk\inc\pshpack2.h -FILE 5 f:\sp\public\sdk\inc\mcx.h -FILE 6 f:\sp\public\sdk\inc\winuser.h -FILE 7 f:\sp\public\sdk\inc\winnls.h -FILE 8 f:\sp\public\sdk\inc\guiddef.h -FILE 9 f:\sp\public\sdk\inc\specstrings.h -FILE 10 f:\sp\public\sdk\inc\basetsd.h -FILE 11 f:\sp\public\sdk\inc\stralign.h -FILE 12 f:\sp\public\sdk\inc\tvout.h -FILE 13 f:\sp\public\sdk\inc\winsvc.h -FILE 14 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 15 f:\sp\public\sdk\inc\wingdi.h -FILE 16 f:\sp\public\sdk\inc\pshpack4.h -FILE 17 f:\sp\public\sdk\inc\poppack.h -FILE 18 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sect_attribs.h -FILE 19 f:\sp\public\sdk\inc\winnetwk.h -FILE 20 f:\sp\public\sdk\inc\imm.h -FILE 21 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 22 f:\sp\public\sdk\inc\windef.h -FILE 23 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h -FILE 24 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\tran\i386\cpu_disp.c -FILE 25 f:\sp\public\sdk\inc\pshpack1.h -FILE 26 f:\sp\public\sdk\inc\winver.h -FILE 27 f:\sp\public\sdk\inc\windows.h -FILE 28 f:\sp\public\sdk\inc\winnt.h -FILE 29 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 30 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 31 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 32 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 33 f:\sp\public\sdk\inc\ddbanned.h -FILE 34 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 35 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 36 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\errno.h -FILE 37 f:\sp\public\sdk\inc\winreg.h -FILE 38 f:\sp\public\sdk\inc\winbase.h -FILE 39 f:\sp\public\sdk\inc\winerror.h -FILE 40 f:\sp\public\sdk\inc\pshpack8.h -FILE 41 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\internal.h -FILE 42 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 43 f:\sp\public\sdk\inc\reason.h -FILE 44 f:\sp\public\sdk\inc\wincon.h -FILE 45 f:\sp\public\sdk\inc\pshpack2.h -FILE 46 f:\sp\public\sdk\inc\mcx.h -FILE 47 f:\sp\public\sdk\inc\winuser.h -FILE 48 f:\sp\public\sdk\inc\winnls.h -FILE 49 f:\sp\public\sdk\inc\guiddef.h -FILE 50 f:\sp\public\sdk\inc\specstrings.h -FILE 51 f:\sp\public\sdk\inc\basetsd.h -FILE 52 f:\sp\public\sdk\inc\stralign.h -FILE 53 f:\sp\public\sdk\inc\tvout.h -FILE 54 f:\sp\public\sdk\inc\winsvc.h -FILE 55 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 56 f:\sp\public\sdk\inc\wingdi.h -FILE 57 f:\sp\public\sdk\inc\pshpack4.h -FILE 58 f:\sp\public\sdk\inc\poppack.h -FILE 59 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sect_attribs.h -FILE 60 f:\sp\public\sdk\inc\winnetwk.h -FILE 61 f:\sp\public\sdk\inc\imm.h -FILE 62 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 63 f:\sp\public\sdk\inc\windef.h -FILE 64 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h -FILE 65 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\tran\i386\mathfcns.c -FILE 66 f:\sp\public\sdk\inc\pshpack1.h -FILE 67 f:\sp\public\sdk\inc\winver.h -FILE 68 f:\sp\public\sdk\inc\windows.h -FILE 69 f:\sp\public\sdk\inc\winnt.h -FILE 70 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 71 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 72 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 73 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 74 f:\sp\public\sdk\inc\ddbanned.h -FILE 75 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 76 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 77 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\errno.h -FILE 78 f:\sp\public\sdk\inc\winreg.h -FILE 79 f:\sp\public\sdk\inc\winbase.h -FILE 80 f:\sp\public\sdk\inc\winerror.h -FILE 81 f:\sp\public\sdk\inc\pshpack8.h -FILE 82 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\internal.h -FILE 83 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 84 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 85 f:\sp\public\sdk\inc\winreg.h -FILE 86 f:\sp\public\sdk\inc\winbase.h -FILE 87 f:\sp\public\sdk\inc\winerror.h -FILE 88 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 89 f:\sp\public\sdk\inc\windef.h -FILE 90 f:\sp\vctools\crt_bld\self_x86\crt\src\ctime.h -FILE 91 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 92 f:\sp\vctools\crt_bld\self_x86\crt\src\time.h -FILE 93 f:\sp\public\sdk\inc\pshpack8.h -FILE 94 f:\sp\public\sdk\inc\reason.h -FILE 95 f:\sp\public\sdk\inc\wincon.h -FILE 96 f:\sp\vctools\crt_bld\self_x86\crt\src\time.inl -FILE 97 f:\sp\public\sdk\inc\pshpack2.h -FILE 98 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 99 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 100 f:\sp\public\sdk\inc\mcx.h -FILE 101 f:\sp\public\sdk\inc\winuser.h -FILE 102 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 103 f:\sp\public\sdk\inc\winnls.h -FILE 104 f:\sp\public\sdk\inc\guiddef.h -FILE 105 f:\sp\public\sdk\inc\stralign.h -FILE 106 f:\sp\public\sdk\inc\winnt.h -FILE 107 f:\sp\public\sdk\inc\specstrings.h -FILE 108 f:\sp\public\sdk\inc\basetsd.h -FILE 109 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 110 f:\sp\public\sdk\inc\tvout.h -FILE 111 f:\sp\public\sdk\inc\winsvc.h -FILE 112 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 113 f:\sp\public\sdk\inc\wingdi.h -FILE 114 f:\sp\vctools\crt_bld\self_x86\crt\src\tzset.c -FILE 115 f:\sp\public\sdk\inc\pshpack4.h -FILE 116 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 117 f:\sp\public\sdk\inc\poppack.h -FILE 118 f:\sp\public\sdk\inc\winnetwk.h -FILE 119 f:\sp\public\sdk\inc\imm.h -FILE 120 f:\sp\public\sdk\inc\ddbanned.h -FILE 121 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 122 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 123 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 124 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 125 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 126 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 127 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 128 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 129 f:\sp\public\sdk\inc\windows.h -FILE 130 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 131 f:\sp\public\sdk\inc\pshpack1.h -FILE 132 f:\sp\public\sdk\inc\winver.h -FILE 133 f:\sp\vctools\crt_bld\self_x86\crt\src\time.inl -FILE 134 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 135 f:\sp\public\sdk\inc\winnt.h -FILE 136 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 137 f:\sp\public\sdk\inc\winreg.h -FILE 138 f:\sp\public\sdk\inc\winbase.h -FILE 139 f:\sp\public\sdk\inc\winerror.h -FILE 140 f:\sp\public\sdk\inc\pshpack8.h -FILE 141 f:\sp\public\sdk\inc\reason.h -FILE 142 f:\sp\public\sdk\inc\wincon.h -FILE 143 f:\sp\public\sdk\inc\pshpack2.h -FILE 144 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 145 f:\sp\public\sdk\inc\mcx.h -FILE 146 f:\sp\public\sdk\inc\winuser.h -FILE 147 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 148 f:\sp\public\sdk\inc\winnls.h -FILE 149 f:\sp\public\sdk\inc\guiddef.h -FILE 150 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 151 f:\sp\public\sdk\inc\stralign.h -FILE 152 f:\sp\public\sdk\inc\specstrings.h -FILE 153 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 154 f:\sp\public\sdk\inc\basetsd.h -FILE 155 f:\sp\public\sdk\inc\windows.h -FILE 156 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 157 f:\sp\public\sdk\inc\tvout.h -FILE 158 f:\sp\public\sdk\inc\winsvc.h -FILE 159 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 160 f:\sp\public\sdk\inc\wingdi.h -FILE 161 f:\sp\vctools\crt_bld\self_x86\crt\src\timeset.c -FILE 162 f:\sp\public\sdk\inc\pshpack4.h -FILE 163 f:\sp\public\sdk\inc\poppack.h -FILE 164 f:\sp\public\sdk\inc\winnetwk.h -FILE 165 f:\sp\public\sdk\inc\imm.h -FILE 166 f:\sp\public\sdk\inc\ddbanned.h -FILE 167 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 168 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 169 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 170 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 171 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 172 f:\sp\public\sdk\inc\windef.h -FILE 173 f:\sp\public\sdk\inc\pshpack1.h -FILE 174 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 175 f:\sp\vctools\crt_bld\self_x86\crt\src\time.h -FILE 176 f:\sp\public\sdk\inc\winver.h -FILE 177 f:\sp\public\sdk\inc\wincon.h -FILE 178 f:\sp\vctools\crt_bld\self_x86\crt\src\time.h -FILE 179 f:\sp\public\sdk\inc\imm.h -FILE 180 f:\sp\public\sdk\inc\winbase.h -FILE 181 f:\sp\public\sdk\inc\wingdi.h -FILE 182 f:\sp\public\sdk\inc\winver.h -FILE 183 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 184 f:\sp\public\sdk\inc\windows.h -FILE 185 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 186 f:\sp\public\sdk\inc\pshpack2.h -FILE 187 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 188 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 189 f:\sp\public\sdk\inc\reason.h -FILE 190 f:\sp\vctools\crt_bld\self_x86\crt\src\strftime.c -FILE 191 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 192 f:\sp\public\sdk\inc\specstrings.h -FILE 193 f:\sp\public\sdk\inc\basetsd.h -FILE 194 f:\sp\public\sdk\inc\pshpack4.h -FILE 195 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 196 f:\sp\public\sdk\inc\winnetwk.h -FILE 197 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 198 f:\sp\public\sdk\inc\stralign.h -FILE 199 f:\sp\vctools\crt_bld\self_x86\crt\src\time.inl -FILE 200 f:\sp\public\sdk\inc\poppack.h -FILE 201 f:\sp\public\sdk\inc\winsvc.h -FILE 202 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 203 f:\sp\public\sdk\inc\windef.h -FILE 204 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 205 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 206 f:\sp\public\sdk\inc\winuser.h -FILE 207 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 208 f:\sp\public\sdk\inc\mcx.h -FILE 209 f:\sp\public\sdk\inc\pshpack8.h -FILE 210 f:\sp\public\sdk\inc\guiddef.h -FILE 211 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 212 f:\sp\public\sdk\inc\winnt.h -FILE 213 f:\sp\public\sdk\inc\winnls.h -FILE 214 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 215 f:\sp\public\sdk\inc\pshpack1.h -FILE 216 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 217 f:\sp\public\sdk\inc\winerror.h -FILE 218 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 219 f:\sp\public\sdk\inc\winreg.h -FILE 220 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 221 f:\sp\public\sdk\inc\ddbanned.h -FILE 222 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 223 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 224 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 225 f:\sp\public\sdk\inc\tvout.h -FILE 226 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 227 f:\sp\public\sdk\inc\poppack.h -FILE 228 f:\sp\public\sdk\inc\winnetwk.h -FILE 229 f:\sp\public\sdk\inc\imm.h -FILE 230 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 231 f:\sp\public\sdk\inc\windef.h -FILE 232 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 233 f:\sp\public\sdk\inc\pshpack1.h -FILE 234 f:\sp\public\sdk\inc\winver.h -FILE 235 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 236 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 237 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 238 f:\sp\public\sdk\inc\winnt.h -FILE 239 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 240 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 241 f:\sp\public\sdk\inc\winreg.h -FILE 242 f:\sp\vctools\crt_bld\self_x86\crt\src\days.c -FILE 243 f:\sp\public\sdk\inc\winbase.h -FILE 244 f:\sp\public\sdk\inc\winerror.h -FILE 245 f:\sp\public\sdk\inc\pshpack8.h -FILE 246 f:\sp\public\sdk\inc\reason.h -FILE 247 f:\sp\public\sdk\inc\wincon.h -FILE 248 f:\sp\public\sdk\inc\ddbanned.h -FILE 249 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 250 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 251 f:\sp\public\sdk\inc\pshpack2.h -FILE 252 f:\sp\public\sdk\inc\mcx.h -FILE 253 f:\sp\public\sdk\inc\winuser.h -FILE 254 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 255 f:\sp\public\sdk\inc\winnls.h -FILE 256 f:\sp\public\sdk\inc\guiddef.h -FILE 257 f:\sp\public\sdk\inc\windows.h -FILE 258 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 259 f:\sp\public\sdk\inc\specstrings.h -FILE 260 f:\sp\public\sdk\inc\basetsd.h -FILE 261 f:\sp\public\sdk\inc\stralign.h -FILE 262 f:\sp\public\sdk\inc\tvout.h -FILE 263 f:\sp\public\sdk\inc\winsvc.h -FILE 264 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 265 f:\sp\public\sdk\inc\wingdi.h -FILE 266 f:\sp\public\sdk\inc\pshpack4.h -FILE 267 f:\sp\public\sdk\inc\wincon.h -FILE 268 f:\sp\public\sdk\inc\imm.h -FILE 269 f:\sp\public\sdk\inc\winbase.h -FILE 270 f:\sp\public\sdk\inc\wingdi.h -FILE 271 f:\sp\public\sdk\inc\winver.h -FILE 272 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 273 f:\sp\public\sdk\inc\windows.h -FILE 274 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 275 f:\sp\public\sdk\inc\pshpack2.h -FILE 276 f:\sp\public\sdk\inc\reason.h -FILE 277 f:\sp\vctools\crt_bld\self_x86\crt\src\strnicol.c -FILE 278 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 279 f:\sp\public\sdk\inc\specstrings.h -FILE 280 f:\sp\public\sdk\inc\basetsd.h -FILE 281 f:\sp\public\sdk\inc\pshpack4.h -FILE 282 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 283 f:\sp\public\sdk\inc\winnetwk.h -FILE 284 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 285 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 286 f:\sp\public\sdk\inc\stralign.h -FILE 287 f:\sp\public\sdk\inc\poppack.h -FILE 288 f:\sp\public\sdk\inc\winsvc.h -FILE 289 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 290 f:\sp\public\sdk\inc\windef.h -FILE 291 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 292 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 293 f:\sp\public\sdk\inc\winuser.h -FILE 294 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 295 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 296 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 297 f:\sp\public\sdk\inc\mcx.h -FILE 298 f:\sp\public\sdk\inc\pshpack8.h -FILE 299 f:\sp\public\sdk\inc\guiddef.h -FILE 300 f:\sp\public\sdk\inc\winnt.h -FILE 301 f:\sp\public\sdk\inc\winnls.h -FILE 302 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 303 f:\sp\public\sdk\inc\pshpack1.h -FILE 304 f:\sp\public\sdk\inc\winerror.h -FILE 305 f:\sp\public\sdk\inc\winreg.h -FILE 306 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 307 f:\sp\public\sdk\inc\ddbanned.h -FILE 308 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 309 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 310 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 311 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 312 f:\sp\public\sdk\inc\tvout.h -FILE 313 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 314 f:\sp\public\sdk\inc\mcx.h -FILE 315 f:\sp\public\sdk\inc\pshpack8.h -FILE 316 f:\sp\public\sdk\inc\winnt.h -FILE 317 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 318 f:\sp\public\sdk\inc\specstrings.h -FILE 319 f:\sp\public\sdk\inc\basetsd.h -FILE 320 f:\sp\public\sdk\inc\winnls.h -FILE 321 f:\sp\public\sdk\inc\pshpack1.h -FILE 322 f:\sp\public\sdk\inc\winerror.h -FILE 323 f:\sp\public\sdk\inc\winreg.h -FILE 324 f:\sp\vctools\crt_bld\self_x86\crt\src\strnicmp.c -FILE 325 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 326 f:\sp\public\sdk\inc\tvout.h -FILE 327 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 328 f:\sp\public\sdk\inc\wincon.h -FILE 329 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 330 f:\sp\public\sdk\inc\imm.h -FILE 331 f:\sp\public\sdk\inc\guiddef.h -FILE 332 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 333 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 334 f:\sp\public\sdk\inc\winbase.h -FILE 335 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 336 f:\sp\public\sdk\inc\wingdi.h -FILE 337 f:\sp\public\sdk\inc\windows.h -FILE 338 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 339 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 340 f:\sp\public\sdk\inc\winver.h -FILE 341 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 342 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 343 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 344 f:\sp\public\sdk\inc\pshpack2.h -FILE 345 f:\sp\public\sdk\inc\reason.h -FILE 346 f:\sp\public\sdk\inc\pshpack4.h -FILE 347 f:\sp\public\sdk\inc\winnetwk.h -FILE 348 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 349 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 350 f:\sp\public\sdk\inc\stralign.h -FILE 351 f:\sp\public\sdk\inc\windef.h -FILE 352 f:\sp\public\sdk\inc\poppack.h -FILE 353 f:\sp\public\sdk\inc\winsvc.h -FILE 354 f:\sp\public\sdk\inc\ddbanned.h -FILE 355 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 356 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 357 f:\sp\public\sdk\inc\winuser.h -FILE 358 f:\sp\public\sdk\inc\mcx.h -FILE 359 f:\sp\public\sdk\inc\pshpack8.h -FILE 360 f:\sp\public\sdk\inc\winnt.h -FILE 361 f:\sp\public\sdk\inc\specstrings.h -FILE 362 f:\sp\public\sdk\inc\basetsd.h -FILE 363 f:\sp\public\sdk\inc\winnls.h -FILE 364 f:\sp\public\sdk\inc\pshpack1.h -FILE 365 f:\sp\public\sdk\inc\winerror.h -FILE 366 f:\sp\public\sdk\inc\winreg.h -FILE 367 f:\sp\vctools\crt_bld\self_x86\crt\src\stricmp.c -FILE 368 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 369 f:\sp\public\sdk\inc\tvout.h -FILE 370 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 371 f:\sp\public\sdk\inc\wincon.h -FILE 372 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 373 f:\sp\public\sdk\inc\imm.h -FILE 374 f:\sp\public\sdk\inc\guiddef.h -FILE 375 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 376 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 377 f:\sp\public\sdk\inc\winbase.h -FILE 378 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 379 f:\sp\public\sdk\inc\wingdi.h -FILE 380 f:\sp\public\sdk\inc\windows.h -FILE 381 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 382 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 383 f:\sp\public\sdk\inc\winver.h -FILE 384 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 385 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 386 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 387 f:\sp\public\sdk\inc\pshpack2.h -FILE 388 f:\sp\public\sdk\inc\reason.h -FILE 389 f:\sp\public\sdk\inc\pshpack4.h -FILE 390 f:\sp\public\sdk\inc\winnetwk.h -FILE 391 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 392 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 393 f:\sp\public\sdk\inc\stralign.h -FILE 394 f:\sp\public\sdk\inc\windef.h -FILE 395 f:\sp\public\sdk\inc\poppack.h -FILE 396 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 397 f:\sp\public\sdk\inc\winsvc.h -FILE 398 f:\sp\public\sdk\inc\ddbanned.h -FILE 399 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 400 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 401 f:\sp\public\sdk\inc\winuser.h -FILE 402 f:\sp\public\sdk\inc\winnt.h -FILE 403 f:\sp\public\sdk\inc\pshpack4.h -FILE 404 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 405 f:\sp\public\sdk\inc\poppack.h -FILE 406 f:\sp\vctools\crt_bld\self_x86\crt\src\tcsncpy_s.inl -FILE 407 f:\sp\public\sdk\inc\winnetwk.h -FILE 408 f:\sp\public\sdk\inc\imm.h -FILE 409 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 410 f:\sp\public\sdk\inc\pshpack1.h -FILE 411 f:\sp\public\sdk\inc\winver.h -FILE 412 f:\sp\vctools\crt_bld\self_x86\crt\src\internal_securecrt.h -FILE 413 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 414 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 415 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 416 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 417 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 418 f:\sp\public\sdk\inc\guiddef.h -FILE 419 f:\sp\public\sdk\inc\windows.h -FILE 420 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 421 f:\sp\public\sdk\inc\specstrings.h -FILE 422 f:\sp\public\sdk\inc\basetsd.h -FILE 423 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 424 f:\sp\public\sdk\inc\winreg.h -FILE 425 f:\sp\vctools\crt_bld\self_x86\crt\src\strncpy_s.c -FILE 426 f:\sp\public\sdk\inc\winbase.h -FILE 427 f:\sp\public\sdk\inc\winerror.h -FILE 428 f:\sp\public\sdk\inc\pshpack8.h -FILE 429 f:\sp\public\sdk\inc\reason.h -FILE 430 f:\sp\public\sdk\inc\wincon.h -FILE 431 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 432 f:\sp\public\sdk\inc\ddbanned.h -FILE 433 f:\sp\public\sdk\inc\windef.h -FILE 434 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 435 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 436 f:\sp\public\sdk\inc\pshpack2.h -FILE 437 f:\sp\public\sdk\inc\mcx.h -FILE 438 f:\sp\public\sdk\inc\winuser.h -FILE 439 f:\sp\public\sdk\inc\winnls.h -FILE 440 f:\sp\public\sdk\inc\stralign.h -FILE 441 f:\sp\public\sdk\inc\tvout.h -FILE 442 f:\sp\public\sdk\inc\winsvc.h -FILE 443 f:\sp\public\sdk\inc\wingdi.h -FILE 444 f:\sp\public\sdk\inc\winnt.h -FILE 445 f:\sp\public\sdk\inc\pshpack4.h -FILE 446 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 447 f:\sp\public\sdk\inc\poppack.h -FILE 448 f:\sp\vctools\crt_bld\self_x86\crt\src\tcscpy_s.inl -FILE 449 f:\sp\public\sdk\inc\winnetwk.h -FILE 450 f:\sp\public\sdk\inc\imm.h -FILE 451 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 452 f:\sp\public\sdk\inc\pshpack1.h -FILE 453 f:\sp\public\sdk\inc\winver.h -FILE 454 f:\sp\vctools\crt_bld\self_x86\crt\src\internal_securecrt.h -FILE 455 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 456 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 457 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 458 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 459 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 460 f:\sp\public\sdk\inc\guiddef.h -FILE 461 f:\sp\public\sdk\inc\windows.h -FILE 462 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 463 f:\sp\public\sdk\inc\specstrings.h -FILE 464 f:\sp\public\sdk\inc\basetsd.h -FILE 465 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 466 f:\sp\public\sdk\inc\winreg.h -FILE 467 f:\sp\vctools\crt_bld\self_x86\crt\src\strcpy_s.c -FILE 468 f:\sp\public\sdk\inc\winbase.h -FILE 469 f:\sp\public\sdk\inc\winerror.h -FILE 470 f:\sp\public\sdk\inc\pshpack8.h -FILE 471 f:\sp\public\sdk\inc\reason.h -FILE 472 f:\sp\public\sdk\inc\wincon.h -FILE 473 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 474 f:\sp\public\sdk\inc\ddbanned.h -FILE 475 f:\sp\public\sdk\inc\windef.h -FILE 476 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 477 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 478 f:\sp\public\sdk\inc\pshpack2.h -FILE 479 f:\sp\public\sdk\inc\mcx.h -FILE 480 f:\sp\public\sdk\inc\winuser.h -FILE 481 f:\sp\public\sdk\inc\winnls.h -FILE 482 f:\sp\public\sdk\inc\stralign.h -FILE 483 f:\sp\public\sdk\inc\tvout.h -FILE 484 f:\sp\public\sdk\inc\winsvc.h -FILE 485 f:\sp\public\sdk\inc\wingdi.h -FILE 486 f:\sp\public\sdk\inc\winnt.h -FILE 487 f:\sp\public\sdk\inc\pshpack4.h -FILE 488 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 489 f:\sp\public\sdk\inc\poppack.h -FILE 490 f:\sp\vctools\crt_bld\self_x86\crt\src\tcscat_s.inl -FILE 491 f:\sp\public\sdk\inc\winnetwk.h -FILE 492 f:\sp\public\sdk\inc\imm.h -FILE 493 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 494 f:\sp\public\sdk\inc\pshpack1.h -FILE 495 f:\sp\public\sdk\inc\winver.h -FILE 496 f:\sp\vctools\crt_bld\self_x86\crt\src\internal_securecrt.h -FILE 497 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 498 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 499 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 500 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 501 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 502 f:\sp\public\sdk\inc\guiddef.h -FILE 503 f:\sp\public\sdk\inc\windows.h -FILE 504 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 505 f:\sp\public\sdk\inc\specstrings.h -FILE 506 f:\sp\public\sdk\inc\basetsd.h -FILE 507 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 508 f:\sp\public\sdk\inc\winreg.h -FILE 509 f:\sp\vctools\crt_bld\self_x86\crt\src\strcat_s.c -FILE 510 f:\sp\public\sdk\inc\winbase.h -FILE 511 f:\sp\public\sdk\inc\winerror.h -FILE 512 f:\sp\public\sdk\inc\pshpack8.h -FILE 513 f:\sp\public\sdk\inc\reason.h -FILE 514 f:\sp\public\sdk\inc\wincon.h -FILE 515 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 516 f:\sp\public\sdk\inc\ddbanned.h -FILE 517 f:\sp\public\sdk\inc\windef.h -FILE 518 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 519 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 520 f:\sp\public\sdk\inc\pshpack2.h -FILE 521 f:\sp\public\sdk\inc\mcx.h -FILE 522 f:\sp\public\sdk\inc\winuser.h -FILE 523 f:\sp\public\sdk\inc\winnls.h -FILE 524 f:\sp\public\sdk\inc\stralign.h -FILE 525 f:\sp\public\sdk\inc\tvout.h -FILE 526 f:\sp\public\sdk\inc\winsvc.h -FILE 527 f:\sp\public\sdk\inc\wingdi.h -FILE 528 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 529 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 530 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 531 f:\sp\vctools\crt_bld\self_x86\crt\src\strlen_s.c -FILE 532 f:\sp\public\sdk\inc\ddbanned.h -FILE 533 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 534 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 535 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\strpbrk.asm -FILE 536 F:\SP\vctools\crt_bld\SELF_X86\crt\src\Intel\STRSPN.ASM -FILE 537 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 538 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\_strnicm.asm -FILE 539 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 540 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 541 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 542 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 543 f:\sp\vctools\crt_bld\self_x86\crt\src\intel\strncmp.c -FILE 544 f:\sp\public\sdk\inc\ddbanned.h -FILE 545 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 546 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 547 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\strlen.asm -FILE 548 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 549 f:\sp\public\sdk\inc\pshpack2.h -FILE 550 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 551 f:\sp\public\sdk\inc\mcx.h -FILE 552 f:\sp\public\sdk\inc\winuser.h -FILE 553 f:\sp\public\sdk\inc\winnls.h -FILE 554 f:\sp\public\sdk\inc\stralign.h -FILE 555 f:\sp\public\sdk\inc\tvout.h -FILE 556 f:\sp\public\sdk\inc\winsvc.h -FILE 557 f:\sp\public\sdk\inc\wingdi.h -FILE 558 f:\sp\public\sdk\inc\winnt.h -FILE 559 f:\sp\public\sdk\inc\pshpack4.h -FILE 560 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 561 f:\sp\public\sdk\inc\poppack.h -FILE 562 f:\sp\public\sdk\inc\winnetwk.h -FILE 563 f:\sp\public\sdk\inc\imm.h -FILE 564 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 565 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 566 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 567 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 568 f:\sp\vctools\crt_bld\self_x86\crt\src\strdup.c -FILE 569 f:\sp\public\sdk\inc\pshpack1.h -FILE 570 f:\sp\public\sdk\inc\winver.h -FILE 571 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 572 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 573 f:\sp\public\sdk\inc\guiddef.h -FILE 574 f:\sp\public\sdk\inc\windows.h -FILE 575 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 576 f:\sp\public\sdk\inc\specstrings.h -FILE 577 f:\sp\public\sdk\inc\basetsd.h -FILE 578 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 579 f:\sp\public\sdk\inc\winreg.h -FILE 580 f:\sp\public\sdk\inc\ddbanned.h -FILE 581 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 582 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 583 f:\sp\public\sdk\inc\winbase.h -FILE 584 f:\sp\public\sdk\inc\winerror.h -FILE 585 f:\sp\public\sdk\inc\pshpack8.h -FILE 586 f:\sp\public\sdk\inc\reason.h -FILE 587 f:\sp\public\sdk\inc\wincon.h -FILE 588 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 589 f:\sp\public\sdk\inc\windef.h -FILE 590 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\strcspn.asm -FILE 591 F:\SP\vctools\crt_bld\SELF_X86\crt\src\Intel\STRSPN.ASM -FILE 592 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 593 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\strcmp.asm -FILE 594 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 595 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\strchr.asm -FILE 596 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 597 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\string\i386\p4_memset.c -FILE 598 f:\sp\public\sdk\inc\ddbanned.h -FILE 599 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 600 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 601 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\memset.asm -FILE 602 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 603 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\memmove.asm -FILE 604 F:\SP\vctools\crt_bld\SELF_X86\crt\src\Intel\MEMCPY.ASM -FILE 605 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 606 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\string\i386\memcmp.c -FILE 607 f:\sp\public\sdk\inc\ddbanned.h -FILE 608 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 609 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 610 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\string\i386\p4_memcpy.c -FILE 611 f:\sp\public\sdk\inc\ddbanned.h -FILE 612 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 613 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 614 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\memcpy.asm -FILE 615 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 616 f:\sp\public\sdk\inc\pshpack2.h -FILE 617 f:\sp\public\sdk\inc\winreg.h -FILE 618 f:\sp\public\sdk\inc\guiddef.h -FILE 619 f:\sp\public\sdk\inc\windows.h -FILE 620 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 621 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 622 f:\sp\public\sdk\inc\specstrings.h -FILE 623 f:\sp\public\sdk\inc\basetsd.h -FILE 624 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 625 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 626 f:\sp\public\sdk\inc\pshpack4.h -FILE 627 f:\sp\public\sdk\inc\reason.h -FILE 628 f:\sp\public\sdk\inc\wincon.h -FILE 629 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 630 f:\sp\public\sdk\inc\poppack.h -FILE 631 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 632 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h -FILE 633 f:\sp\public\sdk\inc\mcx.h -FILE 634 f:\sp\public\sdk\inc\winuser.h -FILE 635 f:\sp\public\sdk\inc\winnls.h -FILE 636 f:\sp\public\sdk\inc\stralign.h -FILE 637 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 638 f:\sp\public\sdk\inc\windef.h -FILE 639 f:\sp\public\sdk\inc\tvout.h -FILE 640 f:\sp\public\sdk\inc\winsvc.h -FILE 641 f:\sp\vctools\crt_bld\self_x86\crt\src\tidtable.c -FILE 642 f:\sp\public\sdk\inc\wingdi.h -FILE 643 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 644 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 645 f:\sp\public\sdk\inc\winnt.h -FILE 646 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 647 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 648 f:\sp\public\sdk\inc\winnetwk.h -FILE 649 f:\sp\public\sdk\inc\imm.h -FILE 650 f:\sp\public\sdk\inc\ddbanned.h -FILE 651 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 652 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 653 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 654 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 655 f:\sp\public\sdk\inc\winbase.h -FILE 656 f:\sp\public\sdk\inc\winerror.h -FILE 657 f:\sp\public\sdk\inc\pshpack1.h -FILE 658 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 659 f:\sp\vctools\crt_bld\self_x86\crt\src\memory.h -FILE 660 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 661 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h -FILE 662 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 663 f:\sp\public\sdk\inc\pshpack8.h -FILE 664 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 665 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 666 f:\sp\public\sdk\inc\winver.h -FILE 667 f:\sp\public\sdk\inc\pshpack4.h -FILE 668 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 669 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 670 f:\sp\public\sdk\inc\poppack.h -FILE 671 f:\sp\public\sdk\inc\winnt.h -FILE 672 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 673 f:\sp\public\sdk\inc\winnetwk.h -FILE 674 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 675 f:\sp\public\sdk\inc\imm.h -FILE 676 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 677 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 678 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 679 f:\sp\public\sdk\inc\pshpack1.h -FILE 680 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 681 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 682 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 683 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 684 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 685 f:\sp\public\sdk\inc\winver.h -FILE 686 f:\sp\public\sdk\inc\guiddef.h -FILE 687 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 688 f:\sp\public\sdk\inc\specstrings.h -FILE 689 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 690 f:\sp\public\sdk\inc\basetsd.h -FILE 691 f:\sp\public\sdk\inc\windows.h -FILE 692 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 693 f:\sp\public\sdk\inc\winreg.h -FILE 694 f:\sp\vctools\crt_bld\self_x86\crt\src\stdenvp.c -FILE 695 f:\sp\public\sdk\inc\winbase.h -FILE 696 f:\sp\public\sdk\inc\winerror.h -FILE 697 f:\sp\public\sdk\inc\pshpack8.h -FILE 698 f:\sp\public\sdk\inc\reason.h -FILE 699 f:\sp\public\sdk\inc\ddbanned.h -FILE 700 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 701 f:\sp\public\sdk\inc\wincon.h -FILE 702 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 703 f:\sp\public\sdk\inc\pshpack2.h -FILE 704 f:\sp\public\sdk\inc\mcx.h -FILE 705 f:\sp\public\sdk\inc\winuser.h -FILE 706 f:\sp\public\sdk\inc\winnls.h -FILE 707 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 708 f:\sp\public\sdk\inc\windef.h -FILE 709 f:\sp\public\sdk\inc\stralign.h -FILE 710 f:\sp\public\sdk\inc\tvout.h -FILE 711 f:\sp\public\sdk\inc\winsvc.h -FILE 712 f:\sp\public\sdk\inc\wingdi.h -FILE 713 f:\sp\public\sdk\inc\poppack.h -FILE 714 f:\sp\vctools\crt_bld\self_x86\crt\src\dos.h -FILE 715 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 716 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 717 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 718 f:\sp\public\sdk\inc\winnetwk.h -FILE 719 f:\sp\public\sdk\inc\imm.h -FILE 720 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 721 f:\sp\public\sdk\inc\windef.h -FILE 722 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 723 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 724 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 725 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 726 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h -FILE 727 f:\sp\public\sdk\inc\pshpack1.h -FILE 728 f:\sp\public\sdk\inc\winver.h -FILE 729 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 730 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 731 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 732 f:\sp\public\sdk\inc\winnt.h -FILE 733 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 734 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 735 f:\sp\public\sdk\inc\winreg.h -FILE 736 f:\sp\vctools\crt_bld\self_x86\crt\src\stdargv.c -FILE 737 f:\sp\public\sdk\inc\winbase.h -FILE 738 f:\sp\public\sdk\inc\winerror.h -FILE 739 f:\sp\public\sdk\inc\pshpack8.h -FILE 740 f:\sp\public\sdk\inc\reason.h -FILE 741 f:\sp\public\sdk\inc\wincon.h -FILE 742 f:\sp\public\sdk\inc\ddbanned.h -FILE 743 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 744 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 745 f:\sp\public\sdk\inc\pshpack2.h -FILE 746 f:\sp\public\sdk\inc\mcx.h -FILE 747 f:\sp\public\sdk\inc\winuser.h -FILE 748 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 749 f:\sp\public\sdk\inc\winnls.h -FILE 750 f:\sp\public\sdk\inc\guiddef.h -FILE 751 f:\sp\public\sdk\inc\windows.h -FILE 752 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 753 f:\sp\public\sdk\inc\specstrings.h -FILE 754 f:\sp\public\sdk\inc\basetsd.h -FILE 755 f:\sp\public\sdk\inc\stralign.h -FILE 756 f:\sp\public\sdk\inc\tvout.h -FILE 757 f:\sp\public\sdk\inc\winsvc.h -FILE 758 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 759 f:\sp\public\sdk\inc\wingdi.h -FILE 760 f:\sp\public\sdk\inc\pshpack4.h -FILE 761 f:\sp\public\sdk\inc\reason.h -FILE 762 f:\sp\public\sdk\inc\wincon.h -FILE 763 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 764 f:\sp\public\sdk\inc\poppack.h -FILE 765 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 766 f:\sp\public\sdk\inc\mcx.h -FILE 767 f:\sp\public\sdk\inc\winuser.h -FILE 768 f:\sp\public\sdk\inc\winnls.h -FILE 769 f:\sp\public\sdk\inc\stralign.h -FILE 770 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 771 f:\sp\public\sdk\inc\windef.h -FILE 772 f:\sp\public\sdk\inc\tvout.h -FILE 773 f:\sp\public\sdk\inc\winsvc.h -FILE 774 f:\sp\public\sdk\inc\wingdi.h -FILE 775 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 776 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 777 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 778 f:\sp\public\sdk\inc\winnt.h -FILE 779 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 780 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 781 f:\sp\public\sdk\inc\winnetwk.h -FILE 782 f:\sp\public\sdk\inc\imm.h -FILE 783 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h -FILE 784 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 785 f:\sp\vctools\crt_bld\self_x86\crt\src\mlock.c -FILE 786 f:\sp\public\sdk\inc\winbase.h -FILE 787 f:\sp\public\sdk\inc\winerror.h -FILE 788 f:\sp\public\sdk\inc\pshpack1.h -FILE 789 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 790 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 791 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 792 f:\sp\public\sdk\inc\pshpack8.h -FILE 793 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 794 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 795 f:\sp\public\sdk\inc\winver.h -FILE 796 f:\sp\public\sdk\inc\ddbanned.h -FILE 797 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 798 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 799 f:\sp\public\sdk\inc\pshpack2.h -FILE 800 f:\sp\public\sdk\inc\winreg.h -FILE 801 f:\sp\public\sdk\inc\guiddef.h -FILE 802 f:\sp\public\sdk\inc\windows.h -FILE 803 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 804 f:\sp\public\sdk\inc\specstrings.h -FILE 805 f:\sp\public\sdk\inc\basetsd.h -FILE 806 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 807 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 808 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 809 f:\sp\public\sdk\inc\pshpack4.h -FILE 810 f:\sp\public\sdk\inc\poppack.h -FILE 811 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 812 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 813 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 814 f:\sp\public\sdk\inc\winnetwk.h -FILE 815 f:\sp\public\sdk\inc\imm.h -FILE 816 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 817 f:\sp\public\sdk\inc\windef.h -FILE 818 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 819 f:\sp\public\sdk\inc\pshpack1.h -FILE 820 f:\sp\public\sdk\inc\winver.h -FILE 821 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 822 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 823 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 824 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 825 f:\sp\public\sdk\inc\winnt.h -FILE 826 f:\sp\vctools\crt_bld\self_x86\crt\src\cmsgs.h -FILE 827 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 828 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 829 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 830 f:\sp\public\sdk\inc\winreg.h -FILE 831 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 832 f:\sp\vctools\crt_bld\self_x86\crt\src\crt0msg.c -FILE 833 f:\sp\public\sdk\inc\winbase.h -FILE 834 f:\sp\public\sdk\inc\winerror.h -FILE 835 f:\sp\public\sdk\inc\pshpack8.h -FILE 836 f:\sp\public\sdk\inc\reason.h -FILE 837 f:\sp\public\sdk\inc\wincon.h -FILE 838 f:\sp\public\sdk\inc\ddbanned.h -FILE 839 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 840 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 841 f:\sp\public\sdk\inc\pshpack2.h -FILE 842 f:\sp\public\sdk\inc\mcx.h -FILE 843 f:\sp\public\sdk\inc\winuser.h -FILE 844 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 845 f:\sp\public\sdk\inc\winnls.h -FILE 846 f:\sp\public\sdk\inc\guiddef.h -FILE 847 f:\sp\public\sdk\inc\windows.h -FILE 848 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 849 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 850 f:\sp\public\sdk\inc\specstrings.h -FILE 851 f:\sp\public\sdk\inc\basetsd.h -FILE 852 f:\sp\public\sdk\inc\stralign.h -FILE 853 f:\sp\public\sdk\inc\tvout.h -FILE 854 f:\sp\public\sdk\inc\winsvc.h -FILE 855 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 856 f:\sp\public\sdk\inc\wingdi.h -FILE 857 f:\sp\public\sdk\inc\pshpack4.h -FILE 858 f:\sp\public\sdk\inc\pshpack1.h -FILE 859 f:\sp\public\sdk\inc\winver.h -FILE 860 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 861 f:\sp\public\sdk\inc\winnt.h -FILE 862 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 863 f:\sp\public\sdk\inc\winreg.h -FILE 864 f:\sp\public\sdk\inc\winbase.h -FILE 865 f:\sp\public\sdk\inc\winerror.h -FILE 866 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h -FILE 867 f:\sp\public\sdk\inc\pshpack8.h -FILE 868 f:\sp\public\sdk\inc\reason.h -FILE 869 f:\sp\public\sdk\inc\wincon.h -FILE 870 f:\sp\public\sdk\inc\pshpack2.h -FILE 871 f:\sp\vctools\crt_bld\self_x86\crt\src\crt0init.c -FILE 872 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 873 f:\sp\public\sdk\inc\mcx.h -FILE 874 f:\sp\public\sdk\inc\winuser.h -FILE 875 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 876 f:\sp\public\sdk\inc\winnls.h -FILE 877 f:\sp\public\sdk\inc\guiddef.h -FILE 878 f:\sp\public\sdk\inc\windows.h -FILE 879 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 880 f:\sp\public\sdk\inc\specstrings.h -FILE 881 f:\sp\public\sdk\inc\basetsd.h -FILE 882 f:\sp\public\sdk\inc\stralign.h -FILE 883 f:\sp\public\sdk\inc\tvout.h -FILE 884 f:\sp\public\sdk\inc\winsvc.h -FILE 885 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 886 f:\sp\public\sdk\inc\wingdi.h -FILE 887 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 888 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 889 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 890 f:\sp\public\sdk\inc\pshpack4.h -FILE 891 f:\sp\public\sdk\inc\ddbanned.h -FILE 892 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 893 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 894 f:\sp\public\sdk\inc\poppack.h -FILE 895 f:\sp\public\sdk\inc\winnetwk.h -FILE 896 f:\sp\public\sdk\inc\imm.h -FILE 897 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 898 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 899 f:\sp\public\sdk\inc\windef.h -FILE 900 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 901 f:\sp\public\sdk\inc\poppack.h -FILE 902 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 903 f:\sp\public\sdk\inc\winnetwk.h -FILE 904 f:\sp\public\sdk\inc\imm.h -FILE 905 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 906 f:\sp\public\sdk\inc\windef.h -FILE 907 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 908 f:\sp\public\sdk\inc\pshpack1.h -FILE 909 f:\sp\public\sdk\inc\winver.h -FILE 910 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 911 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 912 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 913 f:\sp\public\sdk\inc\winnt.h -FILE 914 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 915 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 916 f:\sp\public\sdk\inc\winreg.h -FILE 917 f:\sp\vctools\crt_bld\self_x86\crt\src\crt0fp.c -FILE 918 f:\sp\public\sdk\inc\winbase.h -FILE 919 f:\sp\public\sdk\inc\winerror.h -FILE 920 f:\sp\public\sdk\inc\pshpack8.h -FILE 921 f:\sp\public\sdk\inc\reason.h -FILE 922 f:\sp\public\sdk\inc\wincon.h -FILE 923 f:\sp\public\sdk\inc\ddbanned.h -FILE 924 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 925 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 926 f:\sp\public\sdk\inc\pshpack2.h -FILE 927 f:\sp\public\sdk\inc\mcx.h -FILE 928 f:\sp\public\sdk\inc\winuser.h -FILE 929 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 930 f:\sp\public\sdk\inc\winnls.h -FILE 931 f:\sp\public\sdk\inc\guiddef.h -FILE 932 f:\sp\public\sdk\inc\windows.h -FILE 933 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 934 f:\sp\public\sdk\inc\specstrings.h -FILE 935 f:\sp\public\sdk\inc\basetsd.h -FILE 936 f:\sp\public\sdk\inc\stralign.h -FILE 937 f:\sp\public\sdk\inc\tvout.h -FILE 938 f:\sp\public\sdk\inc\winsvc.h -FILE 939 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 940 f:\sp\public\sdk\inc\wingdi.h -FILE 941 f:\sp\public\sdk\inc\pshpack4.h -FILE 942 f:\sp\vctools\crt_bld\self_x86\crt\src\process.h -FILE 943 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 944 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 945 f:\sp\public\sdk\inc\pshpack4.h -FILE 946 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 947 f:\sp\public\sdk\inc\reason.h -FILE 948 f:\sp\public\sdk\inc\wincon.h -FILE 949 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 950 f:\sp\public\sdk\inc\poppack.h -FILE 951 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h -FILE 952 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 953 f:\sp\public\sdk\inc\mcx.h -FILE 954 f:\sp\public\sdk\inc\winuser.h -FILE 955 f:\sp\public\sdk\inc\winnls.h -FILE 956 f:\sp\public\sdk\inc\stralign.h -FILE 957 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 958 f:\sp\public\sdk\inc\windef.h -FILE 959 f:\sp\public\sdk\inc\tvout.h -FILE 960 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 961 f:\sp\public\sdk\inc\winsvc.h -FILE 962 f:\sp\public\sdk\inc\wingdi.h -FILE 963 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h -FILE 964 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcapi.h -FILE 965 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 966 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 967 f:\sp\vctools\crt_bld\self_x86\crt\src\mbdata.h -FILE 968 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h -FILE 969 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 970 f:\sp\public\sdk\inc\winnt.h -FILE 971 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 972 f:\sp\public\sdk\inc\winnetwk.h -FILE 973 f:\sp\public\sdk\inc\imm.h -FILE 974 f:\sp\vctools\crt_bld\self_x86\crt\src\crt0dat.c -FILE 975 f:\sp\public\sdk\inc\winbase.h -FILE 976 f:\sp\public\sdk\inc\winerror.h -FILE 977 f:\sp\public\sdk\inc\pshpack1.h -FILE 978 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 979 f:\sp\public\sdk\inc\pshpack8.h -FILE 980 f:\sp\public\sdk\inc\winver.h -FILE 981 f:\sp\public\sdk\inc\ddbanned.h -FILE 982 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 983 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 984 f:\sp\vctools\crt_bld\self_x86\crt\src\dos.h -FILE 985 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 986 f:\sp\public\sdk\inc\pshpack2.h -FILE 987 f:\sp\public\sdk\inc\winreg.h -FILE 988 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 989 f:\sp\public\sdk\inc\guiddef.h -FILE 990 f:\sp\public\sdk\inc\windows.h -FILE 991 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 992 f:\sp\public\sdk\inc\specstrings.h -FILE 993 f:\sp\public\sdk\inc\basetsd.h -FILE 994 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 995 f:\sp\public\sdk\inc\tvout.h -FILE 996 f:\sp\public\sdk\inc\winsvc.h -FILE 997 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 998 f:\sp\public\sdk\inc\wingdi.h -FILE 999 f:\sp\public\sdk\inc\pshpack4.h -FILE 1000 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 1001 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 1002 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcapi.h -FILE 1003 f:\sp\public\sdk\inc\poppack.h -FILE 1004 f:\sp\vctools\crt_bld\self_x86\crt\src\process.h -FILE 1005 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 1006 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 1007 f:\sp\public\sdk\inc\winnetwk.h -FILE 1008 f:\sp\public\sdk\inc\imm.h -FILE 1009 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1010 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1011 f:\sp\public\sdk\inc\windef.h -FILE 1012 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1013 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1014 f:\sp\vctools\crt_bld\self_x86\crt\src\dos.h -FILE 1015 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1016 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1017 f:\sp\public\sdk\inc\pshpack1.h -FILE 1018 f:\sp\public\sdk\inc\winver.h -FILE 1019 f:\sp\public\sdk\inc\winnt.h -FILE 1020 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1021 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 1022 f:\sp\vctools\crt_bld\self_x86\crt\src\crt0.c -FILE 1023 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1024 f:\sp\public\sdk\inc\winreg.h -FILE 1025 f:\sp\public\sdk\inc\winbase.h -FILE 1026 f:\sp\public\sdk\inc\winerror.h -FILE 1027 f:\sp\public\sdk\inc\ddbanned.h -FILE 1028 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1029 f:\sp\public\sdk\inc\pshpack8.h -FILE 1030 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1031 f:\sp\public\sdk\inc\reason.h -FILE 1032 f:\sp\public\sdk\inc\wincon.h -FILE 1033 f:\sp\public\sdk\inc\pshpack2.h -FILE 1034 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1035 f:\sp\public\sdk\inc\mcx.h -FILE 1036 f:\sp\public\sdk\inc\winuser.h -FILE 1037 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1038 f:\sp\public\sdk\inc\winnls.h -FILE 1039 f:\sp\public\sdk\inc\guiddef.h -FILE 1040 f:\sp\public\sdk\inc\windows.h -FILE 1041 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1042 f:\sp\public\sdk\inc\specstrings.h -FILE 1043 f:\sp\public\sdk\inc\basetsd.h -FILE 1044 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h -FILE 1045 f:\sp\public\sdk\inc\stralign.h -FILE 1046 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\alloca16.asm -FILE 1047 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 1048 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\chkstk.asm -FILE 1049 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 1050 f:\sp\public\sdk\inc\wincon.h -FILE 1051 f:\sp\public\sdk\inc\imm.h -FILE 1052 f:\sp\public\sdk\inc\winbase.h -FILE 1053 f:\sp\public\sdk\inc\wingdi.h -FILE 1054 f:\sp\public\sdk\inc\winver.h -FILE 1055 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 1056 f:\sp\public\sdk\inc\windows.h -FILE 1057 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 1058 f:\sp\public\sdk\inc\pshpack2.h -FILE 1059 f:\sp\public\sdk\inc\reason.h -FILE 1060 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\rtc\initsect.cpp -FILE 1061 f:\sp\public\sdk\inc\specstrings.h -FILE 1062 f:\sp\public\sdk\inc\basetsd.h -FILE 1063 f:\sp\public\sdk\inc\pshpack4.h -FILE 1064 f:\sp\public\sdk\inc\winnetwk.h -FILE 1065 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\errno.h -FILE 1066 f:\sp\public\sdk\inc\stralign.h -FILE 1067 f:\sp\public\sdk\inc\poppack.h -FILE 1068 f:\sp\public\sdk\inc\winsvc.h -FILE 1069 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 1070 f:\sp\public\sdk\inc\windef.h -FILE 1071 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\internal.h -FILE 1072 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 1073 f:\sp\public\sdk\inc\winuser.h -FILE 1074 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 1075 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sect_attribs.h -FILE 1076 f:\sp\public\sdk\inc\mcx.h -FILE 1077 f:\sp\public\sdk\inc\pshpack8.h -FILE 1078 f:\sp\public\sdk\inc\guiddef.h -FILE 1079 f:\sp\public\sdk\inc\winnt.h -FILE 1080 f:\sp\public\sdk\inc\winnls.h -FILE 1081 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 1082 f:\sp\public\sdk\inc\pshpack1.h -FILE 1083 f:\sp\public\sdk\inc\winerror.h -FILE 1084 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\rtcapi.h -FILE 1085 f:\sp\public\sdk\inc\winreg.h -FILE 1086 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 1087 f:\sp\public\sdk\inc\ddbanned.h -FILE 1088 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 1089 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 1090 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\rtcpriv.h -FILE 1091 f:\sp\public\sdk\inc\tvout.h -FILE 1092 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\malloc.h -FILE 1093 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h -FILE 1094 f:\sp\public\sdk\inc\poppack.h -FILE 1095 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1096 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1097 f:\sp\public\sdk\inc\winnetwk.h -FILE 1098 f:\sp\public\sdk\inc\imm.h -FILE 1099 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1100 f:\sp\public\sdk\inc\windef.h -FILE 1101 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1102 f:\sp\public\sdk\inc\pshpack1.h -FILE 1103 f:\sp\public\sdk\inc\winver.h -FILE 1104 f:\sp\public\sdk\inc\windows.h -FILE 1105 f:\sp\public\sdk\inc\winnt.h -FILE 1106 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1107 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1108 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1109 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1110 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1111 f:\sp\public\sdk\inc\winreg.h -FILE 1112 f:\sp\public\sdk\inc\winbase.h -FILE 1113 f:\sp\vctools\crt_bld\self_x86\crt\src\wtombenv.c -FILE 1114 f:\sp\public\sdk\inc\winerror.h -FILE 1115 f:\sp\public\sdk\inc\pshpack8.h -FILE 1116 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1117 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1118 f:\sp\public\sdk\inc\reason.h -FILE 1119 f:\sp\public\sdk\inc\wincon.h -FILE 1120 f:\sp\public\sdk\inc\ddbanned.h -FILE 1121 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1122 f:\sp\public\sdk\inc\pshpack2.h -FILE 1123 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1124 f:\sp\public\sdk\inc\mcx.h -FILE 1125 f:\sp\public\sdk\inc\winuser.h -FILE 1126 f:\sp\public\sdk\inc\winnls.h -FILE 1127 f:\sp\public\sdk\inc\guiddef.h -FILE 1128 f:\sp\public\sdk\inc\specstrings.h -FILE 1129 f:\sp\public\sdk\inc\basetsd.h -FILE 1130 f:\sp\public\sdk\inc\stralign.h -FILE 1131 f:\sp\public\sdk\inc\tvout.h -FILE 1132 f:\sp\public\sdk\inc\winsvc.h -FILE 1133 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1134 f:\sp\public\sdk\inc\wingdi.h -FILE 1135 f:\sp\public\sdk\inc\pshpack4.h -FILE 1136 f:\sp\public\sdk\inc\winnt.h -FILE 1137 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1138 f:\sp\public\sdk\inc\winreg.h -FILE 1139 f:\sp\public\sdk\inc\winbase.h -FILE 1140 f:\sp\public\sdk\inc\winerror.h -FILE 1141 f:\sp\public\sdk\inc\pshpack8.h -FILE 1142 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1143 f:\sp\public\sdk\inc\reason.h -FILE 1144 f:\sp\public\sdk\inc\wincon.h -FILE 1145 f:\sp\vctools\crt_bld\self_x86\crt\src\float.h -FILE 1146 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1147 f:\sp\public\sdk\inc\pshpack2.h -FILE 1148 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1149 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 1150 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1151 f:\sp\public\sdk\inc\mcx.h -FILE 1152 f:\sp\public\sdk\inc\winuser.h -FILE 1153 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1154 f:\sp\public\sdk\inc\winnls.h -FILE 1155 f:\sp\public\sdk\inc\guiddef.h -FILE 1156 f:\sp\public\sdk\inc\windows.h -FILE 1157 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1158 f:\sp\public\sdk\inc\specstrings.h -FILE 1159 f:\sp\public\sdk\inc\basetsd.h -FILE 1160 f:\sp\public\sdk\inc\stralign.h -FILE 1161 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1162 f:\sp\vctools\crt_bld\self_x86\crt\src\signal.h -FILE 1163 f:\sp\public\sdk\inc\tvout.h -FILE 1164 f:\sp\public\sdk\inc\winsvc.h -FILE 1165 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1166 f:\sp\vctools\crt_bld\self_x86\crt\src\winxfltr.c -FILE 1167 f:\sp\public\sdk\inc\wingdi.h -FILE 1168 f:\sp\public\sdk\inc\pshpack4.h -FILE 1169 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 1170 f:\sp\public\sdk\inc\poppack.h -FILE 1171 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1172 f:\sp\public\sdk\inc\winnetwk.h -FILE 1173 f:\sp\public\sdk\inc\imm.h -FILE 1174 f:\sp\public\sdk\inc\ddbanned.h -FILE 1175 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1176 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1177 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1178 f:\sp\public\sdk\inc\windef.h -FILE 1179 f:\sp\vctools\crt_bld\self_x86\crt\src\crtwrn.h -FILE 1180 f:\sp\public\sdk\inc\pshpack1.h -FILE 1181 f:\sp\public\sdk\inc\winver.h -FILE 1182 f:\sp\public\sdk\inc\winnetwk.h -FILE 1183 f:\sp\public\sdk\inc\imm.h -FILE 1184 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1185 f:\sp\public\sdk\inc\windef.h -FILE 1186 f:\sp\public\sdk\inc\pshpack1.h -FILE 1187 f:\sp\public\sdk\inc\winver.h -FILE 1188 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1189 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1190 f:\sp\public\sdk\inc\winnt.h -FILE 1191 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1192 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1193 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1194 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1195 f:\sp\public\sdk\inc\winreg.h -FILE 1196 f:\sp\public\sdk\inc\winbase.h -FILE 1197 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 1198 f:\sp\public\sdk\inc\winerror.h -FILE 1199 f:\sp\vctools\crt_bld\self_x86\crt\src\winsig.c -FILE 1200 f:\sp\public\sdk\inc\pshpack8.h -FILE 1201 f:\sp\public\sdk\inc\reason.h -FILE 1202 f:\sp\public\sdk\inc\wincon.h -FILE 1203 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1204 f:\sp\public\sdk\inc\pshpack2.h -FILE 1205 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 1206 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1207 f:\sp\public\sdk\inc\mcx.h -FILE 1208 f:\sp\public\sdk\inc\winuser.h -FILE 1209 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1210 f:\sp\public\sdk\inc\winnls.h -FILE 1211 f:\sp\public\sdk\inc\guiddef.h -FILE 1212 f:\sp\public\sdk\inc\windows.h -FILE 1213 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1214 f:\sp\public\sdk\inc\specstrings.h -FILE 1215 f:\sp\public\sdk\inc\ddbanned.h -FILE 1216 f:\sp\public\sdk\inc\basetsd.h -FILE 1217 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1218 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1219 f:\sp\public\sdk\inc\stralign.h -FILE 1220 f:\sp\vctools\crt_bld\self_x86\crt\src\signal.h -FILE 1221 f:\sp\public\sdk\inc\tvout.h -FILE 1222 f:\sp\public\sdk\inc\winsvc.h -FILE 1223 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1224 f:\sp\public\sdk\inc\wingdi.h -FILE 1225 f:\sp\vctools\crt_bld\self_x86\crt\src\float.h -FILE 1226 f:\sp\vctools\crt_bld\self_x86\crt\src\crtwrn.h -FILE 1227 f:\sp\public\sdk\inc\pshpack4.h -FILE 1228 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 1229 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1230 f:\sp\public\sdk\inc\poppack.h -FILE 1231 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 1232 f:\sp\public\sdk\inc\wincon.h -FILE 1233 f:\sp\public\sdk\inc\imm.h -FILE 1234 f:\sp\public\sdk\inc\winbase.h -FILE 1235 f:\sp\public\sdk\inc\wingdi.h -FILE 1236 f:\sp\public\sdk\inc\winver.h -FILE 1237 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1238 f:\sp\public\sdk\inc\windows.h -FILE 1239 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1240 f:\sp\public\sdk\inc\pshpack2.h -FILE 1241 f:\sp\public\sdk\inc\reason.h -FILE 1242 f:\sp\vctools\crt_bld\self_x86\crt\src\w_str.c -FILE 1243 f:\sp\public\sdk\inc\specstrings.h -FILE 1244 f:\sp\public\sdk\inc\basetsd.h -FILE 1245 f:\sp\public\sdk\inc\pshpack4.h -FILE 1246 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 1247 f:\sp\public\sdk\inc\winnetwk.h -FILE 1248 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1249 f:\sp\public\sdk\inc\stralign.h -FILE 1250 f:\sp\public\sdk\inc\poppack.h -FILE 1251 f:\sp\public\sdk\inc\winsvc.h -FILE 1252 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1253 f:\sp\public\sdk\inc\windef.h -FILE 1254 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1255 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1256 f:\sp\public\sdk\inc\winuser.h -FILE 1257 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1258 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1259 f:\sp\public\sdk\inc\mcx.h -FILE 1260 f:\sp\public\sdk\inc\pshpack8.h -FILE 1261 f:\sp\public\sdk\inc\guiddef.h -FILE 1262 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 1263 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 1264 f:\sp\public\sdk\inc\winnt.h -FILE 1265 f:\sp\public\sdk\inc\winnls.h -FILE 1266 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1267 f:\sp\public\sdk\inc\pshpack1.h -FILE 1268 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 1269 f:\sp\public\sdk\inc\winerror.h -FILE 1270 f:\sp\public\sdk\inc\winreg.h -FILE 1271 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1272 f:\sp\public\sdk\inc\ddbanned.h -FILE 1273 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1274 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1275 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1276 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1277 f:\sp\public\sdk\inc\tvout.h -FILE 1278 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1279 f:\sp\public\sdk\inc\wincon.h -FILE 1280 f:\sp\public\sdk\inc\imm.h -FILE 1281 f:\sp\public\sdk\inc\winbase.h -FILE 1282 f:\sp\public\sdk\inc\wingdi.h -FILE 1283 f:\sp\public\sdk\inc\winver.h -FILE 1284 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1285 f:\sp\public\sdk\inc\windows.h -FILE 1286 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1287 f:\sp\public\sdk\inc\pshpack2.h -FILE 1288 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 1289 f:\sp\public\sdk\inc\reason.h -FILE 1290 f:\sp\vctools\crt_bld\self_x86\crt\src\w_loc.c -FILE 1291 f:\sp\public\sdk\inc\specstrings.h -FILE 1292 f:\sp\public\sdk\inc\basetsd.h -FILE 1293 f:\sp\public\sdk\inc\pshpack4.h -FILE 1294 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 1295 f:\sp\public\sdk\inc\winnetwk.h -FILE 1296 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1297 f:\sp\public\sdk\inc\stralign.h -FILE 1298 f:\sp\public\sdk\inc\poppack.h -FILE 1299 f:\sp\public\sdk\inc\winsvc.h -FILE 1300 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1301 f:\sp\public\sdk\inc\windef.h -FILE 1302 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1303 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1304 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1305 f:\sp\public\sdk\inc\winuser.h -FILE 1306 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1307 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1308 f:\sp\public\sdk\inc\mcx.h -FILE 1309 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 1310 f:\sp\public\sdk\inc\pshpack8.h -FILE 1311 f:\sp\public\sdk\inc\guiddef.h -FILE 1312 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 1313 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 1314 f:\sp\public\sdk\inc\winnt.h -FILE 1315 f:\sp\public\sdk\inc\winnls.h -FILE 1316 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1317 f:\sp\public\sdk\inc\pshpack1.h -FILE 1318 f:\sp\public\sdk\inc\winerror.h -FILE 1319 f:\sp\public\sdk\inc\winreg.h -FILE 1320 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1321 f:\sp\public\sdk\inc\ddbanned.h -FILE 1322 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1323 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1324 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1325 f:\sp\public\sdk\inc\tvout.h -FILE 1326 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1327 f:\sp\public\sdk\inc\poppack.h -FILE 1328 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 1329 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 1330 f:\sp\public\sdk\inc\winnetwk.h -FILE 1331 f:\sp\public\sdk\inc\imm.h -FILE 1332 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1333 f:\sp\public\sdk\inc\windef.h -FILE 1334 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1335 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h -FILE 1336 f:\sp\public\sdk\inc\pshpack1.h -FILE 1337 f:\sp\public\sdk\inc\winver.h -FILE 1338 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1339 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 1340 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1341 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1342 f:\sp\public\sdk\inc\winnt.h -FILE 1343 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 1344 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1345 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1346 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1347 f:\sp\public\sdk\inc\winreg.h -FILE 1348 f:\sp\vctools\crt_bld\self_x86\crt\src\convrtcp.c -FILE 1349 f:\sp\public\sdk\inc\winbase.h -FILE 1350 f:\sp\public\sdk\inc\winerror.h -FILE 1351 f:\sp\public\sdk\inc\pshpack8.h -FILE 1352 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 1353 f:\sp\public\sdk\inc\reason.h -FILE 1354 f:\sp\public\sdk\inc\wincon.h -FILE 1355 f:\sp\public\sdk\inc\ddbanned.h -FILE 1356 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1357 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1358 f:\sp\public\sdk\inc\pshpack2.h -FILE 1359 f:\sp\public\sdk\inc\mcx.h -FILE 1360 f:\sp\public\sdk\inc\winuser.h -FILE 1361 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1362 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 1363 f:\sp\public\sdk\inc\winnls.h -FILE 1364 f:\sp\public\sdk\inc\guiddef.h -FILE 1365 f:\sp\public\sdk\inc\windows.h -FILE 1366 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1367 f:\sp\public\sdk\inc\specstrings.h -FILE 1368 f:\sp\public\sdk\inc\basetsd.h -FILE 1369 f:\sp\public\sdk\inc\stralign.h -FILE 1370 f:\sp\public\sdk\inc\tvout.h -FILE 1371 f:\sp\public\sdk\inc\winsvc.h -FILE 1372 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1373 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1374 f:\sp\public\sdk\inc\wingdi.h -FILE 1375 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 1376 f:\sp\public\sdk\inc\pshpack4.h -FILE 1377 f:\sp\public\sdk\inc\winerror.h -FILE 1378 f:\sp\public\sdk\inc\pshpack8.h -FILE 1379 f:\sp\public\sdk\inc\reason.h -FILE 1380 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 1381 f:\sp\public\sdk\inc\wincon.h -FILE 1382 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 1383 f:\sp\public\sdk\inc\pshpack2.h -FILE 1384 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1385 f:\sp\public\sdk\inc\mcx.h -FILE 1386 f:\sp\public\sdk\inc\winuser.h -FILE 1387 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1388 f:\sp\public\sdk\inc\winnls.h -FILE 1389 f:\sp\public\sdk\inc\guiddef.h -FILE 1390 f:\sp\public\sdk\inc\windows.h -FILE 1391 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h -FILE 1392 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1393 f:\sp\public\sdk\inc\specstrings.h -FILE 1394 f:\sp\public\sdk\inc\basetsd.h -FILE 1395 f:\sp\public\sdk\inc\stralign.h -FILE 1396 f:\sp\public\sdk\inc\tvout.h -FILE 1397 f:\sp\public\sdk\inc\winsvc.h -FILE 1398 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1399 f:\sp\public\sdk\inc\wingdi.h -FILE 1400 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 1401 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 1402 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1403 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1404 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1405 f:\sp\public\sdk\inc\pshpack4.h -FILE 1406 f:\sp\public\sdk\inc\poppack.h -FILE 1407 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 1408 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 1409 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.c -FILE 1410 f:\sp\public\sdk\inc\winnetwk.h -FILE 1411 f:\sp\public\sdk\inc\imm.h -FILE 1412 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1413 f:\sp\public\sdk\inc\windef.h -FILE 1414 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1415 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1416 f:\sp\public\sdk\inc\pshpack1.h -FILE 1417 f:\sp\public\sdk\inc\ddbanned.h -FILE 1418 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1419 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1420 f:\sp\public\sdk\inc\winver.h -FILE 1421 f:\sp\public\sdk\inc\winnt.h -FILE 1422 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1423 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1424 f:\sp\public\sdk\inc\winreg.h -FILE 1425 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1426 f:\sp\public\sdk\inc\winbase.h -FILE 1427 f:\sp\public\sdk\inc\poppack.h -FILE 1428 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 1429 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 1430 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1431 f:\sp\public\sdk\inc\winnetwk.h -FILE 1432 f:\sp\public\sdk\inc\imm.h -FILE 1433 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1434 f:\sp\public\sdk\inc\windef.h -FILE 1435 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 1436 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1437 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1438 f:\sp\public\sdk\inc\pshpack1.h -FILE 1439 f:\sp\public\sdk\inc\winver.h -FILE 1440 f:\sp\public\sdk\inc\windows.h -FILE 1441 f:\sp\public\sdk\inc\winnt.h -FILE 1442 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1443 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 1444 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1445 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1446 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1447 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1448 f:\sp\public\sdk\inc\winreg.h -FILE 1449 f:\sp\public\sdk\inc\winbase.h -FILE 1450 f:\sp\vctools\crt_bld\self_x86\crt\src\setenv.c -FILE 1451 f:\sp\public\sdk\inc\winerror.h -FILE 1452 f:\sp\public\sdk\inc\pshpack8.h -FILE 1453 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1454 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1455 f:\sp\public\sdk\inc\reason.h -FILE 1456 f:\sp\public\sdk\inc\wincon.h -FILE 1457 f:\sp\public\sdk\inc\ddbanned.h -FILE 1458 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1459 f:\sp\public\sdk\inc\pshpack2.h -FILE 1460 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1461 f:\sp\public\sdk\inc\mcx.h -FILE 1462 f:\sp\public\sdk\inc\winuser.h -FILE 1463 f:\sp\public\sdk\inc\winnls.h -FILE 1464 f:\sp\public\sdk\inc\guiddef.h -FILE 1465 f:\sp\public\sdk\inc\specstrings.h -FILE 1466 f:\sp\public\sdk\inc\basetsd.h -FILE 1467 f:\sp\public\sdk\inc\stralign.h -FILE 1468 f:\sp\public\sdk\inc\tvout.h -FILE 1469 f:\sp\public\sdk\inc\winsvc.h -FILE 1470 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1471 f:\sp\public\sdk\inc\wingdi.h -FILE 1472 f:\sp\public\sdk\inc\pshpack4.h -FILE 1473 f:\sp\public\sdk\inc\poppack.h -FILE 1474 f:\sp\public\sdk\inc\winnetwk.h -FILE 1475 f:\sp\public\sdk\inc\imm.h -FILE 1476 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1477 f:\sp\public\sdk\inc\windef.h -FILE 1478 f:\sp\public\sdk\inc\pshpack1.h -FILE 1479 f:\sp\public\sdk\inc\winver.h -FILE 1480 f:\sp\public\sdk\inc\windows.h -FILE 1481 f:\sp\public\sdk\inc\winnt.h -FILE 1482 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1483 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1484 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1485 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1486 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1487 f:\sp\public\sdk\inc\winreg.h -FILE 1488 f:\sp\public\sdk\inc\winbase.h -FILE 1489 f:\sp\vctools\crt_bld\self_x86\crt\src\rand_s.c -FILE 1490 f:\sp\public\sdk\inc\winerror.h -FILE 1491 f:\sp\public\sdk\inc\pshpack8.h -FILE 1492 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1493 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1494 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1495 f:\sp\public\sdk\inc\reason.h -FILE 1496 f:\sp\public\sdk\inc\wincon.h -FILE 1497 f:\sp\public\sdk\inc\ddbanned.h -FILE 1498 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1499 f:\sp\public\sdk\inc\pshpack2.h -FILE 1500 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1501 f:\sp\public\sdk\inc\mcx.h -FILE 1502 f:\sp\public\sdk\inc\winuser.h -FILE 1503 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 1504 f:\sp\public\sdk\inc\winnls.h -FILE 1505 f:\sp\public\sdk\inc\guiddef.h -FILE 1506 f:\sp\public\sdk\inc\specstrings.h -FILE 1507 f:\sp\public\sdk\inc\basetsd.h -FILE 1508 f:\sp\public\sdk\inc\stralign.h -FILE 1509 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1510 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1511 f:\sp\public\sdk\inc\tvout.h -FILE 1512 f:\sp\public\sdk\inc\winsvc.h -FILE 1513 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1514 f:\sp\public\sdk\inc\wingdi.h -FILE 1515 f:\sp\public\sdk\inc\pshpack4.h -FILE 1516 f:\sp\public\sdk\inc\poppack.h -FILE 1517 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 1518 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1519 f:\sp\public\sdk\inc\winnetwk.h -FILE 1520 f:\sp\public\sdk\inc\imm.h -FILE 1521 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1522 f:\sp\public\sdk\inc\windef.h -FILE 1523 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1524 f:\sp\public\sdk\inc\pshpack1.h -FILE 1525 f:\sp\public\sdk\inc\winver.h -FILE 1526 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1527 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1528 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1529 f:\sp\public\sdk\inc\winnt.h -FILE 1530 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1531 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1532 f:\sp\public\sdk\inc\winreg.h -FILE 1533 f:\sp\vctools\crt_bld\self_x86\crt\src\purevirt.c -FILE 1534 f:\sp\public\sdk\inc\winbase.h -FILE 1535 f:\sp\public\sdk\inc\winerror.h -FILE 1536 f:\sp\public\sdk\inc\pshpack8.h -FILE 1537 f:\sp\public\sdk\inc\reason.h -FILE 1538 f:\sp\public\sdk\inc\wincon.h -FILE 1539 f:\sp\public\sdk\inc\ddbanned.h -FILE 1540 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1541 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1542 f:\sp\public\sdk\inc\pshpack2.h -FILE 1543 f:\sp\public\sdk\inc\mcx.h -FILE 1544 f:\sp\public\sdk\inc\winuser.h -FILE 1545 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1546 f:\sp\public\sdk\inc\winnls.h -FILE 1547 f:\sp\public\sdk\inc\guiddef.h -FILE 1548 f:\sp\public\sdk\inc\windows.h -FILE 1549 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1550 f:\sp\public\sdk\inc\specstrings.h -FILE 1551 f:\sp\public\sdk\inc\basetsd.h -FILE 1552 f:\sp\public\sdk\inc\stralign.h -FILE 1553 f:\sp\public\sdk\inc\tvout.h -FILE 1554 f:\sp\public\sdk\inc\winsvc.h -FILE 1555 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1556 f:\sp\public\sdk\inc\wingdi.h -FILE 1557 f:\sp\public\sdk\inc\pshpack4.h -FILE 1558 f:\sp\public\sdk\inc\poppack.h -FILE 1559 f:\sp\public\sdk\inc\winnetwk.h -FILE 1560 f:\sp\public\sdk\inc\imm.h -FILE 1561 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1562 f:\sp\public\sdk\inc\windef.h -FILE 1563 f:\sp\public\sdk\inc\pshpack1.h -FILE 1564 f:\sp\public\sdk\inc\winver.h -FILE 1565 f:\sp\public\sdk\inc\windows.h -FILE 1566 f:\sp\public\sdk\inc\winnt.h -FILE 1567 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1568 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1569 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1570 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1571 f:\sp\public\sdk\inc\winreg.h -FILE 1572 f:\sp\public\sdk\inc\winbase.h -FILE 1573 f:\sp\vctools\crt_bld\self_x86\crt\src\pesect.c -FILE 1574 f:\sp\public\sdk\inc\winerror.h -FILE 1575 f:\sp\public\sdk\inc\pshpack8.h -FILE 1576 f:\sp\public\sdk\inc\reason.h -FILE 1577 f:\sp\public\sdk\inc\wincon.h -FILE 1578 f:\sp\public\sdk\inc\ddbanned.h -FILE 1579 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1580 f:\sp\public\sdk\inc\pshpack2.h -FILE 1581 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1582 f:\sp\public\sdk\inc\mcx.h -FILE 1583 f:\sp\public\sdk\inc\winuser.h -FILE 1584 f:\sp\public\sdk\inc\winnls.h -FILE 1585 f:\sp\public\sdk\inc\guiddef.h -FILE 1586 f:\sp\public\sdk\inc\specstrings.h -FILE 1587 f:\sp\public\sdk\inc\basetsd.h -FILE 1588 f:\sp\public\sdk\inc\stralign.h -FILE 1589 f:\sp\public\sdk\inc\tvout.h -FILE 1590 f:\sp\public\sdk\inc\winsvc.h -FILE 1591 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1592 f:\sp\public\sdk\inc\wingdi.h -FILE 1593 f:\sp\public\sdk\inc\pshpack4.h -FILE 1594 f:\sp\public\sdk\inc\winerror.h -FILE 1595 f:\sp\public\sdk\inc\pshpack1.h -FILE 1596 f:\sp\public\sdk\inc\pshpack8.h -FILE 1597 f:\sp\public\sdk\inc\winver.h -FILE 1598 f:\sp\public\sdk\inc\pshpack2.h -FILE 1599 f:\sp\public\sdk\inc\winreg.h -FILE 1600 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 1601 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 1602 f:\sp\public\sdk\inc\guiddef.h -FILE 1603 f:\sp\public\sdk\inc\windows.h -FILE 1604 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1605 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h -FILE 1606 f:\sp\public\sdk\inc\specstrings.h -FILE 1607 f:\sp\public\sdk\inc\basetsd.h -FILE 1608 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1609 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 1610 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1611 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1612 f:\sp\public\sdk\inc\pshpack4.h -FILE 1613 f:\sp\public\sdk\inc\reason.h -FILE 1614 f:\sp\public\sdk\inc\wincon.h -FILE 1615 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1616 f:\sp\public\sdk\inc\poppack.h -FILE 1617 f:\sp\public\sdk\inc\mcx.h -FILE 1618 f:\sp\public\sdk\inc\winuser.h -FILE 1619 f:\sp\public\sdk\inc\winnls.h -FILE 1620 f:\sp\vctools\crt_bld\self_x86\crt\src\nlsdata2.c -FILE 1621 f:\sp\public\sdk\inc\stralign.h -FILE 1622 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1623 f:\sp\public\sdk\inc\windef.h -FILE 1624 f:\sp\public\sdk\inc\tvout.h -FILE 1625 f:\sp\public\sdk\inc\winsvc.h -FILE 1626 f:\sp\public\sdk\inc\wingdi.h -FILE 1627 f:\sp\public\sdk\inc\ddbanned.h -FILE 1628 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1629 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1630 f:\sp\public\sdk\inc\winnt.h -FILE 1631 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1632 f:\sp\public\sdk\inc\winnetwk.h -FILE 1633 f:\sp\public\sdk\inc\imm.h -FILE 1634 f:\sp\public\sdk\inc\winbase.h -FILE 1635 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1636 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1637 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1638 f:\sp\vctools\crt_bld\self_x86\crt\src\nlsdata1.c -FILE 1639 f:\sp\public\sdk\inc\ddbanned.h -FILE 1640 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1641 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1642 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1643 f:\sp\vctools\crt_bld\self_x86\crt\src\nlsint.h -FILE 1644 f:\sp\public\sdk\inc\reason.h -FILE 1645 f:\sp\public\sdk\inc\wincon.h -FILE 1646 f:\sp\public\sdk\inc\pshpack2.h -FILE 1647 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1648 f:\sp\public\sdk\inc\mcx.h -FILE 1649 f:\sp\public\sdk\inc\winuser.h -FILE 1650 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1651 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 1652 f:\sp\public\sdk\inc\winnls.h -FILE 1653 f:\sp\public\sdk\inc\guiddef.h -FILE 1654 f:\sp\public\sdk\inc\windows.h -FILE 1655 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1656 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1657 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1658 f:\sp\public\sdk\inc\specstrings.h -FILE 1659 f:\sp\public\sdk\inc\basetsd.h -FILE 1660 f:\sp\public\sdk\inc\stralign.h -FILE 1661 f:\sp\public\sdk\inc\tvout.h -FILE 1662 f:\sp\public\sdk\inc\winsvc.h -FILE 1663 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1664 f:\sp\public\sdk\inc\wingdi.h -FILE 1665 f:\sp\public\sdk\inc\pshpack4.h -FILE 1666 f:\sp\public\sdk\inc\poppack.h -FILE 1667 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h -FILE 1668 f:\sp\public\sdk\inc\winnetwk.h -FILE 1669 f:\sp\public\sdk\inc\imm.h -FILE 1670 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1671 f:\sp\public\sdk\inc\windef.h -FILE 1672 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 1673 f:\sp\vctools\crt_bld\self_x86\crt\src\onexit.c -FILE 1674 f:\sp\public\sdk\inc\pshpack1.h -FILE 1675 f:\sp\public\sdk\inc\winver.h -FILE 1676 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1677 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1678 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1679 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1680 f:\sp\public\sdk\inc\winnt.h -FILE 1681 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1682 f:\sp\public\sdk\inc\ddbanned.h -FILE 1683 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1684 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1685 f:\sp\public\sdk\inc\winreg.h -FILE 1686 f:\sp\public\sdk\inc\winbase.h -FILE 1687 f:\sp\public\sdk\inc\winerror.h -FILE 1688 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1689 f:\sp\public\sdk\inc\pshpack8.h -FILE 1690 f:\sp\public\sdk\inc\winbase.h -FILE 1691 f:\sp\public\sdk\inc\winerror.h -FILE 1692 f:\sp\public\sdk\inc\pshpack1.h -FILE 1693 f:\sp\public\sdk\inc\pshpack8.h -FILE 1694 f:\sp\public\sdk\inc\winver.h -FILE 1695 f:\sp\public\sdk\inc\pshpack2.h -FILE 1696 f:\sp\public\sdk\inc\winreg.h -FILE 1697 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 1698 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 1699 f:\sp\public\sdk\inc\guiddef.h -FILE 1700 f:\sp\public\sdk\inc\windows.h -FILE 1701 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1702 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1703 f:\sp\public\sdk\inc\specstrings.h -FILE 1704 f:\sp\public\sdk\inc\basetsd.h -FILE 1705 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1706 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1707 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1708 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1709 f:\sp\public\sdk\inc\pshpack4.h -FILE 1710 f:\sp\public\sdk\inc\reason.h -FILE 1711 f:\sp\public\sdk\inc\wincon.h -FILE 1712 f:\sp\public\sdk\inc\poppack.h -FILE 1713 f:\sp\public\sdk\inc\mcx.h -FILE 1714 f:\sp\public\sdk\inc\winuser.h -FILE 1715 f:\sp\public\sdk\inc\winnls.h -FILE 1716 f:\sp\vctools\crt_bld\self_x86\crt\src\lconv.c -FILE 1717 f:\sp\public\sdk\inc\stralign.h -FILE 1718 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1719 f:\sp\public\sdk\inc\windef.h -FILE 1720 f:\sp\public\sdk\inc\tvout.h -FILE 1721 f:\sp\public\sdk\inc\winsvc.h -FILE 1722 f:\sp\public\sdk\inc\wingdi.h -FILE 1723 f:\sp\public\sdk\inc\ddbanned.h -FILE 1724 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1725 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1726 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 1727 f:\sp\public\sdk\inc\winnt.h -FILE 1728 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1729 f:\sp\public\sdk\inc\winnetwk.h -FILE 1730 f:\sp\public\sdk\inc\imm.h -FILE 1731 f:\sp\public\sdk\inc\guiddef.h -FILE 1732 f:\sp\public\sdk\inc\winnt.h -FILE 1733 f:\sp\public\sdk\inc\winnls.h -FILE 1734 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1735 f:\sp\public\sdk\inc\pshpack1.h -FILE 1736 f:\sp\public\sdk\inc\winerror.h -FILE 1737 f:\sp\public\sdk\inc\winreg.h -FILE 1738 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1739 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 1740 f:\sp\public\sdk\inc\tvout.h -FILE 1741 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1742 f:\sp\vctools\crt_bld\self_x86\crt\src\invarg.c -FILE 1743 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1744 f:\sp\public\sdk\inc\wincon.h -FILE 1745 f:\sp\public\sdk\inc\imm.h -FILE 1746 f:\sp\public\sdk\inc\winbase.h -FILE 1747 f:\sp\public\sdk\inc\wingdi.h -FILE 1748 f:\sp\public\sdk\inc\winver.h -FILE 1749 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1750 f:\sp\public\sdk\inc\windows.h -FILE 1751 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1752 f:\sp\public\sdk\inc\pshpack2.h -FILE 1753 f:\sp\public\sdk\inc\reason.h -FILE 1754 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h -FILE 1755 f:\sp\public\sdk\inc\specstrings.h -FILE 1756 f:\sp\public\sdk\inc\basetsd.h -FILE 1757 f:\sp\public\sdk\inc\pshpack4.h -FILE 1758 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1759 f:\sp\public\sdk\inc\winnetwk.h -FILE 1760 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1761 f:\sp\public\sdk\inc\stralign.h -FILE 1762 f:\sp\public\sdk\inc\poppack.h -FILE 1763 f:\sp\public\sdk\inc\winsvc.h -FILE 1764 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1765 f:\sp\public\sdk\inc\windef.h -FILE 1766 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1767 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1768 f:\sp\public\sdk\inc\winuser.h -FILE 1769 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1770 f:\sp\public\sdk\inc\ddbanned.h -FILE 1771 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1772 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1773 f:\sp\public\sdk\inc\mcx.h -FILE 1774 f:\sp\public\sdk\inc\pshpack8.h -FILE 1775 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1776 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 1777 f:\sp\public\sdk\inc\pshpack4.h -FILE 1778 f:\sp\public\sdk\inc\poppack.h -FILE 1779 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 1780 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 1781 f:\sp\public\sdk\inc\winnetwk.h -FILE 1782 f:\sp\public\sdk\inc\imm.h -FILE 1783 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1784 f:\sp\public\sdk\inc\windef.h -FILE 1785 f:\sp\public\sdk\inc\pshpack1.h -FILE 1786 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1787 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1788 f:\sp\public\sdk\inc\winver.h -FILE 1789 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1790 f:\sp\public\sdk\inc\winnt.h -FILE 1791 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1792 f:\sp\public\sdk\inc\winreg.h -FILE 1793 f:\sp\vctools\crt_bld\self_x86\crt\src\inittime.c -FILE 1794 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1795 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1796 f:\sp\public\sdk\inc\winbase.h -FILE 1797 f:\sp\public\sdk\inc\winerror.h -FILE 1798 f:\sp\public\sdk\inc\pshpack8.h -FILE 1799 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 1800 f:\sp\public\sdk\inc\reason.h -FILE 1801 f:\sp\public\sdk\inc\ddbanned.h -FILE 1802 f:\sp\public\sdk\inc\wincon.h -FILE 1803 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1804 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1805 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1806 f:\sp\public\sdk\inc\pshpack2.h -FILE 1807 f:\sp\public\sdk\inc\mcx.h -FILE 1808 f:\sp\public\sdk\inc\winuser.h -FILE 1809 f:\sp\public\sdk\inc\winnls.h -FILE 1810 f:\sp\public\sdk\inc\guiddef.h -FILE 1811 f:\sp\public\sdk\inc\stralign.h -FILE 1812 f:\sp\public\sdk\inc\specstrings.h -FILE 1813 f:\sp\public\sdk\inc\basetsd.h -FILE 1814 f:\sp\public\sdk\inc\windows.h -FILE 1815 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1816 f:\sp\public\sdk\inc\tvout.h -FILE 1817 f:\sp\public\sdk\inc\winsvc.h -FILE 1818 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1819 f:\sp\public\sdk\inc\wingdi.h -FILE 1820 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 1821 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1822 f:\sp\public\sdk\inc\pshpack4.h -FILE 1823 f:\sp\public\sdk\inc\poppack.h -FILE 1824 f:\sp\public\sdk\inc\winnt.h -FILE 1825 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1826 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 1827 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 1828 f:\sp\public\sdk\inc\winnetwk.h -FILE 1829 f:\sp\public\sdk\inc\imm.h -FILE 1830 f:\sp\public\sdk\inc\pshpack1.h -FILE 1831 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1832 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1833 f:\sp\public\sdk\inc\winver.h -FILE 1834 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1835 f:\sp\public\sdk\inc\guiddef.h -FILE 1836 f:\sp\public\sdk\inc\specstrings.h -FILE 1837 f:\sp\public\sdk\inc\basetsd.h -FILE 1838 f:\sp\public\sdk\inc\windows.h -FILE 1839 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1840 f:\sp\public\sdk\inc\winreg.h -FILE 1841 f:\sp\vctools\crt_bld\self_x86\crt\src\initnum.c -FILE 1842 f:\sp\vctools\crt_bld\self_x86\crt\src\nlsint.h -FILE 1843 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1844 f:\sp\public\sdk\inc\winbase.h -FILE 1845 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1846 f:\sp\public\sdk\inc\winerror.h -FILE 1847 f:\sp\public\sdk\inc\pshpack8.h -FILE 1848 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 1849 f:\sp\public\sdk\inc\reason.h -FILE 1850 f:\sp\public\sdk\inc\ddbanned.h -FILE 1851 f:\sp\public\sdk\inc\wincon.h -FILE 1852 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1853 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1854 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1855 f:\sp\public\sdk\inc\pshpack2.h -FILE 1856 f:\sp\public\sdk\inc\mcx.h -FILE 1857 f:\sp\public\sdk\inc\winuser.h -FILE 1858 f:\sp\public\sdk\inc\winnls.h -FILE 1859 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1860 f:\sp\public\sdk\inc\windef.h -FILE 1861 f:\sp\public\sdk\inc\stralign.h -FILE 1862 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1863 f:\sp\public\sdk\inc\tvout.h -FILE 1864 f:\sp\public\sdk\inc\winsvc.h -FILE 1865 f:\sp\public\sdk\inc\wingdi.h -FILE 1866 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1867 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 1868 f:\sp\public\sdk\inc\pshpack4.h -FILE 1869 f:\sp\public\sdk\inc\poppack.h -FILE 1870 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 1871 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 1872 f:\sp\public\sdk\inc\winnetwk.h -FILE 1873 f:\sp\public\sdk\inc\imm.h -FILE 1874 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1875 f:\sp\public\sdk\inc\windef.h -FILE 1876 f:\sp\public\sdk\inc\pshpack1.h -FILE 1877 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1878 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1879 f:\sp\public\sdk\inc\winver.h -FILE 1880 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1881 f:\sp\public\sdk\inc\winnt.h -FILE 1882 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1883 f:\sp\public\sdk\inc\winreg.h -FILE 1884 f:\sp\vctools\crt_bld\self_x86\crt\src\initmon.c -FILE 1885 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1886 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1887 f:\sp\public\sdk\inc\winbase.h -FILE 1888 f:\sp\public\sdk\inc\winerror.h -FILE 1889 f:\sp\public\sdk\inc\pshpack8.h -FILE 1890 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 1891 f:\sp\public\sdk\inc\reason.h -FILE 1892 f:\sp\public\sdk\inc\ddbanned.h -FILE 1893 f:\sp\public\sdk\inc\wincon.h -FILE 1894 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1895 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1896 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1897 f:\sp\public\sdk\inc\pshpack2.h -FILE 1898 f:\sp\public\sdk\inc\mcx.h -FILE 1899 f:\sp\public\sdk\inc\winuser.h -FILE 1900 f:\sp\public\sdk\inc\winnls.h -FILE 1901 f:\sp\public\sdk\inc\guiddef.h -FILE 1902 f:\sp\public\sdk\inc\stralign.h -FILE 1903 f:\sp\public\sdk\inc\specstrings.h -FILE 1904 f:\sp\public\sdk\inc\basetsd.h -FILE 1905 f:\sp\public\sdk\inc\windows.h -FILE 1906 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1907 f:\sp\public\sdk\inc\tvout.h -FILE 1908 f:\sp\public\sdk\inc\winsvc.h -FILE 1909 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1910 f:\sp\public\sdk\inc\wingdi.h -FILE 1911 f:\sp\public\sdk\inc\winbase.h -FILE 1912 f:\sp\public\sdk\inc\winerror.h -FILE 1913 f:\sp\public\sdk\inc\pshpack1.h -FILE 1914 f:\sp\public\sdk\inc\pshpack8.h -FILE 1915 f:\sp\public\sdk\inc\winver.h -FILE 1916 f:\sp\public\sdk\inc\pshpack2.h -FILE 1917 f:\sp\public\sdk\inc\winreg.h -FILE 1918 f:\sp\public\sdk\inc\guiddef.h -FILE 1919 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 1920 f:\sp\public\sdk\inc\specstrings.h -FILE 1921 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 1922 f:\sp\public\sdk\inc\basetsd.h -FILE 1923 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 1924 f:\sp\public\sdk\inc\windows.h -FILE 1925 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 1926 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 1927 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1928 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1929 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1930 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1931 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1932 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 1933 f:\sp\public\sdk\inc\pshpack4.h -FILE 1934 f:\sp\public\sdk\inc\reason.h -FILE 1935 f:\sp\public\sdk\inc\wincon.h -FILE 1936 f:\sp\public\sdk\inc\poppack.h -FILE 1937 f:\sp\vctools\crt_bld\self_x86\crt\src\inithelp.c -FILE 1938 f:\sp\public\sdk\inc\mcx.h -FILE 1939 f:\sp\public\sdk\inc\winuser.h -FILE 1940 f:\sp\public\sdk\inc\winnls.h -FILE 1941 f:\sp\public\sdk\inc\stralign.h -FILE 1942 f:\sp\public\sdk\inc\tvout.h -FILE 1943 f:\sp\public\sdk\inc\winsvc.h -FILE 1944 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1945 f:\sp\public\sdk\inc\wingdi.h -FILE 1946 f:\sp\public\sdk\inc\windef.h -FILE 1947 f:\sp\public\sdk\inc\ddbanned.h -FILE 1948 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1949 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1950 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 1951 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1952 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1953 f:\sp\public\sdk\inc\winnetwk.h -FILE 1954 f:\sp\public\sdk\inc\imm.h -FILE 1955 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 1956 f:\sp\public\sdk\inc\winnt.h -FILE 1957 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1958 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 1959 f:\sp\public\sdk\inc\pshpack4.h -FILE 1960 f:\sp\public\sdk\inc\poppack.h -FILE 1961 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 1962 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 1963 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 1964 f:\sp\public\sdk\inc\winnetwk.h -FILE 1965 f:\sp\public\sdk\inc\imm.h -FILE 1966 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 1967 f:\sp\public\sdk\inc\windef.h -FILE 1968 f:\sp\public\sdk\inc\pshpack1.h -FILE 1969 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 1970 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 1971 f:\sp\public\sdk\inc\winver.h -FILE 1972 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 1973 f:\sp\public\sdk\inc\winnt.h -FILE 1974 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 1975 f:\sp\public\sdk\inc\winreg.h -FILE 1976 f:\sp\vctools\crt_bld\self_x86\crt\src\initctyp.c -FILE 1977 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 1978 f:\sp\public\sdk\inc\winbase.h -FILE 1979 f:\sp\public\sdk\inc\winerror.h -FILE 1980 f:\sp\public\sdk\inc\pshpack8.h -FILE 1981 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 1982 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 1983 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 1984 f:\sp\public\sdk\inc\reason.h -FILE 1985 f:\sp\public\sdk\inc\ddbanned.h -FILE 1986 f:\sp\public\sdk\inc\wincon.h -FILE 1987 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 1988 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 1989 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 1990 f:\sp\public\sdk\inc\pshpack2.h -FILE 1991 f:\sp\public\sdk\inc\mcx.h -FILE 1992 f:\sp\public\sdk\inc\winuser.h -FILE 1993 f:\sp\public\sdk\inc\winnls.h -FILE 1994 f:\sp\public\sdk\inc\guiddef.h -FILE 1995 f:\sp\public\sdk\inc\stralign.h -FILE 1996 f:\sp\public\sdk\inc\specstrings.h -FILE 1997 f:\sp\public\sdk\inc\basetsd.h -FILE 1998 f:\sp\public\sdk\inc\windows.h -FILE 1999 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2000 f:\sp\public\sdk\inc\tvout.h -FILE 2001 f:\sp\public\sdk\inc\winsvc.h -FILE 2002 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2003 f:\sp\public\sdk\inc\wingdi.h -FILE 2004 f:\sp\public\sdk\inc\poppack.h -FILE 2005 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 2006 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2007 f:\sp\public\sdk\inc\winnetwk.h -FILE 2008 f:\sp\public\sdk\inc\imm.h -FILE 2009 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2010 f:\sp\public\sdk\inc\windef.h -FILE 2011 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2012 f:\sp\public\sdk\inc\pshpack1.h -FILE 2013 f:\sp\public\sdk\inc\winver.h -FILE 2014 f:\sp\public\sdk\inc\windows.h -FILE 2015 f:\sp\public\sdk\inc\winnt.h -FILE 2016 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2017 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2018 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2019 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2020 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2021 f:\sp\public\sdk\inc\winreg.h -FILE 2022 f:\sp\public\sdk\inc\winbase.h -FILE 2023 f:\sp\vctools\crt_bld\self_x86\crt\src\initcrit.c -FILE 2024 f:\sp\public\sdk\inc\winerror.h -FILE 2025 f:\sp\public\sdk\inc\pshpack8.h -FILE 2026 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2027 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2028 f:\sp\public\sdk\inc\reason.h -FILE 2029 f:\sp\public\sdk\inc\wincon.h -FILE 2030 f:\sp\public\sdk\inc\ddbanned.h -FILE 2031 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2032 f:\sp\public\sdk\inc\pshpack2.h -FILE 2033 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2034 f:\sp\public\sdk\inc\mcx.h -FILE 2035 f:\sp\public\sdk\inc\winuser.h -FILE 2036 f:\sp\public\sdk\inc\winnls.h -FILE 2037 f:\sp\public\sdk\inc\guiddef.h -FILE 2038 f:\sp\public\sdk\inc\specstrings.h -FILE 2039 f:\sp\public\sdk\inc\basetsd.h -FILE 2040 f:\sp\public\sdk\inc\stralign.h -FILE 2041 f:\sp\public\sdk\inc\tvout.h -FILE 2042 f:\sp\public\sdk\inc\winsvc.h -FILE 2043 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2044 f:\sp\public\sdk\inc\wingdi.h -FILE 2045 f:\sp\public\sdk\inc\pshpack4.h -FILE 2046 f:\sp\public\sdk\inc\poppack.h -FILE 2047 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 2048 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2049 f:\sp\public\sdk\inc\winnetwk.h -FILE 2050 f:\sp\public\sdk\inc\imm.h -FILE 2051 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2052 f:\sp\public\sdk\inc\windef.h -FILE 2053 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2054 f:\sp\public\sdk\inc\pshpack1.h -FILE 2055 f:\sp\public\sdk\inc\winver.h -FILE 2056 f:\sp\public\sdk\inc\windows.h -FILE 2057 f:\sp\public\sdk\inc\winnt.h -FILE 2058 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2059 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2060 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2061 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2062 f:\sp\public\sdk\inc\winreg.h -FILE 2063 f:\sp\public\sdk\inc\winbase.h -FILE 2064 f:\sp\vctools\crt_bld\self_x86\crt\src\initcoll.c -FILE 2065 f:\sp\public\sdk\inc\winerror.h -FILE 2066 f:\sp\public\sdk\inc\pshpack8.h -FILE 2067 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 2068 f:\sp\public\sdk\inc\reason.h -FILE 2069 f:\sp\public\sdk\inc\wincon.h -FILE 2070 f:\sp\public\sdk\inc\ddbanned.h -FILE 2071 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2072 f:\sp\public\sdk\inc\pshpack2.h -FILE 2073 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2074 f:\sp\public\sdk\inc\mcx.h -FILE 2075 f:\sp\public\sdk\inc\winuser.h -FILE 2076 f:\sp\public\sdk\inc\winnls.h -FILE 2077 f:\sp\public\sdk\inc\guiddef.h -FILE 2078 f:\sp\public\sdk\inc\specstrings.h -FILE 2079 f:\sp\public\sdk\inc\basetsd.h -FILE 2080 f:\sp\public\sdk\inc\stralign.h -FILE 2081 f:\sp\public\sdk\inc\tvout.h -FILE 2082 f:\sp\public\sdk\inc\winsvc.h -FILE 2083 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2084 f:\sp\public\sdk\inc\wingdi.h -FILE 2085 f:\sp\public\sdk\inc\pshpack4.h -FILE 2086 f:\sp\public\sdk\inc\poppack.h -FILE 2087 f:\sp\public\sdk\inc\winnetwk.h -FILE 2088 f:\sp\public\sdk\inc\imm.h -FILE 2089 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2090 f:\sp\public\sdk\inc\windef.h -FILE 2091 f:\binaries.x86ret\vcboot\inc\mm3dnow.h -FILE 2092 f:\sp\public\sdk\inc\pshpack1.h -FILE 2093 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 2094 f:\sp\public\sdk\inc\winver.h -FILE 2095 f:\sp\public\sdk\inc\windows.h -FILE 2096 f:\sp\public\sdk\inc\winnt.h -FILE 2097 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2098 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2099 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2100 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2101 f:\sp\public\sdk\inc\winreg.h -FILE 2102 f:\sp\public\sdk\inc\winbase.h -FILE 2103 f:\sp\vctools\crt_bld\self_x86\crt\src\gs_support.c -FILE 2104 f:\sp\public\sdk\inc\winerror.h -FILE 2105 f:\sp\public\sdk\inc\pshpack8.h -FILE 2106 f:\sp\vctools\crt_bld\self_x86\crt\src\intrin.h -FILE 2107 f:\sp\vctools\crt_bld\self_x86\crt\src\setjmp.h -FILE 2108 f:\sp\public\sdk\inc\reason.h -FILE 2109 f:\sp\public\sdk\inc\wincon.h -FILE 2110 f:\sp\public\sdk\inc\ddbanned.h -FILE 2111 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2112 f:\sp\public\sdk\inc\pshpack2.h -FILE 2113 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2114 f:\sp\public\sdk\inc\mcx.h -FILE 2115 f:\sp\public\sdk\inc\winuser.h -FILE 2116 f:\sp\public\sdk\inc\winnls.h -FILE 2117 f:\sp\public\sdk\inc\guiddef.h -FILE 2118 f:\sp\public\sdk\inc\specstrings.h -FILE 2119 f:\sp\public\sdk\inc\basetsd.h -FILE 2120 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 2121 f:\sp\public\sdk\inc\stralign.h -FILE 2122 f:\sp\public\sdk\inc\tvout.h -FILE 2123 f:\sp\public\sdk\inc\winsvc.h -FILE 2124 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2125 f:\sp\public\sdk\inc\wingdi.h -FILE 2126 f:\binaries.x86ret\vcboot\inc\emmintrin.h -FILE 2127 f:\binaries.x86ret\vcboot\inc\xmmintrin.h -FILE 2128 f:\binaries.x86ret\vcboot\inc\mmintrin.h -FILE 2129 f:\sp\public\sdk\inc\pshpack4.h -FILE 2130 f:\sp\public\sdk\inc\poppack.h -FILE 2131 f:\sp\public\sdk\inc\winnetwk.h -FILE 2132 f:\sp\public\sdk\inc\imm.h -FILE 2133 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2134 f:\sp\public\sdk\inc\windef.h -FILE 2135 f:\sp\public\sdk\inc\pshpack1.h -FILE 2136 f:\sp\public\sdk\inc\winver.h -FILE 2137 f:\sp\public\sdk\inc\windows.h -FILE 2138 f:\sp\public\sdk\inc\winnt.h -FILE 2139 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2140 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2141 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2142 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2143 f:\sp\public\sdk\inc\winreg.h -FILE 2144 f:\sp\public\sdk\inc\winbase.h -FILE 2145 f:\sp\vctools\crt_bld\self_x86\crt\src\gs_report.c -FILE 2146 f:\sp\public\sdk\inc\winerror.h -FILE 2147 f:\sp\public\sdk\inc\pshpack8.h -FILE 2148 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2149 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2150 f:\sp\public\sdk\inc\reason.h -FILE 2151 f:\sp\public\sdk\inc\wincon.h -FILE 2152 f:\sp\public\sdk\inc\ddbanned.h -FILE 2153 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2154 f:\sp\public\sdk\inc\pshpack2.h -FILE 2155 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2156 f:\sp\public\sdk\inc\mcx.h -FILE 2157 f:\sp\public\sdk\inc\winuser.h -FILE 2158 f:\sp\public\sdk\inc\winnls.h -FILE 2159 f:\sp\public\sdk\inc\guiddef.h -FILE 2160 f:\sp\public\sdk\inc\specstrings.h -FILE 2161 f:\sp\public\sdk\inc\basetsd.h -FILE 2162 f:\sp\public\sdk\inc\stralign.h -FILE 2163 f:\sp\public\sdk\inc\tvout.h -FILE 2164 f:\sp\public\sdk\inc\winsvc.h -FILE 2165 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2166 f:\sp\public\sdk\inc\wingdi.h -FILE 2167 f:\sp\public\sdk\inc\pshpack4.h -FILE 2168 f:\sp\public\sdk\inc\poppack.h -FILE 2169 f:\sp\public\sdk\inc\winnetwk.h -FILE 2170 f:\sp\public\sdk\inc\imm.h -FILE 2171 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2172 f:\sp\public\sdk\inc\windef.h -FILE 2173 f:\sp\public\sdk\inc\pshpack1.h -FILE 2174 f:\sp\public\sdk\inc\winver.h -FILE 2175 f:\sp\public\sdk\inc\windows.h -FILE 2176 f:\sp\public\sdk\inc\winnt.h -FILE 2177 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2178 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2179 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2180 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2181 f:\sp\public\sdk\inc\winreg.h -FILE 2182 f:\sp\public\sdk\inc\winbase.h -FILE 2183 f:\sp\vctools\crt_bld\self_x86\crt\src\gs_cookie.c -FILE 2184 f:\sp\public\sdk\inc\winerror.h -FILE 2185 f:\sp\public\sdk\inc\pshpack8.h -FILE 2186 f:\sp\public\sdk\inc\reason.h -FILE 2187 f:\sp\public\sdk\inc\wincon.h -FILE 2188 f:\sp\public\sdk\inc\ddbanned.h -FILE 2189 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2190 f:\sp\public\sdk\inc\pshpack2.h -FILE 2191 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2192 f:\sp\public\sdk\inc\mcx.h -FILE 2193 f:\sp\public\sdk\inc\winuser.h -FILE 2194 f:\sp\public\sdk\inc\winnls.h -FILE 2195 f:\sp\public\sdk\inc\guiddef.h -FILE 2196 f:\sp\public\sdk\inc\specstrings.h -FILE 2197 f:\sp\public\sdk\inc\basetsd.h -FILE 2198 f:\sp\public\sdk\inc\stralign.h -FILE 2199 f:\sp\public\sdk\inc\tvout.h -FILE 2200 f:\sp\public\sdk\inc\winsvc.h -FILE 2201 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2202 f:\sp\public\sdk\inc\wingdi.h -FILE 2203 f:\sp\public\sdk\inc\pshpack4.h -FILE 2204 f:\sp\public\sdk\inc\winerror.h -FILE 2205 f:\sp\public\sdk\inc\pshpack1.h -FILE 2206 f:\sp\public\sdk\inc\pshpack8.h -FILE 2207 f:\sp\public\sdk\inc\winver.h -FILE 2208 f:\sp\public\sdk\inc\pshpack2.h -FILE 2209 f:\sp\public\sdk\inc\winreg.h -FILE 2210 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 2211 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2212 f:\sp\public\sdk\inc\guiddef.h -FILE 2213 f:\sp\public\sdk\inc\windows.h -FILE 2214 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2215 f:\sp\public\sdk\inc\specstrings.h -FILE 2216 f:\sp\public\sdk\inc\basetsd.h -FILE 2217 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2218 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 2219 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2220 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2221 f:\sp\public\sdk\inc\pshpack4.h -FILE 2222 f:\sp\public\sdk\inc\reason.h -FILE 2223 f:\sp\public\sdk\inc\wincon.h -FILE 2224 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2225 f:\sp\public\sdk\inc\poppack.h -FILE 2226 f:\sp\public\sdk\inc\mcx.h -FILE 2227 f:\sp\public\sdk\inc\winuser.h -FILE 2228 f:\sp\public\sdk\inc\winnls.h -FILE 2229 f:\sp\vctools\crt_bld\self_x86\crt\src\glstatus.c -FILE 2230 f:\sp\public\sdk\inc\stralign.h -FILE 2231 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2232 f:\sp\public\sdk\inc\windef.h -FILE 2233 f:\sp\public\sdk\inc\tvout.h -FILE 2234 f:\sp\public\sdk\inc\winsvc.h -FILE 2235 f:\sp\public\sdk\inc\wingdi.h -FILE 2236 f:\sp\public\sdk\inc\ddbanned.h -FILE 2237 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2238 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2239 f:\sp\public\sdk\inc\winnt.h -FILE 2240 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2241 f:\sp\public\sdk\inc\winnetwk.h -FILE 2242 f:\sp\public\sdk\inc\imm.h -FILE 2243 f:\sp\public\sdk\inc\winbase.h -FILE 2244 f:\sp\public\sdk\inc\pshpack4.h -FILE 2245 f:\sp\public\sdk\inc\poppack.h -FILE 2246 f:\sp\public\sdk\inc\winnt.h -FILE 2247 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2248 f:\sp\public\sdk\inc\winnetwk.h -FILE 2249 f:\sp\public\sdk\inc\imm.h -FILE 2250 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2251 f:\sp\public\sdk\inc\pshpack1.h -FILE 2252 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2253 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2254 f:\sp\public\sdk\inc\winver.h -FILE 2255 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2256 f:\sp\public\sdk\inc\guiddef.h -FILE 2257 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2258 f:\sp\public\sdk\inc\specstrings.h -FILE 2259 f:\sp\public\sdk\inc\basetsd.h -FILE 2260 f:\sp\public\sdk\inc\windows.h -FILE 2261 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2262 f:\sp\public\sdk\inc\winreg.h -FILE 2263 f:\sp\vctools\crt_bld\self_x86\crt\src\getqloc.c -FILE 2264 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 2265 f:\sp\public\sdk\inc\winbase.h -FILE 2266 f:\sp\public\sdk\inc\winerror.h -FILE 2267 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2268 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2269 f:\sp\public\sdk\inc\pshpack8.h -FILE 2270 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 2271 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2272 f:\sp\public\sdk\inc\reason.h -FILE 2273 f:\sp\public\sdk\inc\ddbanned.h -FILE 2274 f:\sp\public\sdk\inc\wincon.h -FILE 2275 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2276 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2277 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2278 f:\sp\public\sdk\inc\pshpack2.h -FILE 2279 f:\sp\public\sdk\inc\mcx.h -FILE 2280 f:\sp\public\sdk\inc\winuser.h -FILE 2281 f:\sp\public\sdk\inc\winnls.h -FILE 2282 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2283 f:\sp\public\sdk\inc\windef.h -FILE 2284 f:\sp\public\sdk\inc\stralign.h -FILE 2285 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2286 f:\sp\public\sdk\inc\tvout.h -FILE 2287 f:\sp\public\sdk\inc\winsvc.h -FILE 2288 f:\sp\public\sdk\inc\wingdi.h -FILE 2289 f:\sp\public\sdk\inc\reason.h -FILE 2290 f:\sp\public\sdk\inc\wincon.h -FILE 2291 f:\sp\public\sdk\inc\pshpack2.h -FILE 2292 f:\sp\public\sdk\inc\mcx.h -FILE 2293 f:\sp\public\sdk\inc\winuser.h -FILE 2294 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2295 f:\sp\public\sdk\inc\winnls.h -FILE 2296 f:\sp\public\sdk\inc\guiddef.h -FILE 2297 f:\sp\public\sdk\inc\windows.h -FILE 2298 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2299 f:\sp\public\sdk\inc\specstrings.h -FILE 2300 f:\sp\public\sdk\inc\basetsd.h -FILE 2301 f:\sp\public\sdk\inc\stralign.h -FILE 2302 f:\sp\public\sdk\inc\tvout.h -FILE 2303 f:\sp\public\sdk\inc\winsvc.h -FILE 2304 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2305 f:\sp\public\sdk\inc\wingdi.h -FILE 2306 f:\sp\public\sdk\inc\pshpack4.h -FILE 2307 f:\sp\public\sdk\inc\poppack.h -FILE 2308 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h -FILE 2309 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2310 f:\sp\public\sdk\inc\winnetwk.h -FILE 2311 f:\sp\public\sdk\inc\imm.h -FILE 2312 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2313 f:\sp\public\sdk\inc\windef.h -FILE 2314 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 2315 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 2316 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2317 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2318 f:\sp\vctools\crt_bld\self_x86\crt\src\getenv.c -FILE 2319 f:\sp\public\sdk\inc\pshpack1.h -FILE 2320 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 2321 f:\sp\public\sdk\inc\winver.h -FILE 2322 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2323 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2324 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2325 f:\sp\public\sdk\inc\winnt.h -FILE 2326 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2327 f:\sp\public\sdk\inc\ddbanned.h -FILE 2328 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2329 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2330 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2331 f:\sp\public\sdk\inc\winreg.h -FILE 2332 f:\sp\public\sdk\inc\winbase.h -FILE 2333 f:\sp\public\sdk\inc\winerror.h -FILE 2334 f:\sp\public\sdk\inc\pshpack8.h -FILE 2335 f:\sp\public\sdk\inc\poppack.h -FILE 2336 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2337 f:\sp\public\sdk\inc\winnetwk.h -FILE 2338 f:\sp\public\sdk\inc\imm.h -FILE 2339 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2340 f:\sp\public\sdk\inc\windef.h -FILE 2341 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2342 f:\sp\public\sdk\inc\pshpack1.h -FILE 2343 f:\sp\public\sdk\inc\winver.h -FILE 2344 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2345 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2346 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2347 f:\sp\public\sdk\inc\winnt.h -FILE 2348 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2349 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2350 f:\sp\public\sdk\inc\winreg.h -FILE 2351 f:\sp\vctools\crt_bld\self_x86\crt\src\errmode.c -FILE 2352 f:\sp\public\sdk\inc\winbase.h -FILE 2353 f:\sp\public\sdk\inc\winerror.h -FILE 2354 f:\sp\public\sdk\inc\pshpack8.h -FILE 2355 f:\sp\public\sdk\inc\reason.h -FILE 2356 f:\sp\public\sdk\inc\wincon.h -FILE 2357 f:\sp\public\sdk\inc\ddbanned.h -FILE 2358 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2359 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2360 f:\sp\public\sdk\inc\pshpack2.h -FILE 2361 f:\sp\public\sdk\inc\mcx.h -FILE 2362 f:\sp\public\sdk\inc\winuser.h -FILE 2363 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2364 f:\sp\public\sdk\inc\winnls.h -FILE 2365 f:\sp\public\sdk\inc\guiddef.h -FILE 2366 f:\sp\public\sdk\inc\windows.h -FILE 2367 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2368 f:\sp\public\sdk\inc\specstrings.h -FILE 2369 f:\sp\public\sdk\inc\basetsd.h -FILE 2370 f:\sp\public\sdk\inc\stralign.h -FILE 2371 f:\sp\public\sdk\inc\tvout.h -FILE 2372 f:\sp\public\sdk\inc\winsvc.h -FILE 2373 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2374 f:\sp\public\sdk\inc\wingdi.h -FILE 2375 f:\sp\public\sdk\inc\pshpack4.h -FILE 2376 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2377 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2378 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2379 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2380 f:\sp\vctools\crt_bld\self_x86\crt\src\dbghook.c -FILE 2381 f:\sp\public\sdk\inc\ddbanned.h -FILE 2382 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2383 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2384 f:\sp\public\sdk\inc\poppack.h -FILE 2385 f:\sp\public\sdk\inc\winnetwk.h -FILE 2386 f:\sp\public\sdk\inc\imm.h -FILE 2387 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2388 f:\sp\public\sdk\inc\windef.h -FILE 2389 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2390 f:\sp\public\sdk\inc\pshpack1.h -FILE 2391 f:\sp\public\sdk\inc\winver.h -FILE 2392 f:\sp\public\sdk\inc\windows.h -FILE 2393 f:\sp\public\sdk\inc\winnt.h -FILE 2394 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2395 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2396 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2397 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2398 f:\sp\public\sdk\inc\winreg.h -FILE 2399 f:\sp\vctools\crt_bld\self_x86\crt\src\wchar.h -FILE 2400 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.c -FILE 2401 f:\sp\public\sdk\inc\winbase.h -FILE 2402 f:\sp\vctools\crt_bld\self_x86\crt\src\wtime.inl -FILE 2403 f:\sp\public\sdk\inc\winerror.h -FILE 2404 f:\sp\public\sdk\inc\pshpack8.h -FILE 2405 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 2406 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2407 f:\sp\public\sdk\inc\reason.h -FILE 2408 f:\sp\public\sdk\inc\wincon.h -FILE 2409 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2410 f:\sp\public\sdk\inc\ddbanned.h -FILE 2411 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2412 f:\sp\public\sdk\inc\pshpack2.h -FILE 2413 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2414 f:\sp\public\sdk\inc\mcx.h -FILE 2415 f:\sp\public\sdk\inc\winuser.h -FILE 2416 f:\sp\public\sdk\inc\winnls.h -FILE 2417 f:\sp\public\sdk\inc\guiddef.h -FILE 2418 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 2419 f:\sp\public\sdk\inc\specstrings.h -FILE 2420 f:\sp\public\sdk\inc\basetsd.h -FILE 2421 f:\sp\public\sdk\inc\stralign.h -FILE 2422 f:\sp\public\sdk\inc\tvout.h -FILE 2423 f:\sp\public\sdk\inc\winsvc.h -FILE 2424 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2425 f:\sp\public\sdk\inc\wingdi.h -FILE 2426 f:\sp\public\sdk\inc\pshpack4.h -FILE 2427 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2428 f:\sp\public\sdk\inc\mcx.h -FILE 2429 f:\sp\public\sdk\inc\winuser.h -FILE 2430 f:\sp\public\sdk\inc\winnls.h -FILE 2431 f:\sp\public\sdk\inc\stralign.h -FILE 2432 f:\sp\public\sdk\inc\tvout.h -FILE 2433 f:\sp\public\sdk\inc\winsvc.h -FILE 2434 f:\sp\public\sdk\inc\wingdi.h -FILE 2435 f:\sp\public\sdk\inc\pshpack4.h -FILE 2436 f:\sp\public\sdk\inc\winnt.h -FILE 2437 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2438 f:\sp\public\sdk\inc\poppack.h -FILE 2439 f:\sp\public\sdk\inc\winnetwk.h -FILE 2440 f:\sp\public\sdk\inc\imm.h -FILE 2441 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 2442 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 2443 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2444 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2445 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2446 f:\sp\public\sdk\inc\pshpack1.h -FILE 2447 f:\sp\vctools\crt_bld\self_x86\crt\src\crtmbox.c -FILE 2448 f:\sp\public\sdk\inc\winver.h -FILE 2449 f:\sp\public\sdk\inc\guiddef.h -FILE 2450 f:\sp\public\sdk\inc\windows.h -FILE 2451 f:\sp\public\sdk\inc\specstrings.h -FILE 2452 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2453 f:\sp\public\sdk\inc\basetsd.h -FILE 2454 f:\sp\public\sdk\inc\winreg.h -FILE 2455 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2456 f:\sp\public\sdk\inc\winbase.h -FILE 2457 f:\sp\public\sdk\inc\ddbanned.h -FILE 2458 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2459 f:\sp\public\sdk\inc\winerror.h -FILE 2460 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2461 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2462 f:\sp\public\sdk\inc\pshpack8.h -FILE 2463 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2464 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2465 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 2466 f:\sp\public\sdk\inc\reason.h -FILE 2467 f:\sp\public\sdk\inc\wincon.h -FILE 2468 f:\sp\public\sdk\inc\pshpack2.h -FILE 2469 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2470 f:\sp\public\sdk\inc\windef.h -FILE 2471 f:\sp\public\sdk\inc\poppack.h -FILE 2472 f:\sp\vctools\crt_bld\self_x86\crt\src\fltintrn.h -FILE 2473 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2474 f:\sp\public\sdk\inc\winnetwk.h -FILE 2475 f:\sp\public\sdk\inc\imm.h -FILE 2476 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2477 f:\sp\public\sdk\inc\windef.h -FILE 2478 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2479 f:\sp\public\sdk\inc\pshpack1.h -FILE 2480 f:\sp\public\sdk\inc\winver.h -FILE 2481 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2482 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2483 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2484 f:\sp\public\sdk\inc\winnt.h -FILE 2485 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2486 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2487 f:\sp\public\sdk\inc\winreg.h -FILE 2488 f:\sp\vctools\crt_bld\self_x86\crt\src\cmiscdat.c -FILE 2489 f:\sp\public\sdk\inc\winbase.h -FILE 2490 f:\sp\public\sdk\inc\winerror.h -FILE 2491 f:\sp\public\sdk\inc\pshpack8.h -FILE 2492 f:\sp\public\sdk\inc\reason.h -FILE 2493 f:\sp\public\sdk\inc\wincon.h -FILE 2494 f:\sp\public\sdk\inc\ddbanned.h -FILE 2495 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2496 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2497 f:\sp\public\sdk\inc\pshpack2.h -FILE 2498 f:\sp\public\sdk\inc\mcx.h -FILE 2499 f:\sp\public\sdk\inc\winuser.h -FILE 2500 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2501 f:\sp\public\sdk\inc\winnls.h -FILE 2502 f:\sp\public\sdk\inc\guiddef.h -FILE 2503 f:\sp\public\sdk\inc\windows.h -FILE 2504 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2505 f:\sp\public\sdk\inc\specstrings.h -FILE 2506 f:\sp\public\sdk\inc\basetsd.h -FILE 2507 f:\sp\public\sdk\inc\stralign.h -FILE 2508 f:\sp\public\sdk\inc\tvout.h -FILE 2509 f:\sp\public\sdk\inc\winsvc.h -FILE 2510 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2511 f:\sp\public\sdk\inc\wingdi.h -FILE 2512 f:\sp\public\sdk\inc\pshpack4.h -FILE 2513 f:\sp\public\sdk\inc\pshpack4.h -FILE 2514 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 2515 f:\sp\vctools\crt_bld\self_x86\crt\src\signal.h -FILE 2516 f:\sp\public\sdk\inc\poppack.h -FILE 2517 f:\sp\public\sdk\inc\winnetwk.h -FILE 2518 f:\sp\public\sdk\inc\imm.h -FILE 2519 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2520 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2521 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2522 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2523 f:\sp\public\sdk\inc\windef.h -FILE 2524 f:\sp\public\sdk\inc\pshpack1.h -FILE 2525 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2526 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2527 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2528 f:\sp\public\sdk\inc\winver.h -FILE 2529 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2530 f:\sp\public\sdk\inc\winnt.h -FILE 2531 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2532 f:\sp\public\sdk\inc\winreg.h -FILE 2533 f:\sp\vctools\crt_bld\self_x86\crt\src\abort.c -FILE 2534 f:\sp\public\sdk\inc\winbase.h -FILE 2535 f:\sp\public\sdk\inc\winerror.h -FILE 2536 f:\sp\public\sdk\inc\pshpack8.h -FILE 2537 f:\sp\public\sdk\inc\reason.h -FILE 2538 f:\sp\public\sdk\inc\ddbanned.h -FILE 2539 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2540 f:\sp\public\sdk\inc\wincon.h -FILE 2541 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2542 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2543 f:\sp\public\sdk\inc\pshpack2.h -FILE 2544 f:\sp\public\sdk\inc\mcx.h -FILE 2545 f:\sp\public\sdk\inc\winuser.h -FILE 2546 f:\sp\public\sdk\inc\winnls.h -FILE 2547 f:\sp\public\sdk\inc\guiddef.h -FILE 2548 f:\sp\public\sdk\inc\stralign.h -FILE 2549 f:\sp\public\sdk\inc\specstrings.h -FILE 2550 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2551 f:\sp\public\sdk\inc\basetsd.h -FILE 2552 f:\sp\public\sdk\inc\windows.h -FILE 2553 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2554 f:\sp\public\sdk\inc\tvout.h -FILE 2555 f:\sp\public\sdk\inc\winsvc.h -FILE 2556 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2557 f:\sp\public\sdk\inc\wingdi.h -FILE 2558 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 2559 f:\sp\public\sdk\inc\wincon.h -FILE 2560 f:\sp\public\sdk\inc\imm.h -FILE 2561 f:\sp\public\sdk\inc\winbase.h -FILE 2562 f:\sp\public\sdk\inc\wingdi.h -FILE 2563 f:\sp\public\sdk\inc\winver.h -FILE 2564 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2565 f:\sp\public\sdk\inc\windows.h -FILE 2566 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2567 f:\sp\public\sdk\inc\pshpack2.h -FILE 2568 f:\sp\public\sdk\inc\reason.h -FILE 2569 f:\sp\vctools\crt_bld\self_x86\crt\src\a_str.c -FILE 2570 f:\sp\public\sdk\inc\specstrings.h -FILE 2571 f:\sp\public\sdk\inc\basetsd.h -FILE 2572 f:\sp\public\sdk\inc\pshpack4.h -FILE 2573 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 2574 f:\sp\public\sdk\inc\winnetwk.h -FILE 2575 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2576 f:\sp\public\sdk\inc\stralign.h -FILE 2577 f:\sp\public\sdk\inc\poppack.h -FILE 2578 f:\sp\public\sdk\inc\winsvc.h -FILE 2579 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2580 f:\sp\public\sdk\inc\windef.h -FILE 2581 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2582 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2583 f:\sp\public\sdk\inc\winuser.h -FILE 2584 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2585 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2586 f:\sp\public\sdk\inc\mcx.h -FILE 2587 f:\sp\public\sdk\inc\pshpack8.h -FILE 2588 f:\sp\public\sdk\inc\guiddef.h -FILE 2589 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 2590 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2591 f:\sp\public\sdk\inc\winnt.h -FILE 2592 f:\sp\public\sdk\inc\winnls.h -FILE 2593 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2594 f:\sp\public\sdk\inc\pshpack1.h -FILE 2595 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 2596 f:\sp\public\sdk\inc\winerror.h -FILE 2597 f:\sp\public\sdk\inc\winreg.h -FILE 2598 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2599 f:\sp\public\sdk\inc\ddbanned.h -FILE 2600 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2601 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2602 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2603 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2604 f:\sp\public\sdk\inc\tvout.h -FILE 2605 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2606 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 2607 f:\sp\public\sdk\inc\wincon.h -FILE 2608 f:\sp\public\sdk\inc\imm.h -FILE 2609 f:\sp\public\sdk\inc\winbase.h -FILE 2610 f:\sp\public\sdk\inc\wingdi.h -FILE 2611 f:\sp\public\sdk\inc\winver.h -FILE 2612 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2613 f:\sp\public\sdk\inc\windows.h -FILE 2614 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2615 f:\sp\public\sdk\inc\pshpack2.h -FILE 2616 f:\sp\public\sdk\inc\reason.h -FILE 2617 f:\sp\vctools\crt_bld\self_x86\crt\src\a_map.c -FILE 2618 f:\sp\public\sdk\inc\specstrings.h -FILE 2619 f:\sp\public\sdk\inc\basetsd.h -FILE 2620 f:\sp\public\sdk\inc\pshpack4.h -FILE 2621 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 2622 f:\sp\public\sdk\inc\winnetwk.h -FILE 2623 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2624 f:\sp\public\sdk\inc\stralign.h -FILE 2625 f:\sp\public\sdk\inc\poppack.h -FILE 2626 f:\sp\public\sdk\inc\winsvc.h -FILE 2627 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2628 f:\sp\public\sdk\inc\windef.h -FILE 2629 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2630 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2631 f:\sp\public\sdk\inc\winuser.h -FILE 2632 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2633 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2634 f:\sp\public\sdk\inc\mcx.h -FILE 2635 f:\sp\public\sdk\inc\pshpack8.h -FILE 2636 f:\sp\public\sdk\inc\guiddef.h -FILE 2637 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 2638 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2639 f:\sp\public\sdk\inc\winnt.h -FILE 2640 f:\sp\public\sdk\inc\winnls.h -FILE 2641 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2642 f:\sp\public\sdk\inc\pshpack1.h -FILE 2643 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 2644 f:\sp\public\sdk\inc\winerror.h -FILE 2645 f:\sp\public\sdk\inc\winreg.h -FILE 2646 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2647 f:\sp\public\sdk\inc\ddbanned.h -FILE 2648 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2649 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2650 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2651 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2652 f:\sp\public\sdk\inc\tvout.h -FILE 2653 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2654 f:\sp\public\sdk\inc\wincon.h -FILE 2655 f:\sp\public\sdk\inc\imm.h -FILE 2656 f:\sp\public\sdk\inc\winbase.h -FILE 2657 f:\sp\public\sdk\inc\wingdi.h -FILE 2658 f:\sp\public\sdk\inc\winver.h -FILE 2659 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2660 f:\sp\public\sdk\inc\windows.h -FILE 2661 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2662 f:\sp\public\sdk\inc\pshpack2.h -FILE 2663 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 2664 f:\sp\public\sdk\inc\reason.h -FILE 2665 f:\sp\vctools\crt_bld\self_x86\crt\src\a_loc.c -FILE 2666 f:\sp\public\sdk\inc\specstrings.h -FILE 2667 f:\sp\public\sdk\inc\basetsd.h -FILE 2668 f:\sp\public\sdk\inc\pshpack4.h -FILE 2669 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 2670 f:\sp\public\sdk\inc\winnetwk.h -FILE 2671 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2672 f:\sp\public\sdk\inc\stralign.h -FILE 2673 f:\sp\public\sdk\inc\poppack.h -FILE 2674 f:\sp\public\sdk\inc\winsvc.h -FILE 2675 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2676 f:\sp\public\sdk\inc\windef.h -FILE 2677 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2678 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2679 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2680 f:\sp\public\sdk\inc\winuser.h -FILE 2681 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2682 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2683 f:\sp\public\sdk\inc\mcx.h -FILE 2684 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 2685 f:\sp\public\sdk\inc\pshpack8.h -FILE 2686 f:\sp\public\sdk\inc\guiddef.h -FILE 2687 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 2688 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2689 f:\sp\public\sdk\inc\winnt.h -FILE 2690 f:\sp\public\sdk\inc\winnls.h -FILE 2691 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2692 f:\sp\public\sdk\inc\pshpack1.h -FILE 2693 f:\sp\public\sdk\inc\winerror.h -FILE 2694 f:\sp\public\sdk\inc\winreg.h -FILE 2695 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2696 f:\sp\public\sdk\inc\ddbanned.h -FILE 2697 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2698 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2699 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2700 f:\sp\public\sdk\inc\tvout.h -FILE 2701 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2702 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2703 f:\sp\public\sdk\inc\poppack.h -FILE 2704 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 2705 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2706 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2707 f:\sp\public\sdk\inc\winnetwk.h -FILE 2708 f:\sp\public\sdk\inc\imm.h -FILE 2709 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2710 f:\sp\public\sdk\inc\windef.h -FILE 2711 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2712 f:\sp\public\sdk\inc\pshpack1.h -FILE 2713 f:\sp\public\sdk\inc\winver.h -FILE 2714 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2715 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2716 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2717 f:\sp\public\sdk\inc\winnt.h -FILE 2718 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2719 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2720 f:\sp\public\sdk\inc\winreg.h -FILE 2721 f:\sp\vctools\crt_bld\self_x86\crt\src\a_env.c -FILE 2722 f:\sp\public\sdk\inc\winbase.h -FILE 2723 f:\sp\public\sdk\inc\winerror.h -FILE 2724 f:\sp\public\sdk\inc\pshpack8.h -FILE 2725 f:\sp\public\sdk\inc\reason.h -FILE 2726 f:\sp\public\sdk\inc\wincon.h -FILE 2727 f:\sp\public\sdk\inc\ddbanned.h -FILE 2728 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2729 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2730 f:\sp\public\sdk\inc\pshpack2.h -FILE 2731 f:\sp\public\sdk\inc\mcx.h -FILE 2732 f:\sp\public\sdk\inc\winuser.h -FILE 2733 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2734 f:\sp\public\sdk\inc\winnls.h -FILE 2735 f:\sp\public\sdk\inc\guiddef.h -FILE 2736 f:\sp\public\sdk\inc\windows.h -FILE 2737 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2738 f:\sp\public\sdk\inc\specstrings.h -FILE 2739 f:\sp\public\sdk\inc\basetsd.h -FILE 2740 f:\sp\public\sdk\inc\stralign.h -FILE 2741 f:\sp\public\sdk\inc\tvout.h -FILE 2742 f:\sp\public\sdk\inc\winsvc.h -FILE 2743 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2744 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 2745 f:\sp\public\sdk\inc\wingdi.h -FILE 2746 f:\sp\public\sdk\inc\pshpack4.h -FILE 2747 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 2748 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 2749 f:\sp\public\sdk\inc\wincon.h -FILE 2750 f:\sp\public\sdk\inc\imm.h -FILE 2751 f:\sp\public\sdk\inc\winbase.h -FILE 2752 f:\sp\public\sdk\inc\wingdi.h -FILE 2753 f:\sp\public\sdk\inc\winver.h -FILE 2754 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2755 f:\sp\public\sdk\inc\windows.h -FILE 2756 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2757 f:\sp\public\sdk\inc\pshpack2.h -FILE 2758 f:\sp\public\sdk\inc\reason.h -FILE 2759 f:\sp\vctools\crt_bld\self_x86\crt\src\a_cmp.c -FILE 2760 f:\sp\public\sdk\inc\specstrings.h -FILE 2761 f:\sp\public\sdk\inc\basetsd.h -FILE 2762 f:\sp\public\sdk\inc\pshpack4.h -FILE 2763 f:\sp\public\sdk\inc\winnetwk.h -FILE 2764 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2765 f:\sp\public\sdk\inc\stralign.h -FILE 2766 f:\sp\public\sdk\inc\poppack.h -FILE 2767 f:\sp\public\sdk\inc\winsvc.h -FILE 2768 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2769 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 2770 f:\sp\public\sdk\inc\windef.h -FILE 2771 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2772 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2773 f:\sp\public\sdk\inc\winuser.h -FILE 2774 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2775 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2776 f:\sp\public\sdk\inc\mcx.h -FILE 2777 f:\sp\public\sdk\inc\pshpack8.h -FILE 2778 f:\sp\public\sdk\inc\guiddef.h -FILE 2779 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 2780 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2781 f:\sp\public\sdk\inc\winnt.h -FILE 2782 f:\sp\public\sdk\inc\winnls.h -FILE 2783 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2784 f:\sp\public\sdk\inc\pshpack1.h -FILE 2785 f:\sp\public\sdk\inc\winerror.h -FILE 2786 f:\sp\public\sdk\inc\winreg.h -FILE 2787 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2788 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 2789 f:\sp\public\sdk\inc\ddbanned.h -FILE 2790 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2791 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2792 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 2793 f:\sp\public\sdk\inc\tvout.h -FILE 2794 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2795 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\misc\i386\sehprolg4.asm -FILE 2796 f:\sp\public\sdk\inc\poppack.h -FILE 2797 f:\sp\public\sdk\inc\winnetwk.h -FILE 2798 f:\sp\public\sdk\inc\imm.h -FILE 2799 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2800 f:\sp\public\sdk\inc\windef.h -FILE 2801 f:\sp\public\sdk\inc\pshpack1.h -FILE 2802 f:\sp\public\sdk\inc\winver.h -FILE 2803 f:\sp\public\sdk\inc\windows.h -FILE 2804 f:\sp\public\sdk\inc\winnt.h -FILE 2805 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2806 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2807 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2808 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2809 f:\sp\public\sdk\inc\winreg.h -FILE 2810 f:\sp\public\sdk\inc\winbase.h -FILE 2811 f:\sp\vctools\crt_bld\self_x86\crt\src\intel\secchk.c -FILE 2812 f:\sp\public\sdk\inc\winerror.h -FILE 2813 f:\sp\public\sdk\inc\pshpack8.h -FILE 2814 f:\sp\vctools\crt_bld\self_x86\crt\src\process.h -FILE 2815 f:\sp\public\sdk\inc\reason.h -FILE 2816 f:\sp\public\sdk\inc\wincon.h -FILE 2817 f:\sp\public\sdk\inc\ddbanned.h -FILE 2818 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2819 f:\sp\public\sdk\inc\pshpack2.h -FILE 2820 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2821 f:\sp\public\sdk\inc\mcx.h -FILE 2822 f:\sp\public\sdk\inc\winuser.h -FILE 2823 f:\sp\public\sdk\inc\winnls.h -FILE 2824 f:\sp\public\sdk\inc\guiddef.h -FILE 2825 f:\sp\public\sdk\inc\specstrings.h -FILE 2826 f:\sp\public\sdk\inc\basetsd.h -FILE 2827 f:\sp\public\sdk\inc\stralign.h -FILE 2828 f:\sp\public\sdk\inc\tvout.h -FILE 2829 f:\sp\public\sdk\inc\winsvc.h -FILE 2830 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2831 f:\sp\public\sdk\inc\wingdi.h -FILE 2832 f:\sp\public\sdk\inc\pshpack4.h -FILE 2833 f:\sp\public\sdk\inc\poppack.h -FILE 2834 f:\sp\public\sdk\inc\winnetwk.h -FILE 2835 f:\sp\public\sdk\inc\imm.h -FILE 2836 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2837 f:\sp\public\sdk\inc\windef.h -FILE 2838 f:\sp\public\sdk\inc\pshpack1.h -FILE 2839 f:\sp\public\sdk\inc\winver.h -FILE 2840 f:\sp\public\sdk\inc\windows.h -FILE 2841 f:\sp\public\sdk\inc\winnt.h -FILE 2842 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2843 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2844 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2845 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2846 f:\sp\public\sdk\inc\winreg.h -FILE 2847 f:\sp\public\sdk\inc\winbase.h -FILE 2848 f:\sp\vctools\crt_bld\self_x86\crt\src\intel\loadcfg.c -FILE 2849 f:\sp\public\sdk\inc\winerror.h -FILE 2850 f:\sp\public\sdk\inc\pshpack8.h -FILE 2851 f:\sp\public\sdk\inc\reason.h -FILE 2852 f:\sp\public\sdk\inc\wincon.h -FILE 2853 f:\sp\public\sdk\inc\ddbanned.h -FILE 2854 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2855 f:\sp\public\sdk\inc\pshpack2.h -FILE 2856 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2857 f:\sp\public\sdk\inc\mcx.h -FILE 2858 f:\sp\public\sdk\inc\winuser.h -FILE 2859 f:\sp\public\sdk\inc\winnls.h -FILE 2860 f:\sp\public\sdk\inc\guiddef.h -FILE 2861 f:\sp\public\sdk\inc\specstrings.h -FILE 2862 f:\sp\public\sdk\inc\basetsd.h -FILE 2863 f:\sp\public\sdk\inc\stralign.h -FILE 2864 f:\sp\public\sdk\inc\tvout.h -FILE 2865 f:\sp\public\sdk\inc\winsvc.h -FILE 2866 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2867 f:\sp\public\sdk\inc\wingdi.h -FILE 2868 f:\sp\public\sdk\inc\pshpack4.h -FILE 2869 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\misc\i386\exsup4.asm -FILE 2870 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\h\exsup.inc -FILE 2871 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\misc\i386\exsup.asm -FILE 2872 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\h\pversion.inc -FILE 2873 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\h\cmacros.inc -FILE 2874 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\h\exsup.inc -FILE 2875 F:\SP\vctools\crt_bld\SELF_X86\crt\prebuild\misc\i386\nlgsupp.asm -FILE 2876 f:\sp\public\sdk\inc\ntldr.h -FILE 2877 f:\sp\public\sdk\inc\ntpoapi.h -FILE 2878 f:\sp\public\sdk\inc\ntexapi.h -FILE 2879 f:\sp\public\sdk\inc\pshpack1.h -FILE 2880 f:\sp\public\sdk\inc\pshpack8.h -FILE 2881 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 2882 f:\sp\public\sdk\inc\ntdef.h -FILE 2883 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 2884 f:\sp\public\sdk\inc\mce.h -FILE 2885 f:\sp\public\sdk\inc\poppack.h -FILE 2886 f:\sp\public\sdk\inc\ntimage.h -FILE 2887 f:\sp\public\sdk\inc\pshpack2.h -FILE 2888 f:\sp\public\sdk\inc\ntpsapi.h -FILE 2889 f:\sp\public\sdk\inc\nti386.h -FILE 2890 f:\sp\public\sdk\inc\nt.h -FILE 2891 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 2892 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 2893 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 2894 f:\sp\public\sdk\inc\specstrings.h -FILE 2895 f:\sp\public\sdk\inc\basetsd.h -FILE 2896 f:\sp\public\sdk\inc\ntxcapi.h -FILE 2897 f:\sp\public\sdk\inc\guiddef.h -FILE 2898 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\misc\i386\chandler4.c -FILE 2899 f:\sp\public\sdk\inc\ntstatus.h -FILE 2900 f:\sp\public\sdk\inc\ntkeapi.h -FILE 2901 f:\sp\public\sdk\inc\ntconfig.h -FILE 2902 f:\sp\public\sdk\inc\ntregapi.h -FILE 2903 f:\sp\public\sdk\inc\ntmmapi.h -FILE 2904 f:\sp\public\sdk\inc\ntobapi.h -FILE 2905 f:\sp\public\sdk\inc\nxi386.h -FILE 2906 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\process.h -FILE 2907 f:\sp\public\sdk\inc\ntioapi.h -FILE 2908 f:\sp\public\sdk\inc\devioctl.h -FILE 2909 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 2910 f:\sp\public\sdk\inc\ntseapi.h -FILE 2911 f:\sp\public\sdk\inc\ddbanned.h -FILE 2912 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 2913 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 2914 f:\sp\public\sdk\inc\ntnls.h -FILE 2915 f:\sp\public\sdk\inc\ntelfapi.h -FILE 2916 f:\sp\public\sdk\inc\pshpack4.h -FILE 2917 f:\sp\public\sdk\inc\ntiolog.h -FILE 2918 f:\sp\public\sdk\inc\ntlpcapi.h -FILE 2919 f:\sp\public\sdk\inc\ntpnpapi.h -FILE 2920 f:\sp\public\sdk\inc\cfg.h -FILE 2921 f:\sp\public\sdk\inc\pebteb.h -FILE 2922 f:\sp\public\sdk\inc\wincon.h -FILE 2923 f:\sp\public\sdk\inc\imm.h -FILE 2924 f:\sp\public\sdk\inc\winbase.h -FILE 2925 f:\sp\public\sdk\inc\wingdi.h -FILE 2926 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 2927 f:\sp\public\sdk\inc\winver.h -FILE 2928 f:\sp\public\sdk\inc\pshpack2.h -FILE 2929 f:\sp\public\sdk\inc\reason.h -FILE 2930 f:\sp\vctools\crt_bld\self_x86\crt\src\mbdata.h -FILE 2931 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 2932 f:\sp\vctools\crt_bld\self_x86\crt\src\mbsnbico.c -FILE 2933 f:\sp\public\sdk\inc\specstrings.h -FILE 2934 f:\sp\public\sdk\inc\basetsd.h -FILE 2935 f:\sp\public\sdk\inc\pshpack4.h -FILE 2936 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 2937 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h -FILE 2938 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2939 f:\sp\public\sdk\inc\winnetwk.h -FILE 2940 f:\sp\public\sdk\inc\stralign.h -FILE 2941 f:\sp\public\sdk\inc\poppack.h -FILE 2942 f:\sp\public\sdk\inc\winsvc.h -FILE 2943 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2944 f:\sp\public\sdk\inc\windef.h -FILE 2945 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 2946 f:\sp\public\sdk\inc\winuser.h -FILE 2947 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2948 f:\sp\public\sdk\inc\windows.h -FILE 2949 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2950 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2951 f:\sp\public\sdk\inc\mcx.h -FILE 2952 f:\sp\public\sdk\inc\pshpack8.h -FILE 2953 f:\sp\public\sdk\inc\guiddef.h -FILE 2954 f:\sp\public\sdk\inc\winnt.h -FILE 2955 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2956 f:\sp\public\sdk\inc\winnls.h -FILE 2957 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 2958 f:\sp\public\sdk\inc\pshpack1.h -FILE 2959 f:\sp\public\sdk\inc\winerror.h -FILE 2960 f:\sp\public\sdk\inc\winreg.h -FILE 2961 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 2962 f:\sp\public\sdk\inc\ddbanned.h -FILE 2963 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 2964 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 2965 f:\sp\public\sdk\inc\tvout.h -FILE 2966 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2967 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2968 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 2969 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 2970 f:\sp\public\sdk\inc\wincon.h -FILE 2971 f:\sp\public\sdk\inc\imm.h -FILE 2972 f:\sp\public\sdk\inc\winbase.h -FILE 2973 f:\sp\public\sdk\inc\wingdi.h -FILE 2974 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h -FILE 2975 f:\sp\public\sdk\inc\winver.h -FILE 2976 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 2977 f:\sp\public\sdk\inc\windows.h -FILE 2978 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 2979 f:\sp\public\sdk\inc\pshpack2.h -FILE 2980 f:\sp\public\sdk\inc\reason.h -FILE 2981 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 2982 f:\sp\vctools\crt_bld\self_x86\crt\src\mbschr.c -FILE 2983 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 2984 f:\sp\public\sdk\inc\specstrings.h -FILE 2985 f:\sp\public\sdk\inc\basetsd.h -FILE 2986 f:\sp\public\sdk\inc\pshpack4.h -FILE 2987 f:\sp\public\sdk\inc\winnetwk.h -FILE 2988 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 2989 f:\sp\public\sdk\inc\stralign.h -FILE 2990 f:\sp\public\sdk\inc\poppack.h -FILE 2991 f:\sp\public\sdk\inc\winsvc.h -FILE 2992 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 2993 f:\sp\public\sdk\inc\windef.h -FILE 2994 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 2995 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 2996 f:\sp\public\sdk\inc\winuser.h -FILE 2997 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 2998 f:\sp\public\sdk\inc\mcx.h -FILE 2999 f:\sp\public\sdk\inc\pshpack8.h -FILE 3000 f:\sp\public\sdk\inc\guiddef.h -FILE 3001 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 3002 f:\sp\public\sdk\inc\winnt.h -FILE 3003 f:\sp\public\sdk\inc\winnls.h -FILE 3004 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3005 f:\sp\public\sdk\inc\pshpack1.h -FILE 3006 f:\sp\public\sdk\inc\winerror.h -FILE 3007 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 3008 f:\sp\public\sdk\inc\winreg.h -FILE 3009 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3010 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 3011 f:\sp\public\sdk\inc\ddbanned.h -FILE 3012 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3013 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3014 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3015 f:\sp\public\sdk\inc\tvout.h -FILE 3016 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3017 f:\sp\vctools\crt_bld\self_x86\crt\src\mbdata.h -FILE 3018 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 3019 f:\sp\public\sdk\inc\wincon.h -FILE 3020 f:\sp\public\sdk\inc\imm.h -FILE 3021 f:\sp\public\sdk\inc\winbase.h -FILE 3022 f:\sp\public\sdk\inc\wingdi.h -FILE 3023 f:\sp\public\sdk\inc\winver.h -FILE 3024 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 3025 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3026 f:\sp\public\sdk\inc\pshpack2.h -FILE 3027 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 3028 f:\sp\public\sdk\inc\reason.h -FILE 3029 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.c -FILE 3030 f:\sp\public\sdk\inc\specstrings.h -FILE 3031 f:\sp\public\sdk\inc\basetsd.h -FILE 3032 f:\sp\public\sdk\inc\pshpack4.h -FILE 3033 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 3034 f:\sp\public\sdk\inc\winnetwk.h -FILE 3035 f:\sp\public\sdk\inc\stralign.h -FILE 3036 f:\sp\public\sdk\inc\poppack.h -FILE 3037 f:\sp\public\sdk\inc\winsvc.h -FILE 3038 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3039 f:\sp\public\sdk\inc\windef.h -FILE 3040 f:\sp\public\sdk\inc\winuser.h -FILE 3041 f:\sp\public\sdk\inc\windows.h -FILE 3042 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3043 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3044 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3045 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3046 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3047 f:\sp\public\sdk\inc\mcx.h -FILE 3048 f:\sp\public\sdk\inc\pshpack8.h -FILE 3049 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3050 f:\sp\public\sdk\inc\guiddef.h -FILE 3051 f:\sp\public\sdk\inc\winnt.h -FILE 3052 f:\sp\public\sdk\inc\winnls.h -FILE 3053 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3054 f:\sp\vctools\crt_bld\self_x86\crt\src\mbdata.h -FILE 3055 f:\sp\public\sdk\inc\pshpack1.h -FILE 3056 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 3057 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 3058 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 3059 f:\sp\public\sdk\inc\winerror.h -FILE 3060 f:\sp\vctools\crt_bld\self_x86\crt\src\sect_attribs.h -FILE 3061 f:\sp\public\sdk\inc\winreg.h -FILE 3062 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3063 f:\sp\public\sdk\inc\ddbanned.h -FILE 3064 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 3065 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3066 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h -FILE 3067 f:\sp\public\sdk\inc\tvout.h -FILE 3068 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3069 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3070 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3071 f:\sp\public\sdk\inc\wincon.h -FILE 3072 f:\sp\public\sdk\inc\imm.h -FILE 3073 f:\sp\public\sdk\inc\winbase.h -FILE 3074 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3075 f:\sp\public\sdk\inc\wingdi.h -FILE 3076 f:\sp\public\sdk\inc\windef.h -FILE 3077 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h -FILE 3078 f:\sp\public\sdk\inc\winver.h -FILE 3079 f:\sp\public\sdk\inc\pshpack2.h -FILE 3080 f:\sp\public\sdk\inc\reason.h -FILE 3081 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 3082 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 3083 f:\sp\vctools\crt_bld\self_x86\crt\src\ismbbyte.c -FILE 3084 f:\sp\public\sdk\inc\winnt.h -FILE 3085 f:\sp\public\sdk\inc\specstrings.h -FILE 3086 f:\sp\public\sdk\inc\basetsd.h -FILE 3087 f:\sp\public\sdk\inc\pshpack4.h -FILE 3088 f:\sp\public\sdk\inc\winnetwk.h -FILE 3089 f:\sp\public\sdk\inc\stralign.h -FILE 3090 f:\sp\public\sdk\inc\poppack.h -FILE 3091 f:\sp\public\sdk\inc\winsvc.h -FILE 3092 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3093 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3094 f:\sp\public\sdk\inc\winuser.h -FILE 3095 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3096 f:\sp\public\sdk\inc\mcx.h -FILE 3097 f:\sp\public\sdk\inc\pshpack8.h -FILE 3098 f:\sp\public\sdk\inc\guiddef.h -FILE 3099 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3100 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 3101 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3102 f:\sp\public\sdk\inc\windows.h -FILE 3103 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3104 f:\sp\public\sdk\inc\winnls.h -FILE 3105 f:\sp\public\sdk\inc\pshpack1.h -FILE 3106 f:\sp\public\sdk\inc\winerror.h -FILE 3107 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 3108 f:\sp\public\sdk\inc\winreg.h -FILE 3109 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3110 f:\sp\public\sdk\inc\ddbanned.h -FILE 3111 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3112 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3113 f:\sp\public\sdk\inc\tvout.h -FILE 3114 f:\sp\vctools\crt_bld\self_x86\crt\src\mbdata.h -FILE 3115 f:\sp\public\sdk\inc\poppack.h -FILE 3116 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 3117 f:\sp\public\sdk\inc\winnetwk.h -FILE 3118 f:\sp\public\sdk\inc\imm.h -FILE 3119 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3120 f:\sp\public\sdk\inc\windef.h -FILE 3121 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3122 f:\sp\public\sdk\inc\pshpack1.h -FILE 3123 f:\sp\vctools\crt_bld\self_x86\crt\src\msdos.h -FILE 3124 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 3125 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 3126 f:\sp\public\sdk\inc\winver.h -FILE 3127 f:\sp\public\sdk\inc\windows.h -FILE 3128 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3129 f:\sp\public\sdk\inc\winnt.h -FILE 3130 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3131 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3132 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3133 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3134 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3135 f:\sp\public\sdk\inc\winreg.h -FILE 3136 f:\sp\public\sdk\inc\winbase.h -FILE 3137 f:\sp\vctools\crt_bld\self_x86\crt\src\ioinit.c -FILE 3138 f:\sp\public\sdk\inc\winerror.h -FILE 3139 f:\sp\public\sdk\inc\pshpack8.h -FILE 3140 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3141 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3142 f:\sp\public\sdk\inc\reason.h -FILE 3143 f:\sp\public\sdk\inc\wincon.h -FILE 3144 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 3145 f:\sp\public\sdk\inc\ddbanned.h -FILE 3146 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3147 f:\sp\public\sdk\inc\pshpack2.h -FILE 3148 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3149 f:\sp\public\sdk\inc\mcx.h -FILE 3150 f:\sp\public\sdk\inc\winuser.h -FILE 3151 f:\sp\public\sdk\inc\winnls.h -FILE 3152 f:\sp\public\sdk\inc\guiddef.h -FILE 3153 f:\sp\public\sdk\inc\specstrings.h -FILE 3154 f:\sp\public\sdk\inc\basetsd.h -FILE 3155 f:\sp\public\sdk\inc\stralign.h -FILE 3156 f:\sp\public\sdk\inc\tvout.h -FILE 3157 f:\sp\public\sdk\inc\winsvc.h -FILE 3158 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3159 f:\sp\public\sdk\inc\wingdi.h -FILE 3160 f:\sp\public\sdk\inc\pshpack4.h -FILE 3161 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\ulldvrm.asm -FILE 3162 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 3163 F:\SP\vctools\crt_bld\SELF_X86\crt\src\mm.inc -FILE 3164 F:\SP\vctools\crt_bld\SELF_X86\crt\src\intel\llmul.asm -FILE 3165 F:\SP\vctools\crt_bld\SELF_X86\crt\src\cruntime.inc -FILE 3166 F:\SP\vctools\crt_bld\SELF_X86\crt\src\mm.inc -FILE 3167 f:\sp\public\sdk\inc\poppack.h -FILE 3168 f:\sp\public\sdk\inc\winnetwk.h -FILE 3169 f:\sp\public\sdk\inc\imm.h -FILE 3170 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3171 f:\sp\public\sdk\inc\windef.h -FILE 3172 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3173 f:\sp\public\sdk\inc\pshpack1.h -FILE 3174 f:\sp\public\sdk\inc\winver.h -FILE 3175 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3176 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3177 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3178 f:\sp\public\sdk\inc\winnt.h -FILE 3179 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3180 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3181 f:\sp\public\sdk\inc\winreg.h -FILE 3182 f:\sp\vctools\crt_bld\self_x86\crt\src\_newmode.c -FILE 3183 f:\sp\public\sdk\inc\winbase.h -FILE 3184 f:\sp\public\sdk\inc\winerror.h -FILE 3185 f:\sp\public\sdk\inc\pshpack8.h -FILE 3186 f:\sp\public\sdk\inc\reason.h -FILE 3187 f:\sp\public\sdk\inc\wincon.h -FILE 3188 f:\sp\public\sdk\inc\ddbanned.h -FILE 3189 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3190 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3191 f:\sp\public\sdk\inc\pshpack2.h -FILE 3192 f:\sp\public\sdk\inc\mcx.h -FILE 3193 f:\sp\public\sdk\inc\winuser.h -FILE 3194 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3195 f:\sp\public\sdk\inc\winnls.h -FILE 3196 f:\sp\public\sdk\inc\guiddef.h -FILE 3197 f:\sp\public\sdk\inc\windows.h -FILE 3198 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3199 f:\sp\public\sdk\inc\specstrings.h -FILE 3200 f:\sp\public\sdk\inc\basetsd.h -FILE 3201 f:\sp\public\sdk\inc\stralign.h -FILE 3202 f:\sp\public\sdk\inc\tvout.h -FILE 3203 f:\sp\public\sdk\inc\winsvc.h -FILE 3204 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3205 f:\sp\public\sdk\inc\wingdi.h -FILE 3206 f:\sp\public\sdk\inc\pshpack4.h -FILE 3207 f:\sp\vctools\crt_bld\self_x86\crt\src\new.h -FILE 3208 f:\sp\public\sdk\inc\winerror.h -FILE 3209 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcsup.h -FILE 3210 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcapi.h -FILE 3211 f:\sp\public\sdk\inc\winreg.h -FILE 3212 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3213 f:\sp\public\sdk\inc\tvout.h -FILE 3214 f:\sp\vctools\crt_bld\self_x86\crt\src\delete.cpp -FILE 3215 f:\sp\public\sdk\inc\wincon.h -FILE 3216 f:\sp\public\sdk\inc\imm.h -FILE 3217 f:\sp\public\sdk\inc\winbase.h -FILE 3218 f:\sp\public\sdk\inc\wingdi.h -FILE 3219 f:\sp\public\sdk\inc\winver.h -FILE 3220 f:\sp\public\sdk\inc\windows.h -FILE 3221 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3222 f:\sp\public\sdk\inc\pshpack2.h -FILE 3223 f:\sp\public\sdk\inc\reason.h -FILE 3224 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 3225 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3226 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3227 f:\sp\public\sdk\inc\specstrings.h -FILE 3228 f:\sp\public\sdk\inc\basetsd.h -FILE 3229 f:\sp\public\sdk\inc\pshpack4.h -FILE 3230 f:\sp\public\sdk\inc\winnetwk.h -FILE 3231 f:\sp\public\sdk\inc\stralign.h -FILE 3232 f:\sp\public\sdk\inc\poppack.h -FILE 3233 f:\sp\public\sdk\inc\winsvc.h -FILE 3234 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3235 f:\sp\public\sdk\inc\windef.h -FILE 3236 f:\sp\public\sdk\inc\winuser.h -FILE 3237 f:\sp\public\sdk\inc\mcx.h -FILE 3238 f:\sp\public\sdk\inc\pshpack8.h -FILE 3239 f:\sp\public\sdk\inc\ddbanned.h -FILE 3240 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3241 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3242 f:\sp\public\sdk\inc\guiddef.h -FILE 3243 f:\sp\public\sdk\inc\winnt.h -FILE 3244 f:\sp\public\sdk\inc\winnls.h -FILE 3245 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3246 f:\sp\public\sdk\inc\pshpack1.h -FILE 3247 f:\sp\public\sdk\inc\tvout.h -FILE 3248 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3249 f:\sp\vctools\crt_bld\self_x86\crt\src\process.h -FILE 3250 f:\sp\public\sdk\inc\wincon.h -FILE 3251 f:\sp\public\sdk\inc\imm.h -FILE 3252 f:\sp\public\sdk\inc\winbase.h -FILE 3253 f:\sp\public\sdk\inc\wingdi.h -FILE 3254 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3255 f:\sp\public\sdk\inc\winver.h -FILE 3256 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3257 f:\sp\public\sdk\inc\windows.h -FILE 3258 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3259 f:\sp\public\sdk\inc\pshpack2.h -FILE 3260 f:\sp\vctools\crt_bld\self_x86\crt\src\handler.cpp -FILE 3261 f:\sp\public\sdk\inc\reason.h -FILE 3262 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 3263 f:\sp\public\sdk\inc\specstrings.h -FILE 3264 f:\sp\public\sdk\inc\basetsd.h -FILE 3265 f:\sp\public\sdk\inc\pshpack4.h -FILE 3266 f:\sp\public\sdk\inc\winnetwk.h -FILE 3267 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 3268 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3269 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3270 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3271 f:\sp\public\sdk\inc\stralign.h -FILE 3272 f:\sp\public\sdk\inc\poppack.h -FILE 3273 f:\sp\public\sdk\inc\winsvc.h -FILE 3274 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3275 f:\sp\public\sdk\inc\windef.h -FILE 3276 f:\sp\public\sdk\inc\winuser.h -FILE 3277 f:\sp\public\sdk\inc\mcx.h -FILE 3278 f:\sp\public\sdk\inc\pshpack8.h -FILE 3279 f:\sp\public\sdk\inc\guiddef.h -FILE 3280 f:\sp\public\sdk\inc\winnt.h -FILE 3281 f:\sp\public\sdk\inc\winnls.h -FILE 3282 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3283 f:\sp\public\sdk\inc\pshpack1.h -FILE 3284 f:\sp\public\sdk\inc\winerror.h -FILE 3285 f:\sp\public\sdk\inc\ddbanned.h -FILE 3286 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3287 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3288 f:\sp\public\sdk\inc\winreg.h -FILE 3289 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3290 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3291 f:\sp\vctools\crt_bld\self_x86\crt\src\new.h -FILE 3292 f:\sp\public\sdk\inc\winsvc.h -FILE 3293 f:\sp\public\sdk\inc\wingdi.h -FILE 3294 f:\sp\public\sdk\inc\pshpack4.h -FILE 3295 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 3296 f:\sp\public\sdk\inc\poppack.h -FILE 3297 f:\sp\public\sdk\inc\winnt.h -FILE 3298 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3299 f:\sp\public\sdk\inc\winnetwk.h -FILE 3300 f:\sp\public\sdk\inc\imm.h -FILE 3301 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3302 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 3303 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3304 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3305 f:\sp\public\sdk\inc\pshpack1.h -FILE 3306 f:\sp\public\sdk\inc\winver.h -FILE 3307 f:\sp\public\sdk\inc\guiddef.h -FILE 3308 f:\sp\public\sdk\inc\specstrings.h -FILE 3309 f:\sp\public\sdk\inc\basetsd.h -FILE 3310 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h -FILE 3311 f:\sp\vctools\crt_bld\self_x86\crt\src\sbheap.c -FILE 3312 f:\sp\public\sdk\inc\windows.h -FILE 3313 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3314 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3315 f:\sp\public\sdk\inc\winreg.h -FILE 3316 f:\sp\public\sdk\inc\winbase.h -FILE 3317 f:\sp\public\sdk\inc\winerror.h -FILE 3318 f:\sp\public\sdk\inc\pshpack8.h -FILE 3319 f:\sp\public\sdk\inc\ddbanned.h -FILE 3320 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3321 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3322 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3323 f:\sp\public\sdk\inc\reason.h -FILE 3324 f:\sp\public\sdk\inc\wincon.h -FILE 3325 f:\sp\public\sdk\inc\pshpack2.h -FILE 3326 f:\sp\public\sdk\inc\mcx.h -FILE 3327 f:\sp\public\sdk\inc\winuser.h -FILE 3328 f:\sp\public\sdk\inc\winnls.h -FILE 3329 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3330 f:\sp\public\sdk\inc\windef.h -FILE 3331 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3332 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3333 f:\sp\public\sdk\inc\stralign.h -FILE 3334 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3335 f:\sp\public\sdk\inc\tvout.h -FILE 3336 f:\sp\public\sdk\inc\winver.h -FILE 3337 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcsup.h -FILE 3338 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcapi.h -FILE 3339 f:\sp\public\sdk\inc\guiddef.h -FILE 3340 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3341 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3342 f:\sp\public\sdk\inc\specstrings.h -FILE 3343 f:\sp\public\sdk\inc\basetsd.h -FILE 3344 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h -FILE 3345 f:\sp\public\sdk\inc\windows.h -FILE 3346 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3347 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3348 f:\sp\public\sdk\inc\winreg.h -FILE 3349 f:\sp\public\sdk\inc\winbase.h -FILE 3350 f:\sp\public\sdk\inc\winerror.h -FILE 3351 f:\sp\public\sdk\inc\pshpack8.h -FILE 3352 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3353 f:\sp\public\sdk\inc\reason.h -FILE 3354 f:\sp\public\sdk\inc\wincon.h -FILE 3355 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 3356 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3357 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3358 f:\sp\public\sdk\inc\pshpack2.h -FILE 3359 f:\sp\public\sdk\inc\mcx.h -FILE 3360 f:\sp\public\sdk\inc\winuser.h -FILE 3361 f:\sp\public\sdk\inc\winnls.h -FILE 3362 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3363 f:\sp\public\sdk\inc\windef.h -FILE 3364 f:\sp\public\sdk\inc\stralign.h -FILE 3365 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3366 f:\sp\public\sdk\inc\tvout.h -FILE 3367 f:\sp\public\sdk\inc\winsvc.h -FILE 3368 f:\sp\vctools\crt_bld\self_x86\crt\src\realloc.c -FILE 3369 f:\sp\public\sdk\inc\wingdi.h -FILE 3370 f:\sp\public\sdk\inc\pshpack4.h -FILE 3371 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3372 f:\sp\public\sdk\inc\poppack.h -FILE 3373 f:\sp\public\sdk\inc\winnt.h -FILE 3374 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3375 f:\sp\public\sdk\inc\winnetwk.h -FILE 3376 f:\sp\public\sdk\inc\ddbanned.h -FILE 3377 f:\sp\public\sdk\inc\imm.h -FILE 3378 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3379 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3380 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 3381 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3382 f:\sp\public\sdk\inc\pshpack1.h -FILE 3383 f:\sp\public\sdk\inc\pshpack2.h -FILE 3384 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h -FILE 3385 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3386 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3387 f:\sp\public\sdk\inc\mcx.h -FILE 3388 f:\sp\public\sdk\inc\winuser.h -FILE 3389 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3390 f:\sp\public\sdk\inc\winnls.h -FILE 3391 f:\sp\public\sdk\inc\guiddef.h -FILE 3392 f:\sp\public\sdk\inc\windows.h -FILE 3393 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3394 f:\sp\public\sdk\inc\specstrings.h -FILE 3395 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 3396 f:\sp\public\sdk\inc\basetsd.h -FILE 3397 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3398 f:\sp\public\sdk\inc\stralign.h -FILE 3399 f:\sp\public\sdk\inc\tvout.h -FILE 3400 f:\sp\public\sdk\inc\winsvc.h -FILE 3401 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3402 f:\sp\public\sdk\inc\wingdi.h -FILE 3403 f:\sp\public\sdk\inc\pshpack4.h -FILE 3404 f:\sp\public\sdk\inc\poppack.h -FILE 3405 f:\sp\public\sdk\inc\winnetwk.h -FILE 3406 f:\sp\public\sdk\inc\imm.h -FILE 3407 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 3408 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3409 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3410 f:\sp\public\sdk\inc\windef.h -FILE 3411 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3412 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3413 f:\sp\vctools\crt_bld\self_x86\crt\src\msize.c -FILE 3414 f:\sp\public\sdk\inc\pshpack1.h -FILE 3415 f:\sp\public\sdk\inc\winver.h -FILE 3416 f:\sp\public\sdk\inc\winnt.h -FILE 3417 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3418 f:\sp\public\sdk\inc\winreg.h -FILE 3419 f:\sp\public\sdk\inc\ddbanned.h -FILE 3420 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3421 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3422 f:\sp\public\sdk\inc\winbase.h -FILE 3423 f:\sp\public\sdk\inc\winerror.h -FILE 3424 f:\sp\public\sdk\inc\pshpack8.h -FILE 3425 f:\sp\public\sdk\inc\reason.h -FILE 3426 f:\sp\public\sdk\inc\wincon.h -FILE 3427 f:\sp\public\sdk\inc\pshpack2.h -FILE 3428 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3429 f:\sp\public\sdk\inc\mcx.h -FILE 3430 f:\sp\public\sdk\inc\winuser.h -FILE 3431 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3432 f:\sp\public\sdk\inc\winnls.h -FILE 3433 f:\sp\public\sdk\inc\guiddef.h -FILE 3434 f:\sp\public\sdk\inc\windows.h -FILE 3435 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3436 f:\sp\public\sdk\inc\specstrings.h -FILE 3437 f:\sp\public\sdk\inc\basetsd.h -FILE 3438 f:\sp\public\sdk\inc\stralign.h -FILE 3439 f:\sp\public\sdk\inc\tvout.h -FILE 3440 f:\sp\public\sdk\inc\winsvc.h -FILE 3441 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3442 f:\sp\public\sdk\inc\wingdi.h -FILE 3443 f:\sp\public\sdk\inc\pshpack4.h -FILE 3444 f:\sp\public\sdk\inc\poppack.h -FILE 3445 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3446 f:\sp\public\sdk\inc\winnetwk.h -FILE 3447 f:\sp\public\sdk\inc\imm.h -FILE 3448 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 3449 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3450 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3451 f:\sp\public\sdk\inc\windef.h -FILE 3452 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3453 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 3454 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3455 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.c -FILE 3456 f:\sp\public\sdk\inc\pshpack1.h -FILE 3457 f:\sp\public\sdk\inc\winver.h -FILE 3458 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcsup.h -FILE 3459 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcapi.h -FILE 3460 f:\sp\vctools\crt_bld\self_x86\crt\src\rterr.h -FILE 3461 f:\sp\public\sdk\inc\winnt.h -FILE 3462 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h -FILE 3463 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3464 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3465 f:\sp\public\sdk\inc\winreg.h -FILE 3466 f:\sp\public\sdk\inc\ddbanned.h -FILE 3467 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3468 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3469 f:\sp\public\sdk\inc\winbase.h -FILE 3470 f:\sp\public\sdk\inc\winerror.h -FILE 3471 f:\sp\public\sdk\inc\pshpack8.h -FILE 3472 f:\sp\public\sdk\inc\reason.h -FILE 3473 f:\sp\public\sdk\inc\wincon.h -FILE 3474 f:\sp\public\sdk\inc\winver.h -FILE 3475 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3476 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3477 f:\sp\public\sdk\inc\winnt.h -FILE 3478 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3479 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3480 f:\sp\public\sdk\inc\winreg.h -FILE 3481 f:\sp\public\sdk\inc\winbase.h -FILE 3482 f:\sp\public\sdk\inc\winerror.h -FILE 3483 f:\sp\public\sdk\inc\pshpack8.h -FILE 3484 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3485 f:\sp\public\sdk\inc\reason.h -FILE 3486 f:\sp\public\sdk\inc\wincon.h -FILE 3487 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 3488 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3489 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3490 f:\sp\public\sdk\inc\pshpack2.h -FILE 3491 f:\sp\public\sdk\inc\mcx.h -FILE 3492 f:\sp\public\sdk\inc\winuser.h -FILE 3493 f:\sp\public\sdk\inc\winnls.h -FILE 3494 f:\sp\public\sdk\inc\guiddef.h -FILE 3495 f:\sp\public\sdk\inc\stralign.h -FILE 3496 f:\sp\public\sdk\inc\specstrings.h -FILE 3497 f:\sp\public\sdk\inc\basetsd.h -FILE 3498 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h -FILE 3499 f:\sp\public\sdk\inc\windows.h -FILE 3500 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3501 f:\sp\public\sdk\inc\tvout.h -FILE 3502 f:\sp\public\sdk\inc\winsvc.h -FILE 3503 f:\sp\vctools\crt_bld\self_x86\crt\src\heapinit.c -FILE 3504 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3505 f:\sp\public\sdk\inc\wingdi.h -FILE 3506 f:\sp\public\sdk\inc\pshpack4.h -FILE 3507 f:\sp\public\sdk\inc\poppack.h -FILE 3508 f:\sp\public\sdk\inc\winnetwk.h -FILE 3509 f:\sp\public\sdk\inc\ddbanned.h -FILE 3510 f:\sp\public\sdk\inc\imm.h -FILE 3511 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3512 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3513 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3514 f:\sp\public\sdk\inc\windef.h -FILE 3515 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3516 f:\sp\public\sdk\inc\pshpack1.h -FILE 3517 f:\sp\public\sdk\inc\pshpack2.h -FILE 3518 f:\sp\public\sdk\inc\mcx.h -FILE 3519 f:\sp\public\sdk\inc\winuser.h -FILE 3520 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h -FILE 3521 f:\sp\public\sdk\inc\winnls.h -FILE 3522 f:\sp\public\sdk\inc\guiddef.h -FILE 3523 f:\sp\public\sdk\inc\windows.h -FILE 3524 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3525 f:\sp\public\sdk\inc\specstrings.h -FILE 3526 f:\sp\public\sdk\inc\basetsd.h -FILE 3527 f:\sp\public\sdk\inc\stralign.h -FILE 3528 f:\sp\public\sdk\inc\tvout.h -FILE 3529 f:\sp\public\sdk\inc\winsvc.h -FILE 3530 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3531 f:\sp\public\sdk\inc\wingdi.h -FILE 3532 f:\sp\public\sdk\inc\pshpack4.h -FILE 3533 f:\sp\public\sdk\inc\poppack.h -FILE 3534 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3535 f:\sp\public\sdk\inc\winnetwk.h -FILE 3536 f:\sp\public\sdk\inc\imm.h -FILE 3537 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3538 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 3539 f:\sp\public\sdk\inc\windef.h -FILE 3540 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3541 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3542 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 3543 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3544 f:\sp\public\sdk\inc\pshpack1.h -FILE 3545 f:\sp\vctools\crt_bld\self_x86\crt\src\free.c -FILE 3546 f:\sp\public\sdk\inc\winver.h -FILE 3547 f:\sp\public\sdk\inc\winnt.h -FILE 3548 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3549 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcsup.h -FILE 3550 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcapi.h -FILE 3551 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3552 f:\sp\public\sdk\inc\winreg.h -FILE 3553 f:\sp\public\sdk\inc\ddbanned.h -FILE 3554 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3555 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3556 f:\sp\public\sdk\inc\winbase.h -FILE 3557 f:\sp\public\sdk\inc\winerror.h -FILE 3558 f:\sp\public\sdk\inc\pshpack8.h -FILE 3559 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3560 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3561 f:\sp\public\sdk\inc\reason.h -FILE 3562 f:\sp\public\sdk\inc\wincon.h -FILE 3563 f:\sp\public\sdk\inc\pshpack2.h -FILE 3564 f:\sp\public\sdk\inc\mcx.h -FILE 3565 f:\sp\public\sdk\inc\winuser.h -FILE 3566 f:\sp\public\sdk\inc\winnls.h -FILE 3567 f:\sp\public\sdk\inc\guiddef.h -FILE 3568 f:\sp\public\sdk\inc\windows.h -FILE 3569 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3570 f:\sp\public\sdk\inc\specstrings.h -FILE 3571 f:\sp\public\sdk\inc\basetsd.h -FILE 3572 f:\sp\public\sdk\inc\stralign.h -FILE 3573 f:\sp\public\sdk\inc\tvout.h -FILE 3574 f:\sp\public\sdk\inc\winsvc.h -FILE 3575 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3576 f:\sp\public\sdk\inc\wingdi.h -FILE 3577 f:\sp\public\sdk\inc\pshpack4.h -FILE 3578 f:\sp\public\sdk\inc\poppack.h -FILE 3579 f:\sp\public\sdk\inc\winnetwk.h -FILE 3580 f:\sp\public\sdk\inc\imm.h -FILE 3581 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3582 f:\sp\public\sdk\inc\windef.h -FILE 3583 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 3584 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3585 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3586 f:\sp\public\sdk\inc\pshpack1.h -FILE 3587 f:\sp\vctools\crt_bld\self_x86\crt\src\crtheap.c -FILE 3588 f:\sp\public\sdk\inc\winver.h -FILE 3589 f:\sp\public\sdk\inc\winnt.h -FILE 3590 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3591 f:\sp\public\sdk\inc\winreg.h -FILE 3592 f:\sp\public\sdk\inc\ddbanned.h -FILE 3593 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3594 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3595 f:\sp\public\sdk\inc\winbase.h -FILE 3596 f:\sp\public\sdk\inc\winerror.h -FILE 3597 f:\sp\public\sdk\inc\pshpack8.h -FILE 3598 f:\sp\public\sdk\inc\reason.h -FILE 3599 f:\sp\public\sdk\inc\wincon.h -FILE 3600 f:\sp\public\sdk\inc\pshpack2.h -FILE 3601 f:\sp\public\sdk\inc\mcx.h -FILE 3602 f:\sp\public\sdk\inc\winuser.h -FILE 3603 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3604 f:\sp\public\sdk\inc\winnls.h -FILE 3605 f:\sp\public\sdk\inc\stralign.h -FILE 3606 f:\sp\public\sdk\inc\tvout.h -FILE 3607 f:\sp\public\sdk\inc\winsvc.h -FILE 3608 f:\sp\public\sdk\inc\wingdi.h -FILE 3609 f:\sp\public\sdk\inc\winnt.h -FILE 3610 f:\sp\public\sdk\inc\pshpack4.h -FILE 3611 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3612 f:\sp\public\sdk\inc\poppack.h -FILE 3613 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3614 f:\sp\public\sdk\inc\winnetwk.h -FILE 3615 f:\sp\public\sdk\inc\imm.h -FILE 3616 f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.h -FILE 3617 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3618 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3619 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 3620 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3621 f:\sp\public\sdk\inc\pshpack1.h -FILE 3622 f:\sp\vctools\crt_bld\self_x86\crt\src\calloc.c -FILE 3623 f:\sp\public\sdk\inc\winver.h -FILE 3624 f:\sp\vctools\crt_bld\self_x86\crt\src\winheap.h -FILE 3625 f:\sp\public\sdk\inc\guiddef.h -FILE 3626 f:\sp\public\sdk\inc\windows.h -FILE 3627 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3628 f:\sp\public\sdk\inc\specstrings.h -FILE 3629 f:\sp\public\sdk\inc\basetsd.h -FILE 3630 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcsup.h -FILE 3631 f:\sp\vctools\crt_bld\self_x86\crt\src\rtcapi.h -FILE 3632 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3633 f:\sp\public\sdk\inc\winreg.h -FILE 3634 f:\sp\public\sdk\inc\ddbanned.h -FILE 3635 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3636 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3637 f:\sp\public\sdk\inc\winbase.h -FILE 3638 f:\sp\public\sdk\inc\winerror.h -FILE 3639 f:\sp\public\sdk\inc\pshpack8.h -FILE 3640 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3641 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3642 f:\sp\public\sdk\inc\reason.h -FILE 3643 f:\sp\public\sdk\inc\wincon.h -FILE 3644 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3645 f:\sp\public\sdk\inc\windef.h -FILE 3646 f:\sp\public\sdk\inc\wincon.h -FILE 3647 f:\sp\public\sdk\inc\imm.h -FILE 3648 f:\sp\public\sdk\inc\winbase.h -FILE 3649 f:\sp\public\sdk\inc\wingdi.h -FILE 3650 f:\sp\public\sdk\inc\winver.h -FILE 3651 f:\sp\public\sdk\inc\pshpack2.h -FILE 3652 f:\sp\public\sdk\inc\reason.h -FILE 3653 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sect_attribs.h -FILE 3654 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\unhandld.cpp -FILE 3655 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\eh.h -FILE 3656 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\errno.h -FILE 3657 f:\sp\public\sdk\inc\specstrings.h -FILE 3658 f:\sp\public\sdk\inc\basetsd.h -FILE 3659 f:\sp\public\sdk\inc\pshpack4.h -FILE 3660 f:\sp\public\sdk\inc\winnetwk.h -FILE 3661 f:\sp\public\sdk\inc\stralign.h -FILE 3662 f:\sp\public\sdk\inc\poppack.h -FILE 3663 f:\sp\public\sdk\inc\winsvc.h -FILE 3664 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 3665 f:\sp\public\sdk\inc\windef.h -FILE 3666 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehhooks.h -FILE 3667 f:\sp\public\sdk\inc\winuser.h -FILE 3668 f:\sp\public\sdk\inc\windows.h -FILE 3669 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 3670 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 3671 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 3672 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehassert.h -FILE 3673 f:\sp\public\sdk\inc\mcx.h -FILE 3674 f:\sp\public\sdk\inc\pshpack8.h -FILE 3675 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\internal.h -FILE 3676 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 3677 f:\sp\public\sdk\inc\guiddef.h -FILE 3678 f:\sp\public\sdk\inc\winnt.h -FILE 3679 f:\sp\public\sdk\inc\winnls.h -FILE 3680 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 3681 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdlib.h -FILE 3682 f:\sp\public\sdk\inc\pshpack1.h -FILE 3683 f:\sp\public\sdk\inc\winerror.h -FILE 3684 f:\sp\vctools\langapi\include\ehdata.h -FILE 3685 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stddef.h -FILE 3686 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h -FILE 3687 f:\sp\public\sdk\inc\winreg.h -FILE 3688 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 3689 f:\sp\public\sdk\inc\ddbanned.h -FILE 3690 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 3691 f:\sp\public\sdk\inc\tvout.h -FILE 3692 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 3693 f:\sp\public\sdk\inc\specstrings.h -FILE 3694 f:\sp\public\sdk\inc\basetsd.h -FILE 3695 f:\sp\public\sdk\inc\pshpack4.h -FILE 3696 f:\sp\public\sdk\inc\winnetwk.h -FILE 3697 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 3698 f:\sp\public\sdk\inc\stralign.h -FILE 3699 f:\sp\public\sdk\inc\poppack.h -FILE 3700 f:\sp\public\sdk\inc\winsvc.h -FILE 3701 f:\sp\public\sdk\inc\winuser.h -FILE 3702 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 3703 f:\sp\public\sdk\inc\windef.h -FILE 3704 f:\sp\vctools\langapi\undname\undname.cxx -FILE 3705 f:\sp\public\sdk\inc\mcx.h -FILE 3706 f:\sp\public\sdk\inc\pshpack8.h -FILE 3707 f:\sp\public\sdk\inc\guiddef.h -FILE 3708 f:\sp\vctools\langapi\undname\utf8.h -FILE 3709 f:\sp\public\sdk\inc\winnls.h -FILE 3710 f:\sp\public\sdk\inc\pshpack1.h -FILE 3711 f:\sp\public\sdk\inc\winnt.h -FILE 3712 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 3713 f:\sp\public\sdk\inc\winerror.h -FILE 3714 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\swprintf.inl -FILE 3715 f:\sp\vctools\langapi\undname\undname.hxx -FILE 3716 f:\sp\vctools\langapi\undname\undname.h -FILE 3717 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdlib.h -FILE 3718 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 3719 f:\sp\public\sdk\inc\winreg.h -FILE 3720 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 3721 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 3722 f:\sp\public\sdk\inc\tvout.h -FILE 3723 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdio.h -FILE 3724 f:\sp\public\sdk\inc\wincon.h -FILE 3725 f:\sp\public\sdk\inc\imm.h -FILE 3726 f:\sp\public\sdk\inc\winbase.h -FILE 3727 f:\sp\public\sdk\inc\wingdi.h -FILE 3728 f:\sp\public\sdk\inc\winver.h -FILE 3729 f:\sp\public\sdk\inc\pshpack2.h -FILE 3730 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\mtdll.h -FILE 3731 f:\sp\public\sdk\inc\windows.h -FILE 3732 f:\sp\public\sdk\inc\reason.h -FILE 3733 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 3734 f:\sp\public\sdk\inc\ddbanned.h -FILE 3735 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 3736 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 3737 f:\sp\vctools\langapi\undname\undname.inl -FILE 3738 f:\sp\public\sdk\inc\guiddef.h -FILE 3739 f:\sp\public\sdk\inc\winnt.h -FILE 3740 f:\sp\public\sdk\inc\winnls.h -FILE 3741 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 3742 f:\sp\public\sdk\inc\pshpack1.h -FILE 3743 f:\sp\public\sdk\inc\winerror.h -FILE 3744 f:\sp\public\sdk\inc\winreg.h -FILE 3745 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 3746 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdlib.h -FILE 3747 f:\sp\public\sdk\inc\tvout.h -FILE 3748 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\typname.cpp -FILE 3749 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h -FILE 3750 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\cstddef -FILE 3751 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stddef.h -FILE 3752 f:\sp\public\sdk\inc\wincon.h -FILE 3753 f:\sp\public\sdk\inc\imm.h -FILE 3754 f:\sp\public\sdk\inc\winbase.h -FILE 3755 f:\sp\public\sdk\inc\wingdi.h -FILE 3756 f:\sp\public\sdk\inc\winver.h -FILE 3757 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 3758 f:\sp\public\sdk\inc\windows.h -FILE 3759 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 3760 f:\sp\public\sdk\inc\pshpack2.h -FILE 3761 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\mtdll.h -FILE 3762 f:\sp\public\sdk\inc\reason.h -FILE 3763 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sect_attribs.h -FILE 3764 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\dbgint.h -FILE 3765 f:\sp\public\sdk\inc\specstrings.h -FILE 3766 f:\sp\public\sdk\inc\basetsd.h -FILE 3767 f:\sp\public\sdk\inc\pshpack4.h -FILE 3768 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\typeinfo.h -FILE 3769 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\typeinfo -FILE 3770 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\exception -FILE 3771 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\xstddef -FILE 3772 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\eh.h -FILE 3773 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\yvals.h -FILE 3774 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\use_ansi.h -FILE 3775 f:\sp\public\sdk\inc\winnetwk.h -FILE 3776 f:\sp\vctools\langapi\undname\undname.h -FILE 3777 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\errno.h -FILE 3778 f:\sp\public\sdk\inc\stralign.h -FILE 3779 f:\sp\public\sdk\inc\poppack.h -FILE 3780 f:\sp\public\sdk\inc\winsvc.h -FILE 3781 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 3782 f:\sp\public\sdk\inc\windef.h -FILE 3783 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\internal.h -FILE 3784 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 3785 f:\sp\public\sdk\inc\winuser.h -FILE 3786 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 3787 f:\sp\public\sdk\inc\ddbanned.h -FILE 3788 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 3789 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 3790 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\malloc.h -FILE 3791 f:\sp\public\sdk\inc\mcx.h -FILE 3792 f:\sp\public\sdk\inc\pshpack8.h -FILE 3793 f:\sp\public\sdk\inc\winnls.h -FILE 3794 f:\sp\public\sdk\inc\pshpack1.h -FILE 3795 f:\sp\public\sdk\inc\winnt.h -FILE 3796 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 3797 f:\sp\public\sdk\inc\winerror.h -FILE 3798 f:\sp\public\sdk\inc\winreg.h -FILE 3799 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 3800 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 3801 f:\sp\public\sdk\inc\tvout.h -FILE 3802 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\dbgint.h -FILE 3803 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h -FILE 3804 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\cstddef -FILE 3805 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stddef.h -FILE 3806 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\typinfo.cpp -FILE 3807 f:\sp\public\sdk\inc\wincon.h -FILE 3808 f:\sp\public\sdk\inc\imm.h -FILE 3809 f:\sp\public\sdk\inc\winbase.h -FILE 3810 f:\sp\public\sdk\inc\wingdi.h -FILE 3811 f:\sp\public\sdk\inc\winver.h -FILE 3812 f:\sp\public\sdk\inc\pshpack2.h -FILE 3813 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\mtdll.h -FILE 3814 f:\sp\public\sdk\inc\reason.h -FILE 3815 f:\sp\public\sdk\inc\windows.h -FILE 3816 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 3817 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdlib.h -FILE 3818 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 3819 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 3820 f:\sp\public\sdk\inc\specstrings.h -FILE 3821 f:\sp\public\sdk\inc\basetsd.h -FILE 3822 f:\sp\public\sdk\inc\pshpack4.h -FILE 3823 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\typeinfo -FILE 3824 f:\sp\public\sdk\inc\winnetwk.h -FILE 3825 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\exception -FILE 3826 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\xstddef -FILE 3827 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\eh.h -FILE 3828 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\yvals.h -FILE 3829 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\stdhpp\use_ansi.h -FILE 3830 f:\sp\public\sdk\inc\stralign.h -FILE 3831 f:\sp\public\sdk\inc\poppack.h -FILE 3832 f:\sp\public\sdk\inc\winsvc.h -FILE 3833 f:\sp\public\sdk\inc\winuser.h -FILE 3834 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 3835 f:\sp\public\sdk\inc\windef.h -FILE 3836 f:\sp\vctools\langapi\undname\undname.h -FILE 3837 f:\sp\public\sdk\inc\ddbanned.h -FILE 3838 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\malloc.h -FILE 3839 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 3840 f:\sp\public\sdk\inc\mcx.h -FILE 3841 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 3842 f:\sp\public\sdk\inc\pshpack8.h -FILE 3843 f:\sp\public\sdk\inc\guiddef.h -FILE 3844 f:\sp\public\sdk\inc\poppack.h -FILE 3845 f:\sp\public\sdk\inc\winsvc.h -FILE 3846 f:\sp\public\sdk\inc\windows.h -FILE 3847 f:\sp\public\sdk\inc\winuser.h -FILE 3848 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdarg.h -FILE 3849 f:\sp\public\sdk\inc\windef.h -FILE 3850 f:\sp\public\sdk\inc\mcx.h -FILE 3851 f:\sp\public\sdk\inc\pshpack8.h -FILE 3852 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stdlib.h -FILE 3853 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\limits.h -FILE 3854 f:\sp\public\sdk\inc\guiddef.h -FILE 3855 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\eh\hooks.cpp -FILE 3856 f:\sp\public\sdk\inc\winnls.h -FILE 3857 f:\sp\public\sdk\inc\pshpack1.h -FILE 3858 f:\sp\public\sdk\inc\winnt.h -FILE 3859 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ctype.h -FILE 3860 f:\sp\public\sdk\inc\winerror.h -FILE 3861 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\mtdll.h -FILE 3862 f:\sp\public\sdk\inc\winreg.h -FILE 3863 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\string.h -FILE 3864 f:\sp\public\sdk\inc\tvout.h -FILE 3865 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\eh.h -FILE 3866 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\errno.h -FILE 3867 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\stddef.h -FILE 3868 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdefs.h -FILE 3869 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\sal.h -FILE 3870 f:\sp\public\sdk\inc\wincon.h -FILE 3871 f:\sp\public\sdk\inc\imm.h -FILE 3872 f:\sp\public\sdk\inc\winbase.h -FILE 3873 f:\sp\public\sdk\inc\wingdi.h -FILE 3874 f:\sp\public\sdk\inc\winver.h -FILE 3875 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehhooks.h -FILE 3876 f:\sp\public\sdk\inc\pshpack2.h -FILE 3877 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\excpt.h -FILE 3878 f:\sp\public\sdk\inc\reason.h -FILE 3879 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\ehassert.h -FILE 3880 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\internal.h -FILE 3881 f:\sp\public\sdk\inc\specstrings.h -FILE 3882 f:\sp\public\sdk\inc\basetsd.h -FILE 3883 f:\sp\public\sdk\inc\pshpack4.h -FILE 3884 f:\sp\public\sdk\inc\ddbanned.h -FILE 3885 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\vadefs.h -FILE 3886 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\cruntime.h -FILE 3887 f:\sp\public\sdk\inc\winnetwk.h -FILE 3888 f:\sp\vctools\crt_bld\self_x86\crt\prebuild\h\crtdbg.h -FILE 3889 f:\sp\public\sdk\inc\stralign.h -FILE 3890 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3891 f:\sp\public\sdk\inc\pshpack4.h -FILE 3892 f:\sp\public\sdk\inc\reason.h -FILE 3893 f:\sp\public\sdk\inc\wincon.h -FILE 3894 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3895 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3896 f:\sp\public\sdk\inc\poppack.h -FILE 3897 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3898 f:\sp\public\sdk\inc\mcx.h -FILE 3899 f:\sp\public\sdk\inc\winuser.h -FILE 3900 f:\sp\public\sdk\inc\winnls.h -FILE 3901 f:\sp\public\sdk\inc\stralign.h -FILE 3902 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3903 f:\sp\public\sdk\inc\windef.h -FILE 3904 f:\sp\public\sdk\inc\tvout.h -FILE 3905 f:\sp\public\sdk\inc\winsvc.h -FILE 3906 f:\sp\public\sdk\inc\wingdi.h -FILE 3907 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3908 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3909 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3910 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3911 f:\sp\public\sdk\inc\winnt.h -FILE 3912 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3913 f:\sp\public\sdk\inc\winnetwk.h -FILE 3914 f:\sp\public\sdk\inc\imm.h -FILE 3915 f:\sp\vctools\crt_bld\self_x86\crt\src\dosmap.c -FILE 3916 f:\sp\public\sdk\inc\winbase.h -FILE 3917 f:\sp\public\sdk\inc\winerror.h -FILE 3918 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3919 f:\sp\public\sdk\inc\pshpack1.h -FILE 3920 f:\sp\public\sdk\inc\pshpack8.h -FILE 3921 f:\sp\public\sdk\inc\winver.h -FILE 3922 f:\sp\public\sdk\inc\ddbanned.h -FILE 3923 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3924 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3925 f:\sp\public\sdk\inc\pshpack2.h -FILE 3926 f:\sp\public\sdk\inc\winreg.h -FILE 3927 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 3928 f:\sp\public\sdk\inc\guiddef.h -FILE 3929 f:\sp\public\sdk\inc\windows.h -FILE 3930 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3931 f:\sp\public\sdk\inc\specstrings.h -FILE 3932 f:\sp\public\sdk\inc\basetsd.h -FILE 3933 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 3934 f:\sp\public\sdk\inc\mcx.h -FILE 3935 f:\sp\public\sdk\inc\pshpack8.h -FILE 3936 f:\sp\public\sdk\inc\guiddef.h -FILE 3937 f:\sp\public\sdk\inc\winnt.h -FILE 3938 f:\sp\public\sdk\inc\winnls.h -FILE 3939 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 3940 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 3941 f:\sp\public\sdk\inc\pshpack1.h -FILE 3942 f:\sp\public\sdk\inc\winerror.h -FILE 3943 f:\sp\vctools\crt_bld\self_x86\crt\src\tolower.c -FILE 3944 f:\sp\public\sdk\inc\winreg.h -FILE 3945 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3946 f:\sp\public\sdk\inc\tvout.h -FILE 3947 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3948 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3949 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 3950 f:\sp\public\sdk\inc\wincon.h -FILE 3951 f:\sp\vctools\crt_bld\self_x86\crt\src\stddef.h -FILE 3952 f:\sp\public\sdk\inc\imm.h -FILE 3953 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3954 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 3955 f:\sp\public\sdk\inc\winbase.h -FILE 3956 f:\sp\public\sdk\inc\wingdi.h -FILE 3957 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3958 f:\sp\public\sdk\inc\winver.h -FILE 3959 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 3960 f:\sp\public\sdk\inc\windows.h -FILE 3961 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3962 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 3963 f:\sp\public\sdk\inc\pshpack2.h -FILE 3964 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 3965 f:\sp\public\sdk\inc\reason.h -FILE 3966 f:\sp\public\sdk\inc\specstrings.h -FILE 3967 f:\sp\public\sdk\inc\basetsd.h -FILE 3968 f:\sp\public\sdk\inc\pshpack4.h -FILE 3969 f:\sp\public\sdk\inc\winnetwk.h -FILE 3970 f:\sp\public\sdk\inc\ddbanned.h -FILE 3971 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 3972 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 3973 f:\sp\public\sdk\inc\stralign.h -FILE 3974 f:\sp\public\sdk\inc\poppack.h -FILE 3975 f:\sp\public\sdk\inc\winsvc.h -FILE 3976 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 3977 f:\sp\public\sdk\inc\windef.h -FILE 3978 f:\sp\public\sdk\inc\winuser.h -FILE 3979 f:\sp\public\sdk\inc\winsvc.h -FILE 3980 f:\sp\public\sdk\inc\winuser.h -FILE 3981 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 3982 f:\sp\public\sdk\inc\mcx.h -FILE 3983 f:\sp\public\sdk\inc\pshpack8.h -FILE 3984 f:\sp\public\sdk\inc\guiddef.h -FILE 3985 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 3986 f:\sp\public\sdk\inc\windows.h -FILE 3987 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 3988 f:\sp\public\sdk\inc\winnls.h -FILE 3989 f:\sp\vctools\crt_bld\self_x86\crt\src\strtoq.c -FILE 3990 f:\sp\public\sdk\inc\pshpack1.h -FILE 3991 f:\sp\public\sdk\inc\winerror.h -FILE 3992 f:\sp\public\sdk\inc\winreg.h -FILE 3993 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 3994 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 3995 f:\sp\public\sdk\inc\tvout.h -FILE 3996 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 3997 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 3998 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 3999 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4000 f:\sp\public\sdk\inc\wincon.h -FILE 4001 f:\sp\public\sdk\inc\imm.h -FILE 4002 f:\sp\public\sdk\inc\winbase.h -FILE 4003 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4004 f:\sp\public\sdk\inc\wingdi.h -FILE 4005 f:\sp\public\sdk\inc\windef.h -FILE 4006 f:\sp\public\sdk\inc\winver.h -FILE 4007 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4008 f:\sp\public\sdk\inc\pshpack2.h -FILE 4009 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4010 f:\sp\public\sdk\inc\reason.h -FILE 4011 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4012 f:\sp\public\sdk\inc\winnt.h -FILE 4013 f:\sp\public\sdk\inc\specstrings.h -FILE 4014 f:\sp\public\sdk\inc\basetsd.h -FILE 4015 f:\sp\public\sdk\inc\pshpack4.h -FILE 4016 f:\sp\public\sdk\inc\ddbanned.h -FILE 4017 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 4018 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4019 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4020 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4021 f:\sp\public\sdk\inc\winnetwk.h -FILE 4022 f:\sp\public\sdk\inc\stralign.h -FILE 4023 f:\sp\public\sdk\inc\poppack.h -FILE 4024 f:\sp\public\sdk\inc\winsvc.h -FILE 4025 f:\sp\public\sdk\inc\winuser.h -FILE 4026 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4027 f:\sp\public\sdk\inc\mcx.h -FILE 4028 f:\sp\public\sdk\inc\pshpack8.h -FILE 4029 f:\sp\public\sdk\inc\guiddef.h -FILE 4030 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4031 f:\sp\public\sdk\inc\windows.h -FILE 4032 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4033 f:\sp\public\sdk\inc\winnls.h -FILE 4034 f:\sp\vctools\crt_bld\self_x86\crt\src\strtol.c -FILE 4035 f:\sp\public\sdk\inc\pshpack1.h -FILE 4036 f:\sp\public\sdk\inc\winerror.h -FILE 4037 f:\sp\public\sdk\inc\winreg.h -FILE 4038 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4039 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 4040 f:\sp\public\sdk\inc\tvout.h -FILE 4041 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4042 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4043 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4044 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4045 f:\sp\public\sdk\inc\wincon.h -FILE 4046 f:\sp\public\sdk\inc\imm.h -FILE 4047 f:\sp\public\sdk\inc\winbase.h -FILE 4048 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4049 f:\sp\public\sdk\inc\wingdi.h -FILE 4050 f:\sp\public\sdk\inc\windef.h -FILE 4051 f:\sp\public\sdk\inc\winver.h -FILE 4052 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4053 f:\sp\public\sdk\inc\pshpack2.h -FILE 4054 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4055 f:\sp\public\sdk\inc\reason.h -FILE 4056 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4057 f:\sp\public\sdk\inc\winnt.h -FILE 4058 f:\sp\public\sdk\inc\specstrings.h -FILE 4059 f:\sp\public\sdk\inc\basetsd.h -FILE 4060 f:\sp\public\sdk\inc\pshpack4.h -FILE 4061 f:\sp\public\sdk\inc\ddbanned.h -FILE 4062 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 4063 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4064 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4065 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4066 f:\sp\public\sdk\inc\winnetwk.h -FILE 4067 f:\sp\public\sdk\inc\stralign.h -FILE 4068 f:\sp\public\sdk\inc\poppack.h -FILE 4069 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 4070 f:\sp\public\sdk\inc\winreg.h -FILE 4071 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4072 f:\sp\public\sdk\inc\tvout.h -FILE 4073 f:\sp\vctools\crt_bld\self_x86\crt\src\dbgint.h -FILE 4074 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4075 f:\sp\public\sdk\inc\wincon.h -FILE 4076 f:\sp\public\sdk\inc\imm.h -FILE 4077 f:\sp\public\sdk\inc\winbase.h -FILE 4078 f:\sp\vctools\crt_bld\self_x86\crt\src\isctype.c -FILE 4079 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4080 f:\sp\public\sdk\inc\wingdi.h -FILE 4081 f:\sp\public\sdk\inc\windef.h -FILE 4082 f:\sp\public\sdk\inc\winver.h -FILE 4083 f:\sp\public\sdk\inc\pshpack2.h -FILE 4084 f:\sp\public\sdk\inc\reason.h -FILE 4085 f:\sp\public\sdk\inc\winnt.h -FILE 4086 f:\sp\public\sdk\inc\specstrings.h -FILE 4087 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 4088 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 4089 f:\sp\public\sdk\inc\basetsd.h -FILE 4090 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4091 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4092 f:\sp\public\sdk\inc\pshpack4.h -FILE 4093 f:\sp\public\sdk\inc\winnetwk.h -FILE 4094 f:\sp\public\sdk\inc\stralign.h -FILE 4095 f:\sp\public\sdk\inc\poppack.h -FILE 4096 f:\sp\public\sdk\inc\winsvc.h -FILE 4097 f:\sp\public\sdk\inc\winuser.h -FILE 4098 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4099 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4100 f:\sp\public\sdk\inc\mcx.h -FILE 4101 f:\sp\public\sdk\inc\pshpack8.h -FILE 4102 f:\sp\public\sdk\inc\guiddef.h -FILE 4103 f:\sp\public\sdk\inc\ddbanned.h -FILE 4104 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 4105 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 4106 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4107 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4108 f:\sp\public\sdk\inc\windows.h -FILE 4109 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4110 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4111 f:\sp\public\sdk\inc\winnls.h -FILE 4112 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4113 f:\sp\public\sdk\inc\pshpack1.h -FILE 4114 f:\sp\public\sdk\inc\winerror.h -FILE 4115 f:\sp\vctools\crt_bld\self_x86\crt\src\swprintf.inl -FILE 4116 f:\sp\public\sdk\inc\winreg.h -FILE 4117 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4118 f:\sp\public\sdk\inc\tvout.h -FILE 4119 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4120 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4121 f:\sp\public\sdk\inc\wincon.h -FILE 4122 f:\sp\public\sdk\inc\imm.h -FILE 4123 f:\sp\public\sdk\inc\winbase.h -FILE 4124 f:\sp\vctools\crt_bld\self_x86\crt\src\iswctype.c -FILE 4125 f:\sp\public\sdk\inc\wingdi.h -FILE 4126 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 4127 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4128 f:\sp\public\sdk\inc\winver.h -FILE 4129 f:\sp\vctools\crt_bld\self_x86\crt\src\awint.h -FILE 4130 f:\sp\public\sdk\inc\windows.h -FILE 4131 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4132 f:\sp\public\sdk\inc\pshpack2.h -FILE 4133 f:\sp\public\sdk\inc\reason.h -FILE 4134 f:\sp\public\sdk\inc\specstrings.h -FILE 4135 f:\sp\vctools\crt_bld\self_x86\crt\src\stdio.h -FILE 4136 f:\sp\public\sdk\inc\basetsd.h -FILE 4137 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4138 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4139 f:\sp\public\sdk\inc\pshpack4.h -FILE 4140 f:\sp\public\sdk\inc\winnetwk.h -FILE 4141 f:\sp\public\sdk\inc\stralign.h -FILE 4142 f:\sp\public\sdk\inc\poppack.h -FILE 4143 f:\sp\public\sdk\inc\winsvc.h -FILE 4144 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4145 f:\sp\public\sdk\inc\windef.h -FILE 4146 f:\sp\public\sdk\inc\winuser.h -FILE 4147 f:\sp\public\sdk\inc\mcx.h -FILE 4148 f:\sp\public\sdk\inc\pshpack8.h -FILE 4149 f:\sp\public\sdk\inc\guiddef.h -FILE 4150 f:\sp\public\sdk\inc\ddbanned.h -FILE 4151 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4152 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4153 f:\sp\public\sdk\inc\winnt.h -FILE 4154 f:\sp\public\sdk\inc\winnls.h -FILE 4155 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4156 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 4157 f:\sp\public\sdk\inc\pshpack1.h -FILE 4158 f:\sp\public\sdk\inc\winerror.h -FILE 4159 f:\sp\public\sdk\inc\winsvc.h -FILE 4160 f:\sp\public\sdk\inc\winuser.h -FILE 4161 f:\sp\public\sdk\inc\mcx.h -FILE 4162 f:\sp\public\sdk\inc\pshpack8.h -FILE 4163 f:\sp\public\sdk\inc\guiddef.h -FILE 4164 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 4165 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4166 f:\sp\public\sdk\inc\windows.h -FILE 4167 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4168 f:\sp\public\sdk\inc\winnls.h -FILE 4169 f:\sp\vctools\crt_bld\self_x86\crt\src\_wctype.c -FILE 4170 f:\sp\public\sdk\inc\pshpack1.h -FILE 4171 f:\sp\public\sdk\inc\winerror.h -FILE 4172 f:\sp\public\sdk\inc\winreg.h -FILE 4173 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4174 f:\sp\public\sdk\inc\tvout.h -FILE 4175 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 4176 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4177 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4178 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4179 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4180 f:\sp\public\sdk\inc\wincon.h -FILE 4181 f:\sp\public\sdk\inc\imm.h -FILE 4182 f:\sp\public\sdk\inc\winbase.h -FILE 4183 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4184 f:\sp\public\sdk\inc\wingdi.h -FILE 4185 f:\sp\public\sdk\inc\windef.h -FILE 4186 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h -FILE 4187 f:\sp\public\sdk\inc\winver.h -FILE 4188 f:\sp\public\sdk\inc\pshpack2.h -FILE 4189 f:\sp\public\sdk\inc\reason.h -FILE 4190 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4191 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4192 f:\sp\public\sdk\inc\winnt.h -FILE 4193 f:\sp\public\sdk\inc\specstrings.h -FILE 4194 f:\sp\public\sdk\inc\basetsd.h -FILE 4195 f:\sp\public\sdk\inc\pshpack4.h -FILE 4196 f:\sp\public\sdk\inc\ddbanned.h -FILE 4197 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4198 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4199 f:\sp\public\sdk\inc\winnetwk.h -FILE 4200 f:\sp\public\sdk\inc\stralign.h -FILE 4201 f:\sp\public\sdk\inc\poppack.h -FILE 4202 f:\sp\public\sdk\inc\mcx.h -FILE 4203 f:\sp\public\sdk\inc\pshpack8.h -FILE 4204 f:\sp\public\sdk\inc\guiddef.h -FILE 4205 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4206 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4207 f:\sp\public\sdk\inc\windows.h -FILE 4208 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4209 f:\sp\public\sdk\inc\winnls.h -FILE 4210 f:\sp\public\sdk\inc\pshpack1.h -FILE 4211 f:\sp\public\sdk\inc\winerror.h -FILE 4212 f:\sp\public\sdk\inc\winreg.h -FILE 4213 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4214 f:\sp\vctools\crt_bld\self_x86\crt\src\_ctype.c -FILE 4215 f:\sp\public\sdk\inc\tvout.h -FILE 4216 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 4217 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4218 f:\sp\public\sdk\inc\wincon.h -FILE 4219 f:\sp\public\sdk\inc\imm.h -FILE 4220 f:\sp\public\sdk\inc\winbase.h -FILE 4221 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4222 f:\sp\public\sdk\inc\wingdi.h -FILE 4223 f:\sp\public\sdk\inc\windef.h -FILE 4224 f:\sp\public\sdk\inc\winver.h -FILE 4225 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4226 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4227 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4228 f:\sp\public\sdk\inc\pshpack2.h -FILE 4229 f:\sp\public\sdk\inc\reason.h -FILE 4230 f:\sp\public\sdk\inc\winnt.h -FILE 4231 f:\sp\vctools\crt_bld\self_x86\crt\src\locale.h -FILE 4232 f:\sp\public\sdk\inc\specstrings.h -FILE 4233 f:\sp\public\sdk\inc\basetsd.h -FILE 4234 f:\sp\public\sdk\inc\pshpack4.h -FILE 4235 f:\sp\public\sdk\inc\winnetwk.h -FILE 4236 f:\sp\public\sdk\inc\stralign.h -FILE 4237 f:\sp\public\sdk\inc\poppack.h -FILE 4238 f:\sp\public\sdk\inc\winsvc.h -FILE 4239 f:\sp\public\sdk\inc\ddbanned.h -FILE 4240 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4241 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4242 f:\sp\public\sdk\inc\winuser.h -FILE 4243 f:\sp\public\sdk\inc\pshpack2.h -FILE 4244 f:\sp\public\sdk\inc\mcx.h -FILE 4245 f:\sp\public\sdk\inc\winuser.h -FILE 4246 f:\sp\public\sdk\inc\winnls.h -FILE 4247 f:\sp\public\sdk\inc\stralign.h -FILE 4248 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4249 f:\sp\public\sdk\inc\windef.h -FILE 4250 f:\sp\public\sdk\inc\tvout.h -FILE 4251 f:\sp\public\sdk\inc\winsvc.h -FILE 4252 f:\sp\vctools\crt_bld\self_x86\crt\src\internal_securecrt.h -FILE 4253 f:\sp\public\sdk\inc\wingdi.h -FILE 4254 f:\sp\public\sdk\inc\pshpack4.h -FILE 4255 f:\sp\public\sdk\inc\poppack.h -FILE 4256 f:\sp\public\sdk\inc\winnt.h -FILE 4257 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4258 f:\sp\public\sdk\inc\winnetwk.h -FILE 4259 f:\sp\public\sdk\inc\imm.h -FILE 4260 f:\sp\vctools\crt_bld\self_x86\crt\src\xtoa.c -FILE 4261 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4262 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdbg.h -FILE 4263 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4264 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4265 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 4266 f:\sp\vctools\crt_bld\self_x86\crt\src\xtoas.c -FILE 4267 f:\sp\public\sdk\inc\pshpack1.h -FILE 4268 f:\sp\public\sdk\inc\winver.h -FILE 4269 f:\sp\vctools\crt_bld\self_x86\crt\src\errno.h -FILE 4270 f:\sp\public\sdk\inc\guiddef.h -FILE 4271 f:\sp\public\sdk\inc\specstrings.h -FILE 4272 f:\sp\public\sdk\inc\basetsd.h -FILE 4273 f:\sp\public\sdk\inc\winreg.h -FILE 4274 f:\sp\public\sdk\inc\ddbanned.h -FILE 4275 f:\sp\vctools\crt_bld\self_x86\crt\src\internal.h -FILE 4276 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4277 f:\sp\public\sdk\inc\windows.h -FILE 4278 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4279 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4280 f:\sp\public\sdk\inc\winbase.h -FILE 4281 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4282 f:\sp\public\sdk\inc\winerror.h -FILE 4283 f:\sp\public\sdk\inc\pshpack8.h -FILE 4284 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 4285 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4286 f:\sp\public\sdk\inc\reason.h -FILE 4287 f:\sp\public\sdk\inc\wincon.h -FILE 4288 f:\sp\public\sdk\inc\poppack.h -FILE 4289 f:\sp\public\sdk\inc\winnetwk.h -FILE 4290 f:\sp\public\sdk\inc\imm.h -FILE 4291 f:\sp\vctools\crt_bld\self_x86\crt\src\stdarg.h -FILE 4292 f:\sp\public\sdk\inc\windef.h -FILE 4293 f:\sp\public\sdk\inc\pshpack1.h -FILE 4294 f:\sp\public\sdk\inc\winver.h -FILE 4295 f:\sp\vctools\crt_bld\self_x86\crt\src\mtdll.h -FILE 4296 f:\sp\vctools\crt_bld\self_x86\crt\src\crtdefs.h -FILE 4297 f:\sp\vctools\crt_bld\self_x86\crt\src\sal.h -FILE 4298 f:\sp\public\sdk\inc\winnt.h -FILE 4299 f:\sp\vctools\crt_bld\self_x86\crt\src\ctype.h -FILE 4300 f:\sp\public\sdk\inc\winreg.h -FILE 4301 f:\sp\vctools\crt_bld\self_x86\crt\src\atox.c -FILE 4302 f:\sp\public\sdk\inc\winbase.h -FILE 4303 f:\sp\public\sdk\inc\winerror.h -FILE 4304 f:\sp\public\sdk\inc\pshpack8.h -FILE 4305 f:\sp\vctools\crt_bld\self_x86\crt\src\setlocal.h -FILE 4306 f:\sp\vctools\crt_bld\self_x86\crt\src\oscalls.h -FILE 4307 f:\sp\public\sdk\inc\reason.h -FILE 4308 f:\sp\public\sdk\inc\wincon.h -FILE 4309 f:\sp\public\sdk\inc\ddbanned.h -FILE 4310 f:\sp\vctools\crt_bld\self_x86\crt\src\vadefs.h -FILE 4311 f:\sp\vctools\crt_bld\self_x86\crt\src\cruntime.h -FILE 4312 f:\sp\public\sdk\inc\pshpack2.h -FILE 4313 f:\sp\vctools\crt_bld\self_x86\crt\src\tchar.h -FILE 4314 f:\sp\vctools\crt_bld\self_x86\crt\src\stdlib.h -FILE 4315 f:\sp\vctools\crt_bld\self_x86\crt\src\mbstring.h -FILE 4316 f:\sp\public\sdk\inc\mcx.h -FILE 4317 f:\sp\public\sdk\inc\winuser.h -FILE 4318 f:\sp\vctools\crt_bld\self_x86\crt\src\limits.h -FILE 4319 f:\sp\public\sdk\inc\winnls.h -FILE 4320 f:\sp\public\sdk\inc\guiddef.h -FILE 4321 f:\sp\public\sdk\inc\windows.h -FILE 4322 f:\sp\vctools\crt_bld\self_x86\crt\src\excpt.h -FILE 4323 f:\sp\vctools\crt_bld\self_x86\crt\src\mbctype.h -FILE 4324 f:\sp\public\sdk\inc\specstrings.h -FILE 4325 f:\sp\public\sdk\inc\basetsd.h -FILE 4326 f:\sp\public\sdk\inc\stralign.h -FILE 4327 f:\sp\public\sdk\inc\tvout.h -FILE 4328 f:\sp\public\sdk\inc\winsvc.h -FILE 4329 f:\sp\vctools\crt_bld\self_x86\crt\src\string.h -FILE 4330 f:\sp\public\sdk\inc\wingdi.h -FILE 4331 f:\sp\public\sdk\inc\pshpack4.h -PUBLIC 1005 0 @ILT+0(?h@C@google_breakpad@@SAPADABV12@@Z) -PUBLIC 100a 0 @ILT+5(?set_member@C@google_breakpad@@QAEXH@Z) -PUBLIC 100f 0 @ILT+10(??_EC@google_breakpad@@UAEPAXI@Z) -PUBLIC 1014 0 @ILT+15(??_EC@google_breakpad@@UAEPAXI@Z) -PUBLIC 1019 0 @ILT+20(?f@C@google_breakpad@@QAEXXZ) -PUBLIC 101e 0 @ILT+25(_main) -PUBLIC 1023 0 @ILT+30(??0C@google_breakpad@@QAE@XZ) -PUBLIC 1028 0 @ILT+35(??1C@google_breakpad@@UAE@XZ) -PUBLIC 102d 0 @ILT+40(?g@C@google_breakpad@@UAEHXZ) -FUNC 1060 54 8 main -1060 6 57 1 -1066 8 58 1 -106e e 59 1 -107c 8 60 1 -1084 b 61 1 -108f f 62 1 -109e 12 64 1 -10b0 4 65 1 -FUNC 10c0 a 0 google_breakpad::i -10c0 3 51 1 -10c3 5 52 1 -10c8 2 53 1 -FUNC 10f0 21 0 google_breakpad::C::C() -10f0 21 37 1 -FUNC 1120 14 0 google_breakpad::C::~C() -1120 14 38 1 -FUNC 1140 16 8 google_breakpad::C::set_member(int) -1140 16 40 1 -FUNC 1160 1e 0 google_breakpad::C::f() -1160 1e 43 1 -FUNC 1190 10 0 google_breakpad::C::g() -1190 10 44 1 -FUNC 11b0 7 4 google_breakpad::C::h(google_breakpad::C const &) -11b0 7 45 1 -FUNC 11c0 2c 0 google_breakpad::C::`vector deleting destructor'(unsigned int) -FUNC 11f7 f 4 type_info::name(__type_info_node *) -11f7 0 44 3806 -11f7 c 45 3806 -1203 3 46 3806 -FUNC 1206 e 0 type_info::~type_info() -1206 0 49 3806 -1206 d 50 3806 -1213 1 51 3806 -FUNC 1214 1c 0 type_info::`vector deleting destructor'(unsigned int) -FUNC 1230 f 4 type_info::_name_internal_method(__type_info_node *) -1230 0 54 3806 -1230 c 55 3806 -123c 3 56 3806 -FUNC 123f 8 0 type_info::_type_info_dtor_internal_method() -123f 0 59 3806 -123f 7 60 3806 -1246 1 61 3806 -FUNC 1247 1b 4 type_info::operator==(type_info const &) -1247 0 89 3806 -1247 18 90 3806 -125f 3 91 3806 -FUNC 1262 1c 4 type_info::operator!=(type_info const &) -1262 0 98 3806 -1262 19 99 3806 -127b 3 100 3806 -FUNC 127e 1f 4 type_info::before(type_info const &) -127e 0 103 3806 -127e 1c 104 3806 -129a 3 105 3806 -FUNC 129d 4 0 type_info::raw_name() -129d 0 108 3806 -129d 3 109 3806 -12a0 1 110 3806 -FUNC 12a1 b 4 type_info::type_info(type_info const &) -12a1 8 113 3806 -12a9 3 123 3806 -FUNC 12ac 5 4 type_info::operator=(type_info const &) -12ac 2 127 3806 -12ae 3 135 3806 -FUNC 12b1 5 4 operator delete(void *) -12b1 0 20 3214 -12b1 5 23 3214 -FUNC 12b6 a 4 _set_osplatform -12b6 a 385 1009 -FUNC 12c0 a 4 _set_osver -12c0 a 386 1009 -FUNC 12ca a 4 _set_winver -12ca a 387 1009 -FUNC 12d4 a 4 _set_winmajor -12d4 a 388 1009 -FUNC 12de a 4 _set_winminor -12de a 389 1009 -FUNC 12e8 24 4 fast_error_exit -12e8 0 375 1022 -12e8 9 384 1022 -12f1 5 386 1022 -12f6 9 388 1022 -12ff c 389 1022 -130b 1 390 1022 -FUNC 130c 41 0 check_managed_app -130c 0 413 1022 -130c b 418 1022 -1317 5 422 1022 -131c a 424 1022 -1326 2 425 1022 -1328 9 427 1022 -1331 2 428 1022 -1333 7 433 1022 -133a 2 434 1022 -133c d 437 1022 -1349 1 438 1022 -134a 2 419 1022 -134c 1 438 1022 -FUNC 134d 1b6 0 __tmainCRTStartup -134d c 203 1022 -1359 19 233 1022 -1372 4 234 1022 -1376 8 235 1022 -137e a 236 1022 -1388 2 242 1022 -138a 7 243 1022 -1391 3 244 1022 -1394 4 243 1022 -1398 9 244 1022 -13a1 2 245 1022 -13a3 6 248 1022 -13a9 6 249 1022 -13af 6 250 1022 -13b5 9 256 1022 -13be 9 257 1022 -13c7 8 258 1022 -13cf 6 259 1022 -13d5 d 260 1022 -13e2 6 262 1022 -13e8 5 263 1022 -13ed 6 264 1022 -13f3 6 265 1022 -13f9 6 266 1022 -13ff 8 271 1022 -1407 c 273 1022 -1413 8 274 1022 -141b 9 276 1022 -1424 8 277 1022 -142c 5 286 1022 -1431 4 294 1022 -1435 9 296 1022 -143e 8 297 1022 -1446 b 300 1022 -1451 a 303 1022 -145b 9 305 1022 -1464 8 306 1022 -146c 9 307 1022 -1475 8 308 1022 -147d 8 310 1022 -1485 4 311 1022 -1489 7 312 1022 -1490 a 326 1022 -149a 18 327 1022 -14b2 6 330 1022 -14b8 6 331 1022 -14be 5 333 1022 -14c3 2 335 1022 -14c5 17 336 1022 -14dc 6 342 1022 -14e2 6 344 1022 -14e8 6 345 1022 -14ee 5 347 1022 -14f3 7 349 1022 -14fa 3 351 1022 -14fd 6 352 1022 -FUNC 1503 a 0 mainCRTStartup -1503 0 186 1022 -1503 5 193 1022 -1508 5 195 1022 -FUNC 150d 22 18 _invoke_watson_if_error -150d 3 754 3783 -1510 6 755 3783 -1516 17 759 3783 -152d 2 760 3783 -FUNC 152f 70 4 type_info::_Type_info_dtor(type_info *) -152f c 62 3748 -153b 8 63 3748 -1543 4 64 3748 -1547 a 65 3748 -1551 d 70 3748 -155e 4 72 3748 -1562 4 74 3748 -1566 6 79 3748 -156c 7 80 3748 -1573 9 94 3748 -157c 4 101 3748 -1580 c 103 3748 -158c 6 107 3748 -1592 2 83 3748 -1594 2 72 3748 -1596 9 104 3748 -FUNC 159f f5 8 type_info::_Name_base(type_info const *,__type_info_node *) -159f c 109 3748 -15ab e 113 3748 -15b9 24 124 3748 -15dd 7 125 3748 -15e4 16 132 3748 -15fa 2 133 3748 -15fc 5 132 3748 -1601 b 136 3748 -160c 5 142 3748 -1611 a 149 3748 -161b 4 150 3748 -161f 11 157 3748 -1630 20 158 3748 -1650 5 159 3748 -1655 9 165 3748 -165e 3 166 3748 -1661 2 167 3748 -1663 7 173 3748 -166a 9 180 3748 -1673 c 181 3748 -167f 3 188 3748 -1682 6 189 3748 -1688 3 181 3748 -168b 9 182 3748 -FUNC 1694 70 4 type_info::_Type_info_dtor_internal(type_info *) -1694 c 197 3748 -16a0 8 198 3748 -16a8 4 199 3748 -16ac a 200 3748 -16b6 d 205 3748 -16c3 4 207 3748 -16c7 4 209 3748 -16cb 6 214 3748 -16d1 7 215 3748 -16d8 9 229 3748 -16e1 4 236 3748 -16e5 c 238 3748 -16f1 6 242 3748 -16f7 2 218 3748 -16f9 2 207 3748 -16fb 9 239 3748 -FUNC 1704 31 10 __unDNameHelper -1704 3 249 3748 -1707 7 250 3748 -170e 7 252 3748 -1715 1e 260 3748 -1733 2 261 3748 -FUNC 1735 eb 8 type_info::_Name_base_internal(type_info const *,__type_info_node *) -1735 c 265 3748 -1741 e 269 3748 -174f 1a 273 3748 -1769 7 274 3748 -1770 16 281 3748 -1786 2 282 3748 -1788 5 281 3748 -178d b 285 3748 -1798 5 291 3748 -179d a 298 3748 -17a7 4 299 3748 -17ab 11 306 3748 -17bc 20 307 3748 -17dc 5 308 3748 -17e1 9 314 3748 -17ea 3 315 3748 -17ed 2 316 3748 -17ef 7 322 3748 -17f6 9 329 3748 -17ff c 330 3748 -180b 3 337 3748 -180e 6 338 3748 -1814 3 330 3748 -1817 9 331 3748 -FUNC 1820 53 4 __clean_type_info_names_internal -1820 c 346 3748 -182c 8 347 3748 -1834 4 348 3748 -1838 6 352 3748 -183e 4 354 3748 -1842 3 356 3748 -1845 7 357 3748 -184c 8 358 3748 -1854 4 354 3748 -1858 c 359 3748 -1864 6 363 3748 -186a 9 361 3748 -FUNC 1880 88 8 strcmp -1880 0 65 593 -1880 4 73 593 -1884 4 74 593 -1888 6 76 593 -188e 2 77 593 -1890 2 81 593 -1892 2 83 593 -1894 2 84 593 -1896 2 85 593 -1898 2 86 593 -189a 3 87 593 -189d 2 88 593 -189f 2 89 593 -18a1 2 90 593 -18a3 3 92 593 -18a6 3 94 593 -18a9 2 95 593 -18ab 2 96 593 -18ad 2 97 593 -18af 3 98 593 -18b2 2 99 593 -18b4 3 100 593 -18b7 3 101 593 -18ba 2 102 593 -18bc 4 103 593 -18c0 2 107 593 -18c2 2 108 593 -18c4 2 115 593 -18c6 2 116 593 -18c8 3 117 593 -18cb 1 118 593 -18cc 6 122 593 -18d2 2 123 593 -18d4 2 125 593 -18d6 3 126 593 -18d9 2 127 593 -18db 2 128 593 -18dd 3 129 593 -18e0 2 130 593 -18e2 2 131 593 -18e4 6 133 593 -18ea 2 134 593 -18ec 3 139 593 -18ef 3 140 593 -18f2 2 141 593 -18f4 2 142 593 -18f6 2 143 593 -18f8 2 144 593 -18fa 3 145 593 -18fd 2 146 593 -18ff 2 147 593 -1901 2 148 593 -1903 3 149 593 -1906 2 150 593 -FUNC 1908 8e 4 free -1908 c 42 3545 -1914 7 47 3545 -191b 9 53 3545 -1924 8 57 3545 -192c 4 58 3545 -1930 e 60 3545 -193e 9 61 3545 -1947 c 64 3545 -1953 6 68 3545 -1959 3 70 3545 -195c 2 106 3545 -195e 9 65 3545 -1967 f 109 3545 -1976 4 110 3545 -197a 16 112 3545 -1990 6 115 3545 -FUNC 1996 3d 4 __CxxUnhandledExceptionFilter(_EXCEPTION_POINTERS *) -1996 0 67 3654 -1996 33 68 3654 -19c9 5 69 3654 -19ce 2 72 3654 -19d0 3 73 3654 -FUNC 19d3 e 0 __CxxSetUnhandledExceptionFilter -19d3 0 86 3654 -19d3 b 89 3654 -19de 2 90 3654 -19e0 1 91 3654 -FUNC 19e1 24 4 _amsg_exit -19e1 0 446 974 -19e1 5 449 974 -19e6 9 450 974 -19ef b 451 974 -19fa a 452 974 -1a04 1 453 974 -FUNC 1a05 26 4 __crtCorExitProcess -1a05 0 650 974 -1a05 b 654 974 -1a10 4 655 974 -1a14 c 656 974 -1a20 4 657 974 -1a24 6 658 974 -1a2a 1 668 974 -FUNC 1a2b 15 4 __crtExitProcess -1a2b 0 673 974 -1a2b a 674 974 -1a35 b 683 974 -FUNC 1a40 9 0 _lockexit -1a40 0 733 974 -1a40 8 734 974 -1a48 1 735 974 -FUNC 1a49 9 0 _unlockexit -1a49 0 759 974 -1a49 8 760 974 -1a51 1 761 974 -FUNC 1a52 18 4 _initterm -1a52 3 841 974 -1a55 2 855 974 -1a57 6 853 974 -1a5d 2 854 974 -1a5f 3 855 974 -1a62 7 848 974 -1a69 1 857 974 -FUNC 1a6a 20 8 _initterm_e -1a6a 1 890 974 -1a6b c 899 974 -1a77 6 904 974 -1a7d 2 905 974 -1a7f 3 906 974 -1a82 7 899 974 -1a89 1 910 974 -FUNC 1a8a 37 4 _get_osplatform -1a8a 0 929 974 -1a8a 27 931 974 -1ab1 1 939 974 -1ab2 9 934 974 -1abb 2 936 974 -1abd 3 938 974 -1ac0 1 939 974 -FUNC 1ac1 3c 4 _get_osver -1ac1 0 958 974 -1ac1 27 960 974 -1ae8 1 968 974 -1ae9 8 963 974 -1af1 8 965 974 -1af9 3 967 974 -1afc 1 968 974 -FUNC 1afd 3c 4 _get_winver -1afd 0 987 974 -1afd 27 989 974 -1b24 1 997 974 -1b25 8 992 974 -1b2d 8 994 974 -1b35 3 996 974 -1b38 1 997 974 -FUNC 1b39 3c 4 _get_winmajor -1b39 0 1016 974 -1b39 27 1018 974 -1b60 1 1026 974 -1b61 8 1021 974 -1b69 8 1023 974 -1b71 3 1025 974 -1b74 1 1026 974 -FUNC 1b75 3c 4 _get_winminor -1b75 0 1045 974 -1b75 27 1047 974 -1b9c 1 1055 974 -1b9d 8 1050 974 -1ba5 8 1052 974 -1bad 3 1054 974 -1bb0 1 1055 974 -FUNC 1bb1 37 4 _get_wpgmptr -1bb1 0 1074 974 -1bb1 27 1076 974 -1bd8 1 1085 974 -1bd9 9 1080 974 -1be2 2 1082 974 -1be4 3 1084 974 -1be7 1 1085 974 -FUNC 1be8 37 4 _get_pgmptr -1be8 0 1104 974 -1be8 27 1106 974 -1c0f 1 1115 974 -1c10 9 1110 974 -1c19 2 1112 974 -1c1b 3 1114 974 -1c1e 1 1115 974 -FUNC 1c1f 92 4 _cinit -1c1f 0 263 974 -1c1f 18 273 974 -1c37 b 275 974 -1c42 5 277 974 -1c47 f 283 974 -1c56 4 284 974 -1c5a 4 285 974 -1c5e a 288 974 -1c68 20 293 974 -1c88 1a 306 974 -1ca2 c 308 974 -1cae 2 312 974 -1cb0 1 313 974 -FUNC 1cb1 e2 c doexit -1cb1 c 499 974 -1cbd 8 517 974 -1cc5 5 518 974 -1cca b 520 974 -1cd5 6 521 974 -1cdb 8 524 974 -1ce3 5 526 974 -1ce8 e 542 974 -1cf6 12 543 974 -1d08 5 545 974 -1d0d b 546 974 -1d18 10 551 974 -1d28 9 552 974 -1d31 2 553 974 -1d33 10 558 974 -1d43 10 566 974 -1d53 c 584 974 -1d5f 6 588 974 -1d65 6 592 974 -1d6b 8 594 974 -1d73 8 596 974 -1d7b 3 584 974 -1d7e 6 585 974 -1d84 9 586 974 -1d8d 6 597 974 -FUNC 1d93 11 4 exit -1d93 0 397 974 -1d93 10 398 974 -1da3 1 399 974 -FUNC 1da4 11 4 _exit -1da4 0 405 974 -1da4 10 406 974 -1db4 1 407 974 -FUNC 1db5 f 0 _cexit -1db5 0 412 974 -1db5 e 413 974 -1dc3 1 414 974 -FUNC 1dc4 f 0 _c_exit -1dc4 0 419 974 -1dc4 e 420 974 -1dd2 1 421 974 -FUNC 1dd3 4c 0 _init_pointers -1dd3 1 786 974 -1dd4 7 787 974 -1ddb 6 789 974 -1de1 6 790 974 -1de7 6 791 974 -1ded 6 792 974 -1df3 6 793 974 -1df9 6 794 974 -1dff 6 795 974 -1e05 6 796 974 -1e0b 13 799 974 -1e1e 1 800 974 -FUNC 1e1f 1a0 4 _NMSG_WRITE -1e1f 2 174 832 -1e21 a 178 832 -1e2b f 179 832 -1e3a a 182 832 -1e44 2a 203 832 -1e6e c 215 832 -1e7a 2a 224 832 -1ea4 1e 227 832 -1ec2 26 228 832 -1ee8 d 231 832 -1ef5 b 233 832 -1f00 2f 234 832 -1f2f 20 237 832 -1f4f 22 238 832 -1f71 15 242 832 -1f86 a 205 832 -1f90 9 206 832 -1f99 24 212 832 -1fbd 2 245 832 -FUNC 1fbf 20 4 _GET_RTERRMSG -1fbf 0 268 832 -1fbf 2 271 832 -1fc1 13 272 832 -1fd4 2 275 832 -1fd6 1 276 832 -1fd7 7 273 832 -1fde 1 276 832 -FUNC 1fdf 39 0 _FF_MSGBANNER -1fdf 0 141 832 -1fdf 22 145 832 -2001 a 147 832 -200b c 148 832 -2017 1 150 832 -FUNC 2018 1 4 _initp_misc_winxfltr -2018 0 105 1166 -2018 1 106 1166 -FUNC 2019 32 4 xcptlookup -2019 0 410 1166 -2019 b 411 1166 -2024 14 418 1166 -2038 e 425 1166 -2046 2 428 1166 -2048 2 426 1166 -204a 1 429 1166 -FUNC 204b 15e 8 _XcptFilter -204b 6 206 1166 -2051 7 213 1166 -2058 8 214 1166 -2060 34 219 1166 -2094 2 221 1166 -2096 2 225 1166 -2098 3 227 1166 -209b 7 234 1166 -20a2 7 235 1166 -20a9 5 243 1166 -20ae 4 248 1166 -20b2 8 249 1166 -20ba 3 255 1166 -20bd 6 259 1166 -20c3 6 273 1166 -20c9 6 274 1166 -20cf c 283 1166 -20db 17 291 1166 -20f2 1e 294 1166 -2110 3 291 1166 -2113 c 321 1166 -211f 9 323 1166 -2128 7 325 1166 -212f 9 327 1166 -2138 7 329 1166 -213f 9 331 1166 -2148 7 333 1166 -214f 9 335 1166 -2158 7 337 1166 -215f 9 339 1166 -2168 7 341 1166 -216f 9 343 1166 -2178 7 345 1166 -217f 7 347 1166 -2186 8 356 1166 -218e 3 361 1166 -2191 2 363 1166 -2193 4 368 1166 -2197 3 369 1166 -219a 7 375 1166 -21a1 6 377 1166 -21a7 2 379 1166 -FUNC 21a9 1b 8 __CppXcptFilter -21a9 0 145 1166 -21a9 b 146 1166 -21b4 c 147 1166 -21c0 1 151 1166 -21c1 2 149 1166 -21c3 1 151 1166 -FUNC 21c4 db 0 _setenvp -21c4 1 77 694 -21c5 c 85 694 -21d1 5 86 694 -21d6 8 91 694 -21de 4 98 694 -21e2 8 99 694 -21ea 4 110 694 -21ee 1 111 694 -21ef 11 112 694 -2200 15 117 694 -2215 2 118 694 -2217 9 121 694 -2220 9 123 694 -2229 6 125 694 -222f 10 127 694 -223f 1c 133 694 -225b 3 134 694 -225e 6 121 694 -2264 b 138 694 -226f 6 139 694 -2275 2 142 694 -2277 a 149 694 -2281 7 152 694 -2288 17 153 694 -FUNC 229f a 4 _set_pgmptr -229f a 334 717 -FUNC 22a9 198 c parse_cmdline -22a9 4 218 736 -22ad 6 226 736 -22b3 8 230 736 -22bb 14 231 736 -22cf 3 250 736 -22d2 5 252 736 -22d7 5 254 736 -22dc 9 255 736 -22e5 2 256 736 -22e7 2 258 736 -22e9 4 259 736 -22ed 8 260 736 -22f5 2 262 736 -22f7 f 264 736 -2306 2 265 736 -2308 6 266 736 -230e a 267 736 -2318 1 268 736 -2319 1a 272 736 -2333 4 277 736 -2337 4 278 736 -233b 4 281 736 -233f 9 286 736 -2348 a 287 736 -2352 3 288 736 -2355 1 275 736 -2356 2 276 736 -2358 9 291 736 -2361 6 295 736 -2367 9 296 736 -2370 2 297 736 -2372 3 311 736 -2375 4 315 736 -2379 1 318 736 -237a 1 319 736 -237b 5 316 736 -2380 5 321 736 -2385 5 324 736 -238a e 325 736 -2398 2 326 736 -239a 2 327 736 -239c d 329 736 -23a9 2 332 736 -23ab 5 336 736 -23b0 4 337 736 -23b4 4 338 736 -23b8 6 339 736 -23be 3 338 736 -23c1 14 343 736 -23d5 4 348 736 -23d9 2 349 736 -23db 10 350 736 -23eb b 351 736 -23f6 2 352 736 -23f8 a 354 736 -2402 2 355 736 -2404 a 356 736 -240e 1 357 736 -240f 2 358 736 -2411 5 361 736 -2416 1 363 736 -2417 5 372 736 -241c 4 376 736 -2420 7 377 736 -2427 2 378 736 -2429 8 379 736 -2431 9 382 736 -243a 3 383 736 -243d 2 384 736 -243f 2 385 736 -FUNC 2441 b9 0 _setargv -2441 7 88 736 -2448 c 97 736 -2454 5 98 736 -2459 18 104 736 -2471 19 120 736 -248a 11 127 736 -249b 15 132 736 -24b0 a 136 736 -24ba 2 138 736 -24bc 8 140 736 -24c4 3 141 736 -24c7 2 142 736 -24c9 13 149 736 -24dc c 153 736 -24e8 6 157 736 -24ee 4 172 736 -24f2 6 134 736 -24f8 2 173 736 -FUNC 24fa 135 0 __crtGetEnvironmentStringsA -24fa 2 43 2721 -24fc 1a 57 2721 -2516 8 59 2721 -251e c 60 2721 -252a b 62 2721 -2535 e 63 2721 -2543 9 68 2721 -254c 4 71 2721 -2550 8 72 2721 -2558 7 73 2721 -255f 7 77 2721 -2566 7 78 2721 -256d 7 79 2721 -2574 1b 93 2721 -258f 13 97 2721 -25a2 11 111 2721 -25b3 a 113 2721 -25bd 8 114 2721 -25c5 7 99 2721 -25cc 4 100 2721 -25d0 6 123 2721 -25d6 2 152 2721 -25d8 a 126 2721 -25e2 6 127 2721 -25e8 4 133 2721 -25ec 5 134 2721 -25f1 5 135 2721 -25f6 5 138 2721 -25fb d 140 2721 -2608 7 141 2721 -260f 5 142 2721 -2614 b 145 2721 -261f 7 147 2721 -2626 6 149 2721 -262c 3 153 2721 -FUNC 262f 240 0 _ioinit -262f c 111 3137 -263b 5 122 3137 -2640 a 127 3137 -264a 7 128 3137 -2651 f 137 3137 -2660 6 139 3137 -2666 5 142 3137 -266b 6 143 3137 -2671 8 145 3137 -2679 4 146 3137 -267d 3 147 3137 -2680 4 148 3137 -2684 3 149 3137 -2687 4 151 3137 -268b 4 152 3137 -268f 4 153 3137 -2693 13 145 3137 -26a6 15 161 3137 -26bb 2 166 3137 -26bd 3 172 3137 -26c0 6 173 3137 -26c6 b 179 3137 -26d1 5 185 3137 -26d6 f 191 3137 -26e5 9 204 3137 -26ee 7 205 3137 -26f5 8 207 3137 -26fd 4 208 3137 -2701 3 209 3137 -2704 4 210 3137 -2708 4 211 3137 -270c 4 212 3137 -2710 4 213 3137 -2714 4 214 3137 -2718 f 207 3137 -2727 9 185 3137 -2730 2 284 3137 -2732 6 197 3137 -2738 8 221 3137 -2740 24 234 3137 -2764 15 236 3137 -2779 7 237 3137 -2780 5 238 3137 -2785 18 241 3137 -279d 3 243 3137 -27a0 d 221 3137 -27ad 2 253 3137 -27af b 255 3137 -27ba c 258 3137 -27c6 6 306 3137 -27cc 4 262 3137 -27d0 30 266 3137 -2800 2 271 3137 -2802 a 277 3137 -280c 6 278 3137 -2812 5 279 3137 -2817 4 280 3137 -281b 14 284 3137 -282f 3 286 3137 -2832 2 288 3137 -2834 4 297 3137 -2838 6 298 3137 -283e a 253 3137 -2848 c 313 3137 -2854 4 315 3137 -2858 7 128 3137 -285f a 129 3137 -2869 6 316 3137 -FUNC 286f 4c 0 _ioterm -286f 2 341 3137 -2871 5 345 3137 -2876 6 347 3137 -287c 8 353 3137 -2884 9 355 3137 -288d 11 356 3137 -289e 4 353 3137 -28a2 7 361 3137 -28a9 11 362 3137 -28ba 1 365 3137 -FUNC 28bb 24 0 _RTC_Initialize -FUNC 28df 24 0 _RTC_Terminate -FUNC 2903 6c 0 _use_encode_pointer -2903 7 66 641 -290a 2 72 641 -290c 12 75 641 -291e 7 76 641 -2925 5 78 641 -292a 7 82 641 -2931 5 85 641 -2936 e 91 641 -2944 1f 93 641 -2963 4 95 641 -2967 6 100 641 -296d 2 101 641 -FUNC 296f 6e 4 _encode_pointer -296f 1 120 641 -2970 2b 129 641 -299b 8 145 641 -29a3 d 133 641 -29b0 d 135 641 -29bd c 138 641 -29c9 4 148 641 -29cd a 150 641 -29d7 5 153 641 -29dc 1 154 641 -FUNC 29dd 9 0 _encoded_null -29dd 0 173 641 -29dd 8 174 641 -29e5 1 175 641 -FUNC 29e6 6e 4 _decode_pointer -29e6 1 194 641 -29e7 2b 203 641 -2a12 8 219 641 -2a1a d 207 641 -2a27 d 209 641 -2a34 c 212 641 -2a40 4 222 641 -2a44 a 224 641 -2a4e 5 227 641 -2a53 1 228 641 -FUNC 2a54 9 4 __crtTlsAlloc -2a54 0 240 641 -2a54 6 241 641 -2a5a 3 242 641 -FUNC 2a5d 15 4 __fls_getvalue -2a5d 0 258 641 -2a5d 12 259 641 -2a6f 3 260 641 -FUNC 2a72 6 0 __get_flsindex -2a72 0 272 641 -2a72 5 273 641 -2a77 1 274 641 -FUNC 2a78 32 0 __set_flsgetvalue -2a78 1 286 641 -2a79 e 288 641 -2a87 4 289 641 -2a8b e 291 641 -2a99 d 292 641 -2aa6 3 294 641 -2aa9 1 298 641 -FUNC 2aaa 19 8 __fls_setvalue -2aaa 0 315 641 -2aaa 16 316 641 -2ac0 3 317 641 -FUNC 2ac3 3d 0 _mtterm -2ac3 0 473 641 -2ac3 a 480 641 -2acd f 481 641 -2adc 7 482 641 -2ae3 a 485 641 -2aed 7 486 641 -2af4 7 487 641 -2afb 5 494 641 -FUNC 2b00 bf 8 _initptd -2b00 c 521 641 -2b0c e 522 641 -2b1a a 524 641 -2b24 6 525 641 -2b2a 4 527 641 -2b2e 9 529 641 -2b37 16 532 641 -2b4d 10 533 641 -2b5d 3 540 641 -2b60 7 544 641 -2b67 7 545 641 -2b6e 8 546 641 -2b76 7 547 641 -2b7d 8 551 641 -2b85 4 552 641 -2b89 6 553 641 -2b8f 4 561 641 -2b93 8 562 641 -2b9b 9 563 641 -2ba4 c 565 641 -2bb0 6 568 641 -2bb6 9 566 641 -FUNC 2bbf 77 0 _getptd_noexit -2bbf 2 588 641 -2bc1 6 592 641 -2bc7 15 600 641 -2bdc 14 608 641 -2bf0 19 610 641 -2c09 a 616 641 -2c13 6 618 641 -2c19 6 619 641 -2c1f 2 621 641 -2c21 7 627 641 -2c28 2 628 641 -2c2a 8 633 641 -2c32 3 635 641 -2c35 1 636 641 -FUNC 2c36 18 0 _getptd -2c36 1 657 641 -2c37 7 658 641 -2c3e 4 659 641 -2c42 8 660 641 -2c4a 3 662 641 -2c4d 1 663 641 -FUNC 2c4e 121 4 _freefls -2c4e c 691 641 -2c5a b 702 641 -2c65 7 703 641 -2c6c 7 704 641 -2c73 7 706 641 -2c7a 7 707 641 -2c81 7 709 641 -2c88 7 710 641 -2c8f 7 712 641 -2c96 7 713 641 -2c9d 7 715 641 -2ca4 7 716 641 -2cab 7 718 641 -2cb2 7 719 641 -2cb9 a 721 641 -2cc3 7 722 641 -2cca 8 724 641 -2cd2 4 725 641 -2cd6 1a 728 641 -2cf0 7 729 641 -2cf7 c 731 641 -2d03 8 735 641 -2d0b 7 737 641 -2d12 7 738 641 -2d19 7 740 641 -2d20 15 743 641 -2d35 7 744 641 -2d3c c 747 641 -2d48 7 751 641 -2d4f 8 754 641 -2d57 3 731 641 -2d5a 9 732 641 -2d63 3 747 641 -2d66 9 748 641 -FUNC 2d6f 69 4 _freeptd -2d6f 0 778 641 -2d6f a 783 641 -2d79 1b 795 641 -2d94 13 796 641 -2da7 16 802 641 -2dbd 7 804 641 -2dc4 a 807 641 -2dce 9 811 641 -2dd7 1 813 641 -FUNC 2dd8 6 0 __threadid -2dd8 0 837 641 -2dd8 6 838 641 -FUNC 2dde 6 0 __threadhandle -2dde 0 844 641 -2dde 6 845 641 -FUNC 2de4 184 0 _mtinit -2de4 1 346 641 -2de5 d 355 641 -2df2 4 356 641 -2df6 5 357 641 -2dfb 3 358 641 -2dfe 2 444 641 -2e00 e 362 641 -2e0e d 365 641 -2e1b d 368 641 -2e28 d 371 641 -2e35 2a 372 641 -2e5f a 375 641 -2e69 1a 379 641 -2e83 25 388 641 -2ea8 5 393 641 -2ead b 400 641 -2eb8 10 401 641 -2ec8 10 402 641 -2ed8 18 403 641 -2ef0 7 410 641 -2ef7 2 412 641 -2ef9 1b 418 641 -2f14 2 420 641 -2f16 2d 428 641 -2f43 a 438 641 -2f4d 6 440 641 -2f53 6 441 641 -2f59 5 443 641 -2f5e 5 430 641 -2f63 4 389 641 -2f67 1 444 641 -FUNC 2f68 5b 0 __heap_select -2f68 6 70 3503 -2f6e 23 143 3503 -2f91 1b 144 3503 -2fac d 145 3503 -2fb9 3 146 3503 -2fbc 2 164 3503 -2fbe 3 161 3503 -2fc1 2 164 3503 -FUNC 2fc3 5a 4 _heap_init -2fc3 0 192 3503 -2fc3 20 199 3503 -2fe3 2 200 3503 -2fe5 1 240 3503 -2fe6 5 204 3503 -2feb a 206 3503 -2ff5 f 209 3503 -3004 c 211 3503 -3010 7 212 3503 -3017 2 213 3503 -3019 3 239 3503 -301c 1 240 3503 -FUNC 301d 74 0 _heap_term -301d 1 261 3503 -301e c 264 3503 -302a 1b 270 3503 -3045 f 273 3503 -3054 b 276 3503 -305f d 278 3503 -306c 11 281 3503 -307d c 300 3503 -3089 7 301 3503 -3090 1 302 3503 -FUNC 3091 6 0 _get_heap_handle -3091 0 320 3503 -3091 5 322 3503 -3096 1 323 3503 -FUNC 3098 45 0 _SEH_prolog4 -FUNC 30dd 14 0 _SEH_epilog4 -FUNC 3100 24 0 ValidateLocalCookies -FUNC 3130 196 10 _except_handler4 -FUNC 32c6 94 0 __security_init_cookie -32c6 6 97 2103 -32cc 21 114 2103 -32ed 7 116 2103 -32f4 3 117 2103 -32f7 a 127 2103 -3301 6 132 2103 -3307 8 135 2103 -330f 8 136 2103 -3317 8 137 2103 -331f 10 139 2103 -332f 2 144 2103 -3331 4 161 2103 -3335 7 163 2103 -333c 4 166 2103 -3340 7 168 2103 -3347 6 172 2103 -334d b 173 2103 -3358 2 175 2103 -FUNC 335a a 4 _initp_misc_invarg -335a 0 38 1742 -335a 9 39 1742 -3363 1 40 1742 -FUNC 3364 fc 14 _invoke_watson -3364 1c 111 1742 -3380 6 128 1742 -3386 6 129 1742 -338c 6 130 1742 -3392 3 131 1742 -3395 3 132 1742 -3398 3 133 1742 -339b 7 134 1742 -33a2 7 135 1742 -33a9 4 136 1742 -33ad 4 137 1742 -33b1 4 138 1742 -33b5 4 139 1742 -33b9 1 140 1742 -33ba 6 141 1742 -33c0 6 147 1742 -33c6 19 148 1742 -33df 3 150 1742 -33e2 13 163 1742 -33f5 6 168 1742 -33fb 13 169 1742 -340e 6 171 1742 -3414 a 174 1742 -341e a 176 1742 -3428 8 180 1742 -3430 8 181 1742 -3438 12 184 1742 -344a 16 185 1742 -FUNC 3460 22 4 _set_invalid_parameter_handler -3460 1 207 1742 -3461 b 211 1742 -346c d 212 1742 -3479 5 214 1742 -347e 3 216 1742 -3481 1 217 1742 -FUNC 3482 d 0 _get_invalid_parameter_handler -3482 0 221 1742 -3482 c 225 1742 -348e 1 228 1742 -FUNC 348f 9 14 _invoke_watson(unsigned short const *,unsigned short const *,unsigned short const *,unsigned int,unsigned int) -348f 3 266 1742 -3492 1 274 1742 -3493 5 273 1742 -FUNC 3498 24 14 _invalid_parameter -3498 3 70 1742 -349b b 77 1742 -34a6 5 78 1742 -34ab 1 89 1742 -34ac 2 80 1742 -34ae 8 86 1742 -34b6 1 89 1742 -34b7 5 88 1742 -FUNC 34bc 10 0 _invalid_parameter_noinfo -34bc 0 98 1742 -34bc f 99 1742 -34cb 1 100 1742 -FUNC 34cc 9 14 _invalid_parameter(unsigned short const *,unsigned short const *,unsigned short const *,unsigned int,unsigned int) -34cc 3 249 1742 -34cf 1 257 1742 -34d0 5 256 1742 -FUNC 34d5 49 0 _mtinitlocks -34d5 2 137 785 -34d7 7 144 785 -34de 11 145 785 -34ef 2 146 785 -34f1 15 148 785 -3506 6 144 785 -350c 5 157 785 -3511 d 158 785 -FUNC 351e 55 0 _mtdeletelocks -351e 1 188 785 -351f d 194 785 -352c c 196 785 -3538 3 200 785 -353b 6 206 785 -3541 f 207 785 -3550 6 215 785 -3556 c 217 785 -3562 10 221 785 -3572 1 224 785 -FUNC 3573 15 4 _unlock -3573 3 371 785 -3576 10 375 785 -3586 2 376 785 -FUNC 3588 18 4 _lockerr_exit -3588 0 403 785 -3588 c 404 785 -3594 b 405 785 -359f 1 406 785 -FUNC 35a0 c3 4 _mtinitlocknum -35a0 c 259 785 -35ac 6 261 785 -35b2 a 269 785 -35bc 5 270 785 -35c1 7 271 785 -35c8 c 272 785 -35d4 e 276 785 -35e2 4 277 785 -35e6 e 279 785 -35f4 b 280 785 -35ff 4 281 785 -3603 8 284 785 -360b 3 285 785 -360e 4 287 785 -3612 11 288 785 -3623 7 289 785 -362a b 290 785 -3635 3 291 785 -3638 2 292 785 -363a 2 293 785 -363c 2 296 785 -363e 7 297 785 -3645 c 300 785 -3651 3 304 785 -3654 6 305 785 -365a 9 301 785 -FUNC 3663 31 4 _lock -3663 3 333 785 -3666 10 338 785 -3676 b 340 785 -3681 8 341 785 -3689 9 348 785 -3692 2 349 785 -FUNC 3694 65 c strcpy_s -3694 0 13 448 -3694 30 18 448 -36c4 c 19 448 -36d0 2 21 448 -36d2 d 23 448 -36df 4 27 448 -36e3 2 29 448 -36e5 e 30 448 -36f3 5 33 448 -36f8 1 34 448 -FUNC 3700 8b 4 strlen -3700 0 54 547 -3700 4 63 547 -3704 6 64 547 -370a 2 65 547 -370c 2 69 547 -370e 3 70 547 -3711 2 71 547 -3713 2 72 547 -3715 6 73 547 -371b 2 74 547 -371d 13 76 547 -3730 2 81 547 -3732 5 82 547 -3737 2 83 547 -3739 3 84 547 -373c 2 85 547 -373e 3 86 547 -3741 5 87 547 -3746 2 88 547 -3748 3 90 547 -374b 2 91 547 -374d 2 92 547 -374f 2 93 547 -3751 2 94 547 -3753 5 95 547 -3758 2 96 547 -375a 5 97 547 -375f 2 98 547 -3761 2 99 547 -3763 3 103 547 -3766 4 104 547 -376a 2 105 547 -376c 1 106 547 -376d 3 108 547 -3770 4 109 547 -3774 2 110 547 -3776 1 111 547 -3777 3 113 547 -377a 4 114 547 -377e 2 115 547 -3780 1 116 547 -3781 3 118 547 -3784 4 119 547 -3788 2 120 547 -378a 1 121 547 -FUNC 378b 6 0 HeapManager::Block::Block() -378b 6 90 3704 -FUNC 3791 1b 8 HeapManager::Constructor(void * (*)(unsigned int),void (*)(void *)) -3791 6 100 3704 -3797 7 101 3704 -379e 5 102 3704 -37a3 3 103 3704 -37a6 3 104 3704 -37a9 3 105 3704 -FUNC 37ac 26 0 HeapManager::Destructor() -37ac 9 110 3704 -37b5 2 111 3704 -37b7 5 113 3704 -37bc 15 115 3704 -37d1 1 118 3704 -FUNC 37d2 63 0 UnDecorator::getNumberOfDimensions() -37d2 0 1663 3704 -37d2 c 1664 3704 -37de 2 1665 3704 -37e0 1 1696 3704 -37e1 a 1666 3704 -37eb d 1667 3704 -37f8 1 1696 3704 -37f9 4 1670 3704 -37fd 4 1677 3704 -3801 a 1679 3704 -380b 6 1680 3704 -3811 d 1684 3704 -381e 5 1675 3704 -3823 e 1690 3704 -3831 3 1691 3704 -3834 1 1696 3704 -FUNC 3835 474 0 UnDecorator::getTypeEncoding() -3835 f 2335 3704 -3844 2 2336 3704 -3846 5 2341 3704 -384b 9 2345 3704 -3854 c 2351 3704 -3860 9 2423 3704 -3869 2 2426 3704 -386b 2a 2427 3704 -3895 8 2450 3704 -389d 2 2451 3704 -389f 24 2454 3704 -38c3 7 2462 3704 -38ca 5 2463 3704 -38cf 6 2353 3704 -38d5 8 2358 3704 -38dd b 2362 3704 -38e8 5 2363 3704 -38ed 2 2364 3704 -38ef 5 2365 3704 -38f4 9 2369 3704 -38fd 1b 2373 3704 -3918 11 2377 3704 -3929 a 2393 3704 -3933 10 2388 3704 -3943 2 2389 3704 -3945 18 2384 3704 -395d 2 2385 3704 -395f 12 2380 3704 -3971 16 2399 3704 -3987 11 2418 3704 -3998 a 2406 3704 -39a2 5 2407 3704 -39a7 15 2410 3704 -39bc 5 2422 3704 -39c1 1b 2427 3704 -39dc a 2430 3704 -39e6 5 2431 3704 -39eb 7 2472 3704 -39f2 a 2478 3704 -39fc c 2483 3704 -3a08 5 2485 3704 -3a0d 5 2486 3704 -3a12 5 2487 3704 -3a17 5 2490 3704 -3a1c 5 2505 3704 -3a21 5 2508 3704 -3a26 5 2509 3704 -3a2b 5 2434 3704 -3a30 5 2435 3704 -3a35 1a 2427 3704 -3a4f 30 2568 3704 -3a7f 5 2529 3704 -3a84 4 2530 3704 -3a88 a 2531 3704 -3a92 2 2532 3704 -3a94 a 2533 3704 -3a9e 5 2537 3704 -3aa3 5 2538 3704 -3aa8 2 2539 3704 -3aaa 5 2540 3704 -3aaf e 2544 3704 -3abd 6 2560 3704 -3ac3 10 2555 3704 -3ad3 2 2556 3704 -3ad5 18 2551 3704 -3aed 2 2552 3704 -3aef 12 2547 3704 -3b01 2 2564 3704 -3b03 a 2442 3704 -3b0d 2 2443 3704 -3b0f a 2438 3704 -3b19 2 2439 3704 -3b1b 5 2445 3704 -3b20 c 2574 3704 -3b2c 14 2577 3704 -3b40 a 2579 3704 -3b4a 18 2586 3704 -3b62 1a 2589 3704 -3b7c 1b 2590 3704 -3b97 5 2591 3704 -3b9c 1a 2594 3704 -3bb6 1b 2595 3704 -3bd1 5 2596 3704 -3bd6 1a 2599 3704 -3bf0 10 2600 3704 -3c00 2 2601 3704 -3c02 7 2604 3704 -3c09 2 2605 3704 -3c0b a 2608 3704 -3c15 2 2609 3704 -3c17 a 2612 3704 -3c21 2 2613 3704 -3c23 a 2616 3704 -3c2d 2 2617 3704 -3c2f a 2620 3704 -3c39 2 2621 3704 -3c3b a 2624 3704 -3c45 7 2634 3704 -3c4c 7 2635 3704 -3c53 7 2637 3704 -3c5a 10 2639 3704 -3c6a 3f 2648 3704 -FUNC 3ca9 b 0 UnDecorator::doUnderScore() -3ca9 b 4259 3704 -FUNC 3cb4 d 0 UnDecorator::doMSKeywords() -3cb4 d 4260 3704 -FUNC 3cc1 e 0 UnDecorator::doPtr64() -3cc1 e 4261 3704 -FUNC 3ccf e 0 UnDecorator::doFunctionReturns() -3ccf e 4262 3704 -FUNC 3cdd e 0 UnDecorator::doAllocationModel() -3cdd e 4263 3704 -FUNC 3ceb e 0 UnDecorator::doAllocationLanguage() -3ceb e 4264 3704 -FUNC 3cf9 12 0 UnDecorator::doThisTypes() -3cf9 12 4271 3704 -FUNC 3d0b e 0 UnDecorator::doAccessSpecifiers() -3d0b e 4272 3704 -FUNC 3d19 e 0 UnDecorator::doThrowTypes() -3d19 e 4273 3704 -FUNC 3d27 e 0 UnDecorator::doMemberTypes() -3d27 e 4274 3704 -FUNC 3d35 b 0 UnDecorator::doNameOnly() -3d35 b 4279 3704 -FUNC 3d40 b 0 UnDecorator::doTypeOnly() -3d40 b 4280 3704 -FUNC 3d4b b 0 UnDecorator::haveTemplateParameters() -3d4b b 4281 3704 -FUNC 3d56 e 0 UnDecorator::doEcsu() -3d56 e 4282 3704 -FUNC 3d64 b 0 UnDecorator::doNoIdentCharCheck() -3d64 b 4283 3704 -FUNC 3d6f e 0 UnDecorator::doEllipsis() -3d6f e 4284 3704 -FUNC 3d7d 19 4 UnDecorator::UScore(Tokens) -3d7d 0 4288 3704 -3d7d 9 4293 3704 -3d86 d 4294 3704 -3d93 2 4296 3704 -3d95 1 4298 3704 -FUNC 3d96 84 8 HeapManager::getMemory(unsigned int,int) -3d96 2 134 3737 -3d98 a 137 3737 -3da2 9 139 3737 -3dab 6 140 3737 -3db1 4 146 3737 -3db5 3 147 3737 -3db8 8 149 3737 -3dc0 7 153 3737 -3dc7 2 154 3737 -3dc9 1c 159 3737 -3de5 4 164 3737 -3de9 7 168 3737 -3df0 2 169 3737 -3df2 2 170 3737 -3df4 3 171 3737 -3df7 8 175 3737 -3dff 2 182 3737 -3e01 4 179 3737 -3e05 5 183 3737 -3e0a d 187 3737 -3e17 3 190 3737 -FUNC 3e1a d 0 DName::DName() -3e1a 2 210 3737 -3e1c 3 211 3737 -3e1f 7 220 3737 -3e26 1 221 3737 -FUNC 3e27 12 4 DName::DName(DNameNode *) -3e27 2 224 3737 -3e29 4 225 3737 -3e2d 9 234 3737 -3e36 3 235 3737 -FUNC 3e39 9c 4 DName::DName(DName const &) -3e39 2 259 3737 -3e3b 17 260 3737 -3e52 10 261 3737 -3e62 d 262 3737 -3e6f d 263 3737 -3e7c 10 264 3737 -3e8c 4 265 3737 -3e90 e 266 3737 -3e9e 13 267 3737 -3eb1 10 268 3737 -3ec1 11 269 3737 -3ed2 3 270 3737 -FUNC 3ed5 a 0 DName::status() -3ed5 a 481 3737 -FUNC 3edf 5 0 DName::clearStatus() -3edf 5 482 3737 -FUNC 3ee4 7 0 DName::setPtrRef() -3ee4 7 484 3737 -FUNC 3eeb a 0 DName::isPtrRef() -3eeb a 485 3737 -FUNC 3ef5 8 0 DName::setIsArray() -3ef5 8 490 3737 -FUNC 3efd a 0 DName::isArray() -3efd a 491 3737 -FUNC 3f07 a 0 DName::isNoTE() -3f07 a 492 3737 -FUNC 3f11 8 0 DName::setIsNoTE() -3f11 8 493 3737 -FUNC 3f19 a 0 DName::isPinPtr() -3f19 a 494 3737 -FUNC 3f23 8 0 DName::setIsPinPtr() -3f23 8 495 3737 -FUNC 3f2b a 0 DName::isComArray() -3f2b a 496 3737 -FUNC 3f35 8 0 DName::setIsComArray() -3f35 8 497 3737 -FUNC 3f3d a 0 DName::isVCallThunk() -3f3d a 498 3737 -FUNC 3f47 8 0 DName::setIsVCallThunk() -3f47 8 499 3737 -FUNC 3f4f 7b 4 DName::operator=(DName const &) -3f4f 3 879 3737 -3f52 12 880 3737 -3f64 17 882 3737 -3f7b d 883 3737 -3f88 d 884 3737 -3f95 d 885 3737 -3fa2 10 886 3737 -3fb2 10 887 3737 -3fc2 5 889 3737 -3fc7 3 897 3737 -FUNC 3fca 9 0 Replicator::isFull() -3fca 9 1001 3737 -FUNC 3fd3 25 4 Replicator::operator[](int) -3fd3 0 1028 3737 -3fd3 9 1029 3737 -3fdc b 1031 3737 -3fe7 6 1034 3737 -3fed 5 1032 3737 -3ff2 3 1030 3737 -3ff5 3 1036 3737 -FUNC 3ff8 d 0 DNameNode::DNameNode() -3ff8 d 1048 3737 -FUNC 4005 4 0 DNameNode::nextNode() -4005 4 1052 3737 -FUNC 4009 29 4 DNameNode::operator+=(DNameNode *) -4009 2 1131 3737 -400b 8 1132 3737 -4013 8 1134 3737 -401b b 1139 3737 -4026 4 1144 3737 -402a 2 1147 3737 -402c 3 1148 3737 -402f 3 1156 3737 -FUNC 4032 16 4 charNode::charNode(char) -4032 16 1166 3737 -FUNC 4048 4 0 charNode::length() -4048 4 1168 3737 -FUNC 404c 4 0 charNode::getLastChar() -404c 4 1170 3737 -FUNC 4050 1b 8 charNode::getString(char *,int) -4050 0 1173 3737 -4050 f 1174 3737 -405f 5 1175 3737 -4064 2 1176 3737 -4066 2 1177 3737 -4068 3 1183 3737 -FUNC 406b 4 0 pcharNode::length() -406b 4 1189 3737 -FUNC 406f 2f 4 pDNameNode::pDNameNode(DName *) -406f 2f 1244 3737 -FUNC 409e 25 4 DNameStatusNode::DNameStatusNode(DNameStatus) -409e 25 1261 3737 -FUNC 40c3 4 0 DNameStatusNode::length() -40c3 4 1263 3737 -FUNC 40c7 d 0 DNameStatusNode::getLastChar() -40c7 d 1266 3737 -FUNC 40d4 e 0 und_strlen -40d4 0 1283 3737 -40d4 6 1286 3737 -40da 7 1287 3737 -40e1 1 1291 3737 -FUNC 40e2 20 8 und_strncpy -40e2 0 1295 3737 -40e2 1b 1296 3737 -40fd 4 1299 3737 -4101 1 1301 3737 -FUNC 4102 25 4 und_strncmp -4102 0 1304 3737 -4102 7 1305 3737 -4109 2 1306 3737 -410b 1 1315 3737 -410c a 1308 3737 -4116 1 1310 3737 -4117 1 1311 3737 -4118 6 1308 3737 -411e 8 1314 3737 -4126 1 1315 3737 -FUNC 4127 33 0 UnDecorator::getDataIndirectType() -4127 33 4033 3704 -FUNC 415a 34 0 UnDecorator::getThisType() -415a 34 4034 3704 -FUNC 418e 13 c operator new(unsigned int,HeapManager &,int) -418e 13 131 3737 -FUNC 41a1 56 4 DName::DName(DName *) -41a1 0 274 3737 -41a1 a 275 3737 -41ab 23 277 3737 -41ce 13 278 3737 -41e1 2 281 3737 -41e3 4 283 3737 -41e7 3 284 3737 -41ea 7 295 3737 -41f1 6 296 3737 -FUNC 41f7 61 4 DName::DName(DNameStatus) -41f7 2 457 3737 -41f9 21 458 3737 -421a 1e 459 3737 -4238 7 467 3737 -423f 9 469 3737 -4248 a 470 3737 -4252 6 472 3737 -FUNC 4258 17 0 DName::isValid() -4258 17 478 3737 -FUNC 426f 15 0 DName::isEmpty() -426f 15 479 3737 -FUNC 4284 14 0 DName::isUDC() -4284 14 486 3737 -FUNC 4298 e 0 DName::setIsUDC() -4298 e 487 3737 -FUNC 42a6 14 0 DName::isUDTThunk() -42a6 14 488 3737 -FUNC 42ba 25 0 DName::length() -42ba 1 502 3737 -42bb 2 503 3737 -42bd a 506 3737 -42c7 4 507 3737 -42cb b 508 3737 -42d6 5 507 3737 -42db 3 510 3737 -42de 1 512 3737 -FUNC 42df 38 0 DName::getLastChar() -42df 2 516 3737 -42e1 2 517 3737 -42e3 9 519 3737 -42ec 6 520 3737 -42f2 a 521 3737 -42fc 2 522 3737 -42fe 7 520 3737 -4305 11 524 3737 -4316 1 526 3737 -FUNC 4317 91 8 DName::getString(char *,int) -4317 7 530 3737 -431e 9 531 3737 -4327 5 535 3737 -432c 7 537 3737 -4333 e 538 3737 -4341 c 544 3737 -434d d 550 3737 -435a 4 553 3737 -435e 8 555 3737 -4366 4 561 3737 -436a 6 565 3737 -4370 2 566 3737 -4372 b 570 3737 -437d 4 574 3737 -4381 2 578 3737 -4383 3 579 3737 -4386 3 586 3737 -4389 4 553 3737 -438d 4 590 3737 -4391 2 593 3737 -4393 6 594 3737 -4399 6 595 3737 -439f 5 599 3737 -43a4 4 601 3737 -FUNC 43a8 35 4 DName::operator|=(DName const &) -43a8 3 832 3737 -43ab 19 835 3737 -43c4 13 836 3737 -43d7 3 840 3737 -43da 3 842 3737 -FUNC 43dd 81 4 DName::operator=(DNameStatus) -43dd 2 928 3737 -43df 10 929 3737 -43ef 12 937 3737 -4401 26 945 3737 -4427 6 947 3737 -442d e 948 3737 -443b 10 933 3737 -444b d 934 3737 -4458 3 954 3737 -445b 3 956 3737 -FUNC 445e 1e 0 Replicator::Replicator() -445e 1e 1004 3737 -FUNC 447c 47 4 Replicator::operator+=(DName const &) -447c 3 1009 3737 -447f 12 1010 3737 -4491 20 1012 3737 -44b1 4 1017 3737 -44b5 8 1018 3737 -44bd 3 1022 3737 -44c0 3 1024 3737 -FUNC 44c3 47 0 DNameNode::clone() -44c3 3 1055 3737 -44c6 43 1056 3737 -4509 1 1057 3737 -FUNC 450a 65 8 pcharNode::pcharNode(char const *,int) -450a 1 1197 3737 -450b 1f 1200 3737 -452a c 1201 3737 -4536 8 1205 3737 -453e c 1207 3737 -454a a 1210 3737 -4554 b 1211 3737 -455f 2 1214 3737 -4561 3 1216 3737 -4564 4 1217 3737 -4568 7 1220 3737 -FUNC 456f 12 0 pcharNode::getLastChar() -456f 12 1191 3737 -FUNC 4581 31 8 pcharNode::getString(char *,int) -4581 0 1224 3737 -4581 b 1227 3737 -458c 2 1228 3737 -458e 21 1232 3737 -45af 3 1234 3737 -FUNC 45b2 f 0 pDNameNode::length() -45b2 f 1246 3737 -FUNC 45c1 f 0 pDNameNode::getLastChar() -45c1 f 1248 3737 -FUNC 45d0 1d 8 pDNameNode::getString(char *,int) -45d0 1d 1251 3737 -FUNC 45ed 33 8 DNameStatusNode::getString(char *,int) -45ed 0 1269 3737 -45ed b 1272 3737 -45f8 2 1273 3737 -45fa 23 1277 3737 -461d 3 1279 3737 -FUNC 4620 73 14 UnDecorator::UnDecorator(char *,char const *,int,char * (*)(long),unsigned long) -4620 16 736 3704 -4636 8 737 3704 -463e 5 738 3704 -4643 9 740 3704 -464c a 741 3704 -4656 5 745 3704 -465b 2 747 3704 -465d 6 748 3704 -4663 6 749 3704 -4669 8 754 3704 -4671 15 755 3704 -4686 d 758 3704 -FUNC 4693 2f 4 UnDecorator::getReturnType(DName *) -4693 3 2906 3704 -4696 8 2907 3704 -469e 15 2911 3704 -46b3 d 2915 3704 -46c0 2 2917 3704 -FUNC 46c2 f 0 UnDecorator::getStorageConvention() -46c2 f 4032 3704 -FUNC 46d1 79 4 DName::operator+=(DNameStatus) -46d1 4 799 3737 -46d5 17 800 3737 -46ec 20 804 3737 -470c 4 807 3737 -4710 7 809 3737 -4717 6 811 3737 -471d 8 812 3737 -4725 2 815 3737 -4727 3 816 3737 -472a 5 818 3737 -472f e 819 3737 -473d 7 801 3737 -4744 3 825 3737 -4747 3 827 3737 -FUNC 474a 68 4 DName::operator=(DName *) -474a 3 901 3737 -474d 12 902 3737 -475f 7 903 3737 -4766 29 911 3737 -478f 6 913 3737 -4795 c 914 3737 -47a1 2 917 3737 -47a3 9 918 3737 -47ac 3 922 3737 -47af 3 924 3737 -FUNC 47b2 a6 8 DName::doPchar(char const *,int) -47b2 3 962 3737 -47b5 1e 963 3737 -47d3 6 964 3737 -47d9 c 965 3737 -47e5 10 966 3737 -47f5 5 970 3737 -47fa 23 984 3737 -481d 6 986 3737 -4823 9 987 3737 -482c 2 988 3737 -482e 1b 977 3737 -4849 c 993 3737 -4855 3 995 3737 -FUNC 4858 26 4 DName::DName(char) -4858 3 238 3737 -485b 3 244 3737 -485e 7 248 3737 -4865 7 252 3737 -486c c 253 3737 -4878 6 255 3737 -FUNC 487e 31 4 DName::DName(char const *) -487e 0 300 3737 -487e 16 312 3737 -4894 15 313 3737 -48a9 6 315 3737 -FUNC 48af d0 8 DName::DName(char const * &,char) -48af 7 319 3737 -48b6 d 329 3737 -48c3 f 333 3737 -48d2 8 334 3737 -48da 9 342 3737 -48e3 40 343 3737 -4923 b 344 3737 -492e 9 355 3737 -4937 8 359 3737 -493f 8 361 3737 -4947 9 363 3737 -4950 3 364 3737 -4953 2 367 3737 -4955 3 347 3737 -4958 a 378 3737 -4962 8 380 3737 -496a 6 368 3737 -4970 7 371 3737 -4977 6 372 3737 -497d 2 375 3737 -FUNC 497f 69 8 DName::DName(unsigned __int64) -497f 15 384 3737 -4994 3 390 3737 -4997 a 398 3737 -49a1 4 402 3737 -49a5 13 406 3737 -49b8 3 407 3737 -49bb c 409 3737 -49c7 e 411 3737 -49d5 13 413 3737 -FUNC 49e8 96 8 DName::DName(__int64) -49e8 10 416 3737 -49f8 26 436 3737 -4a1e 15 438 3737 -4a33 10 443 3737 -4a43 5 444 3737 -4a48 c 446 3737 -4a54 6 448 3737 -4a5a 4 449 3737 -4a5e e 452 3737 -4a6c 12 453 3737 -FUNC 4a7e 2e 4 DName::operator+(DNameStatus) -4a7e 1 675 3737 -4a7f c 676 3737 -4a8b 9 679 3737 -4a94 b 680 3737 -4a9f 2 681 3737 -4aa1 5 682 3737 -4aa6 3 686 3737 -4aa9 3 688 3737 -FUNC 4aac 62 4 DName::operator+=(DName const &) -4aac 2 739 3737 -4aae f 740 3737 -4abd 13 741 3737 -4ad0 2 742 3737 -4ad2 9 743 3737 -4adb 6 744 3737 -4ae1 2 745 3737 -4ae3 7 747 3737 -4aea 6 749 3737 -4af0 9 750 3737 -4af9 2 751 3737 -4afb d 752 3737 -4b08 3 758 3737 -4b0b 3 760 3737 -FUNC 4b0e 8b 4 DName::operator+=(DName *) -4b0e 2 764 3737 -4b10 a 765 3737 -4b1a 9 766 3737 -4b23 8 767 3737 -4b2b 10 768 3737 -4b3b 8 789 3737 -4b43 20 770 3737 -4b63 4 773 3737 -4b67 7 775 3737 -4b6e 6 777 3737 -4b74 8 778 3737 -4b7c 2 781 3737 -4b7e 3 782 3737 -4b81 5 784 3737 -4b86 d 785 3737 -4b93 3 793 3737 -4b96 3 795 3737 -FUNC 4b99 1c 4 DName::operator=(char) -4b99 1 847 3737 -4b9a 15 854 3737 -4baf 3 856 3737 -4bb2 3 858 3737 -FUNC 4bb5 2a 4 DName::operator=(char const *) -4bb5 0 862 3737 -4bb5 24 869 3737 -4bd9 3 873 3737 -4bdc 3 875 3737 -FUNC 4bdf a6 0 UnDecorator::getCallingConvention() -4bdf 5 2825 3704 -4be4 f 2826 3704 -4bf3 c 2828 3704 -4bff 5 2835 3704 -4c04 1a 2845 3704 -4c1e 20 2852 3704 -4c3e 2 2875 3704 -4c40 2 2876 3704 -4c42 2 2871 3704 -4c44 2 2872 3704 -4c46 2 2867 3704 -4c48 2 2868 3704 -4c4a 2 2863 3704 -4c4c 2 2864 3704 -4c4e 1 2859 3704 -4c4f 2 2860 3704 -4c51 13 2855 3704 -4c64 e 2891 3704 -4c72 4 2895 3704 -4c76 d 2899 3704 -4c83 2 2901 3704 -FUNC 4c85 37 0 UnDecorator::getVCallThunkType() -4c85 3 4057 3704 -4c88 9 4059 3704 -4c91 5 4066 3704 -4c96 4 4059 3704 -4c9a 4 4066 3704 -4c9e 6 4061 3704 -4ca4 c 4062 3704 -4cb0 a 4064 3704 -4cba 2 4170 3704 -FUNC 4cbc 51 4 DName::operator+(DName const &) -4cbc 1 639 3737 -4cbd c 640 3737 -4cc9 b 643 3737 -4cd4 b 644 3737 -4cdf d 645 3737 -4cec 11 646 3737 -4cfd 2 647 3737 -4cff 8 648 3737 -4d07 3 652 3737 -4d0a 3 654 3737 -FUNC 4d0d 2e 4 DName::operator+(DName *) -4d0d 1 658 3737 -4d0e c 659 3737 -4d1a 9 662 3737 -4d23 b 663 3737 -4d2e 2 664 3737 -4d30 5 665 3737 -4d35 3 669 3737 -4d38 3 671 3737 -FUNC 4d3b 6a 4 DName::operator+=(char) -4d3b 1 693 3737 -4d3c b 694 3737 -4d47 9 695 3737 -4d50 6 696 3737 -4d56 2 697 3737 -4d58 7 699 3737 -4d5f 6 701 3737 -4d65 2b 702 3737 -4d90 2 703 3737 -4d92 c 704 3737 -4d9e 4 710 3737 -4da2 3 712 3737 -FUNC 4da5 6c 4 DName::operator+=(char const *) -4da5 2 716 3737 -4da7 f 717 3737 -4db6 9 718 3737 -4dbf 6 719 3737 -4dc5 2 720 3737 -4dc7 7 722 3737 -4dce 6 724 3737 -4dd4 28 725 3737 -4dfc 2 726 3737 -4dfe d 727 3737 -4e0b 3 733 3737 -4e0e 3 735 3737 -FUNC 4e11 e0 0 UnDecorator::getArgumentList() -4e11 7 3076 3704 -4e18 12 3078 3704 -4e2a 29 3081 3704 -4e53 6 3085 3704 -4e59 4 3086 3704 -4e5d 2 3087 3704 -4e5f e 3088 3704 -4e6d 6 3093 3704 -4e73 6 3095 3704 -4e79 5 3100 3704 -4e7e 1 3102 3704 -4e7f 11 3106 3704 -4e90 2 3109 3704 -4e92 16 3116 3704 -4ea8 19 3121 3704 -4ec1 9 3122 3704 -4eca 17 3126 3704 -4ee1 b 3132 3704 -4eec 3 3141 3704 -4eef 2 3143 3704 -FUNC 4ef1 4f 4 UnDecorator::getVdispMapType(DName const &) -4ef1 6 4230 3704 -4ef7 d 4231 3704 -4f04 c 4232 3704 -4f10 12 4233 3704 -4f22 9 4234 3704 -4f2b a 4236 3704 -4f35 6 4237 3704 -4f3b 3 4238 3704 -4f3e 2 4239 3704 -FUNC 4f40 22 8 operator+(char,DName const &) -4f40 22 198 3737 -FUNC 4f62 22 8 operator+(DNameStatus,DName const &) -4f62 22 201 3737 -FUNC 4f84 22 8 operator+(char const *,DName const &) -4f84 22 204 3737 -FUNC 4fa6 2e 4 DName::operator+(char) -4fa6 1 605 3737 -4fa7 c 606 3737 -4fb3 9 609 3737 -4fbc b 610 3737 -4fc7 2 611 3737 -4fc9 5 612 3737 -4fce 3 616 3737 -4fd1 3 618 3737 -FUNC 4fd4 2e 4 DName::operator+(char const *) -4fd4 1 622 3737 -4fd5 c 623 3737 -4fe1 9 626 3737 -4fea b 627 3737 -4ff5 2 628 3737 -4ff7 5 629 3737 -4ffc 3 633 3737 -4fff 3 635 3737 -FUNC 5002 141 4 UnDecorator::getDimension(bool) -5002 7 1616 3704 -5009 10 1618 3704 -5019 e 1620 3704 -5027 6 1623 3704 -502d f 1624 3704 -503c 8 1625 3704 -5044 47 1626 3704 -508b 4 1629 3704 -508f 4 1636 3704 -5093 8 1638 3704 -509b 20 1639 3704 -50bb d 1643 3704 -50c8 4 1634 3704 -50cc b 1649 3704 -50d7 2 1650 3704 -50d9 5 1652 3704 -50de 13 1653 3704 -50f1 c 1637 3704 -50fd 4 1641 3704 -5101 a 1653 3704 -510b 36 1655 3704 -5141 2 1659 3704 -FUNC 5143 d4 0 UnDecorator::getEnumType() -5143 6 2762 3704 -5149 1a 2766 3704 -5163 12 2770 3704 -5175 5 2774 3704 -517a 2 2775 3704 -517c 5 2779 3704 -5181 2 2780 3704 -5183 5 2786 3704 -5188 2 2787 3704 -518a d 2791 3704 -5197 1f 2801 3704 -51b6 1e 2807 3704 -51d4 e 2814 3704 -51e2 4 2795 3704 -51e6 d 2818 3704 -51f3 24 2820 3704 -FUNC 5217 c4 0 UnDecorator::getArgumentTypes() -5217 3 3035 3704 -521a 18 3036 3704 -5232 9 3046 3704 -523b 7 3051 3704 -5242 13 3052 3704 -5255 c 3064 3704 -5261 36 3058 3704 -5297 b 3061 3704 -52a2 21 3039 3704 -52c3 16 3042 3704 -52d9 2 3072 3704 -FUNC 52db 7e 0 UnDecorator::getThrowTypes() -52db 3 3148 3704 -52de e 3149 3704 -52ec 2 3150 3704 -52ee 21 3151 3704 -530f 1f 3153 3704 -532e 29 3155 3704 -5357 2 3157 3704 -FUNC 5359 125 c UnDecorator::getExtendedDataIndirectType(char &,bool &,int) -5359 6 3636 3704 -535f 1a 3641 3704 -5379 1c 3643 3704 -5395 a 3669 3704 -539f 6 3670 3704 -53a5 b 3672 3704 -53b0 a 3674 3704 -53ba 21 3675 3704 -53db 17 3678 3704 -53f2 a 3680 3704 -53fc 6 3689 3704 -5402 2 3691 3704 -5404 17 3693 3704 -541b 1e 3700 3704 -5439 6 3663 3704 -543f 2 3665 3704 -5441 3 3656 3704 -5444 d 3657 3704 -5451 2 3659 3704 -5453 6 3647 3704 -5459 13 3649 3704 -546c 10 3703 3704 -547c 2 3704 3704 -FUNC 547e 15f 4 UnDecorator::getArrayType(DName const &) -547e 3 3986 3704 -5481 12 3987 3704 -5493 7 3989 3704 -549a 4 3991 3704 -549e 2 3992 3704 -54a0 4 3994 3704 -54a4 9 3995 3704 -54ad 2a 4026 3704 -54d7 2 4028 3704 -54d9 c 3998 3704 -54e5 9 4000 3704 -54ee d 4001 3704 -54fb 35 4005 3704 -5530 b 4009 3704 -553b 4 4010 3704 -553f 8 4011 3704 -5547 2 4012 3704 -5549 2c 4013 3704 -5575 d 4017 3704 -5582 9 4018 3704 -558b 12 4019 3704 -559d a 4023 3704 -55a7 36 4024 3704 -FUNC 55dd 31 0 UnDecorator::getLexicalFrame() -55dd 31 4031 3704 -FUNC 560e 12 0 UnDecorator::getDisplacement() -560e 12 4048 3704 -FUNC 5620 12 0 UnDecorator::getCallIndex() -5620 12 4049 3704 -FUNC 5632 12 0 UnDecorator::getGuardNumber() -5632 12 4050 3704 -FUNC 5644 150 4 UnDecorator::getVfTableType(DName const &) -5644 7 4174 3704 -564b d 4175 3704 -5658 1d 4178 3704 -5675 2c 4180 3704 -56a1 f 4182 3704 -56b0 e 4184 3704 -56be 5 4186 3704 -56c3 11 4188 3704 -56d4 2d 4190 3704 -5701 b 4194 3704 -570c 7 4195 3704 -5713 10 4199 3704 -5723 a 4200 3704 -572d b 4188 3704 -5738 b 4204 3704 -5743 a 4206 3704 -574d 7 4207 3704 -5754 9 4209 3704 -575d a 4216 3704 -5767 6 4217 3704 -576d 2 4220 3704 -576f 9 4221 3704 -5778 17 4222 3704 -578f 3 4224 3704 -5792 2 4226 3704 -FUNC 5794 a0 8 UnDecorator::getStringEncoding(char *,int) -5794 6 1447 3704 -579a b 1448 3704 -57a5 22 1451 3704 -57c7 6 1456 3704 -57cd b 1459 3704 -57d8 b 1462 3704 -57e3 13 1464 3704 -57f6 c 1466 3704 -5802 5 1469 3704 -5807 6 1470 3704 -580d 4 1471 3704 -5811 14 1477 3704 -5825 d 1452 3704 -5832 2 1478 3704 -FUNC 5834 50 0 UnDecorator::getSignedDimension() -5834 5 1603 3704 -5839 b 1604 3704 -5844 c 1605 3704 -5850 2 1606 3704 -5852 23 1608 3704 -5875 d 1611 3704 -5882 2 1612 3704 -FUNC 5884 2bb 0 UnDecorator::getTemplateConstant() -5884 15 1877 3704 -5899 f 1884 3704 -58a8 32 1885 3704 -58da 9 1921 3704 -58e3 b 1922 3704 -58ee 20 1924 3704 -590e 12 1931 3704 -5920 e 1932 3704 -592e 3 1937 3704 -5931 7 1939 3704 -5938 6 1941 3704 -593e 4 1942 3704 -5942 2 1944 3704 -5944 4 1945 3704 -5948 2a 1950 3704 -5972 a 1900 3704 -597c 6 1902 3704 -5982 11 1903 3704 -5993 1b 1906 3704 -59ae b 1892 3704 -59b9 6 2034 3704 -59bf 7 1954 3704 -59c6 26 1885 3704 -59ec b 1990 3704 -59f7 c 1991 3704 -5a03 10 1992 3704 -5a13 9 1966 3704 -5a1c c 1968 3704 -5a28 e 1971 3704 -5a36 10 1973 3704 -5a46 6 1975 3704 -5a4c 6 1976 3704 -5a52 3 1980 3704 -5a55 29 1981 3704 -5a7e a 1983 3704 -5a88 a 2001 3704 -5a92 a 2003 3704 -5a9c 13 2007 3704 -5aaf a 2008 3704 -5ab9 11 2012 3704 -5aca 13 2015 3704 -5add a 2016 3704 -5ae7 13 2021 3704 -5afa a 2022 3704 -5b04 13 2026 3704 -5b17 d 2029 3704 -5b24 7 1913 3704 -5b2b 14 2041 3704 -FUNC 5b3f d9 8 UnDecorator::getPtrRefDataType(DName const &,int) -5b3f 3 3937 3704 -5b42 11 3940 3704 -5b53 b 3944 3704 -5b5e 12 3948 3704 -5b70 12 3949 3704 -5b82 10 3951 3704 -5b92 5 3957 3704 -5b97 16 3961 3704 -5bad d 3967 3704 -5bba c 3968 3704 -5bc6 b 3970 3704 -5bd1 6 3972 3704 -5bd7 1e 3974 3704 -5bf5 e 3976 3704 -5c03 13 3980 3704 -5c16 2 3982 3704 -FUNC 5c18 14 4 UnDecorator::getVbTableType(DName const &) -5c18 14 4053 3704 -FUNC 5c2c 1b8 0 UnDecorator::getTemplateArgumentList() -5c2c 14 1775 3704 -5c40 c 1777 3704 -5c4c 7 1778 3704 -5c53 2a 1781 3704 -5c7d 6 1785 3704 -5c83 4 1786 3704 -5c87 2 1787 3704 -5c89 e 1788 3704 -5c97 8 1793 3704 -5c9f 5 1798 3704 -5ca4 1 1800 3704 -5ca5 11 1804 3704 -5cb6 5 1807 3704 -5cbb 7 1810 3704 -5cc2 7 1816 3704 -5cc9 6 1817 3704 -5ccf 12 1818 3704 -5ce1 a 1820 3704 -5ceb 5 1821 3704 -5cf0 e 1822 3704 -5cfe 5 1824 3704 -5d03 9 1830 3704 -5d0c c 1832 3704 -5d18 e 1835 3704 -5d26 10 1837 3704 -5d36 6 1839 3704 -5d3c 1 1840 3704 -5d3d 2 1842 3704 -5d3f 25 1843 3704 -5d64 2 1846 3704 -5d66 10 1847 3704 -5d76 2 1850 3704 -5d78 1f 1851 3704 -5d97 17 1857 3704 -5dae 9 1858 3704 -5db7 16 1862 3704 -5dcd 17 1873 3704 -FUNC 5de4 56f 8 UnDecorator::getOperatorName(bool,bool *) -5de4 b 1095 3704 -5def 53 1103 3704 -5e42 13 1183 3704 -5e55 c 1439 3704 -5e61 1d 1440 3704 -5e7e 11 1442 3704 -5e8f 5 1444 3704 -5e94 3 1124 3704 -5e97 8 1126 3704 -5e9f 21 1127 3704 -5ec0 c 1129 3704 -5ecc a 1130 3704 -5ed6 a 1133 3704 -5ee0 7 1135 3704 -5ee7 3 1136 3704 -5eea 9 1144 3704 -5ef3 5 1145 3704 -5ef8 6 1148 3704 -5efe 2 1154 3704 -5f00 15 1156 3704 -5f15 18 1160 3704 -5f2d 1a 1161 3704 -5f47 10 1166 3704 -5f57 b 1167 3704 -5f62 5 1170 3704 -5f67 6 1106 3704 -5f6d f 1108 3704 -5f7c 21 1103 3704 -5f9d 3d 1220 3704 -5fda 18 1240 3704 -5ff2 b 1234 3704 -5ffd 5 1235 3704 -6002 13 1245 3704 -6015 7 1247 3704 -601c 8 1249 3704 -6024 18 1220 3704 -603c 13 1255 3704 -604f 7 1256 3704 -6056 2 1257 3704 -6058 16 1335 3704 -606e 7 1356 3704 -6075 6 1350 3704 -607b 2 1352 3704 -607d 25 1220 3704 -60a2 13 1290 3704 -60b5 17 1291 3704 -60cc 24 1292 3704 -60f0 14 1313 3704 -6104 6 1316 3704 -610a 5 1317 3704 -610f 10 1302 3704 -611f 20 1303 3704 -613f 20 1304 3704 -615f 20 1305 3704 -617f 22 1306 3704 -61a1 12 1307 3704 -61b3 c 1296 3704 -61bf 2b 1297 3704 -61ea 13 1281 3704 -61fd 17 1282 3704 -6214 1a 1283 3704 -622e 5 1284 3704 -6233 2d 1220 3704 -6260 25 1364 3704 -6285 10 1373 3704 -6295 13 1378 3704 -62a8 a 1397 3704 -62b2 13 1399 3704 -62c5 a 1403 3704 -62cf 6 1405 3704 -62d5 2 1408 3704 -62d7 13 1410 3704 -62ea d 1413 3704 -62f7 5 1415 3704 -62fc 10 1278 3704 -630c b 1330 3704 -6317 5 1428 3704 -631c 3 1187 3704 -631f 13 1216 3704 -6332 8 1437 3704 -633a 19 1438 3704 -FUNC 6353 153 4 UnDecorator::getTemplateName(bool) -6353 5 1700 3704 -6358 1f 1704 3704 -6377 16 1714 3704 -638d 1d 1716 3704 -63aa 23 1725 3704 -63cd e 1729 3704 -63db 6 1730 3704 -63e1 12 1732 3704 -63f3 2 1734 3704 -63f5 16 1735 3704 -640b c 1738 3704 -6417 7 1739 3704 -641e 6 1746 3704 -6424 21 1747 3704 -6445 c 1749 3704 -6451 a 1750 3704 -645b a 1753 3704 -6465 6 1755 3704 -646b 6 1756 3704 -6471 23 1769 3704 -6494 d 1705 3704 -64a1 5 1771 3704 -FUNC 64a6 1ea 4 UnDecorator::getZName(bool) -64a6 10 1007 3704 -64b6 11 1008 3704 -64c7 3 1013 3704 -64ca 26 1043 3704 -64f0 b 1024 3704 -64fb 5 1026 3704 -6500 16 1028 3704 -6516 16 1030 3704 -652c 17 1031 3704 -6543 7 1033 3704 -654a 25 1040 3704 -656f 5 1042 3704 -6574 29 1043 3704 -659d 8 1045 3704 -65a5 b 1051 3704 -65b0 c 1053 3704 -65bc e 1056 3704 -65ca 10 1058 3704 -65da 4 1060 3704 -65de b 1061 3704 -65e9 2 1063 3704 -65eb a 1064 3704 -65f5 10 1065 3704 -6605 2 1068 3704 -6607 d 1069 3704 -6614 2a 1070 3704 -663e 2 1073 3704 -6640 1a 1076 3704 -665a 11 1083 3704 -666b 9 1084 3704 -6674 f 1087 3704 -6683 d 1090 3704 -FUNC 6690 e4 0 UnDecorator::getScopedName() -6690 7 2727 3704 -6697 e 2728 3704 -66a5 15 2733 3704 -66ba 1a 2737 3704 -66d4 2a 2738 3704 -66fe b 2742 3704 -6709 8 2743 3704 -6711 4 2744 3704 -6715 1b 2745 3704 -6730 b 2746 3704 -673b 7 2747 3704 -6742 2 2748 3704 -6744 2b 2749 3704 -676f 3 2753 3704 -6772 2 2755 3704 -FUNC 6774 f 0 UnDecorator::getECSUName() -6774 f 2758 3704 -FUNC 6783 100 0 UnDecorator::getECSUDataType() -6783 3 3392 3704 -6786 20 3395 3704 -67a6 37 3399 3704 -67dd 5 3424 3704 -67e2 2 3425 3704 -67e4 5 3420 3704 -67e9 2 3421 3704 -67eb 26 3431 3704 -6811 2 3432 3704 -6813 5 3415 3704 -6818 2 3416 3704 -681a 5 3411 3704 -681f 2 3412 3704 -6821 d 3407 3704 -682e 7 3439 3704 -6835 4 3441 3704 -6839 c 3442 3704 -6845 16 3446 3704 -685b e 3450 3704 -6869 18 3404 3704 -6881 2 3452 3704 -FUNC 6883 46 0 UnDecorator::getSymbolName() -6883 3 989 3704 -6886 a 990 3704 -6890 6 991 3704 -6896 c 992 3704 -68a2 16 997 3704 -68b8 f 1001 3704 -68c7 2 1003 3704 -FUNC 68c9 92 0 UnDecorator::getBasedType() -68c9 6 2653 3704 -68cf 13 2654 3704 -68e2 a 2659 3704 -68ec 17 2661 3704 -6903 c 2707 3704 -690f 13 2699 3704 -6922 2 2700 3704 -6924 d 2674 3704 -6931 2 2711 3704 -6933 a 2712 3704 -693d d 2716 3704 -694a f 2720 3704 -6959 2 2722 3704 -FUNC 695b b42 4 UnDecorator::composeDeclaration(DName const &) -695b 6 2045 3704 -6961 e 2046 3704 -696f 5 2047 3704 -6974 a 2048 3704 -697e b 2053 3704 -6989 f 2054 3704 -6998 8 2055 3704 -69a0 15 2056 3704 -69b5 8 2057 3704 -69bd 10 2058 3704 -69cd 83 2075 3704 -6a50 7 2081 3704 -6a57 19 2082 3704 -6a70 21 2083 3704 -6a91 2 2084 3704 -6a93 15 2085 3704 -6aa8 27 2090 3704 -6acf 33 2092 3704 -6b02 9 2094 3704 -6b0b 9 2096 3704 -6b14 2b 2098 3704 -6b3f d 2101 3704 -6b4c 9 2103 3704 -6b55 2d 2105 3704 -6b82 2e 2107 3704 -6bb0 5 2111 3704 -6bb5 3 2114 3704 -6bb8 3 2115 3704 -6bbb 3 2116 3704 -6bbe 3 2117 3704 -6bc1 3 2118 3704 -6bc4 26 2121 3704 -6bea 12 2123 3704 -6bfc 19 2125 3704 -6c15 19 2126 3704 -6c2e 2 2127 3704 -6c30 12 2129 3704 -6c42 19 2131 3704 -6c5b 1b 2134 3704 -6c76 13 2141 3704 -6c89 a 2142 3704 -6c93 15 2143 3704 -6ca8 2 2144 3704 -6caa f 2145 3704 -6cb9 10 2147 3704 -6cc9 9 2151 3704 -6cd2 22 2152 3704 -6cf4 2 2153 3704 -6cf6 13 2168 3704 -6d09 c 2172 3704 -6d15 14 2173 3704 -6d29 1a 2174 3704 -6d43 2 2175 3704 -6d45 b 2176 3704 -6d50 5 2182 3704 -6d55 6 2185 3704 -6d5b 27 2187 3704 -6d82 b 2189 3704 -6d8d 5 2190 3704 -6d92 1b 2194 3704 -6dad 15 2195 3704 -6dc2 1d 2202 3704 -6ddf 16 2204 3704 -6df5 55 2205 3704 -6e4a 12 2206 3704 -6e5c 2b 2207 3704 -6e87 2 2208 3704 -6e89 d 2209 3704 -6e96 1a 2211 3704 -6eb0 2e 2218 3704 -6ede 12 2222 3704 -6ef0 c 2223 3704 -6efc c 2227 3704 -6f08 15 2228 3704 -6f1d 2 2229 3704 -6f1f f 2230 3704 -6f2e 1a 2235 3704 -6f48 b 2237 3704 -6f53 3 2238 3704 -6f56 5 2243 3704 -6f5b b 2245 3704 -6f66 1c 2250 3704 -6f82 13 2251 3704 -6f95 e 2252 3704 -6fa3 2 2253 3704 -6fa5 10 2254 3704 -6fb5 3d 2255 3704 -6ff2 c 2256 3704 -6ffe e 2257 3704 -700c 4c 2258 3704 -7058 a 2259 3704 -7062 4b 2260 3704 -70ad 7 2261 3704 -70b4 4b 2262 3704 -70ff f 2263 3704 -710e f 2264 3704 -711d 6 2268 3704 -7123 61 2277 3704 -7184 15 2281 3704 -7199 2 2283 3704 -719b 18 2285 3704 -71b3 2d 2292 3704 -71e0 12 2294 3704 -71f2 37 2296 3704 -7229 23 2297 3704 -724c b7 2299 3704 -7303 23 2300 3704 -7326 12 2306 3704 -7338 37 2307 3704 -736f b 2308 3704 -737a 37 2309 3704 -73b1 b 2310 3704 -73bc 30 2311 3704 -73ec 23 2312 3704 -740f 36 2319 3704 -7445 1e 2320 3704 -7463 8 2325 3704 -746b 1e 2326 3704 -7489 12 2329 3704 -749b 2 2331 3704 -FUNC 749d 211 0 UnDecorator::getDecoratedName() -749d 7 861 3704 -74a4 e 864 3704 -74b2 a 868 3704 -74bc b 873 3704 -74c7 8 874 3704 -74cf 11 876 3704 -74e0 10 878 3704 -74f0 6 882 3704 -74f6 9 903 3704 -74ff 9 906 3704 -7508 8 910 3704 -7510 6 912 3704 -7516 5 910 3704 -751b 2 915 3704 -751d a 918 3704 -7527 19 919 3704 -7540 6 920 3704 -7546 f 924 3704 -7555 8 925 3704 -755d 17 929 3704 -7574 a 930 3704 -757e c 932 3704 -758a 8 933 3704 -7592 5 934 3704 -7597 18 935 3704 -75af a 936 3704 -75b9 13 937 3704 -75cc b 938 3704 -75d7 2 940 3704 -75d9 29 941 3704 -7602 4 945 3704 -7606 10 946 3704 -7616 9 948 3704 -761f 3 950 3704 -7622 1c 955 3704 -763e f 959 3704 -764d 4 976 3704 -7651 6 962 3704 -7657 14 964 3704 -766b 19 967 3704 -7684 5 968 3704 -7689 10 971 3704 -7699 2 979 3704 -769b 2 980 3704 -769d f 982 3704 -76ac 2 984 3704 -FUNC 76ae 28b 0 UnDecorator::getScope() -76ae d 1482 3704 -76bb f 1483 3704 -76ca 2a 1489 3704 -76f4 14 1492 3704 -7708 b 1495 3704 -7713 16 1496 3704 -7729 5 1498 3704 -772e 17 1499 3704 -7745 3 1500 3704 -7748 f 1506 3704 -7757 2a 1507 3704 -7781 10 1566 3704 -7791 5 1567 3704 -7796 34 1561 3704 -77ca 4 1562 3704 -77ce 5 1563 3704 -77d3 e 1510 3704 -77e1 5 1514 3704 -77e6 22 1515 3704 -7808 e 1518 3704 -7816 6 1519 3704 -781c 5 1522 3704 -7821 2a 1523 3704 -784b 2 1524 3704 -784d f 1546 3704 -785c 1a 1548 3704 -7876 b 1550 3704 -7881 9 1551 3704 -788a 2 1554 3704 -788c f 1530 3704 -789b 2 1570 3704 -789d 21 1571 3704 -78be a 1489 3704 -78c8 f 1577 3704 -78d7 18 1590 3704 -78ef 2 1591 3704 -78f1 b 1580 3704 -78fc 7 1581 3704 -7903 2 1582 3704 -7905 2b 1583 3704 -7930 4 1597 3704 -7934 5 1599 3704 -FUNC 7939 341 4 UnDecorator::getFunctionIndirectType(DName const &) -7939 3 3461 3704 -793c e 3462 3704 -794a 15 3463 3704 -795f f 3465 3704 -796e 10 3466 3704 -797e 7 3469 3704 -7985 a 3471 3704 -798f 6 3473 3704 -7995 7 3475 3704 -799c d 3477 3704 -79a9 17 3482 3704 -79c0 9 3485 3704 -79c9 3 3486 3704 -79cc 5 3490 3704 -79d1 f 3491 3704 -79e0 6 3496 3704 -79e6 13 3497 3704 -79f9 b 3501 3704 -7a04 1e 3503 3704 -7a22 8 3505 3704 -7a2a 29 3506 3704 -7a53 2 3507 3704 -7a55 17 3508 3704 -7a6c f 3510 3704 -7a7b 4 3511 3704 -7a7f 10 3518 3704 -7a8f 15 3519 3704 -7aa4 9 3527 3704 -7aad d 3528 3704 -7aba 30 3529 3704 -7aea 2 3530 3704 -7aec 11 3521 3704 -7afd 7 3514 3704 -7b04 16 3516 3704 -7b1a 13 3531 3704 -7b2d d 3535 3704 -7b3a 22 3537 3704 -7b5c 2 3546 3704 -7b5e 13 3547 3704 -7b71 c 3551 3704 -7b7d 28 3552 3704 -7ba5 1e 3557 3704 -7bc3 c 3558 3704 -7bcf 2e 3561 3704 -7bfd 10 3563 3704 -7c0d c 3564 3704 -7c19 c 3566 3704 -7c25 15 3567 3704 -7c3a 2 3568 3704 -7c3c f 3569 3704 -7c4b 4 3573 3704 -7c4f b 3574 3704 -7c5a e 3580 3704 -7c68 10 3576 3704 -7c78 2 3581 3704 -FUNC 7c7a 4e4 10 UnDecorator::getDataIndirectType(DName const &,char,DName const &,int) -7c7a 6 3707 3704 -7c80 23 3711 3704 -7ca3 4 3713 3704 -7ca7 17 3715 3704 -7cbe c 3717 3704 -7cca 10 3719 3704 -7cda e 3723 3704 -7ce8 6 3725 3704 -7cee 15 3726 3704 -7d03 17 3732 3704 -7d1a 11 3751 3704 -7d2b a 3752 3704 -7d35 32 3753 3704 -7d67 5 3754 3704 -7d6c 11 3743 3704 -7d7d a 3744 3704 -7d87 25 3745 3704 -7dac 2 3746 3704 -7dae 8 3747 3704 -7db6 2 3749 3704 -7db8 19 3735 3704 -7dd1 a 3736 3704 -7ddb 14 3737 3704 -7def 5 3738 3704 -7df4 11 3739 3704 -7e05 6 3766 3704 -7e0b a 3768 3704 -7e15 17 3770 3704 -7e2c 10 3772 3704 -7e3c 1a 3778 3704 -7e56 5 3780 3704 -7e5b 6 3782 3704 -7e61 9 3787 3704 -7e6a b 3789 3704 -7e75 19 3791 3704 -7e8e c 3793 3704 -7e9a 24 3794 3704 -7ebe c 3796 3704 -7eca 22 3797 3704 -7eec 9 3801 3704 -7ef5 5 3805 3704 -7efa 7 3806 3704 -7f01 6 3810 3704 -7f07 1e 3812 3704 -7f25 8 3814 3704 -7f2d 1b 3815 3704 -7f48 2 3816 3704 -7f4a 16 3817 3704 -7f60 a 3819 3704 -7f6a 13 3828 3704 -7f7d b 3833 3704 -7f88 c 3834 3704 -7f94 8 3835 3704 -7f9c 6 3836 3704 -7fa2 b 3842 3704 -7fad b 3843 3704 -7fb8 3 3863 3704 -7fbb 6 3864 3704 -7fc1 22 3866 3704 -7fe3 9 3871 3704 -7fec 13 3872 3704 -7fff 5 3876 3704 -8004 1e 3877 3704 -8022 5 3879 3704 -8027 1e 3880 3704 -8045 5 3884 3704 -804a e 3885 3704 -8058 14 3889 3704 -806c 28 3895 3704 -8094 2 3890 3704 -8096 b 3891 3704 -80a1 2 3892 3704 -80a3 c 3898 3704 -80af 17 3899 3704 -80c6 4 3902 3704 -80ca 6 3904 3704 -80d0 7 3906 3704 -80d7 8 3774 3704 -80df 13 3918 3704 -80f2 12 3922 3704 -8104 29 3925 3704 -812d 10 3923 3704 -813d c 3928 3704 -8149 3 3929 3704 -814c 10 3931 3704 -815c 2 3933 3704 -FUNC 815e 14c 0 UnDecorator::operator char *() -815e 6 762 3704 -8164 4 763 3704 -8168 f 764 3704 -8177 9 770 3704 -8180 c 772 3704 -818c 7 775 3704 -8193 1d 776 3704 -81b0 4 782 3704 -81b4 16 783 3704 -81ca 9 785 3704 -81d3 5 794 3704 -81d8 9 795 3704 -81e1 13 799 3704 -81f4 e 808 3704 -8202 2 809 3704 -8204 2 848 3704 -8206 1a 810 3704 -8220 e 813 3704 -822e e 811 3704 -823c 9 817 3704 -8245 e 819 3704 -8253 d 820 3704 -8260 a 824 3704 -826a f 825 3704 -8279 5 828 3704 -827e 2 829 3704 -8280 2 830 3704 -8282 5 831 3704 -8287 1 832 3704 -8288 5 833 3704 -828d 1 835 3704 -828e 5 834 3704 -8293 2 838 3704 -8295 a 839 3704 -829f 9 841 3704 -82a8 2 848 3704 -FUNC 82aa 116 c UnDecorator::getPtrRefType(DName const &,DName const &,char) -82aa 5 3585 3704 -82af f 3588 3704 -82be d 3589 3704 -82cb b 3591 3704 -82d6 20 3594 3704 -82f6 b 3595 3704 -8301 b 3597 3704 -830c 9 3598 3704 -8315 14 3600 3704 -8329 14 3606 3704 -833d 1b 3608 3704 -8358 a 3612 3704 -8362 b 3615 3704 -836d c 3617 3704 -8379 9 3618 3704 -8382 c 3620 3704 -838e c 3622 3704 -839a a 3623 3704 -83a4 b 3625 3704 -83af f 3629 3704 -83be 2 3632 3704 -FUNC 83c0 1b 8 UnDecorator::getPointerType(DName const &,DName const &) -83c0 1b 4037 3704 -FUNC 83db 1b 8 UnDecorator::getPointerTypeArray(DName const &,DName const &) -83db 1b 4040 3704 -FUNC 83f6 1b 8 UnDecorator::getReferenceType(DName const &,DName const &) -83f6 1b 4043 3704 -FUNC 8411 a3 18 __unDName -8411 f 604 3704 -8420 9 606 3704 -8429 4 607 3704 -842d a 612 3704 -8437 2 613 3704 -8439 8 614 3704 -8441 3 615 3704 -8444 20 618 3704 -8464 1a 627 3704 -847e e 628 3704 -848c a 633 3704 -8496 c 636 3704 -84a2 3 643 3704 -84a5 6 645 3704 -84ab 9 637 3704 -FUNC 84b4 a3 1c __unDNameEx -84b4 f 684 3704 -84c3 9 687 3704 -84cc 4 688 3704 -84d0 a 693 3704 -84da 2 694 3704 -84dc 8 695 3704 -84e4 3 696 3704 -84e7 20 699 3704 -8507 1a 708 3704 -8521 e 709 3704 -852f a 714 3704 -8539 c 717 3704 -8545 3 724 3704 -8548 6 726 3704 -854e 9 718 3704 -FUNC 8557 387 4 UnDecorator::getBasicDataType(DName const &) -8557 3 3162 3704 -855a 15 3163 3704 -856f 6 3165 3704 -8575 4 3168 3704 -8579 35 3173 3704 -85ae 5 3178 3704 -85b3 5 3179 3704 -85b8 5 3183 3704 -85bd 5 3184 3704 -85c2 5 3188 3704 -85c7 5 3189 3704 -85cc 5 3193 3704 -85d1 5 3194 3704 -85d6 5 3203 3704 -85db 5 3204 3704 -85e0 2a 3173 3704 -860a 3c 3222 3704 -8646 5 3231 3704 -864b 5 3232 3704 -8650 22 3273 3704 -8672 5 3235 3704 -8677 5 3236 3704 -867c f 3222 3704 -868b 5 3243 3704 -8690 5 3244 3704 -8695 5 3239 3704 -869a 5 3240 3704 -869f 5 3247 3704 -86a4 5 3248 3704 -86a9 1b 3222 3704 -86c4 3 3264 3704 -86c7 6 3262 3704 -86cd 10 3264 3704 -86dd 10 3266 3704 -86ed 11 3267 3704 -86fe 5 3275 3704 -8703 2 3276 3704 -8705 5 3255 3704 -870a 2 3257 3704 -870c 3 3224 3704 -870f 12 3343 3704 -8721 9 3345 3704 -872a 7 3347 3704 -8731 16 3348 3704 -8747 6 3352 3704 -874d d 3353 3704 -875a 5 3355 3704 -875f 5 3227 3704 -8764 2 3278 3704 -8766 d 3281 3704 -8773 2 3282 3704 -8775 5 3219 3704 -877a 2 3220 3704 -877c 3 3287 3704 -877f 5 3290 3704 -8784 d 3207 3704 -8791 d 3212 3704 -879e 9 3297 3704 -87a7 1f 3301 3704 -87c6 19 3314 3704 -87df c 3322 3704 -87eb 2 3326 3704 -87ed c 3307 3704 -87f9 2 3308 3704 -87fb 1e 3311 3704 -8819 10 3332 3704 -8829 18 3333 3704 -8841 5 3337 3704 -8846 c 3360 3704 -8852 5 3367 3704 -8857 d 3369 3704 -8864 5 3371 3704 -8869 d 3372 3704 -8876 2 3373 3704 -8878 5 3374 3704 -887d d 3375 3704 -888a 17 3380 3704 -88a1 16 3385 3704 -88b7 27 3387 3704 -FUNC 88de 13e 4 UnDecorator::getPrimaryDataType(DName const &) -88de 7 2962 3704 -88e5 2b 2966 3704 -8910 12 3027 3704 -8922 d 2972 3704 -892f c 2974 3704 -893b a 2975 3704 -8945 b 2981 3704 -8950 6 2984 3704 -8956 1e 2986 3704 -8974 7 2996 3704 -897b 2 2997 3704 -897d 6 2998 3704 -8983 f 3000 3704 -8992 8 3002 3704 -899a 10 3004 3704 -89aa 2f 3022 3704 -89d9 16 3012 3704 -89ef 17 3008 3704 -8a06 14 2969 3704 -8a1a 2 3030 3704 -FUNC 8a1c b1 4 UnDecorator::getDataType(DName *) -8a1c 6 2922 3704 -8a22 b 2923 3704 -8a2d 15 2928 3704 -8a42 10 2954 3704 -8a52 6 2934 3704 -8a58 c 2936 3704 -8a64 f 2937 3704 -8a73 13 2939 3704 -8a86 6 2944 3704 -8a8c 29 2946 3704 -8ab5 2 2947 3704 -8ab7 14 2931 3704 -8acb 2 2957 3704 -FUNC 8acd 64 4 UnDecorator::getExternalDataType(DName const &) -8acd 7 4244 3704 -8ad4 1e 4247 3704 -8af2 9 4248 3704 -8afb 30 4253 3704 -8b2b 4 4255 3704 -8b2f 2 4257 3704 -FUNC 8b31 4f 4 V6_HeapAlloc -8b31 c 27 3455 -8b3d 4 28 3455 -8b41 b 29 3455 -8b4c 8 31 3455 -8b54 4 32 3455 -8b58 a 33 3455 -8b62 c 35 3455 -8b6e 3 39 3455 -8b71 6 40 3455 -8b77 9 36 3455 -FUNC 8b80 75 4 _heap_alloc -8b80 0 90 3455 -8b80 9 95 3455 -8b89 5 96 3455 -8b8e 7 97 3455 -8b95 c 98 3455 -8ba1 a 104 3455 -8bab 18 105 3455 -8bc3 1 129 3455 -8bc4 a 107 3455 -8bce 9 108 3455 -8bd7 2 109 3455 -8bd9 4 121 3455 -8bdd 1 122 3455 -8bde 6 124 3455 -8be4 10 126 3455 -8bf4 1 129 3455 -FUNC 8bf5 c3 4 malloc -8bf5 1 155 3455 -8bf6 16 159 3455 -8c0c 65 163 3455 -8c71 4 168 3455 -8c75 b 172 3455 -8c80 b 179 3455 -8c8b 2 183 3455 -8c8d 7 174 3455 -8c94 8 193 3455 -8c9c 5 195 3455 -8ca1 1 196 3455 -8ca2 7 185 3455 -8ca9 b 186 3455 -8cb4 3 187 3455 -8cb7 1 196 3455 -FUNC 8cb8 3b 4 _get_errno_from_oserr -8cb8 0 119 3915 -8cb8 6 123 3915 -8cbe f 124 3915 -8ccd 8 133 3915 -8cd5 3 134 3915 -8cd8 1 139 3915 -8cd9 7 125 3915 -8ce0 1 139 3915 -8ce1 11 135 3915 -8cf2 1 139 3915 -FUNC 8cf3 13 0 _errno -8cf3 0 280 3915 -8cf3 5 281 3915 -8cf8 4 282 3915 -8cfc 5 283 3915 -8d01 1 288 3915 -8d02 3 285 3915 -8d05 1 288 3915 -FUNC 8d06 13 0 __doserrno -8d06 0 293 3915 -8d06 5 294 3915 -8d0b 4 295 3915 -8d0f 5 296 3915 -8d14 1 300 3915 -8d15 3 298 3915 -8d18 1 300 3915 -FUNC 8d19 1e 4 _dosmaperr -8d19 1 110 3915 -8d1a 9 111 3915 -8d23 13 113 3915 -8d36 1 114 3915 -FUNC 8d37 1b 4 _set_errno -8d37 0 157 3915 -8d37 5 158 3915 -8d3c 4 159 3915 -8d40 3 161 3915 -8d43 1 168 3915 -8d44 b 165 3915 -8d4f 2 166 3915 -8d51 1 168 3915 -FUNC 8d52 2a 4 _get_errno -8d52 1 187 3915 -8d53 1b 189 3915 -8d6e 1 195 3915 -8d6f 9 193 3915 -8d78 3 194 3915 -8d7b 1 195 3915 -FUNC 8d7c 1b 4 _set_doserrno -8d7c 0 213 3915 -8d7c 5 214 3915 -8d81 4 215 3915 -8d85 3 217 3915 -8d88 1 224 3915 -8d89 b 221 3915 -8d94 2 222 3915 -8d96 1 224 3915 -FUNC 8d97 2a 4 _get_doserrno -8d97 1 243 3915 -8d98 1b 245 3915 -8db3 1 251 3915 -8db4 9 249 3915 -8dbd 3 250 3915 -8dc0 1 251 3915 -FUNC 8dc1 21 0 _get_sbh_threshold -8dc1 0 61 3311 -8dc1 9 64 3311 -8dca 2 66 3311 -8dcc 1 81 3311 -8dcd 14 69 3311 -8de1 1 81 3311 -FUNC 8de2 46 4 _set_amblksiz -8de2 0 214 3311 -8de2 2b 216 3311 -8e0d 1 224 3311 -8e0e 11 217 3311 -8e1f 5 220 3311 -8e24 3 223 3311 -8e27 1 224 3311 -FUNC 8e28 3c 4 _get_amblksiz -8e28 0 243 3311 -8e28 27 245 3311 -8e4f 1 253 3311 -8e50 8 246 3311 -8e58 8 249 3311 -8e60 3 252 3311 -8e63 1 253 3311 -FUNC 8e64 48 4 __sbh_heap_init -8e64 0 274 3311 -8e64 1c 275 3311 -8e80 1 285 3311 -8e81 4 278 3311 -8e85 7 280 3311 -8e8c c 281 3311 -8e98 13 284 3311 -8eab 1 285 3311 -FUNC 8eac 2b 4 __sbh_find_block -8eac 0 306 3311 -8eac 12 307 3311 -8ebe 7 316 3311 -8ec5 8 317 3311 -8ecd 3 319 3311 -8ed0 4 314 3311 -8ed4 2 321 3311 -8ed6 1 322 3311 -FUNC 8ed7 314 8 __sbh_free_block -8ed7 6 381 3311 -8edd 7 399 3311 -8ee4 9 402 3311 -8eed 18 407 3311 -8f05 3 408 3311 -8f08 d 412 3311 -8f15 3 416 3311 -8f18 5 417 3311 -8f1d 6 420 3311 -8f23 b 424 3311 -8f2e 4 429 3311 -8f32 5 430 3311 -8f37 3 431 3311 -8f3a 8 434 3311 -8f42 3 439 3311 -8f45 b 441 3311 -8f50 e 442 3311 -8f5e 5 443 3311 -8f63 2 445 3311 -8f65 5 448 3311 -8f6a 11 449 3311 -8f7b 9 450 3311 -8f84 9 455 3311 -8f8d 15 459 3311 -8fa2 6 463 3311 -8fa8 5 464 3311 -8fad 3 465 3311 -8fb0 f 468 3311 -8fbf 3 474 3311 -8fc2 6 477 3311 -8fc8 b 478 3311 -8fd3 2 479 3311 -8fd5 3 483 3311 -8fd8 6 484 3311 -8fde 7 485 3311 -8fe5 2 486 3311 -8fe7 4 489 3311 -8feb b 493 3311 -8ff6 3 498 3311 -8ff9 11 501 3311 -900a 6 502 3311 -9010 5 503 3311 -9015 2 505 3311 -9017 e 508 3311 -9025 6 509 3311 -902b 6 511 3311 -9031 c 516 3311 -903d c 517 3311 -9049 8 520 3311 -9051 e 524 3311 -905f 6 528 3311 -9065 3 529 3311 -9068 6 530 3311 -906e 3 531 3311 -9071 6 532 3311 -9077 8 535 3311 -907f 18 541 3311 -9097 e 542 3311 -90a5 f 543 3311 -90b4 2 545 3311 -90b6 6 547 3311 -90bc 10 548 3311 -90cc 13 550 3311 -90df 5 556 3311 -90e4 4 558 3311 -90e8 b 561 3311 -90f3 d 564 3311 -9100 6 568 3311 -9106 1a 569 3311 -9120 15 573 3311 -9135 16 577 3311 -914b 19 578 3311 -9164 9 579 3311 -916d 6 583 3311 -9173 8 586 3311 -917b 16 589 3311 -9191 25 595 3311 -91b6 14 599 3311 -91ca 4 600 3311 -91ce a 603 3311 -91d8 8 608 3311 -91e0 9 609 3311 -91e9 2 611 3311 -FUNC 91eb b0 0 __sbh_alloc_new_region -91eb 0 891 3311 -91eb 13 897 3311 -91fe 1e 900 3311 -921c 4 901 3311 -9220 12 905 3311 -9232 9 909 3311 -923b 18 913 3311 -9253 2 914 3311 -9255 1a 918 3311 -926f 10 920 3311 -927f 2 921 3311 -9281 9 927 3311 -928a 6 930 3311 -9290 6 933 3311 -9296 4 935 3311 -929a 1 936 3311 -FUNC 929b 106 4 __sbh_alloc_new_group -929b 5 958 3311 -92a0 3 959 3311 -92a3 9 972 3311 -92ac 4 973 3311 -92b0 2 976 3311 -92b2 1 977 3311 -92b3 4 974 3311 -92b7 15 981 3311 -92cc c 986 3311 -92d8 1f 993 3311 -92f7 8 994 3311 -92ff 6 998 3311 -9305 12 1001 3311 -9317 4 1004 3311 -931b 7 1005 3311 -9322 8 1011 3311 -932a 10 1013 3311 -933a 12 1016 3311 -934c 3 1001 3311 -934f 8 1021 3311 -9357 6 1023 3311 -935d 3 1024 3311 -9360 6 1027 3311 -9366 3 1028 3311 -9369 5 1030 3311 -936e a 1031 3311 -9378 9 1032 3311 -9381 b 1033 3311 -938c e 1036 3311 -939a 5 1038 3311 -939f 2 1039 3311 -FUNC 93a1 2df c __sbh_resize_block -93a1 6 1061 3311 -93a7 c 1080 3311 -93b3 b 1083 3311 -93be 3 1084 3311 -93c1 12 1085 3311 -93d3 7 1089 3311 -93da 14 1096 3311 -93ee 13 1099 3311 -9401 7 1105 3311 -9408 8 1106 3311 -9410 6 1107 3311 -9416 8 1110 3311 -941e 3 1115 3311 -9421 9 1117 3311 -942a 11 1118 3311 -943b 5 1119 3311 -9440 2 1121 3311 -9442 5 1124 3311 -9447 14 1125 3311 -945b 6 1126 3311 -9461 9 1131 3311 -946a 9 1132 3311 -9473 12 1135 3311 -9485 a 1141 3311 -948f 9 1142 3311 -9498 3 1143 3311 -949b 9 1147 3311 -94a4 6 1148 3311 -94aa 6 1149 3311 -94b0 3 1150 3311 -94b3 6 1151 3311 -94b9 8 1154 3311 -94c1 18 1160 3311 -94d9 e 1161 3311 -94e7 6 1162 3311 -94ed 2 1164 3311 -94ef 6 1166 3311 -94f5 10 1167 3311 -9505 13 1169 3311 -9518 c 1174 3311 -9524 9 1176 3311 -952d 6 1180 3311 -9533 9 1182 3311 -953c 7 1100 3311 -9543 6 1186 3311 -9549 3 1189 3311 -954c d 1195 3311 -9559 7 1198 3311 -9560 b 1199 3311 -956b 3 1200 3311 -956e a 1203 3311 -9578 7 1208 3311 -957f 5 1209 3311 -9584 3 1210 3311 -9587 8 1213 3311 -958f 3 1218 3311 -9592 b 1221 3311 -959d e 1222 3311 -95ab 5 1223 3311 -95b0 2 1225 3311 -95b2 5 1228 3311 -95b7 11 1229 3311 -95c8 9 1231 3311 -95d1 9 1236 3311 -95da 9 1237 3311 -95e3 9 1240 3311 -95ec 4 1241 3311 -95f0 5 1242 3311 -95f5 3 1243 3311 -95f8 6 1249 3311 -95fe 3 1250 3311 -9601 6 1251 3311 -9607 3 1252 3311 -960a 6 1253 3311 -9610 8 1256 3311 -9618 18 1262 3311 -9630 e 1263 3311 -963e 6 1264 3311 -9644 2 1266 3311 -9646 6 1268 3311 -964c 10 1269 3311 -965c 13 1271 3311 -966f 5 1276 3311 -9674 4 1278 3311 -9678 6 1281 3311 -967e 2 1282 3311 -FUNC 9680 cd 0 __sbh_heapmin -9680 0 1302 3311 -9680 d 1306 3311 -968d 6 1310 3311 -9693 17 1311 3311 -96aa 15 1314 3311 -96bf 16 1318 3311 -96d5 19 1319 3311 -96ee 9 1320 3311 -96f7 f 1325 3311 -9706 11 1328 3311 -9717 28 1333 3311 -973f 6 1334 3311 -9745 7 1338 3311 -974c 1 1340 3311 -FUNC 974d 2e2 0 __sbh_heap_check -974d 3 1361 3311 -9750 12 1391 3311 -9762 8 1393 3311 -976a 16 1398 3311 -9780 3 1401 3311 -9783 8 1402 3311 -978b 6 1406 3311 -9791 9 1407 3311 -979a c 1408 3311 -97a6 3 1409 3311 -97a9 3 1410 3311 -97ac 6 1411 3311 -97b2 4 1418 3311 -97b6 1b 1421 3311 -97d1 9 1424 3311 -97da 9 1428 3311 -97e3 1c 1438 3311 -97ff 2 1445 3311 -9801 7 1446 3311 -9808 1 1449 3311 -9809 c 1452 3311 -9815 3 1456 3311 -9818 2 1458 3311 -981a 6 1462 3311 -9820 5 1463 3311 -9825 3 1464 3311 -9828 9 1465 3311 -9831 1e 1470 3311 -984f c 1475 3311 -985b 2 1479 3311 -985d 4 1481 3311 -9861 6 1484 3311 -9867 10 1488 3311 -9877 e 1492 3311 -9885 2 1498 3311 -9887 4 1502 3311 -988b 20 1505 3311 -98ab 19 1509 3311 -98c4 8 1514 3311 -98cc 3 1518 3311 -98cf 6 1520 3311 -98d5 8 1524 3311 -98dd 4 1527 3311 -98e1 e 1532 3311 -98ef 8 1536 3311 -98f7 6 1541 3311 -98fd 5 1542 3311 -9902 3 1543 3311 -9905 8 1544 3311 -990d c 1549 3311 -9919 11 1554 3311 -992a 6 1559 3311 -9930 3 1561 3311 -9933 e 1563 3311 -9941 3 1564 3311 -9944 2 1566 3311 -9946 8 1568 3311 -994e 3 1569 3311 -9951 1c 1575 3311 -996d c 1580 3311 -9979 10 1585 3311 -9989 17 1591 3311 -99a0 7 1595 3311 -99a7 7 1596 3311 -99ae 16 1597 3311 -99c4 f 1602 3311 -99d3 18 1606 3311 -99eb 5 1608 3311 -99f0 2 1609 3311 -99f2 4 1403 3311 -99f6 4 1425 3311 -99fa 4 1453 3311 -99fe 4 1485 3311 -9a02 4 1471 3311 -9a06 4 1439 3311 -9a0a 4 1493 3311 -9a0e 4 1537 3311 -9a12 4 1545 3311 -9a16 4 1550 3311 -9a1a 4 1510 3311 -9a1e 4 1581 3311 -9a22 4 1576 3311 -9a26 4 1592 3311 -9a2a 5 1603 3311 -FUNC 9a2f a8 4 _set_sbh_threshold -9a2f 1 102 3311 -9a30 a 104 3311 -9a3a 3 106 3311 -9a3d 1 195 3311 -9a3e a 109 3311 -9a48 25 112 3311 -9a6d 5 113 3311 -9a72 4 114 3311 -9a76 2 195 3311 -9a78 6 173 3311 -9a7e 2 175 3311 -9a80 5 179 3311 -9a85 2d 185 3311 -9ab2 6 186 3311 -9ab8 a 187 3311 -9ac2 5 188 3311 -9ac7 b 193 3311 -9ad2 4 194 3311 -9ad6 1 195 3311 -FUNC 9ad7 2e3 4 __sbh_alloc_block -9ad7 6 632 3311 -9add 5 633 3311 -9ae2 15 650 3311 -9af7 5 668 3311 -9afc 7 669 3311 -9b03 5 671 3311 -9b08 4 672 3311 -9b0c 2 674 3311 -9b0e d 677 3311 -9b1b a 682 3311 -9b25 e 686 3311 -9b33 3 688 3311 -9b36 2 683 3311 -9b38 5 688 3311 -9b3d 4 692 3311 -9b41 8 694 3311 -9b49 e 698 3311 -9b57 3 700 3311 -9b5a 2 695 3311 -9b5c 5 700 3311 -9b61 6 705 3311 -9b67 6 709 3311 -9b6d 6 711 3311 -9b73 4 707 3311 -9b77 4 715 3311 -9b7b 8 717 3311 -9b83 6 720 3311 -9b89 3 722 3311 -9b8c 2 718 3311 -9b8e 5 722 3311 -9b93 4 726 3311 -9b97 e 727 3311 -9ba5 7 728 3311 -9bac 12 733 3311 -9bbe 2 734 3311 -9bc0 6 737 3311 -9bc6 3 739 3311 -9bc9 2 740 3311 -9bcb 1c 745 3311 -9be7 4 749 3311 -9beb 14 751 3311 -9bff e 752 3311 -9c0d 3 751 3311 -9c10 12 754 3311 -9c22 a 760 3311 -9c2c d 763 3311 -9c39 2 768 3311 -9c3b 2 767 3311 -9c3d 1 768 3311 -9c3e 4 765 3311 -9c42 7 770 3311 -9c49 5 775 3311 -9c4e 6 776 3311 -9c54 8 777 3311 -9c5c 3 778 3311 -9c5f 8 781 3311 -9c67 8 784 3311 -9c6f 3 788 3311 -9c72 e 791 3311 -9c80 15 792 3311 -9c95 8 793 3311 -9c9d 2 795 3311 -9c9f f 798 3311 -9cae f 799 3311 -9cbd e 800 3311 -9ccb 1c 809 3311 -9ce7 6 813 3311 -9ced 3 814 3311 -9cf0 6 815 3311 -9cf6 3 816 3311 -9cf9 6 817 3311 -9cff 8 820 3311 -9d07 18 826 3311 -9d1f b 827 3311 -9d2a 10 829 3311 -9d3a 2 831 3311 -9d3c 6 833 3311 -9d42 d 835 3311 -9d4f 16 837 3311 -9d65 3 831 3311 -9d68 4 844 3311 -9d6c 2 846 3311 -9d6e 9 848 3311 -9d77 a 853 3311 -9d81 4 855 3311 -9d85 e 858 3311 -9d93 13 862 3311 -9da6 7 863 3311 -9dad 5 866 3311 -9db2 6 868 3311 -9db8 2 869 3311 -FUNC 9dba 39 0 terminate() -9dba c 94 3855 -9dc6 8 107 3855 -9dce 4 111 3855 -9dd2 4 116 3855 -9dd6 2 120 3855 -9dd8 2 121 3855 -9dda 7 122 3855 -9de1 7 127 3855 -9de8 5 135 3855 -9ded 6 136 3855 -FUNC 9df3 13 0 unexpected() -9df3 0 149 3855 -9df3 8 159 3855 -9dfb 4 163 3855 -9dff 2 167 3855 -9e01 5 173 3855 -FUNC 9e06 37 0 _inconsistency() -9e06 c 187 3855 -9e12 c 196 3855 -9e1e 4 197 3855 -9e22 4 202 3855 -9e26 2 203 3855 -9e28 2 204 3855 -9e2a 7 205 3855 -9e31 7 211 3855 -9e38 5 217 3855 -FUNC 9e3d 11 4 _initp_eh_hooks -9e3d 0 74 3855 -9e3d 10 80 3855 -9e4d 1 81 3855 -FUNC 9e4e b9 4 _onexit_nolock -9e4e 5 104 1673 -9e53 b 107 1673 -9e5e 13 108 1673 -9e71 16 112 1673 -9e87 d 122 1673 -9e94 d 127 1673 -9ea1 14 129 1673 -9eb5 3 134 1673 -9eb8 14 136 1673 -9ecc 3 147 1673 -9ecf f 149 1673 -9ede e 156 1673 -9eec c 157 1673 -9ef8 7 159 1673 -9eff 6 114 1673 -9f05 2 160 1673 -FUNC 9f07 2f 0 __onexitinit -9f07 1 205 1673 -9f08 b 208 1673 -9f13 9 209 1673 -9f1c e 211 1673 -9f2a 4 216 1673 -9f2e 1 221 1673 -9f2f 3 218 1673 -9f32 3 220 1673 -9f35 1 221 1673 -FUNC 9f36 3c 4 _onexit -9f36 c 85 1673 -9f42 5 88 1673 -9f47 4 90 1673 -9f4b c 91 1673 -9f57 c 93 1673 -9f63 3 97 1673 -9f66 6 98 1673 -9f6c 6 94 1673 -FUNC 9f72 12 4 atexit -9f72 0 165 1673 -9f72 11 166 1673 -9f83 1 167 1673 -FUNC 9f84 1f 0 _initp_misc_cfltcvt_tab -9f84 2 54 2488 -9f86 8 56 2488 -9f8e 14 58 2488 -9fa2 1 60 2488 -FUNC 9fb0 29 4 _ValidateImageBase -9fb0 0 44 1573 -9fb0 b 50 1573 -9fbb 2 52 1573 -9fbd 1 68 1573 -9fbe 5 55 1573 -9fc3 6 56 1573 -9fc9 2 58 1573 -9fcb d 62 1573 -9fd8 1 68 1573 -FUNC 9fe0 42 8 _FindPESection -9fe0 0 92 1573 -9fe0 9 99 1573 -9fe9 19 108 1573 -a002 10 111 1573 -a012 a 108 1573 -a01c 5 123 1573 -a021 1 124 1573 -FUNC a030 bb 4 _IsNonwritableInCurrentImage -a030 33 149 1573 -a063 7 156 1573 -a06a f 164 1573 -a079 2 166 1573 -a07b 8 174 1573 -a083 e 175 1573 -a091 2 176 1573 -a093 2 178 1573 -a095 12 185 1573 -a0a7 12 195 1573 -a0b9 17 187 1573 -a0d0 9 193 1573 -a0d9 12 195 1573 -FUNC a0eb 19 4 _initp_misc_winsig -a0eb 0 57 1199 -a0eb 9 58 1199 -a0f4 5 59 1199 -a0f9 5 60 1199 -a0fe 5 61 1199 -a103 1 62 1199 -FUNC a104 9b 4 ctrlevent_capture -a104 c 89 1199 -a110 9 94 1199 -a119 3 95 1199 -a11c 5 102 1199 -a121 5 103 1199 -a126 e 104 1199 -a134 7 105 1199 -a13b 2 107 1199 -a13d 5 108 1199 -a142 e 109 1199 -a150 7 110 1199 -a157 1 109 1199 -a158 9 113 1199 -a161 7 117 1199 -a168 c 120 1199 -a174 5 124 1199 -a179 4 128 1199 -a17d 2 120 1199 -a17f 8 121 1199 -a187 6 130 1199 -a18d 7 131 1199 -a194 3 138 1199 -a197 8 139 1199 -FUNC a19f 34 4 siglookup -a19f 0 634 1199 -a19f b 635 1199 -a1aa 15 645 1199 -a1bf f 649 1199 -a1ce 2 653 1199 -a1d0 2 658 1199 -a1d2 1 659 1199 -FUNC a1d3 d 0 __get_sigabrt -a1d3 0 676 1199 -a1d3 c 677 1199 -a1df 1 678 1199 -FUNC a1e0 9 0 __fpecode -a1e0 0 699 1199 -a1e0 8 700 1199 -a1e8 1 701 1199 -FUNC a1e9 9 0 __pxcptinfoptrs -a1e9 0 721 1199 -a1e9 8 722 1199 -a1f1 1 723 1199 -FUNC a1f2 23d 8 signal -a1f2 c 219 1199 -a1fe 4 224 1199 -a202 3 230 1199 -a205 3 244 1199 -a208 12 230 1199 -a21a 2f 244 1199 -a249 13 327 1199 -a25c 7 334 1199 -a263 8 335 1199 -a26b a 342 1199 -a275 17 346 1199 -a28c 10 352 1199 -a29c 13 367 1199 -a2af 3 380 1199 -a2b2 e 382 1199 -a2c0 3 395 1199 -a2c3 17 401 1199 -a2da 5 390 1199 -a2df 5 401 1199 -a2e4 8 246 1199 -a2ec 4 247 1199 -a2f0 12 254 1199 -a302 14 257 1199 -a316 6 259 1199 -a31c 2 261 1199 -a31e f 263 1199 -a32d a 264 1199 -a337 18 268 1199 -a34f f 288 1199 -a35e 4 289 1199 -a362 b 291 1199 -a36d 2 293 1199 -a36f f 279 1199 -a37e 4 280 1199 -a382 b 282 1199 -a38d 2 284 1199 -a38f f 296 1199 -a39e 4 297 1199 -a3a2 b 299 1199 -a3ad 2 301 1199 -a3af f 271 1199 -a3be 4 272 1199 -a3c2 c 274 1199 -a3ce c 305 1199 -a3da 9 309 1199 -a3e3 4 407 1199 -a3e7 3 305 1199 -a3ea 9 306 1199 -a3f3 19 410 1199 -a40c 1a 419 1199 -a426 3 417 1199 -a429 6 423 1199 -FUNC a42f 1b0 4 raise -a42f c 452 1199 -a43b 5 459 1199 -a440 3 460 1199 -a443 1f 462 1199 -a462 a 488 1199 -a46c 4 489 1199 -a470 8 490 1199 -a478 a 465 1199 -a482 2 467 1199 -a484 11 492 1199 -a495 2 493 1199 -a497 f 462 1199 -a4a6 1c 500 1199 -a4c2 a 476 1199 -a4cc 2 478 1199 -a4ce a 470 1199 -a4d8 2 472 1199 -a4da a 481 1199 -a4e4 7 482 1199 -a4eb a 502 1199 -a4f5 2 510 1199 -a4f7 4 509 1199 -a4fb 6 510 1199 -a501 5 515 1199 -a506 7 520 1199 -a50d 5 527 1199 -a512 7 528 1199 -a519 5 530 1199 -a51e f 543 1199 -a52d 6 544 1199 -a533 3 545 1199 -a536 5 551 1199 -a53b 6 552 1199 -a541 7 553 1199 -a548 5 561 1199 -a54d 1c 568 1199 -a569 d 571 1199 -a576 5 568 1199 -a57b 7 574 1199 -a582 c 577 1199 -a58e 5 582 1199 -a593 8 588 1199 -a59b 2 589 1199 -a59d 6 577 1199 -a5a3 6 578 1199 -a5a9 9 579 1199 -a5b2 5 590 1199 -a5b7 f 597 1199 -a5c6 6 598 1199 -a5cc 5 603 1199 -a5d1 6 604 1199 -a5d7 2 607 1199 -a5d9 6 608 1199 -FUNC a5df a 4 _initp_misc_rand_s -a5df 0 58 1489 -a5df 9 59 1489 -a5e8 1 60 1489 -FUNC a5e9 104 4 rand_s -a5e9 3 66 1489 -a5ec b 67 1489 -a5f7 2b 68 1489 -a622 c 71 1489 -a62e d 77 1489 -a63b 4 78 1489 -a63f 1e 80 1489 -a65d e 83 1489 -a66b 4 84 1489 -a66f 2f 86 1489 -a69e 9 88 1489 -a6a7 5 89 1489 -a6ac 16 94 1489 -a6c2 7 103 1489 -a6c9 9 107 1489 -a6d2 b 109 1489 -a6dd 9 110 1489 -a6e6 6 112 1489 -a6ec 1 113 1489 -FUNC a6ed 15a 14 __getlocaleinfo -a6ed 1d 70 1937 -a70a 7 76 1937 -a711 87 109 1937 -a798 13 103 1937 -a7ab 5 114 1937 -a7b0 7 115 1937 -a7b7 3 141 1937 -a7ba 12 142 1937 -a7cc 20 106 1937 -a7ec 5 108 1937 -a7f1 7 109 1937 -a7f8 4 111 1937 -a7fc 5 118 1937 -a801 1a 126 1937 -a81b 2 127 1937 -a81d 2 129 1937 -a81f 10 134 1937 -a82f 16 135 1937 -a845 2 139 1937 -FUNC a847 a 4 _initp_misc_purevirt -a847 0 166 1937 -a847 9 167 1937 -a850 1 168 1937 -FUNC a851 a 4 _initp_misc_initcrit -a851 0 47 2023 -a851 9 48 2023 -a85a 1 49 2023 -FUNC a85b 10 8 __crtInitCritSecNoSpinCount -a85b 0 76 2023 -a85b a 77 2023 -a865 3 78 2023 -a868 3 79 2023 -FUNC a86b c5 8 __crtInitCritSecAndSpinCount -a86b c 109 2023 -a877 5 111 2023 -a87c e 112 2023 -a88a 4 114 2023 -a88e 1b 120 2023 -a8a9 4 121 2023 -a8ad 2 129 2023 -a8af b 130 2023 -a8ba 4 131 2023 -a8be e 134 2023 -a8cc 4 136 2023 -a8d0 5 149 2023 -a8d5 c 152 2023 -a8e1 3 155 2023 -a8e4 b 161 2023 -a8ef 2 162 2023 -a8f1 1a 163 2023 -a90b 9 170 2023 -a914 8 171 2023 -a91c 4 173 2023 -a920 7 174 2023 -a927 3 176 2023 -a92a 6 177 2023 -FUNC a930 a 4 _initp_heap_handler -a930 0 31 3260 -a930 9 32 3260 -a939 1 33 3260 -FUNC a93a 31 4 _set_new_handler(int (*)(unsigned int)) -a93a 1 53 3260 -a93b 7 57 3260 -a942 b 59 3260 -a94d b 60 3260 -a958 f 63 3260 -a967 3 65 3260 -a96a 1 66 3260 -FUNC a96b 9 4 _set_new_handler(int) -a96b 0 86 3260 -a96b 8 89 3260 -a973 1 90 3260 -FUNC a974 d 0 _query_new_handler() -a974 0 110 3260 -a974 c 111 3260 -a980 1 112 3260 -FUNC a981 22 4 _callnewh -a981 0 131 3260 -a981 b 133 3260 -a98c 10 135 3260 -a99c 3 138 3260 -a99f 1 139 3260 -a9a0 2 136 3260 -a9a2 1 139 3260 -FUNC a9a3 1bd c __crtMessageBoxA -a9a3 9 41 2447 -a9ac 5 49 2447 -a9b1 2 56 2447 -a9b3 18 64 2447 -a9cb d 66 2447 -a9d8 2 67 2447 -a9da 6 69 2447 -a9e0 10 76 2447 -a9f0 6 78 2447 -a9f6 6 80 2447 -a9fc 15 83 2447 -aa11 1a 86 2447 -aa2b 1c 88 2447 -aa47 6 89 2447 -aa4d 8 95 2447 -aa55 6 98 2447 -aa5b a 100 2447 -aa65 14 102 2447 -aa79 14 116 2447 -aa8d 6 119 2447 -aa93 d 120 2447 -aaa0 c 122 2447 -aaac 1f 127 2447 -aacb 1b 136 2447 -aae6 6 137 2447 -aaec 7 138 2447 -aaf3 2 139 2447 -aaf5 7 140 2447 -aafc 2 142 2447 -aafe a 144 2447 -ab08 6 146 2447 -ab0e 5 147 2447 -ab13 2 149 2447 -ab15 11 153 2447 -ab26 6 155 2447 -ab2c 5 156 2447 -ab31 8 158 2447 -ab39 b 165 2447 -ab44 5 166 2447 -ab49 10 168 2447 -ab59 5 173 2447 -ab5e 2 176 2447 -FUNC ab60 71 c strcat_s -ab60 0 13 490 -ab60 30 18 490 -ab90 c 19 490 -ab9c 2 21 490 -ab9e 4 23 490 -aba2 1 25 490 -aba3 3 26 490 -aba6 2 29 490 -aba8 2 32 490 -abaa d 35 490 -abb7 4 39 490 -abbb 2 41 490 -abbd e 42 490 -abcb 5 45 490 -abd0 1 46 490 -FUNC abd1 b3 10 strncpy_s -abd1 5 13 406 -abd6 14 17 406 -abea 5 65 406 -abef 2 66 406 -abf1 26 24 406 -ac17 5 25 406 -ac1c 2 28 406 -ac1e 2 29 406 -ac20 b 31 406 -ac2b 8 35 406 -ac33 d 37 406 -ac40 2 41 406 -ac42 12 45 406 -ac54 5 48 406 -ac59 2 50 406 -ac5b 4 54 406 -ac5f 6 56 406 -ac65 3 58 406 -ac68 c 59 406 -ac74 2 61 406 -ac76 e 62 406 -FUNC ac84 46 4 _set_error_mode -ac84 0 43 2351 -ac84 15 50 2351 -ac99 6 58 2351 -ac9f 1 65 2351 -aca0 5 54 2351 -aca5 7 55 2351 -acac 1 65 2351 -acad 1c 61 2351 -acc9 1 65 2351 -FUNC acca a 4 __set_app_type -acca 0 91 2351 -acca 9 96 2351 -acd3 1 97 2351 -FUNC acd4 6 0 __get_app_type -acd4 0 120 2351 -acd4 5 125 2351 -acd9 1 126 2351 -FUNC acda 21 4 wait_a_bit -acda 1 18 3587 -acdb b 19 3587 -ace6 6 20 3587 -acec 8 21 3587 -acf4 3 22 3587 -acf7 3 23 3587 -acfa 1 24 3587 -FUNC acfb 10 4 _set_malloc_crt_max_wait -acfb 0 32 3587 -acfb f 34 3587 -ad0a 1 36 3587 -FUNC ad0b 40 4 _malloc_crt -ad0b 2 39 3587 -ad0d 2 40 3587 -ad0f b 44 3587 -ad1a d 45 3587 -ad27 18 46 3587 -ad3f 7 47 3587 -ad46 4 50 3587 -ad4a 1 51 3587 -FUNC ad4b 48 8 _calloc_crt -ad4b 2 54 3587 -ad4d 2 55 3587 -ad4f 14 61 3587 -ad63 c 62 3587 -ad6f 18 63 3587 -ad87 7 64 3587 -ad8e 4 67 3587 -ad92 1 68 3587 -FUNC ad93 4b 8 _realloc_crt -ad93 2 71 3587 -ad95 2 72 3587 -ad97 f 76 3587 -ada6 14 77 3587 -adba 18 78 3587 -add2 7 79 3587 -add9 4 82 3587 -addd 1 83 3587 -FUNC adde 50 c _recalloc_crt -adde 2 86 3587 -ade0 2 87 3587 -ade2 16 91 3587 -adf8 12 92 3587 -ae0a 18 94 3587 -ae22 7 95 3587 -ae29 4 100 3587 -ae2d 1 101 3587 -FUNC ae2e 8 0 _malloc_crt_fastcall -ae2e 0 105 3587 -ae2e 7 106 3587 -ae35 1 107 3587 -FUNC ae36 a 0 _calloc_crt_fastcall -ae36 0 110 3587 -ae36 9 111 3587 -ae3f 1 112 3587 -FUNC ae40 a 0 _realloc_crt_fastcall -ae40 0 115 3587 -ae40 9 116 3587 -ae49 1 117 3587 -FUNC ae4a e 0 _LocaleUpdate::~_LocaleUpdate() -ae4a 0 282 3057 -ae4a 6 283 3057 -ae50 7 284 3057 -ae57 1 285 3057 -FUNC ae58 3 0 _LocaleUpdate::GetLocaleT() -ae58 2 287 3057 -ae5a 1 289 3057 -FUNC ae5b 2f 0 CPtoLCID -ae5b 0 329 3029 -ae5b 14 330 3029 -ae6f 2 345 3029 -ae71 1 346 3029 -ae72 5 342 3029 -ae77 1 346 3029 -ae78 5 339 3029 -ae7d 1 346 3029 -ae7e 5 336 3029 -ae83 1 346 3029 -ae84 5 333 3029 -ae89 1 346 3029 -FUNC ae8a 55 0 setSBCS -ae8a 4 363 3029 -ae8e 14 368 3029 -aea2 3 371 3029 -aea5 3 374 3029 -aea8 3 376 3029 -aeab 8 379 3029 -aeb3 a 381 3029 -aebd 9 382 3029 -aec6 b 384 3029 -aed1 d 385 3029 -aede 1 386 3029 -FUNC aedf 18a 0 setSBUpLow -aedf 1d 402 3029 -aefc f 412 3029 -af0b d 415 3029 -af18 c 416 3029 -af24 e 420 3029 -af32 3 419 3029 -af35 28 421 3029 -af5d 1d 427 3029 -af7a 23 432 3029 -af9d 25 437 3029 -afc2 2 442 3029 -afc4 a 443 3029 -afce 5 445 3029 -afd3 9 446 3029 -afdc 5 448 3029 -afe1 5 450 3029 -afe6 e 451 3029 -aff4 2 453 3029 -aff6 8 454 3029 -affe 5 442 3029 -b003 8 456 3029 -b00b 2c 472 3029 -b037 5 466 3029 -b03c 5 468 3029 -b041 7 469 3029 -b048 2 471 3029 -b04a 3 472 3029 -b04d 5 460 3029 -b052 17 474 3029 -FUNC b069 a4 0 __updatetmbcinfo -b069 c 496 3029 -b075 7 499 3029 -b07c 10 500 3029 -b08c 3 533 3029 -b08f 4 536 3029 -b093 8 538 3029 -b09b 2 541 3029 -b09d 6 542 3029 -b0a3 8 501 3029 -b0ab 4 503 3029 -b0af e 506 3029 -b0bd 17 512 3029 -b0d4 7 517 3029 -b0db 11 524 3029 -b0ec 7 525 3029 -b0f3 11 528 3029 -b104 9 530 3029 -FUNC b10d 82 4 _LocaleUpdate::_LocaleUpdate(localeinfo_struct *) -b10d 0 261 3057 -b10d f 262 3057 -b11c 8 264 3057 -b124 5 265 3057 -b129 6 266 3057 -b12f 1c 268 3057 -b14b 21 269 3057 -b16c 9 270 3057 -b175 4 272 3057 -b179 4 273 3057 -b17d 2 276 3057 -b17f a 278 3057 -b189 6 280 3057 -FUNC b18f 7a 0 getSystemCP -b18f 7 282 3029 -b196 b 284 3029 -b1a1 b 289 3029 -b1ac a 291 3029 -b1b6 14 292 3029 -b1ca 5 295 3029 -b1cf a 297 3029 -b1d9 8 298 3029 -b1e1 5 302 3029 -b1e6 12 305 3029 -b1f8 f 308 3029 -b207 2 309 3029 -FUNC b209 1d9 8 _setmbcp_nolock -b209 15 686 3029 -b21e b 693 3029 -b229 9 696 3029 -b232 7 698 3029 -b239 7 699 3029 -b240 3 703 3029 -b243 2 705 3029 -b245 19 708 3029 -b25e 2a 743 3029 -b288 13 751 3029 -b29b f 756 3029 -b2aa 15 761 3029 -b2bf 17 764 3029 -b2d6 c 766 3029 -b2e2 f 712 3029 -b2f1 15 715 3029 -b306 9 720 3029 -b30f 8 723 3029 -b317 12 724 3029 -b329 9 723 3029 -b332 5 720 3029 -b337 12 715 3029 -b349 20 731 3029 -b369 d 733 3029 -b376 7 736 3029 -b37d 5 737 3029 -b382 6 767 3029 -b388 10 766 3029 -b398 8 771 3029 -b3a0 7 772 3029 -b3a7 b 775 3029 -b3b2 3 778 3029 -b3b5 2 780 3029 -b3b7 3 782 3029 -b3ba 8 785 3029 -b3c2 2 789 3029 -b3c4 6 794 3029 -b3ca 6 797 3029 -b3d0 3 746 3029 -b3d3 f 802 3029 -FUNC b3e2 3c 0 _getmbcp -b3e2 6 819 3029 -b3e8 a 821 3029 -b3f2 9 822 3029 -b3fb 10 823 3029 -b40b 2 826 3029 -b40d f 825 3029 -b41c 2 826 3029 -FUNC b41e 19a 4 _setmbcp -b41e c 574 3029 -b42a 4 575 3029 -b42e a 579 3029 -b438 5 581 3029 -b43d 3 582 3029 -b440 b 585 3029 -b44b 9 587 3029 -b454 d 593 3029 -b461 8 595 3029 -b469 c 597 3029 -b475 3 607 3029 -b478 16 612 3029 -b48e 1a 614 3029 -b4a8 7 615 3029 -b4af 3 619 3029 -b4b2 9 620 3029 -b4bb 17 622 3029 -b4d2 8 624 3029 -b4da 4 625 3029 -b4de 8 630 3029 -b4e6 8 631 3029 -b4ee 8 632 3029 -b4f6 a 633 3029 -b500 d 634 3029 -b50d 3 633 3029 -b510 c 635 3029 -b51c a 636 3029 -b526 3 635 3029 -b529 c 637 3029 -b535 d 638 3029 -b542 3 637 3029 -b545 1c 640 3029 -b561 7 641 3029 -b568 6 645 3029 -b56e 3 646 3029 -b571 e 648 3029 -b57f 9 650 3029 -b588 2 653 3029 -b58a 5 654 3029 -b58f 8 660 3029 -b597 7 661 3029 -b59e b 662 3029 -b5a9 2 668 3029 -b5ab 4 673 3029 -b5af 3 682 3029 -b5b2 6 683 3029 -FUNC b5b8 1e 0 __initmbctable -b5b8 0 843 3029 -b5b8 9 853 3029 -b5c1 8 854 3029 -b5c9 a 855 3029 -b5d3 2 860 3029 -b5d5 1 861 3029 -FUNC b5d6 51 10 x_ismbbtype_l -b5d6 6 213 3083 -b5dc b 214 3083 -b5e7 4 219 3083 -b5eb 3a 222 3083 -b625 2 223 3083 -FUNC b627 15 8 _ismbbkalnum_l -b627 0 80 3083 -b627 14 81 3083 -b63b 1 82 3083 -FUNC b63c 13 4 _ismbbkalnum -b63c 0 85 3083 -b63c 12 86 3083 -b64e 1 87 3083 -FUNC b64f 15 8 _ismbbkprint_l -b64f 0 90 3083 -b64f 14 91 3083 -b663 1 92 3083 -FUNC b664 13 4 _ismbbkprint -b664 0 95 3083 -b664 12 96 3083 -b676 1 97 3083 -FUNC b677 15 8 _ismbbkpunct_l -b677 0 100 3083 -b677 14 101 3083 -b68b 1 102 3083 -FUNC b68c 13 4 _ismbbkpunct -b68c 0 105 3083 -b68c 12 106 3083 -b69e 1 107 3083 -FUNC b69f 18 8 _ismbbalnum_l -b69f 0 113 3083 -b69f 17 114 3083 -b6b6 1 115 3083 -FUNC b6b7 16 4 _ismbbalnum -b6b7 0 118 3083 -b6b7 15 119 3083 -b6cc 1 120 3083 -FUNC b6cd 18 8 _ismbbalpha_l -b6cd 0 123 3083 -b6cd 17 124 3083 -b6e4 1 125 3083 -FUNC b6e5 16 4 _ismbbalpha -b6e5 0 128 3083 -b6e5 15 129 3083 -b6fa 1 130 3083 -FUNC b6fb 18 8 _ismbbgraph_l -b6fb 0 133 3083 -b6fb 17 134 3083 -b712 1 135 3083 -FUNC b713 16 4 _ismbbgraph -b713 0 138 3083 -b713 15 139 3083 -b728 1 140 3083 -FUNC b729 18 8 _ismbbprint_l -b729 0 143 3083 -b729 17 144 3083 -b740 1 145 3083 -FUNC b741 16 4 _ismbbprint -b741 0 148 3083 -b741 15 149 3083 -b756 1 150 3083 -FUNC b757 15 8 _ismbbpunct_l -b757 0 153 3083 -b757 14 154 3083 -b76b 1 155 3083 -FUNC b76c 13 4 _ismbbpunct -b76c 0 158 3083 -b76c 12 159 3083 -b77e 1 160 3083 -FUNC b77f 15 8 _ismbblead_l -b77f 0 166 3083 -b77f 14 167 3083 -b793 1 168 3083 -FUNC b794 13 4 _ismbblead -b794 0 171 3083 -b794 12 172 3083 -b7a6 1 173 3083 -FUNC b7a7 15 8 _ismbbtrail_l -b7a7 0 176 3083 -b7a7 14 177 3083 -b7bb 1 178 3083 -FUNC b7bc 13 4 _ismbbtrail -b7bc 0 181 3083 -b7bc 12 182 3083 -b7ce 1 183 3083 -FUNC b7cf 53 8 _ismbbkana_l -b7cf 6 189 3083 -b7d5 b 190 3083 -b7e0 10 192 3083 -b7f0 1f 194 3083 -b80f 2 197 3083 -b811 f 196 3083 -b820 2 197 3083 -FUNC b822 e 4 _ismbbkana -b822 0 200 3083 -b822 d 201 3083 -b82f 1 202 3083 -FUNC b830 365 c memcpy -b830 3 101 614 -b833 1 113 614 -b834 1 114 614 -b835 3 116 614 -b838 3 117 614 -b83b 3 119 614 -b83e 2 129 614 -b840 2 131 614 -b842 2 132 614 -b844 2 134 614 -b846 2 135 614 -b848 2 137 614 -b84a 6 138 614 -b850 6 147 614 -b856 2 148 614 -b858 7 150 614 -b85f 2 151 614 -b861 1 153 614 -b862 1 154 614 -b863 3 155 614 -b866 3 156 614 -b869 2 157 614 -b86b 1 158 614 -b86c 1 159 614 -b86d 2 160 614 -b86f 1 163 614 -b870 1 164 614 -b871 1 165 614 -b872 5 166 614 -b877 6 179 614 -b87d 2 180 614 -b87f 3 182 614 -b882 3 183 614 -b885 3 185 614 -b888 2 186 614 -b88a 2 188 614 -b88c 8 190 614 -b894 2 208 614 -b896 5 209 614 -b89b 3 211 614 -b89e 2 212 614 -b8a0 3 214 614 -b8a3 2 215 614 -b8a5 7 217 614 -b8ac 8 221 614 -b8b4 14 225 614 -b8c8 2 232 614 -b8ca 2 233 614 -b8cc 2 235 614 -b8ce 3 236 614 -b8d1 3 238 614 -b8d4 3 239 614 -b8d7 3 241 614 -b8da 3 242 614 -b8dd 3 244 614 -b8e0 3 245 614 -b8e3 3 247 614 -b8e6 2 248 614 -b8e8 2 250 614 -b8ea a 252 614 -b8f4 2 256 614 -b8f6 2 257 614 -b8f8 2 259 614 -b8fa 3 260 614 -b8fd 3 262 614 -b900 3 263 614 -b903 3 265 614 -b906 3 266 614 -b909 3 268 614 -b90c 2 269 614 -b90e 2 271 614 -b910 8 273 614 -b918 2 277 614 -b91a 2 278 614 -b91c 2 280 614 -b91e 3 281 614 -b921 3 283 614 -b924 3 284 614 -b927 3 286 614 -b92a 2 287 614 -b92c 2 289 614 -b92e 2a 291 614 -b958 4 298 614 -b95c 4 300 614 -b960 4 302 614 -b964 4 304 614 -b968 4 306 614 -b96c 4 308 614 -b970 4 310 614 -b974 4 312 614 -b978 4 314 614 -b97c 4 316 614 -b980 4 318 614 -b984 4 320 614 -b988 4 322 614 -b98c 4 324 614 -b990 7 326 614 -b997 2 328 614 -b999 2 329 614 -b99b 19 331 614 -b9b4 3 340 614 -b9b7 1 341 614 -b9b8 1 342 614 -b9b9 3 344 614 -b9bc 2 348 614 -b9be 2 350 614 -b9c0 3 351 614 -b9c3 1 352 614 -b9c4 1 353 614 -b9c5 3 354 614 -b9c8 2 358 614 -b9ca 2 360 614 -b9cc 3 361 614 -b9cf 3 362 614 -b9d2 3 363 614 -b9d5 1 364 614 -b9d6 1 365 614 -b9d7 5 366 614 -b9dc 2 370 614 -b9de 2 372 614 -b9e0 3 373 614 -b9e3 3 374 614 -b9e6 3 375 614 -b9e9 3 376 614 -b9ec 3 377 614 -b9ef 1 378 614 -b9f0 1 379 614 -b9f1 3 380 614 -b9f4 4 391 614 -b9f8 4 392 614 -b9fc 6 397 614 -ba02 2 398 614 -ba04 3 400 614 -ba07 3 401 614 -ba0a 3 403 614 -ba0d 2 404 614 -ba0f 1 406 614 -ba10 2 407 614 -ba12 1 408 614 -ba13 9 410 614 -ba1c 2 414 614 -ba1e a 417 614 -ba28 2 422 614 -ba2a 5 423 614 -ba2f 3 425 614 -ba32 2 426 614 -ba34 3 428 614 -ba37 2 429 614 -ba39 7 431 614 -ba40 14 435 614 -ba54 3 442 614 -ba57 2 443 614 -ba59 3 445 614 -ba5c 3 446 614 -ba5f 3 448 614 -ba62 3 449 614 -ba65 3 451 614 -ba68 2 452 614 -ba6a 1 454 614 -ba6b 2 455 614 -ba6d 1 456 614 -ba6e a 458 614 -ba78 3 462 614 -ba7b 2 463 614 -ba7d 3 465 614 -ba80 3 466 614 -ba83 3 468 614 -ba86 3 469 614 -ba89 3 471 614 -ba8c 3 472 614 -ba8f 3 474 614 -ba92 2 475 614 -ba94 1 477 614 -ba95 2 478 614 -ba97 1 479 614 -ba98 8 481 614 -baa0 3 485 614 -baa3 2 486 614 -baa5 3 488 614 -baa8 3 489 614 -baab 3 491 614 -baae 3 492 614 -bab1 3 494 614 -bab4 3 495 614 -bab7 3 497 614 -baba 3 498 614 -babd 3 500 614 -bac0 6 501 614 -bac6 1 503 614 -bac7 2 504 614 -bac9 1 505 614 -baca 2a 507 614 -baf4 4 516 614 -baf8 4 518 614 -bafc 4 520 614 -bb00 4 522 614 -bb04 4 524 614 -bb08 4 526 614 -bb0c 4 528 614 -bb10 4 530 614 -bb14 4 532 614 -bb18 4 534 614 -bb1c 4 536 614 -bb20 4 538 614 -bb24 4 540 614 -bb28 4 542 614 -bb2c 7 544 614 -bb33 2 546 614 -bb35 2 547 614 -bb37 19 549 614 -bb50 3 558 614 -bb53 1 560 614 -bb54 1 561 614 -bb55 3 562 614 -bb58 3 566 614 -bb5b 3 568 614 -bb5e 3 569 614 -bb61 1 570 614 -bb62 1 571 614 -bb63 5 572 614 -bb68 3 576 614 -bb6b 3 578 614 -bb6e 3 579 614 -bb71 3 580 614 -bb74 3 581 614 -bb77 1 582 614 -bb78 1 583 614 -bb79 3 584 614 -bb7c 3 588 614 -bb7f 3 590 614 -bb82 3 591 614 -bb85 3 592 614 -bb88 3 593 614 -bb8b 3 594 614 -bb8e 3 595 614 -bb91 1 596 614 -bb92 1 597 614 -bb93 2 598 614 -FUNC bb95 6 0 ___setlc_active_func -bb95 0 90 1409 -bb95 5 91 1409 -bb9a 1 92 1409 -FUNC bb9b 6 0 ___unguarded_readlc_active_add_func -bb9b 0 104 1409 -bb9b 5 105 1409 -bba0 1 106 1409 -FUNC bba1 140 4 __freetlocinfo -bba1 3 144 1409 -bba4 26 152 1409 -bbca e 155 1409 -bbd8 6 157 1409 -bbde d 158 1409 -bbeb e 162 1409 -bbf9 6 164 1409 -bbff d 165 1409 -bc0c b 168 1409 -bc17 d 169 1409 -bc24 e 176 1409 -bc32 11 178 1409 -bc43 13 179 1409 -bc56 e 180 1409 -bc64 e 181 1409 -bc72 17 188 1409 -bc89 6 190 1409 -bc8f 9 191 1409 -bc98 6 194 1409 -bc9e 13 197 1409 -bcb1 7 199 1409 -bcb8 10 205 1409 -bcc8 d 207 1409 -bcd5 b 214 1409 -bce0 1 215 1409 -FUNC bce1 86 4 __addlocaleref -bce1 3 225 1409 -bce4 e 227 1409 -bcf2 a 228 1409 -bcfc 3 229 1409 -bcff a 231 1409 -bd09 3 232 1409 -bd0c a 234 1409 -bd16 3 235 1409 -bd19 a 237 1409 -bd23 3 238 1409 -bd26 6 240 1409 -bd2c f 242 1409 -bd3b 3 243 1409 -bd3e d 245 1409 -bd4b 9 246 1409 -bd54 12 248 1409 -bd66 1 249 1409 -FUNC bd67 8c 4 __removelocaleref -bd67 1 259 1409 -bd68 b 261 1409 -bd73 9 263 1409 -bd7c a 265 1409 -bd86 3 266 1409 -bd89 a 268 1409 -bd93 3 269 1409 -bd96 a 271 1409 -bda0 3 272 1409 -bda3 a 274 1409 -bdad 3 275 1409 -bdb0 6 277 1409 -bdb6 f 279 1409 -bdc5 3 280 1409 -bdc8 d 282 1409 -bdd5 9 283 1409 -bdde 11 285 1409 -bdef 3 287 1409 -bdf2 1 288 1409 -FUNC bdf3 24 0 _copytlocinfo_nolock -bdf3 3 302 1409 -bdf6 d 303 1409 -be03 7 304 1409 -be0a 3 305 1409 -be0d 9 306 1409 -be16 1 308 1409 -FUNC be17 3e 0 _updatetlocinfoEx_nolock -be17 0 321 1409 -be17 9 324 1409 -be20 2 326 1409 -be22 4 327 1409 -be26 8 334 1409 -be2e 5 339 1409 -be33 6 341 1409 -be39 e 350 1409 -be47 7 351 1409 -be4e 3 355 1409 -be51 1 356 1409 -be52 2 325 1409 -be54 1 356 1409 -FUNC be55 76 0 __updatetlocinfo -be55 c 382 1409 -be61 7 384 1409 -be68 10 386 1409 -be78 8 397 1409 -be80 4 399 1409 -be84 8 401 1409 -be8c 2 404 1409 -be8e 6 405 1409 -be94 8 387 1409 -be9c 4 388 1409 -bea0 11 390 1409 -beb1 e 392 1409 -bebf 8 394 1409 -bec7 4 395 1409 -FUNC becb 66 4 _configthreadlocale -becb 2 420 1409 -becd 5 434 1409 -bed2 10 435 1409 -bee2 19 437 1409 -befb 1d 456 1409 -bf18 3 444 1409 -bf1b 2 445 1409 -bf1d 6 440 1409 -bf23 2 441 1409 -bf25 7 452 1409 -bf2c 4 460 1409 -bf30 1 462 1409 -FUNC bf31 53 0 sync_legacy_variables_lk -bf31 0 489 1409 -bf31 e 490 1409 -bf3f 9 491 1409 -bf48 c 492 1409 -bf54 c 493 1409 -bf60 c 494 1409 -bf6c c 495 1409 -bf78 b 496 1409 -bf83 1 497 1409 -FUNC bf84 96 4 _free_locale -bf84 c 517 1409 -bf90 9 518 1409 -bf99 1c 522 1409 -bfb5 7 524 1409 -bfbc 4 526 1409 -bfc0 8 534 1409 -bfc8 3 535 1409 -bfcb 8 537 1409 -bfd3 11 540 1409 -bfe4 7 541 1409 -bfeb c 543 1409 -bff7 7 552 1409 -bffe 3 553 1409 -c001 7 554 1409 -c008 6 556 1409 -c00e 3 543 1409 -c011 9 545 1409 -FUNC c01a 5 4 __free_locale -c01a 0 562 1409 -c01a 5 563 1409 -FUNC c01f 88 0 _get_current_locale -c01f c 687 1409 -c02b 7 689 1409 -c032 14 691 1409 -c046 b 693 1409 -c051 4 694 1409 -c055 5 697 1409 -c05a 5 698 1409 -c05f 5 706 1409 -c064 6 707 1409 -c06a 8 708 1409 -c072 4 709 1409 -c076 8 710 1409 -c07e c 712 1409 -c08a 9 715 1409 -c093 2 717 1409 -c095 6 718 1409 -c09b 3 712 1409 -c09e 9 713 1409 -FUNC c0a7 5 0 __get_current_locale -c0a7 0 722 1409 -c0a7 5 723 1409 -FUNC c0ac 3 4 __init_dummy -c0ac 0 1283 1409 -c0ac 2 1284 1409 -c0ae 1 1285 1409 -FUNC c0af 3e c _strcats -c0af 2 1288 1409 -c0b1 f 1294 1409 -c0c0 26 1296 1409 -c0e6 6 1294 1409 -c0ec 1 1299 1409 -FUNC c0ed 129 8 __lc_strtolc -c0ed 6 1302 1409 -c0f3 11 1307 1409 -c104 c 1309 1409 -c110 7 1310 1409 -c117 b 1313 1409 -c122 25 1315 1409 -c147 6 1317 1409 -c14d 2 1318 1409 -c14f 15 1323 1409 -c164 1d 1328 1409 -c181 9 1329 1409 -c18a 10 1331 1409 -c19a c 1332 1409 -c1a6 14 1334 1409 -c1ba 28 1335 1409 -c1e2 9 1340 1409 -c1eb b 1348 1409 -c1f6 18 1350 1409 -c20e 6 1338 1409 -c214 2 1353 1409 -FUNC c216 6b c __lc_lctostr -c216 5 1356 1409 -c21b 25 1357 1409 -c240 7 1358 1409 -c247 16 1359 1409 -c25d c 1360 1409 -c269 16 1361 1409 -c27f 2 1362 1409 -FUNC c281 171 0 _setlocale_get_all -c281 4 1124 1409 -c285 3 1126 1409 -c288 1d 1134 1409 -c2a5 3 1137 1409 -c2a8 3 1139 1409 -c2ab 2 1140 1409 -c2ad 2f 1143 1409 -c2dc 26 1146 1409 -c302 10 1147 1409 -c312 5 1148 1409 -c317 4 1141 1409 -c31b 2f 1143 1409 -c34a a 1144 1409 -c354 8 1152 1409 -c35c 14 1154 1409 -c370 9 1156 1409 -c379 e 1159 1409 -c387 9 1161 1409 -c390 7 1165 1409 -c397 7 1166 1409 -c39e 9 1168 1409 -c3a7 15 1170 1409 -c3bc 9 1172 1409 -c3c5 e 1175 1409 -c3d3 9 1177 1409 -c3dc 12 1183 1409 -c3ee 4 1187 1409 -FUNC c3f2 1d4 18 _expandlocale -c3f2 15 1198 1409 -c407 41 1230 1409 -c448 14 1211 1409 -c45c b 1216 1409 -c467 26 1219 1409 -c48d 4 1220 1409 -c491 3 1222 1409 -c494 4 1223 1409 -c498 4 1224 1409 -c49c 7 1226 1409 -c4a3 2 1228 1409 -c4a5 8 1230 1409 -c4ad 6 1234 1409 -c4b3 2f 1236 1409 -c4e2 4 1241 1409 -c4e6 e 1243 1409 -c4f4 6 1244 1409 -c4fa 10 1246 1409 -c50a 6 1247 1409 -c510 9 1251 1409 -c519 10 1253 1409 -c529 a 1255 1409 -c533 2 1260 1409 -c535 8 1263 1409 -c53d 26 1267 1409 -c563 5 1271 1409 -c568 e 1272 1409 -c576 5 1273 1409 -c57b 10 1274 1409 -c58b 22 1276 1409 -c5ad 5 1277 1409 -c5b2 2 1212 1409 -c5b4 12 1278 1409 -FUNC c5c6 2f6 4 _setlocale_set_cat -c5c6 19 980 1409 -c5df 5 993 1409 -c5e4 2f 998 1409 -c613 7 1000 1409 -c61a 19 1002 1409 -c633 6 1004 1409 -c639 c 1007 1409 -c645 16 1008 1409 -c65b 2 1010 1409 -c65d 3 1013 1409 -c660 d 1014 1409 -c66d 2c 1015 1409 -c699 3 1016 1409 -c69c 39 1019 1409 -c6d5 6 1020 1409 -c6db 15 1021 1409 -c6f0 17 1022 1409 -c707 a 1029 1409 -c711 6 1031 1409 -c717 18 1037 1409 -c72f 7 1039 1409 -c736 8 1053 1409 -c73e 14 1054 1409 -c752 18 1055 1409 -c76a 2 1039 1409 -c76c a 1044 1409 -c776 d 1046 1409 -c783 b 1047 1409 -c78e 9 1058 1409 -c797 26 1066 1409 -c7bd 2 1069 1409 -c7bf 10 1071 1409 -c7cf 22 1072 1409 -c7f1 2 1081 1409 -c7f3 4 1082 1409 -c7f7 5 1083 1409 -c7fc 9 1085 1409 -c805 6 1088 1409 -c80b 9 1089 1409 -c814 12 1091 1409 -c826 6 1094 1409 -c82c e 1095 1409 -c83a f 1096 1409 -c849 9 1097 1409 -c852 5 1099 1409 -c857 24 1106 1409 -c87b 7 1109 1409 -c882 8 1110 1409 -c88a 6 1111 1409 -c890 18 1116 1409 -c8a8 3 1118 1409 -c8ab 11 1119 1409 -FUNC c8bc 1ce 4 _setlocale_nolock -c8bc 1a 873 1409 -c8d6 7 877 1409 -c8dd 5 904 1409 -c8e2 17 880 1409 -c8f9 5 882 1409 -c8fe 12 888 1409 -c910 1d 890 1409 -c92d 2 894 1409 -c92f d 898 1409 -c93c 1e 900 1409 -c95a 11 904 1409 -c96b 1d 907 1409 -c988 e 904 1409 -c996 1b 913 1409 -c9b1 6 916 1409 -c9b7 24 918 1409 -c9db 18 922 1409 -c9f3 3 923 1409 -c9f6 7 925 1409 -c9fd 1 926 1409 -c9fe 9 928 1409 -ca07 c 930 1409 -ca13 4 901 1409 -ca17 19 935 1409 -ca30 3 937 1409 -ca33 4 939 1409 -ca37 11 941 1409 -ca48 c 943 1409 -ca54 2 947 1409 -ca56 3 949 1409 -ca59 2 952 1409 -ca5b 3 953 1409 -ca5e 9 937 1409 -ca67 5 956 1409 -ca6c 2 961 1409 -ca6e 3 962 1409 -ca71 2 965 1409 -ca73 5 966 1409 -ca78 12 972 1409 -FUNC ca8a f3 8 _create_locale -ca8a 0 605 1409 -ca8a 10 609 1409 -ca9a 13 612 1409 -caad b 614 1409 -cab8 4 610 1409 -cabc c 658 1409 -cac8 8 617 1409 -cad0 7 619 1409 -cad7 2 621 1409 -cad9 14 623 1409 -caed 7 625 1409 -caf4 7 626 1409 -cafb 2 628 1409 -cafd c 630 1409 -cb09 14 632 1409 -cb1d 7 634 1409 -cb24 7 635 1409 -cb2b 9 637 1409 -cb34 2 640 1409 -cb36 13 642 1409 -cb49 8 644 1409 -cb51 7 645 1409 -cb58 7 646 1409 -cb5f 9 647 1409 -cb68 2 648 1409 -cb6a 2 650 1409 -cb6c 5 652 1409 -cb71 5 653 1409 -cb76 7 657 1409 -FUNC cb7d 5 8 __create_locale -cb7d 0 665 1409 -cb7d 5 666 1409 -FUNC cb82 170 8 setlocale -cb82 c 791 1409 -cb8e 5 792 1409 -cb93 25 797 1409 -cbb8 a 799 1409 -cbc2 5 801 1409 -cbc7 4 806 1409 -cbcb 3 807 1409 -cbce 1b 808 1409 -cbe9 8 818 1409 -cbf1 7 819 1409 -cbf8 a 820 1409 -cc02 8 822 1409 -cc0a 19 826 1409 -cc23 18 834 1409 -cc3b a 836 1409 -cc45 8 839 1409 -cc4d 7 840 1409 -cc54 a 841 1409 -cc5e 7 842 1409 -cc65 f 846 1409 -cc74 c 847 1409 -cc80 18 849 1409 -cc98 5 850 1409 -cc9d b 852 1409 -cca8 8 822 1409 -ccb0 9 823 1409 -ccb9 3 852 1409 -ccbc 9 853 1409 -ccc5 2 855 1409 -ccc7 6 856 1409 -cccd 8 857 1409 -ccd5 c 860 1409 -cce1 3 865 1409 -cce4 6 866 1409 -ccea 3 860 1409 -cced 5 862 1409 -FUNC ccf2 f 0 __security_check_cookie -ccf2 0 52 2811 -ccf2 6 55 2811 -ccf8 2 56 2811 -ccfa 2 57 2811 -ccfc 5 59 2811 -FUNC cd04 90 0 _local_unwind4 -FUNC cd94 46 0 _unwind_handler4 -FUNC cdda 1c 4 _seh_longjmp_unwind4 -FUNC cdf6 17 0 _EH4_CallFilterFunc -FUNC ce0d 19 0 _EH4_TransferToHandler -FUNC ce26 1a 0 _EH4_GlobalUnwind -FUNC ce40 17 8 _EH4_LocalUnwind -FUNC ce57 8 4 _crt_debugger_hook -ce57 0 62 2380 -ce57 7 65 2380 -ce5e 1 66 2380 -FUNC ce60 7a c memset -ce60 0 59 601 -ce60 4 68 601 -ce64 4 69 601 -ce68 2 71 601 -ce6a 2 72 601 -ce6c 2 74 601 -ce6e 4 75 601 -ce72 2 78 601 -ce74 2 79 601 -ce76 6 80 601 -ce7c 2 81 601 -ce7e 7 82 601 -ce85 2 83 601 -ce87 5 85 601 -ce8c 1 91 601 -ce8d 2 92 601 -ce8f 3 94 601 -ce92 2 95 601 -ce94 2 97 601 -ce96 3 98 601 -ce99 2 99 601 -ce9b 2 101 601 -ce9d 2 103 601 -ce9f 3 104 601 -cea2 3 105 601 -cea5 2 106 601 -cea7 2 110 601 -cea9 3 111 601 -ceac 2 113 601 -ceae 2 115 601 -ceb0 3 117 601 -ceb3 2 119 601 -ceb5 2 122 601 -ceb7 3 123 601 -ceba 3 124 601 -cebd 2 125 601 -cebf 2 127 601 -cec1 2 129 601 -cec3 2 130 601 -cec5 2 134 601 -cec7 3 135 601 -ceca 3 137 601 -cecd 2 138 601 -cecf 4 142 601 -ced3 1 143 601 -ced4 1 145 601 -ced5 4 148 601 -ced9 1 150 601 -FUNC ceda 2a 0 _purecall -ceda 0 43 1533 -ceda b 44 1533 -cee5 5 45 1533 -ceea 2 47 1533 -ceec 7 54 1533 -cef3 c 56 1533 -ceff 5 57 1533 -FUNC cf04 22 4 _set_purecall_handler -cf04 1 82 1533 -cf05 b 85 1533 -cf10 12 86 1533 -cf22 3 88 1533 -cf25 1 89 1533 -FUNC cf26 d 0 _get_purecall_handler -cf26 0 92 1533 -cf26 c 93 1533 -cf32 1 94 1533 -FUNC cf40 95 0 _aulldvrm -cf40 0 45 3161 -cf40 1 47 3161 -cf41 4 79 3161 -cf45 2 80 3161 -cf47 2 81 3161 -cf49 4 82 3161 -cf4d 4 83 3161 -cf51 2 84 3161 -cf53 2 85 3161 -cf55 2 86 3161 -cf57 4 87 3161 -cf5b 2 88 3161 -cf5d 2 89 3161 -cf5f 2 94 3161 -cf61 4 95 3161 -cf65 2 96 3161 -cf67 2 97 3161 -cf69 4 98 3161 -cf6d 2 99 3161 -cf6f 2 100 3161 -cf71 2 107 3161 -cf73 4 108 3161 -cf77 4 109 3161 -cf7b 4 110 3161 -cf7f 2 112 3161 -cf81 2 113 3161 -cf83 2 114 3161 -cf85 2 115 3161 -cf87 2 116 3161 -cf89 2 117 3161 -cf8b 2 118 3161 -cf8d 2 119 3161 -cf8f 4 128 3161 -cf93 2 129 3161 -cf95 4 130 3161 -cf99 2 131 3161 -cf9b 2 132 3161 -cf9d 2 133 3161 -cf9f 4 141 3161 -cfa3 2 142 3161 -cfa5 2 143 3161 -cfa7 4 144 3161 -cfab 2 145 3161 -cfad 1 147 3161 -cfae 4 148 3161 -cfb2 4 149 3161 -cfb6 2 151 3161 -cfb8 4 160 3161 -cfbc 4 161 3161 -cfc0 2 162 3161 -cfc2 2 163 3161 -cfc4 3 164 3161 -cfc7 2 169 3161 -cfc9 2 170 3161 -cfcb 2 171 3161 -cfcd 2 172 3161 -cfcf 2 173 3161 -cfd1 1 179 3161 -cfd2 3 181 3161 -FUNC cfe0 34 0 _allmul -cfe0 0 47 3164 -cfe0 4 62 3164 -cfe4 4 63 3164 -cfe8 2 64 3164 -cfea 4 65 3164 -cfee 2 66 3164 -cff0 4 68 3164 -cff4 2 69 3164 -cff6 3 71 3164 -cff9 1 74 3164 -cffa 2 81 3164 -cffc 2 82 3164 -cffe 4 84 3164 -d002 4 85 3164 -d006 2 86 3164 -d008 4 88 3164 -d00c 2 89 3164 -d00e 2 90 3164 -d010 1 92 3164 -d011 3 94 3164 -FUNC d014 11 4 atol -d014 0 55 4301 -d014 10 56 4301 -d024 1 57 4301 -FUNC d025 15 8 _atol_l -d025 0 64 4301 -d025 14 65 4301 -d039 1 66 4301 -FUNC d03a 5 4 atoi -d03a 0 99 4301 -d03a 5 100 4301 -FUNC d03f 5 8 _atoi_l -d03f 0 107 4301 -d03f 5 108 4301 -FUNC d044 11 4 _atoi64 -d044 0 143 4301 -d044 10 144 4301 -d054 1 145 4301 -FUNC d055 15 8 _atoi64_l -d055 0 151 4301 -d055 14 152 4301 -d069 1 153 4301 -FUNC d070 365 c memmove -d070 3 101 604 -d073 1 113 604 -d074 1 114 604 -d075 3 116 604 -d078 3 117 604 -d07b 3 119 604 -d07e 2 129 604 -d080 2 131 604 -d082 2 132 604 -d084 2 134 604 -d086 2 135 604 -d088 2 137 604 -d08a 6 138 604 -d090 6 147 604 -d096 2 148 604 -d098 7 150 604 -d09f 2 151 604 -d0a1 1 153 604 -d0a2 1 154 604 -d0a3 3 155 604 -d0a6 3 156 604 -d0a9 2 157 604 -d0ab 1 158 604 -d0ac 1 159 604 -d0ad 2 160 604 -d0af 1 163 604 -d0b0 1 164 604 -d0b1 1 165 604 -d0b2 5 166 604 -d0b7 6 179 604 -d0bd 2 180 604 -d0bf 3 182 604 -d0c2 3 183 604 -d0c5 3 185 604 -d0c8 2 186 604 -d0ca 2 188 604 -d0cc 8 190 604 -d0d4 2 208 604 -d0d6 5 209 604 -d0db 3 211 604 -d0de 2 212 604 -d0e0 3 214 604 -d0e3 2 215 604 -d0e5 7 217 604 -d0ec 8 221 604 -d0f4 14 225 604 -d108 2 232 604 -d10a 2 233 604 -d10c 2 235 604 -d10e 3 236 604 -d111 3 238 604 -d114 3 239 604 -d117 3 241 604 -d11a 3 242 604 -d11d 3 244 604 -d120 3 245 604 -d123 3 247 604 -d126 2 248 604 -d128 2 250 604 -d12a a 252 604 -d134 2 256 604 -d136 2 257 604 -d138 2 259 604 -d13a 3 260 604 -d13d 3 262 604 -d140 3 263 604 -d143 3 265 604 -d146 3 266 604 -d149 3 268 604 -d14c 2 269 604 -d14e 2 271 604 -d150 8 273 604 -d158 2 277 604 -d15a 2 278 604 -d15c 2 280 604 -d15e 3 281 604 -d161 3 283 604 -d164 3 284 604 -d167 3 286 604 -d16a 2 287 604 -d16c 2 289 604 -d16e 2a 291 604 -d198 4 298 604 -d19c 4 300 604 -d1a0 4 302 604 -d1a4 4 304 604 -d1a8 4 306 604 -d1ac 4 308 604 -d1b0 4 310 604 -d1b4 4 312 604 -d1b8 4 314 604 -d1bc 4 316 604 -d1c0 4 318 604 -d1c4 4 320 604 -d1c8 4 322 604 -d1cc 4 324 604 -d1d0 7 326 604 -d1d7 2 328 604 -d1d9 2 329 604 -d1db 19 331 604 -d1f4 3 340 604 -d1f7 1 341 604 -d1f8 1 342 604 -d1f9 3 344 604 -d1fc 2 348 604 -d1fe 2 350 604 -d200 3 351 604 -d203 1 352 604 -d204 1 353 604 -d205 3 354 604 -d208 2 358 604 -d20a 2 360 604 -d20c 3 361 604 -d20f 3 362 604 -d212 3 363 604 -d215 1 364 604 -d216 1 365 604 -d217 5 366 604 -d21c 2 370 604 -d21e 2 372 604 -d220 3 373 604 -d223 3 374 604 -d226 3 375 604 -d229 3 376 604 -d22c 3 377 604 -d22f 1 378 604 -d230 1 379 604 -d231 3 380 604 -d234 4 391 604 -d238 4 392 604 -d23c 6 397 604 -d242 2 398 604 -d244 3 400 604 -d247 3 401 604 -d24a 3 403 604 -d24d 2 404 604 -d24f 1 406 604 -d250 2 407 604 -d252 1 408 604 -d253 9 410 604 -d25c 2 414 604 -d25e a 417 604 -d268 2 422 604 -d26a 5 423 604 -d26f 3 425 604 -d272 2 426 604 -d274 3 428 604 -d277 2 429 604 -d279 7 431 604 -d280 14 435 604 -d294 3 442 604 -d297 2 443 604 -d299 3 445 604 -d29c 3 446 604 -d29f 3 448 604 -d2a2 3 449 604 -d2a5 3 451 604 -d2a8 2 452 604 -d2aa 1 454 604 -d2ab 2 455 604 -d2ad 1 456 604 -d2ae a 458 604 -d2b8 3 462 604 -d2bb 2 463 604 -d2bd 3 465 604 -d2c0 3 466 604 -d2c3 3 468 604 -d2c6 3 469 604 -d2c9 3 471 604 -d2cc 3 472 604 -d2cf 3 474 604 -d2d2 2 475 604 -d2d4 1 477 604 -d2d5 2 478 604 -d2d7 1 479 604 -d2d8 8 481 604 -d2e0 3 485 604 -d2e3 2 486 604 -d2e5 3 488 604 -d2e8 3 489 604 -d2eb 3 491 604 -d2ee 3 492 604 -d2f1 3 494 604 -d2f4 3 495 604 -d2f7 3 497 604 -d2fa 3 498 604 -d2fd 3 500 604 -d300 6 501 604 -d306 1 503 604 -d307 2 504 604 -d309 1 505 604 -d30a 2a 507 604 -d334 4 516 604 -d338 4 518 604 -d33c 4 520 604 -d340 4 522 604 -d344 4 524 604 -d348 4 526 604 -d34c 4 528 604 -d350 4 530 604 -d354 4 532 604 -d358 4 534 604 -d35c 4 536 604 -d360 4 538 604 -d364 4 540 604 -d368 4 542 604 -d36c 7 544 604 -d373 2 546 604 -d375 2 547 604 -d377 19 549 604 -d390 3 558 604 -d393 1 560 604 -d394 1 561 604 -d395 3 562 604 -d398 3 566 604 -d39b 3 568 604 -d39e 3 569 604 -d3a1 1 570 604 -d3a2 1 571 604 -d3a3 5 572 604 -d3a8 3 576 604 -d3ab 3 578 604 -d3ae 3 579 604 -d3b1 3 580 604 -d3b4 3 581 604 -d3b7 1 582 604 -d3b8 1 583 604 -d3b9 3 584 604 -d3bc 3 588 604 -d3bf 3 590 604 -d3c2 3 591 604 -d3c5 3 592 604 -d3c8 3 593 604 -d3cb 3 594 604 -d3ce 3 595 604 -d3d1 1 596 604 -d3d2 1 597 604 -d3d3 2 598 604 -FUNC d3d5 f3 0 abort -d3d5 1b 53 2533 -d3f0 a 56 2533 -d3fa 8 59 2533 -d402 5 68 2533 -d407 4 69 2533 -d40b 8 71 2533 -d413 d 78 2533 -d420 6 87 2533 -d426 6 88 2533 -d42c 6 89 2533 -d432 3 90 2533 -d435 3 91 2533 -d438 3 92 2533 -d43b 7 93 2533 -d442 7 94 2533 -d449 4 95 2533 -d44d 4 96 2533 -d451 4 97 2533 -d455 4 98 2533 -d459 1 99 2533 -d45a 6 100 2533 -d460 6 106 2533 -d466 19 107 2533 -d47f 3 109 2533 -d482 13 117 2533 -d495 9 122 2533 -d49e 3 123 2533 -d4a1 15 126 2533 -d4b6 a 128 2533 -d4c0 8 137 2533 -FUNC d4c8 1e 8 _set_abort_behavior -d4c8 0 158 2533 -d4c8 1d 160 2533 -d4e5 1 162 2533 -FUNC d4e6 a3 4 _msize -d4e6 c 43 3413 -d4f2 2d 47 3413 -d51f 9 51 3413 -d528 8 55 3413 -d530 3 56 3413 -d533 e 57 3413 -d541 e 59 3413 -d54f c 61 3413 -d55b 5 64 3413 -d560 10 88 3413 -d570 2 91 3413 -d572 6 93 3413 -d578 8 61 3413 -d580 9 62 3413 -FUNC d589 9 0 _fptrap -d589 0 46 917 -d589 8 47 917 -d591 1 48 917 -FUNC d592 54 8 _isalpha_l -d592 6 57 4214 -d598 b 58 4214 -d5a3 41 60 4214 -d5e4 2 61 4214 -FUNC d5e6 2b 4 isalpha -d5e6 0 66 4214 -d5e6 9 67 4214 -d5ef 13 69 4214 -d602 1 75 4214 -d603 d 73 4214 -d610 1 75 4214 -FUNC d611 4f 8 _isupper_l -d611 6 81 4214 -d617 b 82 4214 -d622 3c 84 4214 -d65e 2 85 4214 -FUNC d660 29 4 isupper -d660 0 90 4214 -d660 9 91 4214 -d669 11 93 4214 -d67a 1 99 4214 -d67b d 97 4214 -d688 1 99 4214 -FUNC d689 4f 8 _islower_l -d689 6 105 4214 -d68f b 106 4214 -d69a 3c 108 4214 -d6d6 2 109 4214 -FUNC d6d8 29 4 islower -d6d8 0 114 4214 -d6d8 9 115 4214 -d6e1 11 117 4214 -d6f2 1 123 4214 -d6f3 d 121 4214 -d700 1 123 4214 -FUNC d701 4f 8 _isdigit_l -d701 6 129 4214 -d707 b 130 4214 -d712 3c 132 4214 -d74e 2 133 4214 -FUNC d750 29 4 isdigit -d750 0 138 4214 -d750 9 139 4214 -d759 11 141 4214 -d76a 1 147 4214 -d76b d 145 4214 -d778 1 147 4214 -FUNC d779 54 8 _isxdigit_l -d779 6 153 4214 -d77f b 154 4214 -d78a 41 156 4214 -d7cb 2 157 4214 -FUNC d7cd 2b 4 isxdigit -d7cd 0 162 4214 -d7cd 9 163 4214 -d7d6 13 165 4214 -d7e9 1 171 4214 -d7ea d 169 4214 -d7f7 1 171 4214 -FUNC d7f8 4f 8 _isspace_l -d7f8 6 177 4214 -d7fe b 178 4214 -d809 3c 180 4214 -d845 2 181 4214 -FUNC d847 29 4 isspace -d847 0 186 4214 -d847 9 187 4214 -d850 11 189 4214 -d861 1 195 4214 -d862 d 193 4214 -d86f 1 195 4214 -FUNC d870 4f 8 _ispunct_l -d870 6 201 4214 -d876 b 202 4214 -d881 3c 204 4214 -d8bd 2 205 4214 -FUNC d8bf 29 4 ispunct -d8bf 0 210 4214 -d8bf 9 211 4214 -d8c8 11 213 4214 -d8d9 1 219 4214 -d8da d 217 4214 -d8e7 1 219 4214 -FUNC d8e8 54 8 _isalnum_l -d8e8 6 225 4214 -d8ee b 226 4214 -d8f9 41 228 4214 -d93a 2 229 4214 -FUNC d93c 2b 4 isalnum -d93c 0 234 4214 -d93c 9 235 4214 -d945 13 237 4214 -d958 1 243 4214 -d959 d 241 4214 -d966 1 243 4214 -FUNC d967 54 8 _isprint_l -d967 6 249 4214 -d96d b 250 4214 -d978 41 252 4214 -d9b9 2 253 4214 -FUNC d9bb 2b 4 isprint -d9bb 0 258 4214 -d9bb 9 259 4214 -d9c4 13 261 4214 -d9d7 1 267 4214 -d9d8 d 265 4214 -d9e5 1 267 4214 -FUNC d9e6 54 8 _isgraph_l -d9e6 6 273 4214 -d9ec b 274 4214 -d9f7 41 276 4214 -da38 2 277 4214 -FUNC da3a 2b 4 isgraph -da3a 0 282 4214 -da3a 9 283 4214 -da43 13 285 4214 -da56 1 291 4214 -da57 d 289 4214 -da64 1 291 4214 -FUNC da65 4f 8 _iscntrl_l -da65 6 297 4214 -da6b b 298 4214 -da76 3c 300 4214 -dab2 2 301 4214 -FUNC dab4 29 4 iscntrl -dab4 0 306 4214 -dab4 9 307 4214 -dabd 11 309 4214 -dace 1 315 4214 -dacf d 313 4214 -dadc 1 315 4214 -FUNC dadd d 4 __isascii -dadd 0 320 4214 -dadd c 321 4214 -dae9 1 322 4214 -FUNC daea 8 4 __toascii -daea 0 327 4214 -daea 7 328 4214 -daf1 1 329 4214 -FUNC daf2 1f 8 _iscsymf_l -daf2 0 335 4214 -daf2 1a 336 4214 -db0c 1 337 4214 -db0d 3 336 4214 -db10 1 337 4214 -FUNC db11 1a 4 __iscsymf -db11 0 341 4214 -db11 15 342 4214 -db26 1 343 4214 -db27 3 342 4214 -db2a 1 343 4214 -FUNC db2b 1f 8 _iscsym_l -db2b 0 349 4214 -db2b 1a 350 4214 -db45 1 351 4214 -db46 3 350 4214 -db49 1 351 4214 -FUNC db4a 1c 4 __iscsym -db4a 0 356 4214 -db4a 17 357 4214 -db61 1 358 4214 -db62 3 357 4214 -db65 1 358 4214 -FUNC db66 12 8 _MarkAllocaS -db66 0 207 1309 -db66 8 208 1309 -db6e 6 210 1309 -db74 3 211 1309 -db77 1 214 1309 -FUNC db78 1b 4 _freea -db78 0 249 1309 -db78 8 251 1309 -db80 3 253 1309 -db83 8 255 1309 -db8b 7 257 1309 -db92 1 266 1309 -FUNC db93 13b 18 __crtGetLocaleInfoW_stat -db93 f 60 1290 -dba2 14 68 1290 -dbb6 d 70 1290 -dbc3 8 71 1290 -dbcb b 73 1290 -dbd6 f 74 1290 -dbe5 5 79 1290 -dbea 13 81 1290 -dbfd 7 86 1290 -dc04 2 140 1290 -dc06 8 96 1290 -dc0e b 97 1290 -dc19 16 100 1290 -dc2f 7 101 1290 -dc36 48 104 1290 -dc7e 2 105 1290 -dc80 2 106 1290 -dc82 e 110 1290 -dc90 7 113 1290 -dc97 2 121 1290 -dc99 2 123 1290 -dc9b 17 130 1290 -dcb2 6 134 1290 -dcb8 4 136 1290 -dcbc 12 141 1290 -FUNC dcce 3b 18 __crtGetLocaleInfoW -dcce 6 151 1290 -dcd4 b 152 1290 -dcdf 28 161 1290 -dd07 2 162 1290 -FUNC dd09 13d 18 __crtGetLocaleInfoA_stat -dd09 f 60 2665 -dd18 17 68 2665 -dd2f a 70 2665 -dd39 8 71 2665 -dd41 b 73 2665 -dd4c f 74 2665 -dd5b 11 79 2665 -dd6c 4 86 2665 -dd70 5 96 2665 -dd75 b 97 2665 -dd80 13 100 2665 -dd93 7 101 2665 -dd9a 49 104 2665 -dde3 2 105 2665 -dde5 2 106 2665 -dde7 10 110 2665 -ddf7 3 114 2665 -ddfa 6 124 2665 -de00 2 126 2665 -de02 15 135 2665 -de17 7 139 2665 -de1e 4 141 2665 -de22 12 81 2665 -de34 12 145 2665 -FUNC de46 3b 18 __crtGetLocaleInfoA -de46 6 155 2665 -de4c b 156 2665 -de57 28 165 2665 -de7f 2 166 2665 -FUNC de81 11e c _calloc_impl -de81 c 23 3622 -de8d 9 28 3622 -de96 2e 30 3622 -dec4 9 32 3622 -decd 4 36 3622 -ded1 3 37 3622 -ded4 5 41 3622 -ded9 5 43 3622 -dede 9 46 3622 -dee7 9 50 3622 -def0 b 52 3622 -defb 8 56 3622 -df03 3 57 3622 -df06 c 58 3622 -df12 c 60 3622 -df1e 7 64 3622 -df25 d 65 3622 -df32 4 93 3622 -df36 11 94 3622 -df47 c 97 3622 -df53 f 109 3622 -df62 b 111 3622 -df6d 6 112 3622 -df73 5 113 3622 -df78 5 60 3622 -df7d 9 61 3622 -df86 4 100 3622 -df8a 7 102 3622 -df91 6 103 3622 -df97 2 105 3622 -df99 6 119 3622 -FUNC df9f 3f 8 calloc -df9f 4 145 3622 -dfa3 5 146 3622 -dfa8 14 147 3622 -dfbc 15 149 3622 -dfd1 8 151 3622 -dfd9 3 153 3622 -dfdc 2 154 3622 -FUNC dfde 21b 8 realloc -dfde c 64 3368 -dfea 7 69 3368 -dff1 e 70 3368 -dfff 7 73 3368 -e006 7 75 3368 -e00d 5 76 3368 -e012 d 81 3368 -e01f 5 88 3368 -e024 9 89 3368 -e02d 8 91 3368 -e035 3 92 3368 -e038 12 96 3368 -e04a 8 100 3368 -e052 f 102 3368 -e061 5 103 3368 -e066 e 104 3368 -e074 4 107 3368 -e078 10 108 3368 -e088 9 110 3368 -e091 a 111 3368 -e09b 5 118 3368 -e0a0 4 120 3368 -e0a4 6 121 3368 -e0aa 9 123 3368 -e0b3 15 124 3368 -e0c8 4 127 3368 -e0cc 10 128 3368 -e0dc c 129 3368 -e0e8 c 135 3368 -e0f4 6 142 3368 -e0fa 4 144 3368 -e0fe 1 145 3368 -e0ff 9 147 3368 -e108 14 148 3368 -e11c 6 135 3368 -e122 9 137 3368 -e12b 3 148 3368 -e12e 10 158 3368 -e13e f 181 3368 -e14d 5 186 3368 -e152 5 183 3368 -e157 11 186 3368 -e168 2 188 3368 -e16a 8 160 3368 -e172 5 170 3368 -e177 3 167 3368 -e17a 2 172 3368 -e17c 6 174 3368 -e182 2 155 3368 -e184 4 321 3368 -e188 1 322 3368 -e189 12 323 3368 -e19b c 332 3368 -e1a7 b 347 3368 -e1b2 5 319 3368 -e1b7 7 327 3368 -e1be b 328 3368 -e1c9 2 329 3368 -e1cb 6 356 3368 -e1d1 5 349 3368 -e1d6 5 350 3368 -e1db 4 334 3368 -e1df 16 341 3368 -e1f5 4 343 3368 -FUNC e1f9 79 c _recalloc -e1f9 3 744 3368 -e1fc a 749 3368 -e206 28 751 3368 -e22e 4 753 3368 -e232 9 754 3368 -e23b b 755 3368 -e246 b 756 3368 -e251 a 757 3368 -e25b 10 759 3368 -e26b 5 761 3368 -e270 2 762 3368 -FUNC e272 1a 4 strncnt -e272 0 48 2617 -e272 6 49 2617 -e278 6 52 2617 -e27e 1 53 2617 -e27f 5 52 2617 -e284 7 55 2617 -e28b 1 56 2617 -FUNC e28c 3a2 20 __crtLCMapStringA_stat -e28c 12 99 2617 -e29e d 108 2617 -e2ab 1b 109 2617 -e2c6 8 110 2617 -e2ce b 111 2617 -e2d9 a 112 2617 -e2e3 5 119 2617 -e2e8 19 120 2617 -e301 5 124 2617 -e306 1 125 2617 -e307 3 127 2617 -e30a 16 133 2617 -e320 9 213 2617 -e329 8 235 2617 -e331 8 236 2617 -e339 27 247 2617 -e360 6 248 2617 -e366 48 251 2617 -e3ae 3 252 2617 -e3b1 6 253 2617 -e3b7 19 262 2617 -e3d0 21 271 2617 -e3f1 8 274 2617 -e3f9 9 277 2617 -e402 9 279 2617 -e40b 12 288 2617 -e41d 5 292 2617 -e422 4b 298 2617 -e46d 4 299 2617 -e471 18 309 2617 -e489 3 312 2617 -e48c 6 322 2617 -e492 2 325 2617 -e494 17 335 2617 -e4ab 7 342 2617 -e4b2 8 344 2617 -e4ba 9 346 2617 -e4c3 b 141 2617 -e4ce 8 142 2617 -e4d6 5 143 2617 -e4db 8 144 2617 -e4e3 11 146 2617 -e4f4 7 147 2617 -e4fb 9 153 2617 -e504 15 155 2617 -e519 5 156 2617 -e51e 2 157 2617 -e520 1b 164 2617 -e53b 7 166 2617 -e542 41 169 2617 -e583 2 170 2617 -e585 28 196 2617 -e5ad 2 183 2617 -e5af 2 184 2617 -e5b1 25 190 2617 -e5d6 7 198 2617 -e5dd 2 199 2617 -e5df 1a 202 2617 -e5f9 5 204 2617 -e5fe 9 205 2617 -e607 c 206 2617 -e613 7 207 2617 -e61a 2 208 2617 -e61c 12 350 2617 -FUNC e62e 43 24 __crtLCMapStringA -e62e 6 363 2617 -e634 b 364 2617 -e63f 30 376 2617 -e66f 2 377 2617 -FUNC e671 1b8 1c __crtGetStringTypeA_stat -e671 f 66 2569 -e680 10 75 2569 -e690 18 79 2569 -e6a8 8 80 2569 -e6b0 b 82 2569 -e6bb f 83 2569 -e6ca 11 88 2569 -e6db 9 120 2569 -e6e4 8 141 2569 -e6ec 8 142 2569 -e6f4 27 153 2569 -e71b 6 154 2569 -e721 3e 157 2569 -e75f 2 158 2569 -e761 2 159 2569 -e763 f 161 2569 -e772 13 169 2569 -e785 11 174 2569 -e796 6 176 2569 -e79c 6 178 2569 -e7a2 2 90 2569 -e7a4 5 94 2569 -e7a9 8 95 2569 -e7b1 5 96 2569 -e7b6 8 97 2569 -e7be e 99 2569 -e7cc 4 100 2569 -e7d0 5 104 2569 -e7d5 17 106 2569 -e7ec 2 107 2569 -e7ee 2 108 2569 -e7f0 3 109 2569 -e7f3 15 112 2569 -e808 6 113 2569 -e80e 7 114 2569 -e815 2 115 2569 -e817 12 182 2569 -FUNC e829 40 20 __crtGetStringTypeA -e829 6 194 2569 -e82f b 195 2569 -e83a 2d 206 2569 -e867 2 207 2569 -FUNC e869 87 c fastcopy_I -FUNC e8f0 e3 c _VEC_memcpy -FUNC e9d3 14 0 _sse2_mathfcns_init -FUNC e9e7 14 4 _set_SSE2_enable -FUNC e9fb 6 0 __pwctype_func -e9fb 0 24 2400 -e9fb 5 25 2400 -ea00 1 26 2400 -FUNC ea01 29 0 __pctype_func -ea01 0 29 2400 -ea01 7 35 2400 -ea08 3 36 2400 -ea0b 18 38 2400 -ea23 6 39 2400 -ea29 1 40 2400 -FUNC ea2a 419 0 _get_lc_time -ea2a 6 94 1793 -ea30 12 104 1793 -ea42 3 105 1793 -ea45 2 170 1793 -ea47 9 108 1793 -ea50 16 112 1793 -ea66 15 113 1793 -ea7b 15 114 1793 -ea90 18 115 1793 -eaa8 15 116 1793 -eabd 13 117 1793 -ead0 14 118 1793 -eae4 18 120 1793 -eafc 15 121 1793 -eb11 15 122 1793 -eb26 15 123 1793 -eb3b 18 124 1793 -eb53 15 125 1793 -eb68 15 126 1793 -eb7d 15 128 1793 -eb92 18 129 1793 -ebaa 15 130 1793 -ebbf 15 131 1793 -ebd4 15 132 1793 -ebe9 18 133 1793 -ec01 15 134 1793 -ec16 15 135 1793 -ec2b 15 136 1793 -ec40 18 137 1793 -ec58 15 138 1793 -ec6d 15 139 1793 -ec82 15 141 1793 -ec97 18 142 1793 -ecaf 15 143 1793 -ecc4 15 144 1793 -ecd9 15 145 1793 -ecee 18 146 1793 -ed06 18 147 1793 -ed1e 18 148 1793 -ed36 18 149 1793 -ed4e 1b 150 1793 -ed69 18 151 1793 -ed81 18 152 1793 -ed99 18 154 1793 -edb1 1b 155 1793 -edcc 18 160 1793 -ede4 18 161 1793 -edfc 1b 163 1793 -ee17 20 165 1793 -ee37 a 169 1793 -ee41 2 170 1793 -FUNC ee43 190 4 __free_lc_time -ee43 1 179 1793 -ee44 c 180 1793 -ee50 8 183 1793 -ee58 8 184 1793 -ee60 8 185 1793 -ee68 8 186 1793 -ee70 8 187 1793 -ee78 8 188 1793 -ee80 7 189 1793 -ee87 8 191 1793 -ee8f 8 192 1793 -ee97 8 193 1793 -ee9f 8 194 1793 -eea7 8 195 1793 -eeaf 8 196 1793 -eeb7 8 197 1793 -eebf 8 199 1793 -eec7 b 200 1793 -eed2 8 201 1793 -eeda 8 202 1793 -eee2 8 203 1793 -eeea 8 204 1793 -eef2 8 205 1793 -eefa 8 206 1793 -ef02 8 207 1793 -ef0a 8 208 1793 -ef12 8 209 1793 -ef1a 8 210 1793 -ef22 8 212 1793 -ef2a 8 213 1793 -ef32 8 214 1793 -ef3a 8 215 1793 -ef42 8 216 1793 -ef4a b 217 1793 -ef55 b 218 1793 -ef60 b 219 1793 -ef6b b 220 1793 -ef76 b 221 1793 -ef81 b 222 1793 -ef8c b 223 1793 -ef97 b 225 1793 -efa2 b 226 1793 -efad b 228 1793 -efb8 b 229 1793 -efc3 f 230 1793 -efd2 1 232 1793 -FUNC efd3 73 4 __init_time -efd3 4 56 1793 -efd7 f 60 1793 -efe6 16 64 1793 -effc 4 65 1793 -f000 b 67 1793 -f00b 6 69 1793 -f011 8 70 1793 -f019 2 71 1793 -f01b 6 73 1793 -f021 2 74 1793 -f023 2 75 1793 -f025 18 78 1793 -f03d 2 82 1793 -f03f 6 83 1793 -f045 1 84 1793 -FUNC f046 33 0 fix_grouping -f046 0 32 1841 -f046 8 40 1841 -f04e a 43 1841 -f058 4 45 1841 -f05c 1 61 1841 -f05d 6 40 1841 -f063 1 63 1841 -f064 4 50 1841 -f068 2 52 1841 -f06a 7 55 1841 -f071 6 56 1841 -f077 2 60 1841 -FUNC f079 40 4 __free_lconv_num -f079 1 211 1841 -f07a 8 212 1841 -f082 a 215 1841 -f08c 7 216 1841 -f093 b 218 1841 -f09e 7 219 1841 -f0a5 b 221 1841 -f0b0 8 222 1841 -f0b8 1 223 1841 -FUNC f0b9 1c8 4 __init_numeric -f0b9 7 84 1841 -f0c0 4 92 1841 -f0c4 2 93 1841 -f0c6 11 96 1841 -f0d7 3 177 1841 -f0da 3 178 1841 -f0dd c 179 1841 -f0e9 14 102 1841 -f0fd 8 103 1841 -f105 9 108 1841 -f10e 13 113 1841 -f121 9 115 1841 -f12a 2 116 1841 -f12c 2 118 1841 -f12e 9 120 1841 -f137 12 125 1841 -f149 8 127 1841 -f151 a 128 1841 -f15b 7 129 1841 -f162 2 131 1841 -f164 19 140 1841 -f17d 15 142 1841 -f192 1b 144 1841 -f1ad 2 146 1841 -f1af c 148 1841 -f1bb 1e 154 1841 -f1d9 2 156 1841 -f1db 17 154 1841 -f1f2 b 164 1841 -f1fd 9 165 1841 -f206 c 166 1841 -f212 8 168 1841 -f21a 7 169 1841 -f221 2 170 1841 -f223 13 186 1841 -f236 11 191 1841 -f247 b 193 1841 -f252 d 194 1841 -f25f 9 197 1841 -f268 9 198 1841 -f271 9 200 1841 -f27a 5 201 1841 -f27f 2 202 1841 -FUNC f281 33 0 fix_grouping -f281 0 214 1884 -f281 8 222 1884 -f289 a 225 1884 -f293 4 227 1884 -f297 1 243 1884 -f298 6 222 1884 -f29e 1 245 1884 -f29f 4 232 1884 -f2a3 2 234 1884 -f2a5 7 237 1884 -f2ac 6 238 1884 -f2b2 2 242 1884 -FUNC f2b4 89 4 __free_lconv_mon -f2b4 1 255 1884 -f2b5 8 256 1884 -f2bd b 259 1884 -f2c8 7 260 1884 -f2cf b 262 1884 -f2da 7 263 1884 -f2e1 b 265 1884 -f2ec 7 266 1884 -f2f3 b 268 1884 -f2fe 7 269 1884 -f305 b 271 1884 -f310 7 272 1884 -f317 b 274 1884 -f322 7 275 1884 -f329 b 277 1884 -f334 8 278 1884 -f33c 1 279 1884 -FUNC f33d 2c4 4 __init_monetary -f33d 8 65 1884 -f345 6 73 1884 -f34b 13 77 1884 -f35e 3 187 1884 -f361 3 188 1884 -f364 a 189 1884 -f36e 11 83 1884 -f37f 8 84 1884 -f387 f 89 1884 -f396 7 91 1884 -f39d 2 92 1884 -f39f 2 94 1884 -f3a1 9 96 1884 -f3aa f 101 1884 -f3b9 6 103 1884 -f3bf 9 104 1884 -f3c8 2 105 1884 -f3ca 2 107 1884 -f3cc 4 112 1884 -f3d0 14 117 1884 -f3e4 14 119 1884 -f3f8 14 121 1884 -f40c 17 123 1884 -f423 14 125 1884 -f437 14 128 1884 -f44b 14 130 1884 -f45f 17 133 1884 -f476 14 135 1884 -f48a 14 137 1884 -f49e 14 139 1884 -f4b2 17 141 1884 -f4c9 14 143 1884 -f4dd 14 145 1884 -f4f1 17 147 1884 -f508 2 149 1884 -f50a 6 150 1884 -f510 6 151 1884 -f516 8 152 1884 -f51e b 153 1884 -f529 5 154 1884 -f52e 1c 157 1884 -f54a 2 159 1884 -f54c 17 157 1884 -f563 c 169 1884 -f56f 3 175 1884 -f572 32 181 1884 -f5a4 11 194 1884 -f5b5 15 199 1884 -f5ca b 201 1884 -f5d5 d 202 1884 -f5e2 9 204 1884 -f5eb 9 205 1884 -f5f4 6 206 1884 -f5fa 5 208 1884 -f5ff 2 209 1884 -FUNC f601 395 4 __init_ctype -f601 11 59 1976 -f612 6 60 1976 -f618 1f 82 1976 -f637 7 84 1976 -f63e 20 89 1976 -f65e 7 94 1976 -f665 10 98 1976 -f675 b 100 1976 -f680 b 102 1976 -f68b 12 104 1976 -f69d 2f 106 1976 -f6cc 5 109 1976 -f6d1 2 112 1976 -f6d3 e 113 1976 -f6e1 15 115 1976 -f6f6 a 118 1976 -f700 4 121 1976 -f704 8 124 1976 -f70c e 126 1976 -f71a 9 128 1976 -f723 b 129 1976 -f72e b 128 1976 -f739 2c 140 1976 -f765 33 155 1976 -f798 2d 166 1976 -f7c5 37 178 1976 -f7fc 11 180 1976 -f80d 17 182 1976 -f824 15 183 1976 -f839 d 180 1976 -f846 12 189 1976 -f858 f 190 1976 -f867 12 191 1976 -f879 18 195 1976 -f891 11 198 1976 -f8a2 13 199 1976 -f8b5 e 200 1976 -f8c3 e 201 1976 -f8d1 9 203 1976 -f8da 6 204 1976 -f8e0 9 206 1976 -f8e9 9 207 1976 -f8f2 9 208 1976 -f8fb 9 209 1976 -f904 9 210 1976 -f90d 9 213 1976 -f916 4 214 1976 -f91a 8 217 1976 -f922 8 218 1976 -f92a 8 219 1976 -f932 10 220 1976 -f942 13 227 1976 -f955 2 231 1976 -f957 6 232 1976 -f95d a 233 1976 -f967 a 234 1976 -f971 a 235 1976 -f97b a 236 1976 -f985 2 238 1976 -f987 f 240 1976 -FUNC f996 29 0 ___mb_cur_max_func -f996 0 248 1976 -f996 7 254 1976 -f99d 3 255 1976 -f9a0 18 257 1976 -f9b8 6 259 1976 -f9be 1 260 1976 -FUNC f9bf 16 4 ___mb_cur_max_l_func -f9bf 0 263 1976 -f9bf 15 264 1976 -f9d4 1 265 1976 -FUNC f9d5 26 0 ___lc_codepage_func -f9d5 0 268 1976 -f9d5 7 274 1976 -f9dc 3 275 1976 -f9df 18 277 1976 -f9f7 3 279 1976 -f9fa 1 280 1976 -FUNC f9fb 26 0 ___lc_collate_cp_func -f9fb 0 284 1976 -f9fb 7 290 1976 -fa02 3 291 1976 -fa05 18 293 1976 -fa1d 3 295 1976 -fa20 1 296 1976 -FUNC fa21 26 0 ___lc_handle_func -fa21 0 300 1976 -fa21 7 306 1976 -fa28 3 307 1976 -fa2b 18 309 1976 -fa43 3 311 1976 -fa46 1 312 1976 -FUNC fa47 3 4 __init_collate -fa47 0 41 2064 -fa47 2 42 2064 -fa49 1 43 2064 -FUNC fa4a fe 4 _Getdays_l -fa4a 9 111 190 -fa53 d 115 190 -fa60 9 117 190 -fa69 9 119 190 -fa72 28 120 190 -fa9a b 121 190 -faa5 c 123 190 -fab1 4 126 190 -fab5 30 128 190 -fae5 8 129 190 -faed 31 131 190 -fb1e 12 132 190 -fb30 3 134 190 -fb33 13 137 190 -fb46 2 138 190 -FUNC fb48 9 0 _Getdays -fb48 0 142 190 -fb48 8 143 190 -fb50 1 144 190 -FUNC fb51 fe 4 _Getmonths_l -fb51 9 150 190 -fb5a d 154 190 -fb67 16 156 190 -fb7d 2b 159 190 -fba8 b 160 190 -fbb3 8 162 190 -fbbb a 163 190 -fbc5 2d 167 190 -fbf2 8 168 190 -fbfa 2c 170 190 -fc26 11 171 190 -fc37 3 173 190 -fc3a 13 176 190 -fc4d 2 177 190 -FUNC fc4f 9 0 _Getmonths -fc4f 0 181 190 -fc4f 8 182 190 -fc57 1 183 190 -FUNC fc58 355 4 _Gettnames_l -fc58 9 189 190 -fc61 d 193 190 -fc6e 9 195 190 -fc77 9 197 190 -fc80 28 198 190 -fca8 d 199 190 -fcb5 29 200 190 -fcde 18 201 190 -fcf6 11 202 190 -fd07 f 203 190 -fd16 f 204 190 -fd25 7 205 190 -fd2c e 206 190 -fd3a 8 208 190 -fd42 12 212 190 -fd54 13 213 190 -fd67 6 214 190 -fd6d 2a 215 190 -fd97 6 216 190 -fd9d d 217 190 -fdaa 26 218 190 -fdd0 1c 219 190 -fdec 18 221 190 -fe04 6 222 190 -fe0a 26 223 190 -fe30 a 224 190 -fe3a 5 225 190 -fe3f 2a 226 190 -fe69 18 227 190 -fe81 30 230 190 -feb1 a 231 190 -febb 30 233 190 -feeb a 234 190 -fef5 30 236 190 -ff25 a 237 190 -ff2f 30 239 190 -ff5f a 240 190 -ff69 30 242 190 -ff99 12 245 190 -ffab 2 246 190 -FUNC ffad 9 0 _Gettnames -ffad 0 250 190 -ffad 8 251 190 -ffb5 1 252 190 -FUNC ffb6 20 0 _store_str -ffb6 0 869 190 -ffb6 f 871 190 -ffc5 7 872 190 -ffcc 9 873 190 -ffd5 1 875 190 -FUNC ffd6 36 0 _store_number -ffd6 0 965 190 -ffd6 8 973 190 -ffde c 976 190 -ffea 2 977 190 -ffec b 978 190 -fff7 2 981 190 -fff9 2 982 190 -fffb 1 983 190 -fffc 7 988 190 -10003 3 989 190 -10006 5 990 190 -1000b 1 991 190 -FUNC 1000c 79 4 _store_num -1000c 8 909 190 -10014 2 910 190 -10016 8 912 190 -1001e 33 913 190 -10051 2 914 190 -10053 4 917 190 -10057 8 918 190 -1005f b 919 190 -1006a c 921 190 -10076 5 923 190 -1007b 2 924 190 -1007d 2 926 190 -1007f 4 927 190 -10083 2 928 190 -FUNC 10085 3e6 10 _expandtime -10085 5 548 190 -1008a 4f 558 190 -100d9 16 659 190 -100ef 5 662 190 -100f4 16 587 190 -1010a 7 589 190 -10111 5 590 190 -10116 16 571 190 -1012c 7 573 190 -10133 5 574 190 -10138 5 822 190 -1013d 7 823 190 -10144 5 824 190 -10149 16 667 190 -1015f 10 668 190 -1016f 2 669 190 -10171 5 672 190 -10176 23 558 190 -10199 6 787 190 -1019f 5 789 190 -101a4 15 736 190 -101b9 2 737 190 -101bb 2 739 190 -101bd 5 740 190 -101c2 15 722 190 -101d7 2 723 190 -101d9 16 742 190 -101ef 4 743 190 -101f3 2 744 190 -101f5 5 745 190 -101fa 6 746 190 -10200 8 747 190 -10208 1 748 190 -10209 5 752 190 -1020e f 715 190 -1021d 5 718 190 -10222 3 696 190 -10225 2 699 190 -10227 1d 804 190 -10244 6 806 190 -1024a d 808 190 -10257 2 809 190 -10259 37 558 190 -10290 19 678 190 -102a9 8 680 190 -102b1 2 681 190 -102b3 15 650 190 -102c8 13 652 190 -102db 5 653 190 -102e0 1e 601 190 -102fe 2 603 190 -10300 5 606 190 -10305 2 607 190 -10307 2 608 190 -10309 25 615 190 -1032e 2 617 190 -10330 1 627 190 -10331 2 642 190 -10333 e 579 190 -10341 7 581 190 -10348 5 582 190 -1034d 2d 562 190 -1037a 6 564 190 -10380 5 565 190 -10385 e 687 190 -10393 3 689 190 -10396 5 690 190 -1039b 15 558 190 -103b0 2 834 190 -103b2 5 814 190 -103b7 19 817 190 -103d0 5 819 190 -103d5 d 795 190 -103e2 b 798 190 -103ed 5 799 190 -103f2 11 762 190 -10403 5 764 190 -10408 1 774 190 -10409 5 776 190 -1040e 16 729 190 -10424 6 731 190 -1042a 5 732 190 -1042f 16 704 190 -10445 3 705 190 -10448 b 706 190 -10453 2 707 190 -10455 e 708 190 -10463 6 839 190 -10469 2 840 190 -FUNC 1046b 45d 18 _store_winword -1046b 10 1035 190 -1047b 5 1043 190 -10480 a 1053 190 -1048a 3 1043 190 -1048d 6 1053 190 -10493 2 1054 190 -10495 6 1049 190 -1049b 2 1050 190 -1049d 6 1046 190 -104a3 10 1057 190 -104b3 4 1066 190 -104b7 8 1067 190 -104bf 6 1069 190 -104c5 d 1075 190 -104d2 a 1076 190 -104dc 8 1077 190 -104e4 4 1078 190 -104e8 2a 1085 190 -10512 b 1087 190 -1051d 31 1092 190 -1054e 7 1093 190 -10555 3 1097 190 -10558 13 1100 190 -1056b 10 1101 190 -1057b b 1102 190 -10586 b 1103 190 -10591 9 1106 190 -1059a 3 1291 190 -1059d 12 1292 190 -105af 11 1114 190 -105c0 5 1117 190 -105c5 b 1120 190 -105d0 37 1125 190 -10607 14 1274 190 -1061b c 1277 190 -10627 8 1283 190 -1062f 4 1284 190 -10633 9 1286 190 -1063c c 1287 190 -10648 5 1277 190 -1064d e 1128 190 -1065b 7 1133 190 -10662 7 1132 190 -10669 7 1130 190 -10670 2 1131 190 -10672 5 1134 190 -10677 a 1156 190 -10681 7 1158 190 -10688 2 1159 190 -1068a 5 1160 190 -1068f 11 1175 190 -106a0 5 1176 190 -106a5 11 1177 190 -106b6 6 1178 190 -106bc 2 1179 190 -106be 5 1180 190 -106c3 b 1225 190 -106ce 13 1226 190 -106e1 4 1228 190 -106e5 1a 1233 190 -106ff 9 1236 190 -10708 8 1242 190 -10710 4 1243 190 -10714 9 1246 190 -1071d 8 1247 190 -10725 5 1277 190 -1072a 1 1230 190 -1072b 5 1250 190 -10730 12 1136 190 -10742 7 1141 190 -10749 7 1140 190 -10750 7 1138 190 -10757 2 1139 190 -10759 5 1142 190 -1075e 29 1125 190 -10787 e 1144 190 -10795 7 1147 190 -1079c 2 1146 190 -1079e 5 1148 190 -107a3 7 1182 190 -107aa b 1183 190 -107b5 2 1184 190 -107b7 6 1185 190 -107bd 12 1187 190 -107cf 17 1188 190 -107e6 c 1191 190 -107f2 8 1197 190 -107fa 4 1198 190 -107fe 8 1201 190 -10806 2 1202 190 -10808 5 1203 190 -1080d 9 1204 190 -10816 1a 1205 190 -10830 9 1207 190 -10839 8 1212 190 -10841 4 1213 190 -10845 9 1215 190 -1084e 8 1216 190 -10856 2 1220 190 -10858 d 1168 190 -10865 7 1170 190 -1086c 2 1171 190 -1086e 2 1172 190 -10870 d 1162 190 -1087d 7 1164 190 -10884 2 1165 190 -10886 2 1166 190 -10888 d 1150 190 -10895 7 1152 190 -1089c 2 1153 190 -1089e 1b 1268 190 -108b9 3 1272 190 -108bc 5 1273 190 -108c1 7 1194 190 -FUNC 108c8 1af 18 _Strftime_l -108c8 6 356 190 -108ce 4 361 190 -108d2 13 362 190 -108e5 33 364 190 -10918 33 365 190 -1094b d 368 190 -10958 10 375 190 -10968 e 385 190 -10976 a 387 190 -10980 1e 435 190 -1099e 4 438 190 -109a2 a 446 190 -109ac 5 447 190 -109b1 b 452 190 -109bc 3 453 190 -109bf 2 454 190 -109c1 7 400 190 -109c8 1 405 190 -109c9 2 408 190 -109cb 5 409 190 -109d0 1 411 190 -109d1 1 412 190 -109d2 1d 415 190 -109ef 1 428 190 -109f0 5 385 190 -109f5 5 464 190 -109fa 5 469 190 -109ff 13 470 190 -10a12 3 441 190 -10a15 f 478 190 -10a24 b 481 190 -10a2f 2 483 190 -10a31 b 402 190 -10a3c 2 403 190 -10a3e 5 421 190 -10a43 7 423 190 -10a4a 2 464 190 -10a4c 18 485 190 -10a64 11 488 190 -10a75 2 490 190 -FUNC 10a77 1e 14 _strftime_l -10a77 3 291 190 -10a7a 19 292 190 -10a93 2 293 190 -FUNC 10a95 1d 10 strftime -10a95 0 300 190 -10a95 1c 301 190 -10ab1 1 302 190 -FUNC 10ab2 1e 14 _Strftime -10ab2 3 343 190 -10ab5 19 345 190 -10ace 2 346 190 -FUNC 10ad0 26 0 localeconv -10ad0 0 69 1716 -10ad0 5 75 1716 -10ad5 1b 78 1716 -10af0 5 79 1716 -10af5 1 80 1716 -FUNC 10b00 46 8 strcspn -10b00 4 191 591 -10b04 2 198 591 -10b06 1 199 591 -10b07 1 200 591 -10b08 1 201 591 -10b09 1 202 591 -10b0a 1 203 591 -10b0b 1 204 591 -10b0c 1 205 591 -10b0d 1 206 591 -10b0e 6 212 591 -10b14 2 216 591 -10b16 2 217 591 -10b18 2 218 591 -10b1a 3 219 591 -10b1d 4 220 591 -10b21 2 221 591 -10b23 3 227 591 -10b26 6 229 591 -10b2c 3 234 591 -10b2f 2 236 591 -10b31 2 237 591 -10b33 2 238 591 -10b35 3 239 591 -10b38 4 240 591 -10b3c 2 245 591 -10b3e 2 255 591 -10b40 3 257 591 -10b43 3 259 591 -FUNC 10b46 60 c TranslateName -10b46 3 340 2263 -10b49 3 342 2263 -10b4c 3 343 2263 -10b4f b 346 2263 -10b5a a 348 2263 -10b64 14 349 2263 -10b78 6 351 2263 -10b7e a 352 2263 -10b88 2 353 2263 -10b8a 4 354 2263 -10b8e 2 355 2263 -10b90 3 356 2263 -10b93 7 346 2263 -10b9a a 359 2263 -10ba4 2 360 2263 -FUNC 10ba6 14 0 GetLcidFromDefault -10ba6 0 761 2263 -10ba6 7 762 2263 -10bad c 763 2263 -10bb9 1 764 2263 -FUNC 10bba 77 0 ProcessCodePage -10bba 13 784 2263 -10bcd 1a 787 2263 -10be7 11 795 2263 -10bf8 8 799 2263 -10c00 2 801 2263 -10c02 18 791 2263 -10c1a 3 793 2263 -10c1d 7 805 2263 -10c24 d 806 2263 -FUNC 10c31 1e 4 TestDefaultCountry -10c31 0 826 2263 -10c31 2 830 2263 -10c33 15 832 2263 -10c48 3 835 2263 -10c4b 1 836 2263 -10c4c 2 833 2263 -10c4e 1 836 2263 -FUNC 10c4f 32 0 LcidFromHexString -10c4f 1 893 2263 -10c50 2 895 2263 -10c52 2 897 2263 -10c54 9 899 2263 -10c5d 5 900 2263 -10c62 8 901 2263 -10c6a 3 902 2263 -10c6d 10 903 2263 -10c7d 3 906 2263 -10c80 1 907 2263 -FUNC 10c81 1b 0 GetPrimaryLen -10c81 0 926 2263 -10c81 2 927 2263 -10c83 3 930 2263 -10c86 12 931 2263 -10c98 1 933 2263 -10c99 2 935 2263 -10c9b 1 938 2263 -FUNC 10c9c 96 4 CountryEnumProc -10c9c 15 717 2263 -10cb1 7 718 2263 -10cb8 f 719 2263 -10cc7 23 725 2263 -10cea 3 728 2263 -10ced 3 729 2263 -10cf0 12 731 2263 -10d02 b 734 2263 -10d0d a 738 2263 -10d17 b 741 2263 -10d22 10 742 2263 -FUNC 10d32 72 8 TestDefaultLanguage -10d32 11 858 2263 -10d43 22 864 2263 -10d65 4 865 2263 -10d69 d 867 2263 -10d76 1c 871 2263 -10d92 2 872 2263 -10d94 3 874 2263 -10d97 d 875 2263 -FUNC 10da4 1d0 4 LangCountryEnumProc -10da4 16 435 2263 -10dba 7 436 2263 -10dc1 d 437 2263 -10dce 27 444 2263 -10df5 4 447 2263 -10df9 8 448 2263 -10e01 16 450 2263 -10e17 1d 456 2263 -10e34 2 460 2263 -10e36 11 462 2263 -10e47 7 467 2263 -10e4e 5 468 2263 -10e53 6 472 2263 -10e59 1a 475 2263 -10e73 14 482 2263 -10e87 3 483 2263 -10e8a a 487 2263 -10e94 b 490 2263 -10e9f 6 493 2263 -10ea5 3 494 2263 -10ea8 12 501 2263 -10eba 1d 506 2263 -10ed7 6 510 2263 -10edd c 513 2263 -10ee9 16 518 2263 -10eff 8 522 2263 -10f07 14 528 2263 -10f1b 2 531 2263 -10f1d 2 540 2263 -10f1f 1b 550 2263 -10f3a f 553 2263 -10f49 7 557 2263 -10f50 5 558 2263 -10f55 3 559 2263 -10f58 b 566 2263 -10f63 11 567 2263 -FUNC 10f74 bf 4 LanguageEnumProc -10f74 15 624 2263 -10f89 7 625 2263 -10f90 f 626 2263 -10f9f 23 632 2263 -10fc2 3 635 2263 -10fc5 3 636 2263 -10fc8 11 639 2263 -10fd9 7 643 2263 -10fe0 2 650 2263 -10fe2 1d 651 2263 -10fff f 654 2263 -1100e a 658 2263 -11018 b 662 2263 -11023 10 663 2263 -FUNC 11033 2c 0 GetLcidFromCountry -11033 0 686 2263 -11033 10 687 2263 -11043 11 689 2263 -11054 6 693 2263 -1105a 4 694 2263 -1105e 1 695 2263 -FUNC 1105f 65 0 GetLcidFromLangCountry -1105f 0 386 2263 -1105f 7 388 2263 -11066 1a 389 2263 -11080 5 390 2263 -11085 17 392 2263 -1109c 10 394 2263 -110ac 13 402 2263 -110bf 4 403 2263 -110c3 1 404 2263 -FUNC 110c4 3c 0 GetLcidFromLanguage -110c4 0 591 2263 -110c4 13 593 2263 -110d7 e 594 2263 -110e5 10 596 2263 -110f5 6 600 2263 -110fb 4 601 2263 -110ff 1 602 2263 -FUNC 11100 1e3 c __get_qualified_locale -11100 4 205 2263 -11104 5 208 2263 -11109 12 212 2263 -1111b 7 215 2263 -11122 5 217 2263 -11127 3 222 2263 -1112a f 223 2263 -11139 10 226 2263 -11149 d 230 2263 -11156 a 232 2263 -11160 5 235 2263 -11165 2 237 2263 -11167 5 240 2263 -1116c 5 243 2263 -11171 14 248 2263 -11185 a 250 2263 -1118f 5 252 2263 -11194 2 254 2263 -11196 5 256 2263 -1119b 2 261 2263 -1119d a 263 2263 -111a7 28 266 2263 -111cf 2 268 2263 -111d1 13 271 2263 -111e4 3 277 2263 -111e7 6 278 2263 -111ed 17 281 2263 -11204 32 285 2263 -11236 d 289 2263 -11243 6 290 2263 -11249 8 293 2263 -11251 7 295 2263 -11258 8 296 2263 -11260 4 297 2263 -11264 8 301 2263 -1126c d 305 2263 -11279 23 306 2263 -1129c 2 307 2263 -1129e f 308 2263 -112ad 2 309 2263 -112af 12 311 2263 -112c1 2 312 2263 -112c3 14 313 2263 -112d7 5 315 2263 -112dc 6 286 2263 -112e2 1 316 2263 -FUNC 112e3 12 0 cmpResult -FUNC 112f5 18 0 cmpBYTE -FUNC 1130d 40 0 cmpWORD -FUNC 1134d 78 0 cmpDWORD -FUNC 113c5 1490 0 unaligned_memcmp -FUNC 12855 1680 c memcmp -FUNC 13ed5 be c strncmp -13ed5 4 42 543 -13ed9 5 43 543 -13ede 7 45 543 -13ee5 7 46 543 -13eec 6 48 543 -13ef2 d 51 543 -13eff 11 56 543 -13f10 c 61 543 -13f1c c 66 543 -13f28 15 71 543 -13f3d 2 81 543 -13f3f a 73 543 -13f49 a 68 543 -13f53 a 63 543 -13f5d 10 58 543 -13f6d 2 79 543 -13f6f a 81 543 -13f79 1 85 543 -13f7a 4 86 543 -13f7e 5 79 543 -13f83 4 89 543 -13f87 2 90 543 -13f89 a 83 543 -FUNC 13fa0 40 8 strpbrk -13fa0 4 191 536 -13fa4 2 198 536 -13fa6 1 199 536 -13fa7 1 200 536 -13fa8 1 201 536 -13fa9 1 202 536 -13faa 1 203 536 -13fab 1 204 536 -13fac 1 205 536 -13fad 1 206 536 -13fae 6 212 536 -13fb4 2 216 536 -13fb6 2 217 536 -13fb8 2 218 536 -13fba 3 219 536 -13fbd 4 220 536 -13fc1 2 221 536 -13fc3 5 227 536 -13fc8 2 236 536 -13fca 2 237 536 -13fcc 2 238 536 -13fce 3 239 536 -13fd1 4 240 536 -13fd5 2 247 536 -13fd7 3 248 536 -13fda 3 257 536 -13fdd 3 259 536 -FUNC 13fe0 104 0 __report_gsfailure -13fe0 9 140 2145 -13fe9 5 170 2145 -13fee 6 171 2145 -13ff4 6 172 2145 -13ffa 6 173 2145 -14000 6 174 2145 -14006 6 175 2145 -1400c 7 176 2145 -14013 7 177 2145 -1401a 7 178 2145 -14021 7 179 2145 -14028 7 180 2145 -1402f 7 181 2145 -14036 1 182 2145 -14037 6 183 2145 -1403d 3 190 2145 -14040 5 191 2145 -14045 3 192 2145 -14048 5 193 2145 -1404d 3 194 2145 -14050 5 195 2145 -14055 6 201 2145 -1405b a 204 2145 -14065 a 206 2145 -1406f a 285 2145 -14079 a 286 2145 -14083 b 293 2145 -1408e b 294 2145 -14099 b 297 2145 -140a4 8 298 2145 -140ac 8 302 2145 -140b4 b 304 2145 -140bf 9 313 2145 -140c8 8 315 2145 -140d0 12 319 2145 -140e2 2 320 2145 -FUNC 140e4 20 0 _global_unwind2 -FUNC 14104 45 0 __unwind_handler -FUNC 14149 84 0 _local_unwind2 -FUNC 141cd 23 0 _abnormal_termination -FUNC 141f0 9 0 _NLG_Notify1 -FUNC 141f9 1f 0 _NLG_Notify -PUBLIC 14210 0 _NLG_Dispatch -FUNC 14218 3 0 _NLG_Call -PUBLIC 1421a 0 _NLG_Return2 -FUNC 1421b 57 8 fastzero_I -FUNC 14272 8f c _VEC_memzero -FUNC 14301 22b 14 strtoxl -14301 8 80 4034 -14309 b 86 4034 -14314 3 89 4034 -14317 b 92 4034 -14322 30 94 4034 -14352 11 95 4034 -14363 c 100 4034 -1436f 34 101 4034 -143a3 5 102 4034 -143a8 5 104 4034 -143ad 4 105 4034 -143b1 2 106 4034 -143b3 5 108 4034 -143b8 3 109 4034 -143bb 1d 111 4034 -143d8 4 118 4034 -143dc 5 121 4034 -143e1 9 122 4034 -143ea a 123 4034 -143f4 9 126 4034 -143fd 7 124 4034 -14404 2 129 4034 -14406 5 140 4034 -1440b f 142 4034 -1441a 1 143 4034 -1441b 9 144 4034 -14424 8 149 4034 -1442c c 154 4034 -14438 8 155 4034 -14440 7 156 4034 -14447 13 157 4034 -1445a 5 160 4034 -1445f 4 164 4034 -14463 b 171 4034 -1446e 4 177 4034 -14472 6 178 4034 -14478 8 190 4034 -14480 6 193 4034 -14486 3 195 4034 -14489 4 196 4034 -1448d 2 198 4034 -1448f c 173 4034 -1449b 3 185 4034 -1449e 2 186 4034 -144a0 24 201 4034 -144c4 5 204 4034 -144c9 c 205 4034 -144d5 6 206 4034 -144db 10 207 4034 -144eb 7 213 4034 -144f2 2 215 4034 -144f4 6 217 4034 -144fa 3 219 4034 -144fd 12 221 4034 -1450f 7 113 4034 -14516 2 115 4034 -14518 12 116 4034 -1452a 2 222 4034 -FUNC 1452c 29 c strtol -1452c 3 229 4034 -1452f 8 230 4034 -14537 13 232 4034 -1454a 9 236 4034 -14553 2 238 4034 -FUNC 14555 1b 10 _strtol_l -14555 0 246 4034 -14555 1a 247 4034 -1456f 1 248 4034 -FUNC 14570 2a c strtoul -14570 3 255 4034 -14573 7 256 4034 -1457a 14 258 4034 -1458e a 262 4034 -14598 2 264 4034 -FUNC 1459a 1b 10 _strtoul_l -1459a 0 272 4034 -1459a 1a 273 4034 -145b4 1 274 4034 -FUNC 145b5 294 14 strtoxq -145b5 8 80 3989 -145bd b 86 3989 -145c8 3 89 3989 -145cb b 92 3989 -145d6 31 94 3989 -14607 12 95 3989 -14619 c 100 3989 -14625 37 102 3989 -1465c 2 103 3989 -1465e 9 105 3989 -14667 4 106 3989 -1466b 2 107 3989 -1466d 6 109 3989 -14673 9 110 3989 -1467c 8 112 3989 -14684 6 115 3989 -1468a 9 116 3989 -14693 a 117 3989 -1469d 9 120 3989 -146a6 3 118 3989 -146a9 5 123 3989 -146ae 10 125 3989 -146be 1 126 3989 -146bf 9 127 3989 -146c8 26 132 3989 -146ee e 137 3989 -146fc 8 138 3989 -14704 6 139 3989 -1470a 11 140 3989 -1471b 5 143 3989 -14720 31 154 3989 -14751 4 160 3989 -14755 6 161 3989 -1475b a 173 3989 -14765 7 176 3989 -1476c 6 178 3989 -14772 6 179 3989 -14778 5 181 3989 -1477d 19 156 3989 -14796 b 168 3989 -147a1 5 169 3989 -147a6 35 184 3989 -147db 5 187 3989 -147e0 c 188 3989 -147ec a 189 3989 -147f6 6 190 3989 -147fc 7 191 3989 -14803 2 192 3989 -14805 7 193 3989 -1480c 8 195 3989 -14814 5 197 3989 -14819 6 199 3989 -1481f 13 201 3989 -14832 15 203 3989 -14847 2 204 3989 -FUNC 14849 29 c _strtoi64 -14849 3 211 3989 -1484c 8 212 3989 -14854 13 214 3989 -14867 9 218 3989 -14870 2 220 3989 -FUNC 14872 1b 10 _strtoi64_l -14872 0 227 3989 -14872 1a 228 3989 -1488c 1 229 3989 -FUNC 1488d 2a c _strtoui64 -1488d 3 236 3989 -14890 7 237 3989 -14897 14 239 3989 -148ab a 243 3989 -148b5 2 245 3989 -FUNC 148b7 1b 10 _strtoui64_l -148b7 0 253 3989 -148b7 1a 254 3989 -148d1 1 255 3989 -FUNC 148d2 b6 c _isctype_l -148d2 7 114 4078 -148d9 b 118 4078 -148e4 d 121 4078 -148f1 f 122 4078 -14900 1f 124 4078 -1491f 3 126 4078 -14922 d 129 4078 -1492f 2 130 4078 -14931 a 133 4078 -1493b 26 144 4078 -14961 10 146 4078 -14971 15 149 4078 -14986 2 150 4078 -FUNC 14988 2f 8 _isctype -14988 0 156 4078 -14988 9 157 4078 -14991 12 159 4078 -149a3 1 165 4078 -149a4 12 163 4078 -149b6 1 165 4078 -FUNC 149c0 2c 0 _alloca_probe_16 -149c0 0 44 1046 -149c0 1 46 1046 -149c1 4 47 1046 -149c5 2 48 1046 -149c7 3 49 1046 -149ca 2 50 1046 -149cc 2 51 1046 -149ce 2 52 1046 -149d0 1 53 1046 -149d1 5 54 1046 -149d6 1 59 1046 -149d7 4 60 1046 -149db 2 61 1046 -149dd 3 62 1046 -149e0 2 63 1046 -149e2 2 64 1046 -149e4 2 65 1046 -149e6 1 66 1046 -149e7 5 67 1046 -PUBLIC 149d6 0 _alloca_probe_8 -FUNC 149ec 47 4 __ansicp -149ec 10 39 1348 -149fc 1c 44 1348 -14a18 3 45 1348 -14a1b 2 46 1348 -14a1d a 47 1348 -14a27 c 49 1348 -FUNC 14a33 1b2 18 __convertcp -14a33 16 79 1348 -14a49 10 83 1348 -14a59 18 85 1348 -14a71 17 90 1348 -14a88 13 92 1348 -14a9b 6 93 1348 -14aa1 d 99 1348 -14aae 2 101 1348 -14ab0 c 103 1348 -14abc 2a 115 1348 -14ae6 15 111 1348 -14afb 7 112 1348 -14b02 1c 115 1348 -14b1e 3 116 1348 -14b21 2 117 1348 -14b23 10 119 1348 -14b33 15 127 1348 -14b48 7 129 1348 -14b4f 18 138 1348 -14b67 3 139 1348 -14b6a 2 140 1348 -14b6c 1f 149 1348 -14b8b 11 151 1348 -14b9c 12 160 1348 -14bae 9 162 1348 -14bb7 3 163 1348 -14bba 2 164 1348 -14bbc 6 165 1348 -14bc2 5 166 1348 -14bc7 9 174 1348 -14bd0 3 177 1348 -14bd3 12 178 1348 -FUNC 14be5 50 0 has_osfxsr_set -FUNC 14c35 60 0 _get_sse2_info -FUNC 14c95 d 0 __sse2_available_init -FUNC 14ca2 34 4 _get_daylight -14ca2 0 35 161 -14ca2 27 36 161 -14cc9 1 41 161 -14cca 8 39 161 -14cd2 3 40 161 -14cd5 1 41 161 -FUNC 14cd6 34 4 _get_dstbias -14cd6 0 44 161 -14cd6 27 45 161 -14cfd 1 50 161 -14cfe 8 48 161 -14d06 3 49 161 -14d09 1 50 161 -FUNC 14d0a 34 4 _get_timezone -14d0a 0 53 161 -14d0a 27 54 161 -14d31 1 59 161 -14d32 8 57 161 -14d3a 3 58 161 -14d3d 1 59 161 -FUNC 14d3e a2 10 _get_tzname -14d3e 3 62 161 -14d41 10 63 161 -14d51 4 64 161 -14d55 3 66 161 -14d58 7 68 161 -14d5f 27 69 161 -14d86 20 63 161 -14da6 f 72 161 -14db5 8 73 161 -14dbd 4 76 161 -14dc1 5 78 161 -14dc6 5 80 161 -14dcb 13 82 161 -14dde 2 83 161 -FUNC 14de0 6 0 __daylight -14de0 0 118 161 -14de0 5 119 161 -14de5 1 120 161 -FUNC 14de6 6 0 __dstbias -14de6 0 123 161 -14de6 5 124 161 -14deb 1 125 161 -FUNC 14dec 6 0 __timezone -14dec 0 128 161 -14dec 5 129 161 -14df1 1 130 161 -FUNC 14df2 6 0 __tzname -14df2 0 133 161 -14df2 5 134 161 -14df7 1 135 161 -FUNC 14df8 c 4 _set_daylight -14df8 c 189 92 -FUNC 14e04 c 4 _set_dstbias -14e04 c 190 92 -FUNC 14e10 c 4 _set_timezone -14e10 c 191 92 -FUNC 14e1c 349 0 _tzset_nolock -14e1c c 124 114 -14e28 5 127 114 -14e2d 3 129 114 -14e30 3 130 114 -14e33 3 131 114 -14e36 3 132 114 -14e39 3 133 114 -14e3c 8 135 114 -14e44 3 136 114 -14e47 8 139 114 -14e4f 1b 142 114 -14e6a 1b 143 114 -14e85 1b 144 114 -14ea0 8 149 114 -14ea8 6 154 114 -14eae f 160 114 -14ebd 18 165 114 -14ed5 14 260 114 -14ee9 b 268 114 -14ef4 4 274 114 -14ef8 7 275 114 -14eff 16 277 114 -14f15 6 281 114 -14f1b 32 283 114 -14f4d 9 174 114 -14f56 7 175 114 -14f5d 6 176 114 -14f63 13 179 114 -14f76 9 183 114 -14f7f b 188 114 -14f8a 9 190 114 -14f93 e 191 114 -14fa1 12 199 114 -14fb3 3 201 114 -14fb6 c 203 114 -14fc2 2 205 114 -14fc4 3 206 114 -14fc7 3 214 114 -14fca 27 234 114 -14ff1 8 235 114 -14ff9 2 236 114 -14ffb 7 237 114 -15002 23 247 114 -15025 9 248 114 -1502e 2 249 114 -15030 8 250 114 -15038 7 256 114 -1503f a 288 114 -15049 a 289 114 -15053 a 290 114 -1505d c 292 114 -15069 9 296 114 -15072 23 301 114 -15095 8 310 114 -1509d 7 311 114 -150a4 1 312 114 -150a5 10 318 114 -150b5 11 320 114 -150c6 5 292 114 -150cb 9 293 114 -150d4 5 325 114 -150d9 e 329 114 -150e7 d 330 114 -150f4 5 335 114 -150f9 b 339 114 -15104 d 340 114 -15111 5 344 114 -15116 3 345 114 -15119 6 350 114 -1511f 4 351 114 -15123 21 352 114 -15144 2 354 114 -15146 5 355 114 -1514b a 357 114 -15155 a 358 114 -1515f 6 360 114 -FUNC 15165 1f5 24 cvtdate -15165 6 409 114 -1516b 4 412 114 -1516f c 414 114 -1517b 52 424 114 -151cd 4c 430 114 -15219 14 436 114 -1522d 2 437 114 -1522f 2 438 114 -15231 46 447 114 -15277 3 449 114 -1527a 2 452 114 -1527c 3c 457 114 -152b8 3 459 114 -152bb 27 467 114 -152e2 6 472 114 -152e8 2 474 114 -152ea 29 485 114 -15313 11 486 114 -15324 a 487 114 -1532e 8 488 114 -15336 d 490 114 -15343 6 491 114 -15349 6 492 114 -1534f 9 499 114 -15358 2 503 114 -FUNC 1535a 1ae 0 _isindst_nolock -1535a 5 554 114 -1535f 20 558 114 -1537f 5 560 114 -15384 7 561 114 -1538b 1b 568 114 -153a6 c 569 114 -153b2 7 573 114 -153b9 34 584 114 -153ed 2 585 114 -153ef 19 596 114 -15408 40 611 114 -15448 2 612 114 -1544a 1e 623 114 -15468 2 626 114 -1546a 14 641 114 -1547e 1a 653 114 -15498 d 660 114 -154a5 d 664 114 -154b2 8 666 114 -154ba 4 674 114 -154be 2 697 114 -154c0 8 673 114 -154c8 8 675 114 -154d0 4 676 114 -154d4 14 679 114 -154e8 4 681 114 -154ec b 682 114 -154f7 2 685 114 -154f9 d 691 114 -15506 2 694 114 -FUNC 15508 4f 0 __tzset -15508 c 85 114 -15514 a 88 114 -1551e 8 90 114 -15526 3 91 114 -15529 8 93 114 -15531 5 94 114 -15536 6 95 114 -1553c c 98 114 -15548 6 103 114 -1554e 9 99 114 -FUNC 15557 38 0 _tzset -15557 c 109 114 -15563 8 110 114 -1556b 4 111 114 -1556f 5 113 114 -15574 c 115 114 -15580 6 118 114 -15586 9 116 114 -FUNC 1558f 41 4 _isindst -1558f c 538 114 -1559b 8 541 114 -155a3 4 542 114 -155a7 b 543 114 -155b2 c 544 114 -155be 3 548 114 -155c1 6 549 114 -155c7 9 545 114 -FUNC 155d0 35 8 __ascii_stricmp -155d0 a 75 367 -155da c 80 367 -155e6 3 81 367 -155e9 c 82 367 -155f5 3 83 367 -155f8 9 85 367 -15601 3 87 367 -15604 1 88 367 -FUNC 15605 d3 c _stricmp_l -15605 7 47 367 -1560c b 49 367 -15617 36 52 367 -1564d 32 53 367 -1567f 8 55 367 -15687 e 57 367 -15695 15 63 367 -156aa 11 64 367 -156bb 8 65 367 -156c3 13 68 367 -156d6 2 69 367 -FUNC 156d8 50 8 _stricmp -156d8 4 94 367 -156dc a 95 367 -156e6 24 98 367 -1570a 6 99 367 -15710 1 107 367 -15711 5 101 367 -15716 10 105 367 -15726 2 107 367 -FUNC 15728 36 8 _isleadbyte_l -15728 6 55 4169 -1572e b 56 4169 -15739 23 57 4169 -1575c 2 58 4169 -FUNC 1575e e 4 isleadbyte -1575e 0 63 4169 -1575e d 64 4169 -1576b 1 65 4169 -FUNC 1576c 16 8 _iswalpha_l -1576c 0 71 4169 -1576c 15 72 4169 -15781 1 73 4169 -FUNC 15782 11 4 iswalpha -15782 0 78 4169 -15782 10 79 4169 -15792 1 80 4169 -FUNC 15793 13 8 _iswupper_l -15793 0 86 4169 -15793 12 87 4169 -157a5 1 88 4169 -FUNC 157a6 e 4 iswupper -157a6 0 93 4169 -157a6 d 94 4169 -157b3 1 95 4169 -FUNC 157b4 13 8 _iswlower_l -157b4 0 101 4169 -157b4 12 102 4169 -157c6 1 103 4169 -FUNC 157c7 e 4 iswlower -157c7 0 108 4169 -157c7 d 109 4169 -157d4 1 110 4169 -FUNC 157d5 13 8 _iswdigit_l -157d5 0 116 4169 -157d5 12 117 4169 -157e7 1 118 4169 -FUNC 157e8 e 4 iswdigit -157e8 0 123 4169 -157e8 d 124 4169 -157f5 1 125 4169 -FUNC 157f6 16 8 _iswxdigit_l -157f6 0 131 4169 -157f6 15 132 4169 -1580b 1 133 4169 -FUNC 1580c 11 4 iswxdigit -1580c 0 138 4169 -1580c 10 139 4169 -1581c 1 140 4169 -FUNC 1581d 13 8 _iswspace_l -1581d 0 146 4169 -1581d 12 147 4169 -1582f 1 148 4169 -FUNC 15830 e 4 iswspace -15830 0 153 4169 -15830 d 154 4169 -1583d 1 155 4169 -FUNC 1583e 13 8 _iswpunct_l -1583e 0 161 4169 -1583e 12 162 4169 -15850 1 163 4169 -FUNC 15851 e 4 iswpunct -15851 0 168 4169 -15851 d 169 4169 -1585e 1 170 4169 -FUNC 1585f 16 8 _iswalnum_l -1585f 0 176 4169 -1585f 15 177 4169 -15874 1 178 4169 -FUNC 15875 11 4 iswalnum -15875 0 183 4169 -15875 10 184 4169 -15885 1 185 4169 -FUNC 15886 16 8 _iswprint_l -15886 0 191 4169 -15886 15 192 4169 -1589b 1 193 4169 -FUNC 1589c 11 4 iswprint -1589c 0 198 4169 -1589c 10 199 4169 -158ac 1 200 4169 -FUNC 158ad 16 8 _iswgraph_l -158ad 0 206 4169 -158ad 15 207 4169 -158c2 1 208 4169 -FUNC 158c3 11 4 iswgraph -158c3 0 213 4169 -158c3 10 214 4169 -158d3 1 215 4169 -FUNC 158d4 13 8 _iswcntrl_l -158d4 0 221 4169 -158d4 12 222 4169 -158e6 1 223 4169 -FUNC 158e7 e 4 iswcntrl -158e7 0 228 4169 -158e7 d 229 4169 -158f4 1 230 4169 -FUNC 158f5 c 4 iswascii -158f5 0 235 4169 -158f5 b 236 4169 -15900 1 237 4169 -FUNC 15901 26 8 _iswcsym_l -15901 0 243 4169 -15901 21 244 4169 -15922 1 245 4169 -15923 3 244 4169 -15926 1 245 4169 -FUNC 15927 21 4 __iswcsym -15927 0 250 4169 -15927 1c 251 4169 -15943 1 252 4169 -15944 3 251 4169 -15947 1 252 4169 -FUNC 15948 26 8 _iswcsymf_l -15948 0 258 4169 -15948 21 259 4169 -15969 1 260 4169 -1596a 3 259 4169 -1596d 1 260 4169 -FUNC 1596e 21 4 __iswcsymf -1596e 0 265 4169 -1596e 1c 266 4169 -1598a 1 267 4169 -1598b 3 266 4169 -1598e 1 267 4169 -FUNC 1598f f0 10 _strnicmp_l -1598f 7 51 324 -15996 d 54 324 -159a3 b 56 324 -159ae 33 59 324 -159e1 7 60 324 -159e8 32 61 324 -15a1a 8 63 324 -15a22 1d 65 324 -15a3f 15 71 324 -15a54 11 72 324 -15a65 d 74 324 -15a72 6 76 324 -15a78 5 79 324 -15a7d 2 80 324 -FUNC 15a7f 5c c _strnicmp -15a7f 4 125 324 -15a83 a 127 324 -15a8d 24 130 324 -15ab1 5 131 324 -15ab6 a 132 324 -15ac0 1 141 324 -15ac1 5 134 324 -15ac6 13 138 324 -15ad9 2 141 324 -FUNC 15adb db c xtoa_s -15adb 8 93 4260 -15ae3 24 102 4260 -15b07 24 103 4260 -15b2b 19 105 4260 -15b44 b 106 4260 -15b4f a 112 4260 -15b59 6 114 4260 -15b5f 7 116 4260 -15b66 2 118 4260 -15b68 2 121 4260 -15b6a 5 124 4260 -15b6f 5 128 4260 -15b74 3 129 4260 -15b77 2 130 4260 -15b79 6 131 4260 -15b7f 3 135 4260 -15b82 e 136 4260 -15b90 8 139 4260 -15b98 2 141 4260 -15b9a 2 142 4260 -15b9c 3 148 4260 -15b9f 6 152 4260 -15ba5 3 154 4260 -15ba8 1 155 4260 -15ba9 4 156 4260 -15bad 5 158 4260 -15bb2 4 160 4260 -FUNC 15bb6 28 10 _itoa_s -15bb6 3 172 4260 -15bb9 d 175 4260 -15bc6 4 176 4260 -15bca 2 177 4260 -15bcc 10 178 4260 -15bdc 2 181 4260 -FUNC 15bde 25 10 _ltoa_s -15bde 3 189 4260 -15be1 20 190 4260 -15c01 2 191 4260 -FUNC 15c03 18 10 _ultoa_s -15c03 0 199 4260 -15c03 17 200 4260 -15c1a 1 201 4260 -FUNC 15c1b f6 14 x64toa_s -15c1b 7 309 4260 -15c22 25 318 4260 -15c47 5 319 4260 -15c4c 19 321 4260 -15c65 b 322 4260 -15c70 3 327 4260 -15c73 20 333 4260 -15c93 3 336 4260 -15c96 1e 352 4260 -15cb4 3 344 4260 -15cb7 2 345 4260 -15cb9 5 346 4260 -15cbe 5 351 4260 -15cc3 13 352 4260 -15cd6 5 355 4260 -15cdb 3 357 4260 -15cde 13 358 4260 -15cf1 4 364 4260 -15cf5 9 368 4260 -15cfe 3 370 4260 -15d01 1 371 4260 -15d02 7 372 4260 -15d09 4 375 4260 -15d0d 4 377 4260 -FUNC 15d11 33 14 _i64toa_s -15d11 3 390 4260 -15d14 2e 391 4260 -15d42 2 392 4260 -FUNC 15d44 1d 14 _ui64toa_s -15d44 4 400 4260 -15d48 17 401 4260 -15d5f 2 402 4260 -FUNC 15d70 2b 0 _chkstk -15d70 0 65 1048 -15d70 1 69 1048 -15d71 4 73 1048 -15d75 2 74 1048 -15d77 2 79 1048 -15d79 2 80 1048 -15d7b 2 81 1048 -15d7d 2 83 1048 -15d7f 5 84 1048 -15d84 2 87 1048 -15d86 2 88 1048 -15d88 2 89 1048 -15d8a 1 90 1048 -15d8b 1 91 1048 -15d8c 2 92 1048 -15d8e 3 93 1048 -15d91 1 94 1048 -15d92 5 98 1048 -15d97 2 99 1048 -15d99 2 100 1048 -FUNC 15d9b 81 4 _getenv_helper_nolock -15d9b 0 95 2318 -15d9b 10 103 2318 -15dab 3 104 2318 -15dae 1 169 2318 -15daf e 128 2318 -15dbd 7 131 2318 -15dc4 2 132 2318 -15dc6 6 135 2318 -15dcc c 140 2318 -15dd8 9 142 2318 -15de1 2 150 2318 -15de3 22 154 2318 -15e05 3 164 2318 -15e08 6 150 2318 -15e0e 5 168 2318 -15e13 9 169 2318 -FUNC 15e1c 93 c _getenv_s_helper -15e1c 7 220 2318 -15e23 21 224 2318 -15e44 15 226 2318 -15e59 4 227 2318 -15e5d 3 229 2318 -15e60 a 233 2318 -15e6a 3 234 2318 -15e6d 2 236 2318 -15e6f 7 239 2318 -15e76 6 240 2318 -15e7c 2 243 2318 -15e7e 5 246 2318 -15e83 5 251 2318 -15e88 20 254 2318 -15ea8 5 256 2318 -15ead 2 257 2318 -FUNC 15eaf a2 8 _dupenv_s_helper -15eaf 6 339 2318 -15eb5 21 344 2318 -15ed6 9 346 2318 -15edf 2 348 2318 -15ee1 5 350 2318 -15ee6 8 352 2318 -15eee 6 353 2318 -15ef4 2 355 2318 -15ef6 9 358 2318 -15eff b 362 2318 -15f0a 6 364 2318 -15f10 b 366 2318 -15f1b 9 367 2318 -15f24 1e 370 2318 -15f42 7 371 2318 -15f49 2 373 2318 -15f4b 4 375 2318 -15f4f 2 376 2318 -FUNC 15f51 83 4 getenv -15f51 c 75 2318 -15f5d 2a 78 2318 -15f87 18 79 2318 -15f9f 8 81 2318 -15fa7 3 82 2318 -15faa c 83 2318 -15fb6 c 85 2318 -15fc2 3 89 2318 -15fc5 6 90 2318 -15fcb 9 86 2318 -FUNC 15fd4 d8 10 getenv_s -15fd4 c 198 2318 -15fe0 8 201 2318 -15fe8 5 202 2318 -15fed a1 203 2318 -1608e c 205 2318 -1609a 3 209 2318 -1609d 6 210 2318 -160a3 9 206 2318 -FUNC 160ac e6 c _dupenv_s -160ac c 303 2318 -160b8 8 306 2318 -160c0 5 307 2318 -160c5 af 311 2318 -16174 c 314 2318 -16180 3 318 2318 -16183 6 319 2318 -16189 9 315 2318 -FUNC 16192 8 4 _tolower -16192 0 48 3943 -16192 7 49 3943 -16199 1 50 3943 -FUNC 1619a 117 8 _tolower_l -1619a 8 70 3943 -161a2 b 74 3943 -161ad c 77 3943 -161b9 31 79 3943 -161ea f 80 3943 -161f9 14 82 3943 -1620d 2b 86 3943 -16238 3 88 3943 -1623b d 91 3943 -16248 2 92 3943 -1624a b 94 3943 -16255 a 97 3943 -1625f 25 110 3943 -16284 6 112 3943 -1628a 5 116 3943 -1628f 6 117 3943 -16295 1a 119 3943 -162af 2 120 3943 -FUNC 162b1 27 4 tolower -162b1 0 143 3943 -162b1 9 145 3943 -162ba f 147 3943 -162c9 1 153 3943 -162ca d 151 3943 -162d7 1 153 3943 -FUNC 162d8 82 c _iswctype_l -162d8 6 66 4124 -162de 8 69 4124 -162e6 6 70 4124 -162ec 8 71 4124 -162f4 18 72 4124 -1630c 2 73 4124 -1630e b 75 4124 -16319 25 85 4124 -1633e 3 86 4124 -16341 d 87 4124 -1634e a 89 4124 -16358 2 90 4124 -FUNC 1635a 6e 8 iswctype -1635a 4 96 4124 -1635e 8 97 4124 -16366 2 99 4124 -16368 2 122 4124 -1636a 8 101 4124 -16372 14 103 4124 -16386 2 122 4124 -16388 9 106 4124 -16391 25 117 4124 -163b6 10 121 4124 -163c6 2 122 4124 -FUNC 163c8 5 8 is_wctype -163c8 0 148 4124 -163c8 5 149 4124 -FUNC 163d0 61 c __ascii_strnicmp -163d0 6 69 538 -163d6 3 75 538 -163d9 2 76 538 -163db 2 77 538 -163dd 3 79 538 -163e0 3 80 538 -163e3 2 82 538 -163e5 2 83 538 -163e7 5 84 538 -163ec 2 89 538 -163ee 2 91 538 -163f0 2 93 538 -163f2 2 95 538 -163f4 2 97 538 -163f6 2 98 538 -163f8 3 100 538 -163fb 3 101 538 -163fe 2 103 538 -16400 2 104 538 -16402 2 106 538 -16404 2 107 538 -16406 2 109 538 -16408 2 112 538 -1640a 2 113 538 -1640c 2 115 538 -1640e 2 116 538 -16410 2 118 538 -16412 2 121 538 -16414 2 122 538 -16416 3 124 538 -16419 2 125 538 -1641b 2 128 538 -1641d 2 129 538 -1641f 2 130 538 -16421 5 133 538 -16426 2 134 538 -16428 2 135 538 -1642a 2 138 538 -1642c 5 140 538 -FUNC 16431 ec 10 _mbsnbicoll_l -16431 7 53 2932 -16438 b 55 2932 -16443 9 57 2932 -1644c 13 58 2932 -1645f 33 61 2932 -16492 6 62 2932 -16498 23 63 2932 -164bb 8 65 2932 -164c3 14 66 2932 -164d7 23 74 2932 -164fa 10 75 2932 -1650a 11 77 2932 -1651b 2 79 2932 -FUNC 1651d 17 c _mbsnbicoll -1651d 0 85 2932 -1651d 16 86 2932 -16533 1 87 2932 -FUNC 16534 95 0 __wtomb_environ -16534 7 43 1113 -1653b 3 44 1113 -1653e 9 45 1113 -16547 c 52 1113 -16553 12 57 1113 -16565 11 61 1113 -16576 12 65 1113 -16588 10 72 1113 -16598 5 74 1113 -1659d 9 76 1113 -165a6 3 77 1113 -165a9 9 81 1113 -165b2 5 84 1113 -165b7 2 85 1113 -165b9 5 58 1113 -165be 9 67 1113 -165c7 2 68 1113 -FUNC 165c9 1a 8 strnlen -165c9 0 38 531 -165c9 19 45 531 -165e2 1 49 531 -FUNC 165e3 224 1c __crtGetStringTypeW_stat -165e3 10 64 1242 -165f3 9 72 1242 -165fc 7 73 1242 -16603 14 75 1242 -16617 11 79 1242 -16628 8 80 1242 -16630 b 82 1242 -1663b f 83 1242 -1664a 4 88 1242 -1664e 13 90 1242 -16661 7 95 1242 -16668 2 199 1242 -1666a 8 119 1242 -16672 b 120 1242 -1667d 5 121 1242 -16682 b 122 1242 -1668d e 128 1242 -1669b 5 130 1242 -166a0 3 131 1242 -166a3 1d 142 1242 -166c0 6 143 1242 -166c6 40 146 1242 -16706 3 147 1242 -16709 6 148 1242 -1670f d 150 1242 -1671c 1a 160 1242 -16736 4d 164 1242 -16783 4 165 1242 -16787 5 170 1242 -1678c b 171 1242 -16797 3 174 1242 -1679a 23 178 1242 -167bd 12 186 1242 -167cf f 189 1242 -167de 4 187 1242 -167e2 7 191 1242 -167e9 8 194 1242 -167f1 4 196 1242 -167f5 12 200 1242 -FUNC 16807 3e 1c __crtGetStringTypeW -16807 6 211 1242 -1680d b 212 1242 -16818 2b 222 1242 -16843 2 223 1242 -FUNC 16845 1a 4 strncnt -16845 0 50 2759 -16845 6 51 2759 -1684b 6 54 2759 -16851 1 55 2759 -16852 5 54 2759 -16857 7 57 2759 -1685e 1 58 2759 -FUNC 1685f 389 18 __crtCompareStringA_stat -1685f 10 96 2759 -1686f 31 280 2759 -168a0 c 107 2759 -168ac b 109 2759 -168b7 a 110 2759 -168c1 5 118 2759 -168c6 1b 119 2759 -168e1 7 122 2759 -168e8 1f 123 2759 -16907 6 120 2759 -1690d 7 121 2759 -16914 3 124 2759 -16917 2 125 2759 -16919 17 130 2759 -16930 7 189 2759 -16937 8 201 2759 -1693f 8 202 2759 -16947 d 208 2759 -16954 5 214 2759 -16959 8 215 2759 -16961 2 218 2759 -16963 6 219 2759 -16969 5 222 2759 -1696e 4 223 2759 -16972 f 231 2759 -16981 2 232 2759 -16983 5 237 2759 -16988 4 239 2759 -1698c 2 240 2759 -1698e 10 244 2759 -1699e a 246 2759 -169a8 7 244 2759 -169af 2 262 2759 -169b1 5 253 2759 -169b6 6 255 2759 -169bc 8 256 2759 -169c4 10 260 2759 -169d4 11 262 2759 -169e5 7 260 2759 -169ec 2 262 2759 -169ee 1a 280 2759 -16a08 6 281 2759 -16a0e 4d 284 2759 -16a5b 4 285 2759 -16a5f 6 286 2759 -16a65 19 295 2759 -16a7e 17 305 2759 -16a95 46 309 2759 -16adb 4 310 2759 -16adf 13 320 2759 -16af2 17 326 2759 -16b09 7 328 2759 -16b10 8 331 2759 -16b18 9 333 2759 -16b21 4 132 2759 -16b25 5 137 2759 -16b2a 8 138 2759 -16b32 5 139 2759 -16b37 8 140 2759 -16b3f e 142 2759 -16b4d 6 143 2759 -16b53 5 148 2759 -16b58 19 155 2759 -16b71 2 156 2759 -16b73 6 157 2759 -16b79 19 163 2759 -16b92 4 164 2759 -16b96 7 166 2759 -16b9d 5 167 2759 -16ba2 3 169 2759 -16ba5 3 170 2759 -16ba8 18 178 2759 -16bc0 6 179 2759 -16bc6 6 181 2759 -16bcc 8 182 2759 -16bd4 2 184 2759 -16bd6 12 337 2759 -FUNC 16be8 40 20 __crtCompareStringA -16be8 6 349 2759 -16bee b 350 2759 -16bf9 2d 361 2759 -16c26 2 362 2759 -FUNC 16c28 f8 10 _strnicoll_l -16c28 7 55 277 -16c2f b 57 277 -16c3a 9 59 277 -16c43 13 60 277 -16c56 33 63 277 -16c89 6 64 277 -16c8f 23 65 277 -16cb2 a 67 277 -16cbc 15 68 277 -16cd1 21 78 277 -16cf2 b 80 277 -16cfd 10 81 277 -16d0d 11 84 277 -16d1e 2 85 277 -FUNC 16d20 27 c _strnicoll -16d20 3 92 277 -16d23 9 93 277 -16d2c 1 101 277 -16d2d 5 95 277 -16d32 13 99 277 -16d45 2 101 277 -FUNC 16d47 4d 4 findenv -16d47 1 387 1450 -16d48 8 390 1450 -16d50 12 394 1450 -16d62 d 399 1450 -16d6f 9 390 1450 -16d78 e 407 1450 -16d86 1 408 1450 -16d87 c 400 1450 -16d93 1 408 1450 -FUNC 16d94 5d 0 copy_environ -16d94 4 428 1450 -16d98 2 429 1450 -16d9a 6 434 1450 -16da0 2 464 1450 -16da2 7 438 1450 -16da9 8 439 1450 -16db1 14 443 1450 -16dc5 8 444 1450 -16dcd 6 448 1450 -16dd3 11 458 1450 -16de4 4 448 1450 -16de8 2 461 1450 -16dea 5 463 1450 -16def 2 464 1450 -FUNC 16df1 24c 8 __crtsetenv -16df1 6 76 1450 -16df7 2c 89 1450 -16e23 2 91 1450 -16e25 1c 98 1450 -16e41 5 114 1450 -16e46 13 125 1450 -16e59 c 126 1450 -16e65 4 130 1450 -16e69 d 153 1450 -16e76 9 155 1450 -16e7f b 100 1450 -16e8a 6 101 1450 -16e90 2 356 1450 -16e92 3 164 1450 -16e95 6 165 1450 -16e9b f 171 1450 -16eaa 2 172 1450 -16eac 2 173 1450 -16eae 8 176 1450 -16eb6 f 178 1450 -16ec5 2 179 1450 -16ec7 2 180 1450 -16ec9 6 196 1450 -16ecf 5 197 1450 -16ed4 2 200 1450 -16ed6 10 207 1450 -16ee6 9 210 1450 -16eef a 216 1450 -16ef9 6 218 1450 -16eff 5 235 1450 -16f04 5 238 1450 -16f09 5 241 1450 -16f0e c 222 1450 -16f1a 4 221 1450 -16f1e 1d 230 1450 -16f3b 2 233 1450 -16f3d 9 245 1450 -16f46 4 250 1450 -16f4a 2 251 1450 -16f4c 2f 255 1450 -16f7b 8 258 1450 -16f83 3 259 1450 -16f86 5 262 1450 -16f8b 5 264 1450 -16f90 21 287 1450 -16fb1 25 289 1450 -16fd6 21 338 1450 -16ff7 4 339 1450 -16ffb b 343 1450 -17006 7 346 1450 -1700d 5 349 1450 -17012 8 351 1450 -1701a 6 352 1450 -17020 8 355 1450 -17028 8 271 1450 -17030 6 274 1450 -17036 7 276 1450 -FUNC 1703d 50 4 _strdup -1703d 1 66 568 -1703e b 70 568 -17049 6 71 568 -1704f 9 73 568 -17058 e 77 568 -17066 1c 80 568 -17082 4 81 568 -17086 6 84 568 -1708c 1 85 568 -FUNC 1708d ba c _mbschr_l -1708d 7 53 2982 -17094 b 55 2982 -1709f 32 58 2982 -170d1 8 60 2982 -170d9 d 61 2982 -170e6 a 65 2982 -170f0 7 67 2982 -170f7 10 69 2982 -17107 3 70 2982 -1710a 8 72 2982 -17112 d 63 2982 -1711f 8 76 2982 -17127 e 77 2982 -17135 10 79 2982 -17145 2 80 2982 -FUNC 17147 13 8 _mbschr -17147 0 86 2982 -17147 12 87 2982 -17159 1 88 2982 -FUNC 17170 be 8 strchr -17170 0 60 595 -17170 2 68 595 -17172 4 69 595 -17176 1 73 595 -17177 2 74 595 -17179 3 75 595 -1717c 4 76 595 -17180 6 77 595 -17186 2 78 595 -17188 2 81 595 -1718a 3 82 595 -1718d 2 83 595 -1718f 2 84 595 -17191 2 85 595 -17193 2 86 595 -17195 6 87 595 -1719b 2 88 595 -1719d 2 91 595 -1719f 1 92 595 -171a0 2 93 595 -171a2 3 94 595 -171a5 1 95 595 -171a6 2 96 595 -171a8 2 101 595 -171aa 5 102 595 -171af 2 104 595 -171b1 2 105 595 -171b3 2 107 595 -171b5 2 108 595 -171b7 2 110 595 -171b9 3 111 595 -171bc 3 113 595 -171bf 2 114 595 -171c1 2 116 595 -171c3 3 117 595 -171c6 6 119 595 -171cc 2 120 595 -171ce 5 124 595 -171d3 2 125 595 -171d5 5 127 595 -171da 2 128 595 -171dc 6 130 595 -171e2 2 131 595 -171e4 1 134 595 -171e5 1 135 595 -171e6 1 137 595 -171e7 2 138 595 -171e9 1 139 595 -171ea 3 142 595 -171ed 2 143 595 -171ef 2 144 595 -171f1 2 145 595 -171f3 2 146 595 -171f5 2 147 595 -171f7 2 148 595 -171f9 2 149 595 -171fb 2 150 595 -171fd 3 151 595 -17200 2 152 595 -17202 2 153 595 -17204 2 154 595 -17206 2 155 595 -17208 2 156 595 -1720a 2 157 595 -1720c 2 158 595 -1720e 2 159 595 -17210 2 160 595 -17212 1 163 595 -17213 1 164 595 -17214 3 165 595 -17217 1 166 595 -17218 1 167 595 -17219 3 170 595 -1721c 1 171 595 -1721d 1 172 595 -1721e 1 173 595 -1721f 1 174 595 -17220 3 177 595 -17223 1 178 595 -17224 1 179 595 -17225 1 180 595 -17226 1 181 595 -17227 3 184 595 -1722a 1 185 595 -1722b 1 186 595 -1722c 1 187 595 -1722d 1 188 595 -PUBLIC 17176 0 __from_strstr_to_strchr -STACK WIN 4 1060 54 6 0 8 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 10c0 a 3 0 0 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 10f0 21 7 0 0 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1120 14 7 0 0 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1140 16 7 0 4 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1160 1e 7 0 0 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1190 10 7 0 0 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 11b0 7 3 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 11c0 2c 7 0 4 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 11f7 f 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1206 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1214 1c 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1215 18 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1230 f 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 123f 8 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1247 1b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1262 1c 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 127e 1f 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 129d 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 12a1 b 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 12ac 5 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 12b1 5 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 12b6 a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 12c0 a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 12ca a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 12d4 a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 12de a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 12e8 24 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 130c 41 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 134d 1b6 c 0 0 c 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 14c5 14 0 0 0 c 2c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 1503 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 150d 22 3 0 18 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 152f 70 c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1596 8 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 159f f5 c 0 8 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1688 b 0 0 8 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 1694 70 c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 16fb 8 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 1704 31 3 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1735 eb c 0 8 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1814 b 0 0 8 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 1820 53 c 0 4 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 186a 8 0 0 4 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 1908 8e c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 195e 8 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 1996 3d 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19d3 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 19e1 24 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a05 26 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a2b 15 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a40 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a49 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a52 18 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a53 16 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a6a 20 1 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a6b 1e 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a8a 37 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1a8f 31 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1ac1 3c 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1ac6 36 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1afd 3c 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1b02 36 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1b39 3c 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1b3e 36 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1b75 3c 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1b7a 36 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1bb1 37 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1bb6 31 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1be8 37 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1bed 31 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1c1f 92 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1c5d 34 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1c5e 32 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1cb1 e2 c 0 c c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1d7b 11 0 0 c c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 1d93 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1da4 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1db5 f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1dc4 f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1dd3 4c 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1dd4 4a 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1e1f 1a0 8 0 4 0 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1e21 19c 6 0 4 4 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 1e26 196 1 0 4 8 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 1e27 194 0 0 4 c 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 1e44 176 0 0 4 10 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 20 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 1fbf 20 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1fdf 39 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2018 1 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2019 32 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2024 1c 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 204b 15e 6 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 2051 156 0 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 2069 13d 0 0 8 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 206f 136 0 0 8 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 21a9 1b 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 21c4 db b 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 21c5 c3 a 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 21ce b9 1 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 21cf b7 0 0 0 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 221e 67 0 0 0 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 16 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 229f a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 22a9 198 e 0 c 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 22b1 187 6 0 c 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 22b7 180 0 0 c 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 2441 b9 11 0 0 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 2448 b0 a 0 0 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 2451 a6 1 0 0 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 2452 a4 0 0 0 c c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 24fa 135 b 0 0 0 8 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2502 12a 3 0 0 4 8 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 12 - ^ = -STACK WIN 4 2503 128 2 0 0 8 8 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 16 - ^ = $ebx $T0 12 - ^ = -STACK WIN 4 2504 126 1 0 0 c 8 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 16 - ^ = $ebx $T0 12 - ^ = -STACK WIN 4 2505 124 0 0 0 10 8 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 16 - ^ = $ebx $T0 12 - ^ = -STACK WIN 4 262f 240 c 0 0 c 64 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 2858 4 0 0 0 c 64 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 286f 4c 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2870 4a 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2871 48 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 28bb 24 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 28bc 22 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 28bd 20 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 28df 24 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 28e0 22 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 28e1 20 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2903 6c 7 0 0 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 2909 64 1 0 0 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 290a 62 0 0 0 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 292a 41 0 0 0 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 296f 6e 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2970 6c 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 29dd 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 29e6 6e 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 29e7 6c 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2a54 9 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2a5d 15 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2a72 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2a78 32 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2a79 30 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2aaa 19 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2ac3 3d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2b00 bf c 0 8 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 2bb6 8 0 0 8 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 2bbf 77 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2bc0 75 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2bc1 71 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2c36 18 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2c37 16 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2c4e 121 c 0 4 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 2d57 b 0 0 4 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 2d63 b 0 0 4 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 2d6f 69 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2d79 4b 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2d82 25 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2dd8 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2dde 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2de4 184 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2de5 182 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2e00 166 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 2f68 5b 6 0 0 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 2f6e 43 0 0 0 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 2fc3 5a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 301d 74 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 301e 72 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = -STACK WIN 4 302a 53 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 3031 4b 0 0 0 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 303c 30 0 0 0 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 3091 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3100 24 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3130 196 14 0 10 0 14 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3134 d3 10 0 10 4 14 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 24 - ^ = -STACK WIN 4 3139 cd b 0 10 8 14 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 28 - ^ = $ebx $T0 24 - ^ = -STACK WIN 4 313a cb a 0 10 c 14 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 28 - ^ = $ebx $T0 24 - ^ = -STACK WIN 4 3144 c0 0 0 10 10 14 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 28 - ^ = $ebx $T0 24 - ^ = -STACK WIN 4 32c6 94 15 0 0 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 32da 7e 1 0 0 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 32db 7c 0 0 0 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 32f7 5f 0 0 0 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 335a a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3364 fc 1c 0 14 4 328 0 1 $T0 $ebp 680 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 3460 22 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3461 20 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3482 d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 348f 9 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 3498 24 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 34bc 10 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 34cc 9 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 34d5 49 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 34d6 3b 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 34d7 39 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 351e 55 8 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 351f 53 7 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 3526 4b 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 352c 2a 0 0 0 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 3573 15 3 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 3588 18 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 35a0 c3 c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 365a 8 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 3663 31 7 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 366a 28 0 0 4 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 3694 65 b 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3699 5f 6 0 c 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 369e 59 1 0 c 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 369f 57 0 0 c c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 378b 6 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3791 1b 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 37ac 26 3 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 37ad 24 2 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 37d2 63 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3835 474 a 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 383c 42e 3 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 383d 42c 2 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 383e 42a 1 0 0 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 383f 428 0 0 0 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 3ca9 b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3cb4 d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3cc1 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3ccf e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3cdd e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3ceb e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3cf9 12 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3d0b e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3d19 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3d27 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3d35 b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3d40 b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3d4b b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3d56 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3d64 b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3d6f e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3d7d 19 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3d96 84 13 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3d97 80 12 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3d98 7e 11 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3dbe 57 0 0 8 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 12 - ^ = -STACK WIN 4 3e1a d 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3e27 12 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3e39 9c 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3e4c 86 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3ed5 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3edf 5 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3ee4 7 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3eeb a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3ef5 8 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3efd a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3f07 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3f11 8 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3f19 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3f23 8 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3f2b a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3f35 8 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3f3d a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3f47 8 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3f4f 7b 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3f52 75 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3fca 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3fd3 25 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 3ff8 d 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4005 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4009 29 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 401b f 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4032 16 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4048 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 404c 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4050 1b 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 406b 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 406f 2f 6 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 409e 25 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 40c3 4 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 40c7 d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 40d4 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 40e2 20 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4102 25 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4127 33 6 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 415a 34 6 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 418e 13 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 41a1 56 8 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 41a7 4d 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 41f7 61 b 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 41f8 5d a 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 41f9 59 9 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4258 17 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 426f 15 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4284 14 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4298 e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 42a6 14 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 42ba 25 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 42bb 23 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 42c7 14 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 42df 38 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 42e0 36 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 42e1 32 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4317 91 7 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 431b 89 3 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 431c 87 2 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4351 40 0 0 8 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 43a8 35 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 43ab 2f 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 43dd 81 b 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 43de 7d a 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 43df 79 9 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 445e 1e 3 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 445f 1c 2 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 447c 47 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 447d 43 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 44c3 47 7 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 44c4 45 6 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 44c5 43 5 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 44c6 41 4 0 0 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 450a 65 11 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 450b 61 10 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 4510 5b b 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 4511 57 a 0 8 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 456f 12 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4581 31 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 45b2 f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 45c1 f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 45d0 1d 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 45ed 33 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4620 73 7 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4624 6b 3 0 14 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4625 5b 2 0 14 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4693 2f 3 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 46c2 f 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 46d1 79 4 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 46d2 75 3 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 46d3 71 2 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 474a 68 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 474b 64 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 47b2 a6 3 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 47b3 a2 2 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 47d3 81 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 47e5 6e 0 0 8 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 4858 26 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4859 22 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 487e 31 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4883 29 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 48af d0 7 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 48b3 b3 3 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 48b4 b1 2 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 48c3 9f 0 0 8 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 497f 69 13 0 8 0 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4990 4f 2 0 8 4 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 4991 4b 1 0 8 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 4992 49 0 0 8 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 49e8 96 22 0 8 0 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 49fc 79 e 0 8 4 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4a0a 66 0 0 8 8 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4a2f 29 0 0 8 c 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 52 - ^ = -STACK WIN 4 4a7e 2e 1 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4a7f 2a 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4aac 62 8 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4aad 5e 7 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4aae 5a 6 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4b0e 8b a 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4b0f 87 9 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4b10 83 8 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4b99 1c 9 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4b9a 18 8 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4bb5 2a 7 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4bba 22 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4bdf a6 5 0 4 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4c85 37 3 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4cbc 51 1 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4cbd 4d 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4d0d 2e 1 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4d0e 2a 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4d3b 6a a 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4d3c 66 9 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 4d43 5e 2 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 4da5 6c a 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4da6 68 9 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4da7 64 8 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4e11 e0 e 0 4 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4e18 d7 7 0 4 4 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4e1f cd 0 0 4 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4e3a b1 0 0 4 c 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 4ef1 4f 6 0 8 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4ef7 47 0 0 8 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4f40 22 5 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4f62 22 5 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4f84 22 5 0 c 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 4fa6 2e 1 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4fa7 2a 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4fd4 2e 1 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 4fd5 2a 0 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5002 141 7 0 8 0 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5009 138 0 0 8 4 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 508a b3 0 0 8 8 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 508b b1 0 0 8 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 5143 d4 6 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5217 c4 e 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 52db 7e d 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5359 125 11 0 10 0 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 536a 112 0 0 10 4 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 547e 15f f 0 8 0 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 548d 4a 0 0 8 4 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 54e5 b3 0 0 8 8 28 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 55dd 31 6 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 560e 12 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5620 12 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5632 12 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5644 150 7 0 8 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 564b 147 0 0 8 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5794 a0 6 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5834 50 5 0 4 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5884 2bb 2b 0 4 0 d0 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 589f 296 10 0 4 4 d0 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 212 - ^ = -STACK WIN 4 58a8 28a 7 0 4 8 d0 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 212 - ^ = -STACK WIN 4 58af 282 0 0 4 c d0 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 212 - ^ = -STACK WIN 4 5b3f d9 b 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5bad 17 0 0 c 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5c18 14 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 5c2c 1b8 18 0 4 0 60 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5c3d 1a0 7 0 4 4 60 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5c44 18d 0 0 4 8 60 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5c65 168 0 0 4 c 60 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 108 - ^ = -STACK WIN 4 5de4 56f 22 0 c 0 a0 0 1 $T0 $ebp 108 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 5df8 97 e 0 c 4 a0 0 1 $T0 $ebp 108 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 164 - ^ = -STACK WIN 4 5e06 88 0 0 c 8 a0 0 1 $T0 $ebp 108 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 164 - ^ = -STACK WIN 4 6353 153 10 0 8 0 d0 0 1 $T0 $ebp 112 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 6377 11b 0 0 8 4 d0 0 1 $T0 $ebp 112 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 212 - ^ = -STACK WIN 4 637e 113 0 0 8 8 d0 0 1 $T0 $ebp 112 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 212 - ^ = -STACK WIN 4 6387 109 0 0 8 c d0 0 1 $T0 $ebp 112 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 212 - ^ = -STACK WIN 4 64a6 1ea 1b 0 8 0 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 64c1 1c8 0 0 8 4 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 6549 111 0 0 8 8 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 64 - ^ = -STACK WIN 4 654a 10f 0 0 8 c 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 64 - ^ = -STACK WIN 4 6690 e4 15 0 4 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 6697 db e 0 4 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 66a5 ca 0 0 4 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 6774 f 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 6783 100 19 0 4 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 678f f2 d 0 4 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 679c e4 0 0 4 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 6883 46 3 0 4 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 68c9 92 6 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 695b b42 14 0 8 0 6c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 6966 b35 9 0 8 4 6c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 696f b2b 0 0 8 8 6c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 69d8 abe 0 0 8 c 6c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 120 - ^ = -STACK WIN 4 749d 211 13 0 4 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 74a4 208 c 0 4 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 74b0 1fb 0 0 4 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 76ae 28b 1f 0 4 0 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 76ba 27a 13 0 4 4 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 156 - ^ = -STACK WIN 4 76bb 278 12 0 4 8 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 156 - ^ = -STACK WIN 4 76cd 263 0 0 4 c 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 156 - ^ = -STACK WIN 4 7939 341 d 0 8 0 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 797e 2f7 0 0 8 4 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 52 - ^ = -STACK WIN 4 79e5 28f 0 0 8 8 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 52 - ^ = -STACK WIN 4 79e6 28d 0 0 8 c 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 52 - ^ = -STACK WIN 4 7c7a 4e4 18 0 14 0 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 7c88 4d4 a 0 14 4 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 88 - ^ = -STACK WIN 4 7c89 4d2 9 0 14 8 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 88 - ^ = -STACK WIN 4 7c92 4c8 0 0 14 c 54 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 88 - ^ = -STACK WIN 4 815e 14c 6 0 0 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 82aa 116 5 0 10 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 82cb 59 0 0 10 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 83c0 1b 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 83db 1b 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 83f6 1b 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8411 a3 f 0 18 c 94 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 84ab 8 0 0 18 c 94 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 84b4 a3 f 0 1c c 94 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 854e 8 0 0 1c c 94 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 8557 387 12 0 8 0 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8567 350 2 0 8 4 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 8568 34e 1 0 8 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 8569 34c 0 0 8 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 88de 13e 7 0 8 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 88e5 135 0 0 8 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8a1c b1 6 0 8 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8acd 64 7 0 8 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8ad4 5b 0 0 8 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8b31 4f c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8b77 8 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 8b80 75 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8bc8 2c 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8bf5 c3 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8bf6 c1 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = -STACK WIN 4 8c04 9c 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 8c0b 94 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 8c0c 90 0 0 4 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 8cb8 3b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8cf3 13 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8d06 13 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8d19 1e 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8d1a 1c 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8d37 1b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8d52 2a 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8d53 28 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8d7c 1b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8d97 2a 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8d98 28 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8dc1 21 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8de2 46 b 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8ded 3a 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8e28 3c 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8e2d 36 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8e64 48 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8eac 2b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 8ed7 314 11 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8ee4 305 4 0 8 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8ee8 300 0 0 8 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 8f15 2d2 0 0 8 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 91eb b0 d 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 91f1 a9 7 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 91f8 a1 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 929b 106 11 0 4 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 92a7 f8 5 0 4 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 92a8 f6 4 0 4 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 92ac f1 0 0 4 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 93a1 2df 12 0 c 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 93ae 2d0 5 0 c 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 93af 2ce 4 0 c 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 93b3 2c9 0 0 c c c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 9680 cd 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 974d 2e2 f 0 0 0 138 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 975c 294 0 0 0 4 138 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 316 - ^ = -STACK WIN 4 9771 27e 0 0 0 8 138 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 316 - ^ = -STACK WIN 4 9774 27a 0 0 0 c 138 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 316 - ^ = -STACK WIN 4 9a2f a8 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9a30 a6 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9a78 5d 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9ad7 2e3 2a 0 4 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 9afb 2bd 6 0 4 4 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 9b00 2b7 1 0 4 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 9b01 2b5 0 0 4 c 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 9dba 39 c 0 0 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 9dda 4 0 0 0 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 9df3 13 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9e06 37 c 0 0 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 9e2a 4 0 0 0 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 9e3d 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9e4e b9 5 0 4 0 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9e50 b5 3 0 4 4 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 9e51 b3 2 0 4 8 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 12 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 9e52 b1 1 0 4 c 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 12 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 9e53 af 0 0 4 10 4 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 12 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 9f07 2f 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9f08 2d 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9f36 3c c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 9f6c 5 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 9f72 12 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9f84 1f 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9f85 1d 1 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9f86 1b 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9fb0 29 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9fe0 42 18 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 9fee 33 a 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 9fef 31 9 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 9ff8 27 0 0 8 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 a030 bb 33 0 4 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 a04a a1 19 0 4 10 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 a0b9 14 0 0 4 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 a0eb 19 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 a104 9b c 0 4 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 a17d 9 0 0 4 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 a19f 34 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 a1aa 1d 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 a1d3 d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 a1e0 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 a1e9 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 a1f2 23d c 0 8 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 a3e7 b 0 0 8 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 a42f 1b0 c 0 4 c 30 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 a59d 14 0 0 4 c 30 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 a5df a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 a5e9 104 3 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 a5ea 102 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = -STACK WIN 4 a5eb 100 1 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = -STACK WIN 4 a5ec fe 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = -STACK WIN 4 a625 c4 0 0 4 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 16 - ^ = -STACK WIN 4 a6ed 15a 24 0 14 0 94 0 1 $T0 $ebp 100 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 a706 bc b 0 14 4 94 0 1 $T0 $ebp 100 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 152 - ^ = -STACK WIN 4 a707 b8 a 0 14 8 94 0 1 $T0 $ebp 100 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 152 - ^ = -STACK WIN 4 a711 ad 0 0 14 c 94 0 1 $T0 $ebp 100 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 152 - ^ = -STACK WIN 4 a847 a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 a851 a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 a85b 10 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 a86b c5 c 0 8 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 a8f1 17 0 0 8 c 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 a930 a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 a93a 31 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 a93b 2f 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 a96b 9 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 a974 d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 a981 22 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 a9a3 1bd 9 0 c 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 a9aa 1b4 2 0 c 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 a9ab 1b2 1 0 c 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 a9ac 1b0 0 0 c c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 ab60 71 b 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ab65 6b 6 0 c 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 ab6a 65 1 0 c 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 ab6b 63 0 0 c c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 abd1 b3 e 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 abd5 1a a 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 abd6 2e 9 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 abdf e 0 0 10 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 ac84 46 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ac89 40 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 acca a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 acd4 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 acda 21 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 acdb 1f 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 acfb 10 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ad0b 40 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ad0c 3e 1 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ad0d 3c 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ad4b 48 2 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ad4c 46 1 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ad4d 44 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ad93 4b 2 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ad94 49 1 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ad95 47 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 adde 50 2 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 addf 4e 1 0 c 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ade0 4c 0 0 c 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ae2e 8 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ae36 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ae40 a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ae4a e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ae58 3 2 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ae5b 2f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ae8a 55 b 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ae8b 53 a 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 ae8c 51 9 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 ae8d 4f 8 0 0 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 ae8e 4d 7 0 0 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 aedf 18a 1d 0 0 0 51c 0 1 $T0 $ebp 1180 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 aefb 161 1 0 0 4 51c 0 1 $T0 $ebp 1180 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1312 - ^ = -STACK WIN 4 aefc 15d 0 0 0 8 51c 0 1 $T0 $ebp 1180 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 1312 - ^ = -STACK WIN 4 b069 a4 c 0 0 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 b101 b 0 0 0 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 b10d 82 9 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b114 78 2 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b18f 7a 7 0 0 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 b196 71 0 0 0 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 b209 1d9 19 0 8 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 b21a 1c1 8 0 8 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 b21e 1ba 4 0 8 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 b222 1b5 0 0 8 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 b3e2 3c 6 0 0 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 b41e 19a c 0 4 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 b57f 8 0 0 4 c 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 b5b8 1e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b5d6 51 6 0 10 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 b627 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b63c 13 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b64f 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b664 13 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b677 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b68c 13 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b69f 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b6b7 16 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b6cd 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b6e5 16 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b6fb 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b713 16 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b729 18 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b741 16 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b757 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b76c 13 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b77f 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b794 13 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b7a7 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b7bc 13 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 b7cf 53 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 b822 e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 bb95 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 bb9b 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 bba1 140 12 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 bba2 13e 11 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 bba3 13c 10 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 bba4 13a f 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 bbb3 12a 0 0 4 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 bce1 86 8 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 bce2 84 7 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 bce3 82 6 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 bce4 80 5 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 bce9 7a 0 0 4 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 bd67 8c 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 bd68 8a 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 bd71 7e 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 bd72 7c 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 12 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 bd73 7a 0 0 4 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 12 - ^ = $ebx $T0 8 - ^ = -STACK WIN 4 bdf3 24 3 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 bdf4 22 2 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 be03 12 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 be17 3e 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 be20 31 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 be55 76 c 0 0 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 bebf 8 0 0 0 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 becb 66 2 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 becc 64 1 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 becd 62 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 bf31 53 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 bf84 96 c 0 4 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 c00e b 0 0 4 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 c01a 5 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c01f 88 c 0 0 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 c09b b 0 0 0 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 c0a7 5 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c0ac 3 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c0af 3e 2 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c0b0 3c 1 0 c 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 c0b1 3a 0 0 c 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 c0bc 2e 0 0 c c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 c0ed 129 6 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 c0f1 123 2 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 c0f2 121 1 0 8 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 c0f3 11f 0 0 8 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 c216 6b 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 c21a 4d 1 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 c21b 4b 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 c281 171 4 0 0 0 10 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 c285 169 0 0 0 4 10 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 20 - ^ = -STACK WIN 4 c2a4 149 0 0 0 8 10 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 24 - ^ = $ebx $T0 20 - ^ = -STACK WIN 4 c2a5 141 0 0 0 c 10 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 24 - ^ = $ebx $T0 20 - ^ = -STACK WIN 4 c3f2 1d4 1e 0 18 0 b4 0 1 $T0 $ebp 96 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 c40b 1b1 5 0 18 4 b4 0 1 $T0 $ebp 96 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 184 - ^ = -STACK WIN 4 c40c 1ad 4 0 18 8 b4 0 1 $T0 $ebp 96 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 184 - ^ = -STACK WIN 4 c410 1a8 0 0 18 c b4 0 1 $T0 $ebp 96 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 184 - ^ = -STACK WIN 4 c5c6 2f6 17 0 4 0 1c4 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 c5dc 2d6 1 0 4 4 1c4 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 456 - ^ = -STACK WIN 4 c5dd 2d2 0 0 4 8 1c4 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 456 - ^ = -STACK WIN 4 c8bc 1ce 18 0 4 0 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 c8d5 1ab 0 0 4 4 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 156 - ^ = -STACK WIN 4 c8d6 1a7 0 0 4 8 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 156 - ^ = -STACK WIN 4 c8dd 19f 0 0 4 c 98 0 1 $T0 $ebp 116 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 156 - ^ = -STACK WIN 4 ca8a f3 7 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ca90 2c 1 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ca91 2a 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 cb7d 5 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 cb82 170 c 0 8 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 cca8 10 0 0 8 c 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 ccb9 b 0 0 8 c 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 ccea 7 0 0 8 c 24 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 ccf2 f 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ce57 8 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ceda 2a 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 cf04 22 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 cf05 20 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 cf26 d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 d014 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 d025 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 d03a 5 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 d03f 5 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 d044 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 d055 15 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 d3d5 f3 23 0 0 4 328 0 1 $T0 $ebp 680 + = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 d4c8 1e 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 d4e6 a3 c 0 4 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 d578 10 0 0 4 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 d589 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 d592 54 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 d5e6 2b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 d611 4f 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 d660 29 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 d689 4f 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 d6d8 29 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 d701 4f 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 d750 29 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 d779 54 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 d7cd 2b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 d7f8 4f 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 d847 29 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 d870 4f 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 d8bf 29 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 d8e8 54 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 d93c 2b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 d967 54 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 d9bb 2b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 d9e6 54 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 da3a 2b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 da65 4f 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 dab4 29 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 dadd d 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 daea 8 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 daf2 1f 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 db11 1a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 db2b 1f 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 db4a 1c 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 db66 12 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 db78 1b 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 db93 13b 1d 0 18 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 dba8 126 8 0 18 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 dcce 3b 6 0 18 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 dd09 13d 1d 0 18 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 dd1e 128 8 0 18 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 de46 3b 6 0 18 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 de81 11e c 0 c c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 df78 d 0 0 c c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 df9f 3f 9 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 dfa8 34 0 0 8 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 dfc1 18 0 0 8 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 dfde 21b c 0 8 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 e11c e 0 0 8 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 e1f9 79 7 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 e200 70 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 e236 39 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 e237 37 0 0 c c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 e272 1a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e28c 3a2 1d 0 20 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 e29d 391 c 0 20 c 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 e62e 43 6 0 24 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 e671 1b8 1d 0 1c 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 e686 1a3 8 0 1c c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 e829 40 6 0 20 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 e869 87 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e8f0 e3 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e9d3 14 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e9e7 14 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 e9fb 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ea01 29 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ea2a 419 6 0 0 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 ea4c 3f5 0 0 0 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 ea4d 3ed 0 0 0 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 ee43 190 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ee44 18e 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 efd3 73 4 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 efd4 71 3 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 efd5 6f 2 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 efd6 6d 1 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 efd7 6b 0 0 4 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 f046 33 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f04d 16 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 f04e 14 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 f079 40 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f07a 3e 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f0b9 1c8 11 0 4 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 f0c0 1bf a 0 4 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 f0c4 1ba 6 0 4 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 f0ca 1b3 0 0 4 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 f281 33 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f288 16 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 f289 14 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 f2b4 89 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f2b5 87 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f33d 2c4 c 0 4 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 f344 2bb 5 0 4 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 f345 2b9 4 0 4 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 f349 2b4 0 0 4 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 f601 395 1b 0 4 0 48 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 f612 37d a 0 4 4 48 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 76 - ^ = -STACK WIN 4 f615 377 7 0 4 8 48 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 76 - ^ = -STACK WIN 4 f61c 36f 0 0 4 c 48 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 76 - ^ = -STACK WIN 4 f996 29 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f9bf 16 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f9d5 26 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 f9fb 26 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 fa21 26 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 fa47 3 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 fa4a fe 9 0 4 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 fa51 e9 2 0 4 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 fa52 e7 1 0 4 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 fa53 e5 0 0 4 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 fb48 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 fb51 fe 9 0 4 0 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 fb58 e9 2 0 4 4 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 fb59 e7 1 0 4 8 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 fb5a e5 0 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 fc4f 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 fc58 355 9 0 4 0 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 fc5f 34c 2 0 4 4 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 fc60 348 1 0 4 8 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 fc61 346 0 0 4 c 24 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 40 - ^ = -STACK WIN 4 ffad 9 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ffb6 20 6 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ffba 1b 2 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ffbf 15 0 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ffd6 36 6 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 ffdc 2f 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 1000c 79 8 0 4 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 10011 72 3 0 4 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 10012 70 2 0 4 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 10085 3e6 11 0 10 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1008a 3df c 0 10 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 10091 3d7 5 0 10 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 10092 3d5 4 0 10 c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 1046b 45d 1d 0 18 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1047f 449 9 0 18 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 108c8 1af a 0 18 0 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 108d2 1a3 0 0 18 4 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 10918 15c 0 0 18 8 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 1094b 128 0 0 18 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 36 - ^ = -STACK WIN 4 10a77 1e 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 10a95 1d 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 10ab2 1e 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 10ad0 26 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 10b46 60 6 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 10b4c 56 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 10b55 45 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 10b56 43 0 0 c c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 10ba6 14 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 10bba 77 11 0 0 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 10bcb 5f 0 0 0 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 10c31 1e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 10c4f 32 1 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 10c50 30 0 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 10c81 1b 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 10c9c 96 12 0 4 0 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 10cad 7c 1 0 4 4 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 10cae 78 0 0 4 8 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 10d32 72 11 0 8 0 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 10d43 5a 0 0 8 4 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 10d7f 13 0 0 8 8 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 10da4 1d0 13 0 4 0 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 10db5 1b6 2 0 4 4 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 128 - ^ = -STACK WIN 4 10db6 1b2 1 0 4 8 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 128 - ^ = -STACK WIN 4 10db7 1b0 0 0 4 c 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 128 - ^ = -STACK WIN 4 10f74 bf 12 0 4 0 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 10f85 a5 1 0 4 4 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 10f86 a1 0 0 4 8 7c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 11033 2c 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1105f 65 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 110c4 3c 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 11100 1e3 4 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 11101 1e1 3 0 c 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 11102 1df 2 0 c 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 11103 1dd 1 0 c c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 11104 1db 0 0 c 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 112e3 12 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 112f5 18 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1130d 40 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1134d 78 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 113c5 1490 4 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 113c6 83f 3 0 0 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 113c7 83d 2 0 0 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 12855 1680 5 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 12859 15f8 1 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1285a 15f6 0 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1288b 86c 0 0 c c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 13ed5 be 9 0 c 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 13ede a9 0 0 c 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 13ef0 96 0 0 c 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 13fe0 104 9 0 0 0 328 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1421b 57 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14272 8f 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14301 22b 8 0 14 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 14308 222 1 0 14 4 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 14309 220 0 0 14 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 14367 1c1 0 0 14 c 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 32 - ^ = -STACK WIN 4 1452c 29 3 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 14555 1b 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14570 2a 3 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1459a 1b 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 145b5 294 8 0 14 0 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 145bc 28b 1 0 14 4 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 60 - ^ = -STACK WIN 4 145bd 289 0 0 14 8 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 60 - ^ = -STACK WIN 4 14619 1f9 0 0 14 c 38 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 60 - ^ = -STACK WIN 4 14849 29 3 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 14872 1b 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1488d 2a 3 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 148b7 1b 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 148d2 b6 7 0 c 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 148d9 ad 0 0 c 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 14988 2f 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 149ec 47 10 0 4 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 14a33 1b2 2a 0 18 8 34 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 14a50 195 d 0 18 c 34 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 56 - ^ = -STACK WIN 4 14be5 50 c 0 0 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 14c02 1c 0 0 0 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 14c35 60 9 0 0 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 14c3e 57 0 0 0 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 14c95 d 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14ca2 34 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14ca7 2e 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14cd6 34 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14cdb 2e 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14d0a 34 5 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14d0f 2e 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14d3e a2 c 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 14d45 99 5 0 10 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 14d4a 93 0 0 10 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 14d58 84 0 0 10 c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 14de0 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14de6 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14dec 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14df2 6 0 0 0 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14df8 c 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14e04 c 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14e10 c 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 14e1c 349 c 0 0 c 3c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 150c6 d 0 0 0 c 3c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 15165 1f5 14 0 24 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15174 1e4 5 0 24 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 15175 1e2 4 0 24 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 15176 1e0 3 0 24 c c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 1535a 1ae 5 0 0 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1535f 15f 0 0 0 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1538f 12e 0 0 0 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 15508 4f c 0 0 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1554e 8 0 0 0 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 15557 38 c 0 0 c 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15586 8 0 0 0 c 18 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 1558f 41 c 0 4 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 155c7 8 0 0 4 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 155d0 35 a 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 155d5 2f 5 0 8 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 155da 27 0 0 8 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15605 d3 7 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1560c ca 0 0 c 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 1564d 88 0 0 c 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 15695 33 0 0 c c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 156d8 50 4 0 8 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 156dc 4a 0 0 8 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15728 36 6 0 8 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1575e e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1576c 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15782 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15793 13 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 157a6 e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 157b4 13 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 157c7 e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 157d5 13 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 157e8 e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 157f6 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1580c 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1581d 13 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15830 e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1583e 13 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15851 e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1585f 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15875 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15886 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1589c 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 158ad 16 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 158c3 11 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 158d4 13 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 158e7 e 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 158f5 c 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15901 26 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15927 21 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15948 26 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1596e 21 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1598f f0 e 0 10 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15996 e7 7 0 10 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 1599c e0 1 0 10 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 1599d de 0 0 10 c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 15a7f 5c 4 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15a83 56 0 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15adb db 8 0 c 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15ae0 d2 3 0 c 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 15ae1 d0 2 0 c 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 15b0b a5 0 0 c c 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 15bb6 28 3 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15bde 25 3 0 10 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15c03 18 0 0 10 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15c1b f6 c 0 14 0 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15c22 eb 5 0 14 4 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 15c27 e5 0 0 14 8 c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 16 - ^ = -STACK WIN 4 15d11 33 3 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15d2c 16 0 0 14 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15d44 1d 4 0 14 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15d48 17 0 0 14 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15d9b 81 8 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15da3 70 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 15db2 60 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 15db3 5e 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 8 - ^ = -STACK WIN 4 15e1c 93 7 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15e20 8d 3 0 c 4 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 15e21 8b 2 0 c 8 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 15e60 4b 0 0 c c 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 4 - ^ = -STACK WIN 4 15eaf a2 6 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15eb4 9b 1 0 8 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15eb5 99 0 0 8 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15f51 83 c 0 4 c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 15fcb 8 0 0 4 c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 15fd4 d8 c 0 10 c 1c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 160a3 8 0 0 10 c 1c 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 160ac e6 c 0 c c 20 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 16189 8 0 0 c c 20 0 1 $T0 $ebp = $T2 $esp = $T1 .raSearchStart = $eip $T1 ^ = $ebp $T0 = $esp $T1 4 + = $L $T0 .cbSavedRegs - = $P $T1 4 + .cbParams + = -STACK WIN 4 16192 8 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1619a 117 8 0 8 0 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 161a1 10e 1 0 8 4 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 161a2 10c 0 0 8 8 18 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 28 - ^ = -STACK WIN 4 162b1 27 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 162d8 82 6 0 c 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1635a 6e 4 0 8 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 163c8 5 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 16431 ec 7 0 10 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 16438 e3 0 0 10 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 16498 82 0 0 10 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 1651d 17 0 0 c 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 16534 95 a 0 0 0 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 1653a 7d 4 0 0 4 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 1653b 7b 3 0 0 8 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 1653e 77 0 0 0 c 8 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 12 - ^ = -STACK WIN 4 165c9 1a 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 165e3 224 17 0 1c 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 165f8 20f 2 0 1c c 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 16807 3e 6 0 1c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 16845 1a 0 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1685f 389 16 0 18 8 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 16873 375 2 0 18 c 2c 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 48 - ^ = -STACK WIN 4 16be8 40 6 0 20 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 16c28 f8 7 0 10 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 16c2f ef 0 0 10 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 16c8f 8e 0 0 10 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 16d20 27 3 0 c 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 16d47 4d 1 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 16d48 48 0 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 16d94 5d 4 0 0 0 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 16db0 3f 0 0 0 4 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 16db1 3d 0 0 0 8 4 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 8 - ^ = -STACK WIN 4 16df1 24c f 0 8 0 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 16dfb 95 5 0 8 4 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 16e00 8f 0 0 8 8 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 16e23 6b 0 0 8 c 14 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 24 - ^ = -STACK WIN 4 1703d 50 6 0 4 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 4 1703e 4e 5 0 4 4 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = -STACK WIN 4 17043 48 0 0 4 8 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 1704e 3c 0 0 4 c 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 1704f 3a 0 0 4 10 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 8 - ^ = $ebx $T0 4 - ^ = -STACK WIN 4 1708d ba 7 0 c 0 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = -STACK WIN 4 17094 b1 0 0 c 4 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 170d1 73 0 0 c 8 10 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = $L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + = $ebx $T0 20 - ^ = -STACK WIN 4 17147 13 0 0 8 0 0 0 1 $T2 $esp .cbLocals + .cbSavedRegs + = $T0 .raSearchStart = $eip $T0 ^ = $esp $T0 4 + = -STACK WIN 0 14c5 14 0 0 0 0 0 0 0 0 -STACK WIN 0 1596 9 0 0 0 0 0 0 0 0 -STACK WIN 0 1688 c 0 0 0 0 0 0 0 0 -STACK WIN 0 16fb 9 0 0 0 0 0 0 0 0 -STACK WIN 0 1814 c 0 0 0 0 0 0 0 0 -STACK WIN 0 186a 9 0 0 0 0 0 0 0 0 -STACK WIN 0 1880 88 0 0 8 0 0 0 0 0 -STACK WIN 0 195e 9 0 0 0 0 0 0 0 0 -STACK WIN 0 1d7b 12 0 0 0 0 0 0 0 0 -STACK WIN 0 2858 4 0 0 0 0 0 0 0 0 -STACK WIN 0 2bb6 9 0 0 0 0 0 0 0 0 -STACK WIN 0 2d57 c 0 0 0 0 0 0 0 0 -STACK WIN 0 2d63 c 0 0 0 0 0 0 0 0 -STACK WIN 0 365a 9 0 0 0 0 0 0 0 0 -STACK WIN 0 3700 8b 0 0 4 0 0 0 0 0 -STACK WIN 0 84ab 9 0 0 0 0 0 0 0 0 -STACK WIN 0 854e 9 0 0 0 0 0 0 0 0 -STACK WIN 0 8b77 9 0 0 0 0 0 0 0 0 -STACK WIN 0 9dda 4 0 0 0 0 0 0 0 0 -STACK WIN 0 9e2a 4 0 0 0 0 0 0 0 0 -STACK WIN 0 9f6c 6 0 0 0 0 0 0 0 0 -STACK WIN 0 a0b9 14 0 0 0 0 0 0 0 0 -STACK WIN 0 a17d a 0 0 0 0 0 0 0 0 -STACK WIN 0 a3e7 c 0 0 0 0 0 0 0 0 -STACK WIN 0 a59d 15 0 0 0 0 0 0 0 0 -STACK WIN 0 a8f1 17 0 0 0 0 0 0 0 0 -STACK WIN 0 b101 c 0 0 0 0 0 0 0 0 -STACK WIN 0 b57f 9 0 0 0 0 0 0 0 0 -STACK WIN 0 bebf 9 0 0 0 0 0 0 0 0 -STACK WIN 0 c00e c 0 0 0 0 0 0 0 0 -STACK WIN 0 c09b c 0 0 0 0 0 0 0 0 -STACK WIN 0 cca8 11 0 0 0 0 0 0 0 0 -STACK WIN 0 ccb9 c 0 0 0 0 0 0 0 0 -STACK WIN 0 ccea 8 0 0 0 0 0 0 0 0 -STACK WIN 0 cd04 90 3 0 c c 0 0 0 0 -STACK WIN 0 cd94 46 0 0 10 4 0 0 0 1 -STACK WIN 0 cdf6 17 4 0 0 10 0 0 0 1 -STACK WIN 0 ce0d 19 0 0 0 0 0 0 0 0 -STACK WIN 0 ce40 17 1 0 8 4 0 0 0 1 -STACK WIN 0 ce60 7a 0 0 c 0 0 0 0 0 -STACK WIN 0 d578 11 0 0 0 0 0 0 0 0 -STACK WIN 0 df78 e 0 0 0 0 0 0 0 0 -STACK WIN 0 e11c f 0 0 0 0 0 0 0 0 -STACK WIN 0 14149 84 3 0 8 c 0 0 0 0 -STACK WIN 0 141cd 23 0 0 0 0 0 0 0 0 -STACK WIN 0 14218 3 0 0 0 0 0 0 0 0 -STACK WIN 0 14c02 1c 0 0 0 0 0 0 0 0 -STACK WIN 0 150c6 e 0 0 0 0 0 0 0 0 -STACK WIN 0 1554e 9 0 0 0 0 0 0 0 0 -STACK WIN 0 15586 9 0 0 0 0 0 0 0 0 -STACK WIN 0 155c7 9 0 0 0 0 0 0 0 0 -STACK WIN 0 15fcb 9 0 0 0 0 0 0 0 0 -STACK WIN 0 160a3 9 0 0 0 0 0 0 0 0 -STACK WIN 0 16189 9 0 0 0 0 0 0 0 0 -STACK WIN 0 17170 be 0 0 8 0 0 0 0 0 diff --git a/toolkit/crashreporter/google-breakpad/src/tools/windows/symupload/symupload.cc b/toolkit/crashreporter/google-breakpad/src/tools/windows/symupload/symupload.cc index 430a08f3a3df..fa5294ded371 100644 --- a/toolkit/crashreporter/google-breakpad/src/tools/windows/symupload/symupload.cc +++ b/toolkit/crashreporter/google-breakpad/src/tools/windows/symupload/symupload.cc @@ -36,6 +36,7 @@ // debug_identifier: the debug file's identifier, usually consisting of // the guid and age embedded in the pdb, e.g. // "11111111BBBB3333DDDD555555555555F" +// product: the HTTP-friendly product name, e.g. "MyApp" // version: the file version of the module, e.g. "1.2.3.4" // os: the operating system that the module was built for, always // "windows" in this implementation. @@ -153,33 +154,43 @@ static bool DumpSymbolsToTempFile(const wchar_t *file, return writer.GetModuleInfo(pdb_info); } -void printUsageAndExit() { - wprintf(L"Usage: symupload [--timeout NN] \n\n"); - wprintf(L"Timeout is in milliseconds, or can be 0 to be unlimited\n\n"); - wprintf(L"Example:\n\n\tsymupload.exe --timeout 0 chrome.dll http://no.free.symbol.server.for.you\n"); +__declspec(noreturn) void printUsageAndExit() { + wprintf(L"Usage:\n\n" + L" symupload [--timeout NN] [--product product_name] ^\n" + L" ^\n" + L" [...]\n\n"); + wprintf(L" - Timeout is in milliseconds, or can be 0 to be unlimited.\n"); + wprintf(L" - product_name is an HTTP-friendly product name. It must only\n" + L" contain an ascii subset: alphanumeric and punctuation.\n" + L" This string is case-sensitive.\n\n"); + wprintf(L"Example:\n\n" + L" symupload.exe --timeout 0 --product Chrome ^\n" + L" chrome.dll http://no.free.symbol.server.for.you\n"); exit(0); } int wmain(int argc, wchar_t *argv[]) { - if ((argc != 3) && - (argc != 5)) { - printUsageAndExit(); + const wchar_t *module; + const wchar_t *product = nullptr; + int timeout = -1; + int currentarg = 1; + while (argc > currentarg + 1) { + if (!wcscmp(L"--timeout", argv[currentarg])) { + timeout = _wtoi(argv[currentarg + 1]); + currentarg += 2; + continue; + } + if (!wcscmp(L"--product", argv[currentarg])) { + product = argv[currentarg + 1]; + currentarg += 2; + continue; + } + break; } - const wchar_t *module, *url; - int timeout = -1; - if (argc == 3) { - module = argv[1]; - url = argv[2]; - } else { - // check for timeout flag - if (!wcscmp(L"--timeout", argv[1])) { - timeout = _wtoi(argv[2]); - module = argv[3]; - url = argv[4]; - } else { - printUsageAndExit(); - } - } + if (argc >= currentarg + 2) + module = argv[currentarg++]; + else + printUsageAndExit(); wstring symbol_file; PDBModuleInfo pdb_info; @@ -196,6 +207,17 @@ int wmain(int argc, wchar_t *argv[]) { parameters[L"debug_identifier"] = pdb_info.debug_identifier; parameters[L"os"] = L"windows"; // This version of symupload is Windows-only parameters[L"cpu"] = pdb_info.cpu; + + // Don't make a missing product name a hard error. Issue a warning and let + // the server decide whether to reject files without product name. + if (product) { + parameters[L"product"] = product; + } else { + fwprintf( + stderr, + L"Warning: No product name (flag --product) was specified for %s\n", + module); + } // Don't make a missing version a hard error. Issue a warning, and let the // server decide whether to reject files without versions. @@ -206,20 +228,32 @@ int wmain(int argc, wchar_t *argv[]) { fwprintf(stderr, L"Warning: Could not get file version for %s\n", module); } - bool success = HTTPUpload::SendRequest(url, parameters, - symbol_file, L"symbol_file", - timeout == -1 ? NULL : &timeout, - NULL, NULL); - _wunlink(symbol_file.c_str()); + map files; + files[L"symbol_file"] = symbol_file; - if (!success) { - fwprintf(stderr, L"Symbol file upload failed\n"); - return 1; + bool success = true; + + while (currentarg < argc) { + int response_code; + if (!HTTPUpload::SendRequest(argv[currentarg], parameters, files, + timeout == -1 ? NULL : &timeout, + nullptr, &response_code)) { + success = false; + fwprintf(stderr, + L"Symbol file upload to %s failed. Response code = %ld\n", + argv[currentarg], response_code); + } + currentarg++; } - wprintf(L"Uploaded symbols for windows-%s/%s/%s (%s %s)\n", - pdb_info.cpu.c_str(), pdb_info.debug_file.c_str(), - pdb_info.debug_identifier.c_str(), code_file.c_str(), - file_version.c_str()); - return 0; + _wunlink(symbol_file.c_str()); + + if (success) { + wprintf(L"Uploaded symbols for windows-%s/%s/%s (%s %s)\n", + pdb_info.cpu.c_str(), pdb_info.debug_file.c_str(), + pdb_info.debug_identifier.c_str(), code_file.c_str(), + file_version.c_str()); + } + + return success ? 0 : 1; } diff --git a/toolkit/crashreporter/google-breakpad/src/tools/windows/symupload/symupload.gyp b/toolkit/crashreporter/google-breakpad/src/tools/windows/symupload/symupload.gyp new file mode 100644 index 000000000000..d7e5fb7b9766 --- /dev/null +++ b/toolkit/crashreporter/google-breakpad/src/tools/windows/symupload/symupload.gyp @@ -0,0 +1,45 @@ +# Copyright 2013 Google Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +{ + 'includes': [ + '../../../build/common.gypi', + ], + 'targets': [ + { + 'target_name': 'symupload', + 'type': 'executable', + 'sources': [ + 'symupload.cc', + ], + 'dependencies': [ + '../../../common/windows/common_windows.gyp:common_windows_lib', + ], + }, + ], +} diff --git a/toolkit/crashreporter/google-breakpad/src/tools/windows/symupload/symupload.vcproj b/toolkit/crashreporter/google-breakpad/src/tools/windows/symupload/symupload.vcproj deleted file mode 100644 index 8177c8309d3d..000000000000 --- a/toolkit/crashreporter/google-breakpad/src/tools/windows/symupload/symupload.vcproj +++ /dev/null @@ -1,231 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/toolkit/crashreporter/moz.build b/toolkit/crashreporter/moz.build index 8801f54675f5..d045ac492020 100644 --- a/toolkit/crashreporter/moz.build +++ b/toolkit/crashreporter/moz.build @@ -9,7 +9,6 @@ SPHINX_TREES['crashreporter'] = 'docs' if CONFIG['OS_ARCH'] == 'WINNT': DIRS += [ 'google-breakpad/src/common', - 'google-breakpad/src/processor', 'breakpad-windows-libxul' ] @@ -23,7 +22,6 @@ elif CONFIG['OS_ARCH'] == 'Darwin': 'google-breakpad/src/client', 'google-breakpad/src/client/mac/crash_generation', 'google-breakpad/src/client/mac/handler', - 'google-breakpad/src/processor', 'google-breakpad/src/tools/mac/dump_syms', ] @@ -32,10 +30,7 @@ elif CONFIG['OS_ARCH'] == 'Linux': 'google-breakpad/src/common', 'google-breakpad/src/common/linux', 'google-breakpad/src/client', - 'google-breakpad/src/client/linux/crash_generation', - 'google-breakpad/src/client/linux/handler', - 'google-breakpad/src/client/linux/minidump_writer', - 'google-breakpad/src/processor', + 'google-breakpad/src/client/linux/', 'google-breakpad/src/tools/linux/dump_syms', ] @@ -49,7 +44,6 @@ elif CONFIG['OS_ARCH'] == 'SunOS': ] DIRS += [ - 'breakpad-logging', 'client', ] @@ -90,6 +84,14 @@ if CONFIG['OS_TARGET'] == 'Android': # NDK5 workarounds DEFINES['_STLP_CONST_CONSTRUCTOR_BUG'] = True DEFINES['_STLP_NO_MEMBER_TEMPLATES'] = True + if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk': + LOCAL_INCLUDES += [ + '/toolkit/crashreporter/gonk-include', + ] + else: + LOCAL_INCLUDES += [ + '/toolkit/crashreporter/google-breakpad/src/common/android/include', + ] if CONFIG['OS_ARCH'] == 'SunOS': # there's no define for this normally @@ -104,6 +106,10 @@ LOCAL_INCLUDES += [ 'google-breakpad/src', ] +PYTHON_UNIT_TESTS += [ + 'tools/unit-symbolstore.py', +] + include('/toolkit/crashreporter/crashreporter.mozbuild') with Files('**'): diff --git a/toolkit/crashreporter/test/moz.build b/toolkit/crashreporter/test/moz.build index c91fd862fdef..42ed89f37f14 100644 --- a/toolkit/crashreporter/test/moz.build +++ b/toolkit/crashreporter/test/moz.build @@ -9,10 +9,13 @@ XPCSHELL_TESTS_MANIFESTS += ['unit/xpcshell.ini', 'unit_ipc/xpcshell.ini'] BROWSER_CHROME_MANIFESTS += ['browser/browser.ini'] UNIFIED_SOURCES += [ - '../google-breakpad/src/common/logging.cc', - '../google-breakpad/src/common/pathname_stripper.cc', '../google-breakpad/src/processor/basic_code_modules.cc', + '../google-breakpad/src/processor/dump_context.cc', + '../google-breakpad/src/processor/dump_object.cc', + '../google-breakpad/src/processor/logging.cc', '../google-breakpad/src/processor/minidump.cc', + '../google-breakpad/src/processor/pathname_stripper.cc', + '../google-breakpad/src/processor/proc_maps_linux.cc', 'dumputils.cpp', 'nsTestCrasher.cpp', ] @@ -25,10 +28,6 @@ DEFINES['SHARED_LIBRARY'] = '%s%s%s' % ( CONFIG['DLL_SUFFIX'] ) -LOCAL_INCLUDES += [ - '../google-breakpad/src/', -] - include('/toolkit/crashreporter/crashreporter.mozbuild') NO_PGO = True diff --git a/toolkit/crashreporter/tools/symbolstore.py b/toolkit/crashreporter/tools/symbolstore.py index 6b7943121565..a520f15cee1e 100755 --- a/toolkit/crashreporter/tools/symbolstore.py +++ b/toolkit/crashreporter/tools/symbolstore.py @@ -619,6 +619,13 @@ class Dumper: self.files_record[files] = 0 # record that we submitted jobs for this tuple of files self.SubmitJob(files[-1], 'ProcessFilesWork', args=(files, arch_num, arch, vcs_root, after, after_arg), callback=self.ProcessFilesFinished) + def dump_syms_cmdline(self, file, arch, files): + ''' + Get the commandline used to invoke dump_syms. + ''' + # The Mac dumper overrides this. + return [self.dump_syms, file] + def ProcessFilesWork(self, files, arch_num, arch, vcs_root, after, after_arg): t_start = time.time() self.output_pid(sys.stderr, "Worker processing files: %s" % (files,)) @@ -631,7 +638,7 @@ class Dumper: for file in files: # files is a tuple of files, containing fallbacks in case the first file doesn't process successfully try: - cmd = [self.dump_syms] + arch.split() + [file] + cmd = self.dump_syms_cmdline(file, arch, files) self.output_pid(sys.stderr, ' '.join(cmd)) proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=open(os.devnull, 'wb')) @@ -908,6 +915,17 @@ class Dumper_Mac(Dumper): # kick off new jobs per-arch with our new list of files Dumper.ProcessFiles(self, result['files'], after=AfterMac, after_arg=result['files'][0]) + def dump_syms_cmdline(self, file, arch, files): + ''' + Get the commandline used to invoke dump_syms. + ''' + # dump_syms wants the path to the original binary and the .dSYM + # in order to dump all the symbols. + if len(files) == 2 and file == files[0] and file.endswith('.dSYM'): + # This is the .dSYM bundle. + return [self.dump_syms] + arch.split() + ['-g', file, files[1]] + return Dumper.dump_syms_cmdline(self, file, arch, files) + def ProcessFilesWorkMac(self, file): """dump_syms on Mac needs to be run on a dSYM bundle produced by dsymutil(1), so run dsymutil here and pass the bundle name diff --git a/toolkit/moz.build b/toolkit/moz.build index ab6d589211a9..a4c6d64a8984 100644 --- a/toolkit/moz.build +++ b/toolkit/moz.build @@ -51,18 +51,6 @@ elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'android': if CONFIG['MOZ_CRASHREPORTER']: DIRS += ['crashreporter'] -elif CONFIG['MOZ_ENABLE_PROFILER_SPS']: - # Profiler requires some crashreporter code, - # so build it even if crashreporter is disabled. - DIRS += [ - 'crashreporter/breakpad-logging', - 'crashreporter/google-breakpad/src/common', - 'crashreporter/google-breakpad/src/processor', - ] - if CONFIG['OS_ARCH'] == 'Darwin': - DIRS += ['crashreporter/google-breakpad/src/common/mac'] - elif CONFIG['OS_ARCH'] == 'Linux': - DIRS += ['crashreporter/google-breakpad/src/common/linux'] with Files('mozapps/installer/windows/*'): BUG_COMPONENT = ('Toolkit', 'NSIS Installer') diff --git a/tools/profiler/core/shim_mac_dump_syms.h b/tools/profiler/core/shim_mac_dump_syms.h deleted file mode 100644 index 209a49680a61..000000000000 --- a/tools/profiler/core/shim_mac_dump_syms.h +++ /dev/null @@ -1,12 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -// Read debug info from |obj_file| and park it in a Module, returned -// via |module|. Caller owns the Module and is responsible for -// deallocating it. Note that |debug_dirs| is ignored. -bool ReadSymbolData_DARWIN(const string& obj_file, - const std::vector &debug_dirs, - SymbolData symbol_data, - google_breakpad::Module** module); diff --git a/tools/profiler/core/shim_mac_dump_syms.mm b/tools/profiler/core/shim_mac_dump_syms.mm deleted file mode 100644 index 9db56bbedc95..000000000000 --- a/tools/profiler/core/shim_mac_dump_syms.mm +++ /dev/null @@ -1,20 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "common/mac/dump_syms.h" -#include "shim_mac_dump_syms.h" - -bool ReadSymbolData_DARWIN(const string& obj_file, - const std::vector &debug_dirs, - SymbolData symbol_data, - google_breakpad::Module** module) -{ - google_breakpad::DumpSymbols ds(symbol_data); - - if (!ds.Read(obj_file)) - return false; - - return ds.ReadSymbolData(module); -} diff --git a/tools/profiler/gecko/local_debug_info_symbolizer.cc b/tools/profiler/gecko/local_debug_info_symbolizer.cc deleted file mode 100644 index 2232130bdc2e..000000000000 --- a/tools/profiler/gecko/local_debug_info_symbolizer.cc +++ /dev/null @@ -1,307 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "PlatformMacros.h" -#include "nsAutoPtr.h" - -#if !defined(SPS_OS_windows) -# include "common/module.h" -# include "processor/cfi_frame_info.h" -#endif -#include "google_breakpad/processor/code_module.h" -#include "google_breakpad/processor/code_modules.h" -#include "google_breakpad/processor/stack_frame.h" -#include "common/logging.h" - -#if defined(SPS_PLAT_amd64_linux) || defined(SPS_PLAT_arm_android) \ - || defined(SPS_PLAT_x86_linux) || defined(SPS_PLAT_x86_android) -# include "common/linux/dump_symbols.h" -#elif defined(SPS_PLAT_amd64_darwin) || defined(SPS_PLAT_x86_darwin) -# include "shim_mac_dump_syms.h" -#elif defined(SPS_OS_windows) - /* This is all stubbed out anyway, so don't do anything. */ -#else -# error "Unknown platform" -#endif - -#if defined(SPS_OS_android) && !defined(MOZ_WIDGET_GONK) -# include "mozilla/Types.h" -# include "ElfLoader.h" -# include -# include -# include "nsString.h" -# include "nsDirectoryServiceUtils.h" -# include "nsDirectoryServiceDefs.h" -# include -# include -#endif - -#include "local_debug_info_symbolizer.h" - -namespace google_breakpad { - -LocalDebugInfoSymbolizer::~LocalDebugInfoSymbolizer() { -# if !defined(SPS_OS_windows) - for (SymbolMap::iterator it = symbols_.begin(); - it != symbols_.end(); - ++it) { - delete it->second; - } -# endif -} - -#if defined(SPS_OS_android) && !defined(MOZ_WIDGET_GONK) - -// Find out where the installation's lib directory is, since we'll -// have to look in there to get hold of libmozglue.so. Returned -// C string is heap allocated and the caller must deallocate it. -static char* get_installation_lib_dir ( void ) -{ - nsCOMPtr - directoryService(do_GetService(NS_DIRECTORY_SERVICE_CONTRACTID)); - if (!directoryService) return NULL; - nsCOMPtr greDir; - nsresult rv = directoryService->Get(NS_GRE_DIR, NS_GET_IID(nsIFile), - getter_AddRefs(greDir)); - if (NS_FAILED(rv)) return NULL; - nsCString path; - rv = greDir->GetNativePath(path); - if (NS_FAILED(rv)) return NULL; - return strdup(path.get()); -} - -// Read symbol data from a file on Android. OBJ_FILENAME has -// three possible cases: -// -// (1) /foo/bar/xyzzy/blah.apk!/libwurble.so -// We hand it as-is to faulty.lib and let it fish the relevant -// bits out of the APK. -// -// (2) libmozglue.so -// This is part of the Fennec installation, but is not in the -// APK. Instead we have to figure out the installation path -// and look for it there. Because of faulty.lib limitations, -// we have to use regular open/mmap instead of faulty.lib. -// -// (3) libanythingelse.so -// faulty.lib assumes this is a system library, and prepends -// "/system/lib/" to the path. So as in (1), we can give it -// as-is to faulty.lib. -// -// Hence only (2) requires special-casing here. -// -static bool ReadSymbolData_ANDROID(const string& obj_filename, - const std::vector& debug_dirs, - SymbolData symbol_data, - Module** module) -{ - string obj_file_to_use = obj_filename; - - // Do (2) in the comment above. - if (obj_file_to_use == "libmozglue.so") { - char* libdir = get_installation_lib_dir(); - if (libdir) { - obj_file_to_use = string(libdir) + "/lib/" + obj_file_to_use; - free(libdir); - } - - // Use regular open/mmap here because of faulty.lib limitations - int fd = open(obj_file_to_use.c_str(), O_RDONLY); - if (fd == -1) { - BPLOG(INFO) << "ReadSymbolData_APK: Failed to open \'" - << obj_file_to_use << "\'"; - return false; - } - - struct stat st; - if (fstat(fd, &st) != 0) { - close(fd); - BPLOG(INFO) << "ReadSymbolData_APK: Failed to fstat \'" - << obj_file_to_use << "\'"; - return false; - } - - void* image = mmap(nullptr, st.st_size, PROT_READ, MAP_SHARED, fd, 0); - if (image == MAP_FAILED) { - close(fd); - BPLOG(INFO) << "ReadSymbolData_APK: Failed to mmap \'" - << obj_file_to_use << "\'"; - return false; - } - - bool ok = ReadSymbolDataInternal((const uint8_t*)image, - obj_file_to_use, debug_dirs, - symbol_data, module); - munmap(image, st.st_size); - close(fd); - return ok; - } - - // Regardless of whether the file is inside an APK or not, we ask - // faulty.lib to map it, then call ReadSymbolDataInternal, then - // unmap and dlclose it. - void* hdl = dlopen(obj_file_to_use.c_str(), RTLD_GLOBAL | RTLD_LAZY); - if (!hdl) { - BPLOG(INFO) << "ReadSymbolData_APK: Failed to get handle for ELF file \'" - << obj_file_to_use << "\'"; - return false; - } - - size_t sz = __dl_get_mappable_length(hdl); - if (sz == 0) { - dlclose(hdl); - BPLOG(INFO) << "ReadSymbolData_APK: Unable to get size for ELF file \'" - << obj_file_to_use << "\'"; - return false; - } - - void* image = __dl_mmap(hdl, NULL, sz, 0); - if (image == MAP_FAILED) { - dlclose(hdl); - BPLOG(INFO) << "ReadSymbolData_APK: Failed to mmap ELF file \'" - << obj_file_to_use << "\'"; - return false; - } - - bool ok = ReadSymbolDataInternal((const uint8_t*)image, - obj_file_to_use, debug_dirs, - symbol_data, module); - __dl_munmap(hdl, image, sz); - dlclose(hdl); - - return ok; -} -#endif /* defined(SPS_OS_android) && !defined(MOZ_WIDGET_GONK) */ - - -StackFrameSymbolizer::SymbolizerResult -LocalDebugInfoSymbolizer::FillSourceLineInfo(const CodeModules* modules, - const SystemInfo* system_info, - StackFrame* frame) { - if (!modules) { - return kError; - } - const CodeModule* module = modules->GetModuleForAddress(frame->instruction); - if (!module) { - return kError; - } - frame->module = module; - -# if !defined(SPS_OS_windows) - Module* debug_info_module = NULL; - SymbolMap::const_iterator it = symbols_.find(module->code_file()); - if (it == symbols_.end()) { - if (no_symbol_modules_.find(module->code_file()) != - no_symbol_modules_.end()) { - return kNoError; - } - - bool ok = false; -# if defined(SPS_OS_android) && !defined(MOZ_WIDGET_GONK) - ok = ReadSymbolData_ANDROID(module->code_file(), debug_dirs_, - ONLY_CFI, &debug_info_module); -# elif defined(SPS_PLAT_amd64_darwin) || defined(SPS_PLAT_x86_darwin) - ok = ReadSymbolData_DARWIN(module->code_file(), debug_dirs_, - ONLY_CFI, &debug_info_module); -# else - ok = ReadSymbolData(module->code_file(), debug_dirs_, - ONLY_CFI, &debug_info_module); -# endif - - if (!ok) { - if (debug_info_module) - delete debug_info_module; - no_symbol_modules_.insert(module->code_file()); - return kNoError; - } - - symbols_[module->code_file()] = debug_info_module; - } else { - debug_info_module = it->second; - } - - uint64_t address = frame->instruction - frame->module->base_address(); - Module::Function* function = - debug_info_module->FindFunctionByAddress(address); - if (function) { - frame->function_name = function->name; - //TODO: line info: function->lines - } else { - Module::Extern* ex = debug_info_module->FindExternByAddress(address); - if (ex) { - frame->function_name = ex->name; - } - } -# endif /* !defined(SPS_OS_windows) */ - return kNoError; -} - - -WindowsFrameInfo* LocalDebugInfoSymbolizer::FindWindowsFrameInfo( - const StackFrame* frame) { - // Not currently implemented, would require PDBSourceLineWriter to - // implement an API to return symbol data. - return NULL; -} - -#if !defined(SPS_OS_windows) -// Taken wholesale from source_line_resolver_base.cc -bool ParseCFIRuleSet(const string& rule_set, CFIFrameInfo* frame_info) { - CFIFrameInfoParseHandler handler(frame_info); - CFIRuleParser parser(&handler); - return parser.Parse(rule_set); -} - -static void ConvertCFI(const UniqueString* name, const Module::Expr& rule, - CFIFrameInfo* frame_info) { - if (name == ustr__ZDcfa()) frame_info->SetCFARule(rule); - else if (name == ustr__ZDra()) frame_info->SetRARule(rule); - else frame_info->SetRegisterRule(name, rule); -} - - -static void ConvertCFI(const Module::RuleMap& rule_map, - CFIFrameInfo* frame_info) { - for (Module::RuleMap::const_iterator it = rule_map.begin(); - it != rule_map.end(); ++it) { - ConvertCFI(it->first, it->second, frame_info); - } -} -#endif - -CFIFrameInfo* LocalDebugInfoSymbolizer::FindCFIFrameInfo( - const StackFrame* frame) { -#if defined(SPS_OS_windows) - return NULL; -#else - if (!frame || !frame->module) return NULL; - - SymbolMap::const_iterator it = symbols_.find(frame->module->code_file()); - if (it == symbols_.end()) return NULL; - - Module* module = it->second; - uint64_t address = frame->instruction - frame->module->base_address(); - Module::StackFrameEntry* entry = - module->FindStackFrameEntryByAddress(address); - if (!entry) - return NULL; - - //TODO: can we cache this data per-address? does that make sense? - // TODO: Maybe this should use google_breakpad::scoped_ptr, since we're in - // "namespace google_breakpad". Not using scoped_ptr currently, because its - // header triggers build warnings -- see bug 855010. - nsAutoPtr rules(new CFIFrameInfo()); - ConvertCFI(entry->initial_rules, rules); - for (Module::RuleChangeMap::const_iterator delta_it = - entry->rule_changes.begin(); - delta_it != entry->rule_changes.end() && delta_it->first < address; - ++delta_it) { - ConvertCFI(delta_it->second, rules); - } - return rules.forget(); -#endif /* defined(SPS_OS_windows) */ -} - -} // namespace google_breakpad diff --git a/tools/profiler/gecko/local_debug_info_symbolizer.h b/tools/profiler/gecko/local_debug_info_symbolizer.h deleted file mode 100644 index 1c367a6f9afb..000000000000 --- a/tools/profiler/gecko/local_debug_info_symbolizer.h +++ /dev/null @@ -1,45 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#ifndef PROCESSOR_LOCAL_DEBUG_INFO_SYMBOLIZER_H_ -#define PROCESSOR_LOCAL_DEBUG_INFO_SYMBOLIZER_H_ - -#include "google_breakpad/processor/stack_frame_symbolizer.h" - -#include -#include - -namespace google_breakpad { - -class Module; - -class LocalDebugInfoSymbolizer : public StackFrameSymbolizer { - public: - using StackFrameSymbolizer::SymbolizerResult; - LocalDebugInfoSymbolizer(const std::vector& debug_dirs) : - StackFrameSymbolizer(NULL, NULL), - debug_dirs_(debug_dirs) {} - virtual ~LocalDebugInfoSymbolizer(); - - virtual SymbolizerResult FillSourceLineInfo(const CodeModules* modules, - const SystemInfo* system_info, - StackFrame* stack_frame); - - virtual WindowsFrameInfo* FindWindowsFrameInfo(const StackFrame* frame); - - virtual CFIFrameInfo* FindCFIFrameInfo(const StackFrame* frame); - - // Lie to the stackwalker to short-circuit stack-scanning heuristics. - virtual bool HasImplementation() { return false; } - - private: - typedef std::map SymbolMap; - SymbolMap symbols_; - std::vector debug_dirs_; -}; - -} // namespace google_breakpad - -#endif // PROCESSOR_LOCAL_DEBUG_INFO_SYMBOLIZER_H_ diff --git a/tools/profiler/moz.build b/tools/profiler/moz.build index 22eb05a68cfe..8705ffcff7e0 100644 --- a/tools/profiler/moz.build +++ b/tools/profiler/moz.build @@ -45,11 +45,6 @@ if CONFIG['MOZ_ENABLE_PROFILER_SPS']: 'gecko/ThreadResponsiveness.cpp', ] - # This file cannot be built in unified mode because of name clashes with mozglue headers on Android. - SOURCES += [ - 'gecko/local_debug_info_symbolizer.cc', - ] - if CONFIG['OS_TARGET'] in ('Android', 'Linux'): UNIFIED_SOURCES += [ 'lul/AutoObjectMapper.cpp', @@ -65,6 +60,14 @@ if CONFIG['MOZ_ENABLE_PROFILER_SPS']: 'core/platform-linux.cc', 'core/shared-libraries-linux.cc', ] + if not CONFIG['MOZ_CRASHREPORTER']: + SOURCES += [ + '/toolkit/crashreporter/google-breakpad/src/common/linux/elfutils.cc', + '/toolkit/crashreporter/google-breakpad/src/common/linux/file_id.cc', + '/toolkit/crashreporter/google-breakpad/src/common/linux/guid_creator.cc', + '/toolkit/crashreporter/google-breakpad/src/common/linux/linux_libc_support.cc', + '/toolkit/crashreporter/google-breakpad/src/common/linux/memory_mapped_file.cc', + ] if CONFIG['CPU_ARCH'] == 'arm': SOURCES += [ 'core/EHABIStackWalk.cpp', @@ -73,7 +76,6 @@ if CONFIG['MOZ_ENABLE_PROFILER_SPS']: UNIFIED_SOURCES += [ 'core/platform-macos.cc', 'core/shared-libraries-macos.cc', - 'core/shim_mac_dump_syms.mm', ] elif CONFIG['OS_TARGET'] == 'WINNT': SOURCES += [ @@ -93,7 +95,11 @@ if CONFIG['MOZ_ENABLE_PROFILER_SPS']: ] # We need access to Breakpad's getcontext(3) which is suitable for Android - if CONFIG['OS_TARGET'] == 'Android': + if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk': + LOCAL_INCLUDES += [ + '/toolkit/crashreporter/gonk-include', + ] + elif CONFIG['OS_TARGET'] == 'Android': LOCAL_INCLUDES += [ '/toolkit/crashreporter/google-breakpad/src/common/android/include', ] diff --git a/xpcom/threads/ThreadStackHelper.cpp b/xpcom/threads/ThreadStackHelper.cpp index bb3c7e104884..e649bcad6545 100644 --- a/xpcom/threads/ThreadStackHelper.cpp +++ b/xpcom/threads/ThreadStackHelper.cpp @@ -36,12 +36,7 @@ #include #ifdef XP_LINUX -#ifdef ANDROID -// Android NDK doesn't contain ucontext.h; use Breakpad's copy. -# include "common/android/include/sys/ucontext.h" -#else -# include -#endif +#include #include #include #endif diff --git a/xpcom/threads/moz.build b/xpcom/threads/moz.build index ab0721326a96..7417875f7dea 100644 --- a/xpcom/threads/moz.build +++ b/xpcom/threads/moz.build @@ -65,10 +65,16 @@ UNIFIED_SOURCES += [ LOCAL_INCLUDES += [ '../build', '/caps', - '/toolkit/crashreporter/google-breakpad/src', '/tools/profiler', ] +if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk': + # Gonk's bionic doesn't have ucontext.h + LOCAL_INCLUDES += [ + '/toolkit/crashreporter/gonk-include', + ] + + # BHR disabled for Release builds because of bug 965392. # BHR disabled for debug builds because of bug 979069. # BHR disabled on gonk because of bug 1180533